mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-01 03:22:48 -05:00
winpgnt: fix GUI removal of encrypted keys.
The GUI loop that responded to the 'Remove Key' button in the key list worked by actually trying to retrieve a pointer to the ssh_key for a stored key, and then passing that back to the delete function. But when a key is encrypted, that pointer is NULL, so we segfaulted. Fixed by changing pageant_delete_ssh2_key() to take a numeric index in the list instead of a key pointer.
This commit is contained in:
26
pageant.c
26
pageant.c
@ -1388,31 +1388,21 @@ ssh2_userkey *pageant_nth_ssh2_key(int i)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool pageant_delete_ssh1_key(RSAKey *rkey)
|
||||
bool pageant_delete_nth_ssh1_key(int i)
|
||||
{
|
||||
strbuf *blob = makeblob1(rkey);
|
||||
PageantKeySort sort = keysort(1, ptrlen_from_strbuf(blob));
|
||||
PageantKey *deleted = del234(keytree, &sort);
|
||||
strbuf_free(blob);
|
||||
|
||||
if (!deleted)
|
||||
PageantKey *pk = delpos234(keytree, find_first_key_for_version(1) + i);
|
||||
if (!pk)
|
||||
return false;
|
||||
assert(deleted->sort.ssh_version == 1);
|
||||
assert(deleted->rkey == rkey);
|
||||
pk_free(pk);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool pageant_delete_ssh2_key(ssh2_userkey *skey)
|
||||
bool pageant_delete_nth_ssh2_key(int i)
|
||||
{
|
||||
strbuf *blob = makeblob2(skey);
|
||||
PageantKeySort sort = keysort(2, ptrlen_from_strbuf(blob));
|
||||
PageantKey *deleted = del234(keytree, &sort);
|
||||
strbuf_free(blob);
|
||||
|
||||
if (!deleted)
|
||||
PageantKey *pk = delpos234(keytree, find_first_key_for_version(2) + i);
|
||||
if (!pk)
|
||||
return false;
|
||||
assert(deleted->sort.ssh_version == 2);
|
||||
assert(deleted->skey == skey);
|
||||
pk_free(pk);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user