[Python-checkins] r78184 - python/trunk/Objects/bytearrayobject.c

mark.dickinson python-checkins at python.org
Sun Feb 14 13:31:26 CET 2010


Author: mark.dickinson
Date: Sun Feb 14 13:31:26 2010
New Revision: 78184
Log:
Silence more compiler warnings; fix an instance of potential undefined behaviour from signed overflow.
Modified:
 python/trunk/Objects/bytearrayobject.c
Modified: python/trunk/Objects/bytearrayobject.c
==============================================================================
--- python/trunk/Objects/bytearrayobject.c	(original)
+++ python/trunk/Objects/bytearrayobject.c	Sun Feb 14 13:31:26 2010
@@ -705,7 +705,7 @@
 i < slicelen; cur += step, i++) {
 Py_ssize_t lim = step - 1;
 
- if (cur + step >= PyByteArray_GET_SIZE(self))
+ if (cur + step >= (size_t)PyByteArray_GET_SIZE(self))
 lim = PyByteArray_GET_SIZE(self) - cur - 1;
 
 memmove(self->ob_bytes + cur - i,
@@ -713,7 +713,7 @@
 }
 /* Move the tail of the bytes, in one chunk */
 cur = start + slicelen*step;
- if (cur < PyByteArray_GET_SIZE(self)) {
+ if (cur < (size_t)PyByteArray_GET_SIZE(self)) {
 memmove(self->ob_bytes + cur - slicelen,
 self->ob_bytes + cur,
 PyByteArray_GET_SIZE(self) - cur);
@@ -915,13 +915,14 @@
 const char *quote_postfix = ")";
 Py_ssize_t length = Py_SIZE(self);
 /* 14 == strlen(quote_prefix) + 2 + strlen(quote_postfix) */
- size_t newsize = 14 + 4 * length;
+ size_t newsize;
 PyObject *v;
- if (newsize > PY_SSIZE_T_MAX || newsize / 4 - 3 != length) {
+ if (length > (PY_SSIZE_T_MAX - 14) / 4) {
 PyErr_SetString(PyExc_OverflowError,
 "bytearray object is too large to make repr");
 return NULL;
 }
+ newsize = 14 + 4 * length;
 v = PyString_FromStringAndSize(NULL, newsize);
 if (v == NULL) {
 return NULL;


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /