summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbellard <6490144+bellard@users.noreply.github.com>2025-06-14 11:30:13 +0200
committerGitHub <noreply@github.com>2025-06-14 11:30:13 +0200
commit9b935dba42c2c108759c50c0c55ef0003b53e725 (patch)
tree855ce82890c6b6052169dfee55035f5b5b8f38b5
parent638ec8ca5e1d4aed002a9fb3ef3358e2a6bc42ab (diff)
parent0f7eadf95ce8509af1df838ed3e83fd68a04e269 (diff)
downloadquickjs-9b935dba42c2c108759c50c0c55ef0003b53e725.tar.gz
quickjs-9b935dba42c2c108759c50c0c55ef0003b53e725.zip
Merge pull request #418 from nickva/fix-byteoffset-for-detached-array-buffers
Fix byteOffset for detached array buffers
-rw-r--r--.github/workflows/ci.yml1
-rw-r--r--quickjs.c11
-rw-r--r--test262_errors.txt1
3 files changed, 6 insertions, 7 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index bec4a48..c9ccf62 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -214,6 +214,7 @@ jobs:
submodules: true
- name: Install MinGW and Wine
run: |
+ sudo apt update
sudo apt install -y wine mingw-w64
cp /usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll .
- name: Setup Wine
diff --git a/quickjs.c b/quickjs.c
index 34346f4..f271927 100644
--- a/quickjs.c
+++ b/quickjs.c
@@ -54017,7 +54017,8 @@ static JSValue js_typed_array_subarray(JSContext *ctx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
JSValueConst args[4];
- JSValue arr, byteOffset, ta_buffer;
+ JSValue arr, ta_buffer;
+ JSTypedArray *ta;
JSObject *p;
int len, start, final, count, shift, offset;
@@ -54034,12 +54035,10 @@ static JSValue js_typed_array_subarray(JSContext *ctx, JSValueConst this_val,
goto exception;
}
count = max_int(final - start, 0);
- byteOffset = js_typed_array_get_byteOffset(ctx, this_val, 0);
- if (JS_IsException(byteOffset))
- goto exception;
shift = typed_array_size_log2(p->class_id);
- offset = JS_VALUE_GET_INT(byteOffset) + (start << shift);
- JS_FreeValue(ctx, byteOffset);
+ ta = p->u.typed_array;
+ /* Read byteOffset (ta->offset) even if detached */
+ offset = ta->offset + (start << shift);
ta_buffer = js_typed_array_get_buffer(ctx, this_val, 0);
if (JS_IsException(ta_buffer))
goto exception;
diff --git a/test262_errors.txt b/test262_errors.txt
index 9df6f74..7dd3f76 100644
--- a/test262_errors.txt
+++ b/test262_errors.txt
@@ -23,7 +23,6 @@ test262/test/staging/sm/TypedArray/prototype-constructor-identity.js:17: Test262
test262/test/staging/sm/TypedArray/set-detached-bigint.js:27: Error: Assertion failed: expected exception SyntaxError, got RangeError: invalid array length
test262/test/staging/sm/TypedArray/set-detached.js:112: RangeError: invalid array length
test262/test/staging/sm/TypedArray/sort_modifications.js:12: Test262Error: Int8Array at index 0 for size 4 Expected SameValue(«0», «1») to be true
-test262/test/staging/sm/TypedArray/subarray.js:15: Test262Error: Expected SameValue(«0», «1») to be true
test262/test/staging/sm/async-functions/async-contains-unicode-escape.js:45: Error: Assertion failed: expected exception SyntaxError, no exception thrown
test262/test/staging/sm/async-functions/await-error.js:12: Test262Error: Expected SameValue(«false», «true») to be true
test262/test/staging/sm/async-functions/await-in-arrow-parameters.js:33: Error: Assertion failed: expected exception SyntaxError, no exception thrown - AsyncFunction:(a = (b = await/r/g) => {}) => {}