diff options
author | Justus Winter <[email protected]> | 2016-06-08 16:06:24 +0000 |
---|---|---|
committer | Justus Winter <[email protected]> | 2016-06-08 16:12:35 +0000 |
commit | 77d149e8614c381458e07808a7930ce3fb92cdc3 (patch) | |
tree | 77a810d3c86df0ec5aef417946e8782c2e6d18f8 | |
parent | python: Add function to raise exceptions from c. (diff) | |
download | gpgme-77d149e8614c381458e07808a7930ce3fb92cdc3.tar.gz gpgme-77d149e8614c381458e07808a7930ce3fb92cdc3.zip |
python: Improve error handling.
* lang/python/helpers.c (pyPassphraseCb): Handle write errors.
(pyEditCb): Likewise.
Signed-off-by: Justus Winter <[email protected]>
-rw-r--r-- | lang/python/helpers.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/lang/python/helpers.c b/lang/python/helpers.c index 5c620e6b..0033ef02 100644 --- a/lang/python/helpers.c +++ b/lang/python/helpers.c @@ -320,7 +320,10 @@ static gpgme_error_t pyPassphraseCb(void *hook, err_status = pygpgme_exception2code(); } else { if (!retval) { - write(fd, "\n", 1); + if (write(fd, "\n", 1) < 0) { + err_status = gpgme_error_from_syserror (); + pygpgme_raise_exception (err_status); + } } else { char *buf; size_t len; @@ -342,8 +345,15 @@ static gpgme_error_t pyPassphraseCb(void *hook, goto leave; } - write(fd, buf, len); - write(fd, "\n", 1); + if (write(fd, buf, len) < 0) { + err_status = gpgme_error_from_syserror (); + pygpgme_raise_exception (err_status); + } + if (! err_status && write(fd, "\n", 1) < 0) { + err_status = gpgme_error_from_syserror (); + pygpgme_raise_exception (err_status); + } + Py_DECREF(retval); } } @@ -512,17 +522,24 @@ gpgme_error_t pyEditCb(void *opaque, gpgme_status_code_t status, Py_DECREF(pyargs); if (PyErr_Occurred()) { err_status = pygpgme_exception2code(); - pygpgme_stash_callback_exception(self); } else { if (fd>=0 && retval && PyUnicode_Check(retval)) { const char *buffer; Py_ssize_t size; buffer = PyUnicode_AsUTF8AndSize(retval, &size); - write(fd, buffer, size); - write(fd, "\n", 1); + if (write(fd, buffer, size) < 0) { + err_status = gpgme_error_from_syserror (); + pygpgme_raise_exception (err_status); + } + if (! err_status && write(fd, "\n", 1) < 0) { + err_status = gpgme_error_from_syserror (); + pygpgme_raise_exception (err_status); + } } } + if (err_status) + pygpgme_stash_callback_exception(self); Py_XDECREF(retval); return err_status; |