From bb412625b32c2c7ed584036b307517def4c78312 Mon Sep 17 00:00:00 2001
From: Neil Graham <neilg@apache.org>
Date: Sun, 31 Aug 2003 18:10:08 +0000
Subject: [PATCH] Fix for bug 21990.  Thanks to Shin'ya Morino.

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@175181 13f79535-47bb-0310-9956-ffa450edef68
---
 src/xercesc/util/Transcoders/ICU/ICUTransService.cpp | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp b/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp
index 63f0fe45f..9b3b8be16 100644
--- a/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp
+++ b/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp
@@ -907,7 +907,7 @@ char* ICULCPTranscoder::transcode(const XMLCh* const toTranscode)
     }
 
     // If targetLen is not enough then buffer overflow might occur
-    if (err == U_BUFFER_OVERFLOW_ERROR)
+    if ((err == U_BUFFER_OVERFLOW_ERROR) || (err == U_STRING_NOT_TERMINATED_WARNING))
     {
         //
         //  Reset the error, delete the old buffer, allocate a new one,
@@ -936,8 +936,6 @@ char* ICULCPTranscoder::transcode(const XMLCh* const toTranscode)
         return 0;
     }
 
-    // Cap it off and return
-    retBuf[targetCap] = 0;
     return retBuf;
 }
 
@@ -1010,7 +1008,7 @@ char* ICULCPTranscoder::transcode(const XMLCh* const toTranscode,
     }
 
     // If targetLen is not enough then buffer overflow might occur
-    if (err == U_BUFFER_OVERFLOW_ERROR)
+    if ((err == U_BUFFER_OVERFLOW_ERROR) || (err == U_STRING_NOT_TERMINATED_WARNING))
     {
         //
         //  Reset the error, delete the old buffer, allocate a new one,
@@ -1039,8 +1037,6 @@ char* ICULCPTranscoder::transcode(const XMLCh* const toTranscode,
         return 0;
     }
 
-    // Cap it off and return
-    retBuf[targetCap] = 0;
     return retBuf;
 }
 
-- 
GitLab