[cp-patches] FYI: java/io/ObjectInputStream.java
Hi, I committed the attached patch to fix proxy deserialization (bug 24422). Regards, Jeroen 2005-10-18 Jeroen Frijters <[EMAIL PROTECTED]> * java/io/ObjectInputStream.java (parseContent): Removed bogus println and fixed bug #24422. Index: java/io/ObjectInputStream.java === RCS file: /cvsroot/classpath/classpath/java/io/ObjectInputStream.java,v retrieving revision 1.69 diff -u -r1.69 ObjectInputStream.java --- java/io/ObjectInputStream.java 12 Oct 2005 19:41:42 - 1.69 +++ java/io/ObjectInputStream.java 18 Oct 2005 07:17:29 - @@ -221,7 +221,6 @@ for (int i = 0; i < n_intf; i++) { intfs[i] = this.realInputStream.readUTF(); - System.out.println(intfs[i]); } boolean oldmode = setBlockDataMode(true); @@ -229,6 +228,21 @@ setBlockDataMode(oldmode); ObjectStreamClass osc = lookupClass(cl); + if (osc.firstNonSerializableParentConstructor == null) +{ + osc.realClassIsSerializable = true; + osc.fields = osc.fieldMapping = new ObjectStreamField[0]; + try +{ + osc.firstNonSerializableParentConstructor = +Object.class.getConstructor(new Class[0]); +} + catch (NoSuchMethodException x) +{ + throw (InternalError) +new InternalError("Object ctor missing").initCause(x); +} +} assignNewHandle(osc); if (!is_consumed) ___ Classpath-patches mailing list Classpath-patches@gnu.org http://lists.gnu.org/mailman/listinfo/classpath-patches
[cp-patches] FYI: java/io/ObjectInputStream.java fix
Hi, I applied to attached patch to fix bug #23377. Regards, Jeroen 2005-08-13 Jeroen Frijters <[EMAIL PROTECTED]> * java/io/ObjectInputStream.java (readClassDescriptor): Don't cache caller's class loader. (resolveClass): Don't cache caller's class loader and support primitive types. Fixes bug #23377. Index: java/io/ObjectInputStream.java === RCS file: /cvsroot/classpath/classpath/java/io/ObjectInputStream.java,v retrieving revision 1.61 diff -u -r1.61 ObjectInputStream.java --- java/io/ObjectInputStream.java 7 Aug 2005 12:25:10 - 1.61 +++ java/io/ObjectInputStream.java 13 Aug 2005 17:55:37 - @@ -501,8 +501,7 @@ flags, fields); assignNewHandle(osc); -if (callersClassLoader == null) - callersClassLoader = currentLoader(); +ClassLoader callersClassLoader = currentLoader(); for (int i = 0; i < field_count; i++) { @@ -741,16 +740,34 @@ protected Class resolveClass(ObjectStreamClass osc) throws ClassNotFoundException, IOException { -if (callersClassLoader == null) +String name = osc.getName(); +try { - callersClassLoader = currentLoader (); - if (DEBUG && dump) - { - dumpElementln ("CallersClassLoader = " + callersClassLoader); - } +return Class.forName(name, true, currentLoader()); + } +catch(ClassNotFoundException x) + { +if (name.equals("void")) + return Void.TYPE; +else if (name.equals("boolean")) + return Boolean.TYPE; +else if (name.equals("byte")) + return Byte.TYPE; +else if (name.equals("char")) + return Character.TYPE; +else if (name.equals("short")) + return Short.TYPE; +else if (name.equals("int")) + return Integer.TYPE; +else if (name.equals("long")) + return Long.TYPE; +else if (name.equals("float")) + return Float.TYPE; +else if (name.equals("double")) + return Double.TYPE; +else + throw x; } - -return Class.forName(osc.getName(), true, callersClassLoader); } /** @@ -1871,7 +1888,6 @@ private Hashtable classLookupTable; private GetField prereadFields; - private ClassLoader callersClassLoader; private static boolean dump; // The nesting depth for debugging output ___ Classpath-patches mailing list Classpath-patches@gnu.org http://lists.gnu.org/mailman/listinfo/classpath-patches
[cp-patches] FYI: java/io/ObjectInputStream.java clean up
Hi, I committed the attached patch to pass or initialize causes for all exceptions and to remove some bogus code from readClassDescriptor. I also added a comment to readFields.GetField.getField that it should be rewritten, the current code is *totally* incomprehensible. (Including the anti-pattern "return from finally".) Regards, Jeroen 2005-08-06 Jeroen Frijters <[EMAIL PROTECTED]> * java/io/ObjectInputStream.java (readClassDescriptor): Removed bogus handling of primitive types. (readFields.GetField.defaulted): Pass cause to exception. (readFields.GetField.getField): Pass cause to exception. (newObject, callReadMethod): Call initCause on exception. Index: java/io/ObjectInputStream.java === RCS file: /cvsroot/classpath/classpath/java/io/ObjectInputStream.java,v retrieving revision 1.60 diff -u -r1.60 ObjectInputStream.java --- java/io/ObjectInputStream.java 5 Aug 2005 08:28:17 - 1.60 +++ java/io/ObjectInputStream.java 7 Aug 2005 12:15:12 - @@ -528,36 +528,7 @@ /* Now that fields have been read we may resolve the class * (and read annotation if needed). */ -Class clazz; -try - { - clazz = resolveClass(osc); - } -catch (ClassNotFoundException cnfe) - { - // Maybe it was an primitive class? - if (name.equals("void")) - clazz = Void.TYPE; - else if (name.equals("boolean")) - clazz = Boolean.TYPE; - else if (name.equals("byte")) - clazz = Byte.TYPE; - else if (name.equals("short")) - clazz = Short.TYPE; - else if (name.equals("char")) - clazz = Character.TYPE; - else if (name.equals("int")) - clazz = Integer.TYPE; - else if (name.equals("long")) - clazz = Long.TYPE; - else if (name.equals("float")) - clazz = Float.TYPE; - else if (name.equals("double")) - clazz = Double.TYPE; - else - throw cnfe; - } - +Class clazz = resolveClass(osc); boolean oldmode = setBlockDataMode(true); osc.setClass(clazz, lookupClass(clazz.getSuperclass())); classLookupTable.put(clazz, osc); @@ -1275,7 +1246,7 @@ } catch (NoSuchFieldException e) { - throw new IllegalArgumentException(e.getMessage()); + throw new IllegalArgumentException(e); } } @@ -1420,6 +1391,7 @@ ObjectStreamField field = clazz.getField(name); boolean illegal = false; + // XXX This code is horrible and needs to be rewritten! try { try @@ -1479,7 +1451,7 @@ catch (NoSuchFieldException e) { if (field == null) - throw new IllegalArgumentException(e.getMessage()); + throw new IllegalArgumentException(e); } } @@ -1823,8 +1795,8 @@ } catch (InstantiationException e) { -throw new ClassNotFoundException - ("Instance of " + real_class + " could not be created"); +throw (ClassNotFoundException) new ClassNotFoundException + ("Instance of " + real_class + " could not be created").initCause(e); } } @@ -1865,13 +1837,13 @@ if (exception instanceof ClassNotFoundException) throw (ClassNotFoundException) exception; - throw new IOException("Exception thrown from readObject() on " + - klass + ": " + exception.getClass().getName()); + throw (IOException) new IOException( + "Exception thrown from readObject() on " + klass).initCause(x); } catch (Exception x) { - throw new IOException("Failure invoking readObject() on " + - klass + ": " + x.getClass().getName()); + throw (IOException) new IOException( + "Failure invoking readObject() on " + klass).initCause(x); } // Invalidate fields which has been read through readFields. ___ Classpath-patches mailing list Classpath-patches@gnu.org http://lists.gnu.org/mailman/listinfo/classpath-patches