From 0f8b31a2dad17ed18ff11fbe36e8d56dce4de0b5 Mon Sep 17 00:00:00 2001 From: Neal Norwitz Date: Wed, 28 Jun 2006 06:28:31 +0000 Subject: [PATCH] Fix bug #1512695: cPickle.loads could crash if it was interrupted with a KeyboardInterrupt since PyTuple_Pack was passed a NULL. Will backport. --- Misc/NEWS | 6 ++++++ Modules/cPickle.c | 8 ++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index cefa739602e..efbb1453bf1 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -28,6 +28,12 @@ Library - The wsgiref package is now installed properly on Unix. +Extension Modules +----------------- + +- Bug #1512695: cPickle.loads could crash if it was interrupted with + a KeyboardInterrupt. + Build ----- diff --git a/Modules/cPickle.c b/Modules/cPickle.c index 0d293627afe..6b9b322247e 100644 --- a/Modules/cPickle.c +++ b/Modules/cPickle.c @@ -3628,10 +3628,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; }