# HG changeset patch # User sundar # Date 1510768540 -19800 # Node ID 0084b493dfc9b58b7a39a2844ae64ecee5b1f43a # Parent 6cc6869999e23da3e83f7bdfbd42750a00db1251 8068741: javax.script.ScriptEngineFactory.getMethodCallSyntax() spec allows null passed as an object Reviewed-by: hannesw diff -r 6cc6869999e2 -r 0084b493dfc9 src/java.scripting/share/classes/javax/script/ScriptEngineFactory.java --- a/src/java.scripting/share/classes/javax/script/ScriptEngineFactory.java Wed Nov 15 19:55:21 2017 +0530 +++ b/src/java.scripting/share/classes/javax/script/ScriptEngineFactory.java Wed Nov 15 23:25:40 2017 +0530 @@ -176,6 +176,8 @@ * @param args names of the arguments in the method call. * * @return The String used to invoke the method in the syntax of the scripting language. + * + * @throws NullPointerException if obj or m or args or any of the elements of args is null. */ public String getMethodCallSyntax(String obj, String m, String... args); diff -r 6cc6869999e2 -r 0084b493dfc9 src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornScriptEngineFactory.java --- a/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornScriptEngineFactory.java Wed Nov 15 19:55:21 2017 +0530 +++ b/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornScriptEngineFactory.java Wed Nov 15 23:25:40 2017 +0530 @@ -76,14 +76,16 @@ @Override public String getMethodCallSyntax(final String obj, final String method, final String... args) { - final StringBuilder sb = new StringBuilder().append(obj).append('.').append(method).append('('); + final StringBuilder sb = new StringBuilder(). + append(Objects.requireNonNull(obj)).append('.'). + append(Objects.requireNonNull(method)).append('('); final int len = args.length; if (len > 0) { - sb.append(args[0]); + sb.append(Objects.requireNonNull(args[0])); } for (int i = 1; i < len; i++) { - sb.append(',').append(args[i]); + sb.append(',').append(Objects.requireNonNull(args[i])); } sb.append(')'); diff -r 6cc6869999e2 -r 0084b493dfc9 test/nashorn/src/jdk/nashorn/api/scripting/test/JDK_8068741_Test.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/nashorn/src/jdk/nashorn/api/scripting/test/JDK_8068741_Test.java Wed Nov 15 23:25:40 2017 +0530 @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2017, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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. + */ + +package jdk.nashorn.api.scripting.test; + +import javax.script.ScriptEngineFactory; +import jdk.nashorn.api.scripting.NashornScriptEngineFactory; +import org.testng.Assert; +import org.testng.annotations.Test; + +/** + * @test + * @run testng jdk.nashorn.api.scripting.test.JDK_8068741_Test + * @bug 8068741 + * @summary javax.script.ScriptEngineFactory.getMethodCallSyntax() spec allows null passed as an object + */ +public class JDK_8068741_Test { + @Test + public void testGetMethodCallSyntax() { + ScriptEngineFactory fac = new NashornScriptEngineFactory(); + checkThrowsNPE(() -> fac.getMethodCallSyntax(null, "foo")); + checkThrowsNPE(() -> fac.getMethodCallSyntax("obj", null)); + checkThrowsNPE(() -> fac.getMethodCallSyntax("obj", "foo", (String[])null)); + checkThrowsNPE(() -> fac.getMethodCallSyntax("obj", "foo", null, "xyz")); + checkThrowsNPE(() -> fac.getMethodCallSyntax("obj", "foo", "xyz", null)); + } + + private void checkThrowsNPE(Runnable r) { + boolean gotNPE = false; + try { + r.run(); + } catch (NullPointerException npe) { + gotNPE = true; + System.err.println("Got NPE as expected: " + npe); + } + Assert.assertTrue(gotNPE); + } +}