# HG changeset patch # User Andrew John Hughes # Date 1363014670 0 # Node ID cf4897fbb9f5537f15f7742a0919ea02ac2d6b6d # Parent cabd2098693e094c1ec5ff0ff8b4308c29c74869 Add new fixes locally (backports from u17b02 & 2.4, PR1303 fix) so as to keep with 2.1.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 cabd2098693e -r cf4897fbb9f5 ChangeLog --- a/ChangeLog Mon Mar 11 12:48:37 2013 +0000 +++ b/ChangeLog Mon Mar 11 15:11:10 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-11 Andrew John Hughes * Makefile.am, diff -r cabd2098693e -r cf4897fbb9f5 Makefile.am --- a/Makefile.am Mon Mar 11 12:48:37 2013 +0000 +++ b/Makefile.am Mon Mar 11 15:11:10 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 cabd2098693e -r cf4897fbb9f5 patches/8002344-krb5loginmodule.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/8002344-krb5loginmodule.patch Mon Mar 11 15:11:10 2013 +0000 @@ -0,0 +1,207 @@ +# HG changeset patch +# User weijun +# Date 1353294788 -28800 +# Node ID 9dc51cdd7cec31aeaccf7e2a44de4d4110f19353 +# Parent 78fbbfe20edb9658c6ee59494b97f1735e73eab2 +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 +@@ -1233,7 +1233,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) { +@@ -1243,7 +1243,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"); + } +@@ -1252,14 +1252,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 cabd2098693e -r cf4897fbb9f5 patches/8004344-toolkiterrorhandler.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/8004344-toolkiterrorhandler.patch Mon Mar 11 15:11:10 2013 +0000 @@ -0,0 +1,33 @@ +# HG changeset patch +# User aph +# Date 1354629728 0 +# Node ID 4d5e8509905e1d95a87e7ce769d8ee61083107a3 +# Parent 9dc51cdd7cec31aeaccf7e2a44de4d4110f19353 +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 cabd2098693e -r cf4897fbb9f5 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 15:11:10 2013 +0000 @@ -0,0 +1,27 @@ +# HG changeset patch +# User jrose +# Date 1358570871 28800 +# Node ID 90e4cb6f78bb0551ae23f88dd75cb57aad9d8662 +# Parent 0ad964f2ced1b4f12c1b30bd92dceb73ba15f608 +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 cabd2098693e -r cf4897fbb9f5 patches/8006882-sun.proxy.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/8006882-sun.proxy.patch Mon Mar 11 15:11:10 2013 +0000 @@ -0,0 +1,87 @@ +# HG changeset patch +# User andrew +# Date 1362989644 0 +# Node ID 1040c44a496db37f595fa66b71ef91e67598cbf4 +# Parent 90e4cb6f78bb0551ae23f88dd75cb57aad9d8662 +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 +@@ -128,6 +128,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.,\ +@@ -148,6 +149,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 +@@ -129,6 +129,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.,\ +@@ -149,6 +150,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 +@@ -129,6 +129,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.,\ +@@ -149,6 +150,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 cabd2098693e -r cf4897fbb9f5 patches/pr1303-ifdef_fix.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/pr1303-ifdef_fix.patch Mon Mar 11 15:11:10 2013 +0000 @@ -0,0 +1,19 @@ +# HG changeset patch +# User andrew +# Date 1362758030 0 +# Node ID 0ad964f2ced1b4f12c1b30bd92dceb73ba15f608 +# Parent 44d9f9e05ca4a7735685cb246c004a5f4abd19c7 +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); +