diff --git a/libretroshare/src/pgp/pgphandler.cc b/libretroshare/src/pgp/pgphandler.cc index 1f2a404b9..c31e77363 100644 --- a/libretroshare/src/pgp/pgphandler.cc +++ b/libretroshare/src/pgp/pgphandler.cc @@ -820,11 +820,14 @@ bool PGPHandler::importGPGKeyPair(const std::string& filename,PGPIdType& importe void PGPHandler::addNewKeyToOPSKeyring(ops_keyring_t *kr,const ops_keydata_t& key) { - kr->keys = (ops_keydata_t*)realloc(kr->keys,(kr->nkeys+1)*sizeof(ops_keydata_t)) ; + if(kr->nkeys >= kr->nkeys_allocated) + { + kr->keys = (ops_keydata_t *)realloc(kr->keys,(kr->nkeys+1)*sizeof(ops_keydata_t)) ; + kr->nkeys_allocated = kr->nkeys+1; + } memset(&kr->keys[kr->nkeys],0,sizeof(ops_keydata_t)) ; ops_keydata_copy(&kr->keys[kr->nkeys],&key) ; kr->nkeys++ ; - kr->nkeys_allocated = kr->nkeys ; } bool PGPHandler::LoadCertificateFromString(const std::string& pgp_cert,PGPIdType& id,std::string& error_string) diff --git a/openpgpsdk/src/openpgpsdk/keyring.c b/openpgpsdk/src/openpgpsdk/keyring.c index 92202cd5a..1a591db56 100644 --- a/openpgpsdk/src/openpgpsdk/keyring.c +++ b/openpgpsdk/src/openpgpsdk/keyring.c @@ -876,15 +876,9 @@ void ops_keyring_remove_key(ops_keyring_t *keyring,int index) ops_keydata_copy(&keyring->keys[index],&keyring->keys[keyring->nkeys-1]) ; keydata_internal_free(&keyring->keys[keyring->nkeys-1]) ; - - if(NULL == realloc(keyring->keys,(keyring->nkeys-1)*sizeof(ops_keydata_t)) ) - { - fprintf(stderr,"ops_keyring_remove_key: ERROR: cannot re-alloc keyring memory.") ; - return ; - } - keyring->nkeys-- ; - keyring->nkeys_allocated-- ; + + // keyring->nkeys_allocated is left untouched intentionnaly. } /**