From b4f26dcf8f8d8bc55917dcfd59ddf7499b82a62d Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 30 May 2013 19:43:05 +0000 Subject: [PATCH] fixed bug due to not using realloc correctly (thanks valgrind) git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@6385 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- libretroshare/src/pgp/pgphandler.cc | 7 +++++-- openpgpsdk/src/openpgpsdk/keyring.c | 10 ++-------- 2 files changed, 7 insertions(+), 10 deletions(-) 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. } /**