You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by li...@apache.org on 2007/03/02 10:03:28 UTC
svn commit: r513667 - in /harmony/enhanced/classlib/trunk/modules/luni/src:
main/java/java/io/ObjectInputStream.java
test/java/tests/api/java/io/ObjectInputStreamTest.java
Author: liangyx
Date: Fri Mar 2 01:03:27 2007
New Revision: 513667
URL: http://svn.apache.org/viewvc?view=rev&rev=513667
Log:
ObjectInputStream.readClassDescriptor does not valid the name of the class described by this descriptor.
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=513667&r1=513666&r2=513667
==============================================================================
--- 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 Fri Mar 2 01:03:27 2007
@@ -1757,7 +1757,11 @@
ClassNotFoundException {
ObjectStreamClass newClassDesc = new ObjectStreamClass();
- newClassDesc.setName(input.readUTF());
+ String name = input.readUTF();
+ if ("".equals(name)) {
+ throw new IOException("The stream is corrupted.");
+ }
+ newClassDesc.setName(name);
newClassDesc.setSerialVersionUID(input.readLong());
newClassDesc.setFlags(input.readByte());
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=513667&r1=513666&r2=513667
==============================================================================
--- 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 Fri Mar 2 01:03:27 2007
@@ -17,6 +17,7 @@
package tests.api.java.io;
+import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -783,13 +784,98 @@
oos.writeClassDescriptor(desc);
oos.close();
- ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+ byte[] bytes = baos.toByteArray();
+ ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectIutputStreamWithReadDesc1 ois = new ObjectIutputStreamWithReadDesc1(
bais);
Object obj = ois.readClassDescriptor();
ois.close();
assertEquals(desc.getClass(), obj.getClass());
+
+ //eof
+ bais = new ByteArrayInputStream(bytes);
+ ExceptionalBufferedInputStream bis = new ExceptionalBufferedInputStream(
+ bais);
+ ois = new ObjectIutputStreamWithReadDesc1(bis);
+
+ bis.setEOF(true);
+
+ try {
+ obj = ois.readClassDescriptor();
+ } catch (IOException e) {
+ //e.printStackTrace();
+ } finally {
+ ois.close();
+ }
+
+ //throw exception
+ bais = new ByteArrayInputStream(bytes);
+ bis = new ExceptionalBufferedInputStream(bais);
+ ois = new ObjectIutputStreamWithReadDesc1(bis);
+
+ bis.setException(new IOException());
+
+ try {
+ obj = ois.readClassDescriptor();
+ } catch (IOException e) {
+ //e.printStackTrace();
+ } finally {
+ ois.close();
+ }
+
+ //corrupt
+ bais = new ByteArrayInputStream(bytes);
+ bis = new ExceptionalBufferedInputStream(bais);
+ ois = new ObjectIutputStreamWithReadDesc1(bis);
+
+ bis.setCorrupt(true);
+
+ try {
+ obj = ois.readClassDescriptor();
+ } catch (IOException e) {
+ //e.printStackTrace();
+ } finally {
+ ois.close();
+ }
+
}
+
+ static class ExceptionalBufferedInputStream extends BufferedInputStream {
+ private boolean eof = false;
+ private IOException exception = null;
+ private boolean corrupt = false;
+
+ public ExceptionalBufferedInputStream(InputStream in) {
+ super(in);
+ }
+
+ public int read() throws IOException {
+ if (exception != null) {
+ throw exception;
+ }
+
+ if (eof) {
+ return -1;
+ }
+
+ if (corrupt) {
+ return 0;
+ }
+ return super.read();
+ }
+
+ public void setEOF(boolean eof) {
+ this.eof = eof;
+ }
+
+ public void setException(IOException exception) {
+ this.exception = exception;
+ }
+
+ public void setCorrupt(boolean corrupt) {
+ this.corrupt = corrupt;
+ }
+ }
// Regression Test for Harmony-2402
public void test_registerValidation() throws Exception {