From 5afccf7bd1b470a1172901665fd5e2d585b4e73c Mon Sep 17 00:00:00 2001 From: Boris Kolpackov <borisk@apache.org> Date: Wed, 18 Nov 2009 07:54:36 +0000 Subject: [PATCH] Load schemas specified with the external schema location properties even if the load-schema property is set to false (XERCESC-1713). git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@881694 13f79535-47bb-0310-9956-ffa450edef68 --- src/xercesc/internal/IGXMLScanner.cpp | 4 ++-- src/xercesc/internal/IGXMLScanner.hpp | 4 ++-- src/xercesc/internal/IGXMLScanner2.cpp | 8 ++++---- src/xercesc/internal/SGXMLScanner.cpp | 12 ++++++------ src/xercesc/internal/SGXMLScanner.hpp | 4 ++-- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/xercesc/internal/IGXMLScanner.cpp b/src/xercesc/internal/IGXMLScanner.cpp index 5fb9187b8..55661fd38 100644 --- a/src/xercesc/internal/IGXMLScanner.cpp +++ b/src/xercesc/internal/IGXMLScanner.cpp @@ -2194,9 +2194,9 @@ bool IGXMLScanner::scanStartTagNS(bool& gotData) && (fExternalSchemaLocation || fExternalNoNamespaceSchemaLocation)) { if (fExternalSchemaLocation) - parseSchemaLocation(fExternalSchemaLocation); + parseSchemaLocation(fExternalSchemaLocation, true); if (fExternalNoNamespaceSchemaLocation) - resolveSchemaGrammar(fExternalNoNamespaceSchemaLocation, XMLUni::fgZeroLenString); + resolveSchemaGrammar(fExternalNoNamespaceSchemaLocation, XMLUni::fgZeroLenString, true); } // Make an initial pass through the list and find any xmlns attributes or diff --git a/src/xercesc/internal/IGXMLScanner.hpp b/src/xercesc/internal/IGXMLScanner.hpp index e0a385293..6361dfd79 100644 --- a/src/xercesc/internal/IGXMLScanner.hpp +++ b/src/xercesc/internal/IGXMLScanner.hpp @@ -155,8 +155,8 @@ private : , const int colonPosition ); void scanRawAttrListforNameSpaces(XMLSize_t attCount); - void parseSchemaLocation(const XMLCh* const schemaLocationStr); - void resolveSchemaGrammar(const XMLCh* const loc, const XMLCh* const uri); + void parseSchemaLocation(const XMLCh* const schemaLocationStr, bool ignoreLoadSchema = false); + void resolveSchemaGrammar(const XMLCh* const loc, const XMLCh* const uri, bool ignoreLoadSchema = false); bool switchGrammar(const XMLCh* const newGrammarNameSpace); bool laxElementValidation(QName* element, ContentLeafNameTypeVector* cv, const XMLContentModel* const cm, diff --git a/src/xercesc/internal/IGXMLScanner2.cpp b/src/xercesc/internal/IGXMLScanner2.cpp index c94e88119..ebbf50a69 100644 --- a/src/xercesc/internal/IGXMLScanner2.cpp +++ b/src/xercesc/internal/IGXMLScanner2.cpp @@ -1683,7 +1683,7 @@ void IGXMLScanner::scanRawAttrListforNameSpaces(XMLSize_t attCount) } } -void IGXMLScanner::parseSchemaLocation(const XMLCh* const schemaLocationStr) +void IGXMLScanner::parseSchemaLocation(const XMLCh* const schemaLocationStr, bool ignoreLoadSchema) { XMLCh* locStr = XMLString::replicate(schemaLocationStr, fMemoryManager); ArrayJanitor<XMLCh> janLoc(locStr, fMemoryManager); @@ -1698,12 +1698,12 @@ void IGXMLScanner::parseSchemaLocation(const XMLCh* const schemaLocationStr) XMLBuffer normalBuf(1023, fMemoryManager); for(XMLSize_t i=0; i<size; i=i+2) { normalizeAttRawValue(SchemaSymbols::fgXSI_SCHEMALOCATION, fLocationPairs->elementAt(i), normalBuf); - resolveSchemaGrammar(fLocationPairs->elementAt(i+1), normalBuf.getRawBuffer()); + resolveSchemaGrammar(fLocationPairs->elementAt(i+1), normalBuf.getRawBuffer(), ignoreLoadSchema); } } } -void IGXMLScanner::resolveSchemaGrammar(const XMLCh* const loc, const XMLCh* const uri) { +void IGXMLScanner::resolveSchemaGrammar(const XMLCh* const loc, const XMLCh* const uri, bool ignoreLoadSchema) { Grammar* grammar = 0; @@ -1715,7 +1715,7 @@ void IGXMLScanner::resolveSchemaGrammar(const XMLCh* const loc, const XMLCh* con if (!grammar || grammar->getGrammarType() == Grammar::DTDGrammarType) { - if (fLoadSchema) + if (fLoadSchema || ignoreLoadSchema) { XSDDOMParser parser(0, fMemoryManager, 0); diff --git a/src/xercesc/internal/SGXMLScanner.cpp b/src/xercesc/internal/SGXMLScanner.cpp index ea3d7cebd..59a02af9e 100644 --- a/src/xercesc/internal/SGXMLScanner.cpp +++ b/src/xercesc/internal/SGXMLScanner.cpp @@ -1167,9 +1167,9 @@ bool SGXMLScanner::scanStartTag(bool& gotData) && (fExternalSchemaLocation || fExternalNoNamespaceSchemaLocation)) { if (fExternalSchemaLocation) - parseSchemaLocation(fExternalSchemaLocation); + parseSchemaLocation(fExternalSchemaLocation, true); if (fExternalNoNamespaceSchemaLocation) - resolveSchemaGrammar(fExternalNoNamespaceSchemaLocation, XMLUni::fgZeroLenString); + resolveSchemaGrammar(fExternalNoNamespaceSchemaLocation, XMLUni::fgZeroLenString, true); } // Make an initial pass through the list and find any xmlns attributes or @@ -3514,7 +3514,7 @@ void SGXMLScanner::scanRawAttrListforNameSpaces(XMLSize_t attCount) } } -void SGXMLScanner::parseSchemaLocation(const XMLCh* const schemaLocationStr) +void SGXMLScanner::parseSchemaLocation(const XMLCh* const schemaLocationStr, bool ignoreLoadSchema) { BaseRefVectorOf<XMLCh>* schemaLocation = XMLString::tokenizeString(schemaLocationStr, fMemoryManager); Janitor<BaseRefVectorOf<XMLCh> > janLoc(schemaLocation); @@ -3527,12 +3527,12 @@ void SGXMLScanner::parseSchemaLocation(const XMLCh* const schemaLocationStr) XMLBuffer normalBuf(1023, fMemoryManager); for(XMLSize_t i=0; i<size; i=i+2) { normalizeAttRawValue(SchemaSymbols::fgXSI_SCHEMALOCATION, schemaLocation->elementAt(i), normalBuf); - resolveSchemaGrammar(schemaLocation->elementAt(i+1), normalBuf.getRawBuffer()); + resolveSchemaGrammar(schemaLocation->elementAt(i+1), normalBuf.getRawBuffer(), ignoreLoadSchema); } } } -void SGXMLScanner::resolveSchemaGrammar(const XMLCh* const loc, const XMLCh* const uri) { +void SGXMLScanner::resolveSchemaGrammar(const XMLCh* const loc, const XMLCh* const uri, bool ignoreLoadSchema) { Grammar* grammar = 0; @@ -3544,7 +3544,7 @@ void SGXMLScanner::resolveSchemaGrammar(const XMLCh* const loc, const XMLCh* con if (!grammar || grammar->getGrammarType() == Grammar::DTDGrammarType) { - if (fLoadSchema) + if (fLoadSchema || ignoreLoadSchema) { XSDDOMParser parser(0, fMemoryManager, 0); diff --git a/src/xercesc/internal/SGXMLScanner.hpp b/src/xercesc/internal/SGXMLScanner.hpp index 05bdd4234..fbdde52a4 100644 --- a/src/xercesc/internal/SGXMLScanner.hpp +++ b/src/xercesc/internal/SGXMLScanner.hpp @@ -236,8 +236,8 @@ private : , XMLBuffer& toFill ); void scanRawAttrListforNameSpaces(XMLSize_t attCount); - void parseSchemaLocation(const XMLCh* const schemaLocationStr); - void resolveSchemaGrammar(const XMLCh* const loc, const XMLCh* const uri); + void parseSchemaLocation(const XMLCh* const schemaLocationStr, bool ignoreLoadSchema = false); + void resolveSchemaGrammar(const XMLCh* const loc, const XMLCh* const uri, bool ignoreLoadSchema = false); bool switchGrammar(const XMLCh* const newGrammarNameSpace); bool anyAttributeValidation(SchemaAttDef* attWildCard, unsigned int uriId, -- GitLab