From: Victor Stinner Date: Tue, 21 Jan 2014 19:52:17 +0000 (+0100) Subject: Issue #20024: Py_BuildValue() now saves/restores the current exception before X-Git-Tag: v3.4.0b3~71 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2d854c8e7b14d17d7b0d1508c193fe3db92dd215;p=thirdparty%2FPython%2Fcpython.git Issue #20024: Py_BuildValue() now saves/restores the current exception before building an item if the build of a previous item failed. --- diff --git a/Python/modsupport.c b/Python/modsupport.c index 428914f3788a..6c938ddd797e 100644 --- a/Python/modsupport.c +++ b/Python/modsupport.c @@ -161,7 +161,17 @@ do_mktuple(const char **p_format, va_list *p_va, int endchar, int n, int flags) /* Note that we can't bail immediately on error as this will leak refcounts on any 'N' arguments. */ for (i = 0; i < n; i++) { - PyObject *w = do_mkvalue(p_format, p_va, flags); + PyObject *w; + + if (itemfailed) { + PyObject *exception, *value, *tb; + PyErr_Fetch(&exception, &value, &tb); + w = do_mkvalue(p_format, p_va, flags); + PyErr_Restore(exception, value, tb); + } + else { + w = do_mkvalue(p_format, p_va, flags); + } if (w == NULL) { itemfailed = 1; Py_INCREF(Py_None);