python: Fix passphrase callback wrapping.
authorJustus Winter <justus@g10code.com>
Thu, 16 Feb 2017 13:49:27 +0000 (14:49 +0100)
committerJustus Winter <justus@g10code.com>
Thu, 16 Feb 2017 13:49:27 +0000 (14:49 +0100)
* lang/python/helpers.c (pyPassphraseCb): Cope with 'passphrase_info'
being NULL.

Signed-off-by: Justus Winter <justus@g10code.com>
lang/python/helpers.c

index 576767c..947819d 100644 (file)
@@ -377,7 +377,21 @@ static gpgme_error_t pyPassphraseCb(void *hook,
     goto leave;
   }
 
-  PyTuple_SetItem(args, 1, PyBytes_FromString(passphrase_info));
+  if (passphrase_info == NULL)
+    {
+      Py_INCREF(Py_None);
+      PyTuple_SetItem(args, 1, Py_None);
+    }
+  else
+    PyTuple_SetItem(args, 1, PyUnicode_DecodeUTF8(passphrase_info,
+                                                  strlen (passphrase_info),
+                                                  "strict"));
+  if (PyErr_Occurred()) {
+    Py_DECREF(args);
+    err_status = gpg_error(GPG_ERR_GENERAL);
+    goto leave;
+  }
+
   PyTuple_SetItem(args, 2, PyBool_FromLong((long)prev_was_bad));
   if (dataarg) {
     Py_INCREF(dataarg);                /* Because GetItem doesn't give a ref but SetItem taketh away */