[svn] GnuPG - r4994 - trunk/g10

svn author wk cvs at cvs.gnupg.org
Wed May 6 11:36:07 CEST 2009


Author: wk
Date: 2009-05-06 11:36:06 +0200 (Wed, 06 May 2009)
New Revision: 4994

Modified:
   trunk/g10/ChangeLog
   trunk/g10/getkey.c
   trunk/g10/keyring.c
Log:
Fix bug#1034.
Remove dead code.


Modified: trunk/g10/ChangeLog
===================================================================
--- trunk/g10/ChangeLog	2009-05-06 09:31:15 UTC (rev 4993)
+++ trunk/g10/ChangeLog	2009-05-06 09:36:06 UTC (rev 4994)
@@ -1,3 +1,10 @@
+2009-05-06  Werner Koch  <wk at g10code.com>
+
+	* getkey.c (finish_lookup): Remove dead code.
+
+	* keyring.c (keyring_get_keyblock): Fix memory leak due to ring
+	trust packets.  Fixes bug#1034.
+
 2009-04-03  Werner Koch  <wk at g10code.com>
 
 	* gpgv.c (main): Open keyrings readonly.

Modified: trunk/g10/getkey.c
===================================================================
--- trunk/g10/getkey.c	2009-05-06 09:31:15 UTC (rev 4993)
+++ trunk/g10/getkey.c	2009-05-06 09:36:06 UTC (rev 4994)
@@ -2640,16 +2640,6 @@
         goto found;
     }
     
-    if (!req_usage) {
-        PKT_public_key *pk = foundk->pkt->pkt.public_key;
-        if (pk->user_id)
-            free_user_id (pk->user_id);
-        pk->user_id = scopy_user_id (foundu);
-        ctx->found_key = foundk;
-        cache_user_id( keyblock );
-        return 1; /* found */
-    }
-    
     latest_date = 0;
     latest_key  = NULL;
     /* do not look at subkeys if a certification key is requested */

Modified: trunk/g10/keyring.c
===================================================================
--- trunk/g10/keyring.c	2009-05-06 09:31:15 UTC (rev 4993)
+++ trunk/g10/keyring.c	2009-05-06 09:36:06 UTC (rev 4994)
@@ -426,43 +426,53 @@
         }
 
         in_cert = 1;
-        if (pkt->pkttype == PKT_RING_TRUST) {
+        if (pkt->pkttype == PKT_RING_TRUST) 
+          {
             /*(this code is duplicated after the loop)*/
             if ( lastnode 
                  && lastnode->pkt->pkttype == PKT_SIGNATURE
                  && (pkt->pkt.ring_trust->sigcache & 1) ) {
-                /* this is a ring trust packet with a checked signature 
+                /* This is a ring trust packet with a checked signature 
                  * status cache following directly a signature paket.
-                 * Set the cache status into that signature packet */
+                 * Set the cache status into that signature packet.  */
                 PKT_signature *sig = lastnode->pkt->pkt.signature;
                 
                 sig->flags.checked = 1;
                 sig->flags.valid = !!(pkt->pkt.ring_trust->sigcache & 2);
             }
-            /* reset lastnode, so that we set the cache status only from
-             * the ring trust packet immediately folling a signature */
+            /* Reset LASTNODE, so that we set the cache status only from
+             * the ring trust packet immediately following a signature. */
             lastnode = NULL;
-        }
-        else {
-            node = lastnode = new_kbnode (pkt);
-            if (!keyblock)
-                keyblock = node;
-            else
-                add_kbnode (keyblock, node);
+	    free_packet(pkt);
+	    init_packet(pkt);
+	    continue;
+          }
 
-            if ( pkt->pkttype == PKT_PUBLIC_KEY
-                 || pkt->pkttype == PKT_PUBLIC_SUBKEY
-                 || pkt->pkttype == PKT_SECRET_KEY
-                 || pkt->pkttype == PKT_SECRET_SUBKEY) {
-                if (++pk_no == hd->found.pk_no)
-                    node->flag |= 1;
-            }
-            else if ( pkt->pkttype == PKT_USER_ID) {
-                if (++uid_no == hd->found.uid_no)
-                    node->flag |= 2;
-            }
-        }
 
+        node = lastnode = new_kbnode (pkt);
+        if (!keyblock)
+          keyblock = node;
+        else
+          add_kbnode (keyblock, node);
+        switch (pkt->pkttype)
+          {
+          case PKT_PUBLIC_KEY:
+          case PKT_PUBLIC_SUBKEY:
+          case PKT_SECRET_KEY:
+          case PKT_SECRET_SUBKEY:
+            if (++pk_no == hd->found.pk_no)
+              node->flag |= 1;
+            break;
+
+          case PKT_USER_ID:
+            if (++uid_no == hd->found.uid_no)
+              node->flag |= 2;
+            break;
+            
+          default:
+            break;
+          }
+
         pkt = xmalloc (sizeof *pkt);
         init_packet(pkt);
     }




More information about the Gnupg-commits mailing list