8169233: LengthNotWritableFilter extraElements.remove(index) has no effect
authorhannesw
Sat, 02 Sep 2017 14:26:29 +0200
changeset 47205 6ddad446ba23
parent 47204 43d311201799
child 47206 275ace68a93a
8169233: LengthNotWritableFilter extraElements.remove(index) has no effect Reviewed-by: sundar, jlaskey Contributed-by: priya.lakshmi.muthuswamy@oracle.com
nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/arrays/LengthNotWritableFilter.java
nashorn/test/script/basic/JDK-8035312.js.EXPECTED
nashorn/test/script/basic/JDK-8169233.js
nashorn/test/script/basic/JDK-8169233.js.EXPECTED
--- 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