Mercurial > hg > openjdk > bsd-port > jdk
changeset 7287:d5a2f60006e3 jdk7u60-b07
Merge
author | lana |
---|---|
date | Sat, 15 Feb 2014 17:57:42 -0800 |
parents | 20e2e15dc5b1 (current diff) 198df3575e01 (diff) |
children | 0dd27693876d |
files | test/java/lang/System/MacJNUEncoding/ExpectedEncoding.java test/java/lang/System/MacJNUEncoding/MacJNUEncoding.sh test/javax/xml/jaxp/transform/jdk8004476/SecureProcessingTest.xml test/javax/xml/jaxp/transform/jdk8004476/TestBase.java test/javax/xml/jaxp/transform/jdk8004476/XPathExFuncTest.java test/javax/xml/jaxp/transform/jdk8004476/XSLTExFuncTest.java test/javax/xml/jaxp/transform/jdk8004476/tokenize.xml test/javax/xml/jaxp/transform/jdk8004476/tokenize.xsl |
diffstat | 51 files changed, 1426 insertions(+), 892 deletions(-) [+] |
line wrap: on
line diff
--- a/make/common/Defs-macosx.gmk Wed Feb 12 14:56:43 2014 -0800 +++ b/make/common/Defs-macosx.gmk Sat Feb 15 17:57:42 2014 -0800 @@ -397,12 +397,10 @@ INCLUDE_SA = true endif -ifdef CROSS_COMPILE_ARCH - # X11 headers are not under /usr/include - OTHER_CFLAGS += -I$(OPENWIN_HOME)/include - OTHER_CXXFLAGS += -I$(OPENWIN_HOME)/include - OTHER_CPPFLAGS += -I$(OPENWIN_HOME)/include -endif +# X11 headers are not under /usr/include +OTHER_CFLAGS += -I$(OPENWIN_HOME)/include +OTHER_CXXFLAGS += -I$(OPENWIN_HOME)/include +OTHER_CPPFLAGS += -I$(OPENWIN_HOME)/include # Use unlimited select OTHER_CFLAGS += -D_DARWIN_UNLIMITED_SELECT
--- a/make/java/java/Makefile Wed Feb 12 14:56:43 2014 -0800 +++ b/make/java/java/Makefile Sat Feb 15 17:57:42 2014 -0800 @@ -102,6 +102,7 @@ java/util/prefs/MacOSXPreferencesFactory.java CFLAGS_$(VARIANT)/java_props_md.o = -Os -x objective-c +CFLAGS_$(VARIANT)/java_props_macosx.o = -Os -x objective-c endif # @@ -222,6 +223,7 @@ ifeq ($(PLATFORM), macosx) OTHER_LDLIBS += \ -framework CoreFoundation \ + -framework Foundation \ -framework Security \ -framework SystemConfiguration endif
--- a/make/sun/javazic/tzdata/VERSION Wed Feb 12 14:56:43 2014 -0800 +++ b/make/sun/javazic/tzdata/VERSION Sat Feb 15 17:57:42 2014 -0800 @@ -21,4 +21,4 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2013h +tzdata2013i
--- a/make/sun/javazic/tzdata/africa Wed Feb 12 14:56:43 2014 -0800 +++ b/make/sun/javazic/tzdata/africa Sat Feb 15 17:57:42 2014 -0800 @@ -500,14 +500,13 @@ Rule Libya 1997 only - Oct 4 0:00 0 - Rule Libya 2013 only - Mar lastFri 1:00 1:00 S Rule Libya 2013 only - Oct lastFri 2:00 0 - - -# The 1996 and 1997 entries are from Shanks & Pottenger; -# the IATA SSIM data contain some obvious errors. # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Africa/Tripoli 0:52:44 - LMT 1920 1:00 Libya CE%sT 1959 2:00 - EET 1982 1:00 Libya CE%sT 1990 May 4 +# The 1996 and 1997 entries are from Shanks & Pottenger; +# the IATA SSIM data contain some obvious errors. 2:00 - EET 1996 Sep 30 1:00 Libya CE%sT 1997 Oct 4 2:00 - EET 2012 Nov 10 2:00
--- a/make/sun/javazic/tzdata/asia Wed Feb 12 14:56:43 2014 -0800 +++ b/make/sun/javazic/tzdata/asia Sat Feb 15 17:57:42 2014 -0800 @@ -1403,12 +1403,22 @@ # switch back to standard time this winter, so the will stay on DST # until about the same time next year (at least). # http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?NewsID=88950 -# -# From Paul Eggert (2013-09-21): -# It's looking like this change will be permanent; see -# Petra News Agency, Cancelling winter saved Jordan $7 million (2013-02-20) -# <http://www.albawaba.com/business/jordan-winter-electricity--472005>. -# So move Jordan to UTC+3 as of the abovementioned date. + +# From Steffen Thorsen (2013-12-11): +# Jordan Times and other sources say that Jordan is going back to +# UTC+2 on 2013-12-19 at midnight: +# http://jordantimes.com/govt-decides-to-switch-back-to-wintertime +# Official, in Arabic: +# http://www.petra.gov.jo/public_news/Nws_NewsDetails.aspx?Menu_ID=&Site_Id=2&lang=1&NewsID=133230&CatID=14 +# ... Our background/permalink about it +# http://www.timeanddate.com/news/time/jordan-reverses-dst-decision.html +# ... +# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?lang=2&site_id=1&NewsID=133313&Type=P +# ... says midnight for the coming one and 1:00 for the ones in the future +# (and they will use DST again next year, using the normal schedule). + +# From Paul Eggert (2013-12-11): +# As Steffen suggested, consider the past 21-month experiment to be DST. # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Jordan 1973 only - Jun 6 0:00 1:00 S @@ -1438,11 +1448,13 @@ Rule Jordan 2003 only - Oct 24 0:00s 0 - Rule Jordan 2004 only - Oct 15 0:00s 0 - Rule Jordan 2005 only - Sep lastFri 0:00s 0 - -Rule Jordan 2006 2012 - Oct lastFri 0:00s 0 - +Rule Jordan 2006 2011 - Oct lastFri 0:00s 0 - +Rule Jordan 2013 only - Dec 20 0:00 0 - +Rule Jordan 2014 max - Mar lastThu 24:00 1:00 S +Rule Jordan 2014 max - Oct lastFri 0:00s 0 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Asia/Amman 2:23:44 - LMT 1931 - 2:00 Jordan EE%sT 2012 Oct 26 0:00s - 3:00 - AST + 2:00 Jordan EE%sT # Kazakhstan
--- a/make/sun/javazic/tzdata/northamerica Wed Feb 12 14:56:43 2014 -0800 +++ b/make/sun/javazic/tzdata/northamerica Sat Feb 15 17:57:42 2014 -0800 @@ -2688,6 +2688,11 @@ # to DST--and one more hour on 1999-04-04--when the announcers will have # returned to Baltimore, which switches on that date.) +# From Steffen Thorsen (2013-11-11): +# DST start in Cuba in 2004 ... does not follow the same rules as the +# years before. The correct date should be Sunday 2004-03-28 00:00 ... +# https://web.archive.org/web/20040402060750/http://www.granma.cu/espanol/2004/marzo/sab27/reloj.html + # From Evert van der Veer via Steffen Thorsen (2004-10-28): # Cuba is not going back to standard time this year. # From Paul Eggert (2006-03-22): @@ -2877,7 +2882,8 @@ Rule Cuba 1997 only - Oct 12 0:00s 0 S Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S -Rule Cuba 2000 2004 - Apr Sun>=1 0:00s 1:00 D +Rule Cuba 2000 2003 - Apr Sun>=1 0:00s 1:00 D +Rule Cuba 2004 only - Mar lastSun 0:00s 1:00 D Rule Cuba 2006 2010 - Oct lastSun 0:00s 0 S Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D
--- a/src/share/classes/java/lang/invoke/MethodHandleImpl.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/java/lang/invoke/MethodHandleImpl.java Sat Feb 15 17:57:42 2014 -0800 @@ -742,7 +742,8 @@ GuardWithCatch gguard = new GuardWithCatch(gtarget, exType, gcatcher); if (gtarget == null || gcatcher == null) throw new InternalError(); MethodHandle ginvoker = GuardWithCatch.VARARGS_INVOKE.bindReceiver(gguard); - return makeCollectArguments(ginvoker, ValueConversions.varargsArray(nargs), 0, false); + MethodHandle gcollect = makeCollectArguments(ginvoker, ValueConversions.varargsArray(nargs), 0, false); + return makePairwiseConvert(gcollect, type, 2); } }
--- a/src/share/classes/java/net/IDN.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/java/net/IDN.java Sat Feb 15 17:57:42 2014 -0800 @@ -271,13 +271,17 @@ if (useSTD3ASCIIRules) { for (int i = 0; i < dest.length(); i++) { int c = dest.charAt(i); - if (!isLDHChar(c)) { - throw new IllegalArgumentException("Contains non-LDH characters"); + if (isNonLDHAsciiCodePoint(c)) { + throw new IllegalArgumentException( + "Contains non-LDH ASCII characters"); } } - if (dest.charAt(0) == '-' || dest.charAt(dest.length() - 1) == '-') { - throw new IllegalArgumentException("Has leading or trailing hyphen"); + if (dest.charAt(0) == '-' || + dest.charAt(dest.length() - 1) == '-') { + + throw new IllegalArgumentException( + "Has leading or trailing hyphen"); } } @@ -380,26 +384,20 @@ // // LDH stands for "letter/digit/hyphen", with characters restricted to the // 26-letter Latin alphabet <A-Z a-z>, the digits <0-9>, and the hyphen - // <-> - // non-LDH = 0..0x2C, 0x2E..0x2F, 0x3A..0x40, 0x56..0x60, 0x7B..0x7F + // <->. + // Non LDH refers to characters in the ASCII range, but which are not + // letters, digits or the hypen. + // + // non-LDH = 0..0x2C, 0x2E..0x2F, 0x3A..0x40, 0x5B..0x60, 0x7B..0x7F // - private static boolean isLDHChar(int ch){ - // high runner case - if(ch > 0x007A){ - return false; - } - //['-' '0'..'9' 'A'..'Z' 'a'..'z'] - if((ch == 0x002D) || - (0x0030 <= ch && ch <= 0x0039) || - (0x0041 <= ch && ch <= 0x005A) || - (0x0061 <= ch && ch <= 0x007A) - ){ - return true; - } - return false; + private static boolean isNonLDHAsciiCodePoint(int ch){ + return (0x0000 <= ch && ch <= 0x002C) || + (0x002E <= ch && ch <= 0x002F) || + (0x003A <= ch && ch <= 0x0040) || + (0x005B <= ch && ch <= 0x0060) || + (0x007B <= ch && ch <= 0x007F); } - // // search dots in a string and return the index of that character; // or if there is no dots, return the length of input string
--- a/src/share/classes/java/util/ComparableTimSort.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/java/util/ComparableTimSort.java Sat Feb 15 17:57:42 2014 -0800 @@ -131,7 +131,7 @@ */ int stackLen = (len < 120 ? 5 : len < 1542 ? 10 : - len < 119151 ? 19 : 40); + len < 119151 ? 24 : 40); runBase = new int[stackLen]; runLen = new int[stackLen]; }
--- a/src/share/classes/java/util/TimSort.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/java/util/TimSort.java Sat Feb 15 17:57:42 2014 -0800 @@ -158,7 +158,7 @@ */ int stackLen = (len < 120 ? 5 : len < 1542 ? 10 : - len < 119151 ? 19 : 40); + len < 119151 ? 24 : 40); runBase = new int[stackLen]; runLen = new int[stackLen]; }
--- a/src/share/classes/sun/tools/jconsole/Messages.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/tools/jconsole/Messages.java Sat Feb 15 17:57:42 2014 -0800 @@ -36,7 +36,7 @@ Resources.initializeMessages(Messages.class, BUNDLE_NAME); } // TODO: - // The names of some of the constants below looks strange. + // The names of some of the constants below look strange. // That's because they were generated programmatically // from the messages. They should be cleaned up, // ___ should be removed etc. @@ -265,6 +265,7 @@ public static String SUMMARY_TAB_TAB_NAME; public static String SUMMARY_TAB_VM_VERSION; public static String THREADS; + public static String THREAD_TAB_INFO_LABEL_FORMAT; public static String THREAD_TAB_THREAD_INFO_ACCESSIBLE_NAME; public static String THREAD_TAB_THREAD_PLOTTER_ACCESSIBLE_NAME; public static String THRESHOLD; @@ -304,9 +305,9 @@ public static String WRITABLE; public static String CONNECTION_FAILED1; public static String CONNECTION_FAILED2; + public static String CONNECTION_FAILED_SSL1; + public static String CONNECTION_FAILED_SSL2; public static String CONNECTION_LOST1; - public static String CONNECTION_INSECURE1; - public static String CONNECTION_INSECURE2; public static String CONNECTING_TO1; public static String CONNECTING_TO2; public static String DEADLOCK_TAB;
--- a/src/share/classes/sun/tools/jconsole/SummaryTab.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/tools/jconsole/SummaryTab.java Sat Feb 15 17:57:42 2014 -0800 @@ -213,8 +213,8 @@ String[] strings2 = formatKByteStrings(u.getCommitted()); append(Messages.COMMITTED_MEMORY, strings2[0]); append(Messages.SUMMARY_TAB_PENDING_FINALIZATION_LABEL, - Messages.SUMMARY_TAB_PENDING_FINALIZATION_VALUE, - memoryBean.getObjectPendingFinalizationCount()); + Resources.format(Messages.SUMMARY_TAB_PENDING_FINALIZATION_VALUE, + memoryBean.getObjectPendingFinalizationCount())); append(endTable); append(newTable);
--- a/src/share/classes/sun/tools/jconsole/ThreadTab.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/tools/jconsole/ThreadTab.java Sat Feb 15 17:57:42 2014 -0800 @@ -66,9 +66,6 @@ private static final Border thinEmptyBorder = new EmptyBorder(2, 2, 2, 2); - private static final String infoLabelFormat = "ThreadTab.infoLabelFormat"; - - /* Hierarchy of panels and layouts for this tab: @@ -690,7 +687,7 @@ private void updateThreadsInfo(long tlCount, long tpCount, long ttCount, long timeStamp) { getPlotter().addValues(timeStamp, tlCount); - getInfoLabel().setText(Resources.format(infoLabelFormat, tlCount, tpCount, ttCount)); + getInfoLabel().setText(Resources.format(Messages.THREAD_TAB_INFO_LABEL_FORMAT, tlCount, tpCount, ttCount)); } } }
--- a/src/share/classes/sun/tools/jconsole/VMPanel.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/tools/jconsole/VMPanel.java Sat Feb 15 17:57:42 2014 -0800 @@ -469,8 +469,8 @@ msgExplanation = Resources.format(Messages.CONNECTING_TO2, getConnectionName()); buttonStr = Messages.RECONNECT; } else if (shouldUseSSL) { - msgTitle = Messages.CONNECTION_INSECURE1; - msgExplanation = Resources.format(Messages.CONNECTION_INSECURE2, getConnectionName()); + msgTitle = Messages.CONNECTION_FAILED_SSL1; + msgExplanation = Resources.format(Messages.CONNECTION_FAILED_SSL2, getConnectionName()); buttonStr = Messages.INSECURE; } else { msgTitle = Messages.CONNECTION_FAILED1;
--- a/src/share/classes/sun/tools/jconsole/resources/messages.properties Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/tools/jconsole/resources/messages.properties Sat Feb 15 17:57:42 2014 -0800 @@ -223,6 +223,7 @@ SUMMARY_TAB_TAB_NAME=VM Summary SUMMARY_TAB_VM_VERSION={0} version {1} THREADS=Threads +THREAD_TAB_INFO_LABEL_FORMAT=<html>Live: {0} Peak: {1} Total: {2}</html> THREAD_TAB_THREAD_INFO_ACCESSIBLE_NAME=Thread Information THREAD_TAB_THREAD_PLOTTER_ACCESSIBLE_NAME=Chart for number of threads. THRESHOLD=Threshold @@ -244,7 +245,7 @@ UNREGISTER=Unregister UPTIME=Uptime USAGE_THRESHOLD=Usage Threshold -REMOTE_TF_USAGE=<b>Usage</b>: <hostname>:<port> OR service:jmx:<protocol>:<sap> +REMOTE_TF_USAGE=<b>Usage</b>: &<hostname&>:&<port&> OR service:jmx:&<protocol&>:&<sap&> USED=Used USERNAME_COLON_=&Username: USERNAME_ACCESSIBLE_NAME=User Name @@ -262,9 +263,9 @@ WRITABLE=Writable CONNECTION_FAILED1=Connection Failed: Retry? CONNECTION_FAILED2=The connection to {0} did not succeed.<br>Would you like to try again? +CONNECTION_FAILED_SSL1=Secure connection failed. Retry insecurely? +CONNECTION_FAILED_SSL2=The connection to {0} could not be made using SSL.<br>Would you like to try without SSL?<br>(Username and password will be sent in plain text.) CONNECTION_LOST1=Connection Lost: Reconnect? -CONNECTION_INSECURE1=ConnectionFailedSSL1 -CONNECTION_INSECURE2=ConnectionFailedSSL2 CONNECTING_TO1=Connecting to {0} CONNECTING_TO2=You are currently being connected to {0}.<br>This will take a few moments. DEADLOCK_TAB=Deadlock
--- a/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties Sat Feb 15 17:57:42 2014 -0800 @@ -222,6 +222,7 @@ SUMMARY_TAB_TAB_NAME=VM\u30B5\u30DE\u30EA\u30FC SUMMARY_TAB_VM_VERSION={0}\u30D0\u30FC\u30B8\u30E7\u30F3{1} THREADS=\u30B9\u30EC\u30C3\u30C9 +THREAD_TAB_INFO_LABEL_FORMAT=<html>\u5B9F\u884C\u4E2D: {0} \u30D4\u30FC\u30AF: {1} \u5408\u8A08: {2}</html> THREAD_TAB_THREAD_INFO_ACCESSIBLE_NAME=\u30B9\u30EC\u30C3\u30C9\u60C5\u5831 THREAD_TAB_THREAD_PLOTTER_ACCESSIBLE_NAME=\u30B9\u30EC\u30C3\u30C9\u6570\u306E\u30C1\u30E3\u30FC\u30C8\u3002 THRESHOLD=\u3057\u304D\u3044\u5024 @@ -243,7 +244,7 @@ UNREGISTER=\u767B\u9332\u89E3\u9664 UPTIME=\u7A3C\u50CD\u6642\u9593 USAGE_THRESHOLD=\u4F7F\u7528\u3057\u304D\u3044\u5024 -REMOTE_TF_USAGE=<b>\u4F7F\u7528\u65B9\u6CD5</b>: <hostname>:<port>\u307E\u305F\u306Fservice:jmx:<protocol>:<sap> +REMOTE_TF_USAGE=<b>\u4F7F\u7528\u65B9\u6CD5</b>: &<hostname&>:&<port&>\u307E\u305F\u306Fservice:jmx:&<protocol&>:&<sap&> USED=\u4F7F\u7528\u6E08 USERNAME_COLON_=\u30E6\u30FC\u30B6\u30FC\u540D(&U): USERNAME_ACCESSIBLE_NAME=\u30E6\u30FC\u30B6\u30FC\u540D
--- a/src/share/classes/sun/tools/jconsole/resources/messages_zh_CN.properties Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/tools/jconsole/resources/messages_zh_CN.properties Sat Feb 15 17:57:42 2014 -0800 @@ -222,6 +222,7 @@ SUMMARY_TAB_TAB_NAME=VM \u6982\u8981 SUMMARY_TAB_VM_VERSION={0}\u7248\u672C {1} THREADS=\u7EBF\u7A0B +THREAD_TAB_INFO_LABEL_FORMAT=<html>\u6D3B\u52A8: {0} \u5CF0\u503C: {1} \u603B\u8BA1: {2}</html> THREAD_TAB_THREAD_INFO_ACCESSIBLE_NAME=\u7EBF\u7A0B\u4FE1\u606F THREAD_TAB_THREAD_PLOTTER_ACCESSIBLE_NAME=\u8868\u793A\u7EBF\u7A0B\u6570\u7684\u56FE\u8868\u3002 THRESHOLD=\u9608\u503C @@ -243,7 +244,7 @@ UNREGISTER=\u6CE8\u9500 UPTIME=\u8FD0\u884C\u65F6\u95F4 USAGE_THRESHOLD=\u7528\u6CD5\u9608\u503C -REMOTE_TF_USAGE=<b>\u7528\u6CD5</b>: <hostname>:<port> \u6216 service:jmx:<protocol>:<sap> +REMOTE_TF_USAGE=<b>\u7528\u6CD5</b>: &<hostname&>:&<port&> \u6216 service:jmx:&<protocol&>:&<sap&> USED=\u5DF2\u7528 USERNAME_COLON_=\u7528\u6237\u540D(&U): USERNAME_ACCESSIBLE_NAME=\u7528\u6237\u540D
--- a/src/share/classes/sun/util/resources/TimeZoneNames.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/util/resources/TimeZoneNames.java Sat Feb 15 17:57:42 2014 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, 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 @@ -483,7 +483,7 @@ {"Asia/Aden", ARAST}, {"Asia/Almaty", new String[] {"Alma-Ata Time", "ALMT", "Alma-Ata Summer Time", "ALMST"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Anadyr Time", "ANAT", "Anadyr Summer Time", "ANAST"}}, {"Asia/Aqtau", new String[] {"Aqtau Time", "AQTT",
--- a/src/share/classes/sun/util/resources/TimeZoneNames_de.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/util/resources/TimeZoneNames_de.java Sat Feb 15 17:57:42 2014 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -483,7 +483,7 @@ {"Asia/Aden", ARAST}, {"Asia/Almaty", new String[] {"Alma Ata Zeit", "ALMT", "Alma-Ata Sommerzeit", "ALMST"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Anadyr Zeit", "ANAT", "Anadyr Sommerzeit", "ANAST"}}, {"Asia/Aqtau", new String[] {"Aqtau Zeit", "AQTT",
--- a/src/share/classes/sun/util/resources/TimeZoneNames_es.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/util/resources/TimeZoneNames_es.java Sat Feb 15 17:57:42 2014 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -483,7 +483,7 @@ {"Asia/Aden", ARAST}, {"Asia/Almaty", new String[] {"Hora de Alma-Ata", "ALMT", "Hora de verano de Alma-Ata", "ALMST"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Hora de Anadyr", "ANAT", "Hora de verano de Anadyr", "ANAST"}}, {"Asia/Aqtau", new String[] {"Hora de Aqtau", "AQTT",
--- a/src/share/classes/sun/util/resources/TimeZoneNames_fr.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/util/resources/TimeZoneNames_fr.java Sat Feb 15 17:57:42 2014 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -483,7 +483,7 @@ {"Asia/Aden", ARAST}, {"Asia/Almaty", new String[] {"Heure d'Alma-Ata", "ALMT", "Heure d'\u00e9t\u00e9 d'Alma-Ata", "ALMST"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Heure d'Anadyr", "ANAT", "Heure d'\u00e9t\u00e9 d'Anadyr", "ANAST"}}, {"Asia/Aqtau", new String[] {"Heure d'Aqtau", "AQTT",
--- a/src/share/classes/sun/util/resources/TimeZoneNames_it.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/util/resources/TimeZoneNames_it.java Sat Feb 15 17:57:42 2014 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -483,7 +483,7 @@ {"Asia/Aden", ARAST}, {"Asia/Almaty", new String[] {"Ora di Alma-Ata", "ALMT", "Ora estiva di Alma-Ata", "ALMST"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Ora di Anadyr", "ANAT", "Ora estiva di Anadyr", "ANAST"}}, {"Asia/Aqtau", new String[] {"Ora di Aqtau", "AQTT",
--- a/src/share/classes/sun/util/resources/TimeZoneNames_ja.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/util/resources/TimeZoneNames_ja.java Sat Feb 15 17:57:42 2014 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -483,7 +483,7 @@ {"Asia/Aden", ARAST}, {"Asia/Almaty", new String[] {"\u30a2\u30eb\u30de\u30a2\u30bf\u6642\u9593", "ALMT", "\u30a2\u30eb\u30de\u30a2\u30bf\u590f\u6642\u9593", "ALMST"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"\u30a2\u30ca\u30c9\u30a5\u30a4\u30ea\u6642\u9593", "ANAT", "\u30a2\u30ca\u30c9\u30a5\u30a4\u30ea\u590f\u6642\u9593", "ANAST"}}, {"Asia/Aqtau", new String[] {"\u30a2\u30af\u30bf\u30a6\u6642\u9593", "AQTT",
--- a/src/share/classes/sun/util/resources/TimeZoneNames_ko.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/util/resources/TimeZoneNames_ko.java Sat Feb 15 17:57:42 2014 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -483,7 +483,7 @@ {"Asia/Aden", ARAST}, {"Asia/Almaty", new String[] {"\uc54c\ub9c8\uc544\ud0c0 \uc2dc\uac04", "ALMT", "\uc54c\ub9c8\uc544\ud0c0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ALMST"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"\uc544\ub098\ub514\ub974 \uc2dc\uac04", "ANAT", "\uc544\ub098\ub514\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ANAST"}}, {"Asia/Aqtau", new String[] {"\uc545\ud0c0\uc6b0 \uc2dc\uac04", "AQTT",
--- a/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java Sat Feb 15 17:57:42 2014 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -483,7 +483,7 @@ {"Asia/Aden", ARAST}, {"Asia/Almaty", new String[] {"Fuso hor\u00e1rio de Alma-Ata", "ALMT", "Fuso hor\u00e1rio de ver\u00e3o de Alma-Ata", "ALMST"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Fuso hor\u00e1rio de Anadyr", "ANAT", "Fuso hor\u00e1rio de ver\u00e3o de Anadyr", "ANAST"}}, {"Asia/Aqtau", new String[] {"Fuso hor\u00e1rio de Aqtau", "AQTT",
--- a/src/share/classes/sun/util/resources/TimeZoneNames_sv.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/util/resources/TimeZoneNames_sv.java Sat Feb 15 17:57:42 2014 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -483,7 +483,7 @@ {"Asia/Aden", ARAST}, {"Asia/Almaty", new String[] {"Alma-Ata, normaltid", "ALMT", "Alma-Ata, sommartid", "ALMST"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Anadyr, normaltid", "ANAT", "Anadyr, sommartid", "ANAST"}}, {"Asia/Aqtau", new String[] {"Aqtau, normaltid", "AQTT",
--- a/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java Sat Feb 15 17:57:42 2014 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -483,7 +483,7 @@ {"Asia/Aden", ARAST}, {"Asia/Almaty", new String[] {"Alma-Ata \u65f6\u95f4", "ALMT", "Alma-Ata \u590f\u4ee4\u65f6", "ALMST"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"\u963f\u90a3\u5e95\u6cb3\u65f6\u95f4", "ANAT", "\u963f\u90a3\u5e95\u6cb3\u590f\u4ee4\u65f6", "ANAST"}}, {"Asia/Aqtau", new String[] {"Aqtau \u65f6\u95f4", "AQTT",
--- a/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java Wed Feb 12 14:56:43 2014 -0800 +++ b/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java Sat Feb 15 17:57:42 2014 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -483,7 +483,7 @@ {"Asia/Aden", ARAST}, {"Asia/Almaty", new String[] {"Alma-Ata \u6642\u9593", "ALMT", "Alma-Ata \u590f\u4ee4\u6642\u9593", "ALMST"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"\u963f\u90a3\u5e95\u6cb3\u6642\u9593", "ANAT", "\u963f\u90a3\u5e95\u6cb3\u590f\u4ee4\u6642\u9593", "ANAST"}}, {"Asia/Aqtau", new String[] {"Aqtau \u6642\u9593", "AQTT",
--- a/src/solaris/native/java/lang/java_props_macosx.c Wed Feb 12 14:56:43 2014 -0800 +++ b/src/solaris/native/java/lang/java_props_macosx.c Sat Feb 15 17:57:42 2014 -0800 @@ -31,6 +31,7 @@ #include <Security/AuthSession.h> #include <CoreFoundation/CoreFoundation.h> #include <SystemConfiguration/SystemConfiguration.h> +#include <Foundation/Foundation.h> #include "java_props_macosx.h" @@ -262,9 +263,20 @@ return c_exception; } +/* + * Method for fetching the user.home path and storing it in the property list. + * For signed .apps running in the Mac App Sandbox, user.home is set to the + * app's sandbox container. + */ +void setUserHome(java_props_t *sprops) { + if (sprops == NULL) { return; } + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + sprops->user_home = createUTF8CString((CFStringRef)NSHomeDirectory()); + [pool drain]; +} /* - * Method for fetching proxy info and storing it in the propery list. + * Method for fetching proxy info and storing it in the property list. */ void setProxyProperties(java_props_t *sProps) { if (sProps == NULL) return;
--- a/src/solaris/native/java/lang/java_props_macosx.h Wed Feb 12 14:56:43 2014 -0800 +++ b/src/solaris/native/java/lang/java_props_macosx.h Sat Feb 15 17:57:42 2014 -0800 @@ -27,6 +27,7 @@ char *setupMacOSXLocale(int cat); void setOSNameAndVersion(java_props_t *sprops); +void setUserHome(java_props_t *sprops); void setProxyProperties(java_props_t *sProps); enum PreferredToolkit_enum {
--- a/src/solaris/native/java/lang/java_props_md.c Wed Feb 12 14:56:43 2014 -0800 +++ b/src/solaris/native/java/lang/java_props_md.c Sat Feb 15 17:57:42 2014 -0800 @@ -324,6 +324,25 @@ *std_encoding = "Big5-HKSCS-2001"; } #endif +#ifdef MACOSX + /* + * For the case on MacOS X where encoding is set to US-ASCII, but we + * don't have any encoding hints from LANG/LC_ALL/LC_CTYPE, use UTF-8 + * instead. + * + * The contents of ASCII files will still be read and displayed + * correctly, but so will files containing UTF-8 characters beyond the + * standard ASCII range. + * + * Specifically, this allows apps launched by double-clicking a .jar + * file to correctly read UTF-8 files using the default encoding (see + * 8011194). + */ + if (strcmp(p,"US-ASCII") == 0 && getenv("LANG") == NULL && + getenv("LC_ALL") == NULL && getenv("LC_CTYPE") == NULL) { + *std_encoding = "UTF-8"; + } +#endif } return 1; @@ -527,7 +546,14 @@ { struct passwd *pwent = getpwuid(getuid()); sprops.user_name = pwent ? strdup(pwent->pw_name) : "?"; - sprops.user_home = pwent ? strdup(pwent->pw_dir) : "?"; +#ifdef MACOSX + setUserHome(&sprops); +#else + sprops.user_home = pwent ? strdup(pwent->pw_dir) : NULL; +#endif + if (sprops.user_home == NULL) { + sprops.user_home = "?"; + } } /* User TIMEZONE */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/lang/System/MacEncoding/ExpectedEncoding.java Sat Feb 15 17:57:42 2014 -0800 @@ -0,0 +1,66 @@ +/* + * 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. + */ + +/** + * Check that the value of file.encoding and sun.jnu.encoding match the expected + * values passed in on the command-line. + */ +public class ExpectedEncoding { + public static void main(String[] args) { + boolean failed = false; + if (args.length != 2) { + System.out.println("Usage:"); + System.out.println("$ java ExpectedEncoding <expected file.encoding> <expected sun.jnu.encoding>"); + System.out.println("$ use \"skip\" to skip checking property's value"); + System.exit(1); + } + String expectFileEnc = args[0]; + String expectSunJnuEnc = args[1]; + + String fileEnc = System.getProperty("file.encoding"); + String jnuEnc = System.getProperty("sun.jnu.encoding"); + + if ("skip".equals(expectFileEnc)) { + System.err.println("Expected file.encoding is \"skip\", ignoring"); + } else { + System.err.println("Expected file.encoding: " + expectFileEnc); + System.err.println("Actual file.encoding: " + fileEnc); + if (fileEnc == null || !fileEnc.equals(expectFileEnc)) { + failed = true; + } + } + if ("skip".equals(expectSunJnuEnc)) { + System.err.println("Expected sun.jnu.encoding is \"skip\", ignoring"); + } else { + if (jnuEnc == null || !jnuEnc.equals(expectSunJnuEnc)) { + System.err.println("Expected sun.jnu.encoding: " + expectSunJnuEnc); + System.err.println("Actual sun.jnu.encoding: " + jnuEnc); + failed = true; + } + } + + if (failed) { + throw new RuntimeException("Test Failed"); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/lang/System/MacEncoding/MacJNUEncoding.sh Sat Feb 15 17:57:42 2014 -0800 @@ -0,0 +1,96 @@ +#!/bin/sh + +# +# 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 8003228 +# @summary Test the value of sun.jnu.encoding on Mac +# @author Brent Christian +# +# @run shell MacJNUEncoding.sh + +# Only run test on Mac +OS=`uname -s` +case "$OS" in + Darwin ) ;; + * ) + exit 0 + ;; +esac + +if [ "${TESTJAVA}" = "" ] +then + echo "TESTJAVA not set. Test cannot execute. Failed." + exit 1 +fi + +if [ "${TESTSRC}" = "" ] +then + echo "TESTSRC not set. Test cannot execute. Failed." + exit 1 +fi + +if [ "${TESTCLASSES}" = "" ] +then + echo "TESTCLASSES not set. Test cannot execute. Failed." + exit 1 +fi + +JAVAC="${TESTJAVA}"/bin/javac +JAVA="${TESTJAVA}"/bin/java + +echo "Building test classes..." +"$JAVAC" -d "${TESTCLASSES}" "${TESTSRC}"/ExpectedEncoding.java + +echo "" +echo "Running test for C locale" +export LANG=C +export LC_ALL=C +"${JAVA}" ${TESTVMOPTS} -classpath "${TESTCLASSES}" ExpectedEncoding US-ASCII UTF-8 +result1=$? + +echo "" +echo "Running test for en_US.UTF-8 locale" +export LANG=en_US.UTF-8 +export LC_ALL=en_US.UTF-8 +"${JAVA}" ${TESTVMOPTS} -classpath "${TESTCLASSES}" ExpectedEncoding UTF-8 UTF-8 +result2=$? + +echo "" +echo "Cleanup" +rm ${TESTCLASSES}/ExpectedEncoding.class + +if [ ${result1} -ne 0 ] ; then + echo "Test failed for C locale" + echo " LANG=\"${LANG}\"" + echo " LC_ALL=\"${LC_ALL}\"" + exit ${result1} +fi +if [ ${result2} -ne 0 ] ; then + echo "Test failed for en_US.UTF-8 locale" + echo " LANG=\"${LANG}\"" + echo " LC_ALL=\"${LC_ALL}\"" + exit ${result2} +fi +exit 0 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/lang/System/MacEncoding/TestFileEncoding.java Sat Feb 15 17:57:42 2014 -0800 @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2013, 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. + */ + +import java.util.*; + +/* + * @test + * @bug 8011194 + * @summary Test value of file.encoding for corresponding value of LANG, etc + * @library ../../../../tools/launcher/ ../ + * @build TestHelper TestFileEncoding ExpectedEncoding + * @run main TestFileEncoding UTF-8 + * @run main/othervm -Dfile.encoding=MyEncoding -DuserEncoding=MyEncoding TestFileEncoding MyEncoding + * @run main TestFileEncoding UTF-8 en_US.UTF-8 + * @run main/othervm -Dfile.encoding=MyEncoding -DuserEncoding=MyEncoding TestFileEncoding MyEncoding en_US.UTF-8 + * @run main TestFileEncoding US-ASCII C + * @run main/othervm -Dfile.encoding=MyEncoding -DuserEncoding=MyEncoding TestFileEncoding MyEncoding C + * @author Brent Christian + */ + +/** + * Setup the environment and run a sub-test to check the expected value of + * file.encoding, based on the value(s) of encoding-related environment vars + * (LANG, LC_ALL, LC_CTYPE). + * + * The first argument (required) is the expected value of the + * file.encoding System property. + * The second argument (optional) is the value to set to the LANG/etc env vars. + */ +public class TestFileEncoding { + private static final String TEST_NAME = "ExpectedEncoding"; + + private String expectedEncoding; // Expected value for file.encoding + private String langVar = null; // Value to set for LANG, etc + + private static Set<String> envToRm = new HashSet<>(3); + static { + // Take these vars out of the test's run environment, possibly adding + // our own value back in. + envToRm.add("LANG"); + envToRm.add("LC_ALL"); + envToRm.add("LC_CTYPE"); + } + + public TestFileEncoding(String expectedEncoding) { + this.expectedEncoding = expectedEncoding; + } + + public TestFileEncoding(String expectedEncoding, String langVar) { + this.expectedEncoding = expectedEncoding; + this.langVar = langVar; + } + + /* + * Launch ExpectedEncoding with the given parameters, check for the + * expected file.encoding. + */ + private void run() { + String testClasses = System.getProperty("test.classes"); + + // Pick up VM opts + String vmOptsStr = System.getProperty("test.vm.opts"); + System.out.println("test.vm.opts: " + vmOptsStr); + String[] vmOpts = new String[0]; + if (vmOptsStr != null && !"".equals(vmOptsStr)) { + vmOpts = vmOptsStr.split(" "); + System.out.println("found vm options:"); + for (String opt : vmOpts) { + System.out.println(" <" + opt + ">"); + } + } + + // Build java cmd + LinkedList<String> cmdList = new LinkedList<>(); + cmdList.add(TestHelper.javaCmd); + for (String vmOpt : vmOpts) { + if (vmOpt != null && !vmOpt.equals("")) { + cmdList.add(vmOpt); + } + } + + // See if the user specified a file.encoding that we should pass through + String userEncoding = System.getProperty("userEncoding"); + if (userEncoding != null) { + cmdList.add("-Dfile.encoding="+userEncoding); + } + + cmdList.add("-cp"); + cmdList.add(testClasses); + cmdList.add(TEST_NAME); + cmdList.add(expectedEncoding); + cmdList.add("skip"); // ignore sun.jnu.encoding for this test + + String cmdArray[] = new String[cmdList.size()]; + cmdList.toArray(cmdArray); + + // Run the test(s) + if (langVar == null) { + System.out.println("TestFileEncoding: Running with no envvars set"); + TestHelper.TestResult tr = TestHelper.doExec(null, envToRm, + cmdArray); + checkResult(tr); + } else { + runWithEnvVar("LANG", cmdArray); + runWithEnvVar("LC_ALL", cmdArray); + runWithEnvVar("LC_CTYPE", cmdArray); + } + } + + /* + * Run the test, setting the environment named by envVarName to the value + * in langVar. + */ + private void runWithEnvVar(String envVarName, String[] cmdArray) { + Map<String, String> envToAdd = new HashMap<>(1); + TestHelper.TestResult tr = null; + + System.out.println("TestFileEncoding: Running with " + envVarName + "=" + langVar); + envToAdd.put(envVarName, langVar); + tr = TestHelper.doExec(envToAdd, envToRm, cmdArray); + checkResult(tr); + } + + private void checkResult(TestHelper.TestResult tr) { + System.out.println(tr); + if (!tr.isOK()) { + throw new RuntimeException("TEST FAILED: !tr.isOK()"); + } + } + + public static void main(String[] args) { + TestFileEncoding cfe = null; + if (!TestHelper.isMacOSX) { + System.out.println("Test is currently only for Mac OS X - pass."); + return; + } + if (args.length == 1) { + cfe = new TestFileEncoding(args[0]); + } else if (args.length == 2) { + cfe = new TestFileEncoding(args[0], args[1]); + } else { + System.out.println("Usage: TestFileEncoding <expected file.encoding>"); + System.out.println(" TestFileEncoding <expected file.encoding> <value for LANG/etc env var>"); + return; + } + cfe.run(); + } +}
--- a/test/java/lang/System/MacJNUEncoding/ExpectedEncoding.java Wed Feb 12 14:56:43 2014 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* - * 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. - */ - -/** - * Check that the value of file.encoding and sun.jnu.encoding match the expected - * values passed in on the command-line. - */ -public class ExpectedEncoding { - public static void main(String[] args) { - boolean failed = false; - if (args.length != 2) { - System.out.println("Usage:"); - System.out.println("$ java ExpectedEncoding <expected file.encoding> <expected sun.jnu.encoding>"); - System.exit(1); - } - String expectFileEnc = args[0]; - String expectSunJnuEnc = args[1]; - - String fileEnc = System.getProperty("file.encoding"); - String jnuEnc = System.getProperty("sun.jnu.encoding"); - - if (fileEnc == null || !fileEnc.equals(expectFileEnc)) { - System.err.println("Expected file.encoding: " + expectFileEnc); - System.err.println("Actual file.encoding: " + fileEnc); - failed = true; - } - if (jnuEnc == null || !jnuEnc.equals(expectSunJnuEnc)) { - System.err.println("Expected sun.jnu.encoding: " + expectSunJnuEnc); - System.err.println("Actual sun.jnu.encoding: " + jnuEnc); - failed = true; - } - if (failed) { - throw new RuntimeException("Test Failed"); - } - } -}
--- a/test/java/lang/System/MacJNUEncoding/MacJNUEncoding.sh Wed Feb 12 14:56:43 2014 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,96 +0,0 @@ -#!/bin/sh - -# -# 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 8003228 -# @summary Test the value of sun.jnu.encoding on Mac -# @author Brent Christian -# -# @run shell MacJNUEncoding.sh - -# Only run test on Mac -OS=`uname -s` -case "$OS" in - Darwin ) ;; - * ) - exit 0 - ;; -esac - -if [ "${TESTJAVA}" = "" ] -then - echo "TESTJAVA not set. Test cannot execute. Failed." - exit 1 -fi - -if [ "${TESTSRC}" = "" ] -then - echo "TESTSRC not set. Test cannot execute. Failed." - exit 1 -fi - -if [ "${TESTCLASSES}" = "" ] -then - echo "TESTCLASSES not set. Test cannot execute. Failed." - exit 1 -fi - -JAVAC="${TESTJAVA}"/bin/javac -JAVA="${TESTJAVA}"/bin/java - -echo "Building test classes..." -"$JAVAC" -d "${TESTCLASSES}" "${TESTSRC}"/ExpectedEncoding.java - -echo "" -echo "Running test for C locale" -export LANG=C -export LC_ALL=C -"${JAVA}" ${TESTVMOPTS} -classpath "${TESTCLASSES}" ExpectedEncoding US-ASCII UTF-8 -result1=$? - -echo "" -echo "Running test for en_US.UTF-8 locale" -export LANG=en_US.UTF-8 -export LC_ALL=en_US.UTF-8 -"${JAVA}" ${TESTVMOPTS} -classpath "${TESTCLASSES}" ExpectedEncoding UTF-8 UTF-8 -result2=$? - -echo "" -echo "Cleanup" -rm ${TESTCLASSES}/ExpectedEncoding.class - -if [ ${result1} -ne 0 ] ; then - echo "Test failed for C locale" - echo " LANG=\"${LANG}\"" - echo " LC_ALL=\"${LC_ALL}\"" - exit ${result1} -fi -if [ ${result2} -ne 0 ] ; then - echo "Test failed for en_US.UTF-8 locale" - echo " LANG=\"${LANG}\"" - echo " LC_ALL=\"${LC_ALL}\"" - exit ${result2} -fi -exit 0 -
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/lang/invoke/TestCatchExceptionWithVarargs.java Sat Feb 15 17:57:42 2014 -0800 @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2013, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 8019184 + * @summary MethodHandles.catchException() fails when methods have 8 args + varargs + */ + +import java.util.*; +import java.lang.invoke.*; + +public class TestCatchExceptionWithVarargs { + + private static final Class<?> CLASS = TestCatchExceptionWithVarargs.class; + private static final int MAX_MH_ARITY = 254; + + public static MethodHandle target; + public static MethodHandle handler; + + private static Object firstArg; + + static class MyException extends Exception { + } + + public static Object target(Object... a) throws Exception { + if (a[0] != firstArg) { + throw new AssertionError("first argument different than expected: " + a[0] + " != " + firstArg); + } + throw new MyException(); + } + + public static Object handler(Object... a) { + if (a[0] != firstArg) { + throw new AssertionError("first argument different than expected: " + a[0] + " != " + firstArg); + } + return a[0]; + } + + static { + try { + MethodType mtype = MethodType.methodType(Object.class, Object[].class); + target = MethodHandles.lookup().findStatic(CLASS, "target", mtype); + handler = MethodHandles.lookup().findStatic(CLASS, "handler", mtype); + } catch (Exception e) { + throw new AssertionError(e); + } + } + + public static void main(String[] args) throws Throwable { + List<Class<?>> ptypes = new LinkedList<>(); + ptypes.add(Object[].class); + + // We use MAX_MH_ARITY - 1 here to account for the Object[] argument. + for (int i = 1; i < MAX_MH_ARITY - 1; i++) { + ptypes.add(0, Object.class); + + MethodHandle targetWithArgs = target.asType(MethodType.methodType(Object.class, ptypes)); + MethodHandle handlerWithArgs = handler.asType(MethodType.methodType(Object.class, ptypes)); + handlerWithArgs = MethodHandles.dropArguments(handlerWithArgs, 0, MyException.class); + + MethodHandle gwc1 = MethodHandles.catchException(targetWithArgs, MyException.class, handlerWithArgs); + + // The next line throws an IllegalArgumentException if there is a bug. + MethodHandle gwc2 = MethodHandles.catchException(gwc1, MyException.class, handlerWithArgs); + + // This is only to verify that the method handles can actually be invoked and do the right thing. + firstArg = new Object(); + Object o = gwc2.asSpreader(Object[].class, ptypes.size() - 1).invoke(firstArg, new Object[i]); + if (o != firstArg) { + throw new AssertionError("return value different than expected: " + o + " != " + firstArg); + } + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/net/IDN/UseSTD3ASCIIRules.java Sat Feb 15 17:57:42 2014 -0800 @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2013, 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 8023881 + * @summary IDN.USE_STD3_ASCII_RULES option is too strict to use Unicode + * in IDN.toASCII + */ + +import java.net.*; + +public class UseSTD3ASCIIRules { + + public static void main(String[] args) throws Exception { + // Per Section 4.1, RFC 3490, if the UseSTD3ASCIIRules flag is set, + // then perform these checks: + // + // (a) Verify the absence of non-LDH ASCII code points; that is, the + // absence of 0..2C, 2E..2F, 3A..40, 5B..60, and 7B..7F. + // + // (b) Verify the absence of leading and trailing hyphen-minus; that + // is, the absence of U+002D at the beginning and end of the + // sequence. + String[] illegalNames = { + "www.example.com-", + "-www.example.com", + "-www.example.com-", + "www.ex\u002Cmple.com", + "www.ex\u007Bmple.com", + "www.ex\u007Fmple.com" + }; + + String[] legalNames = { + "www.ex-ample.com", + "www.ex\u002Dmple.com", // www.ex-mple.com + "www.ex\u007Ample.com", // www.exzmple.com + "www.ex\u3042mple.com", // www.xn--exmple-j43e.com + "www.\u3042\u3044\u3046.com", // www.xn--l8jeg.com + "www.\u793A\u4F8B.com" // www.xn--fsq092h.com + }; + + for (String name : illegalNames) { + try { + System.out.println("Convering illegal IDN: " + name); + IDN.toASCII(name, IDN.USE_STD3_ASCII_RULES); + throw new Exception( + "Expected to get IllegalArgumentException for " + name); + } catch (IllegalArgumentException iae) { + // That's the right behavior. + } + } + + for (String name : legalNames) { + System.out.println("Convering legal IDN: " + name); + System.out.println("\tThe ACE form is: " + + IDN.toASCII(name, IDN.USE_STD3_ASCII_RULES)); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Arrays/TimSortStackSize.java Sat Feb 15 17:57:42 2014 -0800 @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2014, 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 8011944 + * @summary Test TimSort stack size + */ +import java.util.Arrays; +import java.util.ArrayDeque; +import java.util.Comparator; + +public class TimSortStackSize { + + public static void main(String[] args) { + testComparableTimSort(); + testTimSort(); + } + + static void testComparableTimSort() { + System.out.printf("testComparableTimSort()%n"); + Arrays.sort(genData()); + } + + static void testTimSort() { + System.out.printf("testTimSort()%n"); + //Arrays.sort(genData(), Integer::compare); + Arrays.sort(genData(), + new java.util.Comparator<Integer>() { + public int compare(Integer a1, Integer a2){ + return Integer.compare(a1.intValue(), a2.intValue()); + } + }); + } + + private static final int MIN = 16; + + private static final int BOUND1 = 2 * MIN + 1; + private static final int BOUND2 = BOUND1 + MIN + 2; + private static final int BOUND3 = BOUND1 + 1 + BOUND2; + private static final int BOUND4 = BOUND2 + 1 + BOUND3; + private static final int BOUND5 = BOUND3 + 1 + BOUND4; + + static int build(int size, int B, ArrayDeque<Integer> chunks) { + chunks.addFirst(B); + if (size < BOUND1) { + chunks.addFirst(size); + return size; + } + + int asize = (size + 2) / 2; + if (size >= BOUND2 && asize < BOUND1) { + asize = BOUND1; + } else if (size >= BOUND3 && asize < BOUND2) { + asize = BOUND2; + } else if (size >= BOUND4 && asize < BOUND3) { + asize = BOUND3; + } else if (size >= BOUND5 && asize < BOUND4) { + asize = BOUND4; + } + if (size - asize >= B) { + throw new AssertionError(" " + size + " , " + asize + " , " + B); + } + return build(asize, size - asize, chunks); + } + + static Integer[] genData() { + ArrayDeque<Integer> chunks = new ArrayDeque<Integer>(); + chunks.addFirst(MIN); + + int B = MIN + 4; + int A = B + MIN + 1; + + for (int i = 0; i < 8; i++) { + int eps = build(A, B, chunks); + B = B + A + 1; + A = B + eps + 1; + } + chunks.addFirst(B); + chunks.addFirst(A); + int total = 0; + for (Integer len : chunks) { + total += len; + } + int pow = MIN; + while (pow < total) { + pow += pow; + } + chunks.addLast(pow - total); + System.out.println(" Total: " + total); + Integer[] array = new Integer[pow]; + int off = 0; + int pos = 0; + for (Integer len : chunks) { + for (int i = 0; i < len; i++) { + array[pos++] = Integer.valueOf(i == 0 ? 0 : 1); + } + off++; + } + return array; + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/xml/jaxp/transform/8004476/SecureProcessingTest.xml Sat Feb 15 17:57:42 2014 -0800 @@ -0,0 +1,2 @@ +<?xml version="1.0"?> +<helloWorld/>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/xml/jaxp/transform/8004476/TestBase.java Sat Feb 15 17:57:42 2014 -0800 @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + */ +import java.security.Policy; + +/** + * + * + * @author huizhe.wang@oracle.com + */ +public class TestBase { + public static boolean isWindows = false; + static { + if (System.getProperty("os.name").indexOf("Windows")>-1) { + isWindows = true; + } + }; + + String filepath; + boolean hasSM; + String curDir; + Policy origPolicy; + String testName; + static String errMessage; + + int passed = 0, failed = 0; + + /** + * Creates a new instance of StreamReader + */ + public TestBase(String name) { + testName = name; + } + + //junit @Override + protected void setUp() { + if (System.getSecurityManager() != null) { + hasSM = true; + System.setSecurityManager(null); + } + + filepath = System.getProperty("test.src"); + if (filepath == null) { + //current directory + filepath = System.getProperty("user.dir"); + } + origPolicy = Policy.getPolicy(); + + } + + //junit @Override + public void tearDown() { + // turn off security manager and restore policy + System.setSecurityManager(null); + Policy.setPolicy(origPolicy); + if (hasSM) { + System.setSecurityManager(new SecurityManager()); + } + System.out.println("\nNumber of tests passed: " + passed); + System.out.println("Number of tests failed: " + failed + "\n"); + + if (errMessage != null ) { + throw new RuntimeException(errMessage); + } + } + + void fail(String errMsg) { + if (errMessage == null) { + errMessage = errMsg; + } else { + errMessage = errMessage + "\n" + errMsg; + } + failed++; + } + + void success(String msg) { + passed++; + System.out.println(msg); + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/xml/jaxp/transform/8004476/XPathExFuncTest.java Sat Feb 15 17:57:42 2014 -0800 @@ -0,0 +1,287 @@ +/* + * Copyright (c) 2013, 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 8004476 + * @summary test XPath extension functions + * @run main/othervm XPathExFuncTest + */ +import java.io.FileInputStream; +import java.io.InputStream; +import java.security.AllPermission; +import java.security.CodeSource; +import java.security.Permission; +import java.security.PermissionCollection; +import java.security.Permissions; +import java.security.Policy; +import java.security.ProtectionDomain; +import java.util.Iterator; +import java.util.List; +import javax.xml.XMLConstants; +import javax.xml.namespace.NamespaceContext; +import javax.xml.namespace.QName; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; +import javax.xml.xpath.XPathFactoryConfigurationException; +import javax.xml.xpath.XPathFunction; +import javax.xml.xpath.XPathFunctionException; +import javax.xml.xpath.XPathFunctionResolver; +import org.w3c.dom.Document; + +/** + * test XPath extension functions + * + * @author huizhe.wang@oracle.com + */ +public class XPathExFuncTest extends TestBase { + + final static String ENABLE_EXTENSION_FUNCTIONS = "http://www.oracle.com/xml/jaxp/properties/enableExtensionFunctions"; + final static String CLASSNAME = "DocumentBuilderFactoryImpl"; + final String XPATH_EXPRESSION = "ext:helloWorld()"; + + /** + * Creates a new instance of StreamReader + */ + public XPathExFuncTest(String name) { + super(name); + } + boolean hasSM; + String xslFile, xslFileId; + String xmlFile, xmlFileId; + + protected void setUp() { + super.setUp(); + xmlFile = filepath + "/SecureProcessingTest.xml"; + + } + + /** + * @param args the command line arguments + */ + public static void main(String[] args) { + XPathExFuncTest test = new XPathExFuncTest("OneTest"); + test.setUp(); + + test.testExtFunc(); + test.testExtFuncNotAllowed(); + test.testEnableExtFunc(); + test.tearDown(); + + } + + /** + * by default, extension function is enabled + */ + public void testExtFunc() { + + try { + evaluate(false); + System.out.println("testExtFunc: OK"); + } catch (XPathFactoryConfigurationException e) { + fail(e.getMessage()); + } catch (XPathExpressionException e) { + fail(e.getMessage()); + } + } + + /** + * Security is enabled, extension function not allowed + */ + public void testExtFuncNotAllowed() { + Policy p = new SimplePolicy(new AllPermission()); + Policy.setPolicy(p); + System.setSecurityManager(new SecurityManager()); + + try { + evaluate(false); + } catch (XPathFactoryConfigurationException e) { + fail(e.getMessage()); + } catch (XPathExpressionException ex) { + //expected since extension function is disallowed + System.out.println("testExtFuncNotAllowed: OK"); + } finally { + System.setSecurityManager(null); + } + } + + /** + * Security is enabled, use new feature: enableExtensionFunctions + */ + public void testEnableExtFunc() { + Policy p = new SimplePolicy(new AllPermission()); + Policy.setPolicy(p); + System.setSecurityManager(new SecurityManager()); + + + try { + evaluate(true); + System.out.println("testEnableExt: OK"); + } catch (XPathFactoryConfigurationException e) { + fail(e.getMessage()); + } catch (XPathExpressionException e) { + fail(e.getMessage()); + } finally { + System.setSecurityManager(null); + } + } + + Document getDocument() { + // the xml source + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder documentBuilder = null; + Document document = null; + + try { + documentBuilder = documentBuilderFactory.newDocumentBuilder(); + InputStream xmlStream = new FileInputStream(xmlFile); + document = documentBuilder.parse(xmlStream); + } catch (Exception e) { + fail(e.toString()); + } + return document; + } + + void evaluate(boolean enableExt) throws XPathFactoryConfigurationException, XPathExpressionException { + Document document = getDocument(); + + XPathFactory xPathFactory = XPathFactory.newInstance(); + /** + * Use of the extension function 'http://exslt.org/strings:tokenize' is + * not allowed when the secure processing feature is set to true. + * Attempt to use the new property to enable extension function + */ + if (enableExt) { + boolean isExtensionSupported = enableExtensionFunction(xPathFactory); + } + + xPathFactory.setXPathFunctionResolver(new MyXPathFunctionResolver()); + if (System.getSecurityManager() == null) { + xPathFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, false); + } + + XPath xPath = xPathFactory.newXPath(); + xPath.setNamespaceContext(new MyNamespaceContext()); + + String xPathResult = xPath.evaluate(XPATH_EXPRESSION, document); + System.out.println( + "XPath result (enableExtensionFunction == " + enableExt + ") = \"" + + xPathResult + + "\""); + } + + public class MyXPathFunctionResolver + implements XPathFunctionResolver { + + public XPathFunction resolveFunction(QName functionName, int arity) { + + // not a real ewsolver, always return a default XPathFunction + return new MyXPathFunction(); + } + } + + public class MyXPathFunction + implements XPathFunction { + + public Object evaluate(List list) throws XPathFunctionException { + + return "Hello World"; + } + } + + public class MyNamespaceContext implements NamespaceContext { + + public String getNamespaceURI(String prefix) { + if (prefix == null) { + throw new IllegalArgumentException("The prefix cannot be null."); + } + + if (prefix.equals("ext")) { + return "http://ext.com"; + } else { + return null; + } + } + + public String getPrefix(String namespace) { + + if (namespace == null) { + throw new IllegalArgumentException("The namespace uri cannot be null."); + } + + if (namespace.equals("http://ext.com")) { + return "ext"; + } else { + return null; + } + } + + public Iterator getPrefixes(String namespace) { + return null; + } + } + + boolean enableExtensionFunction(XPathFactory factory) { + boolean isSupported = true; + try { + factory.setFeature(ENABLE_EXTENSION_FUNCTIONS, true); + } catch (XPathFactoryConfigurationException ex) { + isSupported = false; + } + return isSupported; + } + + class SimplePolicy extends Policy { + + private final Permissions perms; + + public SimplePolicy(Permission... permissions) { + perms = new Permissions(); + for (Permission permission : permissions) { + perms.add(permission); + } + } + + @Override + public PermissionCollection getPermissions(CodeSource cs) { + return perms; + } + + @Override + public PermissionCollection getPermissions(ProtectionDomain pd) { + return perms; + } + + @Override + public boolean implies(ProtectionDomain pd, Permission p) { + return perms.implies(p); + } + + //for older jdk + @Override + public void refresh() { + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/xml/jaxp/transform/8004476/XSLTExFuncTest.java Sat Feb 15 17:57:42 2014 -0800 @@ -0,0 +1,248 @@ +/* + * Copyright (c) 2013, 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 8004476 + * @summary test XSLT extension functions + * @run main/othervm XSLTExFuncTest + */ + +import java.io.StringWriter; +import java.security.AllPermission; +import java.security.CodeSource; +import java.security.Permission; +import java.security.PermissionCollection; +import java.security.Permissions; +import java.security.Policy; +import java.security.ProtectionDomain; +import javax.xml.transform.*; +import javax.xml.transform.sax.SAXSource; +import javax.xml.transform.stream.StreamResult; +import org.xml.sax.InputSource; + +/** + * test XSLT extension functions + * + * @author huizhe.wang@oracle.com + */ +public class XSLTExFuncTest extends TestBase { + + final static String ENABLE_EXTENSION_FUNCTIONS = "http://www.oracle.com/xml/jaxp/properties/enableExtensionFunctions"; + final static String CLASSNAME = "DocumentBuilderFactoryImpl"; + + /** + * Creates a new instance of StreamReader + */ + public XSLTExFuncTest(String name) { + super(name); + } + boolean hasSM; + String xslFile, xslFileId; + String xmlFile, xmlFileId; + + protected void setUp() { + super.setUp(); + xmlFile = filepath + "/tokenize.xml"; + xslFile = filepath + "/tokenize.xsl"; + + /** + * On Windows platform it needs triple '/' for valid URL while double '/' is enough on Linux or Solaris. + * Here use file:/// directly to make it work on Windows and it will not impact other platforms. + */ + xslFileId = "file:///" + xslFile; + } + + /** + * @param args the command line arguments + */ + public static void main(String[] args) { + XSLTExFuncTest test = new XSLTExFuncTest("OneTest"); + test.setUp(); + + test.testExtFunc(); + test.testExtFuncNotAllowed(); + test.testEnableExtFunc(); + test.testTemplatesEnableExtFunc(); + test.tearDown(); + + } + + /** + * by default, extension function is enabled + */ + public void testExtFunc() { + TransformerFactory factory = TransformerFactory.newInstance(); + + try { + transform(factory); + System.out.println("testExtFunc: OK"); + } catch (TransformerConfigurationException e) { + fail(e.getMessage()); + } catch (TransformerException ex) { + fail(ex.getMessage()); + } + } + + /** + * Security is enabled, extension function not allowed + */ + public void testExtFuncNotAllowed() { + Policy p = new SimplePolicy(new AllPermission()); + Policy.setPolicy(p); + System.setSecurityManager(new SecurityManager()); + TransformerFactory factory = TransformerFactory.newInstance(); + + try { + transform(factory); + } catch (TransformerConfigurationException e) { + fail(e.getMessage()); + } catch (TransformerException ex) { + //expected since extension function is disallowed + System.out.println("testExtFuncNotAllowed: OK"); + } finally { + System.setSecurityManager(null); + } + } + + /** + * Security is enabled, use new feature: enableExtensionFunctions + */ + public void testEnableExtFunc() { + Policy p = new SimplePolicy(new AllPermission()); + Policy.setPolicy(p); + System.setSecurityManager(new SecurityManager()); + TransformerFactory factory = TransformerFactory.newInstance(); + + /** + * Use of the extension function 'http://exslt.org/strings:tokenize' is + * not allowed when the secure processing feature is set to true. + * Attempt to use the new property to enable extension function + */ + boolean isExtensionSupported = enableExtensionFunction(factory); + + try { + transform(factory); + System.out.println("testEnableExt: OK"); + } catch (TransformerConfigurationException e) { + fail(e.getMessage()); + } catch (TransformerException e) { + fail(e.getMessage()); + } finally { + System.setSecurityManager(null); + } + } + + /** + * use Templates template = factory.newTemplates(new StreamSource( new + * FileInputStream(xslFilename))); // Use the template to create a + * transformer Transformer xformer = template.newTransformer(); + * + * @param factory + * @return + */ + /** + * Security is enabled, use new feature: enableExtensionFunctions Use the + * template to create a transformer + */ + public void testTemplatesEnableExtFunc() { + Policy p = new SimplePolicy(new AllPermission()); + Policy.setPolicy(p); + System.setSecurityManager(new SecurityManager()); + TransformerFactory factory = TransformerFactory.newInstance(); + + /** + * Use of the extension function 'http://exslt.org/strings:tokenize' is + * not allowed when the secure processing feature is set to true. + * Attempt to use the new property to enable extension function + */ + boolean isExtensionSupported = enableExtensionFunction(factory); + + try { + SAXSource xslSource = new SAXSource(new InputSource(xslFile)); + xslSource.setSystemId(xslFileId); + Templates template = factory.newTemplates(xslSource); + Transformer transformer = template.newTransformer(); + StringWriter stringResult = new StringWriter(); + Result result = new StreamResult(stringResult); + transformer.transform(new SAXSource(new InputSource(xmlFile)), result); + System.out.println("testTemplatesEnableExtFunc: OK"); + } catch (TransformerConfigurationException e) { + fail(e.getMessage()); + } catch (TransformerException e) { + fail(e.getMessage()); + } finally { + System.setSecurityManager(null); + } + } + + boolean enableExtensionFunction(TransformerFactory factory) { + boolean isSupported = true; + try { + factory.setFeature(ENABLE_EXTENSION_FUNCTIONS, true); + } catch (TransformerConfigurationException ex) { + isSupported = false; + } + return isSupported; + } + + void transform(TransformerFactory factory) throws TransformerConfigurationException, TransformerException { + SAXSource xslSource = new SAXSource(new InputSource(xslFile)); + xslSource.setSystemId(xslFileId); + Transformer transformer = factory.newTransformer(xslSource); + StringWriter stringResult = new StringWriter(); + Result result = new StreamResult(stringResult); + transformer.transform(new SAXSource(new InputSource(xmlFile)), result); + } + + class SimplePolicy extends Policy { + + private final Permissions perms; + + public SimplePolicy(Permission... permissions) { + perms = new Permissions(); + for (Permission permission : permissions) { + perms.add(permission); + } + } + + @Override + public PermissionCollection getPermissions(CodeSource cs) { + return perms; + } + + @Override + public PermissionCollection getPermissions(ProtectionDomain pd) { + return perms; + } + + @Override + public boolean implies(ProtectionDomain pd, Permission p) { + return perms.implies(p); + } + + //for older jdk + @Override + public void refresh() { + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/xml/jaxp/transform/8004476/tokenize.xml Sat Feb 15 17:57:42 2014 -0800 @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<html> +<a> + <b>Is this EXSLT? No. no</b> + <c>Is this EXSLT? No. no</c> +</a> +</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/xml/jaxp/transform/8004476/tokenize.xsl Sat Feb 15 17:57:42 2014 -0800 @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:str="http://exslt.org/strings" + xmlns:xalan="http://xml.apache.org/xalan" + version="1.0"> +<xsl:template match="a"> + <xsl:apply-templates /> +</xsl:template> +<xsl:template match="//a/c"> + <xsl:value-of select="." /> + - + <xsl:value-of select="str:tokenize(string(.), ' ')" /> + <xsl:value-of select="str:tokenize(string(.), '')" /> + <xsl:for-each select="str:tokenize(string(.), ' ')"> + <xsl:value-of select="." /> + </xsl:for-each> + <xsl:apply-templates select="*" /> +</xsl:template> +<xsl:template match="//a/b"> + <xsl:value-of select="." /> + - + <xsl:value-of select="xalan:tokenize(string(.), ' ')" /> + <xsl:value-of select="xalan:tokenize(string(.), '')" /> + <xsl:for-each select="xalan:tokenize(string(.), ' ')"> + <xsl:value-of select="." /> + </xsl:for-each> + <xsl:apply-templates select="*" /> +</xsl:template> + +</xsl:stylesheet>
--- a/test/javax/xml/jaxp/transform/jdk8004476/SecureProcessingTest.xml Wed Feb 12 14:56:43 2014 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2 +0,0 @@ -<?xml version="1.0"?> -<helloWorld/>
--- a/test/javax/xml/jaxp/transform/jdk8004476/TestBase.java Wed Feb 12 14:56:43 2014 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. - * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. - */ -import java.security.Policy; - -/** - * - * - * @author huizhe.wang@oracle.com - */ -public class TestBase { - public static boolean isWindows = false; - static { - if (System.getProperty("os.name").indexOf("Windows")>-1) { - isWindows = true; - } - }; - - String filepath; - boolean hasSM; - String curDir; - Policy origPolicy; - String testName; - static String errMessage; - - int passed = 0, failed = 0; - - /** - * Creates a new instance of StreamReader - */ - public TestBase(String name) { - testName = name; - } - - //junit @Override - protected void setUp() { - if (System.getSecurityManager() != null) { - hasSM = true; - System.setSecurityManager(null); - } - - filepath = System.getProperty("test.src"); - if (filepath == null) { - //current directory - filepath = System.getProperty("user.dir"); - } - origPolicy = Policy.getPolicy(); - - } - - //junit @Override - public void tearDown() { - // turn off security manager and restore policy - System.setSecurityManager(null); - Policy.setPolicy(origPolicy); - if (hasSM) { - System.setSecurityManager(new SecurityManager()); - } - System.out.println("\nNumber of tests passed: " + passed); - System.out.println("Number of tests failed: " + failed + "\n"); - - if (errMessage != null ) { - throw new RuntimeException(errMessage); - } - } - - void fail(String errMsg) { - if (errMessage == null) { - errMessage = errMsg; - } else { - errMessage = errMessage + "\n" + errMsg; - } - failed++; - } - - void success(String msg) { - passed++; - System.out.println(msg); - } - -}
--- a/test/javax/xml/jaxp/transform/jdk8004476/XPathExFuncTest.java Wed Feb 12 14:56:43 2014 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,287 +0,0 @@ -/* - * Copyright (c) 2013, 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 8004476 - * @summary test XPath extension functions - * @run main/othervm XPathExFuncTest - */ -import java.io.FileInputStream; -import java.io.InputStream; -import java.security.AllPermission; -import java.security.CodeSource; -import java.security.Permission; -import java.security.PermissionCollection; -import java.security.Permissions; -import java.security.Policy; -import java.security.ProtectionDomain; -import java.util.Iterator; -import java.util.List; -import javax.xml.XMLConstants; -import javax.xml.namespace.NamespaceContext; -import javax.xml.namespace.QName; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.xpath.XPath; -import javax.xml.xpath.XPathExpressionException; -import javax.xml.xpath.XPathFactory; -import javax.xml.xpath.XPathFactoryConfigurationException; -import javax.xml.xpath.XPathFunction; -import javax.xml.xpath.XPathFunctionException; -import javax.xml.xpath.XPathFunctionResolver; -import org.w3c.dom.Document; - -/** - * test XPath extension functions - * - * @author huizhe.wang@oracle.com - */ -public class XPathExFuncTest extends TestBase { - - final static String ENABLE_EXTENSION_FUNCTIONS = "http://www.oracle.com/xml/jaxp/properties/enableExtensionFunctions"; - final static String CLASSNAME = "DocumentBuilderFactoryImpl"; - final String XPATH_EXPRESSION = "ext:helloWorld()"; - - /** - * Creates a new instance of StreamReader - */ - public XPathExFuncTest(String name) { - super(name); - } - boolean hasSM; - String xslFile, xslFileId; - String xmlFile, xmlFileId; - - protected void setUp() { - super.setUp(); - xmlFile = filepath + "/SecureProcessingTest.xml"; - - } - - /** - * @param args the command line arguments - */ - public static void main(String[] args) { - XPathExFuncTest test = new XPathExFuncTest("OneTest"); - test.setUp(); - - test.testExtFunc(); - test.testExtFuncNotAllowed(); - test.testEnableExtFunc(); - test.tearDown(); - - } - - /** - * by default, extension function is enabled - */ - public void testExtFunc() { - - try { - evaluate(false); - System.out.println("testExtFunc: OK"); - } catch (XPathFactoryConfigurationException e) { - fail(e.getMessage()); - } catch (XPathExpressionException e) { - fail(e.getMessage()); - } - } - - /** - * Security is enabled, extension function not allowed - */ - public void testExtFuncNotAllowed() { - Policy p = new SimplePolicy(new AllPermission()); - Policy.setPolicy(p); - System.setSecurityManager(new SecurityManager()); - - try { - evaluate(false); - } catch (XPathFactoryConfigurationException e) { - fail(e.getMessage()); - } catch (XPathExpressionException ex) { - //expected since extension function is disallowed - System.out.println("testExtFuncNotAllowed: OK"); - } finally { - System.setSecurityManager(null); - } - } - - /** - * Security is enabled, use new feature: enableExtensionFunctions - */ - public void testEnableExtFunc() { - Policy p = new SimplePolicy(new AllPermission()); - Policy.setPolicy(p); - System.setSecurityManager(new SecurityManager()); - - - try { - evaluate(true); - System.out.println("testEnableExt: OK"); - } catch (XPathFactoryConfigurationException e) { - fail(e.getMessage()); - } catch (XPathExpressionException e) { - fail(e.getMessage()); - } finally { - System.setSecurityManager(null); - } - } - - Document getDocument() { - // the xml source - DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder documentBuilder = null; - Document document = null; - - try { - documentBuilder = documentBuilderFactory.newDocumentBuilder(); - InputStream xmlStream = new FileInputStream(xmlFile); - document = documentBuilder.parse(xmlStream); - } catch (Exception e) { - fail(e.toString()); - } - return document; - } - - void evaluate(boolean enableExt) throws XPathFactoryConfigurationException, XPathExpressionException { - Document document = getDocument(); - - XPathFactory xPathFactory = XPathFactory.newInstance(); - /** - * Use of the extension function 'http://exslt.org/strings:tokenize' is - * not allowed when the secure processing feature is set to true. - * Attempt to use the new property to enable extension function - */ - if (enableExt) { - boolean isExtensionSupported = enableExtensionFunction(xPathFactory); - } - - xPathFactory.setXPathFunctionResolver(new MyXPathFunctionResolver()); - if (System.getSecurityManager() == null) { - xPathFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, false); - } - - XPath xPath = xPathFactory.newXPath(); - xPath.setNamespaceContext(new MyNamespaceContext()); - - String xPathResult = xPath.evaluate(XPATH_EXPRESSION, document); - System.out.println( - "XPath result (enableExtensionFunction == " + enableExt + ") = \"" - + xPathResult - + "\""); - } - - public class MyXPathFunctionResolver - implements XPathFunctionResolver { - - public XPathFunction resolveFunction(QName functionName, int arity) { - - // not a real ewsolver, always return a default XPathFunction - return new MyXPathFunction(); - } - } - - public class MyXPathFunction - implements XPathFunction { - - public Object evaluate(List list) throws XPathFunctionException { - - return "Hello World"; - } - } - - public class MyNamespaceContext implements NamespaceContext { - - public String getNamespaceURI(String prefix) { - if (prefix == null) { - throw new IllegalArgumentException("The prefix cannot be null."); - } - - if (prefix.equals("ext")) { - return "http://ext.com"; - } else { - return null; - } - } - - public String getPrefix(String namespace) { - - if (namespace == null) { - throw new IllegalArgumentException("The namespace uri cannot be null."); - } - - if (namespace.equals("http://ext.com")) { - return "ext"; - } else { - return null; - } - } - - public Iterator getPrefixes(String namespace) { - return null; - } - } - - boolean enableExtensionFunction(XPathFactory factory) { - boolean isSupported = true; - try { - factory.setFeature(ENABLE_EXTENSION_FUNCTIONS, true); - } catch (XPathFactoryConfigurationException ex) { - isSupported = false; - } - return isSupported; - } - - class SimplePolicy extends Policy { - - private final Permissions perms; - - public SimplePolicy(Permission... permissions) { - perms = new Permissions(); - for (Permission permission : permissions) { - perms.add(permission); - } - } - - @Override - public PermissionCollection getPermissions(CodeSource cs) { - return perms; - } - - @Override - public PermissionCollection getPermissions(ProtectionDomain pd) { - return perms; - } - - @Override - public boolean implies(ProtectionDomain pd, Permission p) { - return perms.implies(p); - } - - //for older jdk - @Override - public void refresh() { - } - } -}
--- a/test/javax/xml/jaxp/transform/jdk8004476/XSLTExFuncTest.java Wed Feb 12 14:56:43 2014 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,248 +0,0 @@ -/* - * Copyright (c) 2013, 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 8004476 - * @summary test XSLT extension functions - * @run main/othervm XSLTExFuncTest - */ - -import java.io.StringWriter; -import java.security.AllPermission; -import java.security.CodeSource; -import java.security.Permission; -import java.security.PermissionCollection; -import java.security.Permissions; -import java.security.Policy; -import java.security.ProtectionDomain; -import javax.xml.transform.*; -import javax.xml.transform.sax.SAXSource; -import javax.xml.transform.stream.StreamResult; -import org.xml.sax.InputSource; - -/** - * test XSLT extension functions - * - * @author huizhe.wang@oracle.com - */ -public class XSLTExFuncTest extends TestBase { - - final static String ENABLE_EXTENSION_FUNCTIONS = "http://www.oracle.com/xml/jaxp/properties/enableExtensionFunctions"; - final static String CLASSNAME = "DocumentBuilderFactoryImpl"; - - /** - * Creates a new instance of StreamReader - */ - public XSLTExFuncTest(String name) { - super(name); - } - boolean hasSM; - String xslFile, xslFileId; - String xmlFile, xmlFileId; - - protected void setUp() { - super.setUp(); - xmlFile = filepath + "/tokenize.xml"; - xslFile = filepath + "/tokenize.xsl"; - - /** - * if (isWindows) { xslFile = "/" + xslFile; } - * - */ - xslFileId = "file://" + xslFile; - } - - /** - * @param args the command line arguments - */ - public static void main(String[] args) { - XSLTExFuncTest test = new XSLTExFuncTest("OneTest"); - test.setUp(); - - test.testExtFunc(); - test.testExtFuncNotAllowed(); - test.testEnableExtFunc(); - test.testTemplatesEnableExtFunc(); - test.tearDown(); - - } - - /** - * by default, extension function is enabled - */ - public void testExtFunc() { - TransformerFactory factory = TransformerFactory.newInstance(); - - try { - transform(factory); - System.out.println("testExtFunc: OK"); - } catch (TransformerConfigurationException e) { - fail(e.getMessage()); - } catch (TransformerException ex) { - fail(ex.getMessage()); - } - } - - /** - * Security is enabled, extension function not allowed - */ - public void testExtFuncNotAllowed() { - Policy p = new SimplePolicy(new AllPermission()); - Policy.setPolicy(p); - System.setSecurityManager(new SecurityManager()); - TransformerFactory factory = TransformerFactory.newInstance(); - - try { - transform(factory); - } catch (TransformerConfigurationException e) { - fail(e.getMessage()); - } catch (TransformerException ex) { - //expected since extension function is disallowed - System.out.println("testExtFuncNotAllowed: OK"); - } finally { - System.setSecurityManager(null); - } - } - - /** - * Security is enabled, use new feature: enableExtensionFunctions - */ - public void testEnableExtFunc() { - Policy p = new SimplePolicy(new AllPermission()); - Policy.setPolicy(p); - System.setSecurityManager(new SecurityManager()); - TransformerFactory factory = TransformerFactory.newInstance(); - - /** - * Use of the extension function 'http://exslt.org/strings:tokenize' is - * not allowed when the secure processing feature is set to true. - * Attempt to use the new property to enable extension function - */ - boolean isExtensionSupported = enableExtensionFunction(factory); - - try { - transform(factory); - System.out.println("testEnableExt: OK"); - } catch (TransformerConfigurationException e) { - fail(e.getMessage()); - } catch (TransformerException e) { - fail(e.getMessage()); - } finally { - System.setSecurityManager(null); - } - } - - /** - * use Templates template = factory.newTemplates(new StreamSource( new - * FileInputStream(xslFilename))); // Use the template to create a - * transformer Transformer xformer = template.newTransformer(); - * - * @param factory - * @return - */ - /** - * Security is enabled, use new feature: enableExtensionFunctions Use the - * template to create a transformer - */ - public void testTemplatesEnableExtFunc() { - Policy p = new SimplePolicy(new AllPermission()); - Policy.setPolicy(p); - System.setSecurityManager(new SecurityManager()); - TransformerFactory factory = TransformerFactory.newInstance(); - - /** - * Use of the extension function 'http://exslt.org/strings:tokenize' is - * not allowed when the secure processing feature is set to true. - * Attempt to use the new property to enable extension function - */ - boolean isExtensionSupported = enableExtensionFunction(factory); - - try { - SAXSource xslSource = new SAXSource(new InputSource(xslFile)); - xslSource.setSystemId(xslFileId); - Templates template = factory.newTemplates(xslSource); - Transformer transformer = template.newTransformer(); - StringWriter stringResult = new StringWriter(); - Result result = new StreamResult(stringResult); - transformer.transform(new SAXSource(new InputSource(xmlFile)), result); - System.out.println("testTemplatesEnableExtFunc: OK"); - } catch (TransformerConfigurationException e) { - fail(e.getMessage()); - } catch (TransformerException e) { - fail(e.getMessage()); - } finally { - System.setSecurityManager(null); - } - } - - boolean enableExtensionFunction(TransformerFactory factory) { - boolean isSupported = true; - try { - factory.setFeature(ENABLE_EXTENSION_FUNCTIONS, true); - } catch (TransformerConfigurationException ex) { - isSupported = false; - } - return isSupported; - } - - void transform(TransformerFactory factory) throws TransformerConfigurationException, TransformerException { - SAXSource xslSource = new SAXSource(new InputSource(xslFile)); - xslSource.setSystemId(xslFileId); - Transformer transformer = factory.newTransformer(xslSource); - StringWriter stringResult = new StringWriter(); - Result result = new StreamResult(stringResult); - transformer.transform(new SAXSource(new InputSource(xmlFile)), result); - } - - class SimplePolicy extends Policy { - - private final Permissions perms; - - public SimplePolicy(Permission... permissions) { - perms = new Permissions(); - for (Permission permission : permissions) { - perms.add(permission); - } - } - - @Override - public PermissionCollection getPermissions(CodeSource cs) { - return perms; - } - - @Override - public PermissionCollection getPermissions(ProtectionDomain pd) { - return perms; - } - - @Override - public boolean implies(ProtectionDomain pd, Permission p) { - return perms.implies(p); - } - - //for older jdk - @Override - public void refresh() { - } - } -}
--- a/test/javax/xml/jaxp/transform/jdk8004476/tokenize.xml Wed Feb 12 14:56:43 2014 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<html> -<a> - <b>Is this EXSLT? No. no</b> - <c>Is this EXSLT? No. no</c> -</a> -</html>
--- a/test/javax/xml/jaxp/transform/jdk8004476/tokenize.xsl Wed Feb 12 14:56:43 2014 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:str="http://exslt.org/strings" - xmlns:xalan="http://xml.apache.org/xalan" - version="1.0"> -<xsl:template match="a"> - <xsl:apply-templates /> -</xsl:template> -<xsl:template match="//a/c"> - <xsl:value-of select="." /> - - - <xsl:value-of select="str:tokenize(string(.), ' ')" /> - <xsl:value-of select="str:tokenize(string(.), '')" /> - <xsl:for-each select="str:tokenize(string(.), ' ')"> - <xsl:value-of select="." /> - </xsl:for-each> - <xsl:apply-templates select="*" /> -</xsl:template> -<xsl:template match="//a/b"> - <xsl:value-of select="." /> - - - <xsl:value-of select="xalan:tokenize(string(.), ' ')" /> - <xsl:value-of select="xalan:tokenize(string(.), '')" /> - <xsl:for-each select="xalan:tokenize(string(.), ' ')"> - <xsl:value-of select="." /> - </xsl:for-each> - <xsl:apply-templates select="*" /> -</xsl:template> - -</xsl:stylesheet>