8186674: Remove JDK-8174109 from CPU Aug 21 week builds
Backed out changeset cbd694bf7750
Reviewed-by: robm
diff --git a/jdk/src/share/classes/java/io/ObjectInputStream.java b/jdk/src/share/classes/java/io/ObjectInputStream.java
index c7924da..ebdd09a 100644
--- a/jdk/src/share/classes/java/io/ObjectInputStream.java
+++ b/jdk/src/share/classes/java/io/ObjectInputStream.java
@@ -43,7 +43,6 @@
import static java.io.ObjectStreamClass.processQueue;
-import sun.misc.SharedSecrets;
import sun.misc.ObjectInputFilter;
import sun.misc.ObjectStreamClassValidator;
import sun.misc.SharedSecrets;
@@ -255,12 +254,6 @@
public ObjectInputFilter getObjectInputFilter(ObjectInputStream stream) {
return stream.getInternalObjectInputFilter();
}
-
- public void checkArray(ObjectInputStream stream, Class<?> arrayType, int arrayLength)
- throws InvalidClassException
- {
- stream.checkArray(arrayType, arrayLength);
- }
});
}
@@ -1264,33 +1257,6 @@
}
/**
- * Checks the given array type and length to ensure that creation of such
- * an array is permitted by this ObjectInputStream. The arrayType argument
- * must represent an actual array type.
- *
- * This private method is called via SharedSecrets.
- *
- * @param arrayType the array type
- * @param arrayLength the array length
- * @throws NullPointerException if arrayType is null
- * @throws IllegalArgumentException if arrayType isn't actually an array type
- * @throws NegativeArraySizeException if arrayLength is negative
- * @throws InvalidClassException if the filter rejects creation
- */
- private void checkArray(Class<?> arrayType, int arrayLength) throws InvalidClassException {
- Objects.requireNonNull(arrayType);
- if (! arrayType.isArray()) {
- throw new IllegalArgumentException("not an array type");
- }
-
- if (arrayLength < 0) {
- throw new NegativeArraySizeException();
- }
-
- filterCheck(arrayType, arrayLength);
- }
-
- /**
* Provide access to the persistent fields read from the input stream.
*/
public static abstract class GetField {
diff --git a/jdk/src/share/classes/java/util/ArrayDeque.java b/jdk/src/share/classes/java/util/ArrayDeque.java
index 256379b..9e77f6d 100644
--- a/jdk/src/share/classes/java/util/ArrayDeque.java
+++ b/jdk/src/share/classes/java/util/ArrayDeque.java
@@ -36,7 +36,6 @@
import java.io.Serializable;
import java.util.function.Consumer;
-import sun.misc.SharedSecrets;
/**
* Resizable-array implementation of the {@link Deque} interface. Array
@@ -119,7 +118,12 @@
// ****** Array allocation and resizing utilities ******
- private static int calculateSize(int numElements) {
+ /**
+ * Allocates empty array to hold the given number of elements.
+ *
+ * @param numElements the number of elements to hold
+ */
+ private void allocateElements(int numElements) {
int initialCapacity = MIN_INITIAL_CAPACITY;
// Find the best power of two to hold elements.
// Tests "<=" because arrays aren't kept full.
@@ -135,16 +139,7 @@
if (initialCapacity < 0) // Too many elements, must back off
initialCapacity >>>= 1;// Good luck allocating 2 ^ 30 elements
}
- return initialCapacity;
- }
-
- /**
- * Allocates empty array to hold the given number of elements.
- *
- * @param numElements the number of elements to hold
- */
- private void allocateElements(int numElements) {
- elements = new Object[calculateSize(numElements)];
+ elements = new Object[initialCapacity];
}
/**
@@ -884,8 +879,6 @@
// Read in size and allocate array
int size = s.readInt();
- int capacity = calculateSize(size);
- SharedSecrets.getJavaOISAccess().checkArray(s, Object[].class, capacity);
allocateElements(size);
head = 0;
tail = size;
diff --git a/jdk/src/share/classes/java/util/ArrayList.java b/jdk/src/share/classes/java/util/ArrayList.java
index 0b015b0..925cc18 100644
--- a/jdk/src/share/classes/java/util/ArrayList.java
+++ b/jdk/src/share/classes/java/util/ArrayList.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, 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
@@ -28,7 +28,6 @@
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.UnaryOperator;
-import sun.misc.SharedSecrets;
/**
* Resizable-array implementation of the <tt>List</tt> interface. Implements
@@ -220,15 +219,12 @@
}
}
- private static int calculateCapacity(Object[] elementData, int minCapacity) {
- if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
- return Math.max(DEFAULT_CAPACITY, minCapacity);
- }
- return minCapacity;
- }
-
private void ensureCapacityInternal(int minCapacity) {
- ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
+ if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
+ minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
+ }
+
+ ensureExplicitCapacity(minCapacity);
}
private void ensureExplicitCapacity(int minCapacity) {
@@ -787,8 +783,6 @@
if (size > 0) {
// be like clone(), allocate array based upon size not capacity
- int capacity = calculateCapacity(elementData, size);
- SharedSecrets.getJavaOISAccess().checkArray(s, Object[].class, capacity);
ensureCapacityInternal(size);
Object[] a = elementData;
diff --git a/jdk/src/share/classes/java/util/HashMap.java b/jdk/src/share/classes/java/util/HashMap.java
index d74cfc0..eeb11f0 100644
--- a/jdk/src/share/classes/java/util/HashMap.java
+++ b/jdk/src/share/classes/java/util/HashMap.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, 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
@@ -34,7 +34,6 @@
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Function;
-import sun.misc.SharedSecrets;
/**
* Hash table based implementation of the <tt>Map</tt> interface. This
@@ -1393,12 +1392,8 @@
float ft = (float)cap * lf;
threshold = ((cap < MAXIMUM_CAPACITY && ft < MAXIMUM_CAPACITY) ?
(int)ft : Integer.MAX_VALUE);
-
- // Check Map.Entry[].class since it's the nearest public type to
- // what we're actually creating.
- SharedSecrets.getJavaOISAccess().checkArray(s, Map.Entry[].class, cap);
@SuppressWarnings({"rawtypes","unchecked"})
- Node<K,V>[] tab = (Node<K,V>[])new Node[cap];
+ Node<K,V>[] tab = (Node<K,V>[])new Node[cap];
table = tab;
// Read the keys and values, and put the mappings in the HashMap
diff --git a/jdk/src/share/classes/java/util/HashSet.java b/jdk/src/share/classes/java/util/HashSet.java
index 54a526c..f9b09ee 100644
--- a/jdk/src/share/classes/java/util/HashSet.java
+++ b/jdk/src/share/classes/java/util/HashSet.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, 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
@@ -26,7 +26,6 @@
package java.util;
import java.io.InvalidObjectException;
-import sun.misc.SharedSecrets;
/**
* This class implements the <tt>Set</tt> interface, backed by a hash table
@@ -317,19 +316,12 @@
throw new InvalidObjectException("Illegal size: " +
size);
}
+
// Set the capacity according to the size and load factor ensuring that
// the HashMap is at least 25% full but clamping to maximum capacity.
capacity = (int) Math.min(size * Math.min(1 / loadFactor, 4.0f),
HashMap.MAXIMUM_CAPACITY);
- // Constructing the backing map will lazily create an array when the first element is
- // added, so check it before construction. Call HashMap.tableSizeFor to compute the
- // actual allocation size. Check Map.Entry[].class since it's the nearest public type to
- // what is actually created.
-
- SharedSecrets.getJavaOISAccess()
- .checkArray(s, Map.Entry[].class, HashMap.tableSizeFor(capacity));
-
// Create backing HashMap
map = (((HashSet<?>)this) instanceof LinkedHashSet ?
new LinkedHashMap<E,Object>(capacity, loadFactor) :
diff --git a/jdk/src/share/classes/java/util/Hashtable.java b/jdk/src/share/classes/java/util/Hashtable.java
index b22bab8..c7e9251 100644
--- a/jdk/src/share/classes/java/util/Hashtable.java
+++ b/jdk/src/share/classes/java/util/Hashtable.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1994, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 2013, 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
@@ -30,7 +30,6 @@
import java.util.function.BiConsumer;
import java.util.function.Function;
import java.util.function.BiFunction;
-import sun.misc.SharedSecrets;
/**
* This class implements a hash table, which maps keys to values. Any
@@ -1193,10 +1192,6 @@
if (length > elements && (length & 1) == 0)
length--;
length = Math.min(length, origlength);
-
- // Check Map.Entry[].class since it's the nearest public type to
- // what we're actually creating.
- SharedSecrets.getJavaOISAccess().checkArray(s, Map.Entry[].class, length);
table = new Entry<?,?>[length];
threshold = (int)Math.min(length * loadFactor, MAX_ARRAY_SIZE + 1);
count = 0;
diff --git a/jdk/src/share/classes/java/util/IdentityHashMap.java b/jdk/src/share/classes/java/util/IdentityHashMap.java
index 89db448..9dc0c26 100644
--- a/jdk/src/share/classes/java/util/IdentityHashMap.java
+++ b/jdk/src/share/classes/java/util/IdentityHashMap.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -29,7 +29,6 @@
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import java.util.function.Consumer;
-import sun.misc.SharedSecrets;
/**
* This class implements the <tt>Map</tt> interface with a hash table, using
@@ -1305,9 +1304,7 @@
if (size < 0)
throw new java.io.StreamCorruptedException
("Illegal mappings count: " + size);
- int cap = capacity(size);
- SharedSecrets.getJavaOISAccess().checkArray(s, Object[].class, cap);
- init(cap);
+ init(capacity(size));
// Read the keys and values, and put the mappings in the table
for (int i=0; i<size; i++) {
diff --git a/jdk/src/share/classes/java/util/PriorityQueue.java b/jdk/src/share/classes/java/util/PriorityQueue.java
index e1e3dfb..f2f8706 100644
--- a/jdk/src/share/classes/java/util/PriorityQueue.java
+++ b/jdk/src/share/classes/java/util/PriorityQueue.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, 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
@@ -26,7 +26,6 @@
package java.util;
import java.util.function.Consumer;
-import sun.misc.SharedSecrets;
/**
* An unbounded priority {@linkplain Queue queue} based on a priority heap.
@@ -785,7 +784,6 @@
// Read in (and discard) array length
s.readInt();
- SharedSecrets.getJavaOISAccess().checkArray(s, Object[].class, size);
queue = new Object[size];
// Read in all elements.
diff --git a/jdk/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java b/jdk/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java
index 1f310ef..162ad3b 100644
--- a/jdk/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java
+++ b/jdk/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java
@@ -50,7 +50,6 @@
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.UnaryOperator;
-import sun.misc.SharedSecrets;
/**
* A thread-safe variant of {@link java.util.ArrayList} in which all mutative
@@ -990,7 +989,6 @@
// Read in array length and allocate array
int len = s.readInt();
- SharedSecrets.getJavaOISAccess().checkArray(s, Object[].class, len);
Object[] elements = new Object[len];
// Read in all elements in the proper order.
diff --git a/jdk/src/share/classes/sun/misc/JavaOISAccess.java b/jdk/src/share/classes/sun/misc/JavaOISAccess.java
index c51f268..8be96eb 100644
--- a/jdk/src/share/classes/sun/misc/JavaOISAccess.java
+++ b/jdk/src/share/classes/sun/misc/JavaOISAccess.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -25,12 +25,9 @@
package sun.misc;
-import java.io.InvalidClassException;
import java.io.ObjectInputStream;
public interface JavaOISAccess {
void setObjectInputFilter(ObjectInputStream stream, ObjectInputFilter filter);
ObjectInputFilter getObjectInputFilter(ObjectInputStream stream);
- void checkArray(ObjectInputStream stream, Class<?> arrayType, int arrayLength)
- throws InvalidClassException;
}
diff --git a/jdk/src/share/classes/sun/misc/JavaObjectInputStreamAccess.java b/jdk/src/share/classes/sun/misc/JavaObjectInputStreamAccess.java
new file mode 100644
index 0000000..8b6a7e1
--- /dev/null
+++ b/jdk/src/share/classes/sun/misc/JavaObjectInputStreamAccess.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2016, 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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.
+ */
+
+package sun.misc;
+
+import java.io.ObjectInputStream;
+
+/**
+ * The interface to specify methods for accessing {@code ObjectInputStream}
+ * @author sjiang
+ */
+public interface JavaObjectInputStreamAccess {
+ /**
+ * Sets a descriptor validating.
+ * @param ois stream to have the descriptors validated
+ * @param validator validator used to validate a descriptor.
+ */
+ public void setValidator(ObjectInputStream ois, ObjectStreamClassValidator validator);
+}
diff --git a/jdk/src/share/classes/sun/misc/ObjectStreamClassValidator.java b/jdk/src/share/classes/sun/misc/ObjectStreamClassValidator.java
new file mode 100644
index 0000000..f98a387
--- /dev/null
+++ b/jdk/src/share/classes/sun/misc/ObjectStreamClassValidator.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2016, 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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.
+ */
+
+package sun.misc;
+
+import java.io.ObjectStreamClass;
+
+/**
+ * A callback used by {@code ObjectInputStream} to do descriptor validation.
+ *
+ * @author sjiang
+ */
+public interface ObjectStreamClassValidator {
+ /**
+ * This method will be called by ObjectInputStream to
+ * check a descriptor just before creating an object described by this descriptor.
+ * The object will not be created if this method throws a {@code RuntimeException}.
+ * @param descriptor descriptor to be checked.
+ */
+ public void validateDescriptor(ObjectStreamClass descriptor);
+}
diff --git a/jdk/test/java/io/Serializable/serialFilter/SerialFilterTest.java b/jdk/test/java/io/Serializable/serialFilter/SerialFilterTest.java
index 0f6d50f..479b849 100644
--- a/jdk/test/java/io/Serializable/serialFilter/SerialFilterTest.java
+++ b/jdk/test/java/io/Serializable/serialFilter/SerialFilterTest.java
@@ -35,11 +35,9 @@
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.List;
-import java.util.Map;
import java.util.concurrent.atomic.LongAdder;
import sun.misc.ObjectInputFilter;
@@ -156,11 +154,6 @@
interfaces, (p, m, args) -> p);
Runnable runnable = (Runnable & Serializable) SerialFilterTest::noop;
-
- List<Class<?>> classList = new ArrayList<>();
- classList.add(HashSet.class);
- classList.addAll(Collections.nCopies(21, Map.Entry[].class));
-
Object[][] objects = {
{ null, 0, -1, 0, 0, 0,
Arrays.asList()}, // no callback, no values
@@ -180,7 +173,8 @@
objArray.getClass(),
SerialFilterTest.class,
java.lang.invoke.SerializedLambda.class)},
- { deepHashSet(10), 69, 4, 50, 11, 619, classList },
+ { deepHashSet(10), 48, -1, 50, 11, 619,
+ Arrays.asList(HashSet.class)},
{ proxy.getClass(), 3, -1, 2, 2, 112,
Arrays.asList(Runnable.class,
java.lang.reflect.Proxy.class,