crypto: fix memory leak in PBKDF2Request
authorKarl Skomski <karl@skomski.com>
Fri, 14 Aug 2015 12:35:41 +0000 (14:35 +0200)
committerBen Noordhuis <info@bnoordhuis.nl>
Mon, 17 Aug 2015 19:23:14 +0000 (21:23 +0200)
PR-URL: https://github.com/nodejs/node/pull/2375
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
src/node_crypto.cc

index 10223df..14da905 100644 (file)
@@ -4624,6 +4624,7 @@ class PBKDF2Request : public AsyncWrap {
   }
 
   ~PBKDF2Request() override {
+    release();
     persistent().Reset();
   }
 
@@ -4665,10 +4666,15 @@ class PBKDF2Request : public AsyncWrap {
 
   inline void release() {
     free(pass_);
+    pass_ = nullptr;
     passlen_ = 0;
+
     free(salt_);
+    salt_ = nullptr;
     saltlen_ = 0;
+
     free(key_);
+    key_ = nullptr;
     keylen_ = 0;
   }
 
@@ -4739,7 +4745,6 @@ void EIO_PBKDF2After(uv_work_t* work_req, int status) {
   Local<Value> argv[2];
   EIO_PBKDF2After(req, argv);
   req->MakeCallback(env->ondone_string(), ARRAY_SIZE(argv), argv);
-  req->release();
   delete req;
 }
 
@@ -4850,6 +4855,9 @@ void PBKDF2(const FunctionCallbackInfo<Value>& args) {
     Local<Value> argv[2];
     EIO_PBKDF2(req);
     EIO_PBKDF2After(req, argv);
+
+    delete req;
+
     if (argv[0]->IsObject())
       env->isolate()->ThrowException(argv[0]);
     else