Reviewed by Maciej.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Apr 2005 21:53:58 +0000 (21:53 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Apr 2005 21:53:58 +0000 (21:53 +0000)
        * kjs/ustring.cpp: (KJS::UString::UTF8String): Fix off-by-one error in surrogate pair logic.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@9042 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/ustring.cpp

index 56d71ed7c322f7b09fadb76de3613a35fe5cde3e..c98d0fa83573bae84348ab1378f46838b9059fa3 100644 (file)
@@ -1,3 +1,9 @@
+2005-04-22  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        * kjs/ustring.cpp: (KJS::UString::UTF8String): Fix off-by-one error in surrogate pair logic.
+
 2005-04-22  Darin Adler  <darin@apple.com>
 
         Reviewed by John.
index d7cd5e33e2158e43a8bad381b47ec799ae733175..6748c56010caa7d2ae56978f4ce2f120b2588828 100644 (file)
@@ -1327,7 +1327,7 @@ CString UString::UTF8String() const
     } else if (c < 0x800) {
       *p++ = (char)((c >> 6) | 0xC0); // C0 is the 2-byte flag for UTF-8
       *p++ = (char)((c | 0x80) & 0xBF); // next 6 bits, with high bit set
-    } else if (c >= 0xD800 && c <= 0xDBFF && i < length && d[i+1].uc >= 0xDC00 && d[i+2].uc <= 0xDFFF) {
+    } else if (c >= 0xD800 && c <= 0xDBFF && i < length && d[i+1].uc >= 0xDC00 && d[i+1].uc <= 0xDFFF) {
       unsigned sc = 0x10000 + (((c & 0x3FF) << 10) | (d[i+1].uc & 0x3FF));
       *p++ = (char)((sc >> 18) | 0xF0); // F0 is the 4-byte flag for UTF-8
       *p++ = (char)(((sc >> 12) | 0x80) & 0xBF); // next 6 bits, with high bit set