For TypedArrays read byteOffset before getting start and final#422
For TypedArrays read byteOffset before getting start and final#422nickva wants to merge 1 commit into
Conversation
Previously, in issue bellard#418 and pr bellard#417 I misread the spec that in `subarray` we should be able to access the `byteOffset` from a detached buffer. Thinking more about it, something didn't seem right and I started a discussion in the TC39 group [1]. It turns out we shouldn't be able to read the ``byteOffset`` from detched buffers. Instead, the spec says we should just read the `byteOffset` value before we access `start` and `finish`. In the test262 test [2] the buffer is detached when accessing the `end` inside the `valueOf()` conversion, and the test expects to see the `byteOffset` before it was detached. So to fix it, ensure we access and save the `byteOffset` value first, then get the `start` and `finish`. [1] https://es.discourse.group/t/typedarray-subarray-byteoffset-with-detached-buffers/2381 [2] https://github.com/tc39/test262/blob/main/test/built-ins/TypedArray/prototype/subarray/byteoffset-with-detached-buffer.js
735d16e to
1ab4972
Compare
|
Ran in CI with test262 https://github.com/nickva/quickjs/actions/runs/15958281778/job/45007403622 on top of the "Run test262 tests in CI" PR #408
|
|
There is still a small problem in your fix: you read ByteOffset before converting 'start' to integer as in the spec. I made another patch instead. |
You're right, I agree. I see the steps are For reference if others see this: https://tc39.es/ecma262/#sec-%25typedarray%25.prototype.subarray |

Previously, in issue #418 and pr #417 I misread the spec that in
subarraywe should be able to access thebyteOffsetfrom a detached buffer. Thinking more about it, something didn't seem right and I started a discussion in the TC39 group [1].It turns out we shouldn't be able to read the
byteOffsetfrom detched buffers. Instead, the spec says we should just read thebyteOffsetvalue before we accessstartandfinish. In the test262 test [2] the buffer is detached when accessing theendinside thevalueOf()conversion, and the test expects to see thebyteOffsetbefore it was detached.So to fix it, ensure we access and save the
byteOffsetvalue first, then get thestartandfinish.[1] https://es.discourse.group/t/typedarray-subarray-byteoffset-with-detached-buffers/2381
[2] https://github.com/tc39/test262/blob/main/test/built-ins/TypedArray/prototype/subarray/byteoffset-with-detached-buffer.js