From 3940f10af7915b080bf4ed25ceb7e20b52e3cd3e Mon Sep 17 00:00:00 2001 From: "Neal H. Walfield" Date: Tue, 15 Sep 2015 15:21:17 +0200 Subject: [PATCH] g10: Break out of the loop earlier. * g10/getkey.c (have_secret_key_with_kid): Once we find the relevent key or subkey, stop searching. -- Signed-off-by: Neal H. Walfield . Only a single key or subkey will ever be selected per keyblock. --- g10/getkey.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/g10/getkey.c b/g10/getkey.c index 7e47b5625..20c344dfa 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -2942,17 +2942,20 @@ have_secret_key_with_kid (u32 *keyid) for (node = keyblock; node; node = node->next) { /* Bit 0 of the flags is set if the search found the key - using that key or subkey. */ + using that key or subkey. Note: a search will only ever + match a single key or subkey. */ if ((node->flag & 1)) { assert (node->pkt->pkttype == PKT_PUBLIC_KEY || node->pkt->pkttype == PKT_PUBLIC_SUBKEY); - if (!agent_probe_secret_key (NULL, node->pkt->pkt.public_key)) - { - result = 1; - break; - } + if (agent_probe_secret_key (NULL, node->pkt->pkt.public_key) == 0) + /* Not available. */ + result = 1; + else + result = 0; + + break; } } release_kbnode (keyblock);