[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 <allan@archlinux.org> --- 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 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, -- 2.35.1
participants (1)
-
Allan McRae