changeset 2588:03aaabc8b71c

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 <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 11:39:51 +0000
parents b8f9510f4a50
children b7e507e31613
files ChangeLog Makefile.am NEWS 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 8 files changed, 420 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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  <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-08  Andrew John Hughes  <gnu.andrew@member.fsf.org>
 
 	* 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
 
--- 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):
 
--- /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 <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
+@@ -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<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 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;
+ }
+ 
+ /*
--- /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);
+     }
+ 
--- /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.,\
--- /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);
+