summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2012-12-20 09:43:41 +0100
committerWerner Koch <wk@gnupg.org>2012-12-20 12:37:01 +0100
commitf0b33b6fb8e0586e9584a7a409dcc31263776a67 (patch)
treef7c503424759dcf7699a80f2556e71b94497b15b
parentgpg: Make commit 2b3cb2ee actually work (diff)
downloadgnupg2-f0b33b6fb8e0586e9584a7a409dcc31263776a67.tar.xz
gnupg2-f0b33b6fb8e0586e9584a7a409dcc31263776a67.zip
gpg: Import only packets which are allowed in a keyblock.
* g10/import.c (valid_keyblock_packet): New. (read_block): Store only valid packets. -- A corrupted key, which for example included a mangled public key encrypted packet, used to corrupt the keyring. This change skips all packets which are not allowed in a keyblock. GnuPG-bug-id: 1455 (cherry-picked from commit f795a0d59e197455f8723c300eebf59e09853efa)
-rw-r--r--g10/import.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/g10/import.c b/g10/import.c
index bfe02eb16..a57b32e3f 100644
--- a/g10/import.c
+++ b/g10/import.c
@@ -384,6 +384,27 @@ import_print_stats (void *hd)
}
+/* Return true if PKTTYPE is valid in a keyblock. */
+static int
+valid_keyblock_packet (int pkttype)
+{
+ switch (pkttype)
+ {
+ case PKT_PUBLIC_KEY:
+ case PKT_PUBLIC_SUBKEY:
+ case PKT_SECRET_KEY:
+ case PKT_SECRET_SUBKEY:
+ case PKT_SIGNATURE:
+ case PKT_USER_ID:
+ case PKT_ATTRIBUTE:
+ case PKT_RING_TRUST:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+
/****************
* Read the next keyblock from stream A.
* PENDING_PKT should be initialzed to NULL
@@ -461,7 +482,7 @@ read_block( IOBUF a, PACKET **pending_pkt, KBNODE *ret_root )
}
in_cert = 1;
default:
- if( in_cert ) {
+ if (in_cert && valid_keyblock_packet (pkt->pkttype)) {
if( !root )
root = new_kbnode( pkt );
else