Skip to content

Commit d53aac8

Browse files
authored
Merge pull request #160 from Jason-elkins/ignore_dtds
add EntityResolver to ignore externally referenced dtd files
2 parents 9baa76f + 346e0ab commit d53aac8

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

src/KM_xml.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -988,6 +988,15 @@ Kumu::XMLElement::ParseString(const char* document, ui32_t doc_len)
988988
return errorCount > 0 ? false : true;
989989
}
990990

991+
992+
class IgnoreDTDResolver : public xercesc::EntityResolver {
993+
public:
994+
InputSource* resolveEntity(const XMLCh* const, const XMLCh* const) override {
995+
static const XMLByte dummy[] = "";
996+
return new xercesc::MemBufInputSource(dummy, 0, "dummy-dtd", false);
997+
}
998+
};
999+
9911000
//
9921001
bool
9931002
Kumu::XMLElement::ParseFirstFromString(const char* document, ui32_t doc_len)
@@ -1002,14 +1011,18 @@ Kumu::XMLElement::ParseFirstFromString(const char* document, ui32_t doc_len)
10021011
int errorCount = 0;
10031012
SAXParser* parser = new SAXParser();
10041013

1005-
parser->setValidationScheme(SAXParser::Val_Always);
1014+
parser->setValidationScheme(SAXParser::Val_Never);
10061015
parser->setDoNamespaces(true); // optional
10071016

10081017
MyTreeHandler* docHandler = new MyTreeHandler(this);
10091018
parser->setDocumentHandler(docHandler);
10101019
parser->setErrorHandler(docHandler);
10111020
XMLPScanToken token;
10121021

1022+
// Ignore references to DTD files
1023+
IgnoreDTDResolver resolver;
1024+
parser->setEntityResolver(&resolver);
1025+
10131026
try
10141027
{
10151028
MemBufInputSource xmlSource(reinterpret_cast<const XMLByte*>(document),

0 commit comments

Comments
 (0)