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: v2.7.13rc1~164 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=89f676f30c63f1805bc3a9e9aff4fc6f0419f959;p=python promote some shifts to unsigned, so as not to invoke undefined behavior --- diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 151ce3c558..ca609a96ae 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -2308,7 +2308,7 @@ PyUnicode_DecodeUTF32Stateful(const char *s, stream as-is (giving a ZWNBSP character). */ if (bo == 0) { if (size >= 4) { - const Py_UCS4 bom = (q[iorder[3]] << 24) | (q[iorder[2]] << 16) | + const Py_UCS4 bom = ((unsigned int)q[iorder[3]] << 24) | (q[iorder[2]] << 16) | (q[iorder[1]] << 8) | q[iorder[0]]; #ifdef BYTEORDER_IS_LITTLE_ENDIAN if (bom == 0x0000FEFF) { @@ -2378,7 +2378,7 @@ PyUnicode_DecodeUTF32Stateful(const char *s, /* The remaining input chars are ignored if the callback chooses to skip the input */ } - ch = (q[iorder[3]] << 24) | (q[iorder[2]] << 16) | + ch = ((unsigned int)q[iorder[3]] << 24) | (q[iorder[2]] << 16) | (q[iorder[1]] << 8) | q[iorder[0]]; if (ch >= 0x110000)