1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-11-04 20:38:50 +01:00

Fix for bug#1034.

This commit is contained in:
Werner Koch 2009-05-06 09:31:15 +00:00
parent 418e61a824
commit 23ad4bd73b
4 changed files with 38 additions and 34 deletions

2
NEWS
View File

@ -6,6 +6,8 @@ Noteworthy changes in version 1.4.10 (unreleased)
* Improved file locking. Implemented it for W32.
* Fixed a memory leak which made imports of many keys very slow.
Noteworthy changes in version 1.4.9 (2008-03-26)
------------------------------------------------

View File

@ -1,3 +1,10 @@
2009-05-06 Werner Koch <wk@g10code.com>
* keyring.c (keyring_get_keyblock): Fix memory leak due to
ring_trust packets. Fixes bug#1034.
* getkey.c (finish_lookup): Remove dead code.
2009-05-05 Werner Koch <wk@g10code.com>
* keygen.c (read_parameter_file): Add keyword "Creation-Date".

View File

@ -2542,16 +2542,6 @@ finish_lookup (GETKEY_CTX ctx)
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 */

View File

@ -419,19 +419,23 @@ keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb)
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 packets immediately following
* signature packets. */
lastnode = NULL;
free_packet(pkt);
init_packet(pkt);
continue;
}
else {
node = lastnode = new_kbnode (pkt);
if (!keyblock)
keyblock = node;
@ -441,15 +445,16 @@ keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb)
if ( pkt->pkttype == PKT_PUBLIC_KEY
|| pkt->pkttype == PKT_PUBLIC_SUBKEY
|| pkt->pkttype == PKT_SECRET_KEY
|| pkt->pkttype == PKT_SECRET_SUBKEY) {
|| pkt->pkttype == PKT_SECRET_SUBKEY)
{
if (++pk_no == hd->found.pk_no)
node->flag |= 1;
}
else if ( pkt->pkttype == PKT_USER_ID) {
else if ( pkt->pkttype == PKT_USER_ID)
{
if (++uid_no == hd->found.uid_no)
node->flag |= 2;
}
}
pkt = xmalloc (sizeof *pkt);
init_packet(pkt);