< prev index next >

src/java.base/share/classes/java/io/ObjectInputStream.java

Print this page
rev 52891 : 8224541: Better mapping of serial ENUMs
Reviewed-by: mschoene, rhalade, robm, rriggs, smarks, andrew
   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 


< prev index next >