# HG changeset patch # User vromero # Date 1360676216 0 # Node ID d1f59adb0d835f313cb1df299574d2fdfc4ee792 # Parent 0633054b777ab22dce15456133d18f5d09b6fc1f 8006334: javap, JavapTask constructor breaks with null pointer exception if parameter options is null Reviewed-by: jjg diff -r 0633054b777a -r d1f59adb0d83 langtools/src/share/classes/com/sun/tools/javap/JavapTask.java --- a/langtools/src/share/classes/com/sun/tools/javap/JavapTask.java Tue Feb 12 11:28:45 2013 +0100 +++ b/langtools/src/share/classes/com/sun/tools/javap/JavapTask.java Tue Feb 12 13:36:56 2013 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2013, 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 @@ -362,7 +362,8 @@ } try { - handleOptions(options, false); + if (options != null) + handleOptions(options, false); } catch (BadArgs e) { throw new IllegalArgumentException(e.getMessage()); } diff -r 0633054b777a -r d1f59adb0d83 langtools/test/tools/javap/8006334/JavapTaskCtorFailWithNPE.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javap/8006334/JavapTaskCtorFailWithNPE.java Tue Feb 12 13:36:56 2013 +0000 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2013, 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. + */ + +/* + * @test + * @bug 8006334 + * @summary javap: JavapTask constructor breaks with null pointer exception if + * parameter options is null + */ + +import java.io.File; +import java.util.Arrays; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.List; +import java.util.Locale; +import javax.tools.Diagnostic; +import javax.tools.DiagnosticCollector; +import javax.tools.JavaFileManager; +import javax.tools.JavaFileObject; +import com.sun.tools.javap.JavapFileManager; +import com.sun.tools.javap.JavapTask; + +public class JavapTaskCtorFailWithNPE { + + //we will also check the output just to confirm that we get the expected one + private static final String expOutput = + "Compiled from \"JavapTaskCtorFailWithNPE.java\"\n" + + "public class JavapTaskCtorFailWithNPE {\n" + + " public JavapTaskCtorFailWithNPE();\n" + + " public static void main(java.lang.String[]);\n" + + "}\n"; + + public static void main(String[] args) { + new JavapTaskCtorFailWithNPE().run(); + } + + private void run() { + File classToCheck = new File(System.getProperty("test.classes"), + getClass().getSimpleName() + ".class"); + + DiagnosticCollector dc = + new DiagnosticCollector(); + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + JavaFileManager fm = JavapFileManager.create(dc, pw); + JavapTask t = new JavapTask(pw, fm, dc, null, + Arrays.asList(classToCheck.getPath())); + boolean ok = t.run(); + if (!ok) + throw new Error("javap failed unexpectedly"); + + List> diags = dc.getDiagnostics(); + for (Diagnostic d: diags) { + if (d.getKind() == Diagnostic.Kind.ERROR) + throw new AssertionError(d.getMessage(Locale.ENGLISH)); + } + String lineSep = System.getProperty("line.separator"); + String out = sw.toString().replace(lineSep, "\n"); + if (!out.equals(expOutput)) { + throw new AssertionError("The output is not equal to the one expected"); + } + } + +}