8169233: LengthNotWritableFilter extraElements.remove(index) has no effect
Reviewed-by: sundar, jlaskey
Contributed-by: priya.lakshmi.muthuswamy@oracle.com
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/arrays/LengthNotWritableFilter.java Fri Sep 01 14:13:42 2017 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/arrays/LengthNotWritableFilter.java Sat Sep 02 14:26:29 2017 +0200
@@ -143,7 +143,7 @@
@Override
public ArrayData delete(final int index) {
- extraElements.remove(index);
+ extraElements.remove(ArrayIndex.toLongIndex(index));
underlying = underlying.delete(index);
return this;
}
--- a/nashorn/test/script/basic/JDK-8035312.js.EXPECTED Fri Sep 01 14:13:42 2017 +0000
+++ b/nashorn/test/script/basic/JDK-8035312.js.EXPECTED Sat Sep 02 14:26:29 2017 +0200
@@ -58,37 +58,37 @@
>>> Pop test
Popping from 1,2,3
- array is now [1,2,3] length is = 3
+ array is now [1,2,] length is = 3
class jdk.nashorn.internal.runtime.arrays.LengthNotWritableFilter
-Popping from 1,2,3
- array is now [1,2,3] length is = 3
+Popping from 1,2,
+ array is now [1,2,] length is = 3
class jdk.nashorn.internal.runtime.arrays.LengthNotWritableFilter
x.length === 3 (should be 3)
-x === 1,2,3
-Popping from 1,2,3
- array is now [1,2,3] length is = 3
+x === 1,2,
+Popping from 1,2,
+ array is now [1,2,] length is = 3
class jdk.nashorn.internal.runtime.arrays.LengthNotWritableFilter
-Popping from 1,2,3
- array is now [1,2,3] length is = 3
+Popping from 1,2,
+ array is now [1,2,] length is = 3
class jdk.nashorn.internal.runtime.arrays.LengthNotWritableFilter
-Popping from 1,2,3
- array is now [1,2,3] length is = 3
+Popping from 1,2,
+ array is now [1,2,] length is = 3
class jdk.nashorn.internal.runtime.arrays.LengthNotWritableFilter
-Popping from 1,2,3
- array is now [1,2,3] length is = 3
+Popping from 1,2,
+ array is now [1,2,] length is = 3
class jdk.nashorn.internal.runtime.arrays.LengthNotWritableFilter
-Popping from 1,2,3
- array is now [1,2,3] length is = 3
+Popping from 1,2,
+ array is now [1,2,] length is = 3
class jdk.nashorn.internal.runtime.arrays.LengthNotWritableFilter
x.length === 3 (should be 3)
-x === 1,2,3
+x === 1,2,
class jdk.nashorn.internal.runtime.arrays.LengthNotWritableFilter
Writing 0
class jdk.nashorn.internal.runtime.arrays.LengthNotWritableFilter
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8169233.js Sat Sep 02 14:26:29 2017 +0200
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * JDK-8169233 : LengthNotWritableFilter: extraElements.remove(index) has no effect
+ *
+ * @test
+ * @run
+ */
+
+var array = ['a', 'b', 'c', 'd'];
+Object.defineProperty(array, "length", {writable: false});
+try {
+ array.push('e');
+} catch (e) {
+}
+print("array : "+array);
+print("length : " + array.length);
+delete array[0];
+print("array : "+array);
+print("length : " + array.length);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8169233.js.EXPECTED Sat Sep 02 14:26:29 2017 +0200
@@ -0,0 +1,4 @@
+array : a,b,c,d
+length : 4
+array : ,b,c,d
+length : 4