Skip to content

Commit 2d25a01

Browse files
committed
[js] Fix nqp::slice on an array when removing more elements than it contains
1 parent 670aca2 commit 2d25a01

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/vm/js/nqp-runtime/reprs.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1153,19 +1153,20 @@ class VMArray extends REPR {
11531153
}
11541154

11551155
$$splice(source, offset, count) {
1156+
const removing = this.array.length - offset > count ? count : this.array.length - offset;
11561157
// TODO think about the case when the source is not VMArray
1157-
if (count < source.array.length) {
1158-
this.array.length = this.array.length + source.array.length - count;
1158+
if (removing < source.array.length) {
1159+
this.array.length = this.array.length + source.array.length - removing;
11591160
}
11601161

1161-
this.array.copyWithin(offset + source.array.length, offset + count);
1162+
this.array.copyWithin(offset + source.array.length, offset + removing);
11621163

11631164
for (let i = 0; i < source.array.length; i++) {
11641165
this.array[offset + i] = source.array[i];
11651166
}
11661167

1167-
if (count > source.array.length) {
1168-
this.array.length = this.array.length + source.array.length - count;
1168+
if (removing > source.array.length) {
1169+
this.array.length = this.array.length + source.array.length - removing;
11691170
}
11701171

11711172
return this;

0 commit comments

Comments
 (0)