1 /*
2 * Copyright (c) 1996, 2017, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
1802 return cl;
1803 }
1804
1805 /**
1806 * Reads in and returns (possibly null) class descriptor. Sets passHandle
1807 * to class descriptor's assigned handle. If class descriptor cannot be
1808 * resolved to a class in the local VM, a ClassNotFoundException is
1809 * associated with the class descriptor's handle.
1810 */
1811 private ObjectStreamClass readClassDesc(boolean unshared)
1812 throws IOException
1813 {
1814 byte tc = bin.peekByte();
1815 ObjectStreamClass descriptor;
1816 switch (tc) {
1817 case TC_NULL:
1818 descriptor = (ObjectStreamClass) readNull();
1819 break;
1820 case TC_REFERENCE:
1821 descriptor = (ObjectStreamClass) readHandle(unshared);
1822 break;
1823 case TC_PROXYCLASSDESC:
1824 descriptor = readProxyDesc(unshared);
1825 break;
1826 case TC_CLASSDESC:
1827 descriptor = readNonProxyDesc(unshared);
1828 break;
1829 default:
1830 throw new StreamCorruptedException(
1831 String.format("invalid type code: %02X", tc));
1832 }
1833 return descriptor;
1834 }
1835
1836 private boolean isCustomSubclass() {
1837 // Return true if this class is a custom subclass of ObjectInputStream
1838 return getClass().getClassLoader()
1839 != ObjectInputStream.class.getClassLoader();
1840 }
1841
|
1 /*
2 * Copyright (c) 1996, 2020, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
1802 return cl;
1803 }
1804
1805 /**
1806 * Reads in and returns (possibly null) class descriptor. Sets passHandle
1807 * to class descriptor's assigned handle. If class descriptor cannot be
1808 * resolved to a class in the local VM, a ClassNotFoundException is
1809 * associated with the class descriptor's handle.
1810 */
1811 private ObjectStreamClass readClassDesc(boolean unshared)
1812 throws IOException
1813 {
1814 byte tc = bin.peekByte();
1815 ObjectStreamClass descriptor;
1816 switch (tc) {
1817 case TC_NULL:
1818 descriptor = (ObjectStreamClass) readNull();
1819 break;
1820 case TC_REFERENCE:
1821 descriptor = (ObjectStreamClass) readHandle(unshared);
1822 // Should only reference initialized class descriptors
1823 descriptor.checkInitialized();
1824 break;
1825 case TC_PROXYCLASSDESC:
1826 descriptor = readProxyDesc(unshared);
1827 break;
1828 case TC_CLASSDESC:
1829 descriptor = readNonProxyDesc(unshared);
1830 break;
1831 default:
1832 throw new StreamCorruptedException(
1833 String.format("invalid type code: %02X", tc));
1834 }
1835 return descriptor;
1836 }
1837
1838 private boolean isCustomSubclass() {
1839 // Return true if this class is a custom subclass of ObjectInputStream
1840 return getClass().getClassLoader()
1841 != ObjectInputStream.class.getClassLoader();
1842 }
1843
|