From: Martin v. Löwis Date: Tue, 26 Jun 2001 22:43:40 +0000 (+0000) Subject: When decoding UTF-16, don't assume that the buffer is in native endianness X-Git-Tag: v2.2a3~1402 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ac93bc250128105ff4c5f2c9d30027dbb0486db7;p=thirdparty%2FPython%2Fcpython.git When decoding UTF-16, don't assume that the buffer is in native endianness when checking surrogates. --- diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 7dc370a48d42..ffac3710df40 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -1065,16 +1065,16 @@ PyObject *PyUnicode_DecodeUTF16(const char *s, errmsg = "unexpected end of data"; goto utf16Error; } - if (0xDC00 <= *q && *q <= 0xDFFF) { + if (0xD800 <= ch && ch <= 0xDBFF) { Py_UCS2 ch2 = *q++; #ifdef BYTEORDER_IS_LITTLE_ENDIAN if (bo == 1) - ch = (ch >> 8) | (ch << 8); + ch2 = (ch2 >> 8) | (ch2 << 8); #else if (bo == -1) - ch = (ch >> 8) | (ch << 8); + ch2 = (ch2 >> 8) | (ch2 << 8); #endif - if (0xD800 <= ch && ch <= 0xDBFF) { + if (0xDC00 <= ch2 && ch2 <= 0xDFFF) { #if Py_UNICODE_SIZE == 2 /* This is valid data (a UTF-16 surrogate pair), but we are not able to store this information since our