Backport 9815 & 10161 to v6.x
Backport of #9815 & #10161
As per ecma-262 2015's #sec-%typedarray%-buffer-byteoffset-length,
offset
would be an integer, not a 32 bit unsigned integer. Also,
length
would be an integer with the maximum value of 2^53 - 1, not a
32 bit unsigned integer.
This would be a problem because, if we create a buffer from an
arraybuffer, from an offset which is greater than 2^32, it would be
actually pointing to a different location in arraybuffer. For example,
if we use 2^40 as offset, then the actual value used will be 0,
because byteOffset >>>= 0
will convert byteOffset
to a 32 bit
unsigned int, which is based on 2^32 modulo.
This is a redo, as the ca37fa52 broke CI.
Refer: #9814 Refer: #9492
PR-URL: #9815
Reviewed-By: Michaël Zasso targos@protonmail.com Reviewed-By: Trevor Norris trev.norris@gmail.com Reviewed-By: James M Snell jasnell@gmail.com Reviewed-By: Colin Ihrig cjihrig@gmail.com Reviewed-By: Matteo Collina matteo.collina@gmail.com
Checklist
-
make -j4 test
(UNIX), orvcbuild test
(Windows) passes -
tests and/or benchmarks are included -
commit message follows commit guidelines
Affected core subsystem(s)
buffer
CI Run: https://ci.nodejs.org/job/node-test-pull-request/6221/