]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/i18n/unesctrn.cpp
ICU-59117.0.1.tar.gz
[apple/icu.git] / icuSources / i18n / unesctrn.cpp
index 45ced8b1e9b7870f7cda55833bda67b230b57620..86c55d138b0c80ee45ff0d4a6b51a93d7ba8736a 100644 (file)
@@ -1,6 +1,8 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
 /*
  **********************************************************************
- *   Copyright (c) 2001-2004, International Business Machines
+ *   Copyright (c) 2001-2011, International Business Machines
  *   Corporation and others.  All Rights Reserved.
  **********************************************************************
  *   Date        Name        Description
@@ -13,6 +15,7 @@
 #if !UCONFIG_NO_TRANSLITERATION
 
 #include "unicode/uchar.h"
+#include "unicode/utf16.h"
 #include "unesctrn.h"
 #include "util.h"
 
@@ -82,7 +85,10 @@ static UChar* copySpec(const UChar* spec) {
     }
     ++len;
     UChar *result = (UChar *)uprv_malloc(len*sizeof(UChar));
-    uprv_memcpy(result, spec, len*sizeof(result[0]));
+    // Check for memory allocation error. 
+    if (result != NULL) {
+       uprv_memcpy(result, spec, (size_t)len*sizeof(result[0]));
+    }
     return result;
 }
 
@@ -226,7 +232,7 @@ void UnescapeTransliterator::handleTransliterate(Replaceable& text, UTransPositi
                     if (digit < 0) {
                         break;
                     }
-                    s += UTF_CHAR_LENGTH(ch);
+                    s += U16_LENGTH(ch);
                     u = (u * radix) + digit;
                     if (++digitCount == maxDigits) {
                         break;
@@ -270,7 +276,7 @@ void UnescapeTransliterator::handleTransliterate(Replaceable& text, UTransPositi
         }
 
         if (start < limit) {
-            start += UTF_CHAR_LENGTH(text.char32At(start));
+            start += U16_LENGTH(text.char32At(start));
         }
     }