core: Initialize key return value in gpgme_get_key
authorAndre Heinecke <aheinecke@intevation.de>
Tue, 27 Mar 2018 09:24:55 +0000 (11:24 +0200)
committerAndre Heinecke <aheinecke@intevation.de>
Tue, 27 Mar 2018 09:24:55 +0000 (11:24 +0200)
* src/keylist.c (gpgme_get_key): Set r_key to NULL.

--
The c++ bindings and others assumed that r_key is set to NULL
on error. This is the behavior gpgme_op_keylist_next also
has. Even if it is not specified what happens to r_key on
error setting it to NULL should not hurt and is more
expected behavior.

This directly fixes an uninitialized memory access error
in the c++ bindings / Kleopatra:
GnuPG-Bug-Id: T3865

And will fix some additional random crashes in Kleopatra and GpgOL.

src/keylist.c

index 7956935..9c5bd4e 100644 (file)
@@ -1269,6 +1269,8 @@ gpgme_get_key (gpgme_ctx_t ctx, const char *fpr, gpgme_key_t *r_key,
   if (!ctx || !r_key || !fpr)
     return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE));
 
+  *r_key = NULL;
+
   if (strlen (fpr) < 8)        /* We have at least a key ID.  */
     return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE));