# HG changeset patch # User sundar # Date 1389969587 -19800 # Node ID aef781b882c03604f04d8c31d5b58d5117811247 # Parent 33a61e7f43e6de49a1a7239018eca31ccbb73b1a 8032060: PropertyMap of Error objects is not stable Reviewed-by: jlaskey, hannesw diff -r 33a61e7f43e6 -r aef781b882c0 src/jdk/nashorn/internal/objects/Global.java --- a/src/jdk/nashorn/internal/objects/Global.java Thu Jan 16 22:50:53 2014 +0530 +++ b/src/jdk/nashorn/internal/objects/Global.java Fri Jan 17 20:09:47 2014 +0530 @@ -1705,8 +1705,25 @@ initScripting(env); } - if (Context.DEBUG && System.getSecurityManager() == null) { - initDebug(); + if (Context.DEBUG) { + boolean debugOkay; + final SecurityManager sm = System.getSecurityManager(); + if (sm != null) { + try { + sm.checkPermission(new RuntimePermission(Context.NASHORN_DEBUG_MODE)); + debugOkay = true; + } catch (final SecurityException ignored) { + // if no permission, don't initialize Debug object + debugOkay = false; + } + + } else { + debugOkay = true; + } + + if (debugOkay) { + initDebug(); + } } copyBuiltins(); diff -r 33a61e7f43e6 -r aef781b882c0 src/jdk/nashorn/internal/objects/NativeError.java --- a/src/jdk/nashorn/internal/objects/NativeError.java Thu Jan 16 22:50:53 2014 +0530 +++ b/src/jdk/nashorn/internal/objects/NativeError.java Fri Jan 17 20:09:47 2014 +0530 @@ -85,6 +85,10 @@ @Property(attributes = Attribute.NOT_ENUMERABLE, where = Where.PROTOTYPE) public Object message; + /** Nashorn extension: underlying exception */ + @Property(attributes = Attribute.NOT_ENUMERABLE) + public Object nashornException; + // initialized by nasgen private static PropertyMap $nasgenmap$; diff -r 33a61e7f43e6 -r aef781b882c0 src/jdk/nashorn/internal/objects/NativeEvalError.java --- a/src/jdk/nashorn/internal/objects/NativeEvalError.java Thu Jan 16 22:50:53 2014 +0530 +++ b/src/jdk/nashorn/internal/objects/NativeEvalError.java Fri Jan 17 20:09:47 2014 +0530 @@ -55,6 +55,10 @@ @Property(attributes = Attribute.NOT_ENUMERABLE, where = Where.PROTOTYPE) public Object message; + /** Nashorn extension: underlying exception */ + @Property(attributes = Attribute.NOT_ENUMERABLE) + public Object nashornException; + // initialized by nasgen private static PropertyMap $nasgenmap$; diff -r 33a61e7f43e6 -r aef781b882c0 src/jdk/nashorn/internal/objects/NativeRangeError.java --- a/src/jdk/nashorn/internal/objects/NativeRangeError.java Thu Jan 16 22:50:53 2014 +0530 +++ b/src/jdk/nashorn/internal/objects/NativeRangeError.java Fri Jan 17 20:09:47 2014 +0530 @@ -55,6 +55,10 @@ @Property(attributes = Attribute.NOT_ENUMERABLE, where = Where.PROTOTYPE) public Object message; + /** Nashorn extension: underlying exception */ + @Property(attributes = Attribute.NOT_ENUMERABLE) + public Object nashornException; + // initialized by nasgen private static PropertyMap $nasgenmap$; diff -r 33a61e7f43e6 -r aef781b882c0 src/jdk/nashorn/internal/objects/NativeReferenceError.java --- a/src/jdk/nashorn/internal/objects/NativeReferenceError.java Thu Jan 16 22:50:53 2014 +0530 +++ b/src/jdk/nashorn/internal/objects/NativeReferenceError.java Fri Jan 17 20:09:47 2014 +0530 @@ -55,6 +55,10 @@ @Property(attributes = Attribute.NOT_ENUMERABLE, where = Where.PROTOTYPE) public Object message; + /** Nashorn extension: underlying exception */ + @Property(attributes = Attribute.NOT_ENUMERABLE) + public Object nashornException; + // initialized by nasgen private static PropertyMap $nasgenmap$; diff -r 33a61e7f43e6 -r aef781b882c0 src/jdk/nashorn/internal/objects/NativeSyntaxError.java --- a/src/jdk/nashorn/internal/objects/NativeSyntaxError.java Thu Jan 16 22:50:53 2014 +0530 +++ b/src/jdk/nashorn/internal/objects/NativeSyntaxError.java Fri Jan 17 20:09:47 2014 +0530 @@ -55,6 +55,10 @@ @Property(attributes = Attribute.NOT_ENUMERABLE, where = Where.PROTOTYPE) public Object message; + /** Nashorn extension: underlying exception */ + @Property(attributes = Attribute.NOT_ENUMERABLE) + public Object nashornException; + // initialized by nasgen private static PropertyMap $nasgenmap$; diff -r 33a61e7f43e6 -r aef781b882c0 src/jdk/nashorn/internal/objects/NativeTypeError.java --- a/src/jdk/nashorn/internal/objects/NativeTypeError.java Thu Jan 16 22:50:53 2014 +0530 +++ b/src/jdk/nashorn/internal/objects/NativeTypeError.java Fri Jan 17 20:09:47 2014 +0530 @@ -55,6 +55,10 @@ @Property(attributes = Attribute.NOT_ENUMERABLE, where = Where.PROTOTYPE) public Object message; + /** Nashorn extension: underlying exception */ + @Property(attributes = Attribute.NOT_ENUMERABLE) + public Object nashornException; + // initialized by nasgen private static PropertyMap $nasgenmap$; diff -r 33a61e7f43e6 -r aef781b882c0 src/jdk/nashorn/internal/objects/NativeURIError.java --- a/src/jdk/nashorn/internal/objects/NativeURIError.java Thu Jan 16 22:50:53 2014 +0530 +++ b/src/jdk/nashorn/internal/objects/NativeURIError.java Fri Jan 17 20:09:47 2014 +0530 @@ -54,6 +54,10 @@ @Property(attributes = Attribute.NOT_ENUMERABLE, where = Where.PROTOTYPE) public Object message; + /** Nashorn extension: underlying exception */ + @Property(attributes = Attribute.NOT_ENUMERABLE) + public Object nashornException; + // initialized by nasgen private static PropertyMap $nasgenmap$; diff -r 33a61e7f43e6 -r aef781b882c0 src/jdk/nashorn/internal/runtime/Context.java --- a/src/jdk/nashorn/internal/runtime/Context.java Thu Jan 16 22:50:53 2014 +0530 +++ b/src/jdk/nashorn/internal/runtime/Context.java Fri Jan 17 20:09:47 2014 +0530 @@ -91,6 +91,11 @@ */ public static final String NASHORN_JAVA_REFLECTION = "nashorn.JavaReflection"; + /** + * Permission to enable nashorn debug mode. + */ + public static final String NASHORN_DEBUG_MODE = "nashorn.debugMode"; + // nashorn load psuedo URL prefixes private static final String LOAD_CLASSPATH = "classpath:"; private static final String LOAD_FX = "fx:"; diff -r 33a61e7f43e6 -r aef781b882c0 src/jdk/nashorn/internal/runtime/ECMAException.java --- a/src/jdk/nashorn/internal/runtime/ECMAException.java Thu Jan 16 22:50:53 2014 +0530 +++ b/src/jdk/nashorn/internal/runtime/ECMAException.java Fri Jan 17 20:09:47 2014 +0530 @@ -33,7 +33,6 @@ import jdk.nashorn.api.scripting.NashornException; import jdk.nashorn.internal.codegen.CompilerConstants.Call; import jdk.nashorn.internal.codegen.CompilerConstants.FieldAccess; -import jdk.nashorn.internal.objects.NativeError; /** * Exception used to implement ECMAScript "throw" from scripts. The actual thrown diff -r 33a61e7f43e6 -r aef781b882c0 test/script/trusted/JDK-8032060.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/script/trusted/JDK-8032060.js Fri Jan 17 20:09:47 2014 +0530 @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2014, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * JDK-8032060: PropertyMap of Error objects is not stable + * + * @test + * @option -Dnashorn.debug=true + * @fork + * @run + */ + +function checkMap(e1, e2) { + if (! Debug.identical(Debug.map(e1), Debug.map(e2))) { + fail("e1 and e2 have different maps"); + } + + var m1, m2; + + try { + throw e1 + } catch (e) { + m1 = Debug.map(e) + } + + try { + throw e2 + } catch (e) { + m2 = Debug.map(e) + } + + if (! Debug.identical(m1, m2)) { + fail("e1 and e2 have different maps after being thrown"); + } +} + +checkMap(new Error(), new Error()); +checkMap(new EvalError(), new EvalError()); +checkMap(new RangeError(), new RangeError()); +checkMap(new ReferenceError(), new ReferenceError()); +checkMap(new SyntaxError(), new SyntaxError()); +checkMap(new TypeError(), new TypeError()); +checkMap(new URIError(), new URIError()); + +// now try with message param +checkMap(new Error("x"), new Error("y")); +checkMap(new EvalError("x"), new EvalError("y")); +checkMap(new RangeError("x"), new RangeError("y")); +checkMap(new ReferenceError("x"), new ReferenceError("y")); +checkMap(new SyntaxError("x"), new SyntaxError("y")); +checkMap(new TypeError("x"), new TypeError("y")); +checkMap(new URIError("x"), new URIError("y"));