From 33d2a492d0c0c29f526fae1e0f164fe14864cc2e Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 6 Sep 2016 20:40:04 -0700 Subject: [PATCH] promote some shifts to unsigned, so as not to invoke undefined behavior --- Objects/unicodeobject.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 1fcc83e63a3..af045646c84 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 &&