[Python-checkins] python/dist/src/Modules arraymodule.c,2.90,2.91

rhettinger at users.sourceforge.net rhettinger at users.sourceforge.net
Tue Aug 5 05:24:02 EDT 2003


Update of /cvsroot/python/python/dist/src/Modules
In directory sc8-pr-cvs1:/tmp/cvs-serv20212

Modified Files:
	arraymodule.c 
Log Message:
SF bug #782369:  Massive memory leak in array module

Fixed leak caused by switching from PyList_GetItem to PySequence_GetItem.
Added missing NULL check.
Clarified code by converting an "if" to an "else if".

Will backport to 2.3.



Index: arraymodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/arraymodule.c,v
retrieving revision 2.90
retrieving revision 2.91
diff -C2 -d -r2.90 -r2.91
*** arraymodule.c	23 May 2003 10:01:07 -0000	2.90
--- arraymodule.c	5 Aug 2003 11:23:59 -0000	2.91
***************
*** 1759,1769 ****
  					PyObject *v =
  					        PySequence_GetItem(initial, i);
  					if (setarrayitem(a, i, v) != 0) {
  						Py_DECREF(a);
  						return NULL;
  					}
  				}
! 			}
! 			if (initial != NULL && PyString_Check(initial)) {
  				PyObject *t_initial = Py_BuildValue("(O)",
  								    initial);
--- 1759,1774 ----
  					PyObject *v =
  					        PySequence_GetItem(initial, i);
+ 					if (v == NULL) {
+ 						Py_DECREF(a);
+ 						return NULL;
+ 					}
  					if (setarrayitem(a, i, v) != 0) {
+ 						Py_DECREF(v);
  						Py_DECREF(a);
  						return NULL;
  					}
+ 					Py_DECREF(v);
  				}
! 			} else if (initial != NULL && PyString_Check(initial)) {
  				PyObject *t_initial = Py_BuildValue("(O)",
  								    initial);





More information about the Python-checkins mailing list