提交 7db612b7 编写于 作者: A asaha

8186674: Remove JDK-8174109 from CPU Aug 21 week builds

Summary: Backed out changeset 4b8d4f91a480
Reviewed-by: robm
上级 d1b5e57b
...@@ -43,7 +43,6 @@ import java.util.concurrent.ConcurrentMap; ...@@ -43,7 +43,6 @@ import java.util.concurrent.ConcurrentMap;
import static java.io.ObjectStreamClass.processQueue; import static java.io.ObjectStreamClass.processQueue;
import sun.misc.SharedSecrets;
import sun.misc.ObjectInputFilter; import sun.misc.ObjectInputFilter;
import sun.misc.ObjectStreamClassValidator; import sun.misc.ObjectStreamClassValidator;
import sun.misc.SharedSecrets; import sun.misc.SharedSecrets;
...@@ -255,12 +254,6 @@ public class ObjectInputStream ...@@ -255,12 +254,6 @@ public class ObjectInputStream
public ObjectInputFilter getObjectInputFilter(ObjectInputStream stream) { public ObjectInputFilter getObjectInputFilter(ObjectInputStream stream) {
return stream.getInternalObjectInputFilter(); return stream.getInternalObjectInputFilter();
} }
public void checkArray(ObjectInputStream stream, Class<?> arrayType, int arrayLength)
throws InvalidClassException
{
stream.checkArray(arrayType, arrayLength);
}
}); });
} }
...@@ -1263,33 +1256,6 @@ public class ObjectInputStream ...@@ -1263,33 +1256,6 @@ public class ObjectInputStream
} }
} }
/**
* 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. * Provide access to the persistent fields read from the input stream.
*/ */
......
...@@ -36,7 +36,6 @@ package java.util; ...@@ -36,7 +36,6 @@ package java.util;
import java.io.Serializable; import java.io.Serializable;
import java.util.function.Consumer; import java.util.function.Consumer;
import sun.misc.SharedSecrets;
/** /**
* Resizable-array implementation of the {@link Deque} interface. Array * Resizable-array implementation of the {@link Deque} interface. Array
...@@ -119,7 +118,12 @@ public class ArrayDeque<E> extends AbstractCollection<E> ...@@ -119,7 +118,12 @@ public class ArrayDeque<E> extends AbstractCollection<E>
// ****** Array allocation and resizing utilities ****** // ****** 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; int initialCapacity = MIN_INITIAL_CAPACITY;
// Find the best power of two to hold elements. // Find the best power of two to hold elements.
// Tests "<=" because arrays aren't kept full. // Tests "<=" because arrays aren't kept full.
...@@ -135,16 +139,7 @@ public class ArrayDeque<E> extends AbstractCollection<E> ...@@ -135,16 +139,7 @@ public class ArrayDeque<E> extends AbstractCollection<E>
if (initialCapacity < 0) // Too many elements, must back off if (initialCapacity < 0) // Too many elements, must back off
initialCapacity >>>= 1;// Good luck allocating 2 ^ 30 elements initialCapacity >>>= 1;// Good luck allocating 2 ^ 30 elements
} }
return initialCapacity; elements = new Object[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)];
} }
/** /**
...@@ -884,8 +879,6 @@ public class ArrayDeque<E> extends AbstractCollection<E> ...@@ -884,8 +879,6 @@ public class ArrayDeque<E> extends AbstractCollection<E>
// Read in size and allocate array // Read in size and allocate array
int size = s.readInt(); int size = s.readInt();
int capacity = calculateSize(size);
SharedSecrets.getJavaOISAccess().checkArray(s, Object[].class, capacity);
allocateElements(size); allocateElements(size);
head = 0; head = 0;
tail = size; tail = size;
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -28,7 +28,6 @@ package java.util; ...@@ -28,7 +28,6 @@ package java.util;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.function.UnaryOperator; import java.util.function.UnaryOperator;
import sun.misc.SharedSecrets;
/** /**
* Resizable-array implementation of the <tt>List</tt> interface. Implements * Resizable-array implementation of the <tt>List</tt> interface. Implements
...@@ -220,15 +219,12 @@ public class ArrayList<E> extends AbstractList<E> ...@@ -220,15 +219,12 @@ public class ArrayList<E> extends AbstractList<E>
} }
} }
private static int calculateCapacity(Object[] elementData, int minCapacity) { private void ensureCapacityInternal(int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
return Math.max(DEFAULT_CAPACITY, minCapacity); minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
} }
return minCapacity;
}
private void ensureCapacityInternal(int minCapacity) { ensureExplicitCapacity(minCapacity);
ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
} }
private void ensureExplicitCapacity(int minCapacity) { private void ensureExplicitCapacity(int minCapacity) {
...@@ -787,8 +783,6 @@ public class ArrayList<E> extends AbstractList<E> ...@@ -787,8 +783,6 @@ public class ArrayList<E> extends AbstractList<E>
if (size > 0) { if (size > 0) {
// be like clone(), allocate array based upon size not capacity // be like clone(), allocate array based upon size not capacity
int capacity = calculateCapacity(elementData, size);
SharedSecrets.getJavaOISAccess().checkArray(s, Object[].class, capacity);
ensureCapacityInternal(size); ensureCapacityInternal(size);
Object[] a = elementData; Object[] a = elementData;
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -34,7 +34,6 @@ import java.util.function.BiConsumer; ...@@ -34,7 +34,6 @@ import java.util.function.BiConsumer;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function; import java.util.function.Function;
import sun.misc.SharedSecrets;
/** /**
* Hash table based implementation of the <tt>Map</tt> interface. This * Hash table based implementation of the <tt>Map</tt> interface. This
...@@ -1393,12 +1392,8 @@ public class HashMap<K,V> extends AbstractMap<K,V> ...@@ -1393,12 +1392,8 @@ public class HashMap<K,V> extends AbstractMap<K,V>
float ft = (float)cap * lf; float ft = (float)cap * lf;
threshold = ((cap < MAXIMUM_CAPACITY && ft < MAXIMUM_CAPACITY) ? threshold = ((cap < MAXIMUM_CAPACITY && ft < MAXIMUM_CAPACITY) ?
(int)ft : Integer.MAX_VALUE); (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"}) @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; table = tab;
// Read the keys and values, and put the mappings in the HashMap // Read the keys and values, and put the mappings in the HashMap
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
package java.util; package java.util;
import java.io.InvalidObjectException; import java.io.InvalidObjectException;
import sun.misc.SharedSecrets;
/** /**
* This class implements the <tt>Set</tt> interface, backed by a hash table * This class implements the <tt>Set</tt> interface, backed by a hash table
...@@ -317,19 +316,12 @@ public class HashSet<E> ...@@ -317,19 +316,12 @@ public class HashSet<E>
throw new InvalidObjectException("Illegal size: " + throw new InvalidObjectException("Illegal size: " +
size); size);
} }
// Set the capacity according to the size and load factor ensuring that // Set the capacity according to the size and load factor ensuring that
// the HashMap is at least 25% full but clamping to maximum capacity. // the HashMap is at least 25% full but clamping to maximum capacity.
capacity = (int) Math.min(size * Math.min(1 / loadFactor, 4.0f), capacity = (int) Math.min(size * Math.min(1 / loadFactor, 4.0f),
HashMap.MAXIMUM_CAPACITY); 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 // Create backing HashMap
map = (((HashSet<?>)this) instanceof LinkedHashSet ? map = (((HashSet<?>)this) instanceof LinkedHashSet ?
new LinkedHashMap<E,Object>(capacity, loadFactor) : new LinkedHashMap<E,Object>(capacity, loadFactor) :
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -30,7 +30,6 @@ import java.util.concurrent.ThreadLocalRandom; ...@@ -30,7 +30,6 @@ import java.util.concurrent.ThreadLocalRandom;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import sun.misc.SharedSecrets;
/** /**
* This class implements a hash table, which maps keys to values. Any * This class implements a hash table, which maps keys to values. Any
...@@ -1193,10 +1192,6 @@ public class Hashtable<K,V> ...@@ -1193,10 +1192,6 @@ public class Hashtable<K,V>
if (length > elements && (length & 1) == 0) if (length > elements && (length & 1) == 0)
length--; length--;
length = Math.min(length, origlength); 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]; table = new Entry<?,?>[length];
threshold = (int)Math.min(length * loadFactor, MAX_ARRAY_SIZE + 1); threshold = (int)Math.min(length * loadFactor, MAX_ARRAY_SIZE + 1);
count = 0; count = 0;
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -29,7 +29,6 @@ import java.lang.reflect.Array; ...@@ -29,7 +29,6 @@ import java.lang.reflect.Array;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Consumer; import java.util.function.Consumer;
import sun.misc.SharedSecrets;
/** /**
* This class implements the <tt>Map</tt> interface with a hash table, using * This class implements the <tt>Map</tt> interface with a hash table, using
...@@ -1305,9 +1304,7 @@ public class IdentityHashMap<K,V> ...@@ -1305,9 +1304,7 @@ public class IdentityHashMap<K,V>
if (size < 0) if (size < 0)
throw new java.io.StreamCorruptedException throw new java.io.StreamCorruptedException
("Illegal mappings count: " + size); ("Illegal mappings count: " + size);
int cap = capacity(size); init(capacity(size));
SharedSecrets.getJavaOISAccess().checkArray(s, Object[].class, cap);
init(cap);
// Read the keys and values, and put the mappings in the table // Read the keys and values, and put the mappings in the table
for (int i=0; i<size; i++) { for (int i=0; i<size; i++) {
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
package java.util; package java.util;
import java.util.function.Consumer; import java.util.function.Consumer;
import sun.misc.SharedSecrets;
/** /**
* An unbounded priority {@linkplain Queue queue} based on a priority heap. * An unbounded priority {@linkplain Queue queue} based on a priority heap.
...@@ -785,7 +784,6 @@ public class PriorityQueue<E> extends AbstractQueue<E> ...@@ -785,7 +784,6 @@ public class PriorityQueue<E> extends AbstractQueue<E>
// Read in (and discard) array length // Read in (and discard) array length
s.readInt(); s.readInt();
SharedSecrets.getJavaOISAccess().checkArray(s, Object[].class, size);
queue = new Object[size]; queue = new Object[size];
// Read in all elements. // Read in all elements.
......
...@@ -50,7 +50,6 @@ import java.util.concurrent.locks.ReentrantLock; ...@@ -50,7 +50,6 @@ import java.util.concurrent.locks.ReentrantLock;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.function.UnaryOperator; import java.util.function.UnaryOperator;
import sun.misc.SharedSecrets;
/** /**
* A thread-safe variant of {@link java.util.ArrayList} in which all mutative * A thread-safe variant of {@link java.util.ArrayList} in which all mutative
...@@ -990,7 +989,6 @@ public class CopyOnWriteArrayList<E> ...@@ -990,7 +989,6 @@ public class CopyOnWriteArrayList<E>
// Read in array length and allocate array // Read in array length and allocate array
int len = s.readInt(); int len = s.readInt();
SharedSecrets.getJavaOISAccess().checkArray(s, Object[].class, len);
Object[] elements = new Object[len]; Object[] elements = new Object[len];
// Read in all elements in the proper order. // Read in all elements in the proper order.
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -25,12 +25,9 @@ ...@@ -25,12 +25,9 @@
package sun.misc; package sun.misc;
import java.io.InvalidClassException;
import java.io.ObjectInputStream; import java.io.ObjectInputStream;
public interface JavaOISAccess { public interface JavaOISAccess {
void setObjectInputFilter(ObjectInputStream stream, ObjectInputFilter filter); void setObjectInputFilter(ObjectInputStream stream, ObjectInputFilter filter);
ObjectInputFilter getObjectInputFilter(ObjectInputStream stream); ObjectInputFilter getObjectInputFilter(ObjectInputStream stream);
void checkArray(ObjectInputStream stream, Class<?> arrayType, int arrayLength)
throws InvalidClassException;
} }
/*
* 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);
}
/*
* 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);
}
...@@ -35,11 +35,9 @@ import java.lang.reflect.InvocationTargetException; ...@@ -35,11 +35,9 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Proxy; import java.lang.reflect.Proxy;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.LongAdder; import java.util.concurrent.atomic.LongAdder;
import sun.misc.ObjectInputFilter; import sun.misc.ObjectInputFilter;
...@@ -156,11 +154,6 @@ public class SerialFilterTest implements Serializable { ...@@ -156,11 +154,6 @@ public class SerialFilterTest implements Serializable {
interfaces, (p, m, args) -> p); interfaces, (p, m, args) -> p);
Runnable runnable = (Runnable & Serializable) SerialFilterTest::noop; 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 = { Object[][] objects = {
{ null, 0, -1, 0, 0, 0, { null, 0, -1, 0, 0, 0,
Arrays.asList()}, // no callback, no values Arrays.asList()}, // no callback, no values
...@@ -180,7 +173,8 @@ public class SerialFilterTest implements Serializable { ...@@ -180,7 +173,8 @@ public class SerialFilterTest implements Serializable {
objArray.getClass(), objArray.getClass(),
SerialFilterTest.class, SerialFilterTest.class,
java.lang.invoke.SerializedLambda.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, { proxy.getClass(), 3, -1, 2, 2, 112,
Arrays.asList(Runnable.class, Arrays.asList(Runnable.class,
java.lang.reflect.Proxy.class, java.lang.reflect.Proxy.class,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册