changeset 1262:39be7bf16820 jdk8u66-b34

Merge
author asaha
date Fri, 13 Nov 2015 14:07:33 -0800
parents ec1a89bee305 (diff) 6daf84b540ac (current diff)
children 9dfa25a760c6
files .hgtags
diffstat 9 files changed, 190 insertions(+), 67 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Wed Nov 11 20:44:25 2015 -0800
+++ b/.hgtags	Fri Nov 13 14:07:33 2015 -0800
@@ -428,3 +428,74 @@
 eb269a395660200c33cd58acca2df20da03567ab jdk8u51-b32
 b0daf4d3eb5f5de0f073ec9d264b1964b1920c67 jdk8u51-b33
 bd928a0bfc2c0f14eaa6a86e8d5937f9e94fd514 jdk8u51-b34
+8bbc2bb414b7e9331c2014c230553d72c9d161c5 jdk8u60-b00
+15ae8298b34beb30f2bd7baa7ff895af2bec13f6 jdk8u60-b01
+a98524c04cbd24bbc3029b21c033abf9108e92b4 jdk8u60-b02
+50cef81aa68539d0af7c5c48e370108a5b0d5a4f jdk8u60-b03
+d0e7c0ba4671c6a20ba5885e075ffa7196b738a1 jdk8u60-b04
+983825f6835055c24ed7580b6d4bd2f4e17e5425 jdk8u60-b05
+587b011966468537b1ff40a007aa51e52c823bc8 jdk8u60-b06
+058a6dd8d04cbb3d3bcc0b9d60dd05111fb37b22 jdk8u60-b07
+b184ceca742eb1a6469442af91f918ac1e1cf95c jdk8u60-b08
+e8af97f98cad81672e713c1af68d9059792a4ef2 jdk8u60-b09
+bd691208dfd6c97ffd10e2314f457d7badc47dab jdk8u60-b10
+43892f96d79eea91e67c193141f76ec31eb351d8 jdk8u60-b11
+449f9a900771900310a3f49e034c4cca478c6aff jdk8u60-b12
+b4e22b44d44664a3aa4fc2737cd63115328084b1 jdk8u60-b13
+c4108e15fbde9c67f5085aa60cd9f03e69d245dd jdk8u60-b14
+68b50073c52a2c77aa35f90d6cfdec966effc4ef jdk8u60-b15
+3b19c17ea11c3831a8a0099d6d7a1a3c7e4897c4 jdk8u60-b16
+7ef66778231f234b69515202b2dc2287143ecb49 jdk8u60-b17
+cf83b578af1935db8474d01b8642e4803a534d3a jdk8u60-b18
+eb0caffe34c6bea2ff40966757142b3dcd3a2a4c jdk8u60-b19
+4f3a29adbf4cfa2127e1108d82aaaa0d29f3c583 jdk8u60-b20
+d68de92de3bad991546b11d77de6e9c17edf7ec2 jdk8u60-b21
+3a04901d83880634ecd70c8be992189228ccd746 jdk8u60-b22
+0828bb6521738ad5a7fe11f0aa3495465f002848 jdk8u60-b23
+b0779099d006fcb2a0af493e2a2f828411bfad33 jdk8u60-b24
+c665dd5d32b04c1dbc2cf21a595fe73330849c03 jdk8u60-b25
+7828b9af7733eeaf2cafa8e05e68a2661dc3c7a8 jdk8u60-b26
+be922f27d05991e3099f42988b8ea4ad89809749 jdk8u60-b27
+1c146aed705a76fd488402219b0b7740e2aeb5e2 jdk8u60-b31
+dccb1de9712dd6aa2a1edafba861af9998ad3e62 jdk8u60-b32
+8e247b5216a5a4623c1bef7331585d78e7c0fb15 jdk8u52-b06
+974e2fd9b5b3cec38cceb35c93bcc3b5bedbe91c jdk8u52-b07
+8e247b5216a5a4623c1bef7331585d78e7c0fb15 jdk8u65-b00
+31ceb15b19bee8e02aa2cf4be5c3f147ad6afb22 jdk8u65-b01
+4c8bc7757f825f9fe0806fa13f0fe85b1a20982a jdk8u65-b02
+7a98523691a9657d4f5ecf8fb71476cecc6d5c4d jdk8u65-b03
+771cf2ce97e332e1ecffe4818d0fbe77f11e28a2 jdk8u65-b04
+5b6ff67eed5f25cc710a53026e706597c9193f56 jdk8u65-b05
+05084f644c07a81e2b246db38917df253f5e2882 jdk8u65-b06
+bc23767d08cf1e2ba8793106882a3ec9b926d9e0 jdk8u65-b07
+cc1eef73fb58c59317a0be13f31ef7a77b46b8e3 jdk8u65-b08
+db639a8f026b01059114cd32d9e44dfad2b55de0 jdk8u65-b09
+98ad80b71e1fb5c3343c33dffd40e9e92e65f087 jdk8u65-b10
+98ad80b71e1fb5c3343c33dffd40e9e92e65f087 jdk8u65-b10
+0000000000000000000000000000000000000000 jdk8u65-b10
+0000000000000000000000000000000000000000 jdk8u65-b10
+6b5f81fcbdde7bca924364448e7d98912992ac2f jdk8u65-b10
+2dcd36bfa8a4e5d789cd86ee24bdc1045bac4e06 jdk8u65-b11
+55f0343bcba5f486f955ffe7b25aac261c0003b4 jdk8u65-b12
+d7ec3a9f57de2e6c403410f7b45aa69171f18892 jdk8u65-b13
+4d70db073f332c38b861585b46fe7252b1c5b9fa jdk8u65-b14
+ac282c2b32cdc6c8f8948fca6980cb1505b36c80 jdk8u65-b15
+a844676401a206b1e98f4b5b69141b784a559766 jdk8u65-b16
+d9c2dcdd835ca332c9c44430747f9f2633c2dfd9 jdk8u65-b17
+3a04901d83880634ecd70c8be992189228ccd746 jdk8u66-b00
+3717d70ac87f5e5579e540cd990b4e958c5990a4 jdk8u66-b01
+15851994f9f81f6de37b63683c8cd9b19ae90ed1 jdk8u66-b02
+8e9e5c715064a55865975ec3626b17e0439613c7 jdk8u66-b07
+6802a364b568ce4f4398c0fc90ee0f675337a3c2 jdk8u66-b08
+81d11adaf5aa0b37ffabf45fbeb8fa19f13de596 jdk8u66-b09
+12e44aa2069b20ecbff03285dea4681325b9c05f jdk8u66-b10
+ebe5ae51f625a9d3f5e1aac835a416502c71a4a0 jdk8u66-b11
+3acb9f1828c5e9ed64a45c0101d1c59d1e784ee0 jdk8u66-b12
+f71aabee169f8342298e38923848bdb863c0f37a jdk8u66-b13
+0db478b43d7fcf26dc613241654737756ec982c5 jdk8u66-b14
+b88ba0b818831eb6f3a7954e218b371ed6f5d154 jdk8u66-b15
+606448f919ad288412669c3e78482b99d8f5f416 jdk8u66-b16
+c53412824d4ef81343418a71877172776b0980af jdk8u66-b17
+d555fb895611d083724442be79e5592ba676825c jdk8u66-b31
+4436283ad3bd05910df5f7d44321b5b581ae1004 jdk8u66-b32
+b0392e7c5b0712e00341e32c3c1e8f78d56e3695 jdk8u66-b33
--- a/THIRD_PARTY_README	Wed Nov 11 20:44:25 2015 -0800
+++ b/THIRD_PARTY_README	Fri Nov 13 14:07:33 2015 -0800
@@ -1140,37 +1140,6 @@
 
 --------------------------------------------------------------------------------
 
-%% This notice is provided with respect to JSON, which may be included 
-with JRE 8 & JDK 8.
-
---- begin of LICENSE ---
-
-Copyright (c) 2002 JSON.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
---- end of LICENSE ---
-
--------------------------------------------------------------------------------
-
 %% This notice is provided with respect to Kerberos functionality, which 
 which may be included with JRE 8, JDK 8, and OpenJDK 8.
 
@@ -1250,7 +1219,7 @@
 
 -------------------------------------------------------------------------------
 
-%% This notice is provided with respect to libpng 1.6.16, which may be
+%% This notice is provided with respect to libpng 1.6.16, which may be 
 included with JRE 8, JDK 8, and OpenJDK 8.
 
 --- begin of LICENSE ---
@@ -1370,7 +1339,7 @@
 
 -------------------------------------------------------------------------------
 
-%% This notice is provided with respect to libungif 4.1.3, which may be 
+%% This notice is provided with respect to GIFLIB 5.1.1 & libungif 4.1.3, which may be 
 included with JRE 8, JDK 8, and OpenJDK 8.
 
 --- begin of LICENSE ---
@@ -1399,13 +1368,13 @@
 
 -------------------------------------------------------------------------------
 
-%% This notice is provided with respect to Little CMS 2.5, which may be 
+%% This notice is provided with respect to Little CMS 2.7, which may be 
 included with JRE 8, JDK 8, and OpenJDK 8.
 
 --- begin of LICENSE ---
 
 Little CMS
-Copyright (c) 1998-2011 Marti Maria Saguer
+Copyright (c) 1998-2015 Marti Maria Saguer
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
--- a/src/share/classes/com/sun/corba/se/impl/io/IIOPInputStream.java	Wed Nov 11 20:44:25 2015 -0800
+++ b/src/share/classes/com/sun/corba/se/impl/io/IIOPInputStream.java	Fri Nov 13 14:07:33 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -567,6 +567,11 @@
                 // XXX I18N, logging needed.
                 throw new NotActiveException("defaultReadObjectDelegate");
 
+            if (!currentClassDesc.forClass().isAssignableFrom(
+                    currentObject.getClass())) {
+                throw new IOException("Object Type mismatch");
+            }
+
             // The array will be null unless fields were retrieved
             // remotely because of a serializable version difference.
             // Bug fix for 4365188.  See the definition of
@@ -1063,6 +1068,9 @@
 
             int spBase = spClass;       // current top of stack
 
+            if (currentClass.getName().equals("java.lang.String")) {
+                return this.readUTF();
+            }
             /* The object's classes should be processed from supertype to subtype
              * Push all the clases of the current object onto a stack.
              * Note that only the serializable classes are represented
@@ -1768,43 +1776,59 @@
             switch (field.getTypeCode()) {
                 case 'B':
                     byte byteValue = orbStream.read_octet();
-                    bridge.putByte( o, field.getFieldID(), byteValue ) ;
-                    //reflective code: field.getField().setByte( o, byteValue ) ;
+                    if (field.getField() != null) {
+                        bridge.putByte( o, field.getFieldID(), byteValue ) ;
+                        //reflective code: field.getField().setByte( o, byteValue ) ;
+                    }
                     break;
                 case 'Z':
                     boolean booleanValue = orbStream.read_boolean();
-                    bridge.putBoolean( o, field.getFieldID(), booleanValue ) ;
-                    //reflective code: field.getField().setBoolean( o, booleanValue ) ;
+                    if (field.getField() != null) {
+                        bridge.putBoolean( o, field.getFieldID(), booleanValue ) ;
+                        //reflective code: field.getField().setBoolean( o, booleanValue ) ;
+                    }
                     break;
                 case 'C':
                     char charValue = orbStream.read_wchar();
-                    bridge.putChar( o, field.getFieldID(), charValue ) ;
-                    //reflective code: field.getField().setChar( o, charValue ) ;
+                    if (field.getField() != null) {
+                        bridge.putChar( o, field.getFieldID(), charValue ) ;
+                        //reflective code: field.getField().setChar( o, charValue ) ;
+                    }
                     break;
                 case 'S':
                     short shortValue = orbStream.read_short();
-                    bridge.putShort( o, field.getFieldID(), shortValue ) ;
-                    //reflective code: field.getField().setShort( o, shortValue ) ;
+                    if (field.getField() != null) {
+                        bridge.putShort( o, field.getFieldID(), shortValue ) ;
+                        //reflective code: field.getField().setShort( o, shortValue ) ;
+                    }
                     break;
                 case 'I':
                     int intValue = orbStream.read_long();
-                    bridge.putInt( o, field.getFieldID(), intValue ) ;
-                    //reflective code: field.getField().setInt( o, intValue ) ;
+                    if (field.getField() != null) {
+                        bridge.putInt( o, field.getFieldID(), intValue ) ;
+                        //reflective code: field.getField().setInt( o, intValue ) ;
+                    }
                     break;
                 case 'J':
                     long longValue = orbStream.read_longlong();
-                    bridge.putLong( o, field.getFieldID(), longValue ) ;
-                    //reflective code: field.getField().setLong( o, longValue ) ;
+                    if (field.getField() != null) {
+                        bridge.putLong( o, field.getFieldID(), longValue ) ;
+                        //reflective code: field.getField().setLong( o, longValue ) ;
+                    }
                     break;
                 case 'F' :
                     float floatValue = orbStream.read_float();
-                    bridge.putFloat( o, field.getFieldID(), floatValue ) ;
-                    //reflective code: field.getField().setFloat( o, floatValue ) ;
+                    if (field.getField() != null) {
+                        bridge.putFloat( o, field.getFieldID(), floatValue ) ;
+                        //reflective code: field.getField().setFloat( o, floatValue ) ;
+                    }
                     break;
                 case 'D' :
                     double doubleValue = orbStream.read_double();
-                    bridge.putDouble( o, field.getFieldID(), doubleValue ) ;
-                    //reflective code: field.getField().setDouble( o, doubleValue ) ;
+                    if (field.getField() != null) {
+                        bridge.putDouble( o, field.getFieldID(), doubleValue ) ;
+                        //reflective code: field.getField().setDouble( o, doubleValue ) ;
+                    }
                     break;
                 default:
                     // XXX I18N, logging needed.
@@ -2217,9 +2241,6 @@
 
         if (o != null) {
             for (int i = 0; i < primFields; ++i) {
-                if (fields[i].getField() == null)
-                    continue;
-
                 inputPrimitiveField(o, cl, fields[i]);
             }
         }
@@ -2244,6 +2265,27 @@
 
                 try {
                     Class fieldCl = fields[i].getClazz();
+                    if ((objectValue != null)
+                            && (!fieldCl.isAssignableFrom(
+                                    objectValue.getClass()))) {
+                        throw new IllegalArgumentException("Field mismatch");
+                    }
+                   Field classField = null;
+                    try {
+                        classField = cl.getDeclaredField(fields[i].getName());
+                    } catch (NoSuchFieldException nsfEx) {
+                        throw new IllegalArgumentException(nsfEx);
+                    } catch (SecurityException secEx) {
+                        throw new IllegalArgumentException(secEx.getCause());
+                    }
+                    Class<?> declaredFieldClass = classField.getType();
+
+                    // check input field type is a declared field type
+                    // input field is a subclass of the declared field
+                    if (!declaredFieldClass.isAssignableFrom(fieldCl)) {
+                        throw new IllegalArgumentException(
+                                "Field Type mismatch");
+                    }
                     if (objectValue != null && !fieldCl.isInstance(objectValue)) {
                         throw new IllegalArgumentException();
                     }
--- a/src/share/classes/com/sun/corba/se/impl/io/IIOPOutputStream.java	Wed Nov 11 20:44:25 2015 -0800
+++ b/src/share/classes/com/sun/corba/se/impl/io/IIOPOutputStream.java	Fri Nov 13 14:07:33 2015 -0800
@@ -559,6 +559,10 @@
              * Push all the clases of the current object onto a stack.
              * Remember the stack pointer where this set of classes is being pushed.
              */
+            if (currentClassDesc.forClass().getName().equals("java.lang.String")) {
+                    this.writeUTF((String)obj);
+                    return;
+            }
             int stackMark = classDescStack.size();
             try {
                 ObjectStreamClass next;
--- a/src/share/classes/com/sun/corba/se/impl/io/OutputStreamHook.java	Wed Nov 11 20:44:25 2015 -0800
+++ b/src/share/classes/com/sun/corba/se/impl/io/OutputStreamHook.java	Fri Nov 13 14:07:33 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,6 +32,7 @@
 package com.sun.corba.se.impl.io;
 
 import java.io.IOException;
+import java.io.NotActiveException;
 import java.io.OutputStream;
 import java.io.ObjectOutputStream;
 import java.io.ObjectOutput;
@@ -154,7 +155,9 @@
 
     public ObjectOutputStream.PutField putFields()
         throws IOException {
-        putFields = new HookPutFields();
+        if (putFields == null) {
+            putFields = new HookPutFields();
+        }
         return putFields;
     }
 
@@ -175,8 +178,11 @@
         throws IOException {
 
         writeObjectState.defaultWriteObject(this);
-
-        putFields.write(this);
+        if (putFields != null) {
+            putFields.write(this);
+        } else {
+            throw new NotActiveException("no current PutField object");
+        }
     }
 
     abstract org.omg.CORBA_2_3.portable.OutputStream getOrbStream();
--- a/src/share/classes/com/sun/corba/se/impl/orbutil/resources/sunorb_pt_BR.properties	Wed Nov 11 20:44:25 2015 -0800
+++ b/src/share/classes/com/sun/corba/se/impl/orbutil/resources/sunorb_pt_BR.properties	Fri Nov 13 14:07:33 2015 -0800
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -62,7 +62,7 @@
 
 servertool.list=\n\tlist\n
 servertool.list1=lista todos os servidores registrados
-servertool.list2=\n\tId do Servidor\tNome de Classe do Servidor\t\tAplica\u00E7\u00E3o do Servidor\n\t---------\t-----------------\t\t------------------\n
+servertool.list2=\n\tId do Servidor\tNome de Classe do Servidor\t\tAplicativo do Servidor\n\t---------\t-----------------\t\t------------------\n
 servertool.listactive=\n\tlistactive
 servertool.listactive1=lista os servidores atualmente ativos
 servertool.listappnames=\tlistappnames\n
--- a/src/share/classes/com/sun/corba/se/impl/orbutil/resources/sunorb_sv.properties	Wed Nov 11 20:44:25 2015 -0800
+++ b/src/share/classes/com/sun/corba/se/impl/orbutil/resources/sunorb_sv.properties	Fri Nov 13 14:07:33 2015 -0800
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -100,7 +100,7 @@
 tnameserv.orbinitialport0=ORBInitialPort 0 \u00E4r inte ett giltigt alternativ f\u00F6r NameService
 tnameserv.hs1=Ursprunglig namngivningskontext:\n{0}
 tnameserv.hs2=TransientNameServer: st\u00E4ller in port f\u00F6r ursprungliga objektreferenser till: {0}
-tnameserv.hs3=Redo.
+tnameserv.hs3=Klar.
 
 orbd.commfailure=\nKunde inte starta ORBD eftersom ORBinitialport redan anv\u00E4nds
 orbd.internalexception=\nKunde inte starta ORBD p\u00E5 grund av internt undantag. \nM\u00F6jliga orsaker: \n1. Angivet ORBInitialPort eller ORBActivationPort anv\u00E4ndas redan \n2. Ingen beh\u00F6righet att skriva till orb.db 
--- a/src/share/classes/org/omg/CORBA_2_3/portable/InputStream.java	Wed Nov 11 20:44:25 2015 -0800
+++ b/src/share/classes/org/omg/CORBA_2_3/portable/InputStream.java	Fri Nov 13 14:07:33 2015 -0800
@@ -77,7 +77,7 @@
      *
      * throw SecurityException if SecurityManager is installed and
      * enableSubclassImplementation SerializablePermission
-     * is not granted or jdk.corba.allowOutputStreamSubclass system
+     * is not granted or jdk.corba.allowInputStreamSubclass system
      * property is either not set or is set to 'false'
      */
     public InputStream() {
--- a/src/share/classes/sun/rmi/rmic/iiop/StubGenerator.java	Wed Nov 11 20:44:25 2015 -0800
+++ b/src/share/classes/sun/rmi/rmic/iiop/StubGenerator.java	Fri Nov 13 14:07:33 2015 -0800
@@ -446,6 +446,9 @@
         if (emitPermissionCheck) {
 
             // produce the following generated code for example
+            //
+            // private transient boolean _instantiated = false;
+            //
             // private static Void checkPermission() {
             // SecurityManager sm = System.getSecurityManager();
             // if (sm != null) {
@@ -460,11 +463,21 @@
             //
             // public _XXXXX_Stub() {
             // this(checkPermission());
+            // _instantiated = true;
+            // }
+            //
+            // private void readObject(java.io.ObjectInputStream s) throws IOException, ClassNotFoundException {
+            //    checkPermission();
+            //    s.defaultReadObject();
+            //    _instantiated = true;
             // }
             //
             // where XXXXX is the name of the remote interface
 
                 p.pln();
+                p.plnI("private transient boolean _instantiated = false;");
+                p.pln();
+                p.pO();
                 p.plnI("private static Void checkPermission() {");
                 p.plnI("SecurityManager sm = System.getSecurityManager();");
                 p.pln("if (sm != null) {");
@@ -481,13 +494,23 @@
                 p.pO();
 
                 p.pI();
-                p.pln("private " + currentClass + "(Void ignore) {  }");
+                p.plnI("private " + currentClass + "(Void ignore) {  }");
                 p.pln();
-
-                p.plnI("public " + currentClass + "() { ");
+                p.pO();
+
+                p.plnI("public " + currentClass + "() {");
                 p.pln("this(checkPermission());");
+                p.pln("_instantiated = true;");
                 p.pOln("}");
                 p.pln();
+                p.plnI("private void readObject(java.io.ObjectInputStream s) throws IOException, ClassNotFoundException {");
+                p.plnI("checkPermission();");
+                p.pO();
+                p.pln("s.defaultReadObject();");
+                p.pln("_instantiated = true;");
+                p.pOln("}");
+                p.pln();
+                //p.pO();
         }
 
        if (!emitPermissionCheck) {
@@ -894,6 +917,7 @@
         String paramNames[] = method.getArgumentNames();
         Type returnType = method.getReturnType();
         ValueType[] exceptions = getStubExceptions(method,false);
+        boolean hasIOException = false;
 
         addNamesInUse(method);
         addNameInUse("_type_ids");
@@ -921,6 +945,13 @@
         p.plnI(" {");
 
         // Now create the method body...
+        if (emitPermissionCheck) {
+            p.pln("if ((System.getSecurityManager() != null) && (!_instantiated)) {");
+            p.plnI("    throw new java.io.IOError(new java.io.IOException(\"InvalidObject \"));");
+            p.pOln("}");
+            p.pln();
+        }
+
 
         if (localStubs) {
             writeLocalStubMethodBody(p,method,theType);