From dd3c51a4b75067139568e2dc74bdd45e077510cd Mon Sep 17 00:00:00 2001 From: Neal Norwitz Date: Wed, 28 Jun 2006 06:38:25 +0000 Subject: [PATCH] Backport 47139: Fix bug #1512695: cPickle.loads could crash if it was interrupted with a KeyboardInterrupt since PyTuple_Pack was passed a NULL. --- Misc/NEWS | 3 +++ Modules/cPickle.c | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) 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; } -- 2.47.3