From: mkoch Date: Tue, 16 Dec 2003 11:46:23 +0000 (+0000) Subject: 2003-12-16 Guilhem Lavaux X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=d39cc8d31b71e5bac9e88668eb808db01be2af10 2003-12-16 Guilhem Lavaux * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@74688 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 2210d5f3823..fe9cd81b27f 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,17 @@ + 2003-12-16 Guilhem Lavaux + + * 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. + 2003-12-16 Guilhem Lavaux Helmer Kraemer diff --git a/libjava/java/io/ObjectInputStream.java b/libjava/java/io/ObjectInputStream.java index 918626905a4..c11299efcb4 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 val in the specified field + * of the instance obj of the type klass. + * + * @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 val in the specified field + * of the instance obj of the type klass. + * + * @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 val in the specified field + * of the instance obj of the type klass. + * + * @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 val in the specified field + * of the instance obj of the type klass. + * + * @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 val in the specified field + * of the instance obj of the type klass. + * + * @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 val in the specified field + * of the instance obj of the type klass. + * + * @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 val in the specified field + * of the instance obj of the type klass. + * + * @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 val in the specified field + * of the instance obj of the type klass. + * + * @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 val in the specified field + * of the instance obj of the type klass. + * + * @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;