提交 eea025f3 编写于 作者: A asaha

Merge

......@@ -670,4 +670,16 @@ d123c31c3bc21ccf02ac7368f5476dd9975e15e3 jdk8u111-b01
981c4d9dab16b3fa7333e5baa5497c299acd5172 jdk8u111-b02
893adc105044c14abfb54de32a79f2f21981cafa jdk8u111-b03
ec7b9aafd7e1e9763925e8b794834612bbe0e19b jdk8u111-b04
3a25f8a752524bad7e78800158c485b890be3982 jdk8u111-b05
d5dabec41733e59f00dd456f88fb00b3803bed8b jdk8u111-b06
d8a1e50ce110d18b3ad01ee5c997425bfe90b2a1 jdk8u111-b07
560812b6d1948df7794f22840e4e3976258b034e jdk8u111-b08
b87d82f5c33dfb55bfc81254044f28eea5d7424a jdk8u112-b00
1f2394102288d9073652064784e31a3f52fc5d4b jdk8u112-b01
40c934289deefd68915f6519d71a4e315c69117a jdk8u112-b02
ddb3a8afe0ad50e04d360efa96aee78cb599ea72 jdk8u112-b03
1d0047d03f04c0c15c7856e0f177b9e15e94a692 jdk8u112-b04
b6cdfd0b4a9cff1ed1bb43ef7fb21dc4d2dfe7d8 jdk8u112-b06
9d09ca09ea33e6af774914606f94960e5af4fc9b jdk8u112-b07
0ac6b67980512ce025a280d42c05156293613dbb jdk8u112-b08
3a25f8a752524bad7e78800158c485b890be3982 jdk8u121-b00
......@@ -3,7 +3,7 @@ The GNU General Public License (GPL)
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed.
......@@ -287,8 +287,8 @@ pointer to where the full notice is found.
more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc., 59
Temple Place, Suite 330, Boston, MA 02111-1307 USA
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
......
......@@ -2230,7 +2230,7 @@ public class IIOPInputStream
* REVISIT -- This code doesn't do what the comment says to when
* getField() is null!
*/
private void inputClassFields(Object o, Class cl,
private void inputClassFields(Object o, final Class<?> cl,
ObjectStreamField[] fields,
com.sun.org.omg.SendingContext.CodeBase sender)
throws InvalidClassException, StreamCorruptedException,
......@@ -2264,21 +2264,31 @@ public class IIOPInputStream
}
try {
Class fieldCl = fields[i].getClazz();
Class<?> fieldCl = fields[i].getClazz();
if ((objectValue != null)
&& (!fieldCl.isAssignableFrom(
objectValue.getClass()))) {
throw new IllegalArgumentException("Field mismatch");
}
Field classField = null;
Field declaredClassField = null;
final String inputStreamFieldName = fields[i].getName();
try {
classField = cl.getDeclaredField(fields[i].getName());
} catch (NoSuchFieldException nsfEx) {
throw new IllegalArgumentException(nsfEx);
declaredClassField = getDeclaredField( cl, inputStreamFieldName);
} catch (PrivilegedActionException paEx) {
throw new IllegalArgumentException(
(NoSuchFieldException) paEx.getException());
} catch (SecurityException secEx) {
throw new IllegalArgumentException(secEx.getCause());
throw new IllegalArgumentException(secEx);
} catch (NullPointerException npEx) {
continue;
} catch (NoSuchFieldException e) {
continue;
}
if (declaredClassField == null) {
continue;
}
Class<?> declaredFieldClass = classField.getType();
Class<?> declaredFieldClass = declaredClassField.getType();
// check input field type is a declared field type
// input field is a subclass of the declared field
......@@ -2291,15 +2301,24 @@ public class IIOPInputStream
}
bridge.putObject( o, fields[i].getFieldID(), objectValue ) ;
// reflective code: fields[i].getField().set( o, objectValue ) ;
} catch (IllegalArgumentException e) {
ClassCastException exc = new ClassCastException("Assigning instance of class " +
objectValue.getClass().getName() +
" to field " +
currentClassDesc.getName() +
'#' +
fields[i].getField().getName());
exc.initCause( e ) ;
throw exc ;
} catch (IllegalArgumentException iaEx) {
String objectValueClassName = "null";
String currentClassDescClassName = "null";
String fieldName = "null";
if (objectValue != null) {
objectValueClassName = objectValue.getClass().getName();
}
if (currentClassDesc != null) {
currentClassDescClassName = currentClassDesc.getName();
}
if (fields[i] != null && fields[i].getField() != null) {
fieldName = fields[i].getField().getName();
}
ClassCastException ccEx = new ClassCastException(
"Assigning instance of class " + objectValueClassName
+ " to field " + currentClassDescClassName + '#' + fieldName);
ccEx.initCause( iaEx ) ;
throw ccEx ;
}
} // end : for loop
}
......@@ -2595,9 +2614,9 @@ public class IIOPInputStream
}
private static void setObjectField(Object o, Class c, String fieldName, Object v) {
private static void setObjectField(Object o, Class<?> c, String fieldName, Object v) {
try {
Field fld = c.getDeclaredField( fieldName ) ;
Field fld = getDeclaredField( c, fieldName ) ;
Class fieldCl = fld.getType();
if(v != null && !fieldCl.isInstance(v)) {
throw new Exception();
......@@ -2617,10 +2636,10 @@ public class IIOPInputStream
}
}
private static void setBooleanField(Object o, Class c, String fieldName, boolean v)
private static void setBooleanField(Object o, Class<?> c, String fieldName, boolean v)
{
try {
Field fld = c.getDeclaredField( fieldName ) ;
Field fld = getDeclaredField( c, fieldName ) ;
if ((fld != null) && (fld.getType() == Boolean.TYPE)) {
long key = bridge.objectFieldOffset( fld ) ;
bridge.putBoolean( o, key, v ) ;
......@@ -2640,10 +2659,10 @@ public class IIOPInputStream
}
}
private static void setByteField(Object o, Class c, String fieldName, byte v)
private static void setByteField(Object o, Class<?> c, String fieldName, byte v)
{
try {
Field fld = c.getDeclaredField( fieldName ) ;
Field fld = getDeclaredField( c, fieldName ) ;
if ((fld != null) && (fld.getType() == Byte.TYPE)) {
long key = bridge.objectFieldOffset( fld ) ;
bridge.putByte( o, key, v ) ;
......@@ -2663,10 +2682,10 @@ public class IIOPInputStream
}
}
private static void setCharField(Object o, Class c, String fieldName, char v)
private static void setCharField(Object o, Class<?> c, String fieldName, char v)
{
try {
Field fld = c.getDeclaredField( fieldName ) ;
Field fld = getDeclaredField( c, fieldName ) ;
if ((fld != null) && (fld.getType() == Character.TYPE)) {
long key = bridge.objectFieldOffset( fld ) ;
bridge.putChar( o, key, v ) ;
......@@ -2686,10 +2705,10 @@ public class IIOPInputStream
}
}
private static void setShortField(Object o, Class c, String fieldName, short v)
private static void setShortField(Object o, Class<?> c, String fieldName, short v)
{
try {
Field fld = c.getDeclaredField( fieldName ) ;
Field fld = getDeclaredField( c, fieldName ) ;
if ((fld != null) && (fld.getType() == Short.TYPE)) {
long key = bridge.objectFieldOffset( fld ) ;
bridge.putShort( o, key, v ) ;
......@@ -2709,10 +2728,10 @@ public class IIOPInputStream
}
}
private static void setIntField(Object o, Class c, String fieldName, int v)
private static void setIntField(Object o, final Class<?> c, final String fieldName, int v)
{
try {
Field fld = c.getDeclaredField( fieldName ) ;
Field fld = getDeclaredField( c, fieldName ) ;
if ((fld != null) && (fld.getType() == Integer.TYPE)) {
long key = bridge.objectFieldOffset( fld ) ;
bridge.putInt( o, key, v ) ;
......@@ -2732,10 +2751,10 @@ public class IIOPInputStream
}
}
private static void setLongField(Object o, Class c, String fieldName, long v)
private static void setLongField(Object o, Class<?> c, String fieldName, long v)
{
try {
Field fld = c.getDeclaredField( fieldName ) ;
Field fld = getDeclaredField( c, fieldName ) ;
if ((fld != null) && (fld.getType() == Long.TYPE)) {
long key = bridge.objectFieldOffset( fld ) ;
bridge.putLong( o, key, v ) ;
......@@ -2755,10 +2774,10 @@ public class IIOPInputStream
}
}
private static void setFloatField(Object o, Class c, String fieldName, float v)
private static void setFloatField(Object o, Class<?> c, String fieldName, float v)
{
try {
Field fld = c.getDeclaredField( fieldName ) ;
Field fld = getDeclaredField( c, fieldName ) ;
if ((fld != null) && (fld.getType() == Float.TYPE)) {
long key = bridge.objectFieldOffset( fld ) ;
bridge.putFloat( o, key, v ) ;
......@@ -2778,10 +2797,10 @@ public class IIOPInputStream
}
}
private static void setDoubleField(Object o, Class c, String fieldName, double v)
private static void setDoubleField(Object o, Class<?> c, String fieldName, double v)
{
try {
Field fld = c.getDeclaredField( fieldName ) ;
Field fld = getDeclaredField(c, fieldName ) ;
if ((fld != null) && (fld.getType() == Double.TYPE)) {
long key = bridge.objectFieldOffset( fld ) ;
bridge.putDouble( o, key, v ) ;
......@@ -2801,6 +2820,23 @@ public class IIOPInputStream
}
}
private static Field getDeclaredField(final Class<?> c,
final String fieldName)
throws PrivilegedActionException, NoSuchFieldException, SecurityException {
if (System.getSecurityManager() == null) {
return c.getDeclaredField(fieldName);
} else {
return AccessController
.doPrivileged(new PrivilegedExceptionAction<Field>() {
public Field run()
throws NoSuchFieldException {
return c.getDeclaredField(fieldName);
}
});
}
}
/**
* This class maintains a map of stream position to
* an Object currently being deserialized. It is used
......@@ -2811,12 +2847,12 @@ public class IIOPInputStream
*/
static class ActiveRecursionManager
{
private Map offsetToObjectMap;
private Map<Integer, Object> offsetToObjectMap;
public ActiveRecursionManager() {
// A hash map is unsynchronized and allows
// null values
offsetToObjectMap = new HashMap();
offsetToObjectMap = new HashMap<>();
}
// Called right after allocating a new object.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册