8076392: Improve IIOPInputStream consistency
Reviewed-by: rriggs, coffeys, skoivu, ahgross
--- a/corba/src/java.corba/share/classes/com/sun/corba/se/impl/io/IIOPInputStream.java Thu Jun 25 13:48:49 2015 +0100
+++ b/corba/src/java.corba/share/classes/com/sun/corba/se/impl/io/IIOPInputStream.java Tue Jul 14 16:49:41 2015 +0100
@@ -567,6 +567,11 @@
// XXX I18N, logging needed.
throw new NotActiveException("defaultReadObjectDelegate");
+ if (!currentClassDesc.forClass().isAssignableFrom(
+ currentObject.getClass())) {
+ throw new IOException("Object Type mismatch");
+ }
+
// The array will be null unless fields were retrieved
// remotely because of a serializable version difference.
// Bug fix for 4365188. See the definition of
@@ -2257,6 +2262,27 @@
try {
Class fieldCl = fields[i].getClazz();
+ if ((objectValue != null)
+ && (!fieldCl.isAssignableFrom(
+ objectValue.getClass()))) {
+ throw new IllegalArgumentException("Field mismatch");
+ }
+ Field classField = null;
+ try {
+ classField = cl.getDeclaredField(fields[i].getName());
+ } catch (NoSuchFieldException nsfEx) {
+ throw new IllegalArgumentException(nsfEx);
+ } catch (SecurityException secEx) {
+ throw new IllegalArgumentException(secEx.getCause());
+ }
+ Class<?> declaredFieldClass = classField.getType();
+
+ // check input field type is a declared field type
+ // input field is a subclass of the declared field
+ if (!declaredFieldClass.isAssignableFrom(fieldCl)) {
+ throw new IllegalArgumentException(
+ "Field Type mismatch");
+ }
if (objectValue != null && !fieldCl.isInstance(objectValue)) {
throw new IllegalArgumentException();
}