[Python-checkins] python/dist/src/Objects object.c,2.194,2.195
nnorwitz@users.sourceforge.net
nnorwitz@users.sourceforge.net
Mon, 13 Jan 2003 12:13:44 -0800
Update of /cvsroot/python/python/dist/src/Objects
In directory sc8-pr-cvs1:/tmp/cvs-serv7787/Objects
Modified Files:
object.c
Log Message:
Fix SF bug #667147, Segmentation fault printing str subclass
Fix infinite recursion which occurred when printing an object
whose __str__() returned self.
Will backport
Index: object.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v
retrieving revision 2.194
retrieving revision 2.195
diff -C2 -d -r2.194 -r2.195
*** object.c 17 Nov 2002 17:52:44 -0000 2.194
--- object.c 13 Jan 2003 20:13:04 -0000 2.195
***************
*** 159,166 ****
}
! int
! PyObject_Print(PyObject *op, FILE *fp, int flags)
{
int ret = 0;
if (PyErr_CheckSignals())
return -1;
--- 159,171 ----
}
! /* Implementation of PyObject_Print with recursion checking */
! static int
! internal_print(PyObject *op, FILE *fp, int flags, int nesting)
{
int ret = 0;
+ if (nesting > 10) {
+ PyErr_SetString(PyExc_RuntimeError, "print recursion");
+ return -1;
+ }
if (PyErr_CheckSignals())
return -1;
***************
*** 188,192 ****
ret = -1;
else {
! ret = PyObject_Print(s, fp, Py_PRINT_RAW);
}
Py_XDECREF(s);
--- 193,198 ----
ret = -1;
else {
! ret = internal_print(s, fp, Py_PRINT_RAW,
! nesting+1);
}
Py_XDECREF(s);
***************
*** 204,207 ****
--- 210,220 ----
return ret;
}
+
+ int
+ PyObject_Print(PyObject *op, FILE *fp, int flags)
+ {
+ return internal_print(op, fp, flags, 0);
+ }
+
/* For debugging convenience. See Misc/gdbinit for some useful gdb hooks */