[Python-checkins] python/dist/src/Objects object.c,2.162.6.8,2.162.6.9
nnorwitz@users.sourceforge.net
nnorwitz@users.sourceforge.net
Mon, 13 Jan 2003 12:18:18 -0800
Update of /cvsroot/python/python/dist/src/Objects
In directory sc8-pr-cvs1:/tmp/cvs-serv10337/Objects
Modified Files:
Tag: release22-maint
object.c
Log Message:
Backport:
Fix SF bug #667147, Segmentation fault printing str subclass
Fix infinite recursion which occurred when printing an object
whose __str__() returned self.
Index: object.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v
retrieving revision 2.162.6.8
retrieving revision 2.162.6.9
diff -C2 -d -r2.162.6.8 -r2.162.6.9
*** object.c 16 Dec 2002 22:32:46 -0000 2.162.6.8
--- object.c 13 Jan 2003 20:17:04 -0000 2.162.6.9
***************
*** 147,154 ****
}
! int
! PyObject_Print(PyObject *op, FILE *fp, int flags)
{
int ret = 0;
if (PyErr_CheckSignals())
return -1;
--- 147,159 ----
}
! /* 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;
***************
*** 176,180 ****
ret = -1;
else {
! ret = PyObject_Print(s, fp, Py_PRINT_RAW);
}
Py_XDECREF(s);
--- 181,186 ----
ret = -1;
else {
! ret = internal_print(s, fp, Py_PRINT_RAW,
! nesting+1);
}
Py_XDECREF(s);
***************
*** 192,195 ****
--- 198,208 ----
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 */