mirror of
https://github.com/nodejs/node.git
synced 2024-12-01 16:10:02 +01:00
src: change Fill() to use ParseArrayIndex()
Changed Fill() to use ParseArrayIndex() when getting start and end of buffers instead of Uint32Value, supporting buffers of greater than 2**32 Fixes: https://github.com/nodejs/node/issues/31514 Co-Authored-By: Rich Trott <rtrott@gmail.com> PR-URL: https://github.com/nodejs/node/pull/31591 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
0f96dc266f
commit
d4660aba63
@ -590,10 +590,11 @@ void Fill(const FunctionCallbackInfo<Value>& args) {
|
||||
THROW_AND_RETURN_UNLESS_BUFFER(env, args[0]);
|
||||
SPREAD_BUFFER_ARG(args[0], ts_obj);
|
||||
|
||||
uint32_t start;
|
||||
if (!args[2]->Uint32Value(ctx).To(&start)) return;
|
||||
uint32_t end;
|
||||
if (!args[3]->Uint32Value(ctx).To(&end)) return;
|
||||
size_t start;
|
||||
THROW_AND_RETURN_IF_OOB(ParseArrayIndex(env, args[2], 0, &start));
|
||||
size_t end;
|
||||
THROW_AND_RETURN_IF_OOB(ParseArrayIndex(env, args[3], 0, &end));
|
||||
|
||||
size_t fill_length = end - start;
|
||||
Local<String> str_obj;
|
||||
size_t str_length;
|
||||
|
@ -325,10 +325,12 @@ Buffer.alloc(8, '');
|
||||
assert.strictEqual(buf.toString(), 'էէէէէ');
|
||||
}
|
||||
|
||||
// Testing process.binding. Make sure "start" is properly checked for -1 wrap
|
||||
// around.
|
||||
assert.strictEqual(
|
||||
internalBinding('buffer').fill(Buffer.alloc(1), 1, -1, 0, 1), -2);
|
||||
// Testing process.binding. Make sure "start" is properly checked for range
|
||||
// errors.
|
||||
assert.throws(
|
||||
() => { internalBinding('buffer').fill(Buffer.alloc(1), 1, -1, 0, 1); },
|
||||
{ code: 'ERR_OUT_OF_RANGE' }
|
||||
);
|
||||
|
||||
// Make sure "end" is properly checked, even if it's magically mangled using
|
||||
// Symbol.toPrimitive.
|
||||
@ -347,10 +349,12 @@ assert.strictEqual(
|
||||
});
|
||||
}
|
||||
|
||||
// Testing process.binding. Make sure "end" is properly checked for -1 wrap
|
||||
// around.
|
||||
assert.strictEqual(
|
||||
internalBinding('buffer').fill(Buffer.alloc(1), 1, 1, -2, 1), -2);
|
||||
// Testing process.binding. Make sure "end" is properly checked for range
|
||||
// errors.
|
||||
assert.throws(
|
||||
() => { internalBinding('buffer').fill(Buffer.alloc(1), 1, 1, -2, 1); },
|
||||
{ code: 'ERR_OUT_OF_RANGE' }
|
||||
);
|
||||
|
||||
// Test that bypassing 'length' won't cause an abort.
|
||||
assert.throws(() => {
|
||||
|
Loading…
Reference in New Issue
Block a user