diff options
author | Werner Koch <[email protected]> | 2019-05-21 15:27:42 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2019-05-21 15:40:41 +0000 |
commit | 30f44957ccd1433846709911798af3da4e437900 (patch) | |
tree | 4ed1c6e00d8b4387f9276a75faf2c7c29a8d6f63 | |
parent | gpg: Do not allow creation of user ids larger than our parser allows. (diff) | |
download | gnupg-30f44957ccd1433846709911798af3da4e437900.tar.gz gnupg-30f44957ccd1433846709911798af3da4e437900.zip |
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 <[email protected]>
This is a backport from master with support for the unsupported v5 key
handling.
-rw-r--r-- | g10/keydb.c | 15 |
1 files 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; } |