Author: amassari
Date: Tue Dec 27 10:25:47 2011
New Revision: 1224888

URL: http://svn.apache.org/viewvc?rev=1224888&view=rev
Log:
Don't report a transcoding error if the invalid character is not at the start 
of the buffer, it could be an incomplete buffer (XERCESC-1936)

Modified:
    
xerces/c/branches/xerces-3.1/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp
    
xerces/c/branches/xerces-3.1/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp

Modified: 
xerces/c/branches/xerces-3.1/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp
URL: 
http://svn.apache.org/viewvc/xerces/c/branches/xerces-3.1/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp?rev=1224888&r1=1224887&r2=1224888&view=diff
==============================================================================
--- 
xerces/c/branches/xerces-3.1/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp
 (original)
+++ 
xerces/c/branches/xerces-3.1/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp
 Tue Dec 27 10:25:47 2011
@@ -666,7 +666,7 @@ ICUTranscoder::transcodeTo( const   XMLC
     );
 
     // Rememember the status before we possibly overite the error code
-    const bool res = (err == U_ZERO_ERROR);
+    const bool res = ((err == U_ZERO_ERROR) || (err == U_BUFFER_OVERFLOW_ERROR 
&& startSrc > srcPtr));
 
     // Put the old handler back
     err = U_ZERO_ERROR;

Modified: 
xerces/c/branches/xerces-3.1/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp
URL: 
http://svn.apache.org/viewvc/xerces/c/branches/xerces-3.1/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp?rev=1224888&r1=1224887&r2=1224888&view=diff
==============================================================================
--- 
xerces/c/branches/xerces-3.1/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp
 (original)
+++ 
xerces/c/branches/xerces-3.1/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp
 Tue Dec 27 10:25:47 2011
@@ -1041,7 +1041,7 @@ XMLSize_t    IconvGNUTranscoder::transco
     char    *orgTarget = startTarget;
     size_t    srcLen = srcCount;
     size_t    prevSrcLen = srcLen;
-    unsigned int toReturn = 0;
+    XMLSize_t toReturn = 0;
     bytesEaten = 0;
 
     XMLMutexLock lockConverter(&fMutex);
@@ -1049,6 +1049,8 @@ XMLSize_t    IconvGNUTranscoder::transco
     for (size_t cnt = 0; cnt < maxChars && srcLen; cnt++) {
         size_t    rc = iconvFrom(startSrc, &srcLen, &orgTarget, uChSize());
         if (rc == (size_t)-1) {
+            if (errno == EINVAL && cnt > 0)
+                break;
             if (errno != E2BIG || prevSrcLen == srcLen) {
                 ThrowXMLwithMemMgr(TranscodingException, 
XMLExcepts::Trans_BadSrcSeq, getMemoryManager());
             }



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

Reply via email to