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]

Reply via email to