Author: scantor
Date: Tue Jun 27 02:40:16 2017
New Revision: 1800006
URL: http://svn.apache.org/viewvc?rev=1800006&view=rev
Log:
XERCESC-2070 - Support disallow-doctype DOMLS property
Modified:
xerces/c/trunk/src/xercesc/dom/DOMLSParser.hpp
xerces/c/trunk/src/xercesc/internal/XMLScanner.cpp
xerces/c/trunk/src/xercesc/internal/XMLScanner.hpp
xerces/c/trunk/src/xercesc/parsers/DOMLSParserImpl.cpp
Modified: xerces/c/trunk/src/xercesc/dom/DOMLSParser.hpp
URL:
http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/dom/DOMLSParser.hpp?rev=1800006&r1=1800005&r2=1800006&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/dom/DOMLSParser.hpp (original)
+++ xerces/c/trunk/src/xercesc/dom/DOMLSParser.hpp Tue Jun 27 02:40:16 2017
@@ -162,11 +162,11 @@ public:
* protocols.
*
* "disallow-doctype"
- * true [optional]
+ * true
* Throw a fatal "doctype-not-allowed" error if a doctype node is
found while
* parsing the document. This is useful when dealing with things
like SOAP
* envelopes where doctype nodes are not allowed.
- * false [required] (default)
+ * false (default)
* Allow doctype nodes in the document.
*
* "ignore-unknown-character-denormalizations"
Modified: xerces/c/trunk/src/xercesc/internal/XMLScanner.cpp
URL:
http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/internal/XMLScanner.cpp?rev=1800006&r1=1800005&r2=1800006&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/internal/XMLScanner.cpp (original)
+++ xerces/c/trunk/src/xercesc/internal/XMLScanner.cpp Tue Jun 27 02:40:16 2017
@@ -1272,7 +1272,7 @@ void XMLScanner::scanProlog()
}
const char* envvar = getenv("XERCES_DISABLE_DTD");
- if (envvar && !strcmp(envvar, "1")) {
+ if (fDisallowDTD || (envvar && !strcmp(envvar, "1"))) {
emitError(XMLErrs::InvalidDocumentStructure);
}
else {
Modified: xerces/c/trunk/src/xercesc/internal/XMLScanner.hpp
URL:
http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/internal/XMLScanner.hpp?rev=1800006&r1=1800005&r2=1800006&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/internal/XMLScanner.hpp (original)
+++ xerces/c/trunk/src/xercesc/internal/XMLScanner.hpp Tue Jun 27 02:40:16 2017
@@ -261,6 +261,7 @@ public :
XMLCh* getExternalSchemaLocation() const;
XMLCh* getExternalNoNamespaceSchemaLocation() const;
SecurityManager* getSecurityManager() const;
+ bool getDisallowDTD() const;
bool getLoadExternalDTD() const;
bool getLoadSchema() const;
bool getNormalizeData() const;
@@ -375,6 +376,7 @@ public :
void setExternalSchemaLocation(const char* const schemaLocation);
void setExternalNoNamespaceSchemaLocation(const char* const
noNamespaceSchemaLocation);
void setSecurityManager(SecurityManager* const securityManager);
+ void setDisallowDTD(const bool disallowDTD);
void setLoadExternalDTD(const bool loadDTD);
void setLoadSchema(const bool loadSchema);
void setNormalizeData(const bool normalizeData);
@@ -721,6 +723,9 @@ protected:
// The number of general entities expanded so far in this document.
// Only meaningful when fSecurityManager != null
//
+ // fDisallowDTD
+ // This flag indicates whether the presence of a DTD should be fatal
+ //
// fLoadExternalDTD
// This flag indicates whether the external DTD be loaded or not
//
@@ -772,6 +777,7 @@ protected:
bool fIdentityConstraintChecking;
bool fToCacheGrammar;
bool fUseCachedGrammar;
+ bool fDisallowDTD;
bool fLoadExternalDTD;
bool fLoadSchema;
bool fNormalizeData;
@@ -1070,6 +1076,11 @@ inline SecurityManager* XMLScanner::getS
return fSecurityManager;
}
+inline bool XMLScanner::getDisallowDTD() const
+{
+ return fDisallowDTD;
+}
+
inline bool XMLScanner::getLoadExternalDTD() const
{
return fLoadExternalDTD;
@@ -1302,6 +1313,11 @@ inline void XMLScanner::setSecurityManag
}
}
+inline void XMLScanner::setDisallowDTD(const bool disallowDTD)
+{
+ fDisallowDTD = disallowDTD;
+}
+
inline void XMLScanner::setLoadExternalDTD(const bool loadDTD)
{
fLoadExternalDTD = loadDTD;
Modified: xerces/c/trunk/src/xercesc/parsers/DOMLSParserImpl.cpp
URL:
http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/parsers/DOMLSParserImpl.cpp?rev=1800006&r1=1800005&r2=1800006&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/parsers/DOMLSParserImpl.cpp (original)
+++ xerces/c/trunk/src/xercesc/parsers/DOMLSParserImpl.cpp Tue Jun 27 02:40:16
2017
@@ -257,7 +257,7 @@ void DOMLSParserImpl::setParameter(const
}
else if (XMLString::compareIStringASCII(name,
XMLUni::fgDOMDisallowDoctype) == 0)
{
- // TODO
+ getScanner()->setDisallowDTD(state);
}
else if (XMLString::compareIStringASCII(name,
XMLUni::fgDOMIgnoreUnknownCharacterDenormalization) == 0)
{
@@ -445,8 +445,7 @@ const void* DOMLSParserImpl::getParamete
}
else if (XMLString::compareIStringASCII(name,
XMLUni::fgDOMDisallowDoctype) == 0)
{
- // TODO
- return 0;
+ return (void*)getScanner()->getDisallowDTD();
}
else if (XMLString::compareIStringASCII(name,
XMLUni::fgDOMIgnoreUnknownCharacterDenormalization) == 0)
{
@@ -666,6 +665,7 @@ bool DOMLSParserImpl::canSetParameter(co
bool DOMLSParserImpl::canSetParameter(const XMLCh* name, bool value) const
{
if (XMLString::compareIStringASCII(name,
XMLUni::fgDOMCharsetOverridesXMLEncoding) == 0 ||
+ XMLString::compareIStringASCII(name, XMLUni::fgDOMDisallowDoctype) ==
0 ||
XMLString::compareIStringASCII(name, XMLUni::fgDOMNamespaces) == 0 ||
XMLString::compareIStringASCII(name, XMLUni::fgDOMValidate) == 0 ||
XMLString::compareIStringASCII(name, XMLUni::fgDOMValidateIfSchema) ==
0 ||
@@ -695,8 +695,7 @@ bool DOMLSParserImpl::canSetParameter(co
XMLString::compareIStringASCII(name,
XMLUni::fgXercesDoXInclude) == 0 ||
XMLString::compareIStringASCII(name,
XMLUni::fgXercesHandleMultipleImports) == 0)
return true;
- else if(XMLString::compareIStringASCII(name, XMLUni::fgDOMDisallowDoctype)
== 0 ||
- XMLString::compareIStringASCII(name,
XMLUni::fgDOMIgnoreUnknownCharacterDenormalization) == 0 ||
+ else if(XMLString::compareIStringASCII(name,
XMLUni::fgDOMIgnoreUnknownCharacterDenormalization) == 0 ||
XMLString::compareIStringASCII(name, XMLUni::fgDOMCanonicalForm)
== 0 ||
XMLString::compareIStringASCII(name, XMLUni::fgDOMCDATASections)
== 0 ||
XMLString::compareIStringASCII(name,
XMLUni::fgDOMCheckCharacterNormalization) == 0 ||
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]