--- old/test/jdk/java/nio/channels/unixdomain/UnixDomainSocketAddressSerializationTest.java 2020-07-02 17:52:59.000000000 +0100 +++ new/test/jdk/java/nio/channels/unixdomain/UnixDomainSocketAddressSerializationTest.java 2020-07-02 17:52:59.000000000 +0100 @@ -25,15 +25,19 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; import java.io.IOException; +import java.io.InvalidObjectException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.io.ObjectStreamClass; import java.io.Serializable; import java.nio.channels.UnixDomainSocketAddress; import java.nio.file.Path; - +import static java.io.ObjectStreamConstants.*; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; +import static org.testng.Assert.expectThrows; /* * @test @@ -60,6 +64,13 @@ assertEquals(deserialized, addr); } + static final Class IOE = InvalidObjectException.class; + + /** Tests that UnixDomainSocketAddress in the byte-stream is disallowed. */ + public static void testUnixDomainSocketAddressInStream() { + expectThrows(IOE, () -> deserialize(byteStream(), UnixDomainSocketAddress.class)); + } + private static byte[] serialize(T t) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); @@ -78,4 +89,28 @@ return cl.cast(o); } } + + static final String CLASSNAME = UnixDomainSocketAddress.class.getName(); + static final long SUID = ObjectStreamClass.lookup(UnixDomainSocketAddress.class).getSerialVersionUID(); + /** + * Returns a stream with UnixDomainSocketAddress in the stream. The + * stream will have no stream field values. + */ + static byte[] byteStream() throws Exception { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + DataOutputStream dos = new DataOutputStream(baos); + dos.writeShort(STREAM_MAGIC); + dos.writeShort(STREAM_VERSION); + dos.writeByte(TC_OBJECT); + dos.writeByte(TC_CLASSDESC); + dos.writeUTF(CLASSNAME); + dos.writeLong(SUID); + dos.writeByte(SC_SERIALIZABLE); + dos.writeShort(0); // number of stream fields + dos.writeByte(TC_ENDBLOCKDATA); // no annotations + dos.writeByte(TC_NULL); // no superclasses + dos.write(TC_ENDBLOCKDATA); // end block - for SC_WRITE_METHOD + dos.close(); + return baos.toByteArray(); + } }