Skip to content

Commit 7c82b7c

Browse files
authored
[TypedArray.prototype.copyWithin] Cover overlapping source/destination ranges
Ref tc39/ecma262#3619 Ref tc39/ecma262#3618
1 parent 8ca47bd commit 7c82b7c

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

test/built-ins/TypedArray/prototype/copyWithin/coerced-target-start-end-shrink.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,33 @@ for (let ctor of ctors) {
6565
assert.compareArray(ToNumbers(lengthTracking), [2, 1, 2],
6666
ctor.name + " truncated copy backward.");
6767
}
68+
69+
for (let ctor of ctors) {
70+
const rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT, 8 * ctor.BYTES_PER_ELEMENT);
71+
const lengthTracking = fillWithIndexes(new ctor(rab), 4);
72+
// [0, 1, 2,] 3]
73+
// <=--> dest
74+
// <=-> src
75+
const evil = () => {
76+
rab.resize(3 * ctor.BYTES_PER_ELEMENT);
77+
return 2;
78+
};
79+
lengthTracking.copyWithin({ valueOf: evil }, 1);
80+
assert.compareArray(ToNumbers(lengthTracking), [0, 1, 1],
81+
ctor.name + " truncated overlapping copy forward.");
82+
}
83+
84+
for (let ctor of ctors) {
85+
const rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT, 8 * ctor.BYTES_PER_ELEMENT);
86+
const lengthTracking = fillWithIndexes(new ctor(rab), 4);
87+
// [0, 1, 2,] 3]
88+
// <=--> src
89+
// <=-> dest
90+
const evil = () => {
91+
rab.resize(3 * ctor.BYTES_PER_ELEMENT);
92+
return 2;
93+
};
94+
lengthTracking.copyWithin(1, { valueOf: evil });
95+
assert.compareArray(ToNumbers(lengthTracking), [0, 2, 2],
96+
ctor.name + " truncated overlapping copy backward.");
97+
}

0 commit comments

Comments
 (0)