From b280aa6423c9492e8c5a9afa57339d06d957996d Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 11 Jan 2016 10:59:13 +0100 Subject: [PATCH] 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 --- g10/getkey.c | 6 +++++- g10/keydb.h | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/g10/getkey.c b/g10/getkey.c index 37a5b565c..1df7287ba 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -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) diff --git a/g10/keydb.h b/g10/keydb.h index f99136aa9..41d786cd6 100644 --- a/g10/keydb.h +++ b/g10/keydb.h @@ -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,