Author: amassari
Date: Tue Sep 28 18:33:53 2010
New Revision: 1002312
URL: http://svn.apache.org/viewvc?rev=1002312&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/trunk/tests/src/XSTSHarness/regression/XERCESC-1945/
xerces/c/trunk/tests/src/XSTSHarness/regression/XERCESC-1945/test.xml
xerces/c/trunk/tests/src/XSTSHarness/regression/XERCESC-1945/test.xsd
Modified:
xerces/c/trunk/src/xercesc/internal/IGXMLScanner2.cpp
xerces/c/trunk/src/xercesc/internal/SGXMLScanner.cpp
xerces/c/trunk/tests/src/XSTSHarness/regression/Xerces.testSet
Modified: xerces/c/trunk/src/xercesc/internal/IGXMLScanner2.cpp
URL:
http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/internal/IGXMLScanner2.cpp?rev=1002312&r1=1002311&r2=1002312&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/internal/IGXMLScanner2.cpp (original)
+++ xerces/c/trunk/src/xercesc/internal/IGXMLScanner2.cpp Tue Sep 28 18:33:53
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/trunk/src/xercesc/internal/SGXMLScanner.cpp
URL:
http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/internal/SGXMLScanner.cpp?rev=1002312&r1=1002311&r2=1002312&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/internal/SGXMLScanner.cpp (original)
+++ xerces/c/trunk/src/xercesc/internal/SGXMLScanner.cpp Tue Sep 28 18:33:53
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);
}
}
}
Added: xerces/c/trunk/tests/src/XSTSHarness/regression/XERCESC-1945/test.xml
URL:
http://svn.apache.org/viewvc/xerces/c/trunk/tests/src/XSTSHarness/regression/XERCESC-1945/test.xml?rev=1002312&view=auto
==============================================================================
--- xerces/c/trunk/tests/src/XSTSHarness/regression/XERCESC-1945/test.xml
(added)
+++ xerces/c/trunk/tests/src/XSTSHarness/regression/XERCESC-1945/test.xml Tue
Sep 28 18:33:53 2010
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<p xsi:type=" 	Person "
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="test.xsd">
+ <name>John Doe</name>
+</p>
+
Added: xerces/c/trunk/tests/src/XSTSHarness/regression/XERCESC-1945/test.xsd
URL:
http://svn.apache.org/viewvc/xerces/c/trunk/tests/src/XSTSHarness/regression/XERCESC-1945/test.xsd?rev=1002312&view=auto
==============================================================================
--- xerces/c/trunk/tests/src/XSTSHarness/regression/XERCESC-1945/test.xsd
(added)
+++ xerces/c/trunk/tests/src/XSTSHarness/regression/XERCESC-1945/test.xsd Tue
Sep 28 18:33:53 2010
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:complexType name="Person">
+ <xsd:sequence>
+ <xsd:element name="name"/>
+ </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema>
+
Modified: xerces/c/trunk/tests/src/XSTSHarness/regression/Xerces.testSet
URL:
http://svn.apache.org/viewvc/xerces/c/trunk/tests/src/XSTSHarness/regression/Xerces.testSet?rev=1002312&r1=1002311&r2=1002312&view=diff
==============================================================================
--- xerces/c/trunk/tests/src/XSTSHarness/regression/Xerces.testSet (original)
+++ xerces/c/trunk/tests/src/XSTSHarness/regression/Xerces.testSet Tue Sep 28
18:33:53 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]