diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-08-01 03:02:00 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-08-01 03:02:00 +0000 |
commit | e9cf31610cbcc9b42b64b218ef5e1310fafe2b56 (patch) | |
tree | c15a4dc8e5e055180dc8b8d0127d77d609e250ad /libjava/java/io/ObjectOutputStream.java | |
parent | 00eb51903168bbebe73803e4f3609726627673e2 (diff) | |
download | ppe42-gcc-e9cf31610cbcc9b42b64b218ef5e1310fafe2b56.tar.gz ppe42-gcc-e9cf31610cbcc9b42b64b218ef5e1310fafe2b56.zip |
Fix for PR libgcj/11737:
* java/io/ObjectOutputStream.java (getMethod): Make method
accessible.
(getField): Likewise.
(writeObject): Use getMethod.
Import PrivilegedAction and AccessController.
(callWriteMethod): Don't check whether m is null. Catch
NoSuchMethodException.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@70035 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/io/ObjectOutputStream.java')
-rw-r--r-- | libjava/java/io/ObjectOutputStream.java | 54 |
1 files changed, 41 insertions, 13 deletions
diff --git a/libjava/java/io/ObjectOutputStream.java b/libjava/java/io/ObjectOutputStream.java index 4014fcd3dc2..49cb636ee0d 100644 --- a/libjava/java/io/ObjectOutputStream.java +++ b/libjava/java/io/ObjectOutputStream.java @@ -42,6 +42,8 @@ import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.InvocationTargetException; +import java.security.PrivilegedAction; +import java.security.AccessController; import java.util.Hashtable; import gnu.java.io.ObjectIdentityWrapper; @@ -240,10 +242,11 @@ public class ObjectOutputStream extends OutputStream try { Class classArgs[] = {}; - m = obj.getClass ().getDeclaredMethod ("writeReplace", - classArgs); - // m can't be null by definition since an exception would - // have been thrown so a check for null is not needed. + m = getMethod(obj.getClass(), "writeReplace", + classArgs); + // m can't be null by definition since an + // exception would have been thrown so a check + // for null is not needed. obj = m.invoke (obj, new Object[] {}); } catch (NoSuchMethodException ignore) @@ -993,7 +996,8 @@ public class ObjectOutputStream extends OutputStream private void checkType (ObjectStreamField field, char type) throws IllegalArgumentException { - if (TypeSignature.getEncodingOfClass (field.getType ()).charAt (0) != type) + if (TypeSignature.getEncodingOfClass (field.getType ()).charAt (0) + != type) throw new IllegalArgumentException (); } }; @@ -1200,11 +1204,13 @@ public class ObjectOutputStream extends OutputStream { Class classArgs[] = {ObjectOutputStream.class}; Method m = getMethod (klass, "writeObject", classArgs); - if (m == null) - return; Object args[] = {this}; m.invoke (obj, args); } + catch (NoSuchMethodException nsme) + { + // Nothing. + } catch (InvocationTargetException x) { /* Rethrow if possible. */ @@ -1239,7 +1245,8 @@ public class ObjectOutputStream extends OutputStream } } - private byte getByteField (Object obj, Class klass, String field_name) throws IOException + private byte getByteField (Object obj, Class klass, String field_name) + throws IOException { try { @@ -1253,7 +1260,8 @@ public class ObjectOutputStream extends OutputStream } } - private char getCharField (Object obj, Class klass, String field_name) throws IOException + private char getCharField (Object obj, Class klass, String field_name) + throws IOException { try { @@ -1297,7 +1305,8 @@ public class ObjectOutputStream extends OutputStream } } - private int getIntField (Object obj, Class klass, String field_name) throws IOException + private int getIntField (Object obj, Class klass, String field_name) + throws IOException { try { @@ -1311,7 +1320,8 @@ public class ObjectOutputStream extends OutputStream } } - private long getLongField (Object obj, Class klass, String field_name) throws IOException + private long getLongField (Object obj, Class klass, String field_name) + throws IOException { try { @@ -1359,13 +1369,31 @@ public class ObjectOutputStream extends OutputStream private static Field getField (Class klass, String name) throws java.lang.NoSuchFieldException { - return klass.getDeclaredField(name); + final Field f = klass.getDeclaredField(name); + AccessController.doPrivileged(new PrivilegedAction() + { + public Object run() + { + f.setAccessible(true); + return null; + } + }); + return f; } private static Method getMethod (Class klass, String name, Class[] args) throws java.lang.NoSuchMethodException { - return klass.getDeclaredMethod(name, args); + final Method m = klass.getDeclaredMethod(name, args); + AccessController.doPrivileged(new PrivilegedAction() + { + public Object run() + { + m.setAccessible(true); + return null; + } + }); + return m; } // this value comes from 1.2 spec, but is used in 1.1 as well |