Ver Fonte

Fix memory leak when initiating key-exchange multiple times (#23)

Bryan Drewery há 14 anos atrás
pai
commit
cc1e0523d8
2 ficheiros alterados com 3 adições e 2 exclusões
  1. 2 1
      src/chanprog.c
  2. 1 1
      src/mod/server.mod/servmsg.c

+ 2 - 1
src/chanprog.c

@@ -925,7 +925,8 @@ void keyx(const bd::String &target) {
 
   putlog(LOG_MSGS, "*", "[FiSH] Initiating DH1080 key-exchange with %s - sending my public key", target.c_str());
   notice(target, "DH1080_INIT " + myPublicKeyB64, DP_HELP);
-  fish_data_t* fishData = new fish_data_t;
+  fish_data_t* fishData = FishKeys.contains(target) ? FishKeys[target] : new fish_data_t;
+  fishData->sharedKey.clear();
   fishData->myPublicKeyB64 = myPublicKeyB64;
   fishData->myPrivateKey = myPrivateKey;
   fishData->timestamp = now;

+ 1 - 1
src/mod/server.mod/servmsg.c

@@ -787,7 +787,7 @@ void handle_DH1080_init(const char* nick, const char* uhost, const char* from, s
 
   putlog(LOG_MSGS, "*", "[FiSH] Received DH1080 public key from (%s!%s) - sending mine", nick, uhost);
   notice(nick, "DH1080_FINISH " + myPublicKeyB64, DP_HELP);
-  fish_data_t* fishData = new fish_data_t;
+  fish_data_t* fishData = FishKeys.contains(nick) ? FishKeys[nick] : new fish_data_t;
   fishData->myPublicKeyB64 = myPublicKeyB64;
   fishData->myPrivateKey = myPrivateKey;
   fishData->sharedKey = sharedKey;