Author: amassari
Date: Sun Feb 24 18:32:24 2013
New Revision: 1449525
URL: http://svn.apache.org/r1449525
Log:
TranscodeToStr failed to expand buffer (XERCESC-1984)
Modified:
xerces/c/trunk/src/xercesc/util/TransService.cpp
xerces/c/trunk/tests/src/DOM/DOMTest/DTest.cpp
Modified: xerces/c/trunk/src/xercesc/util/TransService.cpp
URL:
http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/util/TransService.cpp?rev=1449525&r1=1449524&r2=1449525&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/TransService.cpp (original)
+++ xerces/c/trunk/src/xercesc/util/TransService.cpp Sun Feb 24 18:32:24 2013
@@ -623,7 +623,7 @@ void TranscodeToStr::transcode(const XML
charsDone += charsRead;
- if((allocSize - fBytesWritten) < (len - charsDone))
+ if((allocSize - fBytesWritten) < ((len - charsDone) * sizeof(XMLCh)))
{
allocSize *= 2;
XMLByte *newBuf = (XMLByte*)fMemoryManager->allocate(allocSize);
Modified: xerces/c/trunk/tests/src/DOM/DOMTest/DTest.cpp
URL:
http://svn.apache.org/viewvc/xerces/c/trunk/tests/src/DOM/DOMTest/DTest.cpp?rev=1449525&r1=1449524&r2=1449525&view=diff
==============================================================================
--- xerces/c/trunk/tests/src/DOM/DOMTest/DTest.cpp (original)
+++ xerces/c/trunk/tests/src/DOM/DOMTest/DTest.cpp Sun Feb 24 18:32:24 2013
@@ -6041,5 +6041,25 @@ bool DOMTest::testUtilFunctions()
XMLString::release(&uc);
XMLString::release(&uc2);
+ XMLCh uc3[] = { 0x6B65, 0 }; // Unicode Han Character 'step, pace;
walk, stroll' (U+6B65); UTF-8 = 0xE6 0xAD 0xA5 (e6ada5)
+ char* uc4 = (char*)TranscodeToStr(uc3, utf8).adopt();
+ if(!XMLString::equals(uc4, "\xE6\xAD\xA5"))
+ {
+ fprintf(stderr, "TranscodeToStr failed at line %i\n", __LINE__);
+ OK = false;
+ }
+ XMLString::release(&uc4);
+
+ // Input: U+7D5E U+308A U+8FBC U+307F U+691C U+7D22
+ // Expected byte sequence: E7 B5 9E E3 82 8A E8 BE BC E3 81 BF E6 A4
9C E7 B4 A2
+ const XMLCh xmlStr [] = { 0x7D5E, 0x308A, 0x8FBC, 0x307F, 0x691C,
0x7D22, 0x0000};
+ char* bytes = (char*)TranscodeToStr(xmlStr, "UTF-8").adopt();
+ if(!XMLString::equals(bytes,
"\xE7\xB5\x9E\xE3\x82\x8A\xE8\xBE\xBC\xE3\x81\xBF\xE6\xA4\x9C\xE7\xB4\xA2"))
+ {
+ fprintf(stderr, "TranscodeToStr failed at line %i\n", __LINE__);
+ OK = false;
+ }
+ XMLString::release(&bytes);
+
return OK;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]