diff --git a/g10/import.c b/g10/import.c index b8148d48d..eb3063dd3 100644 --- a/g10/import.c +++ b/g10/import.c @@ -860,12 +860,14 @@ read_block( IOBUF a, int with_meta, skip_sigs = 0; while ((rc=parse_packet (&parsectx, pkt)) != -1) { - if (rc && (gpg_err_code (rc) == GPG_ERR_LEGACY_KEY + if (rc && ((gpg_err_code (rc) == GPG_ERR_LEGACY_KEY + || gpg_err_code (rc) == GPG_ERR_UNKNOWN_VERSION) && (pkt->pkttype == PKT_PUBLIC_KEY || pkt->pkttype == PKT_SECRET_KEY))) { in_v3key = 1; - ++*r_v3keys; + if (gpg_err_code (rc) != GPG_ERR_UNKNOWN_VERSION) + ++*r_v3keys; free_packet (pkt, &parsectx); init_packet (pkt); continue; diff --git a/g10/keydb.c b/g10/keydb.c index 03fadfd54..0475f8561 100644 --- a/g10/keydb.c +++ b/g10/keydb.c @@ -1249,9 +1249,12 @@ parse_keyblock_image (iobuf_t iobuf, int pk_no, int uid_no, } if (err) { - log_error ("parse_keyblock_image: read error: %s\n", - gpg_strerror (err)); - err = gpg_error (GPG_ERR_INV_KEYRING); + if (gpg_err_code (err) != GPG_ERR_UNKNOWN_VERSION) + { + log_error ("parse_keyblock_image: read error: %s\n", + gpg_strerror (err)); + err = gpg_error (GPG_ERR_INV_KEYRING); + } break; } @@ -1955,7 +1958,9 @@ keydb_search (KEYDB_HANDLE hd, KEYDB_SEARCH_DESC *desc, rc = keybox_search (hd->active[hd->current].u.kb, desc, ndesc, KEYBOX_BLOBTYPE_PGP, descindex, &hd->skipped_long_blobs); - while (rc == GPG_ERR_LEGACY_KEY); + while (gpg_err_code (rc) == GPG_ERR_LEGACY_KEY + || gpg_err_code (rc) == GPG_ERR_UNKNOWN_VERSION) + ; break; } diff --git a/g10/keylist.c b/g10/keylist.c index 7b3fde188..85fcdbaff 100644 --- a/g10/keylist.c +++ b/g10/keylist.c @@ -527,6 +527,8 @@ list_all (ctrl_t ctrl, int secret, int mark_secret) { if (gpg_err_code (rc) == GPG_ERR_LEGACY_KEY) continue; /* Skip legacy keys. */ + if (gpg_err_code (rc) == GPG_ERR_UNKNOWN_VERSION) + continue; /* Skip keys with unknown versions. */ log_error ("keydb_get_keyblock failed: %s\n", gpg_strerror (rc)); goto leave; } diff --git a/g10/keyring.c b/g10/keyring.c index 25ef50747..a8dd46265 100644 --- a/g10/keyring.c +++ b/g10/keyring.c @@ -1476,6 +1476,8 @@ keyring_rebuild_cache (ctrl_t ctrl, void *token, int noisy) { if (gpg_err_code (rc) == GPG_ERR_LEGACY_KEY) continue; /* Skip legacy keys. */ + if (gpg_err_code (rc) == GPG_ERR_UNKNOWN_VERSION) + continue; /* Skip keys with unknown version. */ log_error ("keyring_get_keyblock failed: %s\n", gpg_strerror (rc)); goto leave; } diff --git a/g10/parse-packet.c b/g10/parse-packet.c index ff348ec69..05f63e928 100644 --- a/g10/parse-packet.c +++ b/g10/parse-packet.c @@ -2296,7 +2296,7 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen, log_error ("packet(%d) with unknown version %d\n", pkttype, version); if (list_mode) es_fputs (":key packet: [unknown version]\n", listfp); - err = gpg_error (GPG_ERR_INV_PACKET); + err = gpg_error (GPG_ERR_UNKNOWN_VERSION); goto leave; }