From 2c83cd08a435c5f7619f39fea9ede88c8416e283 Mon Sep 17 00:00:00 2001 From: Allan McRae Date: Sun, 6 Mar 2022 20:32:49 +1000 Subject: [PATCH] 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 (cherry picked from commit 6b37d9943183f662cbd9be9031e5e7ba6fd6bea1) --- lib/libalpm/signing.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/libalpm/signing.c b/lib/libalpm/signing.c index 01a87bf3..464b677f 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 if(key->subkeys->keyid) { 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 = '?'; @@ -539,7 +543,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,