(original) (raw)
changeset: 87407:8f556ee0f6ba user: Antoine Pitrou solipsis@pitrou.net date: Sat Nov 23 14:05:23 2013 +0100 files: Python/ceval.c description: Fix refleak introduced by 4f730c045f5f (issue #18408) and unveiled by 95eea8624d05 (issue #16596). diff -r dfd33140a2b5 -r 8f556ee0f6ba Python/ceval.c --- a/Python/ceval.c Sat Nov 23 13:56:58 2013 +0100 +++ b/Python/ceval.c Sat Nov 23 14:05:23 2013 +0100 @@ -3850,20 +3850,16 @@ { PyObject *type, *value, *traceback, *orig_traceback, *arg; int err; - PyErr_Fetch(&type, &value, &traceback); + PyErr_Fetch(&type, &value, &orig_traceback); if (value == NULL) { value = Py_None; Py_INCREF(value); } - PyErr_NormalizeException(&type, &value, &traceback); - orig_traceback = traceback; - if (traceback == NULL) { - Py_INCREF(Py_None); - traceback = Py_None; - } + PyErr_NormalizeException(&type, &value, &orig_traceback); + traceback = (orig_traceback != NULL) ? orig_traceback : Py_None; arg = PyTuple_Pack(3, type, value, traceback); if (arg == NULL) { - PyErr_Restore(type, value, traceback); + PyErr_Restore(type, value, orig_traceback); return; } err = call_trace(func, self, f, PyTrace_EXCEPTION, arg); /solipsis@pitrou.net