gpg: Fix NULL de-ref for ambiguous key check in --export-ssh-keys.

* g10/getkey.c: Allow arg RET_KEYBLOCK to be NULL.
--

This change adds the expected behavior for the getkey_next function
to fix this NULL de-ref.

GnuPG-bug-id: 2212
Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
Werner Koch 2016-01-11 10:59:13 +01:00
parent eb9c021631
commit b280aa6423
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
2 changed files with 10 additions and 1 deletions

View File

@ -3059,6 +3059,9 @@ lookup (getkey_ctx_t ctx, kbnode_t *ret_keyblock, kbnode_t *ret_found_key,
KBNODE keyblock = NULL;
KBNODE found_key = NULL;
if (ret_keyblock)
*ret_keyblock = NULL;
for (;;)
{
rc = keydb_search (ctx->kr_handle, ctx->items, ctx->nitems, NULL);
@ -3113,7 +3116,8 @@ found:
if (!rc)
{
*ret_keyblock = keyblock; /* Return the keyblock. */
if (ret_keyblock)
*ret_keyblock = keyblock; /* Return the keyblock. */
keyblock = NULL;
}
else if (gpg_err_code (rc) == GPG_ERR_NOT_FOUND && no_suitable_key)

View File

@ -750,6 +750,11 @@ gpg_error_t getkey_byname (ctrl_t ctrl,
can use free_public_key, which calls release_public_key_parts(PK)
and then xfree(PK)).
RET_KEYBLOCK can be given as NULL; if it is not NULL it the entire
found keyblock wis retruned hich must be released with
release_kbnode. If the function returns an error NULL is stored at
RET_KEYBLOCK.
The self-signed data has already been merged into the public key
using merge_selfsigs. */
gpg_error_t getkey_next (getkey_ctx_t ctx, PKT_public_key *pk,