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:
csoler 2013-05-31 17:33:20 +00:00
parent 554234d385
commit 4b21232beb

View file

@ -1617,9 +1617,9 @@ 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 // 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 ; int i=0 ;
const ops_keydata_t *keydata ; const ops_keydata_t *keydata ;
@ -1629,6 +1629,14 @@ bool PGPHandler::removeKeysFromPGPKeyring(const std::list<PGPIdType>& keys_to_re
cert._key_index = i ; cert._key_index = i ;
++i ; ++i ;
} }
}
if(_public_keyring_map.size() != _pubring->nkeys)
{
std::cerr << "Error after removing keys. Operation cancelled." << std::endl;
// todo
}
// Everything went well, sync back the keyring on disk // Everything went well, sync back the keyring on disk