[Python-checkins] python/dist/src/Objects floatobject.c,2.123,2.124 intobject.c,2.104,2.105 longobject.c,1.160,1.161 unicodeobject.c,2.188,2.189
rhettinger@users.sourceforge.net
rhettinger@users.sourceforge.net
Sat, 28 Jun 2003 13:04:27 -0700
Update of /cvsroot/python/python/dist/src/Objects
In directory sc8-pr-cvs1:/tmp/cvs-serv14359
Modified Files:
floatobject.c intobject.c longobject.c unicodeobject.c
Log Message:
SF patch 703666: Several objects don't decref tmp on failure in subtype_new
Submitted By: Christopher A. Craig
Fillin some missing decrefs.
Index: floatobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/floatobject.c,v
retrieving revision 2.123
retrieving revision 2.124
diff -C2 -d -r2.123 -r2.124
*** floatobject.c 24 May 2003 20:18:24 -0000 2.123
--- floatobject.c 28 Jun 2003 20:04:24 -0000 2.124
***************
*** 752,757 ****
assert(PyFloat_CheckExact(tmp));
new = type->tp_alloc(type, 0);
! if (new == NULL)
return NULL;
((PyFloatObject *)new)->ob_fval = ((PyFloatObject *)tmp)->ob_fval;
Py_DECREF(tmp);
--- 752,759 ----
assert(PyFloat_CheckExact(tmp));
new = type->tp_alloc(type, 0);
! if (new == NULL) {
! Py_DECREF(tmp);
return NULL;
+ }
((PyFloatObject *)new)->ob_fval = ((PyFloatObject *)tmp)->ob_fval;
Py_DECREF(tmp);
Index: intobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/intobject.c,v
retrieving revision 2.104
retrieving revision 2.105
diff -C2 -d -r2.104 -r2.105
*** intobject.c 17 Apr 2003 18:55:36 -0000 2.104
--- intobject.c 28 Jun 2003 20:04:24 -0000 2.105
***************
*** 959,964 ****
new = type->tp_alloc(type, 0);
! if (new == NULL)
return NULL;
((PyIntObject *)new)->ob_ival = ival;
Py_DECREF(tmp);
--- 959,966 ----
new = type->tp_alloc(type, 0);
! if (new == NULL) {
! Py_DECREF(tmp);
return NULL;
+ }
((PyIntObject *)new)->ob_ival = ival;
Py_DECREF(tmp);
Index: longobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/longobject.c,v
retrieving revision 1.160
retrieving revision 1.161
diff -C2 -d -r1.160 -r1.161
*** longobject.c 5 May 2003 20:39:43 -0000 1.160
--- longobject.c 28 Jun 2003 20:04:25 -0000 1.161
***************
*** 2795,2800 ****
n = -n;
new = (PyLongObject *)type->tp_alloc(type, n);
! if (new == NULL)
return NULL;
assert(PyLong_Check(new));
new->ob_size = tmp->ob_size;
--- 2795,2802 ----
n = -n;
new = (PyLongObject *)type->tp_alloc(type, n);
! if (new == NULL) {
! Py_DECREF(tmp);
return NULL;
+ }
assert(PyLong_Check(new));
new->ob_size = tmp->ob_size;
Index: unicodeobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v
retrieving revision 2.188
retrieving revision 2.189
diff -C2 -d -r2.188 -r2.189
*** unicodeobject.c 18 May 2003 12:31:09 -0000 2.188
--- unicodeobject.c 28 Jun 2003 20:04:25 -0000 2.189
***************
*** 6689,6698 ****
assert(PyUnicode_Check(tmp));
pnew = (PyUnicodeObject *) type->tp_alloc(type, n = tmp->length);
! if (pnew == NULL)
return NULL;
pnew->str = PyMem_NEW(Py_UNICODE, n+1);
if (pnew->str == NULL) {
_Py_ForgetReference((PyObject *)pnew);
PyObject_Del(pnew);
return PyErr_NoMemory();
}
--- 6689,6701 ----
assert(PyUnicode_Check(tmp));
pnew = (PyUnicodeObject *) type->tp_alloc(type, n = tmp->length);
! if (pnew == NULL) {
! Py_DECREF(tmp);
return NULL;
+ }
pnew->str = PyMem_NEW(Py_UNICODE, n+1);
if (pnew->str == NULL) {
_Py_ForgetReference((PyObject *)pnew);
PyObject_Del(pnew);
+ Py_DECREF(tmp);
return PyErr_NoMemory();
}