@@ -4197,9 +4197,13 @@ void DiffieHellman::ComputeSecret(const FunctionCallbackInfo<Value>& args) {
41974197 Buffer::Length (args[0 ]),
41984198 0 ));
41994199
4200- MallocedBuffer<char > data (DH_size (diffieHellman->dh_ .get ()));
4200+ size_t dh_size = DH_size (diffieHellman->dh_ .get ());
4201+ struct Free {
4202+ void operator ()(char * ptr) const { free (ptr); }
4203+ };
4204+ std::unique_ptr<char , Free> data (Malloc (dh_size));
42014205
4202- int size = DH_compute_key (reinterpret_cast <unsigned char *>(data.data ),
4206+ int size = DH_compute_key (reinterpret_cast <unsigned char *>(data.get () ),
42034207 key.get (),
42044208 diffieHellman->dh_ .get ());
42054209
@@ -4234,14 +4238,14 @@ void DiffieHellman::ComputeSecret(const FunctionCallbackInfo<Value>& args) {
42344238 // DH_compute_key returns number of bytes in a remainder of exponent, which
42354239 // may have less bytes than a prime number. Therefore add 0-padding to the
42364240 // allocated buffer.
4237- if (static_cast <size_t >(size) != data. size ) {
4238- CHECK_GT (data. size , static_cast <size_t >(size));
4239- memmove (data.data + data. size - size, data.data , size);
4240- memset (data.data , 0 , data. size - size);
4241+ if (static_cast <size_t >(size) != dh_size ) {
4242+ CHECK_GT (dh_size , static_cast <size_t >(size));
4243+ memmove (data.get () + dh_size - size, data.get () , size);
4244+ memset (data.get () , 0 , dh_size - size);
42414245 }
42424246
42434247 args.GetReturnValue ().Set (
4244- Buffer::New (env->isolate (), data.release (), data. size ).ToLocalChecked ());
4248+ Buffer::New (env->isolate (), data.release (), dh_size ).ToLocalChecked ());
42454249}
42464250
42474251void DiffieHellman::SetKey (const v8::FunctionCallbackInfo<Value>& args,
0 commit comments