diff Modules/arraymodule.c @ 48565:887ee6bd9284

Merged revisions 65182 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r65182 | gregory.p.smith | 2008-07-22 06:46:32 +0200 (Tue, 22 Jul 2008) | 7 lines Issue #2620: Overflow checking when allocating or reallocating memory was not always being done properly in some python types and extension modules. PyMem_MALLOC, PyMem_REALLOC, PyMem_NEW and PyMem_RESIZE have all been updated to perform better checks and places in the code that would previously leak memory on the error path when such an allocation failed have been fixed. ........
author Georg Brandl <georg@python.org>
date Wed, 23 Jul 2008 16:13:07 +0000
parents ac854cde3135
children cd3b0b7fd8e1
line wrap: on
line diff
--- a/Modules/arraymodule.c	Wed Jul 23 16:11:42 2008 +0000
+++ b/Modules/arraymodule.c	Wed Jul 23 16:13:07 2008 +0000
@@ -805,6 +805,7 @@
 array_do_extend(arrayobject *self, PyObject *bb)
 {
 	Py_ssize_t size;
+	char *old_item;
 
 	if (!array_Check(bb))
 		return array_iter_extend(self, bb);
@@ -820,8 +821,10 @@
 		return -1;
 	}
 	size = Py_SIZE(self) + Py_SIZE(b);
+	old_item = self->ob_item;
         PyMem_RESIZE(self->ob_item, char, size*self->ob_descr->itemsize);
         if (self->ob_item == NULL) {
+		self->ob_item = old_item;
 		PyErr_NoMemory();
 		return -1;
         }
@@ -874,7 +877,7 @@
 			if (size > PY_SSIZE_T_MAX / n) {
 				return PyErr_NoMemory();
 			}
-			PyMem_Resize(items, char, n * size);
+			PyMem_RESIZE(items, char, n * size);
 			if (items == NULL)
 				return PyErr_NoMemory();
 			p = items;