From: Benjamin Peterson Date: Wed, 7 Sep 2016 03:40:04 +0000 (-0700) Subject: promote some shifts to unsigned, so as not to invoke undefined behavior X-Git-Tag: v3.6.0b1~361^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=33d2a492d0c0c29f526fae1e0f164fe14864cc2e;p=thirdparty%2FPython%2Fcpython.git promote some shifts to unsigned, so as not to invoke undefined behavior --- diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 1fcc83e63a32..af045646c84a 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -4944,7 +4944,7 @@ PyUnicode_DecodeUTF32Stateful(const char *s, mark is skipped, in all other modes, it is copied to the output stream as-is (giving a ZWNBSP character). */ if (bo == 0 && size >= 4) { - Py_UCS4 bom = (q[3] << 24) | (q[2] << 16) | (q[1] << 8) | q[0]; + Py_UCS4 bom = ((unsigned int)q[3] << 24) | (q[2] << 16) | (q[1] << 8) | q[0]; if (bom == 0x0000FEFF) { bo = -1; q += 4; @@ -4986,7 +4986,7 @@ PyUnicode_DecodeUTF32Stateful(const char *s, Py_ssize_t pos = writer.pos; if (le) { do { - ch = (q[3] << 24) | (q[2] << 16) | (q[1] << 8) | q[0]; + ch = ((unsigned int)q[3] << 24) | (q[2] << 16) | (q[1] << 8) | q[0]; if (ch > maxch) break; if (kind != PyUnicode_1BYTE_KIND && @@ -4998,7 +4998,7 @@ PyUnicode_DecodeUTF32Stateful(const char *s, } else { do { - ch = (q[0] << 24) | (q[1] << 16) | (q[2] << 8) | q[3]; + ch = ((unsigned int)q[0] << 24) | (q[1] << 16) | (q[2] << 8) | q[3]; if (ch > maxch) break; if (kind != PyUnicode_1BYTE_KIND &&