mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-06-20 20:34:25 -04:00
fixed bug potentially causing keyring corruption.
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@6394 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
554234d385
commit
4b21232beb
1 changed files with 16 additions and 8 deletions
|
@ -1617,17 +1617,25 @@ bool PGPHandler::removeKeysFromPGPKeyring(const std::list<PGPIdType>& keys_to_re
|
||||||
// Erase the info from the keyring map.
|
// Erase the info from the keyring map.
|
||||||
//
|
//
|
||||||
_public_keyring_map.erase(res) ;
|
_public_keyring_map.erase(res) ;
|
||||||
|
|
||||||
|
// now update all indices back. This internal look is very costly, but it avoids deleting the wrong keys, since the keyring structure is
|
||||||
|
// changed by ops_keyring_remove_key and therefore indices don't point to the correct location anymore.
|
||||||
|
|
||||||
|
int i=0 ;
|
||||||
|
const ops_keydata_t *keydata ;
|
||||||
|
while( (keydata = ops_keyring_get_key_by_index(_pubring,i)) != NULL )
|
||||||
|
{
|
||||||
|
PGPCertificateInfo& cert(_public_keyring_map[ PGPIdType(keydata->key_id).toStdString() ]) ;
|
||||||
|
cert._key_index = i ;
|
||||||
|
++i ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// now update all indices back
|
if(_public_keyring_map.size() != _pubring->nkeys)
|
||||||
|
|
||||||
int i=0 ;
|
|
||||||
const ops_keydata_t *keydata ;
|
|
||||||
while( (keydata = ops_keyring_get_key_by_index(_pubring,i)) != NULL )
|
|
||||||
{
|
{
|
||||||
PGPCertificateInfo& cert(_public_keyring_map[ PGPIdType(keydata->key_id).toStdString() ]) ;
|
std::cerr << "Error after removing keys. Operation cancelled." << std::endl;
|
||||||
cert._key_index = i ;
|
|
||||||
++i ;
|
// todo
|
||||||
}
|
}
|
||||||
|
|
||||||
// Everything went well, sync back the keyring on disk
|
// Everything went well, sync back the keyring on disk
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue