Initialize m_dtd member in ValidateDTD class as NULL #1751
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.
In case of using GCC (and also libxml2 is used), the m_dtd just declared, but not initialized - GCC initialized it as NON NULL pointer. When destructor called, it checks the m_dtd, and if it's not NULL, calls xmlFreeDtd. The result is a segfault:
The expected behavior would be:
This patch prevents the segfault when the DTD is not found.
Note, that I've started the regression_test from the ROOT of ModSecurity source tree, then this check reproducable. If you go to src/ModSecurity/test, and the command is just "./regression_test test-cases/regression/config-xml_external_entity.json", then the test exits normally with passes of all tests.
Even so, it would be better to avoid the segfault...
Also note, that in case of using CLANG, the problem is not reproducible - perhaps CLANG initializes the member as NULL automatically.