buffer: fix unintended unsigned overflow · nodejs/node@46f40cf

Original file line numberDiff line numberDiff line change

@@ -718,16 +718,16 @@ void StringWrite(const FunctionCallbackInfo<Value>& args) {

718718

size_t max_length;

719719
720720

CHECK_NOT_OOB(ParseArrayIndex(args[1], 0, &offset));

721+

if (offset >= ts_obj_length)

722+

return env->ThrowRangeError("Offset is out of bounds");

723+
721724

CHECK_NOT_OOB(ParseArrayIndex(args[2], ts_obj_length - offset, &max_length));

722725
723726

max_length = MIN(ts_obj_length - offset, max_length);

724727
725728

if (max_length == 0)

726729

return args.GetReturnValue().Set(0);

727730
728-

if (offset >= ts_obj_length)

729-

return env->ThrowRangeError("Offset is out of bounds");

730-
731731

uint32_t written = StringBytes::Write(env->isolate(),

732732

ts_obj_data + offset,

733733

max_length,