]> granicus.if.org Git - icu/commitdiff
ICU-12766 fix buffer size
authorSteven R. Loomis <srl@icu-project.org>
Wed, 15 Mar 2017 23:48:54 +0000 (23:48 +0000)
committerSteven R. Loomis <srl@icu-project.org>
Wed, 15 Mar 2017 23:48:54 +0000 (23:48 +0000)
X-SVN-Rev: 39831

icu4c/source/tools/escapesrc/escapesrc.cpp

index b249587f9b70adaeb4d91674f1972a0a9feae970..68845d51a6de17538fe279f1adb93cd1fe509868 100644 (file)
@@ -107,7 +107,7 @@ inline bool isCommentOrEmpty(const char* line, size_t len) {
 
 void appendByte(std::string &outstr,
                 uint8_t byte) {
-    char tmp2[4];
+    char tmp2[5];
     sprintf(tmp2, "\\x%02X", 0xFF & (int)(byte));
     outstr += tmp2;
 }
@@ -124,8 +124,9 @@ bool appendUtf8(std::string &outstr,
     tmp[i] = linestr[++pos];
   }
   tmp[chars] = 0;
-  UChar32 ch;
-  sscanf(tmp, "%X", &ch);
+  unsigned int c;
+  sscanf(tmp, "%X", &c);
+  UChar32 ch = c & 0x1FFFFF; 
 
   // now to append \\x%% etc
   uint8_t bytesNeeded = U8_LENGTH(ch);
@@ -251,9 +252,9 @@ bool fixAt(std::string &linestr, size_t pos) {
 
       size_t seqLen = (i-pos);
 
-      //printf("U+%04X pos %d [len %d]\n", c, pos, seqLen);
+      //printf("U+%04X pos %d [len %d]\n", c, pos, seqLen);fflush(stdout);
 
-      char newSeq[] = "\\U0000FFFD";
+      char newSeq[20];
       if( c <= 0xFFFF) {
         sprintf(newSeq, "\\u%04X", c);
       } else {