From: Neal Norwitz Date: Wed, 28 Jun 2006 06:38:25 +0000 (+0000) Subject: Backport 47139: X-Git-Tag: v2.4.4c1~167 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dd3c51a4b75067139568e2dc74bdd45e077510cd;p=thirdparty%2FPython%2Fcpython.git Backport 47139: Fix bug #1512695: cPickle.loads could crash if it was interrupted with a KeyboardInterrupt since PyTuple_Pack was passed a NULL. --- diff --git a/Misc/NEWS b/Misc/NEWS index a4c1864c2b35..5753cdc4f907 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -26,6 +26,9 @@ Core and builtins Extension Modules ----------------- +- Bug #1512695: cPickle.loads could crash if it was interrupted with + a KeyboardInterrupt. + - Change binascii.hexlify() to accept any read-only buffer and not just a char buffer. diff --git a/Modules/cPickle.c b/Modules/cPickle.c index e4f33c16272f..6465139f09b0 100644 --- a/Modules/cPickle.c +++ b/Modules/cPickle.c @@ -3633,10 +3633,14 @@ Instance_New(PyObject *cls, PyObject *args) err: { - PyObject *tp, *v, *tb; + PyObject *tp, *v, *tb, *tmp_value; PyErr_Fetch(&tp, &v, &tb); - if ((r=PyTuple_Pack(3,v,cls,args))) { + tmp_value = v; + /* NULL occurs when there was a KeyboardInterrupt */ + if (tmp_value == NULL) + tmp_value = Py_None; + if ((r = PyTuple_Pack(3, tmp_value, cls, args))) { Py_XDECREF(v); v=r; }