]> 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 12:53:32 +0000 (12:53 +0000)
committerMark Dickinson <dickinsm@gmail.com>
Sun, 14 Feb 2010 12:53:32 +0000 (12:53 +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 42f1ed6e6f436c0d1483dcf248ebcf9e473740c0..8f833d8efdd496bcf29f8db85c9c3d4f0cf9a1d3 100644 (file)
@@ -656,7 +656,7 @@ bytearray_ass_subscript(PyByteArrayObject *self, PyObject *index, PyObject *valu
                  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,
@@ -664,7 +664,7 @@ bytearray_ass_subscript(PyByteArrayObject *self, PyObject *index, PyObject *valu
             }
             /* 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);
@@ -844,13 +844,14 @@ bytearray_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 a97d47506f64c098c607a9937e83890fda498054..88e22911f0dc69031cd51d26477c7df266b6f51e 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];
@@ -1343,7 +1343,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;
        }
@@ -2456,7 +2456,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*));
@@ -2472,13 +2473,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;
                                }
 
@@ -2487,7 +2488,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) *