# HG changeset patch # User sundar # Date 1420619550 -19800 # Node ID bcfb5663e81a856d237d23078cf6de608910227f # Parent 0aeeae75e696d5f219574976f44690e818c15491 8068524: NashornScriptEngineFactory.getParameter() throws IAE for an unknown key, doesn't conform to the general spec Reviewed-by: hannesw, attila diff -r 0aeeae75e696 -r bcfb5663e81a nashorn/samples/jd.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/samples/jd.js Wed Jan 07 14:02:30 2015 +0530 @@ -0,0 +1,94 @@ +#// Usage: jjs -cp jd.js -- [jdis|jdec] + +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// javap-like disassembler/decoder tool that disassembles/decodes +// java classes but with OpenJDK AsmTools disassembler/decoder syntax. +// You need to build asmtool.jar from OpenJDK codetools project +// specify it with -cp option. + +// See also https://wiki.openjdk.java.net/display/CodeTools/AsmTools + +function usage() { + print("Usage: jjs -cp jd.js -- [jdis|jdec]"); + exit(1); +} + +if (arguments.length == 0) { + usage(); +} + +// argument handling +// convert to internal class name +var className = arguments[0].replaceAll('\\.', '/'); +var tool; +if (arguments.length > 1) { + tool = arguments[1]; + switch (tool) { + case 'jdis': + case 'jdec': + break; + default: + usage(); + } +} else { + tool = "jdis"; // default tool +} + +// Java classes used +var AsmTools = Java.type("org.openjdk.asmtools.Main"); +var Files = Java.type("java.nio.file.Files"); +var StandardCopyOption = Java.type("java.nio.file.StandardCopyOption"); + +// retrive input stream for .class bytes +var cl = AsmTools.class.classLoader; +var res = cl.getResource(className + ".class"); + +if (res) { + var is = res.openStream(); + var tmpPath; + try { + // copy the content of the .class to a temp file + tmpPath = Files.createTempFile("asmtools-", ".class"); + // mark as delete-on-exit + tmpPath.toFile().deleteOnExit(); + Files.copy(is, tmpPath, [ StandardCopyOption.REPLACE_EXISTING ]); + } finally { + is.close(); + } + + // invoke asmtools Main + AsmTools.main([ tool, tmpPath.toString() ]); +} else { + print("no such class: " + arguments[0]); + exit(1); +} diff -r 0aeeae75e696 -r bcfb5663e81a nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornScriptEngineFactory.java --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornScriptEngineFactory.java Mon Jan 05 16:02:56 2015 +0530 +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornScriptEngineFactory.java Wed Jan 07 14:02:30 2015 +0530 @@ -123,7 +123,7 @@ // used to execute scripts concurrently on multiple threads. return null; default: - throw new IllegalArgumentException("Invalid key"); + return null; } } diff -r 0aeeae75e696 -r bcfb5663e81a nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java --- a/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java Mon Jan 05 16:02:56 2015 +0530 +++ b/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java Wed Jan 07 14:02:30 2015 +0530 @@ -27,6 +27,7 @@ import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNull; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; import java.io.StringReader; @@ -668,6 +669,17 @@ assertEquals("helloworld", inv.invokeMethod(ctx.get(), "join", "")); } + // @bug 8068524: NashornScriptEngineFactory.getParameter() throws IAE + // for an unknown key, doesn't conform to the general spec + @Test + public void getParameterInvalidKeyTest() throws Exception { + final ScriptEngineManager manager = new ScriptEngineManager(); + final ScriptEngine e = manager.getEngineByName("nashorn"); + // no exception expected here! + Object value = e.getFactory().getParameter("no value assigned to this key"); + assertNull(value); + } + private static void checkProperty(final ScriptEngine e, final String name) throws ScriptException { final String value = System.getProperty(name);