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]

Reply via email to