aboutsummaryrefslogtreecommitdiffstats
path: root/lang/python/helpers.c
diff options
context:
space:
mode:
Diffstat (limited to 'lang/python/helpers.c')
-rw-r--r--lang/python/helpers.c8
1 files changed, 7 insertions, 1 deletions
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: