diff options
author | Allan McRae <allan@archlinux.org> | 2022-03-06 20:32:49 +1000 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2022-03-06 20:36:59 +1000 |
commit | 6b37d9943183f662cbd9be9031e5e7ba6fd6bea1 (patch) | |
tree | 144cefd951bf79926421a49a21dca702e861c005 | |
parent | e1246baddd14ec6f4b6270b59bea0e1b639472a7 (diff) |
Fix segfault when failing to import keys
Avoid a segfault when a search of the keyserver returns that the
key is found but returns no primary IDs. We are then likely going
to fail the import, but attempt anyway because no-one know what
a keyserver will do!
Fixes FS#73534.
Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r-- | lib/libalpm/signing.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/libalpm/signing.c b/lib/libalpm/signing.c index 0e022624..8a7fd87c 100644 --- a/lib/libalpm/signing.c +++ b/lib/libalpm/signing.c @@ -359,14 +359,18 @@ static int key_search_keyserver(alpm_handle_t *handle, const char *fpr, } else { pgpkey->fingerprint = key->subkeys->keyid; } - pgpkey->uid = key->uids->uid; - pgpkey->name = key->uids->name; - pgpkey->email = key->uids->email; + + /* we are probably going to fail importing, but continue anyway... */ + if(key->uids != NULL) { + pgpkey->uid = key->uids->uid; + pgpkey->name = key->uids->name; + pgpkey->email = key->uids->email; + } + pgpkey->created = key->subkeys->timestamp; pgpkey->expires = key->subkeys->expires; pgpkey->length = key->subkeys->length; pgpkey->revoked = key->subkeys->revoked; - /* Initialize with '?', this is overwritten unless public key * algorithm is unknown. */ pgpkey->pubkey_algo = '?'; @@ -535,7 +539,7 @@ int _alpm_key_import(alpm_handle_t *handle, const char *uid, const char *fpr) ret = 0; } else { _alpm_log(handle, ALPM_LOG_ERROR, - _("key \"%s\" could not be imported\n"), fetch_key.uid); + _("key \"%s\" could not be imported\n"), fpr); } } else { _alpm_log(handle, ALPM_LOG_ERROR, |