# HG changeset patch # User Andrew John Hughes # Date 1363001991 0 # Node ID 03aaabc8b71caedf08a33d830432b20e27f4af73 # Parent b8f9510f4a50b048d3b339c7a4e4de927d8c9b55 Add new fixes locally (backports from u17b02 & 2.4, PR1303 fix) so as to keep with 2.2.7 forest tag. 2013-03-11 Andrew John Hughes * Makefile.am: (ICEDTEA_PATCHES): Add patches. * NEWS: Updated. * patches/8002344-krb5loginmodule.patch, * patches/8004344-toolkiterrorhandler.patch: Backported from 2.4. * patches/8006179-lookup_using_findvirtual.patch, * patches/8006882-sun.proxy.patch: Taken from upstream jdk7u17 b02. * patches/pr1303-ifdef_fix.patch: PR1303 issue (#ifdef vs. #if) caught by Bernhard Rosenkr?nzer. diff -r b8f9510f4a50 -r 03aaabc8b71c ChangeLog --- a/ChangeLog Fri Mar 08 15:51:44 2013 +0000 +++ b/ChangeLog Mon Mar 11 11:39:51 2013 +0000 @@ -1,3 +1,18 @@ +2013-03-11 Andrew John Hughes + + * Makefile.am: + (ICEDTEA_PATCHES): Add patches. + * NEWS: Updated. + * patches/8002344-krb5loginmodule.patch, + * patches/8004344-toolkiterrorhandler.patch: + Backported from 2.4. + * patches/8006179-lookup_using_findvirtual.patch, + * patches/8006882-sun.proxy.patch: + Taken from upstream jdk7u17 b02. + * patches/pr1303-ifdef_fix.patch: + PR1303 issue (#ifdef vs. #if) caught by Bernhard + Rosenkränzer. + 2013-03-08 Andrew John Hughes * Makefile.am, diff -r b8f9510f4a50 -r 03aaabc8b71c Makefile.am --- a/Makefile.am Fri Mar 08 15:51:44 2013 +0000 +++ b/Makefile.am Mon Mar 11 11:39:51 2013 +0000 @@ -235,7 +235,12 @@ # Patch list -ICEDTEA_PATCHES = +ICEDTEA_PATCHES = \ + patches/8002344-krb5loginmodule.patch \ + patches/8004344-toolkiterrorhandler.patch \ + patches/8006179-lookup_using_findvirtual.patch \ + patches/8006882-sun.proxy.patch \ + patches/pr1303-ifdef_fix.patch # Conditional patches diff -r b8f9510f4a50 -r 03aaabc8b71c NEWS --- a/NEWS Fri Mar 08 15:51:44 2013 +0000 +++ b/NEWS Mon Mar 11 11:39:51 2013 +0000 @@ -15,6 +15,13 @@ * Security fixes - S8007014, CVE-2013-0809: Improve image handling - S8007675, CVE-2013-1493: Improve color conversion +* Backports + - S8002344: Krb5LoginModule config class does not return proper KDC list from DNS + - S8004344: Fix a crash in ToolkitErrorHandler() in XlibWrapper.c + - S8006179: JSR292 MethodHandles lookup with interface using findVirtual() + - S8006882: Proxy generated classes in sun.proxy package breaks JMockit +* Bug fixes + - PR1303: Correct #ifdef to #if New in release 2.2.6 (2013-02-20): diff -r b8f9510f4a50 -r 03aaabc8b71c patches/8002344-krb5loginmodule.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/8002344-krb5loginmodule.patch Mon Mar 11 11:39:51 2013 +0000 @@ -0,0 +1,207 @@ +# HG changeset patch +# User weijun +# Date 1353294788 -28800 +# Node ID 59cd568088cc6f0618315d99e53f0716afbf4ff2 +# Parent 6a419ec930a6a3ba969ccd29732f5bf61e51948c +8002344: Krb5LoginModule config class does not return proper KDC list from DNS +Reviewed-by: weijun +Contributed-by: Severin Gehwolf , Wang Weijun + +diff --git a/src/share/classes/sun/security/krb5/Config.java b/src/share/classes/sun/security/krb5/Config.java +--- openjdk/jdk/src/share/classes/sun/security/krb5/Config.java ++++ openjdk/jdk/src/share/classes/sun/security/krb5/Config.java +@@ -1284,7 +1284,7 @@ + */ + private String getKDCFromDNS(String realm) throws KrbException { + // use DNS to locate KDC +- String kdcs = null; ++ String kdcs = ""; + String[] srvs = null; + // locate DNS SRV record using UDP + if (DEBUG) { +@@ -1294,7 +1294,7 @@ + if (srvs == null) { + // locate DNS SRV record using TCP + if (DEBUG) { +- System.out.println("getKDCFromDNS using UDP"); ++ System.out.println("getKDCFromDNS using TCP"); + } + srvs = KrbServiceLocator.getKerberosService(realm, "_tcp"); + } +@@ -1303,14 +1303,15 @@ + throw new KrbException(Krb5.KRB_ERR_GENERIC, + "Unable to locate KDC for realm " + realm); + } ++ if (srvs.length == 0) { ++ return null; ++ } + for (int i = 0; i < srvs.length; i++) { +- String value = srvs[i]; +- for (int j = 0; j < srvs[i].length(); j++) { +- // filter the KDC name +- if (value.charAt(j) == ':') { +- kdcs = (value.substring(0, j)).trim(); +- } +- } ++ kdcs += srvs[i].trim() + " "; ++ } ++ kdcs = kdcs.trim(); ++ if (kdcs.equals("")) { ++ return null; + } + return kdcs; + } +diff --git a/test/sun/security/krb5/config/DNS.java b/test/sun/security/krb5/config/DNS.java +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/sun/security/krb5/config/DNS.java +@@ -0,0 +1,38 @@ ++/* ++ * Copyright (c) 2012, 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. ++ */ ++ ++// See dns.sh. ++import sun.security.krb5.Config; ++ ++public class DNS { ++ public static void main(String[] args) throws Exception { ++ System.setProperty("java.security.krb5.conf", ++ System.getProperty("test.src", ".") +"/nothing.conf"); ++ Config config = Config.getInstance(); ++ String kdcs = config.getKDCList("X"); ++ if (!kdcs.equals("a.com.:88 b.com.:99") && ++ !kdcs.equals("a.com. b.com.:99")) { ++ throw new Exception("Strange KDC: [" + kdcs + "]"); ++ }; ++ } ++} +diff --git a/test/sun/security/krb5/config/NamingManager.java b/test/sun/security/krb5/config/NamingManager.java +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/sun/security/krb5/config/NamingManager.java +@@ -0,0 +1,60 @@ ++/* ++ * Copyright (c) 2012, 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 javax.naming.spi; ++ ++import com.sun.jndi.dns.DnsContext; ++import java.util.Hashtable; ++import javax.naming.Context; ++import javax.naming.NamingException; ++import javax.naming.directory.Attribute; ++import javax.naming.directory.Attributes; ++import javax.naming.directory.BasicAttribute; ++import javax.naming.directory.BasicAttributes; ++ ++/** ++ * A fake javax.naming.spi.NamingManager. It allows reading a DNS ++ * record without contacting a real server. ++ * ++ * See DNS.java and dns.sh. ++ */ ++public class NamingManager { ++ NamingManager() {} ++ public static Context getURLContext( ++ String scheme, Hashtable environment) ++ throws NamingException { ++ return new DnsContext("", null, new Hashtable()) { ++ public Attributes getAttributes(String name, String[] attrIds) ++ throws NamingException { ++ return new BasicAttributes() { ++ public Attribute get(String attrID) { ++ BasicAttribute ba = new BasicAttribute(attrID); ++ ba.add("1 1 99 b.com."); ++ ba.add("0 0 88 a.com."); // 2nd has higher priority ++ return ba; ++ } ++ }; ++ } ++ }; ++ } ++} +diff --git a/test/sun/security/krb5/config/dns.sh b/test/sun/security/krb5/config/dns.sh +new file mode 100644 +--- /dev/null ++++ openjdk/jdk/test/sun/security/krb5/config/dns.sh +@@ -0,0 +1,41 @@ ++# ++# Copyright (c) 2012, 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 8002344 ++# @summary Krb5LoginModule config class does not return proper KDC list from DNS ++# ++ ++if [ "${TESTJAVA}" = "" ] ; then ++ JAVAC_CMD=`which javac` ++ TESTJAVA=`dirname $JAVAC_CMD`/.. ++fi ++ ++if [ "${TESTSRC}" = "" ] ; then ++ TESTSRC="." ++fi ++ ++$TESTJAVA/bin/javac -d . \ ++ ${TESTSRC}/NamingManager.java ${TESTSRC}/DNS.java ++$TESTJAVA/bin/java -Xbootclasspath/p:. DNS ++ diff -r b8f9510f4a50 -r 03aaabc8b71c patches/8004344-toolkiterrorhandler.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/8004344-toolkiterrorhandler.patch Mon Mar 11 11:39:51 2013 +0000 @@ -0,0 +1,33 @@ +# HG changeset patch +# User aph +# Date 1354629728 0 +# Node ID 1d4bf44c8e4e6875f45862871b2a82ae43dea7fa +# Parent 59cd568088cc6f0618315d99e53f0716afbf4ff2 +8004344: Fix a crash in ToolkitErrorHandler() in XlibWrapper.c +Summary: Code does not check for JNU_GetEnv returning NULL. +Reviewed-by: anthony + +diff --git a/src/solaris/native/sun/xawt/XlibWrapper.c b/src/solaris/native/sun/xawt/XlibWrapper.c +--- openjdk/jdk/src/solaris/native/sun/xawt/XlibWrapper.c ++++ openjdk/jdk/src/solaris/native/sun/xawt/XlibWrapper.c +@@ -1260,13 +1260,15 @@ + + JavaVM* jvm = NULL; + static int ToolkitErrorHandler(Display * dpy, XErrorEvent * event) { ++ JNIEnv * env; + if (jvm != NULL) { +- JNIEnv * env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); +- return JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XToolkit", "globalErrorHandler", "(JJ)I", +- ptr_to_jlong(dpy), ptr_to_jlong(event)).i; +- } else { +- return 0; ++ env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); ++ if (env) { ++ return JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XToolkit", "globalErrorHandler", "(JJ)I", ++ ptr_to_jlong(dpy), ptr_to_jlong(event)).i; ++ } + } ++ return 0; + } + + /* diff -r b8f9510f4a50 -r 03aaabc8b71c patches/8006179-lookup_using_findvirtual.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/8006179-lookup_using_findvirtual.patch Mon Mar 11 11:39:51 2013 +0000 @@ -0,0 +1,27 @@ +# HG changeset patch +# User jrose +# Date 1358570871 28800 +# Node ID 4bb16e8e663ad133e0950406bda2261169f3920f +# Parent 33b30ad1689805e74c85f6df29d2033c796baedb +8006179: JSR292 MethodHandles lookup with interface using findVirtual() +Reviewed-by: twisti + +diff --git a/src/share/classes/java/lang/invoke/DirectMethodHandle.java b/src/share/classes/java/lang/invoke/DirectMethodHandle.java +--- openjdk/jdk/src/share/classes/java/lang/invoke/DirectMethodHandle.java ++++ openjdk/jdk/src/share/classes/java/lang/invoke/DirectMethodHandle.java +@@ -44,6 +44,15 @@ + if (!m.isResolved()) + throw new InternalError(); + ++ if (m.getDeclaringClass().isInterface() && !m.isAbstract()) { ++ // Check for corner case: invokeinterface of Object method. ++ MemberName m2 = new MemberName(Object.class, m.getName(), m.getMethodType(), m.getModifiers()); ++ m2 = MemberName.getFactory().resolveOrNull(m2, false, null); ++ if (m2 != null && m2.isPublic()) { ++ m = m2; ++ } ++ } ++ + MethodHandleNatives.init(this, (Object) m, doDispatch, lookupClass); + } + diff -r b8f9510f4a50 -r 03aaabc8b71c patches/8006882-sun.proxy.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/8006882-sun.proxy.patch Mon Mar 11 11:39:51 2013 +0000 @@ -0,0 +1,106 @@ +# HG changeset patch +# User mchung +# Date 1359414910 28800 +# Node ID cbbb166b38eb15f5d5c68e913ee18f6f352b7af0 +# Parent 044ea56a339dfd92b723a5e81941b646f9d26071 +8006882: Proxy generated classes in sun.proxy package breaks JMockit +Reviewed-by: alanb, ahgross + +diff --git a/src/share/classes/java/lang/reflect/Proxy.java b/src/share/classes/java/lang/reflect/Proxy.java +--- openjdk/jdk/src/share/classes/java/lang/reflect/Proxy.java ++++ openjdk/jdk/src/share/classes/java/lang/reflect/Proxy.java +@@ -609,7 +609,7 @@ + } + + if (proxyPkg == null) { +- // if no non-public proxy interfaces, use sun.proxy package ++ // if no non-public proxy interfaces, use com.sun.proxy package + proxyPkg = ReflectUtil.PROXY_PACKAGE + "."; + } + +diff --git a/src/share/classes/sun/reflect/misc/ReflectUtil.java b/src/share/classes/sun/reflect/misc/ReflectUtil.java +--- openjdk/jdk/src/share/classes/sun/reflect/misc/ReflectUtil.java ++++ openjdk/jdk/src/share/classes/sun/reflect/misc/ReflectUtil.java +@@ -202,5 +202,5 @@ + } + } + +- public static final String PROXY_PACKAGE = "sun.proxy"; ++ public static final String PROXY_PACKAGE = "com.sun.proxy"; + } +diff --git a/src/share/lib/security/java.security b/src/share/lib/security/java.security +--- openjdk/jdk/src/share/lib/security/java.security ++++ openjdk/jdk/src/share/lib/security/java.security +@@ -130,6 +130,7 @@ + com.sun.imageio.,\ + com.sun.istack.internal.,\ + com.sun.jmx.,\ ++ com.sun.proxy.,\ + com.sun.org.apache.xerces.internal.utils.,\ + com.sun.org.apache.xalan.internal.utils.,\ + com.sun.org.glassfish.external.,\ +@@ -152,6 +153,7 @@ + com.sun.imageio.,\ + com.sun.istack.internal.,\ + com.sun.jmx.,\ ++ com.sun.proxy.,\ + com.sun.org.apache.xerces.internal.utils.,\ + com.sun.org.apache.xalan.internal.utils.,\ + com.sun.org.glassfish.external.,\ +diff --git a/src/share/lib/security/java.security-macosx b/src/share/lib/security/java.security-macosx +--- openjdk/jdk/src/share/lib/security/java.security-macosx ++++ openjdk/jdk/src/share/lib/security/java.security-macosx +@@ -131,6 +131,7 @@ + com.sun.imageio.,\ + com.sun.istack.internal.,\ + com.sun.jmx.,\ ++ com.sun.proxy.,\ + com.sun.org.apache.xerces.internal.utils.,\ + com.sun.org.apache.xalan.internal.utils.,\ + com.sun.org.glassfish.external.,\ +@@ -154,6 +155,7 @@ + com.sun.imageio.,\ + com.sun.istack.internal.,\ + com.sun.jmx.,\ ++ com.sun.proxy.,\ + com.sun.org.apache.xerces.internal.utils.,\ + com.sun.org.apache.xalan.internal.utils.,\ + com.sun.org.glassfish.external.,\ +diff --git a/src/share/lib/security/java.security-solaris b/src/share/lib/security/java.security-solaris +--- openjdk/jdk/src/share/lib/security/java.security-solaris ++++ openjdk/jdk/src/share/lib/security/java.security-solaris +@@ -132,6 +132,7 @@ + com.sun.imageio.,\ + com.sun.istack.internal.,\ + com.sun.jmx.,\ ++ com.sun.proxy.,\ + com.sun.org.apache.xerces.internal.utils.,\ + com.sun.org.apache.xalan.internal.utils.,\ + com.sun.org.glassfish.external.,\ +@@ -154,6 +155,7 @@ + com.sun.imageio.,\ + com.sun.istack.internal.,\ + com.sun.jmx.,\ ++ com.sun.proxy.,\ + com.sun.org.apache.xerces.internal.utils.,\ + com.sun.org.apache.xalan.internal.utils.,\ + com.sun.org.glassfish.external.,\ +diff --git a/src/share/lib/security/java.security-windows b/src/share/lib/security/java.security-windows +--- openjdk/jdk/src/share/lib/security/java.security-windows ++++ openjdk/jdk/src/share/lib/security/java.security-windows +@@ -131,6 +131,7 @@ + com.sun.imageio.,\ + com.sun.istack.internal.,\ + com.sun.jmx.,\ ++ com.sun.proxy.,\ + com.sun.org.apache.xerces.internal.utils.,\ + com.sun.org.apache.xalan.internal.utils.,\ + com.sun.org.glassfish.external.,\ +@@ -153,6 +154,7 @@ + com.sun.imageio.,\ + com.sun.istack.internal.,\ + com.sun.jmx.,\ ++ com.sun.proxy.,\ + com.sun.org.apache.xerces.internal.utils.,\ + com.sun.org.apache.xalan.internal.utils.,\ + com.sun.org.glassfish.external.,\ diff -r b8f9510f4a50 -r 03aaabc8b71c patches/pr1303-ifdef_fix.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/pr1303-ifdef_fix.patch Mon Mar 11 11:39:51 2013 +0000 @@ -0,0 +1,19 @@ +# HG changeset patch +# User andrew +# Date 1362758030 0 +# Node ID ec275f96d030eff83f7e6cfcdd7daa9cda2b4802 +# Parent deac45dc94f0504ba17b8afcb54db1fba4e6f9d5 +PR1303: Correct #ifdef to #if + +diff --git a/src/share/native/sun/awt/splashscreen/splashscreen_gif.c b/src/share/native/sun/awt/splashscreen/splashscreen_gif.c +--- openjdk/jdk/src/share/native/sun/awt/splashscreen/splashscreen_gif.c ++++ openjdk/jdk/src/share/native/sun/awt/splashscreen/splashscreen_gif.c +@@ -316,7 +316,7 @@ + int + SplashDecodeGifStream(Splash * splash, SplashStream * stream) + { +-#ifdef GIFLIB_MAJOR >= 5 ++#if GIFLIB_MAJOR >= 5 + int error = 0; + GifFileType *gif = DGifOpen((void *) stream, SplashStreamGifInputFunc, &error); +