crypto: fix mem {de}allocation in ExportChallenge
authorKarl Skomski <karl@skomski.com>
Wed, 12 Aug 2015 13:30:01 +0000 (15:30 +0200)
committerFedor Indutny <fedor@indutny.com>
Fri, 21 Aug 2015 05:01:09 +0000 (22:01 -0700)
Use correct deallocator for returned buffera.
Don't free internal structure via ASN1_STRING_data.
Deallocate NETSCAPE_SPKI.

PR-URL: https://github.com/nodejs/node/pull/2359
Reviewed-By: Fedor Indutny <fedor@indutny.com>
src/node_crypto.cc

index 5275021..0e4fc45 100644 (file)
@@ -5281,10 +5281,12 @@ const char* Certificate::ExportChallenge(const char* data, int len) {
   if (sp == nullptr)
     return nullptr;
 
-  const char* buf = nullptr;
-  buf = reinterpret_cast<const char*>(ASN1_STRING_data(sp->spkac->challenge));
+  unsigned char* buf = nullptr;
+  ASN1_STRING_to_UTF8(&buf, sp->spkac->challenge);
 
-  return buf;
+  NETSCAPE_SPKI_free(sp);
+
+  return reinterpret_cast<const char*>(buf);
 }
 
 
@@ -5311,7 +5313,7 @@ void Certificate::ExportChallenge(const FunctionCallbackInfo<Value>& args) {
 
   Local<Value> outString = Encode(env->isolate(), cert, strlen(cert), BUFFER);
 
-  delete[] cert;
+  OPENSSL_free(const_cast<char*>(cert));
 
   args.GetReturnValue().Set(outString);
 }