@@ -2750,19 +2750,10 @@ void CipherBase::Update(const FunctionCallbackInfo<Value>& args) {
2750
2750
2751
2751
// Only copy the data if we have to, because it's a string
2752
2752
if (args[0 ]->IsString ()) {
2753
- Local<String> string = args[0 ].As <String>();
2754
- enum encoding encoding = ParseEncoding (env->isolate (), args[1 ], BINARY);
2755
- if (!StringBytes::IsValidString (env->isolate (), string, encoding))
2756
- return env->ThrowTypeError (" Bad input string" );
2757
- size_t buflen = StringBytes::StorageSize (env->isolate (), string, encoding);
2758
- char * buf = new char [buflen];
2759
- size_t written = StringBytes::Write (env->isolate (),
2760
- buf,
2761
- buflen,
2762
- string,
2763
- encoding);
2764
- r = cipher->Update (buf, written, &out, &out_len);
2765
- delete[] buf;
2753
+ StringBytes::InlineDecoder decoder;
2754
+ if (!decoder.Decode (env, args[0 ].As <String>(), args[1 ], BINARY))
2755
+ return ;
2756
+ r = cipher->Update (decoder.out (), decoder.size (), &out, &out_len);
2766
2757
} else {
2767
2758
char * buf = Buffer::Data (args[0 ]);
2768
2759
size_t buflen = Buffer::Length (args[0 ]);
@@ -2929,19 +2920,10 @@ void Hmac::HmacUpdate(const FunctionCallbackInfo<Value>& args) {
2929
2920
// Only copy the data if we have to, because it's a string
2930
2921
bool r;
2931
2922
if (args[0 ]->IsString ()) {
2932
- Local<String> string = args[0 ].As <String>();
2933
- enum encoding encoding = ParseEncoding (env->isolate (), args[1 ], BINARY);
2934
- if (!StringBytes::IsValidString (env->isolate (), string, encoding))
2935
- return env->ThrowTypeError (" Bad input string" );
2936
- size_t buflen = StringBytes::StorageSize (env->isolate (), string, encoding);
2937
- char * buf = new char [buflen];
2938
- size_t written = StringBytes::Write (env->isolate (),
2939
- buf,
2940
- buflen,
2941
- string,
2942
- encoding);
2943
- r = hmac->HmacUpdate (buf, written);
2944
- delete[] buf;
2923
+ StringBytes::InlineDecoder decoder;
2924
+ if (!decoder.Decode (env, args[0 ].As <String>(), args[1 ], BINARY))
2925
+ return ;
2926
+ r = hmac->HmacUpdate (decoder.out (), decoder.size ());
2945
2927
} else {
2946
2928
char * buf = Buffer::Data (args[0 ]);
2947
2929
size_t buflen = Buffer::Length (args[0 ]);
@@ -3053,19 +3035,10 @@ void Hash::HashUpdate(const FunctionCallbackInfo<Value>& args) {
3053
3035
// Only copy the data if we have to, because it's a string
3054
3036
bool r;
3055
3037
if (args[0 ]->IsString ()) {
3056
- Local<String> string = args[0 ].As <String>();
3057
- enum encoding encoding = ParseEncoding (env->isolate (), args[1 ], BINARY);
3058
- if (!StringBytes::IsValidString (env->isolate (), string, encoding))
3059
- return env->ThrowTypeError (" Bad input string" );
3060
- size_t buflen = StringBytes::StorageSize (env->isolate (), string, encoding);
3061
- char * buf = new char [buflen];
3062
- size_t written = StringBytes::Write (env->isolate (),
3063
- buf,
3064
- buflen,
3065
- string,
3066
- encoding);
3067
- r = hash->HashUpdate (buf, written);
3068
- delete[] buf;
3038
+ StringBytes::InlineDecoder decoder;
3039
+ if (!decoder.Decode (env, args[0 ].As <String>(), args[1 ], BINARY))
3040
+ return ;
3041
+ r = hash->HashUpdate (decoder.out (), decoder.size ());
3069
3042
} else {
3070
3043
char * buf = Buffer::Data (args[0 ]);
3071
3044
size_t buflen = Buffer::Length (args[0 ]);
@@ -3214,19 +3187,10 @@ void Sign::SignUpdate(const FunctionCallbackInfo<Value>& args) {
3214
3187
// Only copy the data if we have to, because it's a string
3215
3188
Error err;
3216
3189
if (args[0 ]->IsString ()) {
3217
- Local<String> string = args[0 ].As <String>();
3218
- enum encoding encoding = ParseEncoding (env->isolate (), args[1 ], BINARY);
3219
- if (!StringBytes::IsValidString (env->isolate (), string, encoding))
3220
- return env->ThrowTypeError (" Bad input string" );
3221
- size_t buflen = StringBytes::StorageSize (env->isolate (), string, encoding);
3222
- char * buf = new char [buflen];
3223
- size_t written = StringBytes::Write (env->isolate (),
3224
- buf,
3225
- buflen,
3226
- string,
3227
- encoding);
3228
- err = sign->SignUpdate (buf, written);
3229
- delete[] buf;
3190
+ StringBytes::InlineDecoder decoder;
3191
+ if (!decoder.Decode (env, args[0 ].As <String>(), args[1 ], BINARY))
3192
+ return ;
3193
+ err = sign->SignUpdate (decoder.out (), decoder.size ());
3230
3194
} else {
3231
3195
char * buf = Buffer::Data (args[0 ]);
3232
3196
size_t buflen = Buffer::Length (args[0 ]);
@@ -3395,19 +3359,10 @@ void Verify::VerifyUpdate(const FunctionCallbackInfo<Value>& args) {
3395
3359
// Only copy the data if we have to, because it's a string
3396
3360
Error err;
3397
3361
if (args[0 ]->IsString ()) {
3398
- Local<String> string = args[0 ].As <String>();
3399
- enum encoding encoding = ParseEncoding (env->isolate (), args[1 ], BINARY);
3400
- if (!StringBytes::IsValidString (env->isolate (), string, encoding))
3401
- return env->ThrowTypeError (" Bad input string" );
3402
- size_t buflen = StringBytes::StorageSize (env->isolate (), string, encoding);
3403
- char * buf = new char [buflen];
3404
- size_t written = StringBytes::Write (env->isolate (),
3405
- buf,
3406
- buflen,
3407
- string,
3408
- encoding);
3409
- err = verify->VerifyUpdate (buf, written);
3410
- delete[] buf;
3362
+ StringBytes::InlineDecoder decoder;
3363
+ if (!decoder.Decode (env, args[0 ].As <String>(), args[1 ], BINARY))
3364
+ return ;
3365
+ err = verify->VerifyUpdate (decoder.out (), decoder.size ());
3411
3366
} else {
3412
3367
char * buf = Buffer::Data (args[0 ]);
3413
3368
size_t buflen = Buffer::Length (args[0 ]);
0 commit comments