summaryrefslogtreecommitdiff
path: root/Modules
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2008-07-23 16:13:07 +0000
committerGeorg Brandl <georg@python.org>2008-07-23 16:13:07 +0000
commitd492ad80c872d264ed46bec71e31a00f174ac819 (patch)
treedae53e48f72c579307f3d4cae26244143c2f9138 /Modules
parentc1c54c1b04f469bedf820ff14e083da63b77aaaa (diff)
downloadcpython-git-d492ad80c872d264ed46bec71e31a00f174ac819.tar.gz
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. ........
Diffstat (limited to 'Modules')
-rw-r--r--Modules/arraymodule.c5
-rw-r--r--Modules/selectmodule.c4
2 files changed, 7 insertions, 2 deletions
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index d2ae367b18..b5f819e2e3 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -805,6 +805,7 @@ static int
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 @@ array_do_extend(arrayobject *self, PyObject *bb)
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 @@ array_inplace_repeat(arrayobject *self, Py_ssize_t n)
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;
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index daabf03ac2..8e26050b9f 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -346,10 +346,12 @@ update_ufd_array(pollObject *self)
{
Py_ssize_t i, pos;
PyObject *key, *value;
+ struct pollfd *old_ufds = self->ufds;
self->ufd_len = PyDict_Size(self->dict);
- PyMem_Resize(self->ufds, struct pollfd, self->ufd_len);
+ PyMem_RESIZE(self->ufds, struct pollfd, self->ufd_len);
if (self->ufds == NULL) {
+ self->ufds = old_ufds;
PyErr_NoMemory();
return 0;
}