r3098 - in trunk/libmikey: include/libmikey keyagreement
mikma at minisip.org
mikma at minisip.org
Mon Jan 8 15:27:05 CET 2007
Author: mikma
Date: 2007-01-08 15:27:04 +0100 (Mon, 08 Jan 2007)
New Revision: 3098
Modified:
trunk/libmikey/include/libmikey/keyagreement_dh.h
trunk/libmikey/keyagreement/keyagreement_dh.cxx
Log:
Fix memory leaks in KeyAgreementDH
Modified: trunk/libmikey/include/libmikey/keyagreement_dh.h
===================================================================
--- trunk/libmikey/include/libmikey/keyagreement_dh.h 2007-01-08 14:20:45 UTC (rev 3097)
+++ trunk/libmikey/include/libmikey/keyagreement_dh.h 2007-01-08 14:27:04 UTC (rev 3098)
@@ -78,6 +78,8 @@
OakleyDH * dh;
byte_t * peerKeyPtr;
int peerKeyLengthValue;
+ byte_t * publicKeyPtr;
+ int publicKeyLengthValue;
};
class LIBMIKEY_API KeyAgreementDH : public KeyAgreement,
Modified: trunk/libmikey/keyagreement/keyagreement_dh.cxx
===================================================================
--- trunk/libmikey/keyagreement/keyagreement_dh.cxx 2007-01-08 14:20:45 UTC (rev 3097)
+++ trunk/libmikey/keyagreement/keyagreement_dh.cxx 2007-01-08 14:27:04 UTC (rev 3098)
@@ -59,7 +59,9 @@
//
KeyAgreementDHBase::KeyAgreementDHBase():
peerKeyPtr( NULL ),
- peerKeyLengthValue( 0 )
+ peerKeyLengthValue( 0 ),
+ publicKeyPtr( NULL ),
+ publicKeyLengthValue( 0 )
{
dh = new OakleyDH();
if( dh == NULL )
@@ -75,6 +77,10 @@
delete [] peerKeyPtr;
peerKeyPtr = NULL;
}
+ if( publicKeyPtr != NULL ){
+ delete [] publicKeyPtr;
+ publicKeyPtr = NULL;
+ }
}
//
@@ -113,6 +119,16 @@
setTgk( NULL, len );
}
+ int32_t length = dh->publicKeyLength();
+ if( length != publicKeyLengthValue ){
+ if( publicKeyPtr ){
+ delete[] publicKeyPtr;
+ }
+ publicKeyLengthValue = length;
+ publicKeyPtr = new unsigned char[ length ];
+ }
+ dh->getPublicKey( publicKeyPtr, length );
+
return 0;
}
@@ -128,16 +144,11 @@
}
int KeyAgreementDHBase::publicKeyLength(){
- return dh->publicKeyLength();
+ return publicKeyLengthValue;
}
unsigned char * KeyAgreementDHBase::publicKey(){
- unsigned char * publicKey;
- uint32_t length = publicKeyLength();
- publicKey = new unsigned char[ length ];
- dh->getPublicKey( publicKey, length );
- return publicKey;
-
+ return publicKeyPtr;
}
int KeyAgreementDHBase::computeTgk(){
@@ -148,8 +159,10 @@
}
int KeyAgreementDHBase::group(){
+ if( !publicKeyPtr )
+ return -1;
+
return dh->group();
-
}
int KeyAgreementDHBase::peerKeyLength(){
More information about the Minisip-devel
mailing list