Path: blob/master/test/jdk/java/io/Serializable/defaultReadObjectCNFException/DefaultReadObjectCNFException.java
41152 views
/*1* Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/* @test24* @bug 466232725* @summary Verify that ObjectInputStream.defaultReadObject() throws a26* ClassNotFoundException if any of the non-primitive field values it27* reads in are tagged with ClassNotFoundExceptions.28*/2930import java.io.*;3132class Foo implements Serializable {33private static final long serialVersionUID = 1L;3435@SuppressWarnings("serial") /* Incorrect use is being tested */36Object obj = new Bar();3738private void readObject(ObjectInputStream in)39throws IOException, ClassNotFoundException40{41in.defaultReadObject();42if (obj == null) {43throw new Error(44"ClassNotFoundException masked by defaultReadObject()");45}46}47}4849class Bar implements Serializable {50private static final long serialVersionUID = 1L;51}5253class TestObjectInputStream extends ObjectInputStream {54TestObjectInputStream(InputStream in) throws IOException { super(in); }5556protected Class<?> resolveClass(ObjectStreamClass desc)57throws IOException, ClassNotFoundException58{59if (desc.getName().equals(Bar.class.getName())) {60throw new ClassNotFoundException();61}62return super.resolveClass(desc);63}64}6566public class DefaultReadObjectCNFException {67public static void main(String[] args) throws Exception {68ByteArrayOutputStream bout = new ByteArrayOutputStream();69ObjectOutputStream oout = new ObjectOutputStream(bout);70oout.writeObject(new Foo());71oout.writeObject("after");72oout.close();73ObjectInputStream oin = new TestObjectInputStream(74new ByteArrayInputStream(bout.toByteArray()));75try {76oin.readObject();77} catch (ClassNotFoundException e) {78// expected79}80if (!oin.readObject().equals("after")) {81throw new Error("subsequent object corrupted");82}83}84}858687