aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/io/ObjectInputStream.java
diff options
context:
space:
mode:
authorGuilhem Lavaux <guilhem@kaffe.org>2003-12-16 11:46:23 +0000
committerMichael Koch <mkoch@gcc.gnu.org>2003-12-16 11:46:23 +0000
commit9a3a96d0a5715e9d72a83a52f517ad6b78b9f685 (patch)
treed5d41ed47d51ef3b7b8d4be16b846215637f0f7e /libjava/java/io/ObjectInputStream.java
parent5ecc3a7676ce8e4e2da59d7fb8d826f0b3b832c7 (diff)
downloadgcc-9a3a96d0a5715e9d72a83a52f517ad6b78b9f685.zip
gcc-9a3a96d0a5715e9d72a83a52f517ad6b78b9f685.tar.gz
gcc-9a3a96d0a5715e9d72a83a52f517ad6b78b9f685.tar.bz2
ObjectInputStream.java (setBooleanField): Throw an InvalidClassException if the field hasn't the required type...
2003-12-16 Guilhem Lavaux <guilhem@kaffe.org> * java/io/ObjectInputStream.java (setBooleanField): Throw an InvalidClassException if the field hasn't the required type, documentation added. (setByteField) Likewise. (setCharField) Likewise. (setDoubleField) Likewise. (setFloatField) Likewise. (setIntField) Likewise. (setShortField) Likewise. (setLongField) Likewise. (setObjectField) Likewise. From-SVN: r74688
Diffstat (limited to 'libjava/java/io/ObjectInputStream.java')
-rw-r--r--libjava/java/io/ObjectInputStream.java169
1 files changed, 152 insertions, 17 deletions
diff --git a/libjava/java/io/ObjectInputStream.java b/libjava/java/io/ObjectInputStream.java
index 9186269..c11299e 100644
--- a/libjava/java/io/ObjectInputStream.java
+++ b/libjava/java/io/ObjectInputStream.java
@@ -1482,125 +1482,260 @@ public class ObjectInputStream extends InputStream
private native void callConstructor (Class clazz, Object obj);
+ /**
+ * This method writes a "boolean" value <code>val</code> in the specified field
+ * of the instance <code>obj</code> of the type <code>klass</code>.
+ *
+ * @param obj Instance to setup.
+ * @param klass Class type of the specified instance.
+ * @param field_name Name of the field in the specified class type.
+ * @param val The boolean value to write into the field.
+ * @throws InvalidClassException if the specified field has not the required type.
+ * @throws IOException if there is no field of that name in the specified class.
+ */
private void setBooleanField (Object obj, Class klass, String field_name,
- boolean val)
+ boolean val) throws IOException, InvalidClassException
{
try
{
Field f = getField (klass, field_name);
f.setBoolean (obj, val);
}
+ catch (IllegalArgumentException _)
+ {
+ throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
+ }
catch (Exception _)
{
}
}
+ /**
+ * This method writes a "byte" value <code>val</code> in the specified field
+ * of the instance <code>obj</code> of the type <code>klass</code>.
+ *
+ * @param obj Instance to setup.
+ * @param klass Class type of the specified instance.
+ * @param field_name Name of the field in the specified class type.
+ * @param val The byte value to write into the field.
+ * @throws InvalidClassException if the specified field has not the required type.
+ * @throws IOException if there is no field of that name in the specified class.
+ */
private void setByteField (Object obj, Class klass, String field_name,
- byte val)
+ byte val) throws IOException, InvalidClassException
{
try
{
Field f = getField (klass, field_name);
f.setByte (obj, val);
}
+ catch (IllegalArgumentException _)
+ {
+ throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
+ }
catch (Exception _)
{
}
}
+ /**
+ * This method writes a "character" value <code>val</code> in the specified field
+ * of the instance <code>obj</code> of the type <code>klass</code>.
+ *
+ * @param obj Instance to setup.
+ * @param klass Class type of the specified instance.
+ * @param field_name Name of the field in the specified class type.
+ * @param val The character value to write into the field.
+ * @throws InvalidClassException if the specified field has not the required type.
+ * @throws IOException if there is no field of that name in the specified class.
+ */
private void setCharField (Object obj, Class klass, String field_name,
- char val)
+ char val) throws IOException, InvalidClassException
{
try
{
Field f = getField (klass, field_name);
f.setChar (obj, val);
}
+ catch (IllegalArgumentException _)
+ {
+ throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
+ }
catch (Exception _)
{
}
}
+ /**
+ * This method writes a "double" value <code>val</code> in the specified field
+ * of the instance <code>obj</code> of the type <code>klass</code>.
+ *
+ * @param obj Instance to setup.
+ * @param klass Class type of the specified instance.
+ * @param field_name Name of the field in the specified class type.
+ * @param val The double value to write into the field.
+ * @throws InvalidClassException if the specified field has not the required type.
+ * @throws IOException if there is no field of that name in the specified class.
+ */
private void setDoubleField (Object obj, Class klass, String field_name,
- double val)
+ double val) throws IOException, InvalidClassException
{
try
{
Field f = getField (klass, field_name);
f.setDouble (obj, val);
}
+ catch (IllegalArgumentException _)
+ {
+ throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
+ }
catch (Exception _)
{
}
}
+ /**
+ * This method writes a "float" value <code>val</code> in the specified field
+ * of the instance <code>obj</code> of the type <code>klass</code>.
+ *
+ * @param obj Instance to setup.
+ * @param klass Class type of the specified instance.
+ * @param field_name Name of the field in the specified class type.
+ * @param val The float value to write into the field.
+ * @throws InvalidClassException if the specified field has not the required type.
+ * @throws IOException if there is no field of that name in the specified class.
+ */
private void setFloatField (Object obj, Class klass, String field_name,
- float val)
+ float val) throws IOException, InvalidClassException
{
try
{
Field f = getField (klass, field_name);
f.setFloat (obj, val);
}
+ catch (IllegalArgumentException _)
+ {
+ throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
+ }
catch (Exception _)
{
}
}
+ /**
+ * This method writes an "integer" value <code>val</code> in the specified field
+ * of the instance <code>obj</code> of the type <code>klass</code>.
+ *
+ * @param obj Instance to setup.
+ * @param klass Class type of the specified instance.
+ * @param field_name Name of the field in the specified class type.
+ * @param val The integer value to write into the field.
+ * @throws InvalidClassException if the specified field has not the required type.
+ * @throws IOException if there is no field of that name in the specified class.
+ */
private void setIntField (Object obj, Class klass, String field_name,
- int val)
+ int val) throws IOException, InvalidClassException
{
try
{
Field f = getField (klass, field_name);
f.setInt (obj, val);
}
+ catch (IllegalArgumentException _)
+ {
+ throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
+ }
catch (Exception _)
{
}
}
-
+ /**
+ * This method writes the long value <code>val</code> in the specified field
+ * of the instance <code>obj</code> of the type <code>klass</code>.
+ *
+ * @param obj Instance to setup.
+ * @param klass Class type of the specified instance.
+ * @param field_name Name of the field in the specified class type.
+ * @param val The long value to write into the field.
+ * @throws InvalidClassException if the specified field has not the required type.
+ * @throws IOException if there is no field of that name in the specified class.
+ */
private void setLongField (Object obj, Class klass, String field_name,
- long val)
+ long val) throws IOException, InvalidClassException
{
try
{
Field f = getField (klass, field_name);
f.setLong (obj, val);
}
+ catch (IllegalArgumentException _)
+ {
+ throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
+ }
catch (Exception _)
{
}
}
-
+ /**
+ * This method writes a "short" value <code>val</code> in the specified field
+ * of the instance <code>obj</code> of the type <code>klass</code>.
+ *
+ * @param obj Instance to setup.
+ * @param klass Class type of the specified instance.
+ * @param field_name Name of the field in the specified class type.
+ * @param val The short value to write into the field.
+ * @throws InvalidClassException if the specified field has not the required type.
+ * @throws IOException if there is no field of that name in the specified class.
+ */
private void setShortField (Object obj, Class klass, String field_name,
- short val)
+ short val) throws IOException, InvalidClassException
{
try
{
Field f = getField (klass, field_name);
f.setShort (obj, val);
}
+ catch (IllegalArgumentException _)
+ {
+ throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
+ }
catch (Exception _)
{
}
}
-
+ /**
+ * This method writes an "object" value <code>val</code> in the specified field
+ * of the instance <code>obj</code> of the type <code>klass</code>.
+ *
+ * @param obj Instance to setup.
+ * @param klass Class type of the specified instance.
+ * @param field_name Name of the field in the specified class type.
+ * @param val The "object" value to write into the field.
+ * @throws InvalidClassException if the specified field has not the required type.
+ * @throws IOException if there is no field of that name in the specified class.
+ */
private void setObjectField (Object obj, Class klass, String field_name,
- String type_code, Object val)
+ String type_code, Object val) throws IOException, InvalidClassException
{
try
{
- Field f = getField (klass, field_name);
- // FIXME: We should check the type_code here
- f.set (obj, val);
+ Field f = getField (klass, field_name);
+ ObjectStreamField of = new ObjectStreamField(field_name, f.getType());
+
+ if (of.getTypeString() == null ||
+ !of.getTypeString().equals(type_code))
+ throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
+ f.set (obj, val);
}
- catch (Exception _)
+ catch (InvalidClassException e)
{
- }
+ throw e;
+ }
+ catch (Exception _)
+ {}
}
private static final int BUFFER_SIZE = 1024;