@@ -4147,7 +4147,7 @@ static int Node_SignFinal(EVP_MD_CTX* mdctx, unsigned char* md,
4147
4147
SignBase::Error Sign::SignFinal (const char * key_pem,
4148
4148
int key_pem_len,
4149
4149
const char * passphrase,
4150
- unsigned char ** sig,
4150
+ unsigned char * sig,
4151
4151
unsigned int * sig_len,
4152
4152
int padding,
4153
4153
int salt_len) {
@@ -4196,7 +4196,7 @@ SignBase::Error Sign::SignFinal(const char* key_pem,
4196
4196
}
4197
4197
#endif // NODE_FIPS_MODE
4198
4198
4199
- if (Node_SignFinal (&mdctx_, * sig, sig_len, pkey, padding, salt_len))
4199
+ if (Node_SignFinal (&mdctx_, sig, sig_len, pkey, padding, salt_len))
4200
4200
fatal = false ;
4201
4201
4202
4202
initialised_ = false ;
@@ -4222,9 +4222,6 @@ void Sign::SignFinal(const FunctionCallbackInfo<Value>& args) {
4222
4222
Sign* sign;
4223
4223
ASSIGN_OR_RETURN_UNWRAP (&sign, args.Holder ());
4224
4224
4225
- unsigned char * md_value;
4226
- unsigned int md_len;
4227
-
4228
4225
unsigned int len = args.Length ();
4229
4226
4230
4227
node::Utf8Value passphrase (env->isolate (), args[1 ]);
@@ -4243,30 +4240,24 @@ void Sign::SignFinal(const FunctionCallbackInfo<Value>& args) {
4243
4240
CHECK (maybe_salt_len.IsJust ());
4244
4241
int salt_len = maybe_salt_len.ToChecked ();
4245
4242
4246
- md_len = 8192 ; // Maximum key size is 8192 bits
4247
- md_value = new unsigned char [md_len];
4248
-
4249
4243
ClearErrorOnReturn clear_error_on_return;
4244
+ unsigned char md_value[8192 ];
4245
+ unsigned int md_len = sizeof (md_value);
4250
4246
4251
4247
Error err = sign->SignFinal (
4252
4248
buf,
4253
4249
buf_len,
4254
4250
len >= 2 && !args[1 ]->IsNull () ? *passphrase : nullptr ,
4255
- & md_value,
4251
+ md_value,
4256
4252
&md_len,
4257
4253
padding,
4258
4254
salt_len);
4259
- if (err != kSignOk ) {
4260
- delete[] md_value;
4261
- md_value = nullptr ;
4262
- md_len = 0 ;
4255
+ if (err != kSignOk )
4263
4256
return sign->CheckThrow (err);
4264
- }
4265
4257
4266
- Local<Object> rc = Buffer::Copy (env->isolate (),
4267
- reinterpret_cast <const char *>(md_value),
4268
- md_len).ToLocalChecked ();
4269
- delete[] md_value;
4258
+ Local<Object> rc =
4259
+ Buffer::Copy (env, reinterpret_cast <char *>(md_value), md_len)
4260
+ .ToLocalChecked ();
4270
4261
args.GetReturnValue ().Set (rc);
4271
4262
}
4272
4263
0 commit comments