Author: amassari
Date: Tue Sep 28 18:51:54 2010
New Revision: 1002320

URL: http://svn.apache.org/viewvc?rev=1002320&view=rev
Log:
Normalize the attribute values before collapsing whitespace, or the special 
characters used to signal the usage of an entity reference inside an attribute 
value will remain in the value of xsi:type and xsi:nill (XERCESC-1945)

Added:
    xerces/c/branches/xerces-3.1/tests/src/XSTSHarness/regression/XERCESC-1945/
      - copied from r1002312, 
xerces/c/trunk/tests/src/XSTSHarness/regression/XERCESC-1945/
    
xerces/c/branches/xerces-3.1/tests/src/XSTSHarness/regression/XERCESC-1945/test.xml
      - copied unchanged from r1002312, 
xerces/c/trunk/tests/src/XSTSHarness/regression/XERCESC-1945/test.xml
    
xerces/c/branches/xerces-3.1/tests/src/XSTSHarness/regression/XERCESC-1945/test.xsd
      - copied unchanged from r1002312, 
xerces/c/trunk/tests/src/XSTSHarness/regression/XERCESC-1945/test.xsd
Modified:
    xerces/c/branches/xerces-3.1/   (props changed)
    xerces/c/branches/xerces-3.1/src/xercesc/internal/IGXMLScanner2.cpp
    xerces/c/branches/xerces-3.1/src/xercesc/internal/SGXMLScanner.cpp
    xerces/c/branches/xerces-3.1/tests/src/XSTSHarness/regression/Xerces.testSet

Propchange: xerces/c/branches/xerces-3.1/
------------------------------------------------------------------------------
    svn:mergeinfo = /xerces/c/trunk:1002312

Modified: xerces/c/branches/xerces-3.1/src/xercesc/internal/IGXMLScanner2.cpp
URL: 
http://svn.apache.org/viewvc/xerces/c/branches/xerces-3.1/src/xercesc/internal/IGXMLScanner2.cpp?rev=1002320&r1=1002319&r2=1002320&view=diff
==============================================================================
--- xerces/c/branches/xerces-3.1/src/xercesc/internal/IGXMLScanner2.cpp 
(original)
+++ xerces/c/branches/xerces-3.1/src/xercesc/internal/IGXMLScanner2.cpp Tue Sep 
28 18:51:54 2010
@@ -1697,7 +1697,8 @@ void IGXMLScanner::scanRawAttrListforNam
 
                             // normalize the attribute according to schema 
whitespace facet
                             DatatypeValidator* tempDV = 
DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_QNAME);
-                            ((SchemaValidator*) 
fValidator)->normalizeWhiteSpace(tempDV, valuePtr, fXsiType, true);
+                            normalizeAttRawValue(SchemaSymbols::fgXSI_TYPE, 
valuePtr, fXsiType);
+                            ((SchemaValidator*) 
fValidator)->normalizeWhiteSpace(tempDV, fXsiType.getRawBuffer(), fXsiType, 
true);
                             if (!fXsiType.isEmpty()) {
                                 int colonPos = -1;
                                 unsigned int uriId = resolveQName (
@@ -1712,16 +1713,18 @@ void IGXMLScanner::scanRawAttrListforNam
                         else if (XMLString::equals(suffPtr, 
SchemaSymbols::fgATT_NILL))
                         {
                             // normalize the attribute according to schema 
whitespace facet
-                            XMLBuffer& fXsiNil = fBufMgr.bidOnBuffer();
+                            XMLBufBid bbXsi(&fBufMgr);
+                            XMLBuffer& fXsiNil = bbXsi.getBuffer();
+
                             DatatypeValidator* tempDV = 
DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_BOOLEAN);
-                            ((SchemaValidator*) 
fValidator)->normalizeWhiteSpace(tempDV, valuePtr, fXsiNil, true);
+                            normalizeAttRawValue(SchemaSymbols::fgATT_NILL, 
valuePtr, fXsiNil);
+                            ((SchemaValidator*) 
fValidator)->normalizeWhiteSpace(tempDV, fXsiNil.getRawBuffer(), fXsiNil, true);
                             if(XMLString::equals(fXsiNil.getRawBuffer(), 
SchemaSymbols::fgATTVAL_TRUE))
                                 
((SchemaValidator*)fValidator)->setNillable(true);
                             else if(XMLString::equals(fXsiNil.getRawBuffer(), 
SchemaSymbols::fgATTVAL_FALSE))
                                 
((SchemaValidator*)fValidator)->setNillable(false);
                             else
                                 emitError(XMLErrs::InvalidAttValue, 
fXsiNil.getRawBuffer(), valuePtr);
-                            fBufMgr.releaseBuffer(fXsiNil);
                         }
                     }
                 }

Modified: xerces/c/branches/xerces-3.1/src/xercesc/internal/SGXMLScanner.cpp
URL: 
http://svn.apache.org/viewvc/xerces/c/branches/xerces-3.1/src/xercesc/internal/SGXMLScanner.cpp?rev=1002320&r1=1002319&r2=1002320&view=diff
==============================================================================
--- xerces/c/branches/xerces-3.1/src/xercesc/internal/SGXMLScanner.cpp 
(original)
+++ xerces/c/branches/xerces-3.1/src/xercesc/internal/SGXMLScanner.cpp Tue Sep 
28 18:51:54 2010
@@ -3524,7 +3524,8 @@ void SGXMLScanner::scanRawAttrListforNam
 
                         // normalize the attribute according to schema 
whitespace facet
                         DatatypeValidator* tempDV = 
DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_QNAME);
-                        ((SchemaValidator*) 
fValidator)->normalizeWhiteSpace(tempDV, valuePtr, fXsiType, true);
+                        normalizeAttRawValue(SchemaSymbols::fgXSI_TYPE, 
valuePtr, fXsiType);
+                        ((SchemaValidator*) 
fValidator)->normalizeWhiteSpace(tempDV, fXsiType.getRawBuffer(), fXsiType, 
true);
                         if (!fXsiType.isEmpty()) {
                             int colonPos = -1;
                             unsigned int uriId = resolveQName (
@@ -3539,16 +3540,18 @@ void SGXMLScanner::scanRawAttrListforNam
                     else if (XMLString::equals(suffPtr, 
SchemaSymbols::fgATT_NILL))
                     {
                         // normalize the attribute according to schema 
whitespace facet
-                        XMLBuffer& fXsiNil = fBufMgr.bidOnBuffer();
+                        XMLBufBid bbXsi(&fBufMgr);
+                        XMLBuffer& fXsiNil = bbXsi.getBuffer();
+
                         DatatypeValidator* tempDV = 
DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_BOOLEAN);
-                        ((SchemaValidator*) 
fValidator)->normalizeWhiteSpace(tempDV, valuePtr, fXsiNil, true);
+                        normalizeAttRawValue(SchemaSymbols::fgATT_NILL, 
valuePtr, fXsiNil);
+                        ((SchemaValidator*) 
fValidator)->normalizeWhiteSpace(tempDV, fXsiNil.getRawBuffer(), fXsiNil, true);
                         if(XMLString::equals(fXsiNil.getRawBuffer(), 
SchemaSymbols::fgATTVAL_TRUE))
                             ((SchemaValidator*)fValidator)->setNillable(true);
                         else if(XMLString::equals(fXsiNil.getRawBuffer(), 
SchemaSymbols::fgATTVAL_FALSE))
                             ((SchemaValidator*)fValidator)->setNillable(false);
                         else
                             emitError(XMLErrs::InvalidAttValue, 
fXsiNil.getRawBuffer(), valuePtr);
-                        fBufMgr.releaseBuffer(fXsiNil);
                     }
                 }
             }

Modified: 
xerces/c/branches/xerces-3.1/tests/src/XSTSHarness/regression/Xerces.testSet
URL: 
http://svn.apache.org/viewvc/xerces/c/branches/xerces-3.1/tests/src/XSTSHarness/regression/Xerces.testSet?rev=1002320&r1=1002319&r2=1002320&view=diff
==============================================================================
--- 
xerces/c/branches/xerces-3.1/tests/src/XSTSHarness/regression/Xerces.testSet 
(original)
+++ 
xerces/c/branches/xerces-3.1/tests/src/XSTSHarness/regression/Xerces.testSet 
Tue Sep 28 18:51:54 2010
@@ -826,4 +826,20 @@
       <current status="accepted" date="2010-08-09"/>
     </instanceTest>
   </testGroup>
+  <testGroup name="XERCESC-1945">
+    <annotation>
+      <documentation>Whitespace in xsi:type</documentation>
+    </annotation>
+    <documentationReference 
xlink:href="https://issues.apache.org/jira/browse/XERCESC-1945"/>
+    <schemaTest name="XERCESC-1945-1">
+      <schemaDocument xlink:href="./XERCESC-1945/test.xsd"/>
+      <expected validity="valid"/>
+      <current status="accepted" date="2010-09-28"/>
+    </schemaTest>
+    <instanceTest name="XERCESC-1945-2">
+      <instanceDocument xlink:href="./XERCESC-1945/test.xml"/>
+      <expected validity="valid"/>
+      <current status="accepted" date="2010-09-28"/>
+    </instanceTest>
+  </testGroup>
 </testSet>



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to