From 30f44957ccd1433846709911798af3da4e437900 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 21 May 2019 17:27:42 +0200 Subject: [PATCH] gpg: Do not bail on an invalid packet in the local keyring. * g10/keydb.c (parse_keyblock_image): Treat invalid packet special. -- This is in particular useful to run --list-keys on a keyring with corrupted packets. The extra flush is to keep the diagnostic close to the regular --list-key output. Signed-off-by: Werner Koch This is a backport from master with support for the unsupported v5 key handling. --- g10/keydb.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/g10/keydb.c b/g10/keydb.c index 0475f8561..670a8a191 100644 --- a/g10/keydb.c +++ b/g10/keydb.c @@ -1249,12 +1249,19 @@ parse_keyblock_image (iobuf_t iobuf, int pk_no, int uid_no, } if (err) { - if (gpg_err_code (err) != GPG_ERR_UNKNOWN_VERSION) + es_fflush (es_stdout); + log_error ("parse_keyblock_image: read error: %s\n", + gpg_strerror (err)); + if (gpg_err_code (err) == GPG_ERR_INV_PACKET) { - log_error ("parse_keyblock_image: read error: %s\n", - gpg_strerror (err)); - err = gpg_error (GPG_ERR_INV_KEYRING); + free_packet (pkt, &parsectx); + init_packet (pkt); + continue; } + /* Unknown version maybe due to v5 keys - we treat this + * error different. */ + if (gpg_err_code (err) != GPG_ERR_UNKNOWN_VERSION) + err = gpg_error (GPG_ERR_INV_KEYRING); break; }