diff --git a/8207160-ClassReader-adjustMethodParams-can-potentially-return-null-if-the-args-list-is-empty.patch b/8207160-ClassReader-adjustMethodParams-can-potentially-return-null-if-the-args-list-is-empty.patch new file mode 100755 index 0000000000000000000000000000000000000000..9351b4391458c05501aeb7e63aa329aa3a19cf78 --- /dev/null +++ b/8207160-ClassReader-adjustMethodParams-can-potentially-return-null-if-the-args-list-is-empty.patch @@ -0,0 +1,165 @@ +diff --git a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java +index 40248923..637d83b2 100644 +--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java ++++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java +@@ -2051,6 +2051,9 @@ public class ClassReader { + } + + private List adjustMethodParams(long flags, List args) { ++ if (args.isEmpty()) { ++ return args; ++ } + boolean isVarargs = (flags & VARARGS) != 0; + if (isVarargs) { + Type varargsElem = args.last(); +diff --git a/langtools/test/tools/javac/AvoidNPEAtClassReader/AvoidNPEAtClassReaderTest.java b/langtools/test/tools/javac/AvoidNPEAtClassReader/AvoidNPEAtClassReaderTest.java +new file mode 100644 +index 00000000..3b47d694 +--- /dev/null ++++ b/langtools/test/tools/javac/AvoidNPEAtClassReader/AvoidNPEAtClassReaderTest.java +@@ -0,0 +1,43 @@ ++/* ++ * Copyright (c) 2018, 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 8207160 ++ * @summary ClassReader::adjustMethodParams can potentially return null if the args list is empty ++ * @compile pkg/Outer.jasm pkg/Outer$Inner.jasm AvoidNPEAtClassReaderTest.java ++ */ ++ ++ ++/** this test is checking that javac doesn't fail with NPE when reading inner classes with constructors ++ * that doesn't have as a parameter a reference to the outer class. Such constructors were generated by ++ * versions of javac previous to JDK7. ++ */ ++ ++import pkg.*; ++ ++public class AvoidNPEAtClassReaderTest { ++ public void bar(Outer outer) { ++ Object stuff = outer.foo(); ++ } ++} +diff --git a/langtools/test/tools/javac/AvoidNPEAtClassReader/pkg/Outer$Inner.jasm b/langtools/test/tools/javac/AvoidNPEAtClassReader/pkg/Outer$Inner.jasm +new file mode 100644 +index 00000000..d3ee1331 +--- /dev/null ++++ b/langtools/test/tools/javac/AvoidNPEAtClassReader/pkg/Outer$Inner.jasm +@@ -0,0 +1,42 @@ ++/* ++ * Copyright (c) 2018, 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. ++ */ ++ ++package pkg; ++ ++super public final class Outer$Inner ++ version 52:0 ++{ ++ ++final synthetic Field this$0:"Lpkg/Outer;"; ++ ++public Method "":"()V" ++ stack 1 locals 1 ++{ ++ aload_0; ++ invokespecial Method java/lang/Object."":"()V"; ++ return; ++} ++ ++public final InnerClass Inner=class Outer$Inner of class Outer; ++ ++} // end Class Outer$Inner +diff --git a/langtools/test/tools/javac/AvoidNPEAtClassReader/pkg/Outer.jasm b/langtools/test/tools/javac/AvoidNPEAtClassReader/pkg/Outer.jasm +new file mode 100644 +index 00000000..29239b13 +--- /dev/null ++++ b/langtools/test/tools/javac/AvoidNPEAtClassReader/pkg/Outer.jasm +@@ -0,0 +1,48 @@ ++/* ++ * Copyright (c) 2018, 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. ++ */ ++ ++package pkg; ++ ++super public class Outer ++ version 52:0 ++{ ++ ++ ++public Method "":"()V" ++ stack 1 locals 1 ++{ ++ aload_0; ++ invokespecial Method java/lang/Object."":"()V"; ++ return; ++} ++ ++public Method foo:"()Lpkg/Outer$Inner;" ++ stack 1 locals 1 ++{ ++ aconst_null; ++ areturn; ++} ++ ++public final InnerClass Inner=class Outer$Inner of class Outer; ++ ++} // end Class Outer diff --git a/java-1.8.0-openjdk.spec b/java-1.8.0-openjdk.spec index c75736f0314d8fd44fbef52db5eeb6d350504336..7339448699ad146417eec02016ec072152bcbaff 100644 --- a/java-1.8.0-openjdk.spec +++ b/java-1.8.0-openjdk.spec @@ -915,7 +915,7 @@ Provides: java-%{javaver}-%{origin}-accessibility%{?1} = %{epoch}:%{version}-%{r Name: java-%{javaver}-%{origin} Version: %{javaver}.%{updatever}.%{buildver} -Release: 11 +Release: 12 # java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons # and this change was brought into RHEL-4. java-1.5.0-ibm packages # also included the epoch in their virtual provides. This created a @@ -1067,6 +1067,7 @@ Patch138: add-appcds-file-lock.patch Patch139: G1-memory-uncommit.patch Patch140: 8015927-Class-reference-duplicates-in-constant-pool.patch Patch141: 8040327-Eliminate-AnnotatedType-8040319-Clean-up-type-annotation-exception-index.patch +Patch142: 8207160-ClassReader-adjustMethodParams-can-potentially-return-null-if-the-args-list-is-empty.patch ############################################# # @@ -1489,6 +1490,7 @@ pushd %{top_level_dir_name} %patch139 -p1 %patch140 -p1 %patch141 -p1 +%patch142 -p1 popd @@ -2105,6 +2107,9 @@ require "copy_jdk_configs.lua" %endif %changelog +* Wed Dec 23 2020 wujiahua - 1:1.8.0.272-b10.12 +- add 8207160-ClassReader-adjustMethodParams-can-potentially-return-null-if-the-args-list-is-empty.patch + * Wed Dec 23 2020 DataAndOperation - 1:1.8.0.272-b10.11 - add 8040327-Eliminate-AnnotatedType-8040319-Clean-up-type-annotation-exception-index.patch