g10: Break out of the loop earlier.
authorNeal H. Walfield <neal@g10code.com>
Tue, 15 Sep 2015 13:21:17 +0000 (15:21 +0200)
committerNeal H. Walfield <neal@g10code.com>
Wed, 16 Sep 2015 13:15:26 +0000 (15:15 +0200)
* g10/getkey.c (have_secret_key_with_kid): Once we find the relevent
key or subkey, stop searching.

--
Signed-off-by: Neal H. Walfield <neal@g10code.com>.
Only a single key or subkey will ever be selected per keyblock.

g10/getkey.c

index 7e47b56..20c344d 100644 (file)
@@ -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
       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 ((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);
            }
        }
       release_kbnode (keyblock);