[Python-checkins] r78187 - in python/branches/release31-maint: Objects/bytearrayobject.c Objects/listobject.c

mark.dickinson python-checkins at python.org
Sun Feb 14 14:09:30 CET 2010


Author: mark.dickinson
Date: Sun Feb 14 14:09:30 2010
New Revision: 78187

Log:
Merged revisions 78185 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r78185 | mark.dickinson | 2010-02-14 12:53:32 +0000 (Sun, 14 Feb 2010) | 13 lines
  
  Merged revisions 78183-78184 via svnmerge from 
  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.
  ........
................


Modified:
   python/branches/release31-maint/   (props changed)
   python/branches/release31-maint/Objects/bytearrayobject.c
   python/branches/release31-maint/Objects/listobject.c

Modified: python/branches/release31-maint/Objects/bytearrayobject.c
==============================================================================
--- python/branches/release31-maint/Objects/bytearrayobject.c	(original)
+++ python/branches/release31-maint/Objects/bytearrayobject.c	Sun Feb 14 14:09:30 2010
@@ -664,7 +664,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,
@@ -672,7 +672,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);
@@ -852,13 +852,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 = PyUnicode_FromUnicode(NULL, newsize);
     if (v == NULL) {
         return NULL;

Modified: python/branches/release31-maint/Objects/listobject.c
==============================================================================
--- python/branches/release31-maint/Objects/listobject.c	(original)
+++ python/branches/release31-maint/Objects/listobject.c	Sun Feb 14 14:09:30 2010
@@ -126,11 +126,11 @@
 		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 @@
 	 * 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;
 	}
@@ -2442,7 +2442,8 @@
 				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*));
@@ -2458,13 +2459,13 @@
 			   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;
 				}
 
@@ -2473,7 +2474,7 @@
 					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) * 


More information about the Python-checkins mailing list