aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2019-05-21 15:27:42 +0000
committerWerner Koch <[email protected]>2019-05-21 15:40:41 +0000
commit30f44957ccd1433846709911798af3da4e437900 (patch)
tree4ed1c6e00d8b4387f9276a75faf2c7c29a8d6f63
parentgpg: Do not allow creation of user ids larger than our parser allows. (diff)
downloadgnupg-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.c15
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;
}