peiyongz 2004/05/25 11:10:33
Modified: c/src/xercesc/validators/schema TraverseSchema.cpp
TraverseSchema.hpp
Log:
XML1.0 3rd: 4.2.2 ...Since escaping is not always a fully reversible process,
it must be performed only when absolutely necessary and as late as possible
in a processing chain...
Revision Changes Path
1.114 +10 -3 xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp
Index: TraverseSchema.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp,v
retrieving revision 1.113
retrieving revision 1.114
diff -u -r1.113 -r1.114
--- TraverseSchema.cpp 22 Apr 2004 10:47:21 -0000 1.113
+++ TraverseSchema.cpp 25 May 2004 18:10:32 -0000 1.114
@@ -94,6 +94,7 @@
#include <xercesc/dom/impl/XSDElementNSImpl.hpp>
#include <xercesc/util/OutOfMemoryException.hpp>
#include <xercesc/util/XMLEntityResolver.hpp>
+#include <xercesc/util/XMLUri.hpp>
#include <xercesc/framework/psvi/XSAnnotation.hpp>
XERCES_CPP_NAMESPACE_BEGIN
@@ -6495,7 +6496,7 @@
InputSource* srcToFill = 0;
XMLCh* normalizedURI = 0;
if (loc) {
- normalizeURI(loc, fBuffer);
+ XMLString::removeChar(loc, 0xFFFF, fBuffer);
normalizedURI = fBuffer.getRawBuffer();
}
@@ -6515,11 +6516,17 @@
(urlTmp.isRelative()))
{
if (!fScanner->getStandardUriConformant())
+ {
+ XMLCh* tempURI = XMLString::replicate(normalizedURI, fMemoryManager);
+ ArrayJanitor<XMLCh> tempURIName(tempURI, fMemoryManager);
+ XMLUri::normalizeURI(tempURI, fBuffer);
+
srcToFill = new (fMemoryManager) LocalFileInputSource
( fSchemaInfo->getCurrentSchemaURL()
- , normalizedURI
+ , fBuffer.getRawBuffer()
, fMemoryManager
);
+ }
else
ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
}
1.34 +1 -31 xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.hpp
Index: TraverseSchema.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.hpp,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- TraverseSchema.hpp 29 Jan 2004 11:52:31 -0000 1.33
+++ TraverseSchema.hpp 25 May 2004 18:10:32 -0000 1.34
@@ -723,10 +723,6 @@
void processAttValue(const XMLCh* const attVal, XMLBuffer& aBuf);
- // Spaces are not allowed in URI, so %20 is used instead.
- // Convert %20 to spaces before resolving the URI
- void normalizeURI(const XMLCh* const systemURI, XMLBuffer& normalizedURI);
-
// -----------------------------------------------------------------------
// Private constants
// -----------------------------------------------------------------------
@@ -947,32 +943,6 @@
for (int i=0; i < redefineCounter; i++) {
newTypeName.append(SchemaSymbols::fgRedefIdentifier);
- }
-}
-
-inline void TraverseSchema::normalizeURI(const XMLCh* const systemURI,
- XMLBuffer& normalizedURI)
-{
- const XMLCh* pszSrc = systemURI;
-
- normalizedURI.reset();
-
- while (*pszSrc) {
-
- if ((*(pszSrc) == chPercent)
- && (*(pszSrc+1) == chDigit_2)
- && (*(pszSrc+2) == chDigit_0))
- {
- pszSrc += 3;
- normalizedURI.append(chSpace);
- }
- else if (*pszSrc == 0xFFFF) { //escaped character
- pszSrc++;
- }
- else {
- normalizedURI.append(*pszSrc);
- pszSrc++;
- }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]