[Python-checkins] python/dist/src/Modules cPickle.c,2.73.2.1.2.1,2.73.2.1.2.2

loewis@users.sourceforge.net loewis@users.sourceforge.net
2002年9月22日 01:21:52 -0700


Update of /cvsroot/python/python/dist/src/Modules
In directory usw-pr-cvs1:/tmp/cvs-serv14033
Modified Files:
 Tag: release22-maint
	cPickle.c 
Log Message:
Add recursion limit to pickling. Fixes #576084.
Index: cPickle.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/cPickle.c,v
retrieving revision 2.73.2.1.2.1
retrieving revision 2.73.2.1.2.2
diff -C2 -d -r2.73.2.1.2.1 -r2.73.2.1.2.2
*** cPickle.c	16 Jul 2002 20:02:15 -0000	2.73.2.1.2.1
--- cPickle.c	22 Sep 2002 08:21:45 -0000	2.73.2.1.2.2
***************
*** 314,317 ****
--- 314,318 ----
 int bin;
 int fast; /* Fast mode doesn't save in memo, don't use if circ ref */
+ int nesting;
 int (*write_func)(struct Picklerobject *, char *, int);
 char *write_buf;
***************
*** 1851,1854 ****
--- 1852,1861 ----
 int res = -1, tmp, size;
 
+ if (self->nesting++ > Py_GetRecursionLimit()){
+ 	 PyErr_SetString(PyExc_RuntimeError,
+ 			 "maximum recursion depth exceeded");
+ 	 goto finally;
+ }
+ 
 if (!pers_save && self->pers_func) {
 if ((tmp = save_pers(self, args, self->pers_func)) != 0) {
***************
*** 2069,2072 ****
--- 2076,2080 ----
 
 finally:
+ self->nesting--;
 Py_XDECREF(py_ob_id);
 Py_XDECREF(__reduce__);
***************
*** 2288,2291 ****
--- 2296,2300 ----
 self->bin = bin;
 self->fast = 0;
+ self->nesting = 0;
 self->fast_container = 0;
 self->fast_memo = NULL;

AltStyle によって変換されたページ (->オリジナル) /