You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by od...@apache.org on 2010/03/26 13:18:54 UTC
svn commit: r927791 - in /harmony/enhanced/trunk/classlib/modules/luni/src:
main/java/java/io/EmulatedFieldsForDumping.java
main/java/java/io/ObjectOutputStream.java
test/api/common/org/apache/harmony/luni/tests/java/io/ObjectOutputStreamTest.java
Author: odeakin
Date: Fri Mar 26 12:18:54 2010
New Revision: 927791
URL: http://svn.apache.org/viewvc?rev=927791&view=rev
Log:
Commit fix and regression test for HARMONY-6483 ([classlib][luni] No IllegalArgumentException thrown by PutField.write() when writing to the wrong stream)
Modified:
harmony/enhanced/trunk/classlib/modules/luni/src/main/java/java/io/EmulatedFieldsForDumping.java
harmony/enhanced/trunk/classlib/modules/luni/src/main/java/java/io/ObjectOutputStream.java
harmony/enhanced/trunk/classlib/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/io/ObjectOutputStreamTest.java
Modified: harmony/enhanced/trunk/classlib/modules/luni/src/main/java/java/io/EmulatedFieldsForDumping.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/trunk/classlib/modules/luni/src/main/java/java/io/EmulatedFieldsForDumping.java?rev=927791&r1=927790&r2=927791&view=diff
==============================================================================
--- harmony/enhanced/trunk/classlib/modules/luni/src/main/java/java/io/EmulatedFieldsForDumping.java (original)
+++ harmony/enhanced/trunk/classlib/modules/luni/src/main/java/java/io/EmulatedFieldsForDumping.java Fri Mar 26 12:18:54 2010
@@ -31,6 +31,9 @@ class EmulatedFieldsForDumping extends O
// The actual representation, with a more powerful API (set&get)
private EmulatedFields emulatedFields;
+ // Record the ObjectOutputStream that created this PutField for checking in the write method
+ private final ObjectOutputStream oos;
+
/**
* Constructs a new instance of EmulatedFieldsForDumping.
*
@@ -38,10 +41,11 @@ class EmulatedFieldsForDumping extends O
* a ObjectStreamClass, which describe the fields to be emulated
* (names, types, etc).
*/
- EmulatedFieldsForDumping(ObjectStreamClass streamClass) {
+ EmulatedFieldsForDumping(ObjectOutputStream oos, ObjectStreamClass streamClass) {
super();
emulatedFields = new EmulatedFields(streamClass.fields(),
(ObjectStreamField[]) null);
+ this.oos = oos;
}
/**
@@ -193,6 +197,10 @@ class EmulatedFieldsForDumping extends O
@Override
@Deprecated
public void write(ObjectOutput output) throws IOException {
+ if (!output.equals(oos)) {
+ throw new IllegalArgumentException("Attempting to write to a stream that did not create this PutField");
+ }
+
EmulatedFields.ObjectSlot[] slots = emulatedFields.slots();
for (int i = 0; i < slots.length; i++) {
EmulatedFields.ObjectSlot slot = slots[i];
Modified: harmony/enhanced/trunk/classlib/modules/luni/src/main/java/java/io/ObjectOutputStream.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/trunk/classlib/modules/luni/src/main/java/java/io/ObjectOutputStream.java?rev=927791&r1=927790&r2=927791&view=diff
==============================================================================
--- harmony/enhanced/trunk/classlib/modules/luni/src/main/java/java/io/ObjectOutputStream.java (original)
+++ harmony/enhanced/trunk/classlib/modules/luni/src/main/java/java/io/ObjectOutputStream.java Fri Mar 26 12:18:54 2010
@@ -388,7 +388,7 @@ public class ObjectOutputStream extends
* @see #writeFieldValues(EmulatedFieldsForDumping)
*/
private void computePutField() {
- currentPutField = new EmulatedFieldsForDumping(currentClass);
+ currentPutField = new EmulatedFieldsForDumping(this, currentClass);
}
/**
Modified: harmony/enhanced/trunk/classlib/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/io/ObjectOutputStreamTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/trunk/classlib/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/io/ObjectOutputStreamTest.java?rev=927791&r1=927790&r2=927791&view=diff
==============================================================================
--- harmony/enhanced/trunk/classlib/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/io/ObjectOutputStreamTest.java (original)
+++ harmony/enhanced/trunk/classlib/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/io/ObjectOutputStreamTest.java Fri Mar 26 12:18:54 2010
@@ -1361,4 +1361,23 @@ public class ObjectOutputStreamTest exte
assertEquals("3rd replaceObject worked incorrectly",
ObjectStreamClass.class, obj3.getClass());
}
+
+ public void test_putFieldWrite() throws Exception {
+ // Regression test for HARMONY-6483
+ ObjectOutputStream oos = new ObjectOutputStream(new ByteArrayOutputStream());
+ try {
+ oos.writeObject(new OutputObject());
+ fail("Should throw an IllegalArgumentException");
+ } catch (IllegalArgumentException iae) {
+ // Expected
+ }
+ }
+
+ private static class OutputObject implements Serializable {
+ private void writeObject(ObjectOutputStream oos) throws IOException {
+ ObjectOutputStream oos2 = new ObjectOutputStream(new ByteArrayOutputStream());
+ ObjectOutputStream.PutField putField = oos.putFields();
+ putField.write(oos2);
+ }
+ }
}