Author: amassari
Date: Sat Feb 18 07:26:12 2006
New Revision: 378731
URL: http://svn.apache.org/viewcvs?rev=378731&view=rev
Log:
If an encoding has been forced on a InputSource, ignore a compatible BOM found
in the stream (jira# 1284)
Modified:
xerces/c/branches/xerces-2.7/src/xercesc/framework/XMLRecognizer.cpp
xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLReader.cpp
Modified: xerces/c/branches/xerces-2.7/src/xercesc/framework/XMLRecognizer.cpp
URL:
http://svn.apache.org/viewcvs/xerces/c/branches/xerces-2.7/src/xercesc/framework/XMLRecognizer.cpp?rev=378731&r1=378730&r2=378731&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/framework/XMLRecognizer.cpp
(original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/framework/XMLRecognizer.cpp Sat
Feb 18 07:26:12 2006
@@ -232,6 +232,14 @@
{
return XMLRecognizer::UTF_16B;
}
+ else if (!XMLString::compareString(encName, XMLUni::fgUTF16EncodingString))
+ {
+ #if defined(ENDIANMODE_LITTLE)
+ return XMLRecognizer::UTF_16L;
+ #elif defined(ENDIANMODE_BIG)
+ return XMLRecognizer::UTF_16B;
+ #endif
+ }
else if (!XMLString::compareString(encName, XMLUni::fgUCS4LEncodingString)
|| !XMLString::compareString(encName,
XMLUni::fgUCS4LEncodingString2))
{
@@ -241,6 +249,14 @@
|| !XMLString::compareString(encName,
XMLUni::fgUCS4BEncodingString2))
{
return XMLRecognizer::UCS_4B;
+ }
+ else if (!XMLString::compareString(encName, XMLUni::fgUCS4EncodingString))
+ {
+ #if defined(ENDIANMODE_LITTLE)
+ return XMLRecognizer::UCS_4L;
+ #elif defined(ENDIANMODE_BIG)
+ return XMLRecognizer::UCS_4B;
+ #endif
}
// Return 'other' since we don't recognizer it
Modified: xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLReader.cpp
URL:
http://svn.apache.org/viewcvs/xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLReader.cpp?rev=378731&r1=378730&r2=378731&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLReader.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLReader.cpp Sat Feb 18
07:26:12 2006
@@ -219,6 +219,49 @@
//
fEncoding = XMLRecognizer::encodingForName(fEncodingStr);
+ // test the presence of the BOM and remove it from the source
+ switch(fEncoding)
+ {
+ case XMLRecognizer::UCS_4B :
+ case XMLRecognizer::UCS_4L :
+ {
+ if (fRawBytesAvail > 4 &&
+ ((fRawByteBuf[0] == 0x00) && (fRawByteBuf[1] == 0x00) &&
(fRawByteBuf[2] == 0xFE) && (fRawByteBuf[3] == 0xFF)) ||
+ ((fRawByteBuf[0] == 0xFF) && (fRawByteBuf[1] == 0xFE) &&
(fRawByteBuf[2] == 0x00) && (fRawByteBuf[3] == 0x00)) )
+ {
+ fRawBufIndex += 4;
+ }
+ break;
+ }
+ case XMLRecognizer::UTF_8 :
+ {
+ // Look at the raw buffer as short chars
+ const char* asChars = (const char*)fRawByteBuf;
+
+ if (fRawBytesAvail > XMLRecognizer::fgUTF8BOMLen &&
+ XMLString::compareNString( asChars
+ , XMLRecognizer::fgUTF8BOM
+ , XMLRecognizer::fgUTF8BOMLen) ==
0)
+ {
+ fRawBufIndex += XMLRecognizer::fgUTF8BOMLen;
+ }
+ break;
+ }
+ case XMLRecognizer::UTF_16B :
+ case XMLRecognizer::UTF_16L :
+ {
+ if (fRawBytesAvail < 2)
+ break;
+
+ const UTF16Ch* asUTF16 = (const
UTF16Ch*)&fRawByteBuf[fRawBufIndex];
+ if ((*asUTF16 == chUnicodeMarker) || (*asUTF16 ==
chSwappedUnicodeMarker))
+ {
+ fRawBufIndex += sizeof(UTF16Ch);
+ }
+ break;
+ }
+ }
+
// Check whether the fSwapped flag should be set or not
checkForSwapped();
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]