]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Merged revisions 78183-78184 via svnmerge from
authorMark Dickinson <dickinsm@gmail.com>
Sun, 14 Feb 2010 13:08:35 +0000 (13:08 +0000)
committerMark Dickinson <dickinsm@gmail.com>
Sun, 14 Feb 2010 13:08:35 +0000 (13:08 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r78183 | mark.dickinson | 2010-02-14 12:16:43 +0000 (Sun, 14 Feb 2010) | 1 line

  Silence some 'comparison between signed and unsigned' compiler warnings.
........
  r78184 | mark.dickinson | 2010-02-14 12:31:26 +0000 (Sun, 14 Feb 2010) | 1 line

  Silence more compiler warnings;  fix an instance of potential undefined behaviour from signed overflow.
........

Objects/bytearrayobject.c
Objects/listobject.c

index a634cff27beb0ec2b4c3242da519a047e95f5d64..15b09ba1e75f0d300b80b85393826ee899e65f3e 100644 (file)
@@ -713,7 +713,7 @@ bytes_ass_subscript(PyByteArrayObject *self, PyObject *index, PyObject *values)
                  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,
@@ -721,7 +721,7 @@ bytes_ass_subscript(PyByteArrayObject *self, PyObject *index, PyObject *values)
             }
             /* 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);
@@ -921,13 +921,14 @@ bytes_repr(PyByteArrayObject *self)
     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 = PyUnicode_FromUnicode(NULL, newsize);
     if (v == NULL) {
         return NULL;
index 843df6b0621850cf759da94ab6040ea37ba42582..9f35d9d06632647246d79c7ecfd03624d6f038bb 100644 (file)
@@ -126,11 +126,11 @@ PyList_New(Py_ssize_t size)
                PyErr_BadInternalCall();
                return NULL;
        }
-       nbytes = size * sizeof(PyObject *);
        /* Check for overflow without an actual overflow,
         *  which can cause compiler to optimise out */
-       if (size > PY_SIZE_MAX / sizeof(PyObject *))
+       if ((size_t)size > PY_SIZE_MAX / sizeof(PyObject *))
                return PyErr_NoMemory();
+       nbytes = size * sizeof(PyObject *);
        if (numfree) {
                numfree--;
                op = free_list[numfree];
@@ -1426,7 +1426,7 @@ merge_getmem(MergeState *ms, Py_ssize_t need)
         * we don't care what's in the block.
         */
        merge_freemem(ms);
-       if (need > PY_SSIZE_T_MAX / sizeof(PyObject*)) {
+       if ((size_t)need > PY_SSIZE_T_MAX / sizeof(PyObject*)) {
                PyErr_NoMemory();
                return -1;
        }
@@ -2616,7 +2616,8 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
                                step = -step;
                        }
 
-                       assert(slicelength <= PY_SIZE_MAX / sizeof(PyObject*));
+                       assert((size_t)slicelength <=
+                              PY_SIZE_MAX / sizeof(PyObject*));
 
                        garbage = (PyObject**)
                                PyMem_MALLOC(slicelength*sizeof(PyObject*));
@@ -2632,13 +2633,13 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
                           and then tail end of the list that was not
                           covered by the slice */
                        for (cur = start, i = 0;
-                            cur < stop;
+                            cur < (size_t)stop;
                             cur += step, i++) {
                                Py_ssize_t lim = step - 1;
 
                                garbage[i] = PyList_GET_ITEM(self, cur);
 
-                               if (cur + step >= Py_SIZE(self)) {
+                               if (cur + step >= (size_t)Py_SIZE(self)) {
                                        lim = Py_SIZE(self) - cur - 1;
                                }
 
@@ -2647,7 +2648,7 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
                                        lim * sizeof(PyObject *));
                        }
                        cur = start + slicelength*step;
-                       if (cur < Py_SIZE(self)) {
+                       if (cur < (size_t)Py_SIZE(self)) {
                                memmove(self->ob_item + cur - slicelength,
                                        self->ob_item + cur,
                                        (Py_SIZE(self) - cur) *