6777487: Encoder allows reading private variables with certain names
Reviewed-by: peterz
This commit is contained in:
parent
99c5ea5368
commit
de6e2fb6e2
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved.
|
||||
* Copyright 2000-2009 Sun Microsystems, Inc. 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
|
||||
@ -333,31 +333,6 @@ abstract class java_util_Collections extends PersistenceDelegate {
|
||||
return (oldC.size() == newC.size()) && oldC.containsAll(newC);
|
||||
}
|
||||
|
||||
static Object getPrivateField(final Object instance, final String name) {
|
||||
return AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
Class type = instance.getClass();
|
||||
while ( true ) {
|
||||
try {
|
||||
Field field = type.getDeclaredField(name);
|
||||
field.setAccessible(true);
|
||||
return field.get( instance );
|
||||
}
|
||||
catch (NoSuchFieldException exception) {
|
||||
type = type.getSuperclass();
|
||||
if (type == null) {
|
||||
throw new IllegalStateException("Could not find field " + name, exception);
|
||||
}
|
||||
}
|
||||
catch (Exception exception) {
|
||||
throw new IllegalStateException("Could not get value " + type.getName() + '.' + name, exception);
|
||||
}
|
||||
}
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
static final class EmptyList_PersistenceDelegate extends java_util_Collections {
|
||||
protected Expression instantiate(Object oldInstance, Encoder out) {
|
||||
return new Expression(oldInstance, Collections.class, "emptyList", null);
|
||||
@ -498,7 +473,7 @@ abstract class java_util_Collections extends PersistenceDelegate {
|
||||
|
||||
static final class CheckedCollection_PersistenceDelegate extends java_util_Collections {
|
||||
protected Expression instantiate(Object oldInstance, Encoder out) {
|
||||
Object type = getPrivateField(oldInstance, "type");
|
||||
Object type = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedCollection.type");
|
||||
List list = new ArrayList((Collection) oldInstance);
|
||||
return new Expression(oldInstance, Collections.class, "checkedCollection", new Object[]{list, type});
|
||||
}
|
||||
@ -506,7 +481,7 @@ abstract class java_util_Collections extends PersistenceDelegate {
|
||||
|
||||
static final class CheckedList_PersistenceDelegate extends java_util_Collections {
|
||||
protected Expression instantiate(Object oldInstance, Encoder out) {
|
||||
Object type = getPrivateField(oldInstance, "type");
|
||||
Object type = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedCollection.type");
|
||||
List list = new LinkedList((Collection) oldInstance);
|
||||
return new Expression(oldInstance, Collections.class, "checkedList", new Object[]{list, type});
|
||||
}
|
||||
@ -514,7 +489,7 @@ abstract class java_util_Collections extends PersistenceDelegate {
|
||||
|
||||
static final class CheckedRandomAccessList_PersistenceDelegate extends java_util_Collections {
|
||||
protected Expression instantiate(Object oldInstance, Encoder out) {
|
||||
Object type = getPrivateField(oldInstance, "type");
|
||||
Object type = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedCollection.type");
|
||||
List list = new ArrayList((Collection) oldInstance);
|
||||
return new Expression(oldInstance, Collections.class, "checkedList", new Object[]{list, type});
|
||||
}
|
||||
@ -522,7 +497,7 @@ abstract class java_util_Collections extends PersistenceDelegate {
|
||||
|
||||
static final class CheckedSet_PersistenceDelegate extends java_util_Collections {
|
||||
protected Expression instantiate(Object oldInstance, Encoder out) {
|
||||
Object type = getPrivateField(oldInstance, "type");
|
||||
Object type = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedCollection.type");
|
||||
Set set = new HashSet((Set) oldInstance);
|
||||
return new Expression(oldInstance, Collections.class, "checkedSet", new Object[]{set, type});
|
||||
}
|
||||
@ -530,7 +505,7 @@ abstract class java_util_Collections extends PersistenceDelegate {
|
||||
|
||||
static final class CheckedSortedSet_PersistenceDelegate extends java_util_Collections {
|
||||
protected Expression instantiate(Object oldInstance, Encoder out) {
|
||||
Object type = getPrivateField(oldInstance, "type");
|
||||
Object type = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedCollection.type");
|
||||
SortedSet set = new TreeSet((SortedSet) oldInstance);
|
||||
return new Expression(oldInstance, Collections.class, "checkedSortedSet", new Object[]{set, type});
|
||||
}
|
||||
@ -538,8 +513,8 @@ abstract class java_util_Collections extends PersistenceDelegate {
|
||||
|
||||
static final class CheckedMap_PersistenceDelegate extends java_util_Collections {
|
||||
protected Expression instantiate(Object oldInstance, Encoder out) {
|
||||
Object keyType = getPrivateField(oldInstance, "keyType");
|
||||
Object valueType = getPrivateField(oldInstance, "valueType");
|
||||
Object keyType = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedMap.keyType");
|
||||
Object valueType = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedMap.valueType");
|
||||
Map map = new HashMap((Map) oldInstance);
|
||||
return new Expression(oldInstance, Collections.class, "checkedMap", new Object[]{map, keyType, valueType});
|
||||
}
|
||||
@ -547,8 +522,8 @@ abstract class java_util_Collections extends PersistenceDelegate {
|
||||
|
||||
static final class CheckedSortedMap_PersistenceDelegate extends java_util_Collections {
|
||||
protected Expression instantiate(Object oldInstance, Encoder out) {
|
||||
Object keyType = getPrivateField(oldInstance, "keyType");
|
||||
Object valueType = getPrivateField(oldInstance, "valueType");
|
||||
Object keyType = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedMap.keyType");
|
||||
Object valueType = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedMap.valueType");
|
||||
SortedMap map = new TreeMap((SortedMap) oldInstance);
|
||||
return new Expression(oldInstance, Collections.class, "checkedSortedMap", new Object[]{map, keyType, valueType});
|
||||
}
|
||||
@ -570,7 +545,7 @@ class java_util_EnumMap_PersistenceDelegate extends PersistenceDelegate {
|
||||
}
|
||||
|
||||
private static Object getType(Object instance) {
|
||||
return java_util_Collections.getPrivateField(instance, "keyType");
|
||||
return MetaData.getPrivateFieldValue(instance, "java.util.EnumMap.keyType");
|
||||
}
|
||||
}
|
||||
|
||||
@ -589,7 +564,7 @@ class java_util_EnumSet_PersistenceDelegate extends PersistenceDelegate {
|
||||
}
|
||||
|
||||
private static Object getType(Object instance) {
|
||||
return java_util_Collections.getPrivateField(instance, "elementType");
|
||||
return MetaData.getPrivateFieldValue(instance, "java.util.EnumSet.elementType");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1280,7 +1255,7 @@ class javax_swing_Box_PersistenceDelegate extends DefaultPersistenceDelegate {
|
||||
|
||||
private Integer getAxis(Object object) {
|
||||
Box box = (Box) object;
|
||||
return (Integer) java_util_Collections.getPrivateField(box.getLayout(), "axis");
|
||||
return (Integer) MetaData.getPrivateFieldValue(box.getLayout(), "javax.swing.BoxLayout.axis");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1363,6 +1338,7 @@ final class sun_swing_PrintColorUIResource_PersistenceDelegate extends Persisten
|
||||
}
|
||||
|
||||
class MetaData {
|
||||
private static final Map<String,Field> fields = Collections.synchronizedMap(new WeakHashMap<String, Field>());
|
||||
private static Hashtable internalPersistenceDelegates = new Hashtable();
|
||||
|
||||
private static PersistenceDelegate nullPersistenceDelegate = new NullPersistenceDelegate();
|
||||
@ -1501,4 +1477,35 @@ class MetaData {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
static Object getPrivateFieldValue(Object instance, String name) {
|
||||
Field field = fields.get(name);
|
||||
if (field == null) {
|
||||
int index = name.lastIndexOf('.');
|
||||
final String className = name.substring(0, index);
|
||||
final String fieldName = name.substring(1 + index);
|
||||
field = AccessController.doPrivileged(new PrivilegedAction<Field>() {
|
||||
public Field run() {
|
||||
try {
|
||||
Field field = Class.forName(className).getDeclaredField(fieldName);
|
||||
field.setAccessible(true);
|
||||
return field;
|
||||
}
|
||||
catch (ClassNotFoundException exception) {
|
||||
throw new IllegalStateException("Could not find class", exception);
|
||||
}
|
||||
catch (NoSuchFieldException exception) {
|
||||
throw new IllegalStateException("Could not find field", exception);
|
||||
}
|
||||
}
|
||||
});
|
||||
fields.put(name, field);
|
||||
}
|
||||
try {
|
||||
return field.get(instance);
|
||||
}
|
||||
catch (IllegalAccessException exception) {
|
||||
throw new IllegalStateException("Could not get value of the field", exception);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
52
jdk/test/java/beans/XMLEncoder/6777487/TestBox.java
Normal file
52
jdk/test/java/beans/XMLEncoder/6777487/TestBox.java
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6777487
|
||||
* @summary Tests private field access for BoxLayout
|
||||
* @author Sergey Malenkov
|
||||
*/
|
||||
|
||||
import java.awt.FlowLayout;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
|
||||
public final class TestBox {
|
||||
private static final Integer OBJECT = Integer.valueOf(-123);
|
||||
|
||||
public static void main(String[] args) {
|
||||
TestEncoder.test(
|
||||
new Box(BoxLayout.LINE_AXIS),
|
||||
new Box(BoxLayout.PAGE_AXIS) {
|
||||
@Override
|
||||
public FlowLayout getLayout() {
|
||||
return new FlowLayout() {
|
||||
private final Object axis = OBJECT;
|
||||
};
|
||||
}
|
||||
},
|
||||
OBJECT
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6777487
|
||||
* @summary Tests private field access for CheckedCollection
|
||||
* @author Sergey Malenkov
|
||||
*/
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public final class TestCheckedCollection {
|
||||
private static final Object OBJECT = new Object();
|
||||
|
||||
public static void main(String[] args) {
|
||||
List<String> list = Collections.emptyList();
|
||||
TestEncoder.test(
|
||||
Collections.checkedCollection(list, String.class),
|
||||
new ArrayList() {
|
||||
private final Object type = OBJECT;
|
||||
},
|
||||
OBJECT
|
||||
);
|
||||
}
|
||||
}
|
48
jdk/test/java/beans/XMLEncoder/6777487/TestCheckedList.java
Normal file
48
jdk/test/java/beans/XMLEncoder/6777487/TestCheckedList.java
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6777487
|
||||
* @summary Tests private field access for CheckedList
|
||||
* @author Sergey Malenkov
|
||||
*/
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public final class TestCheckedList {
|
||||
private static final Object OBJECT = new Object();
|
||||
|
||||
public static void main(String[] args) {
|
||||
List<String> list = Collections.emptyList();
|
||||
TestEncoder.test(
|
||||
Collections.checkedList(list, String.class),
|
||||
new ArrayList() {
|
||||
private final Object type = OBJECT;
|
||||
},
|
||||
OBJECT
|
||||
);
|
||||
}
|
||||
}
|
49
jdk/test/java/beans/XMLEncoder/6777487/TestCheckedMap.java
Normal file
49
jdk/test/java/beans/XMLEncoder/6777487/TestCheckedMap.java
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6777487
|
||||
* @summary Tests private field access for CheckedMap
|
||||
* @author Sergey Malenkov
|
||||
*/
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public final class TestCheckedMap {
|
||||
private static final Object OBJECT = new Object();
|
||||
|
||||
public static void main(String[] args) {
|
||||
Map<String, String> map = Collections.emptyMap();
|
||||
TestEncoder.test(
|
||||
Collections.checkedMap(map, String.class, String.class),
|
||||
new HashMap() {
|
||||
private final Object keyType = OBJECT;
|
||||
private final Object valueType = OBJECT;
|
||||
},
|
||||
OBJECT
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6777487
|
||||
* @summary Tests private field access for CheckedRandomAccessList
|
||||
* @author Sergey Malenkov
|
||||
*/
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public final class TestCheckedRandomAccessList {
|
||||
private static final Object OBJECT = new Object();
|
||||
|
||||
public static void main(String[] args) {
|
||||
List<String> list = new ArrayList<String>();
|
||||
TestEncoder.test(
|
||||
Collections.checkedList(list, String.class),
|
||||
new ArrayList() {
|
||||
private final Object type = OBJECT;
|
||||
},
|
||||
OBJECT
|
||||
);
|
||||
}
|
||||
}
|
48
jdk/test/java/beans/XMLEncoder/6777487/TestCheckedSet.java
Normal file
48
jdk/test/java/beans/XMLEncoder/6777487/TestCheckedSet.java
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6777487
|
||||
* @summary Tests private field access for CheckedSet
|
||||
* @author Sergey Malenkov
|
||||
*/
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public final class TestCheckedSet {
|
||||
private static final Object OBJECT = new Object();
|
||||
|
||||
public static void main(String[] args) {
|
||||
Set<String> set = Collections.emptySet();
|
||||
TestEncoder.test(
|
||||
Collections.checkedSet(set, String.class),
|
||||
new HashSet() {
|
||||
private final Object type = OBJECT;
|
||||
},
|
||||
OBJECT
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6777487
|
||||
* @summary Tests private field access for CheckedSortedMap
|
||||
* @author Sergey Malenkov
|
||||
*/
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.SortedMap;
|
||||
import java.util.TreeMap;
|
||||
|
||||
public final class TestCheckedSortedMap {
|
||||
private static final Object OBJECT = new Object();
|
||||
|
||||
public static void main(String[] args) {
|
||||
SortedMap<String, String> map = new TreeMap<String, String>();
|
||||
TestEncoder.test(
|
||||
Collections.checkedSortedMap(map, String.class, String.class),
|
||||
new TreeMap() {
|
||||
private final Object keyType = OBJECT;
|
||||
private final Object valueType = OBJECT;
|
||||
},
|
||||
OBJECT
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6777487
|
||||
* @summary Tests private field access for CheckedSortedSet
|
||||
* @author Sergey Malenkov
|
||||
*/
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
|
||||
public final class TestCheckedSortedSet {
|
||||
private static final Object OBJECT = new Object();
|
||||
|
||||
public static void main(String[] args) {
|
||||
SortedSet<String> set = new TreeSet<String>();
|
||||
TestEncoder.test(
|
||||
Collections.checkedSortedSet(set, String.class),
|
||||
new TreeSet() {
|
||||
private final Object type = OBJECT;
|
||||
},
|
||||
OBJECT
|
||||
);
|
||||
}
|
||||
}
|
60
jdk/test/java/beans/XMLEncoder/6777487/TestEncoder.java
Normal file
60
jdk/test/java/beans/XMLEncoder/6777487/TestEncoder.java
Normal file
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
import java.beans.Expression;
|
||||
import java.beans.XMLEncoder;
|
||||
|
||||
final class TestEncoder extends XMLEncoder {
|
||||
private Expression expression;
|
||||
|
||||
private TestEncoder() {
|
||||
super(System.out);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeExpression(Expression expression) {
|
||||
if (this.expression == null) {
|
||||
this.expression = expression;
|
||||
}
|
||||
super.writeExpression(expression);
|
||||
}
|
||||
|
||||
public static void test(Object provider, Object object, Object value) {
|
||||
System.setSecurityManager(new SecurityManager());
|
||||
|
||||
TestEncoder encoder = new TestEncoder();
|
||||
encoder.setPersistenceDelegate(
|
||||
object.getClass(),
|
||||
encoder.getPersistenceDelegate(provider.getClass()));
|
||||
encoder.writeObject(object);
|
||||
encoder.close();
|
||||
|
||||
if (encoder.expression != null) {
|
||||
for (Object argument : encoder.expression.getArguments()) {
|
||||
if (value.equals(argument)) {
|
||||
throw new Error("Found private value!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
47
jdk/test/java/beans/XMLEncoder/6777487/TestEnumMap.java
Normal file
47
jdk/test/java/beans/XMLEncoder/6777487/TestEnumMap.java
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6777487
|
||||
* @summary Tests private field access for EnumMap
|
||||
* @author Sergey Malenkov
|
||||
*/
|
||||
|
||||
import java.util.EnumMap;
|
||||
import java.util.HashMap;
|
||||
|
||||
public final class TestEnumMap {
|
||||
private static final Object OBJECT = new Object();
|
||||
|
||||
public static void main(String[] args) {
|
||||
TestEncoder.test(
|
||||
new EnumMap<Point, String>(Point.class),
|
||||
new HashMap() {
|
||||
private final Object keyType = OBJECT;
|
||||
},
|
||||
OBJECT);
|
||||
}
|
||||
|
||||
public enum Point { X, Y, Z }
|
||||
}
|
47
jdk/test/java/beans/XMLEncoder/6777487/TestEnumSet.java
Normal file
47
jdk/test/java/beans/XMLEncoder/6777487/TestEnumSet.java
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6777487
|
||||
* @summary Tests private field access for EnumSet
|
||||
* @author Sergey Malenkov
|
||||
*/
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashSet;
|
||||
|
||||
public final class TestEnumSet {
|
||||
private static final Object OBJECT = new Object();
|
||||
|
||||
public static void main(String[] args) {
|
||||
TestEncoder.test(
|
||||
EnumSet.noneOf(Point.class),
|
||||
new HashSet() {
|
||||
private final Object elementType = OBJECT;
|
||||
},
|
||||
OBJECT);
|
||||
}
|
||||
|
||||
public enum Point { X, Y, Z }
|
||||
}
|
Loading…
Reference in New Issue
Block a user