Fix memory leak in ValidateDTD m_dtd #2471
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This pull request addresses the memory leak listed as 3) in #2469 .
The function call in this line of code allocates heap memory. The second and subsequent calls to this function resulted in the the m_dtd pointer simply being assigned a new value, which meant that the heap memory previously pointed-to was leaked on a per-transaction basis.
With this new code, before the new parse-and-assign, we'll check if m_dtd is not null, and if so do the proper cleanup.
(I have addressed the leak in this pull request, but a larger issue we may want to consider for later implementation: Do we really want to be calling xmlParseDTD for every transaction? Granted, if we only want to do this once rather than per-transaction, we would need to consider the use case where the resource content changes over time -- particularly if it is an internet resource. We could decide we don't care, or perhaps adopt a cacheing-and-periodic-update strategy)