XMLString::transocde() => ICULCPTranscoder::transcode not terminating string
----------------------------------------------------------------------------

         Key: XERCESC-1300
         URL: http://nagoya.apache.org/jira/browse/XERCESC-1300
     Project: Xerces-C++
        Type: Bug
  Components: Utilities  
    Versions: 2.5.0, 2.6.0    
 Environment: Win32, default codepage was "windows-936-2000", Xerces 2.5 with 
ICU 2.8
    Reporter: Scott Case
    Priority: Minor


Sometimes data doesn't get null terminated when transcoding Chinese characters 
from UTF-16 to windows-936-2000 via "char *XMLString::trancode(XMLCh*)".

What appears to happen is that once the call gets into the function:
"char* ICULCPTranscoder::transcode(const XMLCh* const toTranscode)"
the amount of memory allocated is too small and the first attempt to 
ucnv_fromUChars() fails after which the buffer is enlarged and the transcoding 
is attempted again.  This second call to ucnv_fromUChars() returns 
U_STRING_NOT_TERMINATED_WARNING which is not an error so the overall function 
succeeds but leaves the data unterminated.

The fix is to modify the second call to ucnv_fromUChars as shown below:
ucnv_fromUChars(fConverter,retBuf
            , targetCap   // Change to: targetCap +1
            , actualSrc, -1, &err);

A workaround is to use "bool XMLString::transcode(const XMLCh *const 
toTranscode, char *const toFill, const unsigned int maxChars)" which doesn't 
exhibit this problem.


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://nagoya.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to