Skip to content

Commit da49a37

Browse files
jwalkersaghul
authored andcommitted
Addresses an incomplete fix from 1b0b660
1 parent a7f0b8a commit da49a37

2 files changed

Lines changed: 7 additions & 0 deletions

File tree

quickjs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9901,6 +9901,7 @@ static int set_array_length(JSContext *ctx, JSObject *p, JSValue val,
99019901
if (len < old_len) {
99029902
for(i = len; i < old_len; i++) {
99039903
JS_FreeValue(ctx, p->u.array.u.values[i]);
9904+
p->u.array.u.values[i] = JS_UNDEFINED;
99049905
}
99059906
p->u.array.count = len;
99069907
}

tests/fix_set_array_length-uaf.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// Crash — heap-use-after-free (confirmed with ASan)
2+
const arr = [{a:1}, {b:2}, {c:3}, {d:4}, {e:5}];
3+
arr.length = 2; // frees elements 2-4
4+
arr.length = 5; // grows length back; count stays at 2
5+
arr.push({f:6}); // count jumps to 6; elements 2-4 are freed but readable
6+
print(JSON.stringify(arr[3])); // reads freed memory

0 commit comments

Comments
 (0)