changeset 2552:cf4897fbb9f5

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 <gnu.andrew@member.fsf.org> * 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.
author Andrew John Hughes <gnu_andrew@member.fsf.org>
date Mon, 11 Mar 2013 15:11:10 +0000
parents cabd2098693e
children 1bcc6dd061fa
files ChangeLog Makefile.am patches/8002344-krb5loginmodule.patch patches/8004344-toolkiterrorhandler.patch patches/8006179-lookup_using_findvirtual.patch patches/8006882-sun.proxy.patch patches/pr1303-ifdef_fix.patch
diffstat 7 files changed, 394 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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  <gnu.andrew@member.fsf.org>
+
+	* 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  <gnu.andrew@member.fsf.org>
 
 	* 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
 
--- /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 <sgehwolf@redhat.com>, Wang Weijun <weijun.wang@oracle.com>
+
+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<String,String>()) {
++            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
++
--- /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;
+ }
+ 
+ /*
--- /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);
+     }
+ 
--- /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.,\
--- /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);
+