You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by py...@apache.org on 2007/04/25 09:49:19 UTC
svn commit: r532239 - in /harmony/enhanced/classlib/trunk/modules/luni/src:
main/java/java/io/ test/java/tests/api/java/io/
test/resources/tests/api/java/io/
Author: pyang
Date: Wed Apr 25 00:49:17 2007
New Revision: 532239
URL: http://svn.apache.org/viewvc?view=rev&rev=532239
Log:
Apply patch for HARMONY-3726([classlib][luni]java.io.ObjectInputStream fails to parse serialization file with [L[Ljava.lang.String;; as ObjectStreamField signature for string array.)
Added:
harmony/enhanced/classlib/trunk/modules/luni/src/test/resources/tests/api/java/io/test_array_integers.ser (with props)
harmony/enhanced/classlib/trunk/modules/luni/src/test/resources/tests/api/java/io/test_array_strings.ser (with props)
Modified:
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/ObjectInputStream.java
harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/ObjectInputStreamTest.java
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/ObjectInputStream.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/ObjectInputStream.java?view=diff&rev=532239&r1=532238&r2=532239
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/ObjectInputStream.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/ObjectInputStream.java Wed Apr 25 00:49:17 2007
@@ -971,9 +971,37 @@
enableResolve = old;
}
}
+
+ classSig = formatClassSig(classSig);
ObjectStreamField f = new ObjectStreamField(classSig, fieldName);
fields[i] = f;
}
+ }
+
+ /*
+ * Format the class signature for ObjectStreamField, for example,
+ * "[L[Ljava.lang.String;;" is converted to "[Ljava.lang.String;"
+ */
+ private static String formatClassSig(String classSig) {
+ int start = 0;
+ int end = classSig.length();
+
+ if (end <= 0) {
+ return classSig;
+ }
+
+ while (classSig.startsWith("[L", start)
+ && classSig.charAt(end - 1) == ';') {
+ start += 2;
+ end--;
+ }
+
+ if (start > 0) {
+ start -= 2;
+ end++;
+ return classSig.substring(start, end);
+ }
+ return classSig;
}
/**
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/ObjectInputStreamTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/ObjectInputStreamTest.java?view=diff&rev=532239&r1=532238&r2=532239
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/ObjectInputStreamTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/ObjectInputStreamTest.java Wed Apr 25 00:49:17 2007
@@ -38,6 +38,7 @@
import java.util.Hashtable;
import java.util.Vector;
+import org.apache.harmony.luni.tests.java.lang.ClassTest;
import org.apache.harmony.testframework.serialization.SerializationTest;
import org.apache.harmony.testframework.serialization.SerializationTest.SerializableAssert;
@@ -932,7 +933,24 @@
// expected
}
}
-
+
+ //Regression Test for HARMONY-3726
+ public void test_readObject_array() throws Exception {
+
+ final String resourcePrefix = ObjectInputStreamTest.class.getPackage().getName().replace('.', '/');
+
+ ObjectInputStream oin = new ObjectInputStream(this.getClass().getClassLoader().getResourceAsStream(
+ resourcePrefix+"/test_array_strings.ser"));
+ TestArray testArray = (TestArray) oin.readObject();
+ String[] strings = new String[] { "AAA", "BBB" };
+ assertTrue(java.util.Arrays.equals(strings, testArray.array));
+
+ oin = new ObjectInputStream(this.getClass().getClassLoader().getResourceAsStream(
+ resourcePrefix+"/test_array_integers.ser"));
+ testArray = (TestArray) oin.readObject();
+ Integer[] integers = new Integer[] { 10, 20 };
+ assertTrue(java.util.Arrays.equals(integers, testArray.array));
+ }
/**
* Sets up the fixture, for example, open a network connection. This method
@@ -944,6 +962,17 @@
}
}
+class TestArray implements Serializable
+{
+ private static final long serialVersionUID = 1L;
+
+ public Object[] array;
+
+ public TestArray(Object[] array) {
+ this.array = array;
+ }
+
+}
class Test implements Serializable {
private static final long serialVersionUID = 1L;
Added: harmony/enhanced/classlib/trunk/modules/luni/src/test/resources/tests/api/java/io/test_array_integers.ser
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/resources/tests/api/java/io/test_array_integers.ser?view=auto&rev=532239
==============================================================================
Binary file - no diff available.
Propchange: harmony/enhanced/classlib/trunk/modules/luni/src/test/resources/tests/api/java/io/test_array_integers.ser
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: harmony/enhanced/classlib/trunk/modules/luni/src/test/resources/tests/api/java/io/test_array_strings.ser
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/resources/tests/api/java/io/test_array_strings.ser?view=auto&rev=532239
==============================================================================
Binary file - no diff available.
Propchange: harmony/enhanced/classlib/trunk/modules/luni/src/test/resources/tests/api/java/io/test_array_strings.ser
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream