From 8e2bea22b0927f4f95a248cc7517f407a705d8a8 Mon Sep 17 00:00:00 2001 From: "Neal H. Walfield" Date: Mon, 16 Nov 2015 10:34:01 +0100 Subject: [PATCH] gpg: Fix error checking and improve error reporting. * g10/gpg.c (check_user_ids): Differentiate between a second result and an error. If the key specification is ambiguous or an error occurs, set RC appropriately. -- Signed-off-by: Neal H. Walfield Reported-by: Werner Koch Suggested-by: NIIBE Yutaka --- g10/gpg.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/g10/gpg.c b/g10/gpg.c index 36e65425b..75060b821 100644 --- a/g10/gpg.c +++ b/g10/gpg.c @@ -2196,8 +2196,8 @@ check_user_ids (strlist_t *sp, /* Continue the search. */ err = keydb_search (hd, &desc, 1, NULL); - if (! (gpg_err_code (err) == GPG_ERR_NOT_FOUND - || gpg_err_code (err) == GPG_ERR_EOF)) + if (! err) + /* Another result! */ { char fingerprint_bin2[MAX_FINGERPRINT_LEN]; size_t fingerprint_bin2_len = sizeof (fingerprint_bin2); @@ -2208,6 +2208,9 @@ check_user_ids (strlist_t *sp, if (!opt.quiet) log_info (_("(check argument of option '%s')\n"), option); + if (! rc) + rc = GPG_ERR_CONFLICT; + err = keydb_get_keyblock (hd, &kb); if (err) log_error (_("error reading key block for '%s': %s.\n"), @@ -2225,6 +2228,15 @@ check_user_ids (strlist_t *sp, release_kbnode (kb); } } + else if (! (gpg_err_code (err) == GPG_ERR_NOT_FOUND + || gpg_err_code (err) == GPG_ERR_EOF)) + /* An error (other than "not found"). */ + { + log_error (_("Error reading from keyring: %s\n"), + gpg_strerror (err)); + if (! rc) + rc = err; + } } strlist_rev (&s2);