From 8a93f345b701332270c9829a4d0a93537f98a8d8 Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Fri, 8 Jul 2016 11:45:08 +0200 Subject: [PATCH] python: Fix raising stashed exceptions. Fixes an issue with newer versions of Python. * lang/python/helpers.c (pygpgme_raise_callback_exception): Be more careful when restoring the exception. Signed-off-by: Justus Winter --- lang/python/helpers.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lang/python/helpers.c b/lang/python/helpers.c index 1b661466..43a55d08 100644 --- a/lang/python/helpers.c +++ b/lang/python/helpers.c @@ -150,12 +150,18 @@ PyObject *pygpgme_raise_callback_exception(PyObject *self) else Py_INCREF(ptraceback); + /* We now have references for the extracted items. */ Py_DECREF(excinfo); - PyErr_Restore(ptype, pvalue, ptraceback); + /* Clear the exception information. It is important to do this + before setting the error, because setting the attribute may + execute python code, and the runtime system raises a SystemError + if an exception is set but values are returned. */ Py_INCREF(Py_None); PyObject_SetAttrString(self, EXCINFO, Py_None); + /* Restore exception. */ + PyErr_Restore(ptype, pvalue, ptraceback); return NULL; /* Raise exception. */ leave: