[Python-checkins] cpython (3.5): promote some shifts to unsigned, so as not to invoke undefined behavior
benjamin.peterson
python-checkins at python.org
Tue Sep 6 23:42:29 EDT 2016
https://hg.python.org/cpython/rev/2454feeb5442
changeset: 103206:2454feeb5442
branch: 3.5
parent: 103194:66feda02f2a5
user: Benjamin Peterson <benjamin at python.org>
date: Tue Sep 06 20:40:04 2016 -0700
summary:
promote some shifts to unsigned, so as not to invoke undefined behavior
files:
Objects/unicodeobject.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -4944,7 +4944,7 @@
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 @@
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 @@
}
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 &&
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list