1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-12-23 10:29:58 +01:00

gpg: Fix regression in option "self-sigs-only".

* g10/import.c (read_block): Make sure KEYID is availabale also on a
pending packet.
--

Reported-by: Phil Pennock
Fixes-commit: adb120e663fc5e78f714976c6e42ae233c1990b0
Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
Werner Koch 2019-07-09 11:07:35 +02:00
parent 40ea9dbdc2
commit b6effaf466
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B

View File

@ -855,6 +855,7 @@ read_block( IOBUF a, unsigned int options,
kbnode_t root = NULL; kbnode_t root = NULL;
int in_cert, in_v3key, skip_sigs; int in_cert, in_v3key, skip_sigs;
u32 keyid[2]; u32 keyid[2];
int got_keyid = 0;
unsigned int dropped_nonselfsigs = 0; unsigned int dropped_nonselfsigs = 0;
*r_v3keys = 0; *r_v3keys = 0;
@ -863,7 +864,11 @@ read_block( IOBUF a, unsigned int options,
{ {
root = new_kbnode( *pending_pkt ); root = new_kbnode( *pending_pkt );
*pending_pkt = NULL; *pending_pkt = NULL;
log_assert (root->pkt->pkttype == PKT_PUBLIC_KEY
|| root->pkt->pkttype == PKT_SECRET_KEY);
in_cert = 1; in_cert = 1;
keyid_from_pk (root->pkt->pkt.public_key, keyid);
got_keyid = 1;
} }
else else
in_cert = 0; in_cert = 0;
@ -985,6 +990,7 @@ read_block( IOBUF a, unsigned int options,
goto x_default; goto x_default;
if (!(options & IMPORT_SELF_SIGS_ONLY)) if (!(options & IMPORT_SELF_SIGS_ONLY))
goto x_default; goto x_default;
log_assert (got_keyid);
if (pkt->pkt.signature->keyid[0] == keyid[0] if (pkt->pkt.signature->keyid[0] == keyid[0]
&& pkt->pkt.signature->keyid[1] == keyid[1]) && pkt->pkt.signature->keyid[1] == keyid[1])
{ /* This is likely a self-signature. We import this one. { /* This is likely a self-signature. We import this one.
@ -1007,6 +1013,11 @@ read_block( IOBUF a, unsigned int options,
case PKT_PUBLIC_KEY: case PKT_PUBLIC_KEY:
case PKT_SECRET_KEY: case PKT_SECRET_KEY:
if (!got_keyid)
{
keyid_from_pk (pkt->pkt.public_key, keyid);
got_keyid = 1;
}
if (in_cert) /* Store this packet. */ if (in_cert) /* Store this packet. */
{ {
*pending_pkt = pkt; *pending_pkt = pkt;
@ -1014,7 +1025,6 @@ read_block( IOBUF a, unsigned int options,
goto ready; goto ready;
} }
in_cert = 1; in_cert = 1;
keyid_from_pk (pkt->pkt.public_key, keyid);
goto x_default; goto x_default;
default: default: