ports/java/openjdk7/files/patch-7u76-b31
Greg Lewis af02cae5b9 . Update to 7u76
. Adopt a patchset strategy similar to the openjdk8 port, which keeps the
  patch files smaller and makes the BSD differences clearer.
2015-02-02 05:00:42 +00:00

42160 lines
1.7 MiB
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--- ./.hgtags Mon Sep 08 12:14:23 2014 -0700
+++ ./.hgtags Mon Jan 05 11:48:37 2015 -0800
@@ -470,11 +470,19 @@
fa242615607fa5f6cdd1ae93bc2fb9cc2100c179 jdk7u65-b18
64dbd70735c775bef1faf873e4bec65d73d597cb jdk7u65-b19
90f56be6f9d90f66e558c4e08084e2b169738fba jdk7u65-b32
+d4397128f8b65eb96287128575dd1a3da6a7825b jdk7u80-b00
+90564f0970e92b844122be27f051655aef6dc423 jdk7u80-b01
+36e8397bf04d972519b80ca9e24e68a2ed1e4dbd jdk7u80-b02
b6da128e8a7957f139933a48580e201e938c4684 jdk7u65-b20
d6a1d32534d188e73f7962d40d21584c44e65acd jdk7u67-b01
64dbd70735c775bef1faf873e4bec65d73d597cb jdk7u65-b40
9dfdf107c6971cd30c7e1f656cddc6b8d495c290 jdk7u65-b31
fe700de0735dc4e8ce5a50971ad3ea3dc052d21d jdk7u65-b33
+d6a1d32534d188e73f7962d40d21584c44e65acd jdk7u67-b01
+d3b934344cb17238ea27cd1e0b824f856addc815 jdk7u67-b31
+79c6f8d257776b93485f4c1014dfcf61cc75a667 jdk7u67-b32
+5aef2a187827f1e7f48a619af4bee118ca99efea jdk7u67-b33
+b86df0257fad12e8802fe43d53e932b7b0253112 jdk7u67-b34
48eb3345e05fe904d2e92067da0abd04a9b375e4 jdk7u66-b00
4fb9423d086d86d212257afd6fc79957f737af5b jdk7u66-b01
964663d4303723fbcb16cf05e857576c08c237ae jdk7u66-b09
@@ -500,3 +508,51 @@
e9663e434024cb6e011013e774445a056417bb3b jdk7u71-b11
78aa78b55b843697a630ed886962ab07d1b76358 jdk7u71-b12
9fc5aeb0e0a8c97b1cd263a55f3aeb030cbcdf89 jdk7u71-b13
+ade1a91dba7391ef319a2fc646138387e6416436 jdk7u71-b14
+423ddccf39073af15eb78623f89f1080612b5b3d jdk7u72-b01
+5f985e54beec37de3ad2261d82665d378143a8dc jdk7u72-b02
+e6e679e8dc418d9174668f445af10e2a6d71ce39 jdk7u72-b03
+32b4ccb2a7ada38639a4869a5628bda061d8563e jdk7u72-b04
+15e7f04f32510469be2ab44b4547cb8acb19d04a jdk7u72-b05
+9c732ba56ec06696e218f7b70ddc432295638d79 jdk7u72-b06
+a7679adac6cc7ff6a2893e4df447c39937f59eda jdk7u72-b07
+44a9b66255b9b8a200c0e53338145bac86381576 jdk7u72-b08
+66c1df24154b1c8c67fd9bed0b6d366452a46fb0 jdk7u72-b09
+a8993ba5a86938e6bd9ab7c41401610b0e36afce jdk7u72-b10
+8d695cc7268f902f235506ac8d3849a4dd118bee jdk7u72-b11
+965b19722fce7a8303b89fc9288f7b6a9cf70922 jdk7u72-b12
+9c6095c8748ba80aa1ffd14f978b24e50abcfdc1 jdk7u72-b13
+fa606411d8fd650334b6f90d626399e13e77740f jdk7u72-b14
+f42462b4dfd81539eacf90955d2d26e1dc1686c0 jdk7u72-b30
+891bb800d7b2abff392669276f9e55ff30ba9962 jdk7u72-b31
+569e053e97b4fecaf1371f7cf2645394edb8a11a jdk7u75-b00
+618b221a71a962f1d62a5b02db1b4256bad9441a jdk7u75-b01
+eb36016211cb5d412c779836bd8efbf133cbf6f5 jdk7u75-b02
+134f5183bd712b940056508bcd0988cce7a60ec7 jdk7u75-b03
+dcc07fe8d380a63c22086abeb62a5a9780b3639c jdk7u75-b04
+5acf5e095d7b3a9364b278911047a4fad15a1ae7 jdk7u75-b05
+709239275717263b600f6c8816b023de3442eb0f jdk7u75-b06
+79414f9ef336b48c3766a7e994ac3efce3877b61 jdk7u75-b07
+0fa6cf059c5c262a410220bfb9ec7d83d44a8030 jdk7u75-b08
+109dfa012fb50a65c9dcb5eb36c530a2001d139b jdk7u75-b09
+a90c928524da634a18ea5a9ca2d6aba839c9bf8a jdk7u75-b10
+ae1470a6681851d99608269ac902383ce44c9f10 jdk7u75-b11
+cca6b8a583cef75117297d9522adc33f7ab516c2 jdk7u75-b12
+669bd350d550600a3f0c4556da9bc4bb6006dc5c jdk7u75-b13
+7d45f621855a37b70a239edc6f8ac3b75ca7862b jdk7u75-b30
+37b5893cb60f897f28b1999be7f88335409beda5 jdk7u75-b31
+b39439fb5dcdef664c7a6cd638642b22c79f2393 jdk7u76-b00
+dc25c29542f743722854fe37336630b23ebccfff jdk7u76-b01
+7402e2fd4c2865f4605fe4d84fa43883029e221d jdk7u76-b02
+d0967df4a33229cf4e297a4892972bc30f23daad jdk7u76-b03
+e840541117dcf21601adb496a8ba2a54b019f3db jdk7u76-b04
+369a28aac29d6cfadfd4ef6930e5b1c2c622b826 jdk7u76-b05
+9304abb58c14bfe3314141ea4176db757e5b5d4f jdk7u76-b06
+6065e7008ae5fa5ae730f8d2318fedac821c50c1 jdk7u76-b07
+c891034902a4d6d2db813bd128dca273c7640baf jdk7u76-b08
+a85cb73f4f32c7faad49b77c307adbd11d481dd1 jdk7u76-b09
+fc18a1bf57b62578466a4de68314bba79721c8fd jdk7u76-b10
+4f5b251f1daa41a9143636a9b8aaf0cf4ce00f26 jdk7u76-b11
+01d1d34f82f30de97a61f8b0048c61aa17d0dd12 jdk7u76-b12
+a9728fbea214dbf6f58567e729fdc5276f3c704f jdk7u76-b13
+a788e9c5671436bb711f0e185cd74b17220d6e35 jdk7u76-b30
--- ./corba/.hgtags Mon Sep 08 12:14:31 2014 -0700
+++ ./corba/.hgtags Mon Jan 05 11:49:17 2015 -0800
@@ -472,11 +472,19 @@
b7f66b9f9e8e099428ed7640a184f6135b77e40d jdk7u65-b18
50ddba8882e7e95150418a30bfc3ee62e3c28c6c jdk7u65-b19
dae3f20d2306622e39606d0dc967147de174afce jdk7u65-b32
+1a3aa4637b80fabbd069ae88c241efcb3520fc49 jdk7u80-b00
+df1decc820934ad8bf91c853e81c88d4f7590e25 jdk7u80-b01
+2444fa7df7e3e07f2533f6c875c3a8e408048f6c jdk7u80-b02
ac05dfedf008e83c2044666a70635cf82e932e41 jdk7u65-b20
244756837ab4b214decd0e6f26b0071a483f143f jdk7u67-b01
50ddba8882e7e95150418a30bfc3ee62e3c28c6c jdk7u65-b40
d2f7358b01d3d8b877b2ec2ca2989bd1daf17472 jdk7u65-b31
2067d7202adcedb80fa676dacb22a0b73d5e8548 jdk7u65-b33
+244756837ab4b214decd0e6f26b0071a483f143f jdk7u67-b01
+507cb7e62dfed67b467a1767d9c56d276551d6f3 jdk7u67-b31
+aef9e24b79543a3b58bb4575266b9b87ca84e4e1 jdk7u67-b32
+7c1d15d36a6c40b4a4f75bc03729136a104d2434 jdk7u67-b33
+f026080f4fcc9eca5589d8747c66bfa123c5a87d jdk7u67-b34
5b8210c41bc41135687028bcb000ca116e2090f6 jdk7u66-b00
9f0f0bdd4cfb01a5d64f9528b7ffda3974171120 jdk7u66-b01
596d979a5d4deb9d10b068479276cd4b2a12432e jdk7u66-b09
@@ -502,3 +510,51 @@
3e804dc3cea9ff145f375a50a161f3e173e8d3f6 jdk7u71-b11
cc3072067ae8ac685d400ced4c0f144d6a1d9f1e jdk7u71-b12
1616089899e25679d6cf70c77023f2a37ff85ad1 jdk7u71-b13
+701e1d5cea2e8065d2282eb3ebe31b6829a72a95 jdk7u71-b14
+287c772d7245396a7a6c7fc409ca8d21ba1ae2c5 jdk7u72-b01
+92552d17915bdf467fe758293eded9e6290f4ce2 jdk7u72-b02
+ae522462810fd74a92b4408b12b036bed5ea3efe jdk7u72-b03
+42a799212f4a287be3d2fd272b9faa3c65326b05 jdk7u72-b04
+a2d4167edbf96cdfda04e829d2baa361ade14bf5 jdk7u72-b05
+01922ce7611b852c7fdc4c0f88c9500c55eccd50 jdk7u72-b06
+b5a2d85c7fce5461d8e1be7e89a891a3ce40f805 jdk7u72-b07
+2b6d8a79df83bc5732ef7c65c51cfe9feac52559 jdk7u72-b08
+c62534f0e97dc7100da18b0b9c034d846f7067dc jdk7u72-b09
+62668c37376f462cfe7bfdfa001f902f52d450ef jdk7u72-b10
+39828d500dfef8045eb5b531182a09ea6ecdfb71 jdk7u72-b11
+990f51c3edeb4f25d0be95d51b23e5a4e8e02f06 jdk7u72-b12
+9e0c893977bba3ed7820f173d386e197f3c06e7b jdk7u72-b13
+bd80d0c18ccd97669dd8392dbde5cd91f647ee1d jdk7u72-b14
+66da7f46eff05df2aa3bb9b5c1f7ee47a75828a5 jdk7u72-b30
+4fefe5c11ddb650e681e2dd5e8ac8dfeb15e6afd jdk7u72-b31
+88772da384953fed254492c3ea9da498381081f2 jdk7u75-b00
+0466441d71122c9af252ec17f597f228dbf64578 jdk7u75-b01
+9aa7fe309fa584ff782ab9d557632321747ba11e jdk7u75-b02
+c734b5009fc92667af13c36b1f23e153a3e2dfca jdk7u75-b03
+f55967c261230a4fcc8d71ecfe58f2f47ea50393 jdk7u75-b04
+86369ed6e77c65496f2c167c00ed48d1e488845c jdk7u75-b05
+6831d2ff20362464a754f53bf8eb3ec1aacd6271 jdk7u75-b06
+33cf9bbc4ff36cb9e65e9fc22eabd606b98b6b8c jdk7u75-b07
+160cce8c24c4af6481426c931e400dfec29fe0d1 jdk7u75-b08
+ac5f25a05f13d81e4e18f5447e60dddee77d8d17 jdk7u75-b09
+c762a8187b1fe223b92aca3aaf7ee2dfe03e2ae6 jdk7u75-b10
+e05b02f8d5c988e55e985d767420e0b7e35d996e jdk7u75-b11
+45136140d2bcf28009271a047eea9a89c95378d7 jdk7u75-b12
+fb49daa5d7f89cbe60ff4b598c6b3e976ad04e4d jdk7u75-b13
+f3d39b94209598ba90e221d60ff3325dbe37fe2e jdk7u75-b30
+94386a790f9469f9da1328a7d0c2a2d63f03404b jdk7u75-b31
+2d6f594ce6c5dafc1ad9a9368186817212120d84 jdk7u76-b00
+b4d4ec688a281a362524291f2cff15c59b85dbb5 jdk7u76-b01
+c24e65a16f334611f95a8ae46769375b20818b74 jdk7u76-b02
+a1de50d45daa0728ea269a9e19e7d83208eec894 jdk7u76-b03
+806fb93eff9b30b3b36b46e04ef25fd62b28e674 jdk7u76-b04
+62f9b33fc90163c4d6b0953405c29f6328d9cd40 jdk7u76-b05
+89194b328cd0e4ef0d672d97e818e58ebf52a23b jdk7u76-b06
+9e17d3cd8fd256417dbecf751d6ac3f8195411b1 jdk7u76-b07
+f224787154b09e211cbb78f99889f6f6c394e60b jdk7u76-b08
+220b87dd1f9b26d3167582c699b6f41ac3516696 jdk7u76-b09
+b10583d82c01a621beb89a4a8e0f4830cdda703b jdk7u76-b10
+c947bf709139b13476a1df4ca8a92583fb1de5a4 jdk7u76-b11
+14f0846f4d1b8373e3e3cce10901f37341bf6980 jdk7u76-b12
+0db41b697138ce89f15c49eef1dc670f94a27d89 jdk7u76-b13
+71a8665159f2f014b1869f3d723d3b6fbe878a16 jdk7u76-b30
--- ./corba/src/share/classes/com/sun/corba/se/impl/corba/AnyImpl.java Mon Sep 08 12:14:31 2014 -0700
+++ ./corba/src/share/classes/com/sun/corba/se/impl/corba/AnyImpl.java Mon Jan 05 11:49:17 2015 -0800
@@ -587,7 +587,7 @@
java.lang.Object[] objholder = new java.lang.Object[1];
objholder[0] = object;
long[] longholder = new long[1];
- TCUtility.unmarshalIn(in, typeCode, longholder, objholder);
+ TCUtility.unmarshalIn(in, realType(), longholder, objholder);
value = longholder[0];
object = objholder[0];
stream = null;
--- ./corba/src/share/classes/com/sun/corba/se/impl/io/OutputStreamHook.java Mon Sep 08 12:14:31 2014 -0700
+++ ./corba/src/share/classes/com/sun/corba/se/impl/io/OutputStreamHook.java Mon Jan 05 11:49:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -35,7 +35,8 @@
import java.io.OutputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectOutput;
-import java.util.Hashtable;
+import java.util.Map;
+import java.util.HashMap;
import org.omg.CORBA.INTERNAL;
@@ -49,7 +50,7 @@
*/
private class HookPutFields extends ObjectOutputStream.PutField
{
- private Hashtable fields = new Hashtable();
+ private Map<String,Object> fields = new HashMap<>();
/**
* Put the value of the named boolean field into the persistent field.
@@ -140,7 +141,6 @@
public OutputStreamHook()
throws java.io.IOException {
super();
-
}
public void defaultWriteObject() throws IOException {
--- ./corba/src/share/classes/com/sun/corba/se/impl/transport/SocketOrChannelAcceptorImpl.java Mon Sep 08 12:14:31 2014 -0700
+++ ./corba/src/share/classes/com/sun/corba/se/impl/transport/SocketOrChannelAcceptorImpl.java Mon Jan 05 11:49:17 2015 -0800
@@ -253,6 +253,13 @@
// registered with the selector. Otherwise if the bytes
// are read on the connection it will attempt a time stamp
// but the cache will be null, resulting in NPE.
+
+ // A connection needs to be timestamped before putting to the cache.
+ // Otherwise the newly created connection (with 0 timestamp) could be
+ // incorrectly reclaimed by concurrent reclaim() call OR if there
+ // will be no events on this connection then it could be reclaimed
+ // by upcoming reclaim() call.
+ getConnectionCache().stampTime(connection);
getConnectionCache().put(this, connection);
if (connection.shouldRegisterServerReadEvent()) {
--- ./hotspot/.hgtags Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/.hgtags Mon Jan 05 11:51:17 2015 -0800
@@ -690,11 +690,26 @@
d006213be74730453cf5c3ce31f1d1d505334419 jdk7u65-b18
1d8226b3e9896656451801393eb3ae394faeb638 jdk7u65-b19
c43b0b843f897a4d8cf0a3566b017b87230dd3b4 jdk7u65-b32
+b92f390febd01615af4a736b4f830f6052aa1d09 hs24.80-b00
+1448ebfef4f1aae0174eca983ad05507730ca6fd hs24.80-b01
+b1d29549dca7e36a4d050af5a54f8f56963a5c7d hs24.80-b02
+ff18bcebe2943527cdbc094375c38c27ec7f2442 hs24.80-b03
+1b9722b5134a8e565d8b8fe851849e034beff057 hs24.80-b04
+04d6919c44db8c9d811ef0ac4775a579f854cdfc hs24.80-b05
+ee18e60e7e8da9f1912895af353564de0330a2b1 hs24.80-b06
+05fe7a87d14908eb3f21a0d29fc72cee2f996b7f jdk7u80-b00
+e2533d62ca887078e4b952a75a75680cfb7894b9 jdk7u80-b01
+bad107a5d096b070355c5a2d80aa50bc5576144b jdk7u80-b02
d3c9265e12fa115052f18d1e3d379143b56bbf63 jdk7u65-b20
39776d90970221dd260187acb4c37631e41a66a9 jdk7u67-b01
1d8226b3e9896656451801393eb3ae394faeb638 jdk7u65-b40
cf8b3a090e597e59177c5f67d44cdec12309777f jdk7u65-b31
df855c3f4d31dd7db081d68e3054518380127893 jdk7u65-b33
+39776d90970221dd260187acb4c37631e41a66a9 jdk7u67-b01
+7152f5f6395c66c8d6389100d880882d5cfe9af3 jdk7u67-b31
+4fb7952ebba8ba45be16bdc64184259e8076ffcf jdk7u67-b32
+a20f1b6311e10b755d949a088e7aeca2ba088a59 jdk7u67-b33
+39c07d2fb4d3d97bf3bb53c1c1e199709c5c49fe jdk7u67-b34
6b37a189944aaa09e81d97d394496464d16bee42 jdk7u66-b00
121dc94194d9234e2b13c867d875e23e1bdd6abd jdk7u66-b01
f28ea516eb0b9e99f1e342954ab4642456af4da1 jdk7u66-b09
@@ -720,3 +735,51 @@
d6cb97651f0bd8d61f4d22aa7550145bbe6fb051 jdk7u71-b11
959b4e5d2e3111920c198187f3bc66eba3e457f1 jdk7u71-b12
608f470d22689bab17bab0ea1dbee3e1a0802d5b jdk7u71-b13
+ad909197a1ce2df483a20ff9ac380382f779a9d3 jdk7u71-b14
+1bd3adac3aac3c29c81303812b35f484ff90cb2b jdk7u72-b01
+0caed46767e35c00eff69b22acf984d98eb66b3d jdk7u72-b02
+3a2934191de4bb8ca9d2faca93f3381e521e8cac jdk7u72-b03
+e4708cde2898df4c936595aacb57bc5b4e15869a jdk7u72-b04
+137e0859cd296cb8d9f9e327112ddc793ed59318 jdk7u72-b05
+4d9d227d70f33b70461230172386217317954312 jdk7u72-b06
+ece56f93f37b41b9c8875e54fbd8010277f6b460 jdk7u72-b07
+439c695a7aa03652ab92681120434b9ce8cdd2b7 jdk7u72-b08
+a27f16d45457a68a723acca621cb11bc173a0eb6 jdk7u72-b09
+e6508ab77271d1d3ce7b5f60d91a7334fdacb03a jdk7u72-b10
+c17a8487086433e14cd22373039a8b6b48e7cbb8 jdk7u72-b11
+a9e695f0d831f115720a4dcad3d33e0003b0acad jdk7u72-b12
+ac701f87d1ea46033c69f3e1cb84fc0a971da70c jdk7u72-b13
+d9b56c6bdddb6f9d8242230f5fdd58f9c7d30ea5 jdk7u72-b14
+a6ae698522bfab3c595a4f8c2c3ee7e8939eb1bb jdk7u72-b30
+492a2abed4ca015459e24f7348233531b7e929d2 jdk7u72-b31
+e6b6d91b3934c281086f8efacb0926e7451cc18b jdk7u75-b00
+9096ac248b379a0f3012f18c7289ec47cdef8459 jdk7u75-b01
+a6964b2822d906eab9c923cdd723cf3dd4facfcd jdk7u75-b02
+6c1a8b7ed616311a932715428620e262076bb68a jdk7u75-b03
+2480d9d778301a3f88b0ab8ee35a585df82528e5 jdk7u75-b04
+d81faf9016ce5c9f98264b1f724b3d6d85b12c07 jdk7u75-b05
+2ec4b796b1de3cfe58f051111dfd70ab367e553e jdk7u75-b06
+1d3906064cae18fdb0ff9a2045f2d8d48067bcd1 jdk7u75-b07
+dfcf951330b6f7c1a3cb88c819e94f680054a970 jdk7u75-b08
+ca20e7886db63792593f048f7308aed383775829 jdk7u75-b09
+5a0321dcf89383c31f3c6e4827b3275f9ef09a5e jdk7u75-b10
+82dcfb646bd5bc9f3674cb02ea9ba2598cff6bbe jdk7u75-b11
+18b74ded3ffc2e6fc5a3853f923c8dd49849dee1 jdk7u75-b12
+384fba17a49738baddeb55a4bfcf00b01af199ef jdk7u75-b13
+0c7d7c067c46fa0ddcb9170bed1d52f52a9ec831 jdk7u75-b30
+db9672d640ffd4e81348bdb718afab76032d8858 jdk7u75-b31
+3c01618f40c059bf192c0b16176b144113965ea7 jdk7u76-b00
+7b5d132c3a70f3c0667fe9df4cae045b46673267 jdk7u76-b01
+10c2cb5743cac7d6fedc9307af8450283367e5e2 jdk7u76-b02
+99a8d8e3f1c6311853bfc0a86de503830cd3db1a jdk7u76-b03
+15079dd9fd20f252d4c6dc6972508d3375cf5af2 jdk7u76-b04
+0ac38b5b642738fb27b446b0c1bc6108f31f197c jdk7u76-b05
+8580db8e38a232978f69fe627f3373e12c467803 jdk7u76-b06
+475a5cf6fc80c085c1be11b502ef44e7206c73d3 jdk7u76-b07
+64a7fa638019deebae59be4a4a262cfa1d7947ad jdk7u76-b08
+103eec0b084f7dfa0afce1ed9adebd6a9fab1aa8 jdk7u76-b09
+82b681cadc354b08b0aa2858d9b7f78576a8c1a4 jdk7u76-b10
+fd16bf65cfed7208af5740977a6699d18ac103b2 jdk7u76-b11
+e375023d196199ffb263cb15739f7218e1621be6 jdk7u76-b12
+a395c29532e5322657c542d54dd957940cf2f523 jdk7u76-b13
+98f0c5279ba76eb1b5741dc67f7b5f10e7508449 jdk7u76-b30
--- ./hotspot/agent/src/os/linux/libproc.h Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/agent/src/os/linux/libproc.h Mon Jan 05 11:51:17 2015 -0800
@@ -34,19 +34,7 @@
#include "libproc_md.h"
#endif
-#if defined(sparc) || defined(sparcv9)
-/*
- If _LP64 is defined ptrace.h should be taken from /usr/include/asm-sparc64
- otherwise it should be from /usr/include/asm-sparc
- These two files define pt_regs structure differently
-*/
-#ifdef _LP64
-#include "asm-sparc64/ptrace.h"
-#else
-#include "asm-sparc/ptrace.h"
-#endif
-
-#endif //sparc or sparcv9
+#include <linux/ptrace.h>
/************************************************************************************
--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -61,8 +61,9 @@
long h = 0;
int s = 0;
int len = buf.length;
+ // Emulate the unsigned int in java_lang_String::hash_code
while (len-- > 0) {
- h = 31*h + (0xFFL & buf[s]);
+ h = 31*h + (0xFFFFFFFFL & buf[s]);
s++;
}
return h & 0xFFFFFFFFL;
--- ./hotspot/make/bsd/makefiles/mapfile-vers-debug Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/make/bsd/makefiles/mapfile-vers-debug Mon Jan 05 11:51:17 2015 -0800
@@ -158,6 +158,7 @@
_JVM_GetStackTraceElement
_JVM_GetSystemPackage
_JVM_GetSystemPackages
+ _JVM_GetTemporaryDirectory
_JVM_GetThreadStateNames
_JVM_GetThreadStateValues
_JVM_GetVersionInfo
--- ./hotspot/make/bsd/makefiles/mapfile-vers-product Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/make/bsd/makefiles/mapfile-vers-product Mon Jan 05 11:51:17 2015 -0800
@@ -158,6 +158,7 @@
_JVM_GetStackTraceElement
_JVM_GetSystemPackage
_JVM_GetSystemPackages
+ _JVM_GetTemporaryDirectory
_JVM_GetThreadStateNames
_JVM_GetThreadStateValues
_JVM_GetVersionInfo
--- ./hotspot/make/hotspot_version Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/make/hotspot_version Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2006, 2015, 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
@@ -31,11 +31,11 @@
#
# Don't put quotes (fail windows build).
-HOTSPOT_VM_COPYRIGHT=Copyright 2014
+HOTSPOT_VM_COPYRIGHT=Copyright 2015
HS_MAJOR_VER=24
-HS_MINOR_VER=71
-HS_BUILD_NUMBER=01
+HS_MINOR_VER=76
+HS_BUILD_NUMBER=04
JDK_MAJOR_VER=1
JDK_MINOR_VER=7
--- ./hotspot/make/jprt.properties Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/make/jprt.properties Mon Jan 05 11:51:17 2015 -0800
@@ -38,7 +38,7 @@
# This tells jprt what default release we want to build
-jprt.hotspot.default.release=jdk7u40
+jprt.hotspot.default.release=jdk7u60
jprt.tools.default.release=${jprt.submit.option.release?${jprt.submit.option.release}:${jprt.hotspot.default.release}}
@@ -54,97 +54,92 @@
# Define the Solaris platforms we want for the various releases
jprt.my.solaris.sparc.jdk8=solaris_sparc_5.10
jprt.my.solaris.sparc.jdk7=solaris_sparc_5.10
-jprt.my.solaris.sparc.jdk7u40=${jprt.my.solaris.sparc.jdk7}
+jprt.my.solaris.sparc.jdk7u60=${jprt.my.solaris.sparc.jdk7}
jprt.my.solaris.sparc=${jprt.my.solaris.sparc.${jprt.tools.default.release}}
jprt.my.solaris.sparcv9.jdk8=solaris_sparcv9_5.10
jprt.my.solaris.sparcv9.jdk7=solaris_sparcv9_5.10
-jprt.my.solaris.sparcv9.jdk7u40=${jprt.my.solaris.sparcv9.jdk7}
+jprt.my.solaris.sparcv9.jdk7u60=${jprt.my.solaris.sparcv9.jdk7}
jprt.my.solaris.sparcv9=${jprt.my.solaris.sparcv9.${jprt.tools.default.release}}
jprt.my.solaris.i586.jdk8=solaris_i586_5.10
jprt.my.solaris.i586.jdk7=solaris_i586_5.10
-jprt.my.solaris.i586.jdk7u40=${jprt.my.solaris.i586.jdk7}
+jprt.my.solaris.i586.jdk7u60=${jprt.my.solaris.i586.jdk7}
jprt.my.solaris.i586=${jprt.my.solaris.i586.${jprt.tools.default.release}}
jprt.my.solaris.x64.jdk8=solaris_x64_5.10
jprt.my.solaris.x64.jdk7=solaris_x64_5.10
-jprt.my.solaris.x64.jdk7u40=${jprt.my.solaris.x64.jdk7}
+jprt.my.solaris.x64.jdk7u60=${jprt.my.solaris.x64.jdk7}
jprt.my.solaris.x64=${jprt.my.solaris.x64.${jprt.tools.default.release}}
jprt.my.linux.i586.jdk8=linux_i586_2.6
jprt.my.linux.i586.jdk7=linux_i586_2.6
-jprt.my.linux.i586.jdk7u40=${jprt.my.linux.i586.jdk7}
+jprt.my.linux.i586.jdk7u60=${jprt.my.linux.i586.jdk7}
jprt.my.linux.i586=${jprt.my.linux.i586.${jprt.tools.default.release}}
jprt.my.linux.x64.jdk8=linux_x64_2.6
jprt.my.linux.x64.jdk7=linux_x64_2.6
-jprt.my.linux.x64.jdk7u40=${jprt.my.linux.x64.jdk7}
+jprt.my.linux.x64.jdk7u60=${jprt.my.linux.x64.jdk7}
jprt.my.linux.x64=${jprt.my.linux.x64.${jprt.tools.default.release}}
jprt.my.linux.ppc.jdk8=linux_ppc_2.6
jprt.my.linux.ppc.jdk7=linux_ppc_2.6
-jprt.my.linux.ppc.jdk7u40=${jprt.my.linux.ppc.jdk7}
+jprt.my.linux.ppc.jdk7u60=${jprt.my.linux.ppc.jdk7}
jprt.my.linux.ppc=${jprt.my.linux.ppc.${jprt.tools.default.release}}
jprt.my.linux.ppcv2.jdk8=linux_ppcv2_2.6
jprt.my.linux.ppcv2.jdk7=linux_ppcv2_2.6
-jprt.my.linux.ppcv2.jdk7u40=${jprt.my.linux.ppcv2.jdk7}
+jprt.my.linux.ppcv2.jdk7u60=${jprt.my.linux.ppcv2.jdk7}
jprt.my.linux.ppcv2=${jprt.my.linux.ppcv2.${jprt.tools.default.release}}
-jprt.my.linux.ppcsflt.jdk8=linux_ppcsflt_2.6
-jprt.my.linux.ppcsflt.jdk7=linux_ppcsflt_2.6
-jprt.my.linux.ppcsflt.jdk7u40=${jprt.my.linux.ppcsflt.jdk7}
-jprt.my.linux.ppcsflt=${jprt.my.linux.ppcsflt.${jprt.tools.default.release}}
-
jprt.my.linux.armvfp.jdk8=linux_armvfp_2.6
jprt.my.linux.armvfp.jdk7=linux_armvfp_2.6
-jprt.my.linux.armvfp.jdk7u40=${jprt.my.linux.armvfp.jdk7}
+jprt.my.linux.armvfp.jdk7u60=${jprt.my.linux.armvfp.jdk7}
jprt.my.linux.armvfp=${jprt.my.linux.armvfp.${jprt.tools.default.release}}
jprt.my.linux.armvfpsflt.jdk8=linux_armvfpsflt_2.6
jprt.my.linux.armvfpsflt.jdk7=linux_armvfpsflt_2.6
-jprt.my.linux.armvfpsflt.jdk7u40=${jprt.my.linux.armvfpsflt.jdk7}
+jprt.my.linux.armvfpsflt.jdk7u60=${jprt.my.linux.armvfpsflt.jdk7}
jprt.my.linux.armvfpsflt=${jprt.my.linux.armvfpsflt.${jprt.tools.default.release}}
jprt.my.linux.armvfphflt.jdk8=linux_armvfphflt_2.6
jprt.my.linux.armvfphflt.jdk7=linux_armvfphflt_2.6
-jprt.my.linux.armvfphflt.jdk7u40=${jprt.my.linux.armvfphflt.jdk7}
+jprt.my.linux.armvfphflt.jdk7u60=${jprt.my.linux.armvfphflt.jdk7}
jprt.my.linux.armvfphflt=${jprt.my.linux.armvfphflt.${jprt.tools.default.release}}
jprt.my.linux.armv6.jdk8=linux_armv6_2.6
jprt.my.linux.armv6.jdk7=linux_armv6_2.6
-jprt.my.linux.armv6.jdk7u40=${jprt.my.linux.armv6.jdk7}
+jprt.my.linux.armv6.jdk7u60=${jprt.my.linux.armv6.jdk7}
jprt.my.linux.armv6=${jprt.my.linux.armv6.${jprt.tools.default.release}}
jprt.my.linux.armvs.jdk8=linux_armvs_2.6
jprt.my.linux.armvs.jdk7=linux_armvs_2.6
-jprt.my.linux.armvs.jdk7u40=${jprt.my.linux.armvs.jdk7}
+jprt.my.linux.armvs.jdk7u60=${jprt.my.linux.armvs.jdk7}
jprt.my.linux.armvs=${jprt.my.linux.armvs.${jprt.tools.default.release}}
jprt.my.linux.armvh.jdk8=linux_armvh_2.6
jprt.my.linux.armvh.jdk7=linux_armvh_2.6
-jprt.my.linux.armvh.jdk7u40=${jprt.my.linux.armvh.jdk7}
+jprt.my.linux.armvh.jdk7u60=${jprt.my.linux.armvh.jdk7}
jprt.my.linux.armvh=${jprt.my.linux.armvh.${jprt.tools.default.release}}
jprt.my.linux.armsflt.jdk8=linux_armsflt_2.6
jprt.my.linux.armsflt.jdk7=linux_armsflt_2.6
-jprt.my.linux.armsflt.jdk7u40=${jprt.my.linux.armsflt.jdk7}
+jprt.my.linux.armsflt.jdk7u60=${jprt.my.linux.armsflt.jdk7}
jprt.my.linux.armsflt=${jprt.my.linux.armsflt.${jprt.tools.default.release}}
jprt.my.macosx.x64.jdk8=macosx_x64_10.7
jprt.my.macosx.x64.jdk7=macosx_x64_10.7
-jprt.my.macosx.x64.jdk7u40=${jprt.my.macosx.x64.jdk7}
+jprt.my.macosx.x64.jdk7u60=${jprt.my.macosx.x64.jdk7}
jprt.my.macosx.x64=${jprt.my.macosx.x64.${jprt.tools.default.release}}
jprt.my.windows.i586.jdk8=windows_i586_5.1
jprt.my.windows.i586.jdk7=windows_i586_5.1
-jprt.my.windows.i586.jdk7u40=${jprt.my.windows.i586.jdk7}
+jprt.my.windows.i586.jdk7u60=${jprt.my.windows.i586.jdk7}
jprt.my.windows.i586=${jprt.my.windows.i586.${jprt.tools.default.release}}
jprt.my.windows.x64.jdk8=windows_x64_5.2
jprt.my.windows.x64.jdk7=windows_x64_5.2
-jprt.my.windows.x64.jdk7u40=${jprt.my.windows.x64.jdk7}
+jprt.my.windows.x64.jdk7u60=${jprt.my.windows.x64.jdk7}
jprt.my.windows.x64=${jprt.my.windows.x64.${jprt.tools.default.release}}
# Standard list of jprt build targets for this source tree
@@ -172,7 +167,6 @@
${jprt.my.linux.i586}-{productEmb|fastdebugEmb|debugEmb}, \
${jprt.my.linux.ppc}-{productEmb|fastdebugEmb}, \
${jprt.my.linux.ppcv2}-{productEmb|fastdebugEmb}, \
- ${jprt.my.linux.ppcsflt}-{productEmb|fastdebugEmb}, \
${jprt.my.linux.armvfp}-{productEmb|fastdebugEmb}, \
${jprt.my.linux.armsflt}-{productEmb|fastdebugEmb}, \
${jprt.my.linux.armvfpsflt}-{productEmb|fastdebugEmb}, \
@@ -183,7 +177,7 @@
jprt.build.targets.jdk8=${jprt.build.targets.all}
jprt.build.targets.jdk7=${jprt.build.targets.all}
-jprt.build.targets.jdk7u40=${jprt.build.targets.all}
+jprt.build.targets.jdk7u60=${jprt.build.targets.all}
jprt.build.targets=${jprt.build.targets.${jprt.tools.default.release}}
# Subset lists of test targets for this source tree
@@ -476,7 +470,7 @@
jprt.test.targets.jdk8=${jprt.test.targets.standard}
jprt.test.targets.jdk7=${jprt.test.targets.standard}
-jprt.test.targets.jdk7u40=${jprt.test.targets.jdk7}
+jprt.test.targets.jdk7u60=${jprt.test.targets.jdk7}
jprt.test.targets=${jprt.test.targets.${jprt.tools.default.release}}
# The default test/Makefile targets that should be run
@@ -536,7 +530,7 @@
jprt.make.rule.test.targets.jdk8=${jprt.make.rule.test.targets.standard}
jprt.make.rule.test.targets.jdk7=${jprt.make.rule.test.targets.standard}
-jprt.make.rule.test.targets.jdk7u40=${jprt.make.rule.test.targets.jdk7}
+jprt.make.rule.test.targets.jdk7u60=${jprt.make.rule.test.targets.jdk7}
jprt.make.rule.test.targets=${jprt.make.rule.test.targets.${jprt.tools.default.release}}
# 7155453: Work-around to prevent popups on OSX from blocking test completion
--- ./hotspot/make/linux/makefiles/mapfile-vers-debug Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/make/linux/makefiles/mapfile-vers-debug Mon Jan 05 11:51:17 2015 -0800
@@ -123,7 +123,7 @@
JVM_GetClassModifiers;
JVM_GetClassName;
JVM_GetClassNameUTF;
- JVM_GetClassSignature;
+ JVM_GetClassSignature;
JVM_GetClassSigners;
JVM_GetComponentType;
JVM_GetDeclaredClasses;
@@ -160,6 +160,7 @@
JVM_GetStackTraceElement;
JVM_GetSystemPackage;
JVM_GetSystemPackages;
+ JVM_GetTemporaryDirectory;
JVM_GetThreadStateNames;
JVM_GetThreadStateValues;
JVM_GetVersionInfo;
--- ./hotspot/make/linux/makefiles/mapfile-vers-product Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/make/linux/makefiles/mapfile-vers-product Mon Jan 05 11:51:17 2015 -0800
@@ -160,6 +160,7 @@
JVM_GetStackTraceElement;
JVM_GetSystemPackage;
JVM_GetSystemPackages;
+ JVM_GetTemporaryDirectory;
JVM_GetThreadStateNames;
JVM_GetThreadStateValues;
JVM_GetVersionInfo;
--- ./hotspot/make/solaris/makefiles/mapfile-vers Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/make/solaris/makefiles/mapfile-vers Mon Jan 05 11:51:17 2015 -0800
@@ -160,6 +160,7 @@
JVM_GetStackTraceElement;
JVM_GetSystemPackage;
JVM_GetSystemPackages;
+ JVM_GetTemporaryDirectory;
JVM_GetThreadStateNames;
JVM_GetThreadStateValues;
JVM_GetVersionInfo;
--- ./hotspot/src/cpu/sparc/vm/assembler_sparc.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/cpu/sparc/vm/assembler_sparc.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -1745,7 +1745,7 @@
inline void swap( Register s1, Register s2, Register d );
inline void swap( Register s1, int simm13a, Register d);
- inline void swap( Address& a, Register d, int offset = 0 );
+ inline void swap( const Address& a, Register d, int offset = 0 );
// pp 232
--- ./hotspot/src/cpu/sparc/vm/assembler_sparc.inline.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/cpu/sparc/vm/assembler_sparc.inline.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -347,7 +347,7 @@
inline void Assembler::swap( Register s1, Register s2, Register d) { v9_dep(); emit_long( op(ldst_op) | rd(d) | op3(swap_op3) | rs1(s1) | rs2(s2) ); }
inline void Assembler::swap( Register s1, int simm13a, Register d) { v9_dep(); emit_data( op(ldst_op) | rd(d) | op3(swap_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
-inline void Assembler::swap( Address& a, Register d, int offset ) {
+inline void Assembler::swap( const Address& a, Register d, int offset ) {
relocate(a.rspec(offset));
if (a.has_index()) { assert(offset == 0, ""); swap( a.base(), a.index(), d ); }
else { swap( a.base(), a.disp() + offset, d ); }
--- ./hotspot/src/cpu/sparc/vm/copy_sparc.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/cpu/sparc/vm/copy_sparc.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -184,7 +184,7 @@
assert(MinObjAlignmentInBytes >= BytesPerLong, "need alternate implementation");
if (value == 0 && UseBlockZeroing &&
- (count > (BlockZeroingLowLimit >> LogHeapWordSize))) {
+ (count > (size_t)(BlockZeroingLowLimit >> LogHeapWordSize))) {
// Call it only when block zeroing is used
((_zero_Fn)StubRoutines::zero_aligned_words())(tohw, count);
} else {
--- ./hotspot/src/cpu/sparc/vm/frame_sparc.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/cpu/sparc/vm/frame_sparc.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -282,8 +282,8 @@
// next two fns read and write Lmonitors value,
private:
- BasicObjectLock* interpreter_frame_monitors() const { return *interpreter_frame_monitors_addr(); }
- void interpreter_frame_set_monitors(BasicObjectLock* monitors) { *interpreter_frame_monitors_addr() = monitors; }
+ BasicObjectLock* interpreter_frame_monitors() const;
+ void interpreter_frame_set_monitors(BasicObjectLock* monitors);
#else
public:
inline interpreterState get_interpreterState() const {
--- ./hotspot/src/cpu/sparc/vm/frame_sparc.inline.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/cpu/sparc/vm/frame_sparc.inline.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -217,6 +217,13 @@
return (methodOop*)sp_addr_at( Lmethod->sp_offset_in_saved_window());
}
+inline BasicObjectLock* frame::interpreter_frame_monitors() const {
+ return *interpreter_frame_monitors_addr();
+}
+
+inline void frame::interpreter_frame_set_monitors(BasicObjectLock* monitors) {
+ *interpreter_frame_monitors_addr() = monitors;
+}
// Constant pool cache
--- ./hotspot/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1142,50 +1142,81 @@
// Hoist any int/ptr/long's in the first 6 to int regs.
// Hoist any flt/dbl's in the first 16 dbl regs.
int j = 0; // Count of actual args, not HALVES
- for( int i=0; i<total_args_passed; i++, j++ ) {
- switch( sig_bt[i] ) {
+ VMRegPair param_array_reg; // location of the argument in the parameter array
+ for (int i = 0; i < total_args_passed; i++, j++) {
+ param_array_reg.set_bad();
+ switch (sig_bt[i]) {
case T_BOOLEAN:
case T_BYTE:
case T_CHAR:
case T_INT:
case T_SHORT:
- regs[i].set1( int_stk_helper( j ) ); break;
+ regs[i].set1(int_stk_helper(j));
+ break;
case T_LONG:
- assert( sig_bt[i+1] == T_VOID, "expecting half" );
+ assert(sig_bt[i+1] == T_VOID, "expecting half");
case T_ADDRESS: // raw pointers, like current thread, for VM calls
case T_ARRAY:
case T_OBJECT:
- regs[i].set2( int_stk_helper( j ) );
+ regs[i].set2(int_stk_helper(j));
break;
case T_FLOAT:
- if ( j < 16 ) {
- // V9ism: floats go in ODD registers
- regs[i].set1(as_FloatRegister(1 + (j<<1))->as_VMReg());
- } else {
- // V9ism: floats go in ODD stack slot
- regs[i].set1(VMRegImpl::stack2reg(1 + (j<<1)));
+ // Per SPARC Compliance Definition 2.4.1, page 3P-12 available here
+ // http://www.sparc.org/wp-content/uploads/2014/01/SCD.2.4.1.pdf.gz
+ //
+ // "When a callee prototype exists, and does not indicate variable arguments,
+ // floating-point values assigned to locations %sp+BIAS+128 through %sp+BIAS+248
+ // will be promoted to floating-point registers"
+ //
+ // By "promoted" it means that the argument is located in two places, an unused
+ // spill slot in the "parameter array" (starts at %sp+BIAS+128), and a live
+ // float register. In most cases, there are 6 or fewer arguments of any type,
+ // and the standard parameter array slots (%sp+BIAS+128 to %sp+BIAS+176 exclusive)
+ // serve as shadow slots. Per the spec floating point registers %d6 to %d16
+ // require slots beyond that (up to %sp+BIAS+248).
+ //
+ {
+ // V9ism: floats go in ODD registers and stack slots
+ int float_index = 1 + (j << 1);
+ param_array_reg.set1(VMRegImpl::stack2reg(float_index));
+ if (j < 16) {
+ regs[i].set1(as_FloatRegister(float_index)->as_VMReg());
+ } else {
+ regs[i] = param_array_reg;
+ }
}
break;
case T_DOUBLE:
- assert( sig_bt[i+1] == T_VOID, "expecting half" );
- if ( j < 16 ) {
- // V9ism: doubles go in EVEN/ODD regs
- regs[i].set2(as_FloatRegister(j<<1)->as_VMReg());
- } else {
- // V9ism: doubles go in EVEN/ODD stack slots
- regs[i].set2(VMRegImpl::stack2reg(j<<1));
+ {
+ assert(sig_bt[i + 1] == T_VOID, "expecting half");
+ // V9ism: doubles go in EVEN/ODD regs and stack slots
+ int double_index = (j << 1);
+ param_array_reg.set2(VMRegImpl::stack2reg(double_index));
+ if (j < 16) {
+ regs[i].set2(as_FloatRegister(double_index)->as_VMReg());
+ } else {
+ // V9ism: doubles go in EVEN/ODD stack slots
+ regs[i] = param_array_reg;
+ }
}
break;
- case T_VOID: regs[i].set_bad(); j--; break; // Do not count HALVES
+ case T_VOID:
+ regs[i].set_bad();
+ j--;
+ break; // Do not count HALVES
default:
ShouldNotReachHere();
}
- if (regs[i].first()->is_stack()) {
- int off = regs[i].first()->reg2stack();
+ // Keep track of the deepest parameter array slot.
+ if (!param_array_reg.first()->is_valid()) {
+ param_array_reg = regs[i];
+ }
+ if (param_array_reg.first()->is_stack()) {
+ int off = param_array_reg.first()->reg2stack();
if (off > max_stack_slots) max_stack_slots = off;
}
- if (regs[i].second()->is_stack()) {
- int off = regs[i].second()->reg2stack();
+ if (param_array_reg.second()->is_stack()) {
+ int off = param_array_reg.second()->reg2stack();
if (off > max_stack_slots) max_stack_slots = off;
}
}
@@ -1193,8 +1224,8 @@
#else // _LP64
// V8 convention: first 6 things in O-regs, rest on stack.
// Alignment is willy-nilly.
- for( int i=0; i<total_args_passed; i++ ) {
- switch( sig_bt[i] ) {
+ for (int i = 0; i < total_args_passed; i++) {
+ switch (sig_bt[i]) {
case T_ADDRESS: // raw pointers, like current thread, for VM calls
case T_ARRAY:
case T_BOOLEAN:
@@ -1204,23 +1235,23 @@
case T_INT:
case T_OBJECT:
case T_SHORT:
- regs[i].set1( int_stk_helper( i ) );
+ regs[i].set1(int_stk_helper(i));
break;
case T_DOUBLE:
case T_LONG:
- assert( sig_bt[i+1] == T_VOID, "expecting half" );
- regs[i].set_pair( int_stk_helper( i+1 ), int_stk_helper( i ) );
+ assert(sig_bt[i + 1] == T_VOID, "expecting half");
+ regs[i].set_pair(int_stk_helper(i + 1), int_stk_helper(i));
break;
case T_VOID: regs[i].set_bad(); break;
default:
ShouldNotReachHere();
}
if (regs[i].first()->is_stack()) {
- int off = regs[i].first()->reg2stack();
+ int off = regs[i].first()->reg2stack();
if (off > max_stack_slots) max_stack_slots = off;
}
if (regs[i].second()->is_stack()) {
- int off = regs[i].second()->reg2stack();
+ int off = regs[i].second()->reg2stack();
if (off > max_stack_slots) max_stack_slots = off;
}
}
@@ -1369,11 +1400,10 @@
const Register rOop = src.first()->as_Register();
const Register rHandle = L5;
int oop_slot = rOop->input_number() * VMRegImpl::slots_per_word + oop_handle_offset;
- int offset = oop_slot*VMRegImpl::stack_slot_size;
- Label skip;
+ int offset = oop_slot * VMRegImpl::stack_slot_size;
__ st_ptr(rOop, SP, offset + STACK_BIAS);
if (is_receiver) {
- *receiver_offset = oop_slot * VMRegImpl::stack_slot_size;
+ *receiver_offset = offset;
}
map->set_oop(VMRegImpl::stack2reg(oop_slot));
__ add(SP, offset + STACK_BIAS, rHandle);
--- ./hotspot/src/cpu/sparc/vm/sparc.ad Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/cpu/sparc/vm/sparc.ad Mon Jan 05 11:51:17 2015 -0800
@@ -1978,7 +1978,7 @@
// to implement the UseStrictFP mode.
const bool Matcher::strict_fp_requires_explicit_rounding = false;
-// Are floats conerted to double when stored to stack during deoptimization?
+// Are floats converted to double when stored to stack during deoptimization?
// Sparc does not handle callee-save floats.
bool Matcher::float_in_double() { return false; }
@@ -3216,7 +3216,7 @@
// are owned by the CALLEE. Holes should not be nessecary in the
// incoming area, as the Java calling convention is completely under
// the control of the AD file. Doubles can be sorted and packed to
-// avoid holes. Holes in the outgoing arguments may be nessecary for
+// avoid holes. Holes in the outgoing arguments may be necessary for
// varargs C calling conventions.
// Note 3: Region 0-3 is even aligned, with pad2 as needed. Region 3-5 is
// even aligned with pad0 as needed.
@@ -3282,7 +3282,7 @@
%}
// Body of function which returns an OptoRegs array locating
- // arguments either in registers or in stack slots for callin
+ // arguments either in registers or in stack slots for calling
// C.
c_calling_convention %{
// This is obviously always outgoing
--- ./hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -89,7 +89,7 @@
private:
#ifdef PRODUCT
-#define inc_counter_np(a,b,c) (0)
+#define inc_counter_np(a,b,c)
#else
#define inc_counter_np(counter, t1, t2) \
BLOCK_COMMENT("inc_counter " #counter); \
@@ -1126,7 +1126,7 @@
Label& L_loop, bool use_prefetch, bool use_bis);
void disjoint_copy_core(Register from, Register to, Register count, int log2_elem_size,
- int iter_size, CopyLoopFunc copy_loop_func) {
+ int iter_size, StubGenerator::CopyLoopFunc copy_loop_func) {
Label L_copy;
assert(log2_elem_size <= 3, "the following code should be changed");
@@ -1277,7 +1277,7 @@
__ inc(from, 8);
__ sllx(O3, left_shift, O3);
- disjoint_copy_core(from, to, count, log2_elem_size, 16, copy_16_bytes_shift_loop);
+ disjoint_copy_core(from, to, count, log2_elem_size, 16, &StubGenerator::copy_16_bytes_shift_loop);
__ inccc(count, count_dec>>1 ); // + 8 bytes
__ brx(Assembler::negative, true, Assembler::pn, L_copy_last_bytes);
@@ -2156,7 +2156,7 @@
__ dec(count, 4); // The cmp at the beginning guaranty count >= 4
__ sllx(O3, 32, O3);
- disjoint_copy_core(from, to, count, 2, 16, copy_16_bytes_loop);
+ disjoint_copy_core(from, to, count, 2, 16, &StubGenerator::copy_16_bytes_loop);
__ br(Assembler::always, false, Assembler::pt, L_copy_4_bytes);
__ delayed()->inc(count, 4); // restore 'count'
@@ -2437,7 +2437,7 @@
// count >= 0 (original count - 8)
__ mov(from, from64);
- disjoint_copy_core(from64, to64, count, 3, 64, copy_64_bytes_loop);
+ disjoint_copy_core(from64, to64, count, 3, 64, &StubGenerator::copy_64_bytes_loop);
// Restore O4(offset0), O5(offset8)
__ sub(from64, from, offset0);
--- ./hotspot/src/cpu/sparc/vm/vm_version_sparc.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/cpu/sparc/vm/vm_version_sparc.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -48,7 +48,8 @@
sparc64_family = 14,
M_family = 15,
T_family = 16,
- T1_model = 17
+ T1_model = 17,
+ sparc5_instructions = 18
};
enum Feature_Flag_Set {
@@ -73,6 +74,7 @@
M_family_m = 1 << M_family,
T_family_m = 1 << T_family,
T1_model_m = 1 << T1_model,
+ sparc5_instructions_m = 1 << sparc5_instructions,
generic_v8_m = v8_instructions_m | hardware_mul32_m | hardware_div32_m | hardware_fsmuld_m,
generic_v9_m = generic_v8_m | v9_instructions_m,
@@ -117,6 +119,7 @@
static bool has_vis3() { return (_features & vis3_instructions_m) != 0; }
static bool has_blk_init() { return (_features & blk_init_instructions_m) != 0; }
static bool has_cbcond() { return (_features & cbcond_instructions_m) != 0; }
+ static bool has_sparc5_instr() { return (_features & sparc5_instructions_m) != 0; }
static bool supports_compare_and_exchange()
{ return has_v9(); }
@@ -127,6 +130,7 @@
static bool is_M_series() { return is_M_family(_features); }
static bool is_T4() { return is_T_family(_features) && has_cbcond(); }
+ static bool is_T7() { return is_T_family(_features) && has_sparc5_instr(); }
// Fujitsu SPARC64
static bool is_sparc64() { return (_features & sparc64_family_m) != 0; }
@@ -146,7 +150,7 @@
static const char* cpu_features() { return _features_str; }
static intx prefetch_data_size() {
- return is_T4() ? 32 : 64; // default prefetch block size on sparc
+ return is_T4() && !is_T7() ? 32 : 64; // default prefetch block size on sparc
}
// Prefetch
--- ./hotspot/src/os/bsd/vm/os_bsd.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/os/bsd/vm/os_bsd.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1297,9 +1297,20 @@
//////////////////////////////////////////////////////////////////////////////
// thread local storage
+// Restore the thread pointer if the destructor is called. This is in case
+// someone from JNI code sets up a destructor with pthread_key_create to run
+// detachCurrentThread on thread death. Unless we restore the thread pointer we
+// will hang or crash. When detachCurrentThread is called the key will be set
+// to null and we will not be called again. If detachCurrentThread is never
+// called we could loop forever depending on the pthread implementation.
+static void restore_thread_pointer(void* p) {
+ Thread* thread = (Thread*) p;
+ os::thread_local_storage_at_put(ThreadLocalStorage::thread_index(), thread);
+}
+
int os::allocate_thread_local_storage() {
pthread_key_t key;
- int rslt = pthread_key_create(&key, NULL);
+ int rslt = pthread_key_create(&key, restore_thread_pointer);
assert(rslt == 0, "cannot allocate thread local storage");
return (int)key;
}
@@ -4422,11 +4433,15 @@
// and if UserSignalHandler is installed all bets are off
if (CheckJNICalls) {
if (libjsig_is_loaded) {
- tty->print_cr("Info: libjsig is activated, all active signal checking is disabled");
+ if (PrintJNIResolving) {
+ tty->print_cr("Info: libjsig is activated, all active signal checking is disabled");
+ }
check_signals = false;
}
if (AllowUserSignalHandlers) {
- tty->print_cr("Info: AllowUserSignalHandlers is activated, all active signal checking is disabled");
+ if (PrintJNIResolving) {
+ tty->print_cr("Info: AllowUserSignalHandlers is activated, all active signal checking is disabled");
+ }
check_signals = false;
}
}
--- ./hotspot/src/os/bsd/vm/perfMemory_bsd.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/os/bsd/vm/perfMemory_bsd.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -197,7 +197,38 @@
}
-// check if the given path is considered a secure directory for
+// Check if the given statbuf is considered a secure directory for
+// the backing store files. Returns true if the directory is considered
+// a secure location. Returns false if the statbuf is a symbolic link or
+// if an error occurred.
+//
+static bool is_statbuf_secure(struct stat *statp) {
+ if (S_ISLNK(statp->st_mode) || !S_ISDIR(statp->st_mode)) {
+ // The path represents a link or some non-directory file type,
+ // which is not what we expected. Declare it insecure.
+ //
+ return false;
+ }
+ // We have an existing directory, check if the permissions are safe.
+ //
+ if ((statp->st_mode & (S_IWGRP|S_IWOTH)) != 0) {
+ // The directory is open for writing and could be subjected
+ // to a symlink or a hard link attack. Declare it insecure.
+ //
+ return false;
+ }
+ // See if the uid of the directory matches the effective uid of the process.
+ //
+ if (statp->st_uid != geteuid()) {
+ // The directory was not created by this user, declare it insecure.
+ //
+ return false;
+ }
+ return true;
+}
+
+
+// Check if the given path is considered a secure directory for
// the backing store files. Returns true if the directory exists
// and is considered a secure location. Returns false if the path
// is a symbolic link or if an error occurred.
@@ -211,27 +242,185 @@
return false;
}
- // the path exists, now check it's mode
- if (S_ISLNK(statbuf.st_mode) || !S_ISDIR(statbuf.st_mode)) {
- // the path represents a link or some non-directory file type,
- // which is not what we expected. declare it insecure.
- //
+ // The path exists, see if it is secure.
+ return is_statbuf_secure(&statbuf);
+}
+
+
+// Check if the given directory file descriptor is considered a secure
+// directory for the backing store files. Returns true if the directory
+// exists and is considered a secure location. Returns false if the path
+// is a symbolic link or if an error occurred.
+//
+static bool is_dirfd_secure(int dir_fd) {
+ struct stat statbuf;
+ int result = 0;
+
+ RESTARTABLE(::fstat(dir_fd, &statbuf), result);
+ if (result == OS_ERR) {
return false;
}
- else {
- // we have an existing directory, check if the permissions are safe.
- //
- if ((statbuf.st_mode & (S_IWGRP|S_IWOTH)) != 0) {
- // the directory is open for writing and could be subjected
- // to a symlnk attack. declare it insecure.
- //
- return false;
+
+ // The path exists, now check its mode.
+ return is_statbuf_secure(&statbuf);
+}
+
+
+// Check to make sure fd1 and fd2 are referencing the same file system object.
+//
+static bool is_same_fsobject(int fd1, int fd2) {
+ struct stat statbuf1;
+ struct stat statbuf2;
+ int result = 0;
+
+ RESTARTABLE(::fstat(fd1, &statbuf1), result);
+ if (result == OS_ERR) {
+ return false;
+ }
+ RESTARTABLE(::fstat(fd2, &statbuf2), result);
+ if (result == OS_ERR) {
+ return false;
+ }
+
+ if ((statbuf1.st_ino == statbuf2.st_ino) &&
+ (statbuf1.st_dev == statbuf2.st_dev)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+
+// Open the directory of the given path and validate it.
+// Return a DIR * of the open directory.
+//
+static DIR *open_directory_secure(const char* dirname) {
+ // Open the directory using open() so that it can be verified
+ // to be secure by calling is_dirfd_secure(), opendir() and then check
+ // to see if they are the same file system object. This method does not
+ // introduce a window of opportunity for the directory to be attacked that
+ // calling opendir() and is_directory_secure() does.
+ int result;
+ DIR *dirp = NULL;
+ RESTARTABLE(::open(dirname, O_RDONLY|O_NOFOLLOW), result);
+ if (result == OS_ERR) {
+ // Directory doesn't exist or is a symlink, so there is nothing to cleanup.
+ if (PrintMiscellaneous && Verbose) {
+ if (errno == ELOOP) {
+ warning("directory %s is a symlink and is not secure\n", dirname);
+ } else {
+ warning("could not open directory %s: %s\n", dirname, strerror(errno));
+ }
}
+ return dirp;
+ }
+ int fd = result;
+
+ // Determine if the open directory is secure.
+ if (!is_dirfd_secure(fd)) {
+ // The directory is not a secure directory.
+ os::close(fd);
+ return dirp;
+ }
+
+ // Open the directory.
+ dirp = ::opendir(dirname);
+ if (dirp == NULL) {
+ // The directory doesn't exist, close fd and return.
+ os::close(fd);
+ return dirp;
+ }
+
+ // Check to make sure fd and dirp are referencing the same file system object.
+ if (!is_same_fsobject(fd, dirfd(dirp))) {
+ // The directory is not secure.
+ os::close(fd);
+ os::closedir(dirp);
+ dirp = NULL;
+ return dirp;
+ }
+
+ // Close initial open now that we know directory is secure
+ os::close(fd);
+
+ return dirp;
+}
+
+// NOTE: The code below uses fchdir(), open() and unlink() because
+// fdopendir(), openat() and unlinkat() are not supported on all
+// versions. Once the support for fdopendir(), openat() and unlinkat()
+// is available on all supported versions the code can be changed
+// to use these functions.
+
+// Open the directory of the given path, validate it and set the
+// current working directory to it.
+// Return a DIR * of the open directory and the saved cwd fd.
+//
+static DIR *open_directory_secure_cwd(const char* dirname, int *saved_cwd_fd) {
+
+ // Open the directory.
+ DIR* dirp = open_directory_secure(dirname);
+ if (dirp == NULL) {
+ // Directory doesn't exist or is insecure, so there is nothing to cleanup.
+ return dirp;
+ }
+ int fd = dirfd(dirp);
+
+ // Open a fd to the cwd and save it off.
+ int result;
+ RESTARTABLE(::open(".", O_RDONLY), result);
+ if (result == OS_ERR) {
+ *saved_cwd_fd = -1;
+ } else {
+ *saved_cwd_fd = result;
+ }
+
+ // Set the current directory to dirname by using the fd of the directory.
+ result = fchdir(fd);
+
+ return dirp;
+}
+
+// Close the directory and restore the current working directory.
+//
+static void close_directory_secure_cwd(DIR* dirp, int saved_cwd_fd) {
+
+ int result;
+ // If we have a saved cwd change back to it and close the fd.
+ if (saved_cwd_fd != -1) {
+ result = fchdir(saved_cwd_fd);
+ ::close(saved_cwd_fd);
+ }
+
+ // Close the directory.
+ os::closedir(dirp);
+}
+
+// Check if the given file descriptor is considered a secure.
+//
+static bool is_file_secure(int fd, const char *filename) {
+
+ int result;
+ struct stat statbuf;
+
+ // Determine if the file is secure.
+ RESTARTABLE(::fstat(fd, &statbuf), result);
+ if (result == OS_ERR) {
+ if (PrintMiscellaneous && Verbose) {
+ warning("fstat failed on %s: %s\n", filename, strerror(errno));
+ }
+ return false;
+ }
+ if (statbuf.st_nlink > 1) {
+ // A file with multiple links is not expected.
+ if (PrintMiscellaneous && Verbose) {
+ warning("file %s has multiple links\n", filename);
+ }
+ return false;
}
return true;
}
-
// return the user name for the given user id
//
// the caller is expected to free the allocated memory.
@@ -317,9 +506,11 @@
const char* tmpdirname = os::get_temp_directory();
+ // open the temp directory
DIR* tmpdirp = os::opendir(tmpdirname);
if (tmpdirp == NULL) {
+ // Cannot open the directory to get the user name, return.
return NULL;
}
@@ -344,25 +535,14 @@
strcat(usrdir_name, "/");
strcat(usrdir_name, dentry->d_name);
- DIR* subdirp = os::opendir(usrdir_name);
+ // open the user directory
+ DIR* subdirp = open_directory_secure(usrdir_name);
if (subdirp == NULL) {
FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal);
continue;
}
- // Since we don't create the backing store files in directories
- // pointed to by symbolic links, we also don't follow them when
- // looking for the files. We check for a symbolic link after the
- // call to opendir in order to eliminate a small window where the
- // symlink can be exploited.
- //
- if (!is_directory_secure(usrdir_name)) {
- FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal);
- os::closedir(subdirp);
- continue;
- }
-
struct dirent* udentry;
char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal);
errno = 0;
@@ -465,26 +645,6 @@
}
-// remove file
-//
-// this method removes the file with the given file name in the
-// named directory.
-//
-static void remove_file(const char* dirname, const char* filename) {
-
- size_t nbytes = strlen(dirname) + strlen(filename) + 2;
- char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal);
-
- strcpy(path, dirname);
- strcat(path, "/");
- strcat(path, filename);
-
- remove_file(path);
-
- FREE_C_HEAP_ARRAY(char, path, mtInternal);
-}
-
-
// cleanup stale shared memory resources
//
// This method attempts to remove all stale shared memory files in
@@ -496,16 +656,11 @@
//
static void cleanup_sharedmem_resources(const char* dirname) {
- // open the user temp directory
- DIR* dirp = os::opendir(dirname);
-
+ int saved_cwd_fd;
+ // open the directory and set the current working directory to it
+ DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd);
if (dirp == NULL) {
- // directory doesn't exist, so there is nothing to cleanup
- return;
- }
-
- if (!is_directory_secure(dirname)) {
- // the directory is not a secure directory
+ // directory doesn't exist or is insecure, so there is nothing to cleanup
return;
}
@@ -519,6 +674,7 @@
//
struct dirent* entry;
char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal);
+
errno = 0;
while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) {
@@ -529,7 +685,7 @@
if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {
// attempt to remove all unexpected files, except "." and ".."
- remove_file(dirname, entry->d_name);
+ unlink(entry->d_name);
}
errno = 0;
@@ -552,11 +708,14 @@
if ((pid == os::current_process_id()) ||
(kill(pid, 0) == OS_ERR && (errno == ESRCH || errno == EPERM))) {
- remove_file(dirname, entry->d_name);
+ unlink(entry->d_name);
}
errno = 0;
}
- os::closedir(dirp);
+
+ // close the directory and reset the current working directory
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
+
FREE_C_HEAP_ARRAY(char, dbuf, mtInternal);
}
@@ -613,19 +772,54 @@
return -1;
}
+ int saved_cwd_fd;
+ // open the directory and set the current working directory to it
+ DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd);
+ if (dirp == NULL) {
+ // Directory doesn't exist or is insecure, so cannot create shared
+ // memory file.
+ return -1;
+ }
+
+ // Open the filename in the current directory.
+ // Cannot use O_TRUNC here; truncation of an existing file has to happen
+ // after the is_file_secure() check below.
int result;
-
- RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_TRUNC, S_IREAD|S_IWRITE), result);
+ RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_NOFOLLOW, S_IREAD|S_IWRITE), result);
if (result == OS_ERR) {
if (PrintMiscellaneous && Verbose) {
- warning("could not create file %s: %s\n", filename, strerror(errno));
+ if (errno == ELOOP) {
+ warning("file %s is a symlink and is not secure\n", filename);
+ } else {
+ warning("could not create file %s: %s\n", filename, strerror(errno));
+ }
}
+ // close the directory and reset the current working directory
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
+
return -1;
}
+ // close the directory and reset the current working directory
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
// save the file descriptor
int fd = result;
+ // check to see if the file is secure
+ if (!is_file_secure(fd, filename)) {
+ ::close(fd);
+ return -1;
+ }
+
+ // truncate the file to get rid of any existing data
+ RESTARTABLE(::ftruncate(fd, (off_t)0), result);
+ if (result == OS_ERR) {
+ if (PrintMiscellaneous && Verbose) {
+ warning("could not truncate shared memory file: %s\n", strerror(errno));
+ }
+ ::close(fd);
+ return -1;
+ }
// set the file size
RESTARTABLE(::ftruncate(fd, (off_t)size), result);
if (result == OS_ERR) {
@@ -683,8 +877,15 @@
THROW_MSG_0(vmSymbols::java_io_IOException(), strerror(errno));
}
}
+ int fd = result;
- return result;
+ // check to see if the file is secure
+ if (!is_file_secure(fd, filename)) {
+ ::close(fd);
+ return -1;
+ }
+
+ return fd;
}
// create a named shared memory region. returns the address of the
@@ -716,13 +917,21 @@
char* dirname = get_user_tmp_dir(user_name);
char* filename = get_sharedmem_filename(dirname, vmid);
+ // get the short filename
+ char* short_filename = strrchr(filename, '/');
+ if (short_filename == NULL) {
+ short_filename = filename;
+ } else {
+ short_filename++;
+ }
+
// cleanup any stale shared memory files
cleanup_sharedmem_resources(dirname);
assert(((size > 0) && (size % os::vm_page_size() == 0)),
"unexpected PerfMemory region size");
- fd = create_sharedmem_resources(dirname, filename, size);
+ fd = create_sharedmem_resources(dirname, short_filename, size);
FREE_C_HEAP_ARRAY(char, user_name, mtInternal);
FREE_C_HEAP_ARRAY(char, dirname, mtInternal);
@@ -839,12 +1048,12 @@
// constructs for the file and the shared memory mapping.
if (mode == PerfMemory::PERF_MODE_RO) {
mmap_prot = PROT_READ;
- file_flags = O_RDONLY;
+ file_flags = O_RDONLY | O_NOFOLLOW;
}
else if (mode == PerfMemory::PERF_MODE_RW) {
#ifdef LATER
mmap_prot = PROT_READ | PROT_WRITE;
- file_flags = O_RDWR;
+ file_flags = O_RDWR | O_NOFOLLOW;
#else
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
"Unsupported access mode");
--- ./hotspot/src/os/linux/vm/os_linux.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/os/linux/vm/os_linux.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1103,9 +1103,20 @@
//////////////////////////////////////////////////////////////////////////////
// thread local storage
+// Restore the thread pointer if the destructor is called. This is in case
+// someone from JNI code sets up a destructor with pthread_key_create to run
+// detachCurrentThread on thread death. Unless we restore the thread pointer we
+// will hang or crash. When detachCurrentThread is called the key will be set
+// to null and we will not be called again. If detachCurrentThread is never
+// called we could loop forever depending on the pthread implementation.
+static void restore_thread_pointer(void* p) {
+ Thread* thread = (Thread*) p;
+ os::thread_local_storage_at_put(ThreadLocalStorage::thread_index(), thread);
+}
+
int os::allocate_thread_local_storage() {
pthread_key_t key;
- int rslt = pthread_key_create(&key, NULL);
+ int rslt = pthread_key_create(&key, restore_thread_pointer);
assert(rslt == 0, "cannot allocate thread local storage");
return (int)key;
}
--- ./hotspot/src/os/linux/vm/perfMemory_linux.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/os/linux/vm/perfMemory_linux.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -197,7 +197,38 @@
}
-// check if the given path is considered a secure directory for
+// Check if the given statbuf is considered a secure directory for
+// the backing store files. Returns true if the directory is considered
+// a secure location. Returns false if the statbuf is a symbolic link or
+// if an error occurred.
+//
+static bool is_statbuf_secure(struct stat *statp) {
+ if (S_ISLNK(statp->st_mode) || !S_ISDIR(statp->st_mode)) {
+ // The path represents a link or some non-directory file type,
+ // which is not what we expected. Declare it insecure.
+ //
+ return false;
+ }
+ // We have an existing directory, check if the permissions are safe.
+ //
+ if ((statp->st_mode & (S_IWGRP|S_IWOTH)) != 0) {
+ // The directory is open for writing and could be subjected
+ // to a symlink or a hard link attack. Declare it insecure.
+ //
+ return false;
+ }
+ // See if the uid of the directory matches the effective uid of the process.
+ //
+ if (statp->st_uid != geteuid()) {
+ // The directory was not created by this user, declare it insecure.
+ //
+ return false;
+ }
+ return true;
+}
+
+
+// Check if the given path is considered a secure directory for
// the backing store files. Returns true if the directory exists
// and is considered a secure location. Returns false if the path
// is a symbolic link or if an error occurred.
@@ -211,22 +242,180 @@
return false;
}
- // the path exists, now check it's mode
- if (S_ISLNK(statbuf.st_mode) || !S_ISDIR(statbuf.st_mode)) {
- // the path represents a link or some non-directory file type,
- // which is not what we expected. declare it insecure.
- //
+ // The path exists, see if it is secure.
+ return is_statbuf_secure(&statbuf);
+}
+
+
+// Check if the given directory file descriptor is considered a secure
+// directory for the backing store files. Returns true if the directory
+// exists and is considered a secure location. Returns false if the path
+// is a symbolic link or if an error occurred.
+//
+static bool is_dirfd_secure(int dir_fd) {
+ struct stat statbuf;
+ int result = 0;
+
+ RESTARTABLE(::fstat(dir_fd, &statbuf), result);
+ if (result == OS_ERR) {
return false;
}
- else {
- // we have an existing directory, check if the permissions are safe.
- //
- if ((statbuf.st_mode & (S_IWGRP|S_IWOTH)) != 0) {
- // the directory is open for writing and could be subjected
- // to a symlnk attack. declare it insecure.
- //
- return false;
+
+ // The path exists, now check its mode.
+ return is_statbuf_secure(&statbuf);
+}
+
+
+// Check to make sure fd1 and fd2 are referencing the same file system object.
+//
+static bool is_same_fsobject(int fd1, int fd2) {
+ struct stat statbuf1;
+ struct stat statbuf2;
+ int result = 0;
+
+ RESTARTABLE(::fstat(fd1, &statbuf1), result);
+ if (result == OS_ERR) {
+ return false;
+ }
+ RESTARTABLE(::fstat(fd2, &statbuf2), result);
+ if (result == OS_ERR) {
+ return false;
+ }
+
+ if ((statbuf1.st_ino == statbuf2.st_ino) &&
+ (statbuf1.st_dev == statbuf2.st_dev)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+
+// Open the directory of the given path and validate it.
+// Return a DIR * of the open directory.
+//
+static DIR *open_directory_secure(const char* dirname) {
+ // Open the directory using open() so that it can be verified
+ // to be secure by calling is_dirfd_secure(), opendir() and then check
+ // to see if they are the same file system object. This method does not
+ // introduce a window of opportunity for the directory to be attacked that
+ // calling opendir() and is_directory_secure() does.
+ int result;
+ DIR *dirp = NULL;
+ RESTARTABLE(::open(dirname, O_RDONLY|O_NOFOLLOW), result);
+ if (result == OS_ERR) {
+ if (PrintMiscellaneous && Verbose) {
+ if (errno == ELOOP) {
+ warning("directory %s is a symlink and is not secure\n", dirname);
+ } else {
+ warning("could not open directory %s: %s\n", dirname, strerror(errno));
+ }
}
+ return dirp;
+ }
+ int fd = result;
+
+ // Determine if the open directory is secure.
+ if (!is_dirfd_secure(fd)) {
+ // The directory is not a secure directory.
+ os::close(fd);
+ return dirp;
+ }
+
+ // Open the directory.
+ dirp = ::opendir(dirname);
+ if (dirp == NULL) {
+ // The directory doesn't exist, close fd and return.
+ os::close(fd);
+ return dirp;
+ }
+
+ // Check to make sure fd and dirp are referencing the same file system object.
+ if (!is_same_fsobject(fd, dirfd(dirp))) {
+ // The directory is not secure.
+ os::close(fd);
+ os::closedir(dirp);
+ dirp = NULL;
+ return dirp;
+ }
+
+ // Close initial open now that we know directory is secure
+ os::close(fd);
+
+ return dirp;
+}
+
+// NOTE: The code below uses fchdir(), open() and unlink() because
+// fdopendir(), openat() and unlinkat() are not supported on all
+// versions. Once the support for fdopendir(), openat() and unlinkat()
+// is available on all supported versions the code can be changed
+// to use these functions.
+
+// Open the directory of the given path, validate it and set the
+// current working directory to it.
+// Return a DIR * of the open directory and the saved cwd fd.
+//
+static DIR *open_directory_secure_cwd(const char* dirname, int *saved_cwd_fd) {
+
+ // Open the directory.
+ DIR* dirp = open_directory_secure(dirname);
+ if (dirp == NULL) {
+ // Directory doesn't exist or is insecure, so there is nothing to cleanup.
+ return dirp;
+ }
+ int fd = dirfd(dirp);
+
+ // Open a fd to the cwd and save it off.
+ int result;
+ RESTARTABLE(::open(".", O_RDONLY), result);
+ if (result == OS_ERR) {
+ *saved_cwd_fd = -1;
+ } else {
+ *saved_cwd_fd = result;
+ }
+
+ // Set the current directory to dirname by using the fd of the directory.
+ result = fchdir(fd);
+
+ return dirp;
+}
+
+// Close the directory and restore the current working directory.
+//
+static void close_directory_secure_cwd(DIR* dirp, int saved_cwd_fd) {
+
+ int result;
+ // If we have a saved cwd change back to it and close the fd.
+ if (saved_cwd_fd != -1) {
+ result = fchdir(saved_cwd_fd);
+ ::close(saved_cwd_fd);
+ }
+
+ // Close the directory.
+ os::closedir(dirp);
+}
+
+// Check if the given file descriptor is considered a secure.
+//
+static bool is_file_secure(int fd, const char *filename) {
+
+ int result;
+ struct stat statbuf;
+
+ // Determine if the file is secure.
+ RESTARTABLE(::fstat(fd, &statbuf), result);
+ if (result == OS_ERR) {
+ if (PrintMiscellaneous && Verbose) {
+ warning("fstat failed on %s: %s\n", filename, strerror(errno));
+ }
+ return false;
+ }
+ if (statbuf.st_nlink > 1) {
+ // A file with multiple links is not expected.
+ if (PrintMiscellaneous && Verbose) {
+ warning("file %s has multiple links\n", filename);
+ }
+ return false;
}
return true;
}
@@ -317,9 +506,11 @@
const char* tmpdirname = os::get_temp_directory();
+ // open the temp directory
DIR* tmpdirp = os::opendir(tmpdirname);
if (tmpdirp == NULL) {
+ // Cannot open the directory to get the user name, return.
return NULL;
}
@@ -344,7 +535,8 @@
strcat(usrdir_name, "/");
strcat(usrdir_name, dentry->d_name);
- DIR* subdirp = os::opendir(usrdir_name);
+ // open the user directory
+ DIR* subdirp = open_directory_secure(usrdir_name);
if (subdirp == NULL) {
FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal);
@@ -465,26 +657,6 @@
}
-// remove file
-//
-// this method removes the file with the given file name in the
-// named directory.
-//
-static void remove_file(const char* dirname, const char* filename) {
-
- size_t nbytes = strlen(dirname) + strlen(filename) + 2;
- char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal);
-
- strcpy(path, dirname);
- strcat(path, "/");
- strcat(path, filename);
-
- remove_file(path);
-
- FREE_C_HEAP_ARRAY(char, path, mtInternal);
-}
-
-
// cleanup stale shared memory resources
//
// This method attempts to remove all stale shared memory files in
@@ -496,16 +668,11 @@
//
static void cleanup_sharedmem_resources(const char* dirname) {
- // open the user temp directory
- DIR* dirp = os::opendir(dirname);
-
+ int saved_cwd_fd;
+ // open the directory
+ DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd);
if (dirp == NULL) {
- // directory doesn't exist, so there is nothing to cleanup
- return;
- }
-
- if (!is_directory_secure(dirname)) {
- // the directory is not a secure directory
+ // directory doesn't exist or is insecure, so there is nothing to cleanup
return;
}
@@ -519,6 +686,7 @@
//
struct dirent* entry;
char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal);
+
errno = 0;
while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) {
@@ -527,9 +695,8 @@
if (pid == 0) {
if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {
-
// attempt to remove all unexpected files, except "." and ".."
- remove_file(dirname, entry->d_name);
+ unlink(entry->d_name);
}
errno = 0;
@@ -551,12 +718,14 @@
//
if ((pid == os::current_process_id()) ||
(kill(pid, 0) == OS_ERR && (errno == ESRCH || errno == EPERM))) {
-
- remove_file(dirname, entry->d_name);
+ unlink(entry->d_name);
}
errno = 0;
}
- os::closedir(dirp);
+
+ // close the directory and reset the current working directory
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
+
FREE_C_HEAP_ARRAY(char, dbuf, mtInternal);
}
@@ -613,19 +782,54 @@
return -1;
}
+ int saved_cwd_fd;
+ // open the directory and set the current working directory to it
+ DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd);
+ if (dirp == NULL) {
+ // Directory doesn't exist or is insecure, so cannot create shared
+ // memory file.
+ return -1;
+ }
+
+ // Open the filename in the current directory.
+ // Cannot use O_TRUNC here; truncation of an existing file has to happen
+ // after the is_file_secure() check below.
int result;
-
- RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_TRUNC, S_IREAD|S_IWRITE), result);
+ RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_NOFOLLOW, S_IREAD|S_IWRITE), result);
if (result == OS_ERR) {
if (PrintMiscellaneous && Verbose) {
- warning("could not create file %s: %s\n", filename, strerror(errno));
+ if (errno == ELOOP) {
+ warning("file %s is a symlink and is not secure\n", filename);
+ } else {
+ warning("could not create file %s: %s\n", filename, strerror(errno));
+ }
}
+ // close the directory and reset the current working directory
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
+
return -1;
}
+ // close the directory and reset the current working directory
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
// save the file descriptor
int fd = result;
+ // check to see if the file is secure
+ if (!is_file_secure(fd, filename)) {
+ ::close(fd);
+ return -1;
+ }
+
+ // truncate the file to get rid of any existing data
+ RESTARTABLE(::ftruncate(fd, (off_t)0), result);
+ if (result == OS_ERR) {
+ if (PrintMiscellaneous && Verbose) {
+ warning("could not truncate shared memory file: %s\n", strerror(errno));
+ }
+ ::close(fd);
+ return -1;
+ }
// set the file size
RESTARTABLE(::ftruncate(fd, (off_t)size), result);
if (result == OS_ERR) {
@@ -683,8 +887,15 @@
THROW_MSG_0(vmSymbols::java_io_IOException(), strerror(errno));
}
}
+ int fd = result;
- return result;
+ // check to see if the file is secure
+ if (!is_file_secure(fd, filename)) {
+ ::close(fd);
+ return -1;
+ }
+
+ return fd;
}
// create a named shared memory region. returns the address of the
@@ -715,6 +926,13 @@
char* dirname = get_user_tmp_dir(user_name);
char* filename = get_sharedmem_filename(dirname, vmid);
+ // get the short filename
+ char* short_filename = strrchr(filename, '/');
+ if (short_filename == NULL) {
+ short_filename = filename;
+ } else {
+ short_filename++;
+ }
// cleanup any stale shared memory files
cleanup_sharedmem_resources(dirname);
@@ -722,7 +940,7 @@
assert(((size > 0) && (size % os::vm_page_size() == 0)),
"unexpected PerfMemory region size");
- fd = create_sharedmem_resources(dirname, filename, size);
+ fd = create_sharedmem_resources(dirname, short_filename, size);
FREE_C_HEAP_ARRAY(char, user_name, mtInternal);
FREE_C_HEAP_ARRAY(char, dirname, mtInternal);
@@ -839,12 +1057,12 @@
// constructs for the file and the shared memory mapping.
if (mode == PerfMemory::PERF_MODE_RO) {
mmap_prot = PROT_READ;
- file_flags = O_RDONLY;
+ file_flags = O_RDONLY | O_NOFOLLOW;
}
else if (mode == PerfMemory::PERF_MODE_RW) {
#ifdef LATER
mmap_prot = PROT_READ | PROT_WRITE;
- file_flags = O_RDWR;
+ file_flags = O_RDWR | O_NOFOLLOW;
#else
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
"Unsupported access mode");
--- ./hotspot/src/os/solaris/vm/perfMemory_solaris.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/os/solaris/vm/perfMemory_solaris.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -199,7 +199,38 @@
}
-// check if the given path is considered a secure directory for
+// Check if the given statbuf is considered a secure directory for
+// the backing store files. Returns true if the directory is considered
+// a secure location. Returns false if the statbuf is a symbolic link or
+// if an error occurred.
+//
+static bool is_statbuf_secure(struct stat *statp) {
+ if (S_ISLNK(statp->st_mode) || !S_ISDIR(statp->st_mode)) {
+ // The path represents a link or some non-directory file type,
+ // which is not what we expected. Declare it insecure.
+ //
+ return false;
+ }
+ // We have an existing directory, check if the permissions are safe.
+ //
+ if ((statp->st_mode & (S_IWGRP|S_IWOTH)) != 0) {
+ // The directory is open for writing and could be subjected
+ // to a symlink or a hard link attack. Declare it insecure.
+ //
+ return false;
+ }
+ // See if the uid of the directory matches the effective uid of the process.
+ //
+ if (statp->st_uid != geteuid()) {
+ // The directory was not created by this user, declare it insecure.
+ //
+ return false;
+ }
+ return true;
+}
+
+
+// Check if the given path is considered a secure directory for
// the backing store files. Returns true if the directory exists
// and is considered a secure location. Returns false if the path
// is a symbolic link or if an error occurred.
@@ -213,27 +244,185 @@
return false;
}
- // the path exists, now check it's mode
- if (S_ISLNK(statbuf.st_mode) || !S_ISDIR(statbuf.st_mode)) {
- // the path represents a link or some non-directory file type,
- // which is not what we expected. declare it insecure.
- //
+ // The path exists, see if it is secure.
+ return is_statbuf_secure(&statbuf);
+}
+
+
+// Check if the given directory file descriptor is considered a secure
+// directory for the backing store files. Returns true if the directory
+// exists and is considered a secure location. Returns false if the path
+// is a symbolic link or if an error occurred.
+//
+static bool is_dirfd_secure(int dir_fd) {
+ struct stat statbuf;
+ int result = 0;
+
+ RESTARTABLE(::fstat(dir_fd, &statbuf), result);
+ if (result == OS_ERR) {
return false;
}
- else {
- // we have an existing directory, check if the permissions are safe.
- //
- if ((statbuf.st_mode & (S_IWGRP|S_IWOTH)) != 0) {
- // the directory is open for writing and could be subjected
- // to a symlnk attack. declare it insecure.
- //
- return false;
+
+ // The path exists, now check its mode.
+ return is_statbuf_secure(&statbuf);
+}
+
+
+// Check to make sure fd1 and fd2 are referencing the same file system object.
+//
+static bool is_same_fsobject(int fd1, int fd2) {
+ struct stat statbuf1;
+ struct stat statbuf2;
+ int result = 0;
+
+ RESTARTABLE(::fstat(fd1, &statbuf1), result);
+ if (result == OS_ERR) {
+ return false;
+ }
+ RESTARTABLE(::fstat(fd2, &statbuf2), result);
+ if (result == OS_ERR) {
+ return false;
+ }
+
+ if ((statbuf1.st_ino == statbuf2.st_ino) &&
+ (statbuf1.st_dev == statbuf2.st_dev)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+
+// Open the directory of the given path and validate it.
+// Return a DIR * of the open directory.
+//
+static DIR *open_directory_secure(const char* dirname) {
+ // Open the directory using open() so that it can be verified
+ // to be secure by calling is_dirfd_secure(), opendir() and then check
+ // to see if they are the same file system object. This method does not
+ // introduce a window of opportunity for the directory to be attacked that
+ // calling opendir() and is_directory_secure() does.
+ int result;
+ DIR *dirp = NULL;
+ RESTARTABLE(::open(dirname, O_RDONLY|O_NOFOLLOW), result);
+ if (result == OS_ERR) {
+ // Directory doesn't exist or is a symlink, so there is nothing to cleanup.
+ if (PrintMiscellaneous && Verbose) {
+ if (errno == ELOOP) {
+ warning("directory %s is a symlink and is not secure\n", dirname);
+ } else {
+ warning("could not open directory %s: %s\n", dirname, strerror(errno));
+ }
}
+ return dirp;
+ }
+ int fd = result;
+
+ // Determine if the open directory is secure.
+ if (!is_dirfd_secure(fd)) {
+ // The directory is not a secure directory.
+ os::close(fd);
+ return dirp;
+ }
+
+ // Open the directory.
+ dirp = ::opendir(dirname);
+ if (dirp == NULL) {
+ // The directory doesn't exist, close fd and return.
+ os::close(fd);
+ return dirp;
+ }
+
+ // Check to make sure fd and dirp are referencing the same file system object.
+ if (!is_same_fsobject(fd, dirp->dd_fd)) {
+ // The directory is not secure.
+ os::close(fd);
+ os::closedir(dirp);
+ dirp = NULL;
+ return dirp;
+ }
+
+ // Close initial open now that we know directory is secure
+ os::close(fd);
+
+ return dirp;
+}
+
+// NOTE: The code below uses fchdir(), open() and unlink() because
+// fdopendir(), openat() and unlinkat() are not supported on all
+// versions. Once the support for fdopendir(), openat() and unlinkat()
+// is available on all supported versions the code can be changed
+// to use these functions.
+
+// Open the directory of the given path, validate it and set the
+// current working directory to it.
+// Return a DIR * of the open directory and the saved cwd fd.
+//
+static DIR *open_directory_secure_cwd(const char* dirname, int *saved_cwd_fd) {
+
+ // Open the directory.
+ DIR* dirp = open_directory_secure(dirname);
+ if (dirp == NULL) {
+ // Directory doesn't exist or is insecure, so there is nothing to cleanup.
+ return dirp;
+ }
+ int fd = dirp->dd_fd;
+
+ // Open a fd to the cwd and save it off.
+ int result;
+ RESTARTABLE(::open(".", O_RDONLY), result);
+ if (result == OS_ERR) {
+ *saved_cwd_fd = -1;
+ } else {
+ *saved_cwd_fd = result;
+ }
+
+ // Set the current directory to dirname by using the fd of the directory.
+ result = fchdir(fd);
+
+ return dirp;
+}
+
+// Close the directory and restore the current working directory.
+//
+static void close_directory_secure_cwd(DIR* dirp, int saved_cwd_fd) {
+
+ int result;
+ // If we have a saved cwd change back to it and close the fd.
+ if (saved_cwd_fd != -1) {
+ result = fchdir(saved_cwd_fd);
+ ::close(saved_cwd_fd);
+ }
+
+ // Close the directory.
+ os::closedir(dirp);
+}
+
+// Check if the given file descriptor is considered a secure.
+//
+static bool is_file_secure(int fd, const char *filename) {
+
+ int result;
+ struct stat statbuf;
+
+ // Determine if the file is secure.
+ RESTARTABLE(::fstat(fd, &statbuf), result);
+ if (result == OS_ERR) {
+ if (PrintMiscellaneous && Verbose) {
+ warning("fstat failed on %s: %s\n", filename, strerror(errno));
+ }
+ return false;
+ }
+ if (statbuf.st_nlink > 1) {
+ // A file with multiple links is not expected.
+ if (PrintMiscellaneous && Verbose) {
+ warning("file %s has multiple links\n", filename);
+ }
+ return false;
}
return true;
}
-
// return the user name for the given user id
//
// the caller is expected to free the allocated memory.
@@ -308,9 +497,11 @@
const char* tmpdirname = os::get_temp_directory();
+ // open the temp directory
DIR* tmpdirp = os::opendir(tmpdirname);
if (tmpdirp == NULL) {
+ // Cannot open the directory to get the user name, return.
return NULL;
}
@@ -335,7 +526,8 @@
strcat(usrdir_name, "/");
strcat(usrdir_name, dentry->d_name);
- DIR* subdirp = os::opendir(usrdir_name);
+ // open the user directory
+ DIR* subdirp = open_directory_secure(usrdir_name);
if (subdirp == NULL) {
FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal);
@@ -502,26 +694,6 @@
}
-// remove file
-//
-// this method removes the file with the given file name in the
-// named directory.
-//
-static void remove_file(const char* dirname, const char* filename) {
-
- size_t nbytes = strlen(dirname) + strlen(filename) + 2;
- char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal);
-
- strcpy(path, dirname);
- strcat(path, "/");
- strcat(path, filename);
-
- remove_file(path);
-
- FREE_C_HEAP_ARRAY(char, path, mtInternal);
-}
-
-
// cleanup stale shared memory resources
//
// This method attempts to remove all stale shared memory files in
@@ -533,16 +705,11 @@
//
static void cleanup_sharedmem_resources(const char* dirname) {
- // open the user temp directory
- DIR* dirp = os::opendir(dirname);
-
+ int saved_cwd_fd;
+ // open the directory
+ DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd);
if (dirp == NULL) {
- // directory doesn't exist, so there is nothing to cleanup
- return;
- }
-
- if (!is_directory_secure(dirname)) {
- // the directory is not a secure directory
+ // directory doesn't exist or is insecure, so there is nothing to cleanup
return;
}
@@ -556,6 +723,7 @@
//
struct dirent* entry;
char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal);
+
errno = 0;
while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) {
@@ -566,7 +734,7 @@
if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {
// attempt to remove all unexpected files, except "." and ".."
- remove_file(dirname, entry->d_name);
+ unlink(entry->d_name);
}
errno = 0;
@@ -589,11 +757,14 @@
if ((pid == os::current_process_id()) ||
(kill(pid, 0) == OS_ERR && (errno == ESRCH || errno == EPERM))) {
- remove_file(dirname, entry->d_name);
+ unlink(entry->d_name);
}
errno = 0;
}
- os::closedir(dirp);
+
+ // close the directory and reset the current working directory
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
+
FREE_C_HEAP_ARRAY(char, dbuf, mtInternal);
}
@@ -650,19 +821,54 @@
return -1;
}
+ int saved_cwd_fd;
+ // open the directory and set the current working directory to it
+ DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd);
+ if (dirp == NULL) {
+ // Directory doesn't exist or is insecure, so cannot create shared
+ // memory file.
+ return -1;
+ }
+
+ // Open the filename in the current directory.
+ // Cannot use O_TRUNC here; truncation of an existing file has to happen
+ // after the is_file_secure() check below.
int result;
-
- RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_TRUNC, S_IREAD|S_IWRITE), result);
+ RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_NOFOLLOW, S_IREAD|S_IWRITE), result);
if (result == OS_ERR) {
if (PrintMiscellaneous && Verbose) {
- warning("could not create file %s: %s\n", filename, strerror(errno));
+ if (errno == ELOOP) {
+ warning("file %s is a symlink and is not secure\n", filename);
+ } else {
+ warning("could not create file %s: %s\n", filename, strerror(errno));
+ }
}
+ // close the directory and reset the current working directory
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
+
return -1;
}
+ // close the directory and reset the current working directory
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
// save the file descriptor
int fd = result;
+ // check to see if the file is secure
+ if (!is_file_secure(fd, filename)) {
+ ::close(fd);
+ return -1;
+ }
+
+ // truncate the file to get rid of any existing data
+ RESTARTABLE(::ftruncate(fd, (off_t)0), result);
+ if (result == OS_ERR) {
+ if (PrintMiscellaneous && Verbose) {
+ warning("could not truncate shared memory file: %s\n", strerror(errno));
+ }
+ ::close(fd);
+ return -1;
+ }
// set the file size
RESTARTABLE(::ftruncate(fd, (off_t)size), result);
if (result == OS_ERR) {
@@ -698,8 +904,15 @@
THROW_MSG_0(vmSymbols::java_io_IOException(), strerror(errno));
}
}
+ int fd = result;
- return result;
+ // check to see if the file is secure
+ if (!is_file_secure(fd, filename)) {
+ ::close(fd);
+ return -1;
+ }
+
+ return fd;
}
// create a named shared memory region. returns the address of the
@@ -731,13 +944,21 @@
char* dirname = get_user_tmp_dir(user_name);
char* filename = get_sharedmem_filename(dirname, vmid);
+ // get the short filename
+ char* short_filename = strrchr(filename, '/');
+ if (short_filename == NULL) {
+ short_filename = filename;
+ } else {
+ short_filename++;
+ }
+
// cleanup any stale shared memory files
cleanup_sharedmem_resources(dirname);
assert(((size > 0) && (size % os::vm_page_size() == 0)),
"unexpected PerfMemory region size");
- fd = create_sharedmem_resources(dirname, filename, size);
+ fd = create_sharedmem_resources(dirname, short_filename, size);
FREE_C_HEAP_ARRAY(char, user_name, mtInternal);
FREE_C_HEAP_ARRAY(char, dirname, mtInternal);
@@ -854,12 +1075,12 @@
// constructs for the file and the shared memory mapping.
if (mode == PerfMemory::PERF_MODE_RO) {
mmap_prot = PROT_READ;
- file_flags = O_RDONLY;
+ file_flags = O_RDONLY | O_NOFOLLOW;
}
else if (mode == PerfMemory::PERF_MODE_RW) {
#ifdef LATER
mmap_prot = PROT_READ | PROT_WRITE;
- file_flags = O_RDWR;
+ file_flags = O_RDWR | O_NOFOLLOW;
#else
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
"Unsupported access mode");
--- ./hotspot/src/os_cpu/linux_sparc/vm/assembler_linux_sparc.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/os_cpu/linux_sparc/vm/assembler_linux_sparc.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -28,7 +28,7 @@
#include "runtime/os.hpp"
#include "runtime/threadLocalStorage.hpp"
-#include <asm-sparc/traps.h>
+#include <asm/traps.h>
void MacroAssembler::read_ccr_trap(Register ccr_save) {
// No implementation
--- ./hotspot/src/os_cpu/linux_sparc/vm/atomic_linux_sparc.inline.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/os_cpu/linux_sparc/vm/atomic_linux_sparc.inline.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -79,12 +79,12 @@
__asm__ volatile(
"1: \n\t"
" ldx [%2], %%o2\n\t"
- " add %0, %%o2, %%o3\n\t"
+ " add %1, %%o2, %%o3\n\t"
" casx [%2], %%o2, %%o3\n\t"
" cmp %%o2, %%o3\n\t"
" bne %%xcc, 1b\n\t"
" nop\n\t"
- " add %0, %%o2, %0\n\t"
+ " add %1, %%o2, %0\n\t"
: "=r" (rv)
: "r" (add_value), "r" (dest)
: "memory", "o2", "o3");
--- ./hotspot/src/os_cpu/linux_sparc/vm/os_linux_sparc.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/os_cpu/linux_sparc/vm/os_linux_sparc.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -118,7 +118,7 @@
*ret_sp = os::Linux::ucontext_get_sp(uc);
}
if (ret_fp) {
- *ret_fp = os::Linux::ucontext_get_fp(uc);
+ *ret_fp = (intptr_t*)NULL;
}
} else {
// construct empty ExtendedPC for return value checking
@@ -136,18 +136,15 @@
frame os::fetch_frame_from_context(void* ucVoid) {
intptr_t* sp;
- intptr_t* fp;
- ExtendedPC epc = fetch_frame_from_context(ucVoid, &sp, &fp);
- return frame(sp, fp, epc.pc());
+ ExtendedPC epc = fetch_frame_from_context(ucVoid, &sp, NULL);
+ return frame(sp, frame::unpatchable, epc.pc());
}
frame os::get_sender_for_C_frame(frame* fr) {
- return frame(fr->sender_sp(), fr->link(), fr->sender_pc());
+ return frame(fr->sender_sp(), frame::unpatchable, fr->sender_pc());
}
frame os::current_frame() {
- fprintf(stderr, "current_frame()");
-
intptr_t* sp = StubRoutines::Sparc::flush_callers_register_windows_func()();
frame myframe(sp, frame::unpatchable,
CAST_FROM_FN_PTR(address, os::current_frame));
@@ -302,29 +299,30 @@
if (context == NULL) return;
ucontext_t *uc = (ucontext_t*)context;
+ sigcontext* sc = (sigcontext*)context;
intptr_t *sp = (intptr_t *)os::Linux::ucontext_get_sp(uc);
st->print_cr("Register to memory mapping:");
st->cr();
// this is only for the "general purpose" registers
- st->print("G1="); print_location(st, SIG_REGS(sc).u_regs[CON__G1]);
- st->print("G2="); print_location(st, SIG_REGS(sc).u_regs[CON__G2]);
- st->print("G3="); print_location(st, SIG_REGS(sc).u_regs[CON__G3]);
- st->print("G4="); print_location(st, SIG_REGS(sc).u_regs[CON__G4]);
- st->print("G5="); print_location(st, SIG_REGS(sc).u_regs[CON__G5]);
- st->print("G6="); print_location(st, SIG_REGS(sc).u_regs[CON__G6]);
- st->print("G7="); print_location(st, SIG_REGS(sc).u_regs[CON__G7]);
+ st->print("G1="); print_location(st, SIG_REGS(sc).u_regs[CON_G1]);
+ st->print("G2="); print_location(st, SIG_REGS(sc).u_regs[CON_G2]);
+ st->print("G3="); print_location(st, SIG_REGS(sc).u_regs[CON_G3]);
+ st->print("G4="); print_location(st, SIG_REGS(sc).u_regs[CON_G4]);
+ st->print("G5="); print_location(st, SIG_REGS(sc).u_regs[CON_G5]);
+ st->print("G6="); print_location(st, SIG_REGS(sc).u_regs[CON_G6]);
+ st->print("G7="); print_location(st, SIG_REGS(sc).u_regs[CON_G7]);
st->cr();
- st->print("O0="); print_location(st, SIG_REGS(sc).u_regs[CON__O0]);
- st->print("O1="); print_location(st, SIG_REGS(sc).u_regs[CON__O1]);
- st->print("O2="); print_location(st, SIG_REGS(sc).u_regs[CON__O2]);
- st->print("O3="); print_location(st, SIG_REGS(sc).u_regs[CON__O3]);
- st->print("O4="); print_location(st, SIG_REGS(sc).u_regs[CON__O4]);
- st->print("O5="); print_location(st, SIG_REGS(sc).u_regs[CON__O5]);
- st->print("O6="); print_location(st, SIG_REGS(sc).u_regs[CON__O6]);
- st->print("O7="); print_location(st, SIG_REGS(sc).u_regs[CON__O7]);
+ st->print("O0="); print_location(st, SIG_REGS(sc).u_regs[CON_O0]);
+ st->print("O1="); print_location(st, SIG_REGS(sc).u_regs[CON_O1]);
+ st->print("O2="); print_location(st, SIG_REGS(sc).u_regs[CON_O2]);
+ st->print("O3="); print_location(st, SIG_REGS(sc).u_regs[CON_O3]);
+ st->print("O4="); print_location(st, SIG_REGS(sc).u_regs[CON_O4]);
+ st->print("O5="); print_location(st, SIG_REGS(sc).u_regs[CON_O5]);
+ st->print("O6="); print_location(st, SIG_REGS(sc).u_regs[CON_O6]);
+ st->print("O7="); print_location(st, SIG_REGS(sc).u_regs[CON_O7]);
st->cr();
st->print("L0="); print_location(st, sp[L0->sp_offset_in_saved_window()]);
@@ -525,7 +523,7 @@
if (nativeInstruction_at(*pc)->is_ic_miss_trap()) {
#ifdef ASSERT
#ifdef TIERED
- CodeBlob* cb = CodeCache::find_blob_unsafe(pc);
+ CodeBlob* cb = CodeCache::find_blob_unsafe(*pc);
assert(cb->is_compiled_by_c2(), "Wrong compiler");
#endif // TIERED
#endif // ASSERT
--- ./hotspot/src/os_cpu/linux_sparc/vm/vm_version_linux_sparc.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/os_cpu/linux_sparc/vm/vm_version_linux_sparc.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -55,7 +55,7 @@
if (detect_niagara()) {
NOT_PRODUCT(if (PrintMiscellaneous && Verbose) tty->print_cr("Detected Linux on Niagara");)
- features = niagara1_m;
+ features = niagara1_m | T_family_m;
}
return features;
--- ./hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -899,7 +899,7 @@
*/
char* hint = (char*) (Linux::initial_thread_stack_bottom() -
((StackYellowPages + StackRedPages + 1) * page_size));
- char* codebuf = os::reserve_memory(page_size, hint);
+ char* codebuf = os::pd_attempt_reserve_memory_at(page_size, hint);
if ( (codebuf == NULL) || (!os::commit_memory(codebuf, page_size, true)) ) {
return; // No matter, we tried, best effort.
}
--- ./hotspot/src/os_cpu/solaris_sparc/vm/vm_version_solaris_sparc.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/os_cpu/solaris_sparc/vm/vm_version_solaris_sparc.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -75,13 +75,19 @@
do_sysinfo(SI_ARCHITECTURE_64, "sparcv9", &features, generic_v9_m);
// Extract valid instruction set extensions.
- uint_t av;
- uint_t avn = os::Solaris::getisax(&av, 1);
- assert(avn == 1, "should only return one av");
+ uint_t avs[2];
+ uint_t avn = os::Solaris::getisax(avs, 2);
+ assert(avn <= 2, "should return two or less av's");
+ uint_t av = avs[0];
#ifndef PRODUCT
- if (PrintMiscellaneous && Verbose)
- tty->print_cr("getisax(2) returned: " PTR32_FORMAT, av);
+ if (PrintMiscellaneous && Verbose) {
+ tty->print("getisax(2) returned: " PTR32_FORMAT, av);
+ if (avn > 1) {
+ tty->print(", " PTR32_FORMAT, avs[1]);
+ }
+ tty->cr();
+ }
#endif
if (av & AV_SPARC_MUL32) features |= hardware_mul32_m;
@@ -91,6 +97,13 @@
if (av & AV_SPARC_POPC) features |= hardware_popc_m;
if (av & AV_SPARC_VIS) features |= vis1_instructions_m;
if (av & AV_SPARC_VIS2) features |= vis2_instructions_m;
+ if (avn > 1) {
+ uint_t av2 = avs[1];
+#ifndef AV2_SPARC_SPARC5
+#define AV2_SPARC_SPARC5 0x00000008 /* The 29 new fp and sub instructions */
+#endif
+ if (av2 & AV2_SPARC_SPARC5) features |= sparc5_instructions_m;
+ }
// Next values are not defined before Solaris 10
// but Solaris 8 is used for jdk6 update builds.
--- ./hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -89,8 +89,8 @@
public:
ArgumentMap *_vars;
ArgumentMap *_stack;
- short _stack_height;
- short _max_stack;
+ int _stack_height;
+ int _max_stack;
bool _initialized;
ArgumentMap empty_map;
@@ -158,6 +158,9 @@
void BCEscapeAnalyzer::set_method_escape(ArgumentMap vars) {
clear_bits(vars, _arg_local);
+ if (vars.contains_allocated()) {
+ _allocated_escapes = true;
+ }
}
void BCEscapeAnalyzer::set_global_escape(ArgumentMap vars, bool merge) {
--- ./hotspot/src/share/vm/classfile/classFileParser.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/classfile/classFileParser.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -2676,7 +2676,7 @@
ClassFileStream* cfs = stream();
u1* current_start = cfs->current();
- guarantee_property(attribute_byte_length > sizeof(u2),
+ guarantee_property(attribute_byte_length >= sizeof(u2),
"Invalid BootstrapMethods attribute length %u in class file %s",
attribute_byte_length,
CHECK);
--- ./hotspot/src/share/vm/classfile/stackMapFrame.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/classfile/stackMapFrame.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -54,15 +54,19 @@
return frame;
}
-bool StackMapFrame::has_new_object() const {
+// Return true if frame has an uninitialized (new) object that differs
+// from the target frame's object.
+bool StackMapFrame::has_nonmatching_new_object(const StackMapFrame *target_frame) const {
int32_t i;
for (i = 0; i < _max_locals; i++) {
- if (_locals[i].is_uninitialized()) {
+ if (_locals[i].is_uninitialized() &&
+ !_locals[i].equals(target_frame->_locals[i])) {
return true;
}
}
for (i = 0; i < _stack_size; i++) {
- if (_stack[i].is_uninitialized()) {
+ if (_stack[i].is_uninitialized() &&
+ !_stack[i].equals(target_frame->_stack[i])) {
return true;
}
}
--- ./hotspot/src/share/vm/classfile/stackMapFrame.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/classfile/stackMapFrame.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -155,8 +155,9 @@
const methodHandle m, VerificationType thisKlass, TRAPS);
// Search local variable type array and stack type array.
- // Return true if an uninitialized object is found.
- bool has_new_object() const;
+ // Return true if an uninitialized object is found that is
+ // not equal to the corresponding object on the target frame.
+ bool has_nonmatching_new_object(const StackMapFrame *target_frame) const;
// Search local variable type array and stack type array.
// Set every element with type of old_object to new_object.
--- ./hotspot/src/share/vm/classfile/stackMapTable.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/classfile/stackMapTable.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -70,24 +70,26 @@
bool StackMapTable::match_stackmap(
StackMapFrame* frame, int32_t target,
- bool match, bool update, ErrorContext* ctx, TRAPS) const {
+ bool match, bool update, bool handler, ErrorContext* ctx, TRAPS) const {
int index = get_index_from_offset(target);
- return match_stackmap(frame, target, index, match, update, ctx, THREAD);
+ return match_stackmap(frame, target, index, match, update, handler, ctx, THREAD);
}
// Match and/or update current_frame to the frame in stackmap table with
// specified offset and frame index. Return true if the two frames match.
+// handler is true if the frame in stackmap_table is for an exception handler.
//
-// The values of match and update are: _match__update_
+// The values of match and update are: _match__update__handler
//
-// checking a branch target/exception handler: true false
+// checking a branch target: true false false
+// checking an exception handler: true false true
// linear bytecode verification following an
-// unconditional branch: false true
+// unconditional branch: false true false
// linear bytecode verification not following an
-// unconditional branch: true true
+// unconditional branch: true true false
bool StackMapTable::match_stackmap(
StackMapFrame* frame, int32_t target, int32_t frame_index,
- bool match, bool update, ErrorContext* ctx, TRAPS) const {
+ bool match, bool update, bool handler, ErrorContext* ctx, TRAPS) const {
if (frame_index < 0 || frame_index >= _frame_count) {
*ctx = ErrorContext::missing_stackmap(frame->offset());
frame->verifier()->verify_error(
@@ -98,11 +100,9 @@
StackMapFrame *stackmap_frame = _frame_array[frame_index];
bool result = true;
if (match) {
- // when checking handler target, match == true && update == false
- bool is_exception_handler = !update;
// Has direct control flow from last instruction, need to match the two
// frames.
- result = frame->is_assignable_to(stackmap_frame, is_exception_handler,
+ result = frame->is_assignable_to(stackmap_frame, handler,
ctx, CHECK_VERIFY_(frame->verifier(), result));
}
if (update) {
@@ -126,7 +126,7 @@
StackMapFrame* frame, int32_t target, TRAPS) const {
ErrorContext ctx;
bool match = match_stackmap(
- frame, target, true, false, &ctx, CHECK_VERIFY(frame->verifier()));
+ frame, target, true, false, false, &ctx, CHECK_VERIFY(frame->verifier()));
if (!match || (target < 0 || target >= _code_length)) {
frame->verifier()->verify_error(ctx,
"Inconsistent stackmap frames at branch target %d", target);
@@ -134,12 +134,14 @@
}
// check if uninitialized objects exist on backward branches
check_new_object(frame, target, CHECK_VERIFY(frame->verifier()));
- frame->verifier()->update_furthest_jump(target);
}
void StackMapTable::check_new_object(
const StackMapFrame* frame, int32_t target, TRAPS) const {
- if (frame->offset() > target && frame->has_new_object()) {
+ int frame_index = get_index_from_offset(target);
+ assert(frame_index >= 0 && frame_index < _frame_count, "bad frame index");
+ if (frame->offset() > target &&
+ frame->has_nonmatching_new_object(_frame_array[frame_index])) {
frame->verifier()->verify_error(
ErrorContext::bad_code(frame->offset()),
"Uninitialized object exists on backward branch %d", target);
--- ./hotspot/src/share/vm/classfile/stackMapTable.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/classfile/stackMapTable.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -74,12 +74,12 @@
// specified offset. Return true if the two frames match.
bool match_stackmap(
StackMapFrame* current_frame, int32_t offset,
- bool match, bool update, ErrorContext* ctx, TRAPS) const;
+ bool match, bool update, bool handler, ErrorContext* ctx, TRAPS) const;
// Match and/or update current_frame to the frame in stackmap table with
// specified offset and frame index. Return true if the two frames match.
bool match_stackmap(
StackMapFrame* current_frame, int32_t offset, int32_t frame_index,
- bool match, bool update, ErrorContext* ctx, TRAPS) const;
+ bool match, bool update, bool handler, ErrorContext* ctx, TRAPS) const;
// Check jump instructions. Make sure there are no uninitialized
// instances on backward branch.
--- ./hotspot/src/share/vm/classfile/systemDictionary.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/classfile/systemDictionary.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1872,11 +1872,12 @@
instanceKlass::cast(WK_KLASS(Reference_klass))->set_reference_type(REF_OTHER);
instanceRefKlass::update_nonstatic_oop_maps(WK_KLASS(Reference_klass));
- initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(PhantomReference_klass), scan, CHECK);
+ initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(Cleaner_klass), scan, CHECK);
instanceKlass::cast(WK_KLASS(SoftReference_klass))->set_reference_type(REF_SOFT);
instanceKlass::cast(WK_KLASS(WeakReference_klass))->set_reference_type(REF_WEAK);
instanceKlass::cast(WK_KLASS(FinalReference_klass))->set_reference_type(REF_FINAL);
instanceKlass::cast(WK_KLASS(PhantomReference_klass))->set_reference_type(REF_PHANTOM);
+ instanceKlass::cast(WK_KLASS(Cleaner_klass))->set_reference_type(REF_CLEANER);
// JSR 292 classes
WKID jsr292_group_start = WK_KLASS_ENUM_NAME(MethodHandle_klass);
--- ./hotspot/src/share/vm/classfile/systemDictionary.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/classfile/systemDictionary.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -126,6 +126,7 @@
do_klass(WeakReference_klass, java_lang_ref_WeakReference, Pre ) \
do_klass(FinalReference_klass, java_lang_ref_FinalReference, Pre ) \
do_klass(PhantomReference_klass, java_lang_ref_PhantomReference, Pre ) \
+ do_klass(Cleaner_klass, sun_misc_Cleaner, Pre ) \
do_klass(Finalizer_klass, java_lang_ref_Finalizer, Pre ) \
\
do_klass(Thread_klass, java_lang_Thread, Pre ) \
--- ./hotspot/src/share/vm/classfile/verifier.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/classfile/verifier.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -630,8 +630,6 @@
// flow from current instruction to the next
// instruction in sequence
- set_furthest_jump(0);
-
Bytecodes::Code opcode;
while (!bcs.is_last_bytecode()) {
// Check for recursive re-verification before each bytecode.
@@ -1551,14 +1549,14 @@
case Bytecodes::_invokespecial :
case Bytecodes::_invokestatic :
verify_invoke_instructions(
- &bcs, code_length, &current_frame,
- &this_uninit, return_type, cp, CHECK_VERIFY(this));
+ &bcs, code_length, &current_frame, (bci >= ex_min && bci < ex_max),
+ &this_uninit, return_type, cp, &stackmap_table, CHECK_VERIFY(this));
no_control_flow = false; break;
case Bytecodes::_invokeinterface :
case Bytecodes::_invokedynamic :
verify_invoke_instructions(
- &bcs, code_length, &current_frame,
- &this_uninit, return_type, cp, CHECK_VERIFY(this));
+ &bcs, code_length, &current_frame, (bci >= ex_min && bci < ex_max),
+ &this_uninit, return_type, cp, &stackmap_table, CHECK_VERIFY(this));
no_control_flow = false; break;
case Bytecodes::_new :
{
@@ -1788,7 +1786,7 @@
// If matched, current_frame will be updated by this method.
bool matches = stackmap_table->match_stackmap(
current_frame, this_offset, stackmap_index,
- !no_control_flow, true, &ctx, CHECK_VERIFY_(this, 0));
+ !no_control_flow, true, false, &ctx, CHECK_VERIFY_(this, 0));
if (!matches) {
// report type error
verify_error(ctx, "Instruction type does not match stack map");
@@ -1835,7 +1833,7 @@
}
ErrorContext ctx;
bool matches = stackmap_table->match_stackmap(
- new_frame, handler_pc, true, false, &ctx, CHECK_VERIFY(this));
+ new_frame, handler_pc, true, false, true, &ctx, CHECK_VERIFY(this));
if (!matches) {
verify_error(ctx, "Stack map does not match the one at "
"exception handler %d", handler_pc);
@@ -2401,8 +2399,9 @@
void ClassVerifier::verify_invoke_init(
RawBytecodeStream* bcs, u2 ref_class_index, VerificationType ref_class_type,
- StackMapFrame* current_frame, u4 code_length, bool *this_uninit,
- constantPoolHandle cp, TRAPS) {
+ StackMapFrame* current_frame, u4 code_length, bool in_try_block,
+ bool *this_uninit, constantPoolHandle cp, StackMapTable* stackmap_table,
+ TRAPS) {
u2 bci = bcs->bci();
VerificationType type = current_frame->pop_stack(
VerificationType::reference_check(), CHECK_VERIFY(this));
@@ -2418,35 +2417,38 @@
return;
}
- // Make sure that this call is not jumped over.
- if (bci < furthest_jump()) {
- verify_error(ErrorContext::bad_code(bci),
- "Bad <init> method call from inside of a branch");
- return;
- }
+ // If this invokespecial call is done from inside of a TRY block then make
+ // sure that all catch clause paths end in a throw. Otherwise, this can
+ // result in returning an incomplete object.
+ if (in_try_block) {
+ ExceptionTable exhandlers(_method());
+ int exlength = exhandlers.length();
+ for(int i = 0; i < exlength; i++) {
+ // Reacquire the table in case a GC happened
+ ExceptionTable exhandlers(_method());
+ u2 start_pc = exhandlers.start_pc(i);
+ u2 end_pc = exhandlers.end_pc(i);
- // Check if this call is done from inside of a TRY block. If so, make
- // sure that all catch clause paths end in a throw. Otherwise, this
- // can result in returning an incomplete object.
- ExceptionTable exhandlers(_method());
- int exlength = exhandlers.length();
- for(int i = 0; i < exlength; i++) {
- u2 start_pc = exhandlers.start_pc(i);
- u2 end_pc = exhandlers.end_pc(i);
-
- if (bci >= start_pc && bci < end_pc) {
- if (!ends_in_athrow(exhandlers.handler_pc(i))) {
- verify_error(ErrorContext::bad_code(bci),
- "Bad <init> method call from after the start of a try block");
- return;
- } else if (VerboseVerification) {
- ResourceMark rm;
- tty->print_cr(
- "Survived call to ends_in_athrow(): %s",
- current_class()->name()->as_C_string());
+ if (bci >= start_pc && bci < end_pc) {
+ if (!ends_in_athrow(exhandlers.handler_pc(i))) {
+ verify_error(ErrorContext::bad_code(bci),
+ "Bad <init> method call from after the start of a try block");
+ return;
+ } else if (VerboseVerification) {
+ ResourceMark rm;
+ tty->print_cr(
+ "Survived call to ends_in_athrow(): %s",
+ current_class()->name()->as_C_string());
+ }
}
}
- }
+
+ // Check the exception handler target stackmaps with the locals from the
+ // incoming stackmap (before initialize_object() changes them to outgoing
+ // state).
+ verify_exception_handler_targets(bci, true, current_frame,
+ stackmap_table, CHECK_VERIFY(this));
+ } // in_try_block
current_frame->initialize_object(type, current_type());
*this_uninit = true;
@@ -2502,6 +2504,13 @@
}
}
}
+ // Check the exception handler target stackmaps with the locals from the
+ // incoming stackmap (before initialize_object() changes them to outgoing
+ // state).
+ if (in_try_block) {
+ verify_exception_handler_targets(bci, *this_uninit, current_frame,
+ stackmap_table, CHECK_VERIFY(this));
+ }
current_frame->initialize_object(type, new_class_type);
} else {
verify_error(ErrorContext::bad_type(bci, current_frame->stack_top_ctx()),
@@ -2512,8 +2521,8 @@
void ClassVerifier::verify_invoke_instructions(
RawBytecodeStream* bcs, u4 code_length, StackMapFrame* current_frame,
- bool *this_uninit, VerificationType return_type,
- constantPoolHandle cp, TRAPS) {
+ bool in_try_block, bool *this_uninit, VerificationType return_type,
+ constantPoolHandle cp, StackMapTable* stackmap_table, TRAPS) {
// Make sure the constant pool item is the right type
u2 index = bcs->get_index_u2();
Bytecodes::Code opcode = bcs->raw_code();
@@ -2649,7 +2658,8 @@
opcode != Bytecodes::_invokedynamic) {
if (method_name == vmSymbols::object_initializer_name()) { // <init> method
verify_invoke_init(bcs, index, ref_class_type, current_frame,
- code_length, this_uninit, cp, CHECK_VERIFY(this));
+ code_length, in_try_block, this_uninit, cp, stackmap_table,
+ CHECK_VERIFY(this));
} else { // other methods
// Ensures that target class is assignable to method class.
if (opcode == Bytecodes::_invokespecial) {
--- ./hotspot/src/share/vm/classfile/verifier.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/classfile/verifier.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -257,9 +257,6 @@
ErrorContext _error_context; // contains information about an error
- // Used to detect illegal jumps over calls to super() and this() in ctors.
- int32_t _furthest_jump;
-
void verify_method(methodHandle method, TRAPS);
char* generate_code_data(methodHandle m, u4 code_length, TRAPS);
void verify_exception_handler_table(u4 code_length, char* code_data,
@@ -302,8 +299,9 @@
void verify_invoke_init(
RawBytecodeStream* bcs, u2 ref_index, VerificationType ref_class_type,
- StackMapFrame* current_frame, u4 code_length, bool* this_uninit,
- constantPoolHandle cp, TRAPS);
+ StackMapFrame* current_frame, u4 code_length, bool in_try_block,
+ bool* this_uninit, constantPoolHandle cp, StackMapTable* stackmap_table,
+ TRAPS);
// Used by ends_in_athrow() to push all handlers that contain bci onto
// the handler_stack, if the handler is not already on the stack.
@@ -317,8 +315,8 @@
void verify_invoke_instructions(
RawBytecodeStream* bcs, u4 code_length, StackMapFrame* current_frame,
- bool* this_uninit, VerificationType return_type,
- constantPoolHandle cp, TRAPS);
+ bool in_try_block, bool* this_uninit, VerificationType return_type,
+ constantPoolHandle cp, StackMapTable* stackmap_table, TRAPS);
VerificationType get_newarray_type(u2 index, u2 bci, TRAPS);
void verify_anewarray(u2 bci, u2 index, constantPoolHandle cp,
@@ -413,19 +411,6 @@
TypeOrigin ref_ctx(const char* str, TRAPS);
- // Keep track of the furthest branch done in a method to make sure that
- // there are no branches over calls to super() or this() from inside of
- // a constructor.
- int32_t furthest_jump() { return _furthest_jump; }
-
- void set_furthest_jump(int32_t target) {
- _furthest_jump = target;
- }
-
- void update_furthest_jump(int32_t target) {
- if (target > _furthest_jump) _furthest_jump = target;
- }
-
};
inline int ClassVerifier::change_sig_to_verificationType(
--- ./hotspot/src/share/vm/classfile/vmSymbols.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/classfile/vmSymbols.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -81,6 +81,7 @@
template(java_lang_ref_WeakReference, "java/lang/ref/WeakReference") \
template(java_lang_ref_FinalReference, "java/lang/ref/FinalReference") \
template(java_lang_ref_PhantomReference, "java/lang/ref/PhantomReference") \
+ template(sun_misc_Cleaner, "sun/misc/Cleaner") \
template(java_lang_ref_Finalizer, "java/lang/ref/Finalizer") \
template(java_lang_reflect_AccessibleObject, "java/lang/reflect/AccessibleObject") \
template(java_lang_reflect_Method, "java/lang/reflect/Method") \
--- ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -2752,10 +2752,12 @@
}
}
-void CompactibleFreeListSpace:: par_get_chunk_of_blocks(size_t word_sz, size_t n, FreeList<FreeChunk>* fl) {
- assert(fl->count() == 0, "Precondition.");
- assert(word_sz < CompactibleFreeListSpace::IndexSetSize,
- "Precondition");
+// Used by par_get_chunk_of_blocks() for the chunks from the
+// indexed_free_lists. Looks for a chunk with size that is a multiple
+// of "word_sz" and if found, splits it into "word_sz" chunks and add
+// to the free list "fl". "n" is the maximum number of chunks to
+// be added to "fl".
+bool CompactibleFreeListSpace:: par_get_chunk_of_blocks_IFL(size_t word_sz, size_t n, FreeList<FreeChunk>* fl) {
// We'll try all multiples of word_sz in the indexed set, starting with
// word_sz itself and, if CMSSplitIndexedFreeListBlocks, try larger multiples,
@@ -2836,11 +2838,15 @@
Mutex::_no_safepoint_check_flag);
ssize_t births = _indexedFreeList[word_sz].split_births() + num;
_indexedFreeList[word_sz].set_split_births(births);
- return;
+ return true;
}
}
+ return found;
}
- // Otherwise, we'll split a block from the dictionary.
+}
+
+FreeChunk* CompactibleFreeListSpace::get_n_way_chunk_to_split(size_t word_sz, size_t n) {
+
FreeChunk* fc = NULL;
FreeChunk* rem_fc = NULL;
size_t rem;
@@ -2852,16 +2858,12 @@
_dictionary->min_size()),
FreeBlockDictionary<FreeChunk>::atLeast);
if (fc != NULL) {
- _bt.allocated((HeapWord*)fc, fc->size(), true /* reducing */); // update _unallocated_blk
- dictionary()->dict_census_udpate(fc->size(),
- true /*split*/,
- false /*birth*/);
break;
} else {
n--;
}
}
- if (fc == NULL) return;
+ if (fc == NULL) return NULL;
// Otherwise, split up that block.
assert((ssize_t)n >= 1, "Control point invariant");
assert(fc->is_free(), "Error: should be a free block");
@@ -2883,10 +2885,14 @@
// dictionary and return, leaving "fl" empty.
if (n == 0) {
returnChunkToDictionary(fc);
- assert(fl->count() == 0, "We never allocated any blocks");
- return;
+ return NULL;
}
+ _bt.allocated((HeapWord*)fc, fc->size(), true /* reducing */); // update _unallocated_blk
+ dictionary()->dict_census_udpate(fc->size(),
+ true /*split*/,
+ false /*birth*/);
+
// First return the remainder, if any.
// Note that we hold the lock until we decide if we're going to give
// back the remainder to the dictionary, since a concurrent allocation
@@ -2919,7 +2925,24 @@
_indexedFreeList[rem].return_chunk_at_head(rem_fc);
smallSplitBirth(rem);
}
- assert((ssize_t)n > 0 && fc != NULL, "Consistency");
+ assert(n * word_sz == fc->size(),
+ err_msg("Chunk size " SIZE_FORMAT " is not exactly splittable by "
+ SIZE_FORMAT " sized chunks of size " SIZE_FORMAT,
+ fc->size(), n, word_sz));
+ return fc;
+}
+
+void CompactibleFreeListSpace:: par_get_chunk_of_blocks_dictionary(size_t word_sz, size_t targetted_number_of_chunks, FreeList<FreeChunk>* fl) {
+
+ FreeChunk* fc = get_n_way_chunk_to_split(word_sz, targetted_number_of_chunks);
+
+ if (fc == NULL) {
+ return;
+ }
+
+ size_t n = fc->size() / word_sz;
+
+ assert((ssize_t)n > 0, "Consistency");
// Now do the splitting up.
// Must do this in reverse order, so that anybody attempting to
// access the main chunk sees it as a single free block until we
@@ -2967,6 +2990,20 @@
assert(fl->tail()->next() == NULL, "List invariant.");
}
+void CompactibleFreeListSpace:: par_get_chunk_of_blocks(size_t word_sz, size_t n, FreeList<FreeChunk>* fl) {
+ assert(fl->count() == 0, "Precondition.");
+ assert(word_sz < CompactibleFreeListSpace::IndexSetSize,
+ "Precondition");
+
+ if (par_get_chunk_of_blocks_IFL(word_sz, n, fl)) {
+ // Got it
+ return;
+ }
+
+ // Otherwise, we'll split a block from the dictionary.
+ par_get_chunk_of_blocks_dictionary(word_sz, n, fl);
+}
+
// Set up the space's par_seq_tasks structure for work claiming
// for parallel rescan. See CMSParRemarkTask where this is currently used.
// XXX Need to suitably abstract and generalize this and the next
--- ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -171,6 +171,20 @@
// list of size "word_sz", and must now be decremented.
void par_get_chunk_of_blocks(size_t word_sz, size_t n, FreeList<FreeChunk>* fl);
+ // Used by par_get_chunk_of_blocks() for the chunks from the
+ // indexed_free_lists.
+ bool par_get_chunk_of_blocks_IFL(size_t word_sz, size_t n, FreeList<FreeChunk>* fl);
+
+ // Used by par_get_chunk_of_blocks_dictionary() to get a chunk
+ // evenly splittable into "n" "word_sz" chunks. Returns that
+ // evenly splittable chunk. May split a larger chunk to get the
+ // evenly splittable chunk.
+ FreeChunk* get_n_way_chunk_to_split(size_t word_sz, size_t n);
+
+ // Used by par_get_chunk_of_blocks() for the chunks from the
+ // dictionary.
+ void par_get_chunk_of_blocks_dictionary(size_t word_sz, size_t n, FreeList<FreeChunk>* fl);
+
// Allocation helper functions
// Allocate using a strategy that takes from the indexed free lists
// first. This allocation strategy assumes a companion sweeping
--- ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -757,7 +757,7 @@
// Support for parallelizing survivor space rescan
if ((CMSParallelRemarkEnabled && CMSParallelSurvivorRemarkEnabled) || CMSParallelInitialMarkEnabled) {
const size_t max_plab_samples =
- ((DefNewGeneration*)_young_gen)->max_survivor_size()/MinTLABSize;
+ ((DefNewGeneration*)_young_gen)->max_survivor_size() / plab_sample_minimum_size();
_survivor_plab_array = NEW_C_HEAP_ARRAY(ChunkArray, ParallelGCThreads, mtGC);
_survivor_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, 2*max_plab_samples, mtGC);
@@ -824,6 +824,12 @@
_inter_sweep_timer.start(); // start of time
}
+size_t CMSCollector::plab_sample_minimum_size() {
+ // The default value of MinTLABSize is 2k, but there is
+ // no way to get the default value if the flag has been overridden.
+ return MAX2(ThreadLocalAllocBuffer::min_size() * HeapWordSize, 2 * K);
+}
+
const char* ConcurrentMarkSweepGeneration::name() const {
return "concurrent mark-sweep generation";
}
--- ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -766,6 +766,10 @@
size_t* _cursor;
ChunkArray* _survivor_plab_array;
+ // A bounded minimum size of PLABs, should not return too small values since
+ // this will affect the size of the data structures used for parallel young gen rescan
+ size_t plab_sample_minimum_size();
+
// Support for marking stack overflow handling
bool take_from_overflow_list(size_t num, CMSMarkStack* to_stack);
bool par_take_from_overflow_list(size_t num,
--- ./hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -172,7 +172,7 @@
// Should be called when we want to release the active region which
// is returned after it's been retired.
- HeapRegion* release();
+ virtual HeapRegion* release();
#if G1_ALLOC_REGION_TRACING
void trace(const char* str, size_t word_size = 0, HeapWord* result = NULL);
--- ./hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 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
@@ -1519,7 +1519,7 @@
}
if (G1Log::finer()) {
- g1_policy()->print_detailed_heap_transition();
+ g1_policy()->print_detailed_heap_transition(true /* full */);
}
print_heap_after_gc();
@@ -6628,6 +6628,35 @@
_g1h->retire_gc_alloc_region(alloc_region, allocated_bytes,
GCAllocForTenured);
}
+
+HeapRegion* OldGCAllocRegion::release() {
+ HeapRegion* cur = get();
+ if (cur != NULL) {
+ // Determine how far we are from the next card boundary. If it is smaller than
+ // the minimum object size we can allocate into, expand into the next card.
+ HeapWord* top = cur->top();
+ HeapWord* aligned_top = (HeapWord*)align_ptr_up(top, G1BlockOffsetSharedArray::N_bytes);
+
+ size_t to_allocate_words = pointer_delta(aligned_top, top, HeapWordSize);
+
+ if (to_allocate_words != 0) {
+ // We are not at a card boundary. Fill up, possibly into the next, taking the
+ // end of the region and the minimum object size into account.
+ to_allocate_words = MIN2(pointer_delta(cur->end(), cur->top(), HeapWordSize),
+ MAX2(to_allocate_words, G1CollectedHeap::min_fill_size()));
+
+ // Skip allocation if there is not enough space to allocate even the smallest
+ // possible object. In this case this region will not be retained, so the
+ // original problem cannot occur.
+ if (to_allocate_words >= G1CollectedHeap::min_fill_size()) {
+ HeapWord* dummy = attempt_allocation(to_allocate_words, true /* bot_updates */);
+ CollectedHeap::fill_with_object(dummy, to_allocate_words);
+ }
+ }
+ }
+ return G1AllocRegion::release();
+}
+
// Heap region set verification
class VerifyRegionListsClosure : public HeapRegionClosure {
--- ./hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -183,6 +183,13 @@
public:
OldGCAllocRegion()
: G1AllocRegion("Old GC Alloc Region", true /* bot_updates */) { }
+
+ // This specialization of release() makes sure that the last card that has been
+ // allocated into has been completely filled by a dummy object.
+ // This avoids races when remembered set scanning wants to update the BOT of the
+ // last card in the retained old gc alloc region, and allocation threads
+ // allocating into that card at the same time.
+ virtual HeapRegion* release();
};
// The G1 STW is alive closure.
--- ./hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 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
@@ -124,9 +124,12 @@
_last_young_gc(false),
_last_gc_was_young(false),
- _eden_bytes_before_gc(0),
- _survivor_bytes_before_gc(0),
- _capacity_before_gc(0),
+ _eden_used_bytes_before_gc(0),
+ _survivor_used_bytes_before_gc(0),
+ _heap_used_bytes_before_gc(0),
+ _permgen_used_bytes_before_gc(0),
+ _eden_capacity_bytes_before_gc(0),
+ _heap_capacity_bytes_before_gc(0),
_eden_cset_region_length(0),
_survivor_cset_region_length(0),
@@ -747,7 +750,7 @@
void G1CollectorPolicy::record_full_collection_start() {
_full_collection_start_sec = os::elapsedTime();
- record_heap_size_info_at_start();
+ record_heap_size_info_at_start(true /* full */);
// Release the future to-space so that it is available for compaction into.
_g1->set_full_collection();
}
@@ -804,7 +807,7 @@
_trace_gen0_time_data.record_start_collection(s_w_t_ms);
_stop_world_start = 0.0;
- record_heap_size_info_at_start();
+ record_heap_size_info_at_start(false /* full */);
phase_times()->record_cur_collection_start_sec(start_time_sec);
_pending_cards = _g1->pending_card_num();
@@ -939,14 +942,6 @@
_mmu_tracker->add_pause(end_time_sec - pause_time_ms/1000.0,
end_time_sec, false);
- size_t freed_bytes =
- _cur_collection_pause_used_at_start_bytes - cur_used_bytes;
- size_t surviving_bytes = _collection_set_bytes_used_before - freed_bytes;
-
- double survival_fraction =
- (double)surviving_bytes/
- (double)_collection_set_bytes_used_before;
-
evacuation_info.set_collectionset_used_before(_collection_set_bytes_used_before);
evacuation_info.set_bytes_copied(_bytes_copied_during_gc);
@@ -1002,6 +997,7 @@
}
}
}
+
bool new_in_marking_window = _in_marking_window;
bool new_in_marking_window_im = false;
if (during_initial_mark_pause()) {
@@ -1087,8 +1083,10 @@
}
_rs_length_diff_seq->add((double) rs_length_diff);
- size_t copied_bytes = surviving_bytes;
+ size_t freed_bytes = _heap_used_bytes_before_gc - cur_used_bytes;
+ size_t copied_bytes = _collection_set_bytes_used_before - freed_bytes;
double cost_per_byte_ms = 0.0;
+
if (copied_bytes > 0) {
cost_per_byte_ms = phase_times()->average_last_obj_copy_time() / (double) copied_bytes;
if (_in_marking_window) {
@@ -1152,51 +1150,66 @@
byte_size_in_proper_unit((double)(bytes)), \
proper_unit_for_byte_size((bytes))
-void G1CollectorPolicy::record_heap_size_info_at_start() {
+void G1CollectorPolicy::record_heap_size_info_at_start(bool full) {
YoungList* young_list = _g1->young_list();
- _eden_bytes_before_gc = young_list->eden_used_bytes();
- _survivor_bytes_before_gc = young_list->survivor_used_bytes();
- _capacity_before_gc = _g1->capacity();
-
- _cur_collection_pause_used_at_start_bytes = _g1->used();
+ _eden_used_bytes_before_gc = young_list->eden_used_bytes();
+ _survivor_used_bytes_before_gc = young_list->survivor_used_bytes();
+ _heap_capacity_bytes_before_gc = _g1->capacity();
+ _heap_used_bytes_before_gc = _g1->used();
_cur_collection_pause_used_regions_at_start = _g1->used_regions();
- size_t eden_capacity_before_gc =
- (_young_list_target_length * HeapRegion::GrainBytes) - _survivor_bytes_before_gc;
+ _eden_capacity_bytes_before_gc =
+ (_young_list_target_length * HeapRegion::GrainBytes) - _survivor_used_bytes_before_gc;
- _prev_eden_capacity = eden_capacity_before_gc;
+ if (full) {
+ _permgen_used_bytes_before_gc = _g1->perm_gen()->used();
+ }
+}
+void G1CollectorPolicy::print_perm_heap_change(size_t perm_prev_used) const {
+ gclog_or_tty->print(", [%s:", _g1->perm_gen()->short_name());
+ _g1->perm_gen()->print_heap_change(perm_prev_used);
+ gclog_or_tty->print("]");
}
void G1CollectorPolicy::print_heap_transition() {
_g1->print_size_transition(gclog_or_tty,
- _cur_collection_pause_used_at_start_bytes, _g1->used(), _g1->capacity());
+ _heap_used_bytes_before_gc,
+ _g1->used(),
+ _g1->capacity());
}
-void G1CollectorPolicy::print_detailed_heap_transition() {
- YoungList* young_list = _g1->young_list();
- size_t eden_bytes = young_list->eden_used_bytes();
- size_t survivor_bytes = young_list->survivor_used_bytes();
- size_t used_before_gc = _cur_collection_pause_used_at_start_bytes;
- size_t used = _g1->used();
- size_t capacity = _g1->capacity();
- size_t eden_capacity =
- (_young_list_target_length * HeapRegion::GrainBytes) - survivor_bytes;
+void G1CollectorPolicy::print_detailed_heap_transition(bool full) {
+ YoungList* young_list = _g1->young_list();
- gclog_or_tty->print_cr(
- " [Eden: "EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")->"EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT") "
- "Survivors: "EXT_SIZE_FORMAT"->"EXT_SIZE_FORMAT" "
- "Heap: "EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")->"
- EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")]",
- EXT_SIZE_PARAMS(_eden_bytes_before_gc),
- EXT_SIZE_PARAMS(_prev_eden_capacity),
- EXT_SIZE_PARAMS(eden_bytes),
- EXT_SIZE_PARAMS(eden_capacity),
- EXT_SIZE_PARAMS(_survivor_bytes_before_gc),
- EXT_SIZE_PARAMS(survivor_bytes),
- EXT_SIZE_PARAMS(used_before_gc),
- EXT_SIZE_PARAMS(_capacity_before_gc),
- EXT_SIZE_PARAMS(used),
- EXT_SIZE_PARAMS(capacity));
+ size_t eden_used_bytes_after_gc = young_list->eden_used_bytes();
+ size_t survivor_used_bytes_after_gc = young_list->survivor_used_bytes();
+ size_t heap_used_bytes_after_gc = _g1->used();
+
+ size_t heap_capacity_bytes_after_gc = _g1->capacity();
+ size_t eden_capacity_bytes_after_gc =
+ (_young_list_target_length * HeapRegion::GrainBytes) - survivor_used_bytes_after_gc;
+
+ gclog_or_tty->print(
+ " [Eden: "EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")->"EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT") "
+ "Survivors: "EXT_SIZE_FORMAT"->"EXT_SIZE_FORMAT" "
+ "Heap: "EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")->"
+ EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")]",
+ EXT_SIZE_PARAMS(_eden_used_bytes_before_gc),
+ EXT_SIZE_PARAMS(_eden_capacity_bytes_before_gc),
+ EXT_SIZE_PARAMS(eden_used_bytes_after_gc),
+ EXT_SIZE_PARAMS(eden_capacity_bytes_after_gc),
+ EXT_SIZE_PARAMS(_survivor_used_bytes_before_gc),
+ EXT_SIZE_PARAMS(survivor_used_bytes_after_gc),
+ EXT_SIZE_PARAMS(_heap_used_bytes_before_gc),
+ EXT_SIZE_PARAMS(_heap_capacity_bytes_before_gc),
+ EXT_SIZE_PARAMS(heap_used_bytes_after_gc),
+ EXT_SIZE_PARAMS(heap_capacity_bytes_after_gc));
+
+ if (full) {
+ print_perm_heap_change(_permgen_used_bytes_before_gc);
+ }
+
+ gclog_or_tty->cr();
}
void G1CollectorPolicy::adjust_concurrent_refinement(double update_rs_time,
--- ./hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 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
@@ -176,7 +176,6 @@
CollectionSetChooser* _collectionSetChooser;
double _full_collection_start_sec;
- size_t _cur_collection_pause_used_at_start_bytes;
uint _cur_collection_pause_used_regions_at_start;
// These exclude marking times.
@@ -195,7 +194,6 @@
uint _young_list_target_length;
uint _young_list_fixed_length;
- size_t _prev_eden_capacity; // used for logging
// The max number of regions we can extend the eden by while the GC
// locker is active. This should be >= _young_list_target_length;
@@ -694,11 +692,12 @@
// Records the information about the heap size for reporting in
// print_detailed_heap_transition
- void record_heap_size_info_at_start();
+ void record_heap_size_info_at_start(bool full);
// Print heap sizing transition (with less and more detail).
void print_heap_transition();
- void print_detailed_heap_transition();
+ void print_detailed_heap_transition(bool full = false);
+ void print_perm_heap_change(size_t perm_prev_used) const;
void record_stop_world_start();
void record_concurrent_pause();
@@ -862,9 +861,16 @@
uint _max_survivor_regions;
// For reporting purposes.
- size_t _eden_bytes_before_gc;
- size_t _survivor_bytes_before_gc;
- size_t _capacity_before_gc;
+ // The value of _heap_bytes_before_gc is also used to calculate
+ // the cost of copying.
+
+ size_t _eden_used_bytes_before_gc; // Eden occupancy before GC
+ size_t _survivor_used_bytes_before_gc; // Survivor occupancy before GC
+ size_t _heap_used_bytes_before_gc; // Heap occupancy before GC
+ size_t _permgen_used_bytes_before_gc; // PermGen occupancy before GC
+
+ size_t _eden_capacity_bytes_before_gc; // Eden capacity before GC
+ size_t _heap_capacity_bytes_before_gc; // Heap capacity before GC
// The amount of survor regions after a collection.
uint _recorded_survivor_regions;
--- ./hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -107,7 +107,15 @@
jbyte *const first = byte_for(mr.start());
jbyte *const last = byte_after(mr.last());
- memset(first, g1_young_gen, last - first);
+ // Below we may use an explicit loop instead of memset() because on
+ // certain platforms memset() can give concurrent readers phantom zeros.
+ if (UseMemSetInBOT) {
+ memset(first, g1_young_gen, last - first);
+ } else {
+ for (jbyte* i = first; i < last; i++) {
+ *i = g1_young_gen;
+ }
+ }
}
#ifndef PRODUCT
--- ./hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -62,7 +62,8 @@
ParGCAllocBuffer(size_t word_sz);
static const size_t min_size() {
- return ThreadLocalAllocBuffer::min_size();
+ // Make sure that we return something that is larger than AlignmentReserve
+ return align_object_size(MAX2(MinTLABSize / HeapWordSize, (uintx)oopDesc::header_size())) + AlignmentReserve;
}
static const size_t max_size() {
--- ./hotspot/src/share/vm/memory/referenceProcessor.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/memory/referenceProcessor.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -119,6 +119,7 @@
_discoveredWeakRefs = &_discoveredSoftRefs[_max_num_q];
_discoveredFinalRefs = &_discoveredWeakRefs[_max_num_q];
_discoveredPhantomRefs = &_discoveredFinalRefs[_max_num_q];
+ _discoveredCleanerRefs = &_discoveredPhantomRefs[_max_num_q];
// Initialize all entries to NULL
for (uint i = 0; i < _max_num_q * number_of_subclasses_of_ref(); i++) {
@@ -250,6 +251,13 @@
phantom_count =
process_discovered_reflist(_discoveredPhantomRefs, NULL, false,
is_alive, keep_alive, complete_gc, task_executor);
+
+ // Process cleaners, but include them in phantom statistics. We expect
+ // Cleaner references to be temporary, and don't want to deal with
+ // possible incompatibilities arising from making it more visible.
+ phantom_count +=
+ process_discovered_reflist(_discoveredCleanerRefs, NULL, false,
+ is_alive, keep_alive, complete_gc, task_executor);
}
// Weak global JNI references. It would make more sense (semantically) to
@@ -899,6 +907,7 @@
balance_queues(_discoveredWeakRefs);
balance_queues(_discoveredFinalRefs);
balance_queues(_discoveredPhantomRefs);
+ balance_queues(_discoveredCleanerRefs);
}
size_t
@@ -1058,6 +1067,9 @@
case REF_PHANTOM:
list = &_discoveredPhantomRefs[id];
break;
+ case REF_CLEANER:
+ list = &_discoveredCleanerRefs[id];
+ break;
case REF_NONE:
// we should not reach here if we are an instanceRefKlass
default:
@@ -1353,6 +1365,17 @@
preclean_discovered_reflist(_discoveredPhantomRefs[i], is_alive,
keep_alive, complete_gc, yield);
}
+
+ // Cleaner references. Included in timing for phantom references. We
+ // expect Cleaner references to be temporary, and don't want to deal with
+ // possible incompatibilities arising from making it more visible.
+ for (uint i = 0; i < _max_num_q; i++) {
+ if (yield->should_return()) {
+ return;
+ }
+ preclean_discovered_reflist(_discoveredCleanerRefs[i], is_alive,
+ keep_alive, complete_gc, yield);
+ }
}
}
@@ -1421,6 +1444,7 @@
case 1: return "WeakRef";
case 2: return "FinalRef";
case 3: return "PhantomRef";
+ case 4: return "CleanerRef";
}
ShouldNotReachHere();
return NULL;
--- ./hotspot/src/share/vm/memory/referenceProcessor.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/memory/referenceProcessor.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -272,9 +272,10 @@
DiscoveredList* _discoveredWeakRefs;
DiscoveredList* _discoveredFinalRefs;
DiscoveredList* _discoveredPhantomRefs;
+ DiscoveredList* _discoveredCleanerRefs;
public:
- static int number_of_subclasses_of_ref() { return (REF_PHANTOM - REF_OTHER); }
+ static int number_of_subclasses_of_ref() { return (REF_CLEANER - REF_OTHER); }
uint num_q() { return _num_q; }
uint max_num_q() { return _max_num_q; }
--- ./hotspot/src/share/vm/memory/referenceType.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/memory/referenceType.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -35,7 +35,8 @@
REF_SOFT, // Subclass of java/lang/ref/SoftReference
REF_WEAK, // Subclass of java/lang/ref/WeakReference
REF_FINAL, // Subclass of java/lang/ref/FinalReference
- REF_PHANTOM // Subclass of java/lang/ref/PhantomReference
+ REF_PHANTOM, // Subclass of java/lang/ref/PhantomReference
+ REF_CLEANER // Subclass of sun/misc/Cleaner
};
#endif // SHARE_VM_MEMORY_REFRERENCETYPE_HPP
--- ./hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -240,22 +240,19 @@
}
size_t ThreadLocalAllocBuffer::initial_desired_size() {
- size_t init_sz;
+ size_t init_sz = 0;
if (TLABSize > 0) {
- init_sz = MIN2(TLABSize / HeapWordSize, max_size());
- } else if (global_stats() == NULL) {
- // Startup issue - main thread initialized before heap initialized.
- init_sz = min_size();
- } else {
+ init_sz = TLABSize / HeapWordSize;
+ } else if (global_stats() != NULL) {
// Initial size is a function of the average number of allocating threads.
unsigned nof_threads = global_stats()->allocating_threads_avg();
init_sz = (Universe::heap()->tlab_capacity(myThread()) / HeapWordSize) /
(nof_threads * target_refills());
init_sz = align_object_size(init_sz);
- init_sz = MIN2(MAX2(init_sz, min_size()), max_size());
}
+ init_sz = MIN2(MAX2(init_sz, min_size()), max_size());
return init_sz;
}
--- ./hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -103,7 +103,7 @@
// do nothing. tlabs must be inited by initialize() calls
}
- static const size_t min_size() { return align_object_size(MinTLABSize / HeapWordSize); }
+ static const size_t min_size() { return align_object_size(MinTLABSize / HeapWordSize) + alignment_reserve(); }
static const size_t max_size();
HeapWord* start() const { return _start; }
--- ./hotspot/src/share/vm/oops/cpCacheOop.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/oops/cpCacheOop.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -140,8 +140,15 @@
oop_store(&_f1, f1);
}
void release_set_f1(oop f1);
- void set_f2(intx f2) { assert(_f2 == 0 || _f2 == f2, "illegal field change"); _f2 = f2; }
- void set_f2_as_vfinal_method(methodOop f2) { assert(_f2 == 0 || _f2 == (intptr_t) f2, "illegal field change"); assert(is_vfinal(), "flags must be set"); _f2 = (intptr_t) f2; }
+ void set_f2(intx f2) {
+ intx existing_f2 = _f2; // read once
+ assert(existing_f2 == 0 || existing_f2 == f2, "illegal field change");
+ _f2 = f2;
+ }
+ void set_f2_as_vfinal_method(methodOop f2) {
+ assert(is_vfinal(), "flags must be set");
+ set_f2((intx)f2);
+ }
int make_flags(TosState state, int option_bits, int field_index_or_method_params);
void set_flags(intx flags) { _flags = flags; }
bool init_flags_atomic(intx flags);
--- ./hotspot/src/share/vm/oops/objArrayOop.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/oops/objArrayOop.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -45,9 +45,10 @@
private:
// Give size of objArrayOop in HeapWords minus the header
static int array_size(int length) {
- const int OopsPerHeapWord = HeapWordSize/heapOopSize;
+ const uint OopsPerHeapWord = HeapWordSize/heapOopSize;
assert(OopsPerHeapWord >= 1 && (HeapWordSize % heapOopSize == 0),
"Else the following (new) computation would be in error");
+ uint res = ((uint)length + OopsPerHeapWord - 1)/OopsPerHeapWord;
#ifdef ASSERT
// The old code is left in for sanity-checking; it'll
// go away pretty soon. XXX
@@ -55,16 +56,15 @@
// oop->length() * HeapWordsPerOop;
// With narrowOops, HeapWordsPerOop is 1/2 or equal 0 as an integer.
// The oop elements are aligned up to wordSize
- const int HeapWordsPerOop = heapOopSize/HeapWordSize;
- int old_res;
+ const uint HeapWordsPerOop = heapOopSize/HeapWordSize;
+ uint old_res;
if (HeapWordsPerOop > 0) {
old_res = length * HeapWordsPerOop;
} else {
- old_res = align_size_up(length, OopsPerHeapWord)/OopsPerHeapWord;
+ old_res = align_size_up((uint)length, OopsPerHeapWord)/OopsPerHeapWord;
}
+ assert(res == old_res, "Inconsistency between old and new.");
#endif // ASSERT
- int res = ((uint)length + OopsPerHeapWord - 1)/OopsPerHeapWord;
- assert(res == old_res, "Inconsistency between old and new.");
return res;
}
--- ./hotspot/src/share/vm/oops/typeArrayOop.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/oops/typeArrayOop.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -162,7 +162,7 @@
DEBUG_ONLY(BasicType etype = Klass::layout_helper_element_type(lh));
assert(length <= arrayOopDesc::max_array_length(etype), "no overflow");
- julong size_in_bytes = length;
+ julong size_in_bytes = (juint)length;
size_in_bytes <<= element_shift;
size_in_bytes += instance_header_size;
julong size_in_words = ((size_in_bytes + (HeapWordSize-1)) >> LogHeapWordSize);
--- ./hotspot/src/share/vm/opto/compile.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/opto/compile.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, 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
@@ -669,6 +669,7 @@
#endif
set_print_inlining(PrintInlining || method()->has_option("PrintInlining") NOT_PRODUCT( || PrintOptoInlining));
set_print_intrinsics(PrintIntrinsics || method()->has_option("PrintIntrinsics"));
+ set_has_irreducible_loop(true); // conservative until build_loop_tree() reset it
if (ProfileTraps) {
// Make sure the method being compiled gets its own MDO,
@@ -936,6 +937,8 @@
set_print_assembly(PrintFrameConverterAssembly);
set_parsed_irreducible_loop(false);
#endif
+ set_has_irreducible_loop(false); // no loops
+
CompileWrapper cw(this);
Init(/*AliasLevel=*/ 0);
init_tf((*generator)());
@@ -1100,7 +1103,7 @@
if( start->is_Start() )
return start->as_Start();
}
- ShouldNotReachHere();
+ fatal("Did not find Start node!");
return NULL;
}
--- ./hotspot/src/share/vm/opto/compile.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/opto/compile.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, 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
@@ -291,6 +291,7 @@
bool _trace_opto_output;
bool _parsed_irreducible_loop; // True if ciTypeFlow detected irreducible loops during parsing
#endif
+ bool _has_irreducible_loop; // Found irreducible loops
// JSR 292
bool _has_method_handle_invokes; // True if this method has MethodHandle invokes.
@@ -552,6 +553,8 @@
bool parsed_irreducible_loop() const { return _parsed_irreducible_loop; }
void set_parsed_irreducible_loop(bool z) { _parsed_irreducible_loop = z; }
#endif
+ bool has_irreducible_loop() const { return _has_irreducible_loop; }
+ void set_has_irreducible_loop(bool z) { _has_irreducible_loop = z; }
// JSR 292
bool has_method_handle_invokes() const { return _has_method_handle_invokes; }
--- ./hotspot/src/share/vm/opto/ifnode.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/opto/ifnode.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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
@@ -503,7 +503,7 @@
jint off = 0;
if (l->is_top()) {
return 0;
- } else if (l->is_Add()) {
+ } else if (l->Opcode() == Op_AddI) {
if ((off = l->in(1)->find_int_con(0)) != 0) {
ind = l->in(2);
} else if ((off = l->in(2)->find_int_con(0)) != 0) {
--- ./hotspot/src/share/vm/opto/library_call.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/opto/library_call.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -3699,8 +3699,11 @@
}
-//------------------------------inline_native_hashcode--------------------
-// Build special case code for calls to hashCode on an object.
+/**
+ * Build special case code for calls to hashCode on an object. This call may
+ * be virtual (invokevirtual) or bound (invokespecial). For each case we generate
+ * slightly different code.
+ */
bool LibraryCallKit::inline_native_hashcode(bool is_virtual, bool is_static) {
assert(is_static == callee()->is_static(), "correct intrinsic selection");
assert(!(is_virtual && is_static), "either virtual, special, or static");
@@ -3708,11 +3711,9 @@
enum { _slow_path = 1, _fast_path, _null_path, PATH_LIMIT };
RegionNode* result_reg = new(C) RegionNode(PATH_LIMIT);
- PhiNode* result_val = new(C) PhiNode(result_reg,
- TypeInt::INT);
+ PhiNode* result_val = new(C) PhiNode(result_reg, TypeInt::INT);
PhiNode* result_io = new(C) PhiNode(result_reg, Type::ABIO);
- PhiNode* result_mem = new(C) PhiNode(result_reg, Type::MEMORY,
- TypePtr::BOTTOM);
+ PhiNode* result_mem = new(C) PhiNode(result_reg, Type::MEMORY, TypePtr::BOTTOM);
Node* obj = NULL;
if (!is_static) {
// Check for hashing null object
@@ -3738,12 +3739,6 @@
return true;
}
- // After null check, get the object's klass.
- Node* obj_klass = load_object_klass(obj);
-
- // This call may be virtual (invokevirtual) or bound (invokespecial).
- // For each case we generate slightly different code.
-
// We only go to the fast case code if we pass a number of guards. The
// paths which do not pass are accumulated in the slow_region.
RegionNode* slow_region = new (C) RegionNode(1);
@@ -3756,19 +3751,24 @@
// guard for non-virtual calls -- the caller is known to be the native
// Object hashCode().
if (is_virtual) {
+ // After null check, get the object's klass.
+ Node* obj_klass = load_object_klass(obj);
generate_virtual_guard(obj_klass, slow_region);
}
// Get the header out of the object, use LoadMarkNode when available
Node* header_addr = basic_plus_adr(obj, oopDesc::mark_offset_in_bytes());
- Node* header = make_load(control(), header_addr, TypeX_X, TypeX_X->basic_type());
+ // The control of the load must be NULL. Otherwise, the load can move before
+ // the null check after castPP removal.
+ Node* no_ctrl = NULL;
+ Node* header = make_load(no_ctrl, header_addr, TypeX_X, TypeX_X->basic_type());
// Test the header to see if it is unlocked.
- Node *lock_mask = _gvn.MakeConX(markOopDesc::biased_lock_mask_in_place);
- Node *lmasked_header = _gvn.transform( new (C) AndXNode(header, lock_mask) );
- Node *unlocked_val = _gvn.MakeConX(markOopDesc::unlocked_value);
- Node *chk_unlocked = _gvn.transform( new (C) CmpXNode( lmasked_header, unlocked_val));
- Node *test_unlocked = _gvn.transform( new (C) BoolNode( chk_unlocked, BoolTest::ne) );
+ Node* lock_mask = _gvn.MakeConX(markOopDesc::biased_lock_mask_in_place);
+ Node* lmasked_header = _gvn.transform(new (C) AndXNode(header, lock_mask));
+ Node* unlocked_val = _gvn.MakeConX(markOopDesc::unlocked_value);
+ Node* chk_unlocked = _gvn.transform(new (C) CmpXNode( lmasked_header, unlocked_val));
+ Node* test_unlocked = _gvn.transform(new (C) BoolNode( chk_unlocked, BoolTest::ne));
generate_slow_guard(test_unlocked, slow_region);
@@ -3776,19 +3776,19 @@
// We depend on hash_mask being at most 32 bits and avoid the use of
// hash_mask_in_place because it could be larger than 32 bits in a 64-bit
// vm: see markOop.hpp.
- Node *hash_mask = _gvn.intcon(markOopDesc::hash_mask);
- Node *hash_shift = _gvn.intcon(markOopDesc::hash_shift);
- Node *hshifted_header= _gvn.transform( new (C) URShiftXNode(header, hash_shift) );
+ Node* hash_mask = _gvn.intcon(markOopDesc::hash_mask);
+ Node* hash_shift = _gvn.intcon(markOopDesc::hash_shift);
+ Node* hshifted_header= _gvn.transform(new (C) URShiftXNode(header, hash_shift));
// This hack lets the hash bits live anywhere in the mark object now, as long
// as the shift drops the relevant bits into the low 32 bits. Note that
// Java spec says that HashCode is an int so there's no point in capturing
// an 'X'-sized hashcode (32 in 32-bit build or 64 in 64-bit build).
hshifted_header = ConvX2I(hshifted_header);
- Node *hash_val = _gvn.transform( new (C) AndINode(hshifted_header, hash_mask) );
-
- Node *no_hash_val = _gvn.intcon(markOopDesc::no_hash);
- Node *chk_assigned = _gvn.transform( new (C) CmpINode( hash_val, no_hash_val));
- Node *test_assigned = _gvn.transform( new (C) BoolNode( chk_assigned, BoolTest::eq) );
+ Node* hash_val = _gvn.transform(new (C) AndINode(hshifted_header, hash_mask));
+
+ Node* no_hash_val = _gvn.intcon(markOopDesc::no_hash);
+ Node* chk_assigned = _gvn.transform(new (C) CmpINode( hash_val, no_hash_val));
+ Node* test_assigned = _gvn.transform(new (C) BoolNode( chk_assigned, BoolTest::eq));
generate_slow_guard(test_assigned, slow_region);
--- ./hotspot/src/share/vm/opto/loopTransform.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/opto/loopTransform.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1127,6 +1127,7 @@
// Now force out all loop-invariant dominating tests. The optimizer
// finds some, but we _know_ they are all useless.
peeled_dom_test_elim(loop,old_new);
+ loop->record_for_igvn();
}
//------------------------------is_invariant-----------------------------
--- ./hotspot/src/share/vm/opto/loopnode.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/opto/loopnode.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -266,9 +266,9 @@
// Counted loop head must be a good RegionNode with only 3 not NULL
// control input edges: Self, Entry, LoopBack.
- if (x->in(LoopNode::Self) == NULL || x->req() != 3)
+ if (x->in(LoopNode::Self) == NULL || x->req() != 3 || loop->_irreducible) {
return false;
-
+ }
Node *init_control = x->in(LoopNode::EntryControl);
Node *back_control = x->in(LoopNode::LoopBackControl);
if (init_control == NULL || back_control == NULL) // Partially dead
@@ -1522,11 +1522,11 @@
// If I have one hot backedge, peel off myself loop.
// I better be the outermost loop.
- if( _head->req() > 3 ) {
+ if (_head->req() > 3 && !_irreducible) {
split_outer_loop( phase );
result = true;
- } else if( !_head->is_Loop() && !_irreducible ) {
+ } else if (!_head->is_Loop() && !_irreducible) {
// Make a new LoopNode to replace the old loop head
Node *l = new (phase->C) LoopNode( _head->in(1), _head->in(2) );
l = igvn.register_new_node_with_optimizer(l, _head);
@@ -2938,6 +2938,7 @@
return pre_order;
}
}
+ C->set_has_irreducible_loop(_has_irreducible_loops);
}
// This Node might be a decision point for loops. It is only if
@@ -3171,17 +3172,16 @@
bool had_error = false;
#ifdef ASSERT
if (early != C->root()) {
- // Make sure that there's a dominance path from use to LCA
- Node* d = use;
- while (d != LCA) {
- d = idom(d);
+ // Make sure that there's a dominance path from LCA to early
+ Node* d = LCA;
+ while (d != early) {
if (d == C->root()) {
- tty->print_cr("*** Use %d isn't dominated by def %s", use->_idx, n->_idx);
- n->dump();
- use->dump();
+ dump_bad_graph("Bad graph detected in compute_lca_of_uses", n, early, LCA);
+ tty->print_cr("*** Use %d isn't dominated by def %d ***", use->_idx, n->_idx);
had_error = true;
break;
}
+ d = idom(d);
}
}
#endif
@@ -3434,6 +3434,13 @@
_igvn._worklist.push(n); // Maybe we'll normalize it, if no more loops.
}
+#ifdef ASSERT
+ if (_verify_only && !n->is_CFG()) {
+ // Check def-use domination.
+ compute_lca_of_uses(n, get_ctrl(n), true /* verify */);
+ }
+#endif
+
// CFG and pinned nodes already handled
if( n->in(0) ) {
if( n->in(0)->is_top() ) return; // Dead?
--- ./hotspot/src/share/vm/opto/loopopts.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/opto/loopopts.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -2684,6 +2684,7 @@
// Inhibit more partial peeling on this loop
new_head_clone->set_partial_peel_loop();
C->set_major_progress();
+ loop->record_for_igvn();
#if !defined(PRODUCT)
if (TracePartialPeeling) {
--- ./hotspot/src/share/vm/opto/memnode.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/opto/memnode.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, 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
@@ -292,33 +292,16 @@
int alias_idx = phase->C->get_alias_index(t_adr->is_ptr());
}
-#ifdef ASSERT
Node* base = NULL;
- if (address->is_AddP())
+ if (address->is_AddP()) {
base = address->in(AddPNode::Base);
+ }
if (base != NULL && phase->type(base)->higher_equal(TypePtr::NULL_PTR) &&
!t_adr->isa_rawptr()) {
// Note: raw address has TOP base and top->higher_equal(TypePtr::NULL_PTR) is true.
- Compile* C = phase->C;
- tty->cr();
- tty->print_cr("===== NULL+offs not RAW address =====");
- if (C->is_dead_node(this->_idx)) tty->print_cr("'this' is dead");
- if ((ctl != NULL) && C->is_dead_node(ctl->_idx)) tty->print_cr("'ctl' is dead");
- if (C->is_dead_node(mem->_idx)) tty->print_cr("'mem' is dead");
- if (C->is_dead_node(address->_idx)) tty->print_cr("'address' is dead");
- if (C->is_dead_node(base->_idx)) tty->print_cr("'base' is dead");
- tty->cr();
- base->dump(1);
- tty->cr();
- this->dump(2);
- tty->print("this->adr_type(): "); adr_type()->dump(); tty->cr();
- tty->print("phase->type(address): "); t_adr->dump(); tty->cr();
- tty->print("phase->type(base): "); phase->type(address)->dump(); tty->cr();
- tty->cr();
+ // Skip this node optimization if its address has TOP base.
+ return NodeSentinel; // caller will return NULL
}
- assert(base == NULL || t_adr->isa_rawptr() ||
- !phase->type(base)->higher_equal(TypePtr::NULL_PTR), "NULL+offs not RAW address?");
-#endif
// Avoid independent memory operations
Node* old_mem = mem;
--- ./hotspot/src/share/vm/opto/node.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/opto/node.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, 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
@@ -27,6 +27,7 @@
#include "memory/allocation.inline.hpp"
#include "opto/cfgnode.hpp"
#include "opto/connode.hpp"
+#include "opto/loopnode.hpp"
#include "opto/machnode.hpp"
#include "opto/matcher.hpp"
#include "opto/node.hpp"
@@ -1225,6 +1226,7 @@
Node *top = igvn->C->top();
nstack.push(dead);
+ bool has_irreducible_loop = igvn->C->has_irreducible_loop();
while (nstack.size() > 0) {
dead = nstack.pop();
@@ -1239,13 +1241,31 @@
assert (!use->is_Con(), "Control for Con node should be Root node.");
use->set_req(0, top); // Cut dead edge to prevent processing
nstack.push(use); // the dead node again.
+ } else if (!has_irreducible_loop && // Backedge could be alive in irreducible loop
+ use->is_Loop() && !use->is_Root() && // Don't kill Root (RootNode extends LoopNode)
+ use->in(LoopNode::EntryControl) == dead) { // Dead loop if its entry is dead
+ use->set_req(LoopNode::EntryControl, top); // Cut dead edge to prevent processing
+ use->set_req(0, top); // Cut self edge
+ nstack.push(use);
} else { // Else found a not-dead user
+ // Dead if all inputs are top or null
+ bool dead_use = !use->is_Root(); // Keep empty graph alive
for (uint j = 1; j < use->req(); j++) {
- if (use->in(j) == dead) { // Turn all dead inputs into TOP
+ Node* in = use->in(j);
+ if (in == dead) { // Turn all dead inputs into TOP
use->set_req(j, top);
+ } else if (in != NULL && !in->is_top()) {
+ dead_use = false;
}
}
- igvn->_worklist.push(use);
+ if (dead_use) {
+ if (use->is_Region()) {
+ use->set_req(0, top); // Cut self edge
+ }
+ nstack.push(use);
+ } else {
+ igvn->_worklist.push(use);
+ }
}
// Refresh the iterator, since any number of kills might have happened.
k = dead->last_outs(kmin);
--- ./hotspot/src/share/vm/opto/runtime.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/opto/runtime.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1307,6 +1307,7 @@
// add counters so this is safe.
NamedCounter* head;
do {
+ c->set_next(NULL);
head = _named_counters;
c->set_next(head);
} while (Atomic::cmpxchg_ptr(c, &_named_counters, head) != head);
--- ./hotspot/src/share/vm/opto/runtime.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/opto/runtime.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -85,7 +85,7 @@
NamedCounter* next() const { return _next; }
void set_next(NamedCounter* next) {
- assert(_next == NULL, "already set");
+ assert(_next == NULL || next == NULL, "already set");
_next = next;
}
--- ./hotspot/src/share/vm/opto/superword.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/opto/superword.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1262,8 +1262,9 @@
memops.clear();
for (DUIterator i = upper_insert_pt->outs(); upper_insert_pt->has_out(i); i++) {
Node* use = upper_insert_pt->out(i);
- if (!use->is_Store())
+ if (use->is_Mem() && !use->is_Store()) {
memops.push(use);
+ }
}
MemNode* lower_insert_pt = last;
--- ./hotspot/src/share/vm/prims/jni.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/prims/jni.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012 Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -5037,6 +5037,7 @@
#include "gc_implementation/shared/gcTimer.hpp"
#include "gc_interface/collectedHeap.hpp"
#include "utilities/quickSort.hpp"
+#include "utilities/ostream.hpp"
#define run_unit_test(unit_test_function_call) \
tty->print_cr("Running test: " #unit_test_function_call); \
@@ -5058,6 +5059,7 @@
run_unit_test(QuickSort::test_quick_sort());
run_unit_test(AltHashing::test_alt_hash());
run_unit_test(TestOldFreeSpaceCalculation_test());
+ run_unit_test(test_loggc_filename());
tty->print_cr("All internal VM tests passed");
}
}
--- ./hotspot/src/share/vm/prims/jvm.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/prims/jvm.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -388,6 +388,23 @@
JVM_END
+/*
+ * Return the temporary directory that the VM uses for the attach
+ * and perf data files.
+ *
+ * It is important that this directory is well-known and the
+ * same for all VM instances. It cannot be affected by configuration
+ * variables such as java.io.tmpdir.
+ */
+JVM_ENTRY(jstring, JVM_GetTemporaryDirectory(JNIEnv *env))
+ JVMWrapper("JVM_GetTemporaryDirectory");
+ HandleMark hm(THREAD);
+ const char* temp_dir = os::get_temp_directory();
+ Handle h = java_lang_String::create_from_platform_dependent_str(temp_dir, CHECK_NULL);
+ return (jstring) JNIHandles::make_local(env, h());
+JVM_END
+
+
// java.lang.Runtime /////////////////////////////////////////////////////////////////////////
extern volatile jint vm_created;
@@ -527,6 +544,12 @@
JavaThreadInObjectWaitState jtiows(thread, ms != 0);
if (JvmtiExport::should_post_monitor_wait()) {
JvmtiExport::post_monitor_wait((JavaThread *)THREAD, (oop)obj(), ms);
+
+ // The current thread already owns the monitor and it has not yet
+ // been added to the wait queue so the current thread cannot be
+ // made the successor. This means that the JVMTI_EVENT_MONITOR_WAIT
+ // event handler cannot accidentally consume an unpark() meant for
+ // the ParkEvent associated with this ObjectMonitor.
}
ObjectSynchronizer::wait(obj, ms, THREAD);
JVM_END
--- ./hotspot/src/share/vm/prims/jvm.h Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/prims/jvm.h Mon Jan 05 11:51:17 2015 -0800
@@ -1477,6 +1477,9 @@
JNIEXPORT jobject JNICALL
JVM_InitAgentProperties(JNIEnv *env, jobject agent_props);
+JNIEXPORT jstring JNICALL
+JVM_GetTemporaryDirectory(JNIEnv *env);
+
/* Generics reflection support.
*
* Returns information about the given class's EnclosingMethod
--- ./hotspot/src/share/vm/prims/jvmtiEnvBase.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/prims/jvmtiEnvBase.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -400,7 +400,11 @@
VMOp_Type type() const { return VMOp_GetCurrentContendedMonitor; }
jvmtiError result() { return _result; }
void doit() {
- _result = ((JvmtiEnvBase *)_env)->get_current_contended_monitor(_calling_thread,_java_thread,_owned_monitor_ptr);
+ _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
+ if (Threads::includes(_java_thread) && !_java_thread->is_exiting() &&
+ _java_thread->threadObj() != NULL) {
+ _result = ((JvmtiEnvBase *)_env)->get_current_contended_monitor(_calling_thread,_java_thread,_owned_monitor_ptr);
+ }
}
};
--- ./hotspot/src/share/vm/runtime/arguments.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/runtime/arguments.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, 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
@@ -55,7 +55,7 @@
#endif
// Note: This is a special bug reporting site for the JVM
-#define DEFAULT_VENDOR_URL_BUG "http://bugreport.sun.com/bugreport/crash.jsp"
+#define DEFAULT_VENDOR_URL_BUG "http://bugreport.java.com/bugreport/crash.jsp"
#define DEFAULT_JAVA_LAUNCHER "generic"
char** Arguments::_jvm_flags_array = NULL;
@@ -1758,24 +1758,22 @@
// check if do gclog rotation
// +UseGCLogFileRotation is a must,
// no gc log rotation when log file not supplied or
-// NumberOfGCLogFiles is 0, or GCLogFileSize is 0
+// NumberOfGCLogFiles is 0
void check_gclog_consistency() {
if (UseGCLogFileRotation) {
- if ((Arguments::gc_log_filename() == NULL) ||
- (NumberOfGCLogFiles == 0) ||
- (GCLogFileSize == 0)) {
+ if ((Arguments::gc_log_filename() == NULL) || (NumberOfGCLogFiles == 0)) {
jio_fprintf(defaultStream::output_stream(),
- "To enable GC log rotation, use -Xloggc:<filename> -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<num_of_files> -XX:GCLogFileSize=<num_of_size>\n"
- "where num_of_file > 0 and num_of_size > 0\n"
+ "To enable GC log rotation, use -Xloggc:<filename> -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<num_of_files>\n"
+ "where num_of_file > 0\n"
"GC log rotation is turned off\n");
UseGCLogFileRotation = false;
}
}
- if (UseGCLogFileRotation && GCLogFileSize < 8*K) {
- FLAG_SET_CMDLINE(uintx, GCLogFileSize, 8*K);
- jio_fprintf(defaultStream::output_stream(),
- "GCLogFileSize changed to minimum 8K\n");
+ if (UseGCLogFileRotation && (GCLogFileSize != 0) && (GCLogFileSize < 8*K)) {
+ FLAG_SET_CMDLINE(uintx, GCLogFileSize, 8*K);
+ jio_fprintf(defaultStream::output_stream(),
+ "GCLogFileSize changed to minimum 8K\n");
}
}
@@ -1807,6 +1805,51 @@
return true;
}
+// This function is called for -Xloggc:<filename>, it can be used
+// to check if a given file name(or string) conforms to the following
+// specification:
+// A valid string only contains "[A-Z][a-z][0-9].-_%[p|t]"
+// %p and %t only allowed once. We only limit usage of filename not path
+bool is_filename_valid(const char *file_name) {
+ const char* p = file_name;
+ char file_sep = os::file_separator()[0];
+ const char* cp;
+ // skip prefix path
+ for (cp = file_name; *cp != '\0'; cp++) {
+ if (*cp == '/' || *cp == file_sep) {
+ p = cp + 1;
+ }
+ }
+
+ int count_p = 0;
+ int count_t = 0;
+ while (*p != '\0') {
+ if ((*p >= '0' && *p <= '9') ||
+ (*p >= 'A' && *p <= 'Z') ||
+ (*p >= 'a' && *p <= 'z') ||
+ *p == '-' ||
+ *p == '_' ||
+ *p == '.') {
+ p++;
+ continue;
+ }
+ if (*p == '%') {
+ if(*(p + 1) == 'p') {
+ p += 2;
+ count_p ++;
+ continue;
+ }
+ if (*(p + 1) == 't') {
+ p += 2;
+ count_t ++;
+ continue;
+ }
+ }
+ return false;
+ }
+ return count_p < 2 && count_t < 2;
+}
+
// Check consistency of GC selection
bool Arguments::check_gc_consistency() {
check_gclog_consistency();
@@ -2398,7 +2441,7 @@
(size_t)InitialCodeCacheSize);
if (errcode != arg_in_range) {
jio_fprintf(defaultStream::error_stream(),
- "Invalid maximum code cache size: %s. Should be greater than InitialCodeCacheSize=%dK\n",
+ "Invalid maximum code cache size: %s. Should be greater than or equal to InitialCodeCacheSize=%dK\n",
option->optionString, InitialCodeCacheSize/K);
describe_range_error(errcode);
return JNI_EINVAL;
@@ -2524,6 +2567,13 @@
// ostream_init_log(), when called will use this filename
// to initialize a fileStream.
_gc_log_filename = strdup(tail);
+ if (!is_filename_valid(_gc_log_filename)) {
+ jio_fprintf(defaultStream::output_stream(),
+ "Invalid file name for use with -Xloggc: Filename can only contain the "
+ "characters [A-Z][a-z][0-9]-_.%%[p|t] but it has been %s\n"
+ "Note %%p or %%t can only be used once\n", _gc_log_filename);
+ return JNI_EINVAL;
+ }
FLAG_SET_CMDLINE(bool, PrintGC, true);
FLAG_SET_CMDLINE(bool, PrintGCTimeStamps, true);
@@ -3288,9 +3338,6 @@
#endif // CC_INTERP
#ifdef COMPILER2
- if (!UseBiasedLocking || EmitSync != 0) {
- UseOptoBiasInlining = false;
- }
if (!EliminateLocks) {
EliminateNestedLocks = false;
}
@@ -3334,6 +3381,12 @@
}
}
+#ifdef COMPILER2
+ if (!UseBiasedLocking || EmitSync != 0) {
+ UseOptoBiasInlining = false;
+ }
+#endif
+
// set PauseAtExit if the gamma launcher was used and a debugger is attached
// but only if not already set on the commandline
if (Arguments::created_by_gamma_launcher() && os::is_debugger_attached()) {
--- ./hotspot/src/share/vm/runtime/globals.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/runtime/globals.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, 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
@@ -1204,7 +1204,7 @@
"Decay time (in milliseconds) to re-enable bulk rebiasing of a " \
"type after previous bulk rebias") \
\
- develop(bool, JavaObjectsInPerm, false, \
+ diagnostic(bool, JavaObjectsInPerm, false, \
"controls whether Classes and interned Strings are allocated" \
"in perm. This purely intended to allow debugging issues" \
"in production.") \
@@ -2339,9 +2339,9 @@
"Number of gclog files in rotation, " \
"Default: 0, no rotation") \
\
- product(uintx, GCLogFileSize, 0, \
- "GC log file size, Default: 0 bytes, no rotation " \
- "Only valid with UseGCLogFileRotation") \
+ product(uintx, GCLogFileSize, 8*K, \
+ "GC log file size, requires UseGCLogFileRotation. " \
+ "Set to 0 to only trigger rotation via jcmd") \
\
/* JVMTI heap profiling */ \
\
--- ./hotspot/src/share/vm/runtime/objectMonitor.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/runtime/objectMonitor.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -385,6 +385,12 @@
DTRACE_MONITOR_PROBE(contended__enter, this, object(), jt);
if (JvmtiExport::should_post_monitor_contended_enter()) {
JvmtiExport::post_monitor_contended_enter(jt, this);
+
+ // The current thread does not yet own the monitor and does not
+ // yet appear on any queues that would get it made the successor.
+ // This means that the JVMTI_EVENT_MONITOR_CONTENDED_ENTER event
+ // handler cannot accidentally consume an unpark() meant for the
+ // ParkEvent associated with this ObjectMonitor.
}
OSThreadContendState osts(Self->osthread());
@@ -442,6 +448,12 @@
DTRACE_MONITOR_PROBE(contended__entered, this, object(), jt);
if (JvmtiExport::should_post_monitor_contended_entered()) {
JvmtiExport::post_monitor_contended_entered(jt, this);
+
+ // The current thread already owns the monitor and is not going to
+ // call park() for the remainder of the monitor enter protocol. So
+ // it doesn't matter if the JVMTI_EVENT_MONITOR_CONTENDED_ENTERED
+ // event handler consumed an unpark() issued by the thread that
+ // just exited the monitor.
}
if (event.should_commit()) {
@@ -1459,6 +1471,14 @@
// Note: 'false' parameter is passed here because the
// wait was not timed out due to thread interrupt.
JvmtiExport::post_monitor_waited(jt, this, false);
+
+ // In this short circuit of the monitor wait protocol, the
+ // current thread never drops ownership of the monitor and
+ // never gets added to the wait queue so the current thread
+ // cannot be made the successor. This means that the
+ // JVMTI_EVENT_MONITOR_WAITED event handler cannot accidentally
+ // consume an unpark() meant for the ParkEvent associated with
+ // this ObjectMonitor.
}
if (event.should_commit()) {
post_monitor_wait_event(&event, 0, millis, false);
@@ -1502,21 +1522,6 @@
exit (true, Self) ; // exit the monitor
guarantee (_owner != Self, "invariant") ;
- // As soon as the ObjectMonitor's ownership is dropped in the exit()
- // call above, another thread can enter() the ObjectMonitor, do the
- // notify(), and exit() the ObjectMonitor. If the other thread's
- // exit() call chooses this thread as the successor and the unpark()
- // call happens to occur while this thread is posting a
- // MONITOR_CONTENDED_EXIT event, then we run the risk of the event
- // handler using RawMonitors and consuming the unpark().
- //
- // To avoid the problem, we re-post the event. This does no harm
- // even if the original unpark() was not consumed because we are the
- // chosen successor for this monitor.
- if (node._notified != 0 && _succ == Self) {
- node._event->unpark();
- }
-
// The thread is on the WaitSet list - now park() it.
// On MP systems it's conceivable that a brief spin before we park
// could be profitable.
@@ -1600,6 +1605,33 @@
JvmtiExport::post_monitor_waited(jt, this, ret == OS_TIMEOUT);
}
+ // Without the fix for 8028280, it is possible for the above call:
+ //
+ // Thread::SpinAcquire (&_WaitSetLock, "WaitSet - unlink") ;
+ //
+ // to consume the unpark() that was done when the successor was set.
+ // The solution for this very rare possibility is to redo the unpark()
+ // outside of the JvmtiExport::should_post_monitor_waited() check.
+ //
+ if (node._notified != 0 && _succ == Self) {
+ // In this part of the monitor wait-notify-reenter protocol it
+ // is possible (and normal) for another thread to do a fastpath
+ // monitor enter-exit while this thread is still trying to get
+ // to the reenter portion of the protocol.
+ //
+ // The ObjectMonitor was notified and the current thread is
+ // the successor which also means that an unpark() has already
+ // been done. The JVMTI_EVENT_MONITOR_WAITED event handler can
+ // consume the unpark() that was done when the successor was
+ // set because the same ParkEvent is shared between Java
+ // monitors and JVM/TI RawMonitors (for now).
+ //
+ // We redo the unpark() to ensure forward progress, i.e., we
+ // don't want all pending threads hanging (parked) with none
+ // entering the unlocked monitor.
+ node._event->unpark();
+ }
+
if (event.should_commit()) {
post_monitor_wait_event(&event, node._notifier_tid, millis, ret == OS_TIMEOUT);
}
--- ./hotspot/src/share/vm/runtime/safepoint.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/runtime/safepoint.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, 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
@@ -545,7 +545,7 @@
// rotate log files?
if (UseGCLogFileRotation) {
- gclog_or_tty->rotate_log();
+ gclog_or_tty->rotate_log(false);
}
if (MemTracker::is_on()) {
--- ./hotspot/src/share/vm/runtime/vmStructs.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/runtime/vmStructs.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -706,6 +706,7 @@
static_field(SystemDictionary, WK_KLASS(WeakReference_klass), klassOop) \
static_field(SystemDictionary, WK_KLASS(FinalReference_klass), klassOop) \
static_field(SystemDictionary, WK_KLASS(PhantomReference_klass), klassOop) \
+ static_field(SystemDictionary, WK_KLASS(Cleaner_klass), klassOop) \
static_field(SystemDictionary, WK_KLASS(Finalizer_klass), klassOop) \
static_field(SystemDictionary, WK_KLASS(Thread_klass), klassOop) \
static_field(SystemDictionary, WK_KLASS(ThreadGroup_klass), klassOop) \
--- ./hotspot/src/share/vm/runtime/vmThread.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/runtime/vmThread.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -327,6 +327,9 @@
_terminate_lock->notify();
}
+ // Thread destructor usually does this.
+ ThreadLocalStorage::set_thread(NULL);
+
// Deletion must be done synchronously by the JNI DestroyJavaVM thread
// so that the VMThread deletion completes before the main thread frees
// up the CodeHeap.
--- ./hotspot/src/share/vm/runtime/vm_operations.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/runtime/vm_operations.hpp Mon Jan 05 11:51:17 2015 -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
@@ -96,6 +96,7 @@
template(JFRCheckpoint) \
template(Exit) \
template(LinuxDllLoad) \
+ template(RotateGCLog) \
class VM_Operation: public CHeapObj<mtInternal> {
public:
@@ -409,4 +410,15 @@
void doit();
};
+
+class VM_RotateGCLog: public VM_Operation {
+ private:
+ outputStream* _out;
+
+ public:
+ VM_RotateGCLog(outputStream* st) : _out(st) {}
+ VMOp_Type type() const { return VMOp_RotateGCLog; }
+ void doit() { gclog_or_tty->rotate_log(true, _out); }
+};
+
#endif // SHARE_VM_RUNTIME_VM_OPERATIONS_HPP
--- ./hotspot/src/share/vm/services/diagnosticCommand.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/services/diagnosticCommand.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -51,7 +51,7 @@
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStartRemoteDCmd>(true,false));
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStartLocalDCmd>(true,false));
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStopRemoteDCmd>(true,false));
-
+ DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<RotateGCLogDCmd>(true, false));
}
#ifndef HAVE_EXTRA_DCMD
@@ -565,3 +565,11 @@
JavaCalls::call_static(&result, ik, vmSymbols::stopRemoteAgent_name(), vmSymbols::void_method_signature(), CHECK);
}
+void RotateGCLogDCmd::execute(TRAPS) {
+ if (UseGCLogFileRotation) {
+ VM_RotateGCLog rotateop(output());
+ VMThread::execute(&rotateop);
+ } else {
+ output()->print_cr("Target VM does not support GC log file rotation.");
+ }
+}
--- ./hotspot/src/share/vm/services/diagnosticCommand.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/services/diagnosticCommand.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -302,4 +302,14 @@
virtual void execute(TRAPS);
};
+class RotateGCLogDCmd : public DCmd {
+public:
+ RotateGCLogDCmd(outputStream* output, bool heap) : DCmd(output, heap) {}
+ static const char* name() { return "GC.rotate_log"; }
+ static const char* description() {
+ return "Force the GC log file to be rotated.";
+ }
+ virtual void execute(TRAPS);
+};
+
#endif // SHARE_VM_SERVICES_DIAGNOSTICCOMMAND_HPP
--- ./hotspot/src/share/vm/services/heapDumper.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/services/heapDumper.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -720,7 +720,7 @@
// reflection and sun.misc.Unsafe classes may have a reference to a
// klassOop so filter it out.
- if (o != NULL && o->is_klass()) {
+ if (o != NULL && o->is_perm() && o->is_klass()) {
o = NULL;
}
--- ./hotspot/src/share/vm/utilities/defaultStream.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/utilities/defaultStream.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -41,6 +41,8 @@
void init();
void init_log();
+ fileStream* open_file(const char* log_name);
+ void start_log();
void finish_log();
void finish_log_on_error(char *buf, int buflen);
public:
--- ./hotspot/src/share/vm/utilities/ostream.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/utilities/ostream.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, 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
@@ -341,7 +341,7 @@
}
char* stringStream::as_string() {
- char* copy = NEW_RESOURCE_ARRAY(char, buffer_pos+1);
+ char* copy = NEW_RESOURCE_ARRAY(char, buffer_pos + 1);
strncpy(copy, buffer, buffer_pos);
copy[buffer_pos] = 0; // terminating null
return copy;
@@ -354,14 +354,148 @@
outputStream* gclog_or_tty;
extern Mutex* tty_lock;
+#define EXTRACHARLEN 32
+#define CURRENTAPPX ".current"
+#define FILENAMEBUFLEN 1024
+// convert YYYY-MM-DD HH:MM:SS to YYYY-MM-DD_HH-MM-SS
+char* get_datetime_string(char *buf, size_t len) {
+ os::local_time_string(buf, len);
+ int i = (int)strlen(buf);
+ while (i-- >= 0) {
+ if (buf[i] == ' ') buf[i] = '_';
+ else if (buf[i] == ':') buf[i] = '-';
+ }
+ return buf;
+}
+
+static const char* make_log_name_internal(const char* log_name, const char* force_directory,
+ int pid, const char* tms) {
+ const char* basename = log_name;
+ char file_sep = os::file_separator()[0];
+ const char* cp;
+ char pid_text[32];
+
+ for (cp = log_name; *cp != '\0'; cp++) {
+ if (*cp == '/' || *cp == file_sep) {
+ basename = cp + 1;
+ }
+ }
+ const char* nametail = log_name;
+ // Compute buffer length
+ size_t buffer_length;
+ if (force_directory != NULL) {
+ buffer_length = strlen(force_directory) + strlen(os::file_separator()) +
+ strlen(basename) + 1;
+ } else {
+ buffer_length = strlen(log_name) + 1;
+ }
+
+ // const char* star = strchr(basename, '*');
+ const char* pts = strstr(basename, "%p");
+ int pid_pos = (pts == NULL) ? -1 : (pts - nametail);
+
+ if (pid_pos >= 0) {
+ jio_snprintf(pid_text, sizeof(pid_text), "pid%u", pid);
+ buffer_length += strlen(pid_text);
+ }
+
+ pts = strstr(basename, "%t");
+ int tms_pos = (pts == NULL) ? -1 : (pts - nametail);
+ if (tms_pos >= 0) {
+ buffer_length += strlen(tms);
+ }
+
+ // File name is too long.
+ if (buffer_length > JVM_MAXPATHLEN) {
+ return NULL;
+ }
+
+ // Create big enough buffer.
+ char *buf = NEW_C_HEAP_ARRAY(char, buffer_length, mtInternal);
+
+ strcpy(buf, "");
+ if (force_directory != NULL) {
+ strcat(buf, force_directory);
+ strcat(buf, os::file_separator());
+ nametail = basename; // completely skip directory prefix
+ }
+
+ // who is first, %p or %t?
+ int first = -1, second = -1;
+ const char *p1st = NULL;
+ const char *p2nd = NULL;
+
+ if (pid_pos >= 0 && tms_pos >= 0) {
+ // contains both %p and %t
+ if (pid_pos < tms_pos) {
+ // case foo%pbar%tmonkey.log
+ first = pid_pos;
+ p1st = pid_text;
+ second = tms_pos;
+ p2nd = tms;
+ } else {
+ // case foo%tbar%pmonkey.log
+ first = tms_pos;
+ p1st = tms;
+ second = pid_pos;
+ p2nd = pid_text;
+ }
+ } else if (pid_pos >= 0) {
+ // contains %p only
+ first = pid_pos;
+ p1st = pid_text;
+ } else if (tms_pos >= 0) {
+ // contains %t only
+ first = tms_pos;
+ p1st = tms;
+ }
+
+ int buf_pos = (int)strlen(buf);
+ const char* tail = nametail;
+
+ if (first >= 0) {
+ tail = nametail + first + 2;
+ strncpy(&buf[buf_pos], nametail, first);
+ strcpy(&buf[buf_pos + first], p1st);
+ buf_pos = (int)strlen(buf);
+ if (second >= 0) {
+ strncpy(&buf[buf_pos], tail, second - first - 2);
+ strcpy(&buf[buf_pos + second - first - 2], p2nd);
+ tail = nametail + second + 2;
+ }
+ }
+ strcat(buf, tail); // append rest of name, or all of name
+ return buf;
+}
+
+// log_name comes from -XX:LogFile=log_name or -Xloggc:log_name
+// in log_name, %p => pipd1234 and
+// %t => YYYY-MM-DD_HH-MM-SS
+static const char* make_log_name(const char* log_name, const char* force_directory) {
+ char timestr[32];
+ get_datetime_string(timestr, sizeof(timestr));
+ return make_log_name_internal(log_name, force_directory, os::current_process_id(),
+ timestr);
+}
+
fileStream::fileStream(const char* file_name) {
_file = fopen(file_name, "w");
- _need_close = true;
+ if (_file != NULL) {
+ _need_close = true;
+ } else {
+ warning("Cannot open file %s due to %s\n", file_name, strerror(errno));
+ _need_close = false;
+ }
}
fileStream::fileStream(const char* file_name, const char* opentype) {
_file = fopen(file_name, opentype);
- _need_close = true;
+ if (_file != NULL) {
+ _need_close = true;
+ } else {
+ warning("Cannot open file %s due to %s\n", file_name, strerror(errno));
+ _need_close = false;
+ }
}
void fileStream::write(const char* s, size_t len) {
@@ -422,34 +556,51 @@
update_position(s, len);
}
-rotatingFileStream::~rotatingFileStream() {
+// dump vm version, os version, platform info, build id,
+// memory usage and command line flags into header
+void gcLogFileStream::dump_loggc_header() {
+ if (is_open()) {
+ print_cr(Abstract_VM_Version::internal_vm_info_string());
+ os::print_memory_info(this);
+ print("CommandLine flags: ");
+ CommandLineFlags::printSetFlags(this);
+ }
+}
+
+gcLogFileStream::~gcLogFileStream() {
if (_file != NULL) {
if (_need_close) fclose(_file);
- _file = NULL;
+ _file = NULL;
+ }
+ if (_file_name != NULL) {
FREE_C_HEAP_ARRAY(char, _file_name, mtInternal);
_file_name = NULL;
}
}
-rotatingFileStream::rotatingFileStream(const char* file_name) {
+gcLogFileStream::gcLogFileStream(const char* file_name) {
_cur_file_num = 0;
_bytes_written = 0L;
- _file_name = NEW_C_HEAP_ARRAY(char, strlen(file_name)+10, mtInternal);
- jio_snprintf(_file_name, strlen(file_name)+10, "%s.%d", file_name, _cur_file_num);
- _file = fopen(_file_name, "w");
- _need_close = true;
+ _file_name = make_log_name(file_name, NULL);
+
+ // gc log file rotation
+ if (UseGCLogFileRotation && NumberOfGCLogFiles > 1) {
+ char tempbuf[FILENAMEBUFLEN];
+ jio_snprintf(tempbuf, sizeof(tempbuf), "%s.%d" CURRENTAPPX, _file_name, _cur_file_num);
+ _file = fopen(tempbuf, "w");
+ } else {
+ _file = fopen(_file_name, "w");
+ }
+ if (_file != NULL) {
+ _need_close = true;
+ dump_loggc_header();
+ } else {
+ warning("Cannot open file %s due to %s\n", _file_name, strerror(errno));
+ _need_close = false;
+ }
}
-rotatingFileStream::rotatingFileStream(const char* file_name, const char* opentype) {
- _cur_file_num = 0;
- _bytes_written = 0L;
- _file_name = NEW_C_HEAP_ARRAY(char, strlen(file_name)+10, mtInternal);
- jio_snprintf(_file_name, strlen(file_name)+10, "%s.%d", file_name, _cur_file_num);
- _file = fopen(_file_name, opentype);
- _need_close = true;
-}
-
-void rotatingFileStream::write(const char* s, size_t len) {
+void gcLogFileStream::write(const char* s, size_t len) {
if (_file != NULL) {
size_t count = fwrite(s, 1, len, _file);
_bytes_written += count;
@@ -465,8 +616,13 @@
// write to gc log file at safepoint. If in future, changes made for mutator threads or
// concurrent GC threads to run parallel with VMThread at safepoint, write and rotate_log
// must be synchronized.
-void rotatingFileStream::rotate_log() {
- if (_bytes_written < (jlong)GCLogFileSize) {
+void gcLogFileStream::rotate_log(bool force, outputStream* out) {
+ char time_msg[FILENAMEBUFLEN];
+ char time_str[EXTRACHARLEN];
+ char current_file_name[FILENAMEBUFLEN];
+ char renamed_file_name[FILENAMEBUFLEN];
+
+ if (!should_rotate(force)) {
return;
}
@@ -480,27 +636,105 @@
// rotate in same file
rewind();
_bytes_written = 0L;
+ jio_snprintf(time_msg, sizeof(time_msg), "File %s rotated at %s\n",
+ _file_name, os::local_time_string((char *)time_str, sizeof(time_str)));
+ write(time_msg, strlen(time_msg));
+
+ if (out != NULL) {
+ out->print(time_msg);
+ }
+
+ dump_loggc_header();
return;
}
- // rotate file in names file.0, file.1, file.2, ..., file.<MaxGCLogFileNumbers-1>
- // close current file, rotate to next file
+#if defined(_WINDOWS)
+#ifndef F_OK
+#define F_OK 0
+#endif
+#endif // _WINDOWS
+
+ // rotate file in names extended_filename.0, extended_filename.1, ...,
+ // extended_filename.<NumberOfGCLogFiles - 1>. Current rotation file name will
+ // have a form of extended_filename.<i>.current where i is the current rotation
+ // file number. After it reaches max file size, the file will be saved and renamed
+ // with .current removed from its tail.
+ size_t filename_len = strlen(_file_name);
if (_file != NULL) {
- _cur_file_num ++;
- if (_cur_file_num >= NumberOfGCLogFiles) _cur_file_num = 0;
- jio_snprintf(_file_name, strlen(Arguments::gc_log_filename()) + 10, "%s.%d",
- Arguments::gc_log_filename(), _cur_file_num);
+ jio_snprintf(renamed_file_name, filename_len + EXTRACHARLEN, "%s.%d",
+ _file_name, _cur_file_num);
+ jio_snprintf(current_file_name, filename_len + EXTRACHARLEN, "%s.%d" CURRENTAPPX,
+ _file_name, _cur_file_num);
+
+ const char* msg = force ? "GC log rotation request has been received."
+ : "GC log file has reached the maximum size.";
+ jio_snprintf(time_msg, sizeof(time_msg), "%s %s Saved as %s\n",
+ os::local_time_string((char *)time_str, sizeof(time_str)),
+ msg, renamed_file_name);
+ write(time_msg, strlen(time_msg));
+
+ if (out != NULL) {
+ out->print(time_msg);
+ }
+
fclose(_file);
_file = NULL;
+
+ bool can_rename = true;
+ if (access(current_file_name, F_OK) != 0) {
+ // current file does not exist?
+ warning("No source file exists, cannot rename\n");
+ can_rename = false;
+ }
+ if (can_rename) {
+ if (access(renamed_file_name, F_OK) == 0) {
+ if (remove(renamed_file_name) != 0) {
+ warning("Could not delete existing file %s\n", renamed_file_name);
+ can_rename = false;
+ }
+ } else {
+ // file does not exist, ok to rename
+ }
+ }
+ if (can_rename && rename(current_file_name, renamed_file_name) != 0) {
+ warning("Could not rename %s to %s\n", _file_name, renamed_file_name);
+ }
}
- _file = fopen(_file_name, "w");
+
+ _cur_file_num++;
+ if (_cur_file_num > NumberOfGCLogFiles - 1) _cur_file_num = 0;
+ jio_snprintf(current_file_name, filename_len + EXTRACHARLEN, "%s.%d" CURRENTAPPX,
+ _file_name, _cur_file_num);
+ _file = fopen(current_file_name, "w");
+
if (_file != NULL) {
_bytes_written = 0L;
_need_close = true;
+ // reuse current_file_name for time_msg
+ jio_snprintf(current_file_name, filename_len + EXTRACHARLEN,
+ "%s.%d", _file_name, _cur_file_num);
+ jio_snprintf(time_msg, sizeof(time_msg), "%s GC log file created %s\n",
+ os::local_time_string((char *)time_str, sizeof(time_str)),
+ current_file_name);
+ write(time_msg, strlen(time_msg));
+
+ if (out != NULL) {
+ out->print(time_msg);
+ }
+
+ dump_loggc_header();
+ // remove the existing file
+ if (access(current_file_name, F_OK) == 0) {
+ if (remove(current_file_name) != 0) {
+ warning("Could not delete existing file %s\n", current_file_name);
+ }
+ }
} else {
- tty->print_cr("failed to open rotation log file %s due to %s\n",
+ warning("failed to open rotation log file %s due to %s\n"
+ "Turned off GC log file rotation\n",
_file_name, strerror(errno));
_need_close = false;
+ FLAG_SET_DEFAULT(UseGCLogFileRotation, false);
}
}
@@ -529,147 +763,55 @@
return _log_file != NULL;
}
-static const char* make_log_name(const char* log_name, const char* force_directory) {
- const char* basename = log_name;
- char file_sep = os::file_separator()[0];
- const char* cp;
- for (cp = log_name; *cp != '\0'; cp++) {
- if (*cp == '/' || *cp == file_sep) {
- basename = cp+1;
- }
- }
- const char* nametail = log_name;
-
- // Compute buffer length
- size_t buffer_length;
- if (force_directory != NULL) {
- buffer_length = strlen(force_directory) + strlen(os::file_separator()) +
- strlen(basename) + 1;
- } else {
- buffer_length = strlen(log_name) + 1;
+fileStream* defaultStream::open_file(const char* log_name) {
+ const char* try_name = make_log_name(log_name, NULL);
+ if (try_name == NULL) {
+ warning("Cannot open file %s: file name is too long.\n", log_name);
+ return NULL;
}
- const char* star = strchr(basename, '*');
- int star_pos = (star == NULL) ? -1 : (star - nametail);
- int skip = 1;
- if (star == NULL) {
- // Try %p
- star = strstr(basename, "%p");
- if (star != NULL) {
- skip = 2;
- }
- }
- star_pos = (star == NULL) ? -1 : (star - nametail);
-
- char pid[32];
- if (star_pos >= 0) {
- jio_snprintf(pid, sizeof(pid), "%u", os::current_process_id());
- buffer_length += strlen(pid);
+ fileStream* file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name);
+ FREE_C_HEAP_ARRAY(char, try_name, mtInternal);
+ if (file->is_open()) {
+ return file;
}
- // Create big enough buffer.
- char *buf = NEW_C_HEAP_ARRAY(char, buffer_length, mtInternal);
-
- strcpy(buf, "");
- if (force_directory != NULL) {
- strcat(buf, force_directory);
- strcat(buf, os::file_separator());
- nametail = basename; // completely skip directory prefix
+ // Try again to open the file in the temp directory.
+ delete file;
+ char warnbuf[O_BUFLEN*2];
+ jio_snprintf(warnbuf, sizeof(warnbuf), "Warning: Cannot open log file: %s\n", log_name);
+ // Note: This feature is for maintainer use only. No need for L10N.
+ jio_print(warnbuf);
+ try_name = make_log_name(log_name, os::get_temp_directory());
+ if (try_name == NULL) {
+ warning("Cannot open file %s: file name is too long for directory %s.\n", log_name, os::get_temp_directory());
+ return NULL;
}
- if (star_pos >= 0) {
- // convert foo*bar.log or foo%pbar.log to foo123bar.log
- int buf_pos = (int) strlen(buf);
- strncpy(&buf[buf_pos], nametail, star_pos);
- strcpy(&buf[buf_pos + star_pos], pid);
- nametail += star_pos + skip; // skip prefix and pid format
+ jio_snprintf(warnbuf, sizeof(warnbuf),
+ "Warning: Forcing option -XX:LogFile=%s\n", try_name);
+ jio_print(warnbuf);
+
+ file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name);
+ FREE_C_HEAP_ARRAY(char, try_name, mtInternal);
+ if (file->is_open()) {
+ return file;
}
- strcat(buf, nametail); // append rest of name, or all of name
- return buf;
+ delete file;
+ return NULL;
}
void defaultStream::init_log() {
// %%% Need a MutexLocker?
const char* log_name = LogFile != NULL ? LogFile : "hotspot.log";
- const char* try_name = make_log_name(log_name, NULL);
- fileStream* file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name);
- if (!file->is_open()) {
- // Try again to open the file.
- char warnbuf[O_BUFLEN*2];
- jio_snprintf(warnbuf, sizeof(warnbuf),
- "Warning: Cannot open log file: %s\n", try_name);
- // Note: This feature is for maintainer use only. No need for L10N.
- jio_print(warnbuf);
- FREE_C_HEAP_ARRAY(char, try_name, mtInternal);
- try_name = make_log_name("hs_pid%p.log", os::get_temp_directory());
- jio_snprintf(warnbuf, sizeof(warnbuf),
- "Warning: Forcing option -XX:LogFile=%s\n", try_name);
- jio_print(warnbuf);
- delete file;
- file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name);
- FREE_C_HEAP_ARRAY(char, try_name, mtInternal);
- }
- if (file->is_open()) {
+ fileStream* file = open_file(log_name);
+
+ if (file != NULL) {
_log_file = file;
- xmlStream* xs = new(ResourceObj::C_HEAP, mtInternal) xmlStream(file);
- _outer_xmlStream = xs;
- if (this == tty) xtty = xs;
- // Write XML header.
- xs->print_cr("<?xml version='1.0' encoding='UTF-8'?>");
- // (For now, don't bother to issue a DTD for this private format.)
- jlong time_ms = os::javaTimeMillis() - tty->time_stamp().milliseconds();
- // %%% Should be: jlong time_ms = os::start_time_milliseconds(), if
- // we ever get round to introduce that method on the os class
- xs->head("hotspot_log version='%d %d'"
- " process='%d' time_ms='"INT64_FORMAT"'",
- LOG_MAJOR_VERSION, LOG_MINOR_VERSION,
- os::current_process_id(), time_ms);
- // Write VM version header immediately.
- xs->head("vm_version");
- xs->head("name"); xs->text("%s", VM_Version::vm_name()); xs->cr();
- xs->tail("name");
- xs->head("release"); xs->text("%s", VM_Version::vm_release()); xs->cr();
- xs->tail("release");
- xs->head("info"); xs->text("%s", VM_Version::internal_vm_info_string()); xs->cr();
- xs->tail("info");
- xs->tail("vm_version");
- // Record information about the command-line invocation.
- xs->head("vm_arguments"); // Cf. Arguments::print_on()
- if (Arguments::num_jvm_flags() > 0) {
- xs->head("flags");
- Arguments::print_jvm_flags_on(xs->text());
- xs->tail("flags");
- }
- if (Arguments::num_jvm_args() > 0) {
- xs->head("args");
- Arguments::print_jvm_args_on(xs->text());
- xs->tail("args");
- }
- if (Arguments::java_command() != NULL) {
- xs->head("command"); xs->text()->print_cr("%s", Arguments::java_command());
- xs->tail("command");
- }
- if (Arguments::sun_java_launcher() != NULL) {
- xs->head("launcher"); xs->text()->print_cr("%s", Arguments::sun_java_launcher());
- xs->tail("launcher");
- }
- if (Arguments::system_properties() != NULL) {
- xs->head("properties");
- // Print it as a java-style property list.
- // System properties don't generally contain newlines, so don't bother with unparsing.
- for (SystemProperty* p = Arguments::system_properties(); p != NULL; p = p->next()) {
- xs->text()->print_cr("%s=%s", p->key(), p->value());
- }
- xs->tail("properties");
- }
- xs->tail("vm_arguments");
- // tty output per se is grouped under the <tty>...</tty> element.
- xs->head("tty");
- // All further non-markup text gets copied to the tty:
- xs->_text = this; // requires friend declaration!
+ _outer_xmlStream = new(ResourceObj::C_HEAP, mtInternal) xmlStream(file);
+ start_log();
} else {
- delete(file);
// and leave xtty as NULL
LogVMOutput = false;
DisplayVMOutput = true;
@@ -677,6 +819,64 @@
}
}
+void defaultStream::start_log() {
+ xmlStream* xs = _outer_xmlStream;
+ if (this == tty) xtty = xs;
+ // Write XML header.
+ xs->print_cr("<?xml version='1.0' encoding='UTF-8'?>");
+ // (For now, don't bother to issue a DTD for this private format.)
+ jlong time_ms = os::javaTimeMillis() - tty->time_stamp().milliseconds();
+ // %%% Should be: jlong time_ms = os::start_time_milliseconds(), if
+ // we ever get round to introduce that method on the os class
+ xs->head("hotspot_log version='%d %d'"
+ " process='%d' time_ms='"INT64_FORMAT"'",
+ LOG_MAJOR_VERSION, LOG_MINOR_VERSION,
+ os::current_process_id(), time_ms);
+ // Write VM version header immediately.
+ xs->head("vm_version");
+ xs->head("name"); xs->text("%s", VM_Version::vm_name()); xs->cr();
+ xs->tail("name");
+ xs->head("release"); xs->text("%s", VM_Version::vm_release()); xs->cr();
+ xs->tail("release");
+ xs->head("info"); xs->text("%s", VM_Version::internal_vm_info_string()); xs->cr();
+ xs->tail("info");
+ xs->tail("vm_version");
+ // Record information about the command-line invocation.
+ xs->head("vm_arguments"); // Cf. Arguments::print_on()
+ if (Arguments::num_jvm_flags() > 0) {
+ xs->head("flags");
+ Arguments::print_jvm_flags_on(xs->text());
+ xs->tail("flags");
+ }
+ if (Arguments::num_jvm_args() > 0) {
+ xs->head("args");
+ Arguments::print_jvm_args_on(xs->text());
+ xs->tail("args");
+ }
+ if (Arguments::java_command() != NULL) {
+ xs->head("command"); xs->text()->print_cr("%s", Arguments::java_command());
+ xs->tail("command");
+ }
+ if (Arguments::sun_java_launcher() != NULL) {
+ xs->head("launcher"); xs->text()->print_cr("%s", Arguments::sun_java_launcher());
+ xs->tail("launcher");
+ }
+ if (Arguments::system_properties() != NULL) {
+ xs->head("properties");
+ // Print it as a java-style property list.
+ // System properties don't generally contain newlines, so don't bother with unparsing.
+ for (SystemProperty* p = Arguments::system_properties(); p != NULL; p = p->next()) {
+ xs->text()->print_cr("%s=%s", p->key(), p->value());
+ }
+ xs->tail("properties");
+ }
+ xs->tail("vm_arguments");
+ // tty output per se is grouped under the <tty>...</tty> element.
+ xs->head("tty");
+ // All further non-markup text gets copied to the tty:
+ xs->_text = this; // requires friend declaration!
+}
+
// finish_log() is called during normal VM shutdown. finish_log_on_error() is
// called by ostream_abort() after a fatal error.
//
@@ -876,11 +1076,8 @@
gclog_or_tty = tty; // default to tty
if (Arguments::gc_log_filename() != NULL) {
- fileStream * gclog = UseGCLogFileRotation ?
- new(ResourceObj::C_HEAP, mtInternal)
- rotatingFileStream(Arguments::gc_log_filename()) :
- new(ResourceObj::C_HEAP, mtInternal)
- fileStream(Arguments::gc_log_filename());
+ fileStream * gclog = new(ResourceObj::C_HEAP, mtInternal)
+ gcLogFileStream(Arguments::gc_log_filename());
if (gclog->is_open()) {
// now we update the time stamp of the GC log to be synced up
// with tty.
@@ -1038,6 +1235,50 @@
}
#ifndef PRODUCT
+void test_loggc_filename() {
+ const char* o_result;
+
+ {
+ // longest filename
+ char longest_name[JVM_MAXPATHLEN];
+ memset(longest_name, 'a', sizeof(longest_name));
+ longest_name[JVM_MAXPATHLEN - 1] = '\0';
+ o_result = make_log_name((const char*)&longest_name, NULL);
+ assert(strcmp(longest_name, o_result) == 0, err_msg("longest name does not match. expected '%s' but got '%s'", longest_name, o_result));
+ FREE_C_HEAP_ARRAY(char, o_result, mtInternal);
+ }
+
+ {
+ // too long file name
+ char too_long_name[JVM_MAXPATHLEN + 100];
+ int too_long_length = sizeof(too_long_name);
+ memset(too_long_name, 'a', too_long_length);
+ too_long_name[too_long_length - 1] = '\0';
+ o_result = make_log_name((const char*)&too_long_name, NULL);
+ assert(o_result == NULL, err_msg("Too long file name should return NULL, but got '%s'", o_result));
+ }
+
+ {
+ // too long with pid
+ char longest_name[JVM_MAXPATHLEN];
+ memset(longest_name, 'a', JVM_MAXPATHLEN);
+ longest_name[JVM_MAXPATHLEN - 3] = '%';
+ longest_name[JVM_MAXPATHLEN - 2] = 'p';
+ longest_name[JVM_MAXPATHLEN - 1] = '\0';
+ o_result = make_log_name((const char*)&longest_name, NULL);
+ assert(o_result == NULL, err_msg("Too long file name after %%p pid expansion should return NULL, but got '%s'", o_result));
+ }
+
+ {
+ // too long with pid (star)
+ char longest_name[JVM_MAXPATHLEN];
+ memset(longest_name, 'a', JVM_MAXPATHLEN);
+ longest_name[JVM_MAXPATHLEN - 2] = '*';
+ longest_name[JVM_MAXPATHLEN - 1] = '\0';
+ o_result = make_log_name((const char*)&longest_name, NULL);
+ assert(o_result == NULL, err_msg("Too long file name after star (pid) expansion should return NULL, but got '%s'", o_result));
+ }
+}
#if defined(SOLARIS) || defined(LINUX) || defined(_ALLBSD_SOURCE)
#include <sys/types.h>
--- ./hotspot/src/share/vm/utilities/ostream.hpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/utilities/ostream.hpp Mon Jan 05 11:51:17 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, 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
@@ -113,7 +113,7 @@
// flushing
virtual void flush() {}
virtual void write(const char* str, size_t len) = 0;
- virtual void rotate_log() {} // GC log rotation
+ virtual void rotate_log(bool force, outputStream* out = NULL) {} // GC log rotation
virtual ~outputStream() {} // close properly on deletion
void dec_cr() { dec(); cr(); }
@@ -228,20 +228,31 @@
void flush() {};
};
-class rotatingFileStream : public fileStream {
+class gcLogFileStream : public fileStream {
protected:
- char* _file_name;
+ const char* _file_name;
jlong _bytes_written;
- uintx _cur_file_num; // current logfile rotation number, from 0 to MaxGCLogFileNumbers-1
+ uintx _cur_file_num; // current logfile rotation number, from 0 to NumberOfGCLogFiles-1
public:
- rotatingFileStream(const char* file_name);
- rotatingFileStream(const char* file_name, const char* opentype);
- rotatingFileStream(FILE* file) : fileStream(file) {}
- ~rotatingFileStream();
+ gcLogFileStream(const char* file_name);
+ ~gcLogFileStream();
virtual void write(const char* c, size_t len);
- virtual void rotate_log();
+ virtual void rotate_log(bool force, outputStream* out = NULL);
+ void dump_loggc_header();
+
+ /* If "force" sets true, force log file rotation from outside JVM */
+ bool should_rotate(bool force) {
+ return force ||
+ ((GCLogFileSize != 0) && ((uintx)_bytes_written >= GCLogFileSize));
+ }
+
};
+#ifndef PRODUCT
+// unit test for checking -Xloggc:<filename> parsing result
+void test_loggc_filename();
+#endif
+
void ostream_init();
void ostream_init_log();
void ostream_exit();
--- ./hotspot/src/share/vm/utilities/vmError.cpp Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/src/share/vm/utilities/vmError.cpp Mon Jan 05 11:51:17 2015 -0800
@@ -22,6 +22,7 @@
*
*/
+#include <fcntl.h>
#include "precompiled.hpp"
#include "compiler/compileBroker.hpp"
#include "gc_interface/collectedHeap.hpp"
@@ -924,7 +925,7 @@
bool copy_ok =
Arguments::copy_expand_pid(ErrorFile, strlen(ErrorFile), buffer, sizeof(buffer));
if (copy_ok) {
- fd = open(buffer, O_RDWR | O_CREAT | O_TRUNC, 0666);
+ fd = open(buffer, O_RDWR | O_CREAT | O_EXCL, 0666);
}
}
@@ -935,7 +936,7 @@
// so use the default name in the current directory
jio_snprintf(&buffer[len], sizeof(buffer)-len, "%shs_err_pid%u.log",
os::file_separator(), os::current_process_id());
- fd = open(buffer, O_RDWR | O_CREAT | O_TRUNC, 0666);
+ fd = open(buffer, O_RDWR | O_CREAT | O_EXCL, 0666);
}
if (fd == -1) {
@@ -944,7 +945,7 @@
if (tmpdir != NULL && tmpdir[0] != '\0') {
jio_snprintf(buffer, sizeof(buffer), "%s%shs_err_pid%u.log",
tmpdir, os::file_separator(), os::current_process_id());
- fd = open(buffer, O_RDWR | O_CREAT | O_TRUNC, 0666);
+ fd = open(buffer, O_RDWR | O_CREAT | O_EXCL, 0666);
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./hotspot/test/compiler/EscapeAnalysis/TestAllocatedEscapesPtrComparison.java Mon Jan 05 11:51:17 2015 -0800
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2014 Google, Inc. 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 8043354
+ * @summary bcEscapeAnalyzer allocated_escapes not conservative enough
+ * @run main/othervm -XX:CompileOnly=.visitAndPop TestAllocatedEscapesPtrComparison
+ * @author Chuck Rasbold rasbold@google.com
+ */
+
+/*
+ * Test always passes with -XX:-OptmimizePtrCompare
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TestAllocatedEscapesPtrComparison {
+
+ static TestAllocatedEscapesPtrComparison dummy;
+
+ class Marker {
+ }
+
+ List<Marker> markerList = new ArrayList<>();
+
+ // Suppress compilation of this method, it must be processed
+ // by the bytecode escape analyzer.
+
+ // Make a new marker and put it on the List
+ Marker getMarker() {
+ // result escapes through markerList
+ final Marker result = new Marker();
+ markerList.add(result);
+ return result;
+ }
+
+ void visit(int depth) {
+ // Make a new marker
+ getMarker();
+
+ // Call visitAndPop every once in a while
+ // Cap the depth of our recursive visits
+ if (depth % 10 == 2) {
+ visitAndPop(depth + 1);
+ } else if (depth < 15) {
+ visit(depth + 1);
+ }
+ }
+
+ void visitAndPop(int depth) {
+ // Random dummy allocation to force EscapeAnalysis to process this method
+ dummy = new TestAllocatedEscapesPtrComparison();
+
+ // Make a new marker
+ Marker marker = getMarker();
+
+ visit(depth + 1);
+
+ // Walk and pop the marker list up to the current marker
+ boolean found = false;
+ for (int i = markerList.size() - 1; i >= 0; i--) {
+ Marker removed = markerList.remove(i);
+
+ // In the failure, EA mistakenly converts this comparison to false
+ if (removed == marker) {
+ found = true;
+ break;
+ }
+ }
+
+ if (!found) {
+ throw new RuntimeException("test fails");
+ }
+ }
+
+
+ public static void main(String args[]) {
+ TestAllocatedEscapesPtrComparison tc = new TestAllocatedEscapesPtrComparison();
+
+ // Warmup and run enough times
+ for (int i = 0; i < 20000; i++) {
+ tc.visit(0);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./hotspot/test/compiler/intrinsics/hashcode/TestHashCode.java Mon Jan 05 11:51:17 2015 -0800
@@ -0,0 +1,73 @@
+/*
+ * 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 8011646
+ * @summary SEGV in compiled code with loop predication
+ * @run main/othervm -XX:-TieredCompilation -XX:CompileOnly=TestHashCode.m1,Object.hashCode TestHashCode
+ *
+ */
+
+public class TestHashCode {
+ static class A {
+ int i;
+ }
+
+ static class B extends A {
+ }
+
+ static boolean crash = false;
+
+ static A m2() {
+ if (crash) {
+ return null;
+ }
+ return new A();
+ }
+
+ static int m1(A aa) {
+ int res = 0;
+ for (int i = 0; i < 10; i++) {
+ A a = m2();
+ int j = a.i;
+ if (aa instanceof B) {
+ }
+ res += a.hashCode();
+ }
+ return res;
+ }
+
+ public static void main(String[] args) {
+ A a = new A();
+ for (int i = 0; i < 20000; i++) {
+ m1(a);
+ }
+ crash = true;
+ try {
+ m1(a);
+ } catch (NullPointerException e) {
+ System.out.println("Test passed");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./hotspot/test/gc/g1/TestPrintGCDetails.java Mon Jan 05 11:51:17 2015 -0800
@@ -0,0 +1,57 @@
+/*
+ * 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 TestPrintGCDetails
+ * @bug 8010738
+ * @summary Ensure that the PrintGCDetails for a full GC with G1 includes PermGen size info.
+ * @key gc
+ * @key regression
+ * @library /testlibrary
+ */
+
+import com.oracle.java.testlibrary.ProcessTools;
+import com.oracle.java.testlibrary.OutputAnalyzer;
+
+public class TestPrintGCDetails {
+ public static void main(String[] args) throws Exception {
+
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
+ "-XX:+PrintGCDetails",
+ SystemGCTest.class.getName());
+
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+
+ System.out.println("Output:\n" + output.getOutput());
+
+ output.shouldContain("Perm");
+ output.shouldHaveExitValue(0);
+ }
+
+ static class SystemGCTest {
+ public static void main(String [] args) {
+ System.out.println("Calling System.gc()");
+ System.gc();
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./hotspot/test/gc/heap_inspection/TestG1ConcurrentGCHeapDump.java Mon Jan 05 11:51:17 2015 -0800
@@ -0,0 +1,108 @@
+/*
+ * 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 TestG1ConcurrentGCHeapDump
+ * @bug 8038925
+ * @summary Checks that a heap dump can be made with G1 when no fullgc
+ * has been made
+ * @run main/othervm -Xms512m -Xmx1024m -XX:+ExplicitGCInvokesConcurrent TestG1ConcurrentGCHeapDump
+ */
+import java.util.List;
+import java.util.ArrayList;
+import java.util.LinkedList;
+
+import javax.management.MBeanServer;
+import java.lang.management.ManagementFactory;
+import java.lang.management.GarbageCollectorMXBean;
+
+import sun.management.ManagementFactoryHelper;
+import com.sun.management.HotSpotDiagnosticMXBean;
+import com.sun.management.VMOption;
+
+import java.io.IOException;
+
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.Files;
+
+public class TestG1ConcurrentGCHeapDump {
+
+ private static final String HOTSPOT_BEAN_NAME =
+ "com.sun.management:type=HotSpotDiagnostic";
+
+ private static final String G1_OLD_BEAN_NAME =
+ "java.lang:type=GarbageCollector,name=G1 Old Generation";
+
+ private static MBeanServer server = ManagementFactory.getPlatformMBeanServer();
+
+ private static void dumpHeap() throws IOException {
+ HotSpotDiagnosticMXBean hotspot_bean =
+ ManagementFactory.newPlatformMXBeanProxy(server,
+ HOTSPOT_BEAN_NAME, HotSpotDiagnosticMXBean.class);
+
+ Path dir = Files.createTempDirectory("JDK-8038925_");
+ String file = dir + File.separator + "heapdump";
+ hotspot_bean.dumpHeap(file, false);
+ Files.delete(Paths.get(file));
+ Files.delete(dir);
+ }
+
+ private static void verifyNoFullGC() throws IOException {
+ GarbageCollectorMXBean g1_old_bean =
+ ManagementFactory.newPlatformMXBeanProxy(server,
+ G1_OLD_BEAN_NAME, GarbageCollectorMXBean.class);
+
+ if (g1_old_bean.getCollectionCount() != 0) {
+ throw new RuntimeException("A full GC has occured, this test will not work.");
+ }
+ }
+
+ public static void main(String[] args) throws IOException {
+ HotSpotDiagnosticMXBean diagnostic = ManagementFactoryHelper.getDiagnosticMXBean();
+ VMOption option = diagnostic.getVMOption("UseG1GC");
+ if (option.getValue().equals("false")) {
+ System.out.println("Skipping this test. It is only a G1 test.");
+ return;
+ }
+
+ // Create some dead objects
+ ArrayList<List<Integer>> arraylist = new ArrayList<List<Integer>>();
+ for (int i = 0; i < 2; i++) {
+ for (int j = 0; j < 100; j++) {
+ LinkedList<Integer> li = new LinkedList<Integer>();
+ arraylist.add(li);
+ for (int k = 0; k < 10000; k++) {
+ li.add(k);
+ }
+ }
+ arraylist = new ArrayList<List<Integer>>();
+ System.gc();
+ }
+ // Try to dump heap
+ dumpHeap();
+ // Make sure no full GC has happened, since test won't work if that is the case
+ verifyNoFullGC();
+ }
+}
--- ./hotspot/test/runtime/7051189/Xchecksig.sh Mon Sep 08 12:15:04 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,126 +0,0 @@
-#
-# Copyright (c) 2011, 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 Xchecksig.sh
-# @bug 7051189
-# @summary Need to suppress info message if -xcheck:jni used with libjsig.so
-# @run shell Xchecksig.sh
-#
-
-if [ "${TESTSRC}" = "" ]
-then
- TESTSRC=${PWD}
- echo "TESTSRC not set. Using "${TESTSRC}" as default"
-fi
-echo "TESTSRC=${TESTSRC}"
-## Adding common setup Variables for running shell tests.
-. ${TESTSRC}/../../test_env.sh
-
-OS=`uname -s`
-case "$OS" in
- Windows_* | CYGWIN_* )
- printf "Not testing libjsig.so on Windows. PASSED.\n "
- exit 0
- ;;
-esac
-
-JAVA=${TESTJAVA}${FS}bin${FS}java
-
-# LD_PRELOAD arch needs to match the binary we run, so run the java
-# 64-bit binary directly if we are testing 64-bit (bin/ARCH/java).
-# Check if TESTVMOPS contains -d64, but cannot use
-# java ${TESTVMOPS} to run "java -d64" with LD_PRELOAD.
-
-if [ ${OS} -eq "SunOS" ]
-then
- printf "SunOS test TESTVMOPTS = ${TESTVMOPTS}"
- printf ${TESTVMOPTS} | grep d64 > /dev/null
- if [ $? -eq 0 ]
- then
- printf "SunOS 64-bit test\n"
- BIT_FLAG=-d64
- fi
-fi
-
-ARCH=`uname -p`
-case $ARCH in
- i386)
- if [ X${BIT_FLAG} != "X" ]
- then
- ARCH=amd64
- JAVA=${TESTJAVA}${FS}bin${FS}${ARCH}${FS}java
- fi
- ;;
- sparc)
- if [ X${BIT_FLAG} != "X" ]
- then
- ARCH=sparcv9
- JAVA=${TESTJAVA}${FS}bin${FS}${ARCH}${FS}java
- fi
- ;;
- * )
- printf "Not testing architecture $ARCH, skipping test.\n"
- exit 0
- ;;
-esac
-
-LIBJSIG=${COMPILEJAVA}${FS}jre${FS}lib${FS}${ARCH}${FS}libjsig.so
-
-# If libjsig and binary do not match, skip test.
-
-A=`file ${LIBJSIG} | awk '{ print $3 }'`
-B=`file ${JAVA} | awk '{ print $3 }'`
-
-if [ $A -ne $B ]
-then
- printf "Mismatching binary and library to preload, skipping test.\n"
- exit 0
-fi
-
-if [ ! -f ${LIBJSIG} ]
-then
- printf "Skipping test: libjsig missing for given architecture: ${LIBJSIG}\n"
- exit 0
-fi
-# Use java -version to test, java version info appears on stderr,
-# the libjsig message we are removing appears on stdout.
-
-# grep returns zero meaning found, non-zero means not found:
-
-LD_PRELOAD=${LIBJSIG} ${JAVA} ${TESTVMOPTS} -Xcheck:jni -version 2>&1 | grep "libjsig is activated"
-if [ $? -eq 0 ]; then
- printf "Failed: -Xcheck:jni prints message when libjsig.so is loaded.\n"
- exit 1
-fi
-
-
-LD_PRELOAD=${LIBJSIG} ${JAVA} ${TESTVMOPTS} -Xcheck:jni -verbose:jni -version 2>&1 | grep "libjsig is activated"
-if [ $? != 0 ]; then
- printf "Failed: -Xcheck:jni does not print message when libjsig.so is loaded and -verbose:jni is set.\n"
- exit 1
-fi
-
-printf "PASSED\n"
-exit 0
-
--- ./hotspot/test/runtime/7196045/Test7196045.java Mon Sep 08 12:15:04 2014 -0700
+++ ./hotspot/test/runtime/7196045/Test7196045.java Mon Jan 05 11:51:17 2015 -0800
@@ -26,7 +26,7 @@
* @test
* @bug 7196045
* @summary Possible JVM deadlock in ThreadTimesClosure when using HotspotInternal non-public API.
- * @run main/othervm Test7196045
+ * @run main/othervm -XX:+UsePerfData Test7196045
*/
import java.lang.management.ManagementFactory;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./hotspot/test/runtime/XCheckJniJsig/XCheckJSig.java Mon Jan 05 11:51:17 2015 -0800
@@ -0,0 +1,82 @@
+/*
+ * 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 7051189 8023393
+ * @summary Need to suppress info message if -Xcheck:jni is used with libjsig.so
+ * @library /testlibrary
+ * @run main XCheckJSig
+ */
+
+import java.util.*;
+import com.oracle.java.testlibrary.*;
+
+public class XCheckJSig {
+ public static void main(String args[]) throws Throwable {
+
+ System.out.println("Regression test for bugs 7051189 and 8023393");
+ if (!Platform.isSolaris() && !Platform.isLinux() && !Platform.isOSX()) {
+ System.out.println("Test only applicable on Solaris, Linux, and Mac OSX, skipping");
+ return;
+ }
+
+ String jdk_path = System.getProperty("test.jdk");
+ String os_arch = Platform.getOsArch();
+ String libjsig;
+ String env_var;
+ if (Platform.isOSX()) {
+ libjsig = jdk_path + "/jre/lib/server/libjsig.dylib";
+ env_var = "DYLD_INSERT_LIBRARIES";
+ } else {
+ libjsig = jdk_path + "/jre/lib/" + os_arch + "/libjsig.so";
+ env_var = "LD_PRELOAD";
+ }
+ String java_program;
+ if (Platform.isSolaris()) {
+ // On Solaris, need to call the 64-bit Java directly in order for
+ // LD_PRELOAD to work because libjsig.so is 64-bit.
+ java_program = jdk_path + "/jre/bin/" + os_arch + "/java";
+ } else {
+ java_program = JDKToolFinder.getJDKTool("java");
+ }
+ // If this test fails, these might be useful to know.
+ System.out.println("libjsig: " + libjsig);
+ System.out.println("osArch: " + os_arch);
+ System.out.println("java_program: " + java_program);
+
+ ProcessBuilder pb = new ProcessBuilder(java_program, "-Xcheck:jni", "-version");
+ Map<String, String> env = pb.environment();
+ env.put(env_var, libjsig);
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldNotContain("libjsig is activated");
+ output.shouldHaveExitValue(0);
+
+ pb = new ProcessBuilder(java_program, "-Xcheck:jni", "-verbose:jni", "-version");
+ env = pb.environment();
+ env.put(env_var, libjsig);
+ output = new OutputAnalyzer(pb.start());
+ output.shouldContain("libjsig is activated");
+ output.shouldHaveExitValue(0);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./hotspot/test/runtime/classFileParserBug/TestEmptyBootstrapMethodsAttr.java Mon Jan 05 11:51:17 2015 -0800
@@ -0,0 +1,75 @@
+/*
+ * 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 TestEmptyBootstrapMethodsAttr
+ * @bug 8041918
+ * @library /testlibrary
+ * @summary Test empty bootstrap_methods table within BootstrapMethods attribute
+ * @compile TestEmptyBootstrapMethodsAttr.java
+ * @run main TestEmptyBootstrapMethodsAttr
+ */
+
+import java.io.File;
+import com.oracle.java.testlibrary.*;
+
+public class TestEmptyBootstrapMethodsAttr {
+
+ public static void main(String args[]) throws Throwable {
+ System.out.println("Regression test for bug 8041918");
+ String jarFile = System.getProperty("test.src") + File.separator + "emptynumbootstrapmethods.jar";
+
+ // ====== extract the test case
+ ProcessBuilder pb = new ProcessBuilder(new String[] { JDKToolFinder.getJDKTool("jar"), "xvf", jarFile } );
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldHaveExitValue(0);
+
+ // Test case #1:
+ // Try loading class with empty bootstrap_methods table where no
+ // other attributes are following BootstrapMethods in attribute table.
+ String className = "emptynumbootstrapmethods1";
+
+ // ======= execute test case #1
+ // Expect a lack of main method, this implies that the class loaded correctly
+ // with an empty bootstrap_methods and did not generate a ClassFormatError.
+ pb = ProcessTools.createJavaProcessBuilder("-cp", ".", className);
+ output = new OutputAnalyzer(pb.start());
+ output.shouldNotContain("java.lang.ClassFormatError");
+ output.shouldContain("Main method not found in class " + className);
+ output.shouldHaveExitValue(1);
+
+ // Test case #2:
+ // Try loading class with empty bootstrap_methods table where an
+ // AnnotationDefault attribute follows the BootstrapMethods in the attribute table.
+ className = "emptynumbootstrapmethods2";
+
+ // ======= execute test case #2
+ // Expect a lack of main method, this implies that the class loaded correctly
+ // with an empty bootstrap_methods and did not generate ClassFormatError.
+ pb = ProcessTools.createJavaProcessBuilder("-cp", ".", className);
+ output = new OutputAnalyzer(pb.start());
+ output.shouldNotContain("java.lang.ClassFormatError");
+ output.shouldContain("Main method not found in class " + className);
+ output.shouldHaveExitValue(1);
+ }
+}
Binary file test/runtime/classFileParserBug/emptynumbootstrapmethods.jar has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./hotspot/test/runtime/classFileParserBug/emptynumbootstrapmethods1.jcod Mon Jan 05 11:51:17 2015 -0800
@@ -0,0 +1,68 @@
+/*
+ * 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.
+ */
+
+/*
+ * This test contains a BootstrapMethods attribute with an empty
+ * bootstrap_methods table. This yields a BootstrapMethods
+ * attribute length of 2 and should not cause a
+ * java.lang.ClassFormatError to be thrown.
+ */
+class emptynumbootstrapmethods1 {
+ 0xCAFEBABE;
+ 0; // minor version
+ 51; // version
+ [12] { // Constant Pool
+ ; // first element is empty
+ class #2; // #1 at 0x0A
+ Utf8 "emptynumbootstrapmethods1"; // #2 at 0x0D
+ class #4; // #3 at 0x1F
+ Utf8 "java/lang/Object"; // #4 at 0x22
+ MethodHandle 5b #9; // #5 at 0x35
+ NameAndType #7 #8; // #6 at 0x39
+ Utf8 "equals"; // #7 at 0x3E
+ Utf8 "(Ljava/lang/Object;)Z"; // #8 at 0x47
+ Method #3 #6; // #9 at 0x5F
+ Utf8 "equalsx"; // #10 at 0x3E
+ Utf8 "BootstrapMethods"; // #11 at 0x69
+ } // Constant Pool
+
+ 0x0001; // access
+ #1;// this_cpx
+ #3;// super_cpx
+
+ [0] { // Interfaces
+ } // Interfaces
+
+ [0] { // fields
+ } // fields
+
+ [0] { // methods
+ } // methods
+
+ [1] { // Attributes
+ Attr(#11, 2) { // BootstrapMethods at 0x8A
+ [0] { // bootstrap_methods
+ }
+ } // end BootstrapMethods
+ } // Attributes
+} // end class atrbsm00101m10p
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./hotspot/test/runtime/classFileParserBug/emptynumbootstrapmethods2.jcod Mon Jan 05 11:51:17 2015 -0800
@@ -0,0 +1,89 @@
+/*
+ * 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.
+ */
+
+/*
+ * This test contains a BootstrapMethods attribute with an empty
+ * bootstrap_methods table. This yields a BootstrapMethods
+ * attribute length of 2 and should not cause a
+ * java.lang.ClassFormatError to be thrown. To ensure that an empty
+ * bootstrap_methods table is parsed correctly, another attribute,
+ * AnnotationDefault, follows the BootstrapMethods attribute in
+ * the attribute table.
+ */
+
+class emptynumbootstrapmethods2 {
+ 0xCAFEBABE;
+ 0; // minor version
+ 51; // version
+ [14] { // Constant Pool
+ ; // first element is empty
+ class #2; // #1 at 0x0A
+ Utf8 "emptynumbootstrapmethods2"; // #2 at 0x0D
+ class #4; // #3 at 0x1F
+ Utf8 "java/lang/Object"; // #4 at 0x22
+ MethodHandle 5b #9; // #5 at 0x35
+ NameAndType #7 #8; // #6 at 0x39
+ Utf8 "equals"; // #7 at 0x3E
+ Utf8 "(Ljava/lang/Object;)Z"; // #8 at 0x47
+ Method #3 #6; // #9 at 0x5F
+ Utf8 "equalsx"; // #10 at 0x3E
+ Utf8 "BootstrapMethods"; // #11 at 0x69
+ Utf8 "AnnotationDefault"; // #12
+ Utf8 "LAnnotationDefaultI;"; // #13
+ } // Constant Pool
+
+ 0x0001; // access
+ #1;// this_cpx
+ #3;// super_cpx
+
+ [0] { // Interfaces
+ } // Interfaces
+
+ [0] { // fields
+ } // fields
+
+ [0] { // methods
+ } // methods
+
+ [2] { // Attributes
+ Attr(#11, 2) { // BootstrapMethods at 0x8A
+ [0] { // bootstrap_methods
+ }
+ } // end BootstrapMethods
+ ;
+ Attr(#12) { // AnnotationDefault
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #13; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end AnnotationDefault
+ } // Attributes
+} // end class atrbsm00101m10p
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./hotspot/test/serviceability/sa/jmap-hashcode/Test8028623.java Mon Jan 05 11:51:17 2015 -0800
@@ -0,0 +1,74 @@
+/*
+ * 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 8028623
+ * @summary Test hashing of extended characters in Serviceability Agent.
+ * @library /testlibrary
+ * @compile -encoding utf8 Test8028623.java
+ * @run main Test8028623
+ */
+
+import com.oracle.java.testlibrary.JDKToolLauncher;
+import com.oracle.java.testlibrary.OutputBuffer;
+import com.oracle.java.testlibrary.ProcessTools;
+
+import java.io.File;
+
+public class Test8028623 {
+
+ public static int \u00CB = 1;
+ public static String dumpFile = "heap.out";
+
+ public static void main (String[] args) {
+
+ System.out.println(\u00CB);
+
+ try {
+ int pid = ProcessTools.getProcessId();
+ JDKToolLauncher jmap = JDKToolLauncher.create("jmap")
+ .addToolArg("-F")
+ .addToolArg("-dump:live,format=b,file=" + dumpFile)
+ .addToolArg(Integer.toString(pid));
+ ProcessBuilder pb = new ProcessBuilder(jmap.getCommand());
+ OutputBuffer output = ProcessTools.getOutput(pb);
+ Process p = pb.start();
+ int e = p.waitFor();
+ System.out.println("stdout:");
+ System.out.println(output.getStdout());
+ System.out.println("stderr:");
+ System.out.println(output.getStderr());
+
+ if (e != 0) {
+ throw new RuntimeException("jmap returns: " + e);
+ }
+ if (! new File(dumpFile).exists()) {
+ throw new RuntimeException("dump file NOT created: '" + dumpFile + "'");
+ }
+ } catch (Throwable t) {
+ t.printStackTrace();
+ throw new RuntimeException("Test failed with: " + t);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./hotspot/test/testlibrary_tests/AssertsTest.java Mon Jan 05 11:51:17 2015 -0800
@@ -0,0 +1,237 @@
+/*
+ * 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 static com.oracle.java.testlibrary.Asserts.*;
+
+/* @test
+ * @summary Tests the different assertions in the Assert class
+ * @library /testlibrary
+ */
+public class AssertsTest {
+ private static class Foo implements Comparable<Foo> {
+ final int id;
+ public Foo(int id) {
+ this.id = id;
+ }
+
+ public int compareTo(Foo f) {
+ return new Integer(id).compareTo(new Integer(f.id));
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ testLessThan();
+ testLessThanOrEqual();
+ testEquals();
+ testGreaterThanOrEqual();
+ testGreaterThan();
+ testNotEquals();
+ testNull();
+ testNotNull();
+ testTrue();
+ testFalse();
+ }
+
+ private static void testLessThan() throws Exception {
+ expectPass(Assertion.LT, 1, 2);
+
+ expectFail(Assertion.LT, 2, 2);
+ expectFail(Assertion.LT, 2, 1);
+ expectFail(Assertion.LT, null, 2);
+ expectFail(Assertion.LT, 2, null);
+ }
+
+ private static void testLessThanOrEqual() throws Exception {
+ expectPass(Assertion.LTE, 1, 2);
+ expectPass(Assertion.LTE, 2, 2);
+
+ expectFail(Assertion.LTE, 3, 2);
+ expectFail(Assertion.LTE, null, 2);
+ expectFail(Assertion.LTE, 2, null);
+ }
+
+ private static void testEquals() throws Exception {
+ expectPass(Assertion.EQ, 1, 1);
+ expectPass(Assertion.EQ, null, null);
+
+ Foo f1 = new Foo(1);
+ expectPass(Assertion.EQ, f1, f1);
+
+ Foo f2 = new Foo(1);
+ expectFail(Assertion.EQ, f1, f2);
+ expectFail(Assertion.LTE, null, 2);
+ expectFail(Assertion.LTE, 2, null);
+ }
+
+ private static void testGreaterThanOrEqual() throws Exception {
+ expectPass(Assertion.GTE, 1, 1);
+ expectPass(Assertion.GTE, 2, 1);
+
+ expectFail(Assertion.GTE, 1, 2);
+ expectFail(Assertion.GTE, null, 2);
+ expectFail(Assertion.GTE, 2, null);
+ }
+
+ private static void testGreaterThan() throws Exception {
+ expectPass(Assertion.GT, 2, 1);
+
+ expectFail(Assertion.GT, 1, 1);
+ expectFail(Assertion.GT, 1, 2);
+ expectFail(Assertion.GT, null, 2);
+ expectFail(Assertion.GT, 2, null);
+ }
+
+ private static void testNotEquals() throws Exception {
+ expectPass(Assertion.NE, null, 1);
+ expectPass(Assertion.NE, 1, null);
+
+ Foo f1 = new Foo(1);
+ Foo f2 = new Foo(1);
+ expectPass(Assertion.NE, f1, f2);
+
+ expectFail(Assertion.NE, null, null);
+ expectFail(Assertion.NE, f1, f1);
+ expectFail(Assertion.NE, 1, 1);
+ }
+
+ private static void testNull() throws Exception {
+ expectPass(Assertion.NULL, null);
+
+ expectFail(Assertion.NULL, 1);
+ }
+
+ private static void testNotNull() throws Exception {
+ expectPass(Assertion.NOTNULL, 1);
+
+ expectFail(Assertion.NOTNULL, null);
+ }
+
+ private static void testTrue() throws Exception {
+ expectPass(Assertion.TRUE, true);
+
+ expectFail(Assertion.TRUE, false);
+ }
+
+ private static void testFalse() throws Exception {
+ expectPass(Assertion.FALSE, false);
+
+ expectFail(Assertion.FALSE, true);
+ }
+
+ private static <T extends Comparable<T>> void expectPass(Assertion assertion, T ... args)
+ throws Exception {
+ Assertion.run(assertion, args);
+ }
+
+ private static <T extends Comparable<T>> void expectFail(Assertion assertion, T ... args)
+ throws Exception {
+ try {
+ Assertion.run(assertion, args);
+ } catch (RuntimeException e) {
+ return;
+ }
+ throw new Exception("Expected " + Assertion.format(assertion, (Object[]) args) +
+ " to throw a RuntimeException");
+ }
+
+}
+
+enum Assertion {
+ LT, LTE, EQ, GTE, GT, NE, NULL, NOTNULL, FALSE, TRUE;
+
+ public static <T extends Comparable<T>> void run(Assertion assertion, T ... args) {
+ String msg = "Expected " + format(assertion, args) + " to pass";
+ switch (assertion) {
+ case LT:
+ assertLessThan(args[0], args[1], msg);
+ break;
+ case LTE:
+ assertLessThanOrEqual(args[0], args[1], msg);
+ break;
+ case EQ:
+ assertEquals(args[0], args[1], msg);
+ break;
+ case GTE:
+ assertGreaterThanOrEqual(args[0], args[1], msg);
+ break;
+ case GT:
+ assertGreaterThan(args[0], args[1], msg);
+ break;
+ case NE:
+ assertNotEquals(args[0], args[1], msg);
+ break;
+ case NULL:
+ assertNull(args == null ? args : args[0], msg);
+ break;
+ case NOTNULL:
+ assertNotNull(args == null ? args : args[0], msg);
+ break;
+ case FALSE:
+ assertFalse((Boolean) args[0], msg);
+ break;
+ case TRUE:
+ assertTrue((Boolean) args[0], msg);
+ break;
+ default:
+ // do nothing
+ }
+ }
+
+ public static String format(Assertion assertion, Object ... args) {
+ switch (assertion) {
+ case LT:
+ return asString("assertLessThan", args);
+ case LTE:
+ return asString("assertLessThanOrEqual", args);
+ case EQ:
+ return asString("assertEquals", args);
+ case GTE:
+ return asString("assertGreaterThanOrEquals", args);
+ case GT:
+ return asString("assertGreaterThan", args);
+ case NE:
+ return asString("assertNotEquals", args);
+ case NULL:
+ return asString("assertNull", args);
+ case NOTNULL:
+ return asString("assertNotNull", args);
+ case FALSE:
+ return asString("assertFalse", args);
+ case TRUE:
+ return asString("assertTrue", args);
+ default:
+ return "";
+ }
+ }
+
+ private static String asString(String assertion, Object ... args) {
+ if (args == null) {
+ return String.format("%s(null)", assertion);
+ }
+ if (args.length == 1) {
+ return String.format("%s(%s)", assertion, args[0]);
+ } else {
+ return String.format("%s(%s, %s)", assertion, args[0], args[1]);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./hotspot/test/testlibrary_tests/OutputAnalyzerReportingTest.java Mon Jan 05 11:51:17 2015 -0800
@@ -0,0 +1,124 @@
+/*
+ * 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
+ * @summary Test the OutputAnalyzer reporting functionality,
+ * such as printing additional diagnostic info
+ * (exit code, stdout, stderr, command line, etc.)
+ * @library /testlibrary
+ */
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+
+import com.oracle.java.testlibrary.OutputAnalyzer;
+import com.oracle.java.testlibrary.ProcessTools;
+
+
+public class OutputAnalyzerReportingTest {
+
+ public static void main(String[] args) throws Exception {
+ // Create the output analyzer under test
+ String stdout = "aaaaaa";
+ String stderr = "bbbbbb";
+ OutputAnalyzer output = new OutputAnalyzer(stdout, stderr);
+
+ // Expected summary values should be the same for all cases,
+ // since the outputAnalyzer object is the same
+ String expectedExitValue = "-1";
+ String expectedSummary =
+ " stdout: [" + stdout + "];\n" +
+ " stderr: [" + stderr + "]\n" +
+ " exitValue = " + expectedExitValue + "\n";
+
+
+ DiagnosticSummaryTestRunner testRunner =
+ new DiagnosticSummaryTestRunner();
+
+ // should have exit value
+ testRunner.init(expectedSummary);
+ int unexpectedExitValue = 2;
+ try {
+ output.shouldHaveExitValue(unexpectedExitValue);
+ } catch (RuntimeException e) { }
+ testRunner.closeAndCheckResults();
+
+ // should not contain
+ testRunner.init(expectedSummary);
+ try {
+ output.shouldNotContain(stdout);
+ } catch (RuntimeException e) { }
+ testRunner.closeAndCheckResults();
+
+ // should contain
+ testRunner.init(expectedSummary);
+ try {
+ output.shouldContain("unexpected-stuff");
+ } catch (RuntimeException e) { }
+ testRunner.closeAndCheckResults();
+
+ // should not match
+ testRunner.init(expectedSummary);
+ try {
+ output.shouldNotMatch("[a]");
+ } catch (RuntimeException e) { }
+ testRunner.closeAndCheckResults();
+
+ // should match
+ testRunner.init(expectedSummary);
+ try {
+ output.shouldMatch("[qwerty]");
+ } catch (RuntimeException e) { }
+ testRunner.closeAndCheckResults();
+
+ }
+
+ private static class DiagnosticSummaryTestRunner {
+ private ByteArrayOutputStream byteStream =
+ new ByteArrayOutputStream(10000);
+
+ private String expectedSummary = "";
+ private PrintStream errStream;
+
+
+ public void init(String expectedSummary) {
+ this.expectedSummary = expectedSummary;
+ byteStream.reset();
+ errStream = new PrintStream(byteStream);
+ System.setErr(errStream);
+ }
+
+ public void closeAndCheckResults() {
+ // check results
+ errStream.close();
+ String stdErrStr = byteStream.toString();
+ if (!stdErrStr.contains(expectedSummary)) {
+ throw new RuntimeException("The output does not contain "
+ + "the diagnostic message, or the message is incorrect");
+ }
+ }
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./hotspot/test/testlibrary_tests/OutputAnalyzerTest.java Mon Jan 05 11:51:17 2015 -0800
@@ -0,0 +1,193 @@
+/*
+ * 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
+ * @summary Test the OutputAnalyzer utility class
+ * @library /testlibrary
+ */
+
+import com.oracle.java.testlibrary.OutputAnalyzer;
+
+public class OutputAnalyzerTest {
+
+ public static void main(String args[]) throws Exception {
+
+ String stdout = "aaaaaa";
+ String stderr = "bbbbbb";
+
+ // Regexps used for testing pattern matching of the test input
+ String stdoutPattern = "[a]";
+ String stderrPattern = "[b]";
+ String nonExistingPattern = "[c]";
+
+ OutputAnalyzer output = new OutputAnalyzer(stdout, stderr);
+
+ if (!stdout.equals(output.getStdout())) {
+ throw new Exception("getStdout() returned '" + output.getStdout() + "', expected '" + stdout + "'");
+ }
+
+ if (!stderr.equals(output.getStderr())) {
+ throw new Exception("getStderr() returned '" + output.getStderr() + "', expected '" + stderr + "'");
+ }
+
+ try {
+ output.shouldContain(stdout);
+ output.stdoutShouldContain(stdout);
+ output.shouldContain(stderr);
+ output.stderrShouldContain(stderr);
+ } catch (RuntimeException e) {
+ throw new Exception("shouldContain() failed", e);
+ }
+
+ try {
+ output.shouldContain("cccc");
+ throw new Exception("shouldContain() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.stdoutShouldContain(stderr);
+ throw new Exception("stdoutShouldContain() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.stderrShouldContain(stdout);
+ throw new Exception("stdoutShouldContain() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.shouldNotContain("cccc");
+ output.stdoutShouldNotContain("cccc");
+ output.stderrShouldNotContain("cccc");
+ } catch (RuntimeException e) {
+ throw new Exception("shouldNotContain() failed", e);
+ }
+
+ try {
+ output.shouldNotContain(stdout);
+ throw new Exception("shouldContain() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.stdoutShouldNotContain(stdout);
+ throw new Exception("shouldContain() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.stderrShouldNotContain(stderr);
+ throw new Exception("shouldContain() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ // Should match
+ try {
+ output.shouldMatch(stdoutPattern);
+ output.stdoutShouldMatch(stdoutPattern);
+ output.shouldMatch(stderrPattern);
+ output.stderrShouldMatch(stderrPattern);
+ } catch (RuntimeException e) {
+ throw new Exception("shouldMatch() failed", e);
+ }
+
+ try {
+ output.shouldMatch(nonExistingPattern);
+ throw new Exception("shouldMatch() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.stdoutShouldMatch(stderrPattern);
+ throw new Exception(
+ "stdoutShouldMatch() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.stderrShouldMatch(stdoutPattern);
+ throw new Exception(
+ "stderrShouldMatch() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ // Should not match
+ try {
+ output.shouldNotMatch(nonExistingPattern);
+ output.stdoutShouldNotMatch(nonExistingPattern);
+ output.stderrShouldNotMatch(nonExistingPattern);
+ } catch (RuntimeException e) {
+ throw new Exception("shouldNotMatch() failed", e);
+ }
+
+ try {
+ output.shouldNotMatch(stdoutPattern);
+ throw new Exception("shouldNotMatch() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.stdoutShouldNotMatch(stdoutPattern);
+ throw new Exception("shouldNotMatch() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.stderrShouldNotMatch(stderrPattern);
+ throw new Exception("shouldNotMatch() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ {
+ String aaaa = "aaaa";
+ String result = output.firstMatch(aaaa);
+ if (!aaaa.equals(result)) {
+ throw new Exception("firstMatch(String) faild to match. Expected: " + aaaa + " got: " + result);
+ }
+ }
+
+ {
+ String aa = "aa";
+ String aa_grouped_aa = aa + "(" + aa + ")";
+ String result = output.firstMatch(aa_grouped_aa, 1);
+ if (!aa.equals(result)) {
+ throw new Exception("firstMatch(String, int) failed to match. Expected: " + aa + " got: " + result);
+ }
+ }
+ }
+}
--- ./jaxp/.hgtags Mon Sep 08 12:15:56 2014 -0700
+++ ./jaxp/.hgtags Mon Jan 05 11:56:34 2015 -0800
@@ -473,11 +473,19 @@
45db678253587755df4a00066e42e2fce04bbb71 jdk7u65-b18
4e323af07c47061109fb5f585613b0cc4b4208ca jdk7u65-b19
f3b7bb6f1924ab7f635cdd60db7fbab64576cd6d jdk7u65-b32
+7215972c2c30d0fa469a459a3e4fcee6bc93991d jdk7u80-b00
+4c959b6a32057ec18c9c722ada3d0d0c716a51c4 jdk7u80-b01
+25a1b88d7a473e067471e00a5457236736e9a2e0 jdk7u80-b02
d41f31b707c87675f3467e980b1ceef2e53b3b5d jdk7u65-b20
d1f8566d39c56e40516a1afb304ed7c0681355d8 jdk7u67-b01
4e323af07c47061109fb5f585613b0cc4b4208ca jdk7u65-b40
a5f829d7fa05cf769402dfc82c94b737b8d011b0 jdk7u65-b31
f33ea72260ca7480f4a1405d35a3709895b491a2 jdk7u65-b33
+d1f8566d39c56e40516a1afb304ed7c0681355d8 jdk7u67-b01
+a9c1c53386a9b7856802a98a597a8cbf73e28fa0 jdk7u67-b31
+e7300cd38793c7620f39be5f73b7fcba2f80555b jdk7u67-b32
+78c4bc9bfa12cc97039fd84c5ec1cbd086a0ba35 jdk7u67-b33
+39a6fbc6ef75eba7b3c28e8485a0665d904f21eb jdk7u67-b34
86e93799766d67102a37559b3831abcc825d7e24 jdk7u66-b00
d34839cb2f15dee01cdfb1fd93378849de34d662 jdk7u66-b01
19e4e978c8212921104ba16d0db6bf18c6f8d0ab jdk7u66-b09
@@ -503,3 +511,51 @@
f7542072016b7972b383075f84df29bc05495d2e jdk7u71-b11
109dd4c4a07a8adfaf59e11c29e502277b803c44 jdk7u71-b12
df2c7c9a3609f8f4b30b09c29a9cfddc8b4b90ef jdk7u71-b13
+018049539cc25653eeba682b3ca5abcd63839d78 jdk7u71-b14
+0e7c12377e0120b908fc594afc596ce1f5f2b234 jdk7u72-b01
+bc5b33e920af4b34facfa85a6bf48d5f55b05116 jdk7u72-b02
+b1f6b12c1fcac4b0ea89bf3f134324aa8968b847 jdk7u72-b03
+f59d0ae0995d2cdb57ea482a8fa47575e0d8b57f jdk7u72-b04
+ed071d27bf7320265d8ae527bb622f2e26e1a89c jdk7u72-b05
+d3c5c35f617e33f673420ff9da8051c742513af3 jdk7u72-b06
+ef0842fc31d98031ad9bb514b0f8d2db7bcf4162 jdk7u72-b07
+89117e4403e61b9c033bcab65da30abf2219e385 jdk7u72-b08
+7637d4b21a9e3237f129f69a0dc7132877f3ab19 jdk7u72-b09
+a3d6d3327b32cd7fb41a144d48f957170dde3ba8 jdk7u72-b10
+d3fbd111daa01dc1737afd0a59084e14664d581a jdk7u72-b11
+fb713c907f33689a418c87bf721dafcdc9616ca8 jdk7u72-b12
+8f0d267ca63ab2f9d7839604ae88fafbcc0ad2d4 jdk7u72-b13
+fec38133453a8d70d4c528595ae1cab47909c4bd jdk7u72-b14
+e8ab19435208726b1334ba8e7928ea154e0959b3 jdk7u72-b30
+d8246774af472f617033202d2c58c7572da08dcd jdk7u72-b31
+4173f90038ff1764576d08efa34109a7895f106b jdk7u75-b00
+b9eaa7d194dd5e23bd2d53be4d57b25fdcb08e31 jdk7u75-b01
+98eaae4f301779861be3f9a8b0854ec83074615a jdk7u75-b02
+eb57739c7818a0dbaa39122ad35f5e48584be5df jdk7u75-b03
+908a056c8d8fa65864cbf5745a050f675be35288 jdk7u75-b04
+079579b6672777d71624b49b29042cd19cbccef2 jdk7u75-b05
+967717c26bb17ff3c3aa399072eebed17c599a92 jdk7u75-b06
+1a9565415e4142f9914b309888056f9b8f27de97 jdk7u75-b07
+d8419be679448402af177510f1a154ca7935d24f jdk7u75-b08
+08599c76e606df8d369d1eda03ac876ffbaafb36 jdk7u75-b09
+d3c566dedbcde177bfa573ae3632ad21c335a03d jdk7u75-b10
+1d6f8fbbfefc63adde96d70d74dc281616b7ac01 jdk7u75-b11
+15f65800816f164b5855744b59fbc3d661e0511d jdk7u75-b12
+d6c90cc2e91d58688884a8e659e79603e37d4cd5 jdk7u75-b13
+999eb9cbf8404232a03e3a877680ca3541b8f62c jdk7u75-b30
+4efcb94971a21562649ae01c07880139a35d3403 jdk7u75-b31
+8405eb3c02e3f81b20faa1adf43d447e2e7b7705 jdk7u76-b00
+f478245e2c18bd459d085c70cf7aa212b1f30dbf jdk7u76-b01
+bb77b08b760634a87ee3c1fbb3c7a519d61d4e87 jdk7u76-b02
+0c337b6088029d8867732a2f1e08dcc7271e6111 jdk7u76-b03
+0d0d6c0a1ae3cae89f59491c6643fe7f12c497bc jdk7u76-b04
+5bde0c6472681b8e508c7f54692ad3ca69c6a544 jdk7u76-b05
+9e39563c9f33ceac879ee214bc27db3e5f1d5004 jdk7u76-b06
+4e5b7d15fad4fc32c67a45512391c71e7e33460e jdk7u76-b07
+aefcd8f73cfb456a133ee923859683c68338649f jdk7u76-b08
+c6675d4d08b8d5e6a2bb9f631d8b5762f0b51cdf jdk7u76-b09
+62e1b60c3adfd3133e3fe9f8d5194512f503c540 jdk7u76-b10
+33040bd2deb5371a85fe7d7a9442cdf649919b39 jdk7u76-b11
+7167fcf821b00424c0464086f4047a7209dc9e59 jdk7u76-b12
+6262c3d41bb13f58338c4bc7946468ba70825046 jdk7u76-b13
+d3907dca5ffc798076f44cc63f01f7beb41343a9 jdk7u76-b30
--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java Mon Sep 08 12:15:56 2014 -0700
+++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java Mon Jan 05 11:56:34 2015 -0800
@@ -147,8 +147,9 @@
fCurrentEntity.lineNumber++;
fCurrentEntity.columnNumber = 1;
if (fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = (char)c;
- load(1, false, true);
+ load(1, false, false);
}
if (c == '\r' && external) {
int cc = fCurrentEntity.ch[fCurrentEntity.position++];
@@ -306,9 +307,10 @@
if (XML11Char.isXML11NameStart(ch)) {
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = ch;
offset = 0;
- if (load(1, false, true)) {
+ if (load(1, false, false)) {
fCurrentEntity.columnNumber++;
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);
return symbol;
@@ -317,9 +319,10 @@
}
else if (XML11Char.isXML11NameHighSurrogate(ch)) {
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = ch;
offset = 0;
- if (load(1, false, true)) {
+ if (load(1, false, false)) {
--fCurrentEntity.position;
--fCurrentEntity.startPosition;
return null;
@@ -332,10 +335,11 @@
return null;
}
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(2);
fCurrentEntity.ch[0] = ch;
fCurrentEntity.ch[1] = ch2;
offset = 0;
- if (load(2, false, true)) {
+ if (load(2, false, false)) {
fCurrentEntity.columnNumber += 2;
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 2);
return symbol;
@@ -464,9 +468,10 @@
if (XML11Char.isXML11NCNameStart(ch)) {
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = ch;
offset = 0;
- if (load(1, false, true)) {
+ if (load(1, false, false)) {
fCurrentEntity.columnNumber++;
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);
return symbol;
@@ -475,9 +480,10 @@
}
else if (XML11Char.isXML11NameHighSurrogate(ch)) {
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = ch;
offset = 0;
- if (load(1, false, true)) {
+ if (load(1, false, false)) {
--fCurrentEntity.position;
--fCurrentEntity.startPosition;
return null;
@@ -490,10 +496,11 @@
return null;
}
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(2);
fCurrentEntity.ch[0] = ch;
fCurrentEntity.ch[1] = ch2;
offset = 0;
- if (load(2, false, true)) {
+ if (load(2, false, false)) {
fCurrentEntity.columnNumber += 2;
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 2);
return symbol;
@@ -628,9 +635,10 @@
if (XML11Char.isXML11NCNameStart(ch)) {
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = ch;
offset = 0;
- if (load(1, false, true)) {
+ if (load(1, false, false)) {
fCurrentEntity.columnNumber++;
String name = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);
qname.setValues(null, name, name, null);
@@ -640,9 +648,10 @@
}
else if (XML11Char.isXML11NameHighSurrogate(ch)) {
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = ch;
offset = 0;
- if (load(1, false, true)) {
+ if (load(1, false, false)) {
--fCurrentEntity.startPosition;
--fCurrentEntity.position;
return false;
@@ -655,10 +664,11 @@
return false;
}
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(2);
fCurrentEntity.ch[0] = ch;
fCurrentEntity.ch[1] = ch2;
offset = 0;
- if (load(2, false, true)) {
+ if (load(2, false, false)) {
fCurrentEntity.columnNumber += 2;
String name = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 2);
qname.setValues(null, name, name, null);
@@ -835,8 +845,9 @@
load(0, true, true);
}
else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
+ invokeListeners(0);
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
- load(1, false, true);
+ load(1, false, false);
fCurrentEntity.position = 0;
fCurrentEntity.startPosition = 0;
}
@@ -976,8 +987,9 @@
load(0, true, true);
}
else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
+ invokeListeners(0);
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
- load(1, false, true);
+ load(1, false, false);
fCurrentEntity.startPosition = 0;
fCurrentEntity.position = 0;
}
@@ -1346,8 +1358,9 @@
else if (c == '\n' && (cc == '\r' ) && fCurrentEntity.isExternal()) {
// handle newlines
if (fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = (char)cc;
- load(1, false, true);
+ load(1, false, false);
}
int ccc = fCurrentEntity.ch[++fCurrentEntity.position];
if (ccc == '\n' || ccc == 0x85) {
@@ -1408,8 +1421,9 @@
fCurrentEntity.lineNumber++;
fCurrentEntity.columnNumber = 1;
if (fCurrentEntity.position == fCurrentEntity.count - 1) {
+ invokeListeners(0);
fCurrentEntity.ch[0] = (char)c;
- entityChanged = load(1, true, true);
+ entityChanged = load(1, true, false);
if (!entityChanged) {
// the load change the position to be 1,
// need to restore it when entity not changed
--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java Mon Sep 08 12:15:56 2014 -0700
+++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java Mon Jan 05 11:56:34 2015 -0800
@@ -538,8 +538,9 @@
fCurrentEntity.lineNumber++;
fCurrentEntity.columnNumber = 1;
if (fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = (char)c;
- load(1, false, true);
+ load(1, false, false);
}
if (c == '\r' && isExternal) {
if (fCurrentEntity.ch[fCurrentEntity.position++] != '\n') {
@@ -670,9 +671,10 @@
int offset = fCurrentEntity.position;
if (XMLChar.isNameStart(fCurrentEntity.ch[offset])) {
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = fCurrentEntity.ch[offset];
offset = 0;
- if (load(1, false, true)) {
+ if (load(1, false, false)) {
fCurrentEntity.columnNumber++;
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);
@@ -776,10 +778,11 @@
if (XMLChar.isNameStart(fCurrentEntity.ch[offset])) {
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = fCurrentEntity.ch[offset];
offset = 0;
- if (load(1, false, true)) {
+ if (load(1, false, false)) {
fCurrentEntity.columnNumber++;
//adding into symbol table.
//XXX We are trying to add single character in SymbolTable??????
@@ -906,8 +909,9 @@
if (fCurrentEntity.position == fCurrentEntity.count) {
load(0, true, true);
} else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
+ invokeListeners(0);
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
- load(1, false, true);
+ load(1, false, false);
fCurrentEntity.position = 0;
}
@@ -1054,8 +1058,9 @@
if (fCurrentEntity.position == fCurrentEntity.count) {
load(0, true, true);
} else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
+ invokeListeners(0);
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
- load(1, false, true);
+ load(1, false, false);
fCurrentEntity.position = 0;
}
@@ -1419,8 +1424,9 @@
} else if (c == '\n' && cc == '\r' && isExternal) {
// handle newlines
if (fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = (char)cc;
- load(1, false, true);
+ load(1, false, false);
}
fCurrentEntity.position++;
if (fCurrentEntity.ch[fCurrentEntity.position] == '\n') {
@@ -1494,8 +1500,9 @@
fCurrentEntity.lineNumber++;
fCurrentEntity.columnNumber = 1;
if (fCurrentEntity.position == fCurrentEntity.count - 1) {
+ invokeListeners(0);
fCurrentEntity.ch[0] = (char)c;
- entityChanged = load(1, true, true);
+ entityChanged = load(1, true, false);
if (!entityChanged){
// the load change the position to be 1,
// need to restore it when entity not changed
--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.java Mon Sep 08 12:15:56 2014 -0700
+++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.java Mon Jan 05 11:56:34 2015 -0800
@@ -54,6 +54,7 @@
import com.sun.org.apache.xerces.internal.util.SymbolTable;
import com.sun.org.apache.xerces.internal.util.XMLSymbols;
import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+import com.sun.org.apache.xerces.internal.utils.XMLSecurityManager;
import com.sun.org.apache.xerces.internal.utils.XMLSecurityPropertyManager;
import com.sun.org.apache.xerces.internal.xni.XNIException;
import com.sun.org.apache.xerces.internal.xni.grammars.Grammar;
@@ -983,6 +984,18 @@
*/
public void reset(XMLComponentManager componentManager) throws XMLConfigurationException {
+ XMLSecurityPropertyManager spm = (XMLSecurityPropertyManager)componentManager.getProperty(XML_SECURITY_PROPERTY_MANAGER);
+ if (spm == null) {
+ spm = new XMLSecurityPropertyManager();
+ setProperty(XML_SECURITY_PROPERTY_MANAGER, spm);
+ }
+
+ XMLSecurityManager sm = (XMLSecurityManager)componentManager.getProperty(SECURITY_MANAGER);
+ if (sm == null)
+ setProperty(SECURITY_MANAGER,new XMLSecurityManager(true));
+
+ faccessExternalSchema = spm.getValue(XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_SCHEMA);
+
fGrammarBucket.reset();
fSubGroupHandler.reset();
@@ -1066,9 +1079,6 @@
// get generate-synthetic-annotations feature
fSchemaHandler.setGenerateSyntheticAnnotations(componentManager.getFeature(GENERATE_SYNTHETIC_ANNOTATIONS, false));
fSchemaHandler.reset(componentManager);
-
- XMLSecurityPropertyManager spm = (XMLSecurityPropertyManager)componentManager.getProperty(XML_SECURITY_PROPERTY_MANAGER);
- faccessExternalSchema = spm.getValue(XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_SCHEMA);
}
private void initGrammarBucket(){
--- ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java Mon Sep 08 12:15:56 2014 -0700
+++ ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java Mon Jan 05 11:56:34 2015 -0800
@@ -450,7 +450,8 @@
}
private void propagateFeatures(AbstractXMLSchema schema) {
- schema.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, fSecurityManager != null);
+ schema.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING,
+ (fSecurityManager != null && fSecurityManager.isSecureProcessing()));
schema.setFeature(Constants.ORACLE_FEATURE_SERVICE_MECHANISM, fUseServicesMechanism);
String[] features = fXMLSchemaLoader.getRecognizedFeatures();
for (int i = 0; i < features.length; ++i) {
--- ./jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2.java Mon Sep 08 12:15:56 2014 -0700
+++ ./jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2.java Mon Jan 05 11:56:34 2015 -0800
@@ -3145,7 +3145,11 @@
m_data.elementAt(-dataIndex+1));
}
}
- else if (DTM.ELEMENT_NODE == type || DTM.DOCUMENT_FRAGMENT_NODE == type
+ else if (DTM.ELEMENT_NODE == type)
+ {
+ return getStringValueX(nodeHandle);
+ }
+ else if (DTM.DOCUMENT_FRAGMENT_NODE == type
|| DTM.DOCUMENT_NODE == type)
{
return null;
--- ./jaxp/src/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java Mon Sep 08 12:15:56 2014 -0700
+++ ./jaxp/src/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java Mon Jan 05 11:56:34 2015 -0800
@@ -851,7 +851,6 @@
ser.fDOMErrorHandler.handleError(error);
}
- e.printStackTrace();
throw (LSException) DOMUtil.createLSException(LSException.SERIALIZE_ERR, e).fillInStackTrace();
}
return true;
--- ./jaxws/.hgtags Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/.hgtags Mon Jan 05 11:56:55 2015 -0800
@@ -472,11 +472,19 @@
dedfc93eeb5f4b28ad1a91902a0676aef0937e42 jdk7u65-b18
db4cccbfd72fc265b736a273797963754434a7d2 jdk7u65-b19
0cd66509e11335fac490076cbdcb2f47c592de86 jdk7u65-b32
+bef313c7ff7a7a829f8f6a305bf0c3738ad99795 jdk7u80-b00
+0eb2482c3d0663c39794ec4c268acc41c4cd387b jdk7u80-b01
+579128925dd9a0e9c529125c9e299dc0518037a5 jdk7u80-b02
28d868d40df0d420b87698e1215e5039d24a8ae5 jdk7u65-b20
1ef1681e21ca00edbc8727e849fef50637cc52d8 jdk7u67-b01
db4cccbfd72fc265b736a273797963754434a7d2 jdk7u65-b40
190d885fe83b5b1801ee6d7327161254545d55a8 jdk7u65-b31
6cf7676aa11c053481c0806afda9fc91c2bfd782 jdk7u65-b33
+1ef1681e21ca00edbc8727e849fef50637cc52d8 jdk7u67-b01
+34e3554140b7f9efe2ad20fa04dfd5faf5821248 jdk7u67-b31
+6090119e680a65addafb82f2b6227315813b7e68 jdk7u67-b32
+aa1879afbb8dc4dd157eab31c86de2845a3cad6a jdk7u67-b33
+a3290ceed5750bfc62a5ec5c00ee1aea125e9db3 jdk7u67-b34
d63ca1c5bdb9fb2e36ec4afda431c0d1dfdfc07c jdk7u66-b00
1dce52b208a9528266c26352e03e67ec0ddb4dd7 jdk7u66-b01
04481967eff566b8a379a0315d2a3a255928d6ce jdk7u66-b09
@@ -502,3 +510,51 @@
b37043cee55ed025b04a3420908897e69c6c687f jdk7u71-b11
3a432d7f01ed998ee6ca2ed04e818849a3d1e0c7 jdk7u71-b12
9dd0dea849dd2550b58346977d9111717c1f38b2 jdk7u71-b13
+a580f2c49eacc68a11cf0e724aec4a974fb77745 jdk7u71-b14
+18676fc7713f5341f298a1ae2aee9e217fcdb5a5 jdk7u72-b01
+e4bbb79df2b13cea8c24ee2e6346e1aa30645400 jdk7u72-b02
+646f7c237e9ecde8df0fc6524b3605a89e6dc135 jdk7u72-b03
+30d42f2fde558b4aeae26cc7bda89b2badf88aab jdk7u72-b04
+761c40c9076aefac72bbff913e8bc088e565386f jdk7u72-b05
+a3961ce4d5c1fd1f9cde546e62760a008b5b9d60 jdk7u72-b06
+1153553de579fbbf8c328ea47f07accf8e2d9ac2 jdk7u72-b07
+7b00d0359f49c82b38bb2f2faafae53eacc1a995 jdk7u72-b08
+f16ea19cfd03274e9e1fd5367c3f4c23accf4e75 jdk7u72-b09
+615c0d49e8927c9b03f5694df4ddb7a5e45eaf6d jdk7u72-b10
+b34f135642cddf3c15f1fecaad320cb12cbd9472 jdk7u72-b11
+cfa494e8b9bcd29ba59f1bfa3c365418b4102f71 jdk7u72-b12
+d4be88d9bfbff3e41bc4121838e90160734d9805 jdk7u72-b13
+e33bca6f8dab3e82b2dec2c52074f19a88e1267e jdk7u72-b14
+587c4a3bfb76c03fa589f61e28ed739c537409bc jdk7u72-b30
+4257d52e30b4054c9ce43cfe830dff2b8f740037 jdk7u72-b31
+664724762a245f1cd9d89ccd3d3833fcb16bed80 jdk7u75-b00
+ce5b9e0d988cb52d9e6c36edeafe60bd16280534 jdk7u75-b01
+1b6ba791cbf7d995a81dfd1478906ebae3769ea2 jdk7u75-b02
+033349ac9e45fd897571ff4f6e38ed48d46cd539 jdk7u75-b03
+f1266833b5a07aa84d5da263f4a18503838286f4 jdk7u75-b04
+bfe594779717071439b94ddc771117eedb442a25 jdk7u75-b05
+b700cddd5754a82fca4f5465116fbba516a96667 jdk7u75-b06
+781d7a0230eef7cbef89bb32bc0d722730c198e3 jdk7u75-b07
+b85627d6afbb758fc244147dfdbbd287ee524eed jdk7u75-b08
+e7aef72db8cf95b27af7c2508a02bf87b52b325b jdk7u75-b09
+d7c340b9d530da158dce7da897f66e31e83b1366 jdk7u75-b10
+4b36c07b29c32064abdfa6df09c381861875ddd4 jdk7u75-b11
+5458349b0e4860662dc5a4f96363c0e714d09c65 jdk7u75-b12
+38d474b401c6a69dfc7cea5ba79a894980fa8107 jdk7u75-b13
+4d068ffb0b544d004792b3047c5aa9ab72b53529 jdk7u75-b30
+2232599a19acc7c45baa0b3c70f072a47f1cbc22 jdk7u75-b31
+5d60eecdd6b881856ddfc34e0d34f3072575662a jdk7u76-b00
+9fed28dcccaafd49f9a4b2aee30b2babc97d4a93 jdk7u76-b01
+7e479fddbf5d7b7840319a44d9e72562d7cfd83b jdk7u76-b02
+2dcdee347bf25efe5e5d5242a5608547398bb7c7 jdk7u76-b03
+42324883f9b32a6eaaf39c8e5d8ba2c65fb1015e jdk7u76-b04
+129bfaec2a1aca5c3ca3db303dd7e7342c17e350 jdk7u76-b05
+7c564f2cbb1cc439506a26785d07683f16b9ec40 jdk7u76-b06
+c99e49a9c2bf9503135ad319bcdb3b3724d1af5c jdk7u76-b07
+e98a28d564626be745026d697d7bb68a7f053ed7 jdk7u76-b08
+7de80762ae307e56156279d84c8d1dcf73b26164 jdk7u76-b09
+c84694b00c547056b8da98ae4c0c7c9feb06863b jdk7u76-b10
+df2786b1daffc450d7e7e43c9d63aaf72a5cd2f0 jdk7u76-b11
+dc818936e1050f0058d35a7a27946e4e2bfb27ee jdk7u76-b12
+a986e4b755f388532378d595831bebece7bf72c4 jdk7u76-b13
+260565d7fba1a2d176bd43d81b0714bd19cf4459 jdk7u76-b30
--- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/processor/model/Message.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/processor/model/Message.java Mon Jan 05 11:56:55 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, 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
@@ -25,7 +25,6 @@
package com.sun.tools.internal.ws.processor.model;
-import com.sun.tools.internal.ws.wsdl.framework.Entity;
import com.sun.tools.internal.ws.wscompile.ErrorReceiver;
import com.sun.tools.internal.ws.wscompile.AbortException;
import com.sun.tools.internal.ws.resources.ModelMessages;
@@ -177,7 +176,8 @@
throw new AbortException();
}
_parameters.add(p);
- _parametersByName.put(p.getName(), p);
+ String name = p.getCustomName() != null ? p.getCustomName() : p.getName();
+ _parametersByName.put(name, p);
}
public Parameter getParameterByName(String name) {
--- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/processor/modeler/wsdl/WSDLModeler.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/processor/modeler/wsdl/WSDLModeler.java Mon Jan 05 11:56:55 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, 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
@@ -1757,9 +1757,9 @@
}
if (part.isIN())
- setCustomizedParameterName(info.portTypeOperation, inMsg, part, param, false);
+ setCustomizedParameterName(info.bindingOperation, inMsg, part, param, false);
else if (outMsg != null)
- setCustomizedParameterName(info.portTypeOperation, outMsg, part, param, false);
+ setCustomizedParameterName(info.bindingOperation, outMsg, part, param, false);
params.add(param);
}
--- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/model/nav/Utils.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/model/nav/Utils.java Mon Jan 05 11:56:55 2015 -0800
@@ -54,17 +54,21 @@
static { // we statically initializing REFLECTION_NAVIGATOR property
try {
- Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
- //noinspection unchecked
- final Method getInstance = refNav.getDeclaredMethod("getInstance");
+ final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
// requires accessClassInPackage privilege
- AccessController.doPrivileged(
- new PrivilegedAction<Object>() {
+ final Method getInstance = AccessController.doPrivileged(
+ new PrivilegedAction<Method>() {
+
@Override
- public Object run() {
- getInstance.setAccessible(true);
- return null;
+ public Method run() {
+ try {
+ Method getInstance = refNav.getDeclaredMethod("getInstance");
+ getInstance.setAccessible(true);
+ return getInstance;
+ } catch (NoSuchMethodException e) {
+ throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
+ }
}
}
);
@@ -72,16 +76,10 @@
//noinspection unchecked
REFLECTION_NAVIGATOR = (Navigator<Type, Class, Field, Method>) getInstance.invoke(null);
} catch (ClassNotFoundException e) {
- e.printStackTrace();
throw new IllegalStateException("Can't find ReflectionNavigator class");
} catch (InvocationTargetException e) {
- e.printStackTrace();
throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception");
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
} catch (IllegalAccessException e) {
- e.printStackTrace();
throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible");
} catch (SecurityException e) {
LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e);
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/api/Utils.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/api/Utils.java Mon Jan 05 11:56:55 2015 -0800
@@ -54,17 +54,20 @@
static { // we statically initializing REFLECTION_NAVIGATOR property
try {
- Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
- //noinspection unchecked
- final Method getInstance = refNav.getDeclaredMethod("getInstance");
+ final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
// requires accessClassInPackage privilege
- AccessController.doPrivileged(
- new PrivilegedAction<Object>() {
+ final Method getInstance = AccessController.doPrivileged(
+ new PrivilegedAction<Method>() {
@Override
- public Object run() {
- getInstance.setAccessible(true);
- return null;
+ public Method run() {
+ try {
+ Method getInstance = refNav.getDeclaredMethod("getInstance");
+ getInstance.setAccessible(true);
+ return getInstance;
+ } catch (NoSuchMethodException e) {
+ throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
+ }
}
}
);
@@ -72,16 +75,10 @@
//noinspection unchecked
REFLECTION_NAVIGATOR = (Navigator<Type, Class, Field, Method>) getInstance.invoke(null);
} catch (ClassNotFoundException e) {
- e.printStackTrace();
throw new IllegalStateException("Can't find ReflectionNavigator class");
} catch (InvocationTargetException e) {
- e.printStackTrace();
throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception");
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
} catch (IllegalAccessException e) {
- e.printStackTrace();
throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible");
} catch (SecurityException e) {
LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e);
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl.java Mon Jan 05 11:56:55 2015 -0800
@@ -40,6 +40,8 @@
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
@@ -194,8 +196,15 @@
static {
- QName[] qnames = (System.getProperty(MAP_ANYURI_TO_URI) == null) ? new QName[] {
- createXS("string"),
+ String MAP_ANYURI_TO_URI_VALUE = AccessController.doPrivileged(
+ new PrivilegedAction<String>() {
+ @Override
+ public String run() {
+ return System.getProperty(MAP_ANYURI_TO_URI);
+ }
+ }
+ );
+ QName[] qnames = (MAP_ANYURI_TO_URI_VALUE == null) ? new QName[] { createXS("string"),
createXS("anySimpleType"),
createXS("normalizedString"),
createXS("anyURI"),
@@ -307,7 +316,7 @@
return v.toExternalForm();
}
});
- if (System.getProperty(MAP_ANYURI_TO_URI) == null) {
+ if (MAP_ANYURI_TO_URI_VALUE == null) {
secondaryList.add(
new StringImpl<URI>(URI.class, createXS("string")) {
public URI parse(CharSequence text) throws SAXException {
@@ -771,17 +780,18 @@
}
});
primaryList.add(
- new StringImpl<BigDecimal>(BigDecimal.class,
- createXS("decimal")
+ new StringImpl<BigDecimal>(BigDecimal.class,
+ createXS("decimal")
) {
- public BigDecimal parse(CharSequence text) {
- return DatatypeConverterImpl._parseDecimal(text.toString());
+ public BigDecimal parse(CharSequence text) {
+ return DatatypeConverterImpl._parseDecimal(text.toString());
+ }
+
+ public String print(BigDecimal v) {
+ return DatatypeConverterImpl._printDecimal(v);
+ }
}
-
- public String print(BigDecimal v) {
- return DatatypeConverterImpl._printDecimal(v);
- }
- });
+ );
primaryList.add(
new StringImpl<QName>(QName.class,
createXS("QName")
@@ -809,7 +819,7 @@
w.getNamespaceContext().declareNamespace(v.getNamespaceURI(),v.getPrefix(),false);
}
});
- if (System.getProperty(MAP_ANYURI_TO_URI) != null) {
+ if (MAP_ANYURI_TO_URI_VALUE != null) {
primaryList.add(
new StringImpl<URI>(URI.class, createXS("anyURI")) {
public URI parse(CharSequence text) throws SAXException {
@@ -827,16 +837,17 @@
});
}
primaryList.add(
- new StringImpl<Duration>(Duration.class, createXS("duration")) {
- public String print(Duration duration) {
- return duration.toString();
+ new StringImpl<Duration>(Duration.class, createXS("duration")) {
+ public String print(Duration duration) {
+ return duration.toString();
+ }
+
+ public Duration parse(CharSequence lexical) {
+ TODO.checkSpec("JSR222 Issue #42");
+ return DatatypeConverterImpl.getDatatypeFactory().newDuration(lexical.toString());
+ }
}
-
- public Duration parse(CharSequence lexical) {
- TODO.checkSpec("JSR222 Issue #42");
- return DatatypeConverterImpl.getDatatypeFactory().newDuration(lexical.toString());
- }
- });
+ );
primaryList.add(
new StringImpl<Void>(Void.class) {
// 'void' binding isn't defined by the spec, but when the JAX-RPC processes user-defined
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Utils.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Utils.java Mon Jan 05 11:56:55 2015 -0800
@@ -54,17 +54,20 @@
static { // we statically initializing REFLECTION_NAVIGATOR property
try {
- Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
- //noinspection unchecked
- final Method getInstance = refNav.getDeclaredMethod("getInstance");
+ final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
// requires accessClassInPackage privilege
- AccessController.doPrivileged(
- new PrivilegedAction<Object>() {
+ final Method getInstance = AccessController.doPrivileged(
+ new PrivilegedAction<Method>() {
@Override
- public Object run() {
- getInstance.setAccessible(true);
- return null;
+ public Method run() {
+ try {
+ Method getInstance = refNav.getDeclaredMethod("getInstance");
+ getInstance.setAccessible(true);
+ return getInstance;
+ } catch (NoSuchMethodException e) {
+ throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
+ }
}
}
);
@@ -72,16 +75,10 @@
//noinspection unchecked
REFLECTION_NAVIGATOR = (Navigator<Type, Class, Field, Method>) getInstance.invoke(null);
} catch (ClassNotFoundException e) {
- e.printStackTrace();
throw new IllegalStateException("Can't find ReflectionNavigator class");
} catch (InvocationTargetException e) {
- e.printStackTrace();
throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception");
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
} catch (IllegalAccessException e) {
- e.printStackTrace();
throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible");
} catch (SecurityException e) {
LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e);
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ArrayBeanInfoImpl.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ArrayBeanInfoImpl.java Mon Jan 05 11:56:55 2015 -0800
@@ -79,19 +79,19 @@
@Override
public void startElement(UnmarshallingContext.State state, TagName ea) {
- state.target = new ArrayList();
+ state.setTarget(new ArrayList());
}
@Override
public void leaveElement(UnmarshallingContext.State state, TagName ea) {
- state.target = toArray((List)state.target);
+ state.setTarget(toArray((List)state.getTarget()));
}
@Override
public void childElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
if(ea.matches("","item")) {
- state.loader = itemLoader;
- state.receiver = this;
+ state.setLoader(itemLoader);
+ state.setReceiver(this);
} else {
super.childElement(state,ea);
}
@@ -103,9 +103,9 @@
}
public void receive(UnmarshallingContext.State state, Object o) {
- ((List)state.target).add(o);
+ ((List)state.getTarget()).add(o);
}
- };
+ }
protected Object toArray( List list ) {
int len = list.size();
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ContentHandlerAdaptor.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ContentHandlerAdaptor.java Mon Jan 05 11:56:55 2015 -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
@@ -25,10 +25,6 @@
package com.sun.xml.internal.bind.v2.runtime;
-import java.io.IOException;
-
-import javax.xml.stream.XMLStreamException;
-
import com.sun.istack.internal.FinalArrayList;
import com.sun.istack.internal.SAXException2;
@@ -36,6 +32,9 @@
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
+import javax.xml.stream.XMLStreamException;
+import java.io.IOException;
+
/**
* Receives SAX2 events and send the equivalent events to
* {@link XMLSerializer}
@@ -70,14 +69,14 @@
private boolean containsPrefixMapping(String prefix, String uri) {
for( int i=0; i<prefixMap.size(); i+=2 ) {
if(prefixMap.get(i).equals(prefix)
- && prefixMap.get(i+1).equals(uri))
+ && prefixMap.get(i+1).equals(uri))
return true;
}
return false;
}
public void startElement(String namespaceURI, String localName, String qName, Attributes atts)
- throws SAXException {
+ throws SAXException {
try {
flushText();
@@ -92,13 +91,13 @@
serializer.startElement(namespaceURI,localName, p,null);
// declare namespace events
- for( int i=0; i<prefixMap.size(); i+=2 ) {
+ for (int i = 0; i < prefixMap.size(); i += 2) {
// forcibly set this binding, instead of using declareNsUri.
// this guarantees that namespaces used in DOM will show up
// as-is in the marshalled output (instead of reassigned to something else,
// which may happen if you'd use declareNsUri.)
serializer.getNamespaceContext().force(
- prefixMap.get(i+1), prefixMap.get(i) );
+ prefixMap.get(i + 1), prefixMap.get(i));
}
// make sure namespaces needed by attributes are bound
for( int i=0; i<len; i++ ) {
@@ -108,7 +107,7 @@
String prefix = getPrefix(qname);
serializer.getNamespaceContext().declareNamespace(
- atts.getURI(i), prefix, true );
+ atts.getURI(i), prefix, true );
}
serializer.endNamespaceDecls(null);
@@ -128,9 +127,10 @@
}
}
+ // make sure namespaces needed by attributes are bound
private String getPrefix(String qname) {
int idx = qname.indexOf(':');
- String prefix = (idx==-1)?qname:qname.substring(0,idx);
+ String prefix = (idx == -1) ? "" : qname.substring(0, idx);
return prefix;
}
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ElementBeanInfoImpl.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ElementBeanInfoImpl.java Mon Jan 05 11:56:55 2015 -0800
@@ -208,8 +208,8 @@
@Override
public final void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
- state.loader = core;
- state.intercepter = this;
+ state.setLoader(core);
+ state.setIntercepter(this);
// TODO: make sure there aren't too many duplicate of this code
// create the object to unmarshal
@@ -231,21 +231,21 @@
fireBeforeUnmarshal(ElementBeanInfoImpl.this, child, state);
context.recordOuterPeer(child);
- UnmarshallingContext.State p = state.prev;
- p.backup = p.target;
- p.target = child;
+ UnmarshallingContext.State p = state.getPrev();
+ p.setBackup(p.getTarget());
+ p.setTarget(child);
core.startElement(state,ea);
}
public Object intercept(UnmarshallingContext.State state, Object o) throws SAXException {
- JAXBElement e = (JAXBElement)state.target;
- state.target = state.backup;
- state.backup = null;
+ JAXBElement e = (JAXBElement)state.getTarget();
+ state.setTarget(state.getBackup());
+ state.setBackup(null);
- if (state.nil) {
+ if (state.isNil()) {
e.setNil(true);
- state.nil = false;
+ state.setNil(false);
}
if(o!=null)
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/Utils.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/Utils.java Mon Jan 05 11:56:55 2015 -0800
@@ -54,17 +54,20 @@
static { // we statically initializing REFLECTION_NAVIGATOR property
try {
- Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
- //noinspection unchecked
- final Method getInstance = refNav.getDeclaredMethod("getInstance");
+ final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
// requires accessClassInPackage privilege
- AccessController.doPrivileged(
- new PrivilegedAction<Object>() {
+ final Method getInstance = AccessController.doPrivileged(
+ new PrivilegedAction<Method>() {
@Override
- public Object run() {
- getInstance.setAccessible(true);
- return null;
+ public Method run() {
+ try {
+ Method getInstance = refNav.getDeclaredMethod("getInstance");
+ getInstance.setAccessible(true);
+ return getInstance;
+ } catch (NoSuchMethodException e) {
+ throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
+ }
}
}
);
@@ -72,16 +75,10 @@
//noinspection unchecked
REFLECTION_NAVIGATOR = (Navigator<Type, Class, Field, Method>) getInstance.invoke(null);
} catch (ClassNotFoundException e) {
- e.printStackTrace();
throw new IllegalStateException("Can't find ReflectionNavigator class");
} catch (InvocationTargetException e) {
- e.printStackTrace();
throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception");
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
} catch (IllegalAccessException e) {
- e.printStackTrace();
throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible");
} catch (SecurityException e) {
LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e);
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ValueListBeanInfoImpl.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ValueListBeanInfoImpl.java Mon Jan 05 11:56:55 2015 -0800
@@ -90,7 +90,7 @@
idx = p;
}
- state.target = toArray(r);
+ state.setTarget(toArray(r));
}
};
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/ArrayERProperty.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/ArrayERProperty.java Mon Jan 05 11:56:55 2015 -0800
@@ -98,7 +98,7 @@
UnmarshallingContext context = state.getContext();
context.startScope(1);
// inherit the target so that our children can access its target
- state.target = state.prev.target;
+ state.setTarget(state.getPrev().getTarget());
// start it now, so that even if there's no children we can still return empty collection
context.getScope(0).start(acc,lister);
@@ -116,8 +116,8 @@
super.childElement(state,ea);
return;
}
- state.loader = child.loader;
- state.receiver = child.receiver;
+ state.setLoader(child.loader);
+ state.setReceiver(child.receiver);
}
@Override
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty.java Mon Jan 05 11:56:55 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, 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
@@ -147,17 +147,17 @@
public void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
// create or obtain the Map object
try {
- target.set((BeanT)state.prev.target);
+ target.set((BeanT)state.getPrev().getTarget());
map.set(acc.get(target.get()));
if(map.get() == null) {
map.set(ClassFactory.create(mapImplClass));
}
map.get().clear();
- state.target = map.get();
+ state.setTarget(map.get());
} catch (AccessorException e) {
// recover from error by setting a dummy Map that receives and discards the values
handleGenericException(e,true);
- state.target = new HashMap();
+ state.setTarget(new HashMap());
}
}
@@ -175,7 +175,7 @@
@Override
public void childElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
if(ea.matches(entryTag)) {
- state.loader = entryLoader;
+ state.setLoader(entryLoader);
} else {
super.childElement(state,ea);
}
@@ -195,26 +195,26 @@
private final Loader entryLoader = new Loader(false) {
@Override
public void startElement(UnmarshallingContext.State state, TagName ea) {
- state.target = new Object[2]; // this is inefficient
+ state.setTarget(new Object[2]); // this is inefficient
}
@Override
public void leaveElement(UnmarshallingContext.State state, TagName ea) {
- Object[] keyValue = (Object[])state.target;
- Map map = (Map) state.prev.target;
+ Object[] keyValue = (Object[])state.getTarget();
+ Map map = (Map) state.getPrev().getTarget();
map.put(keyValue[0],keyValue[1]);
}
@Override
public void childElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
if(ea.matches(keyTag)) {
- state.loader = keyLoader;
- state.receiver = keyReceiver;
+ state.setLoader(keyLoader);
+ state.setReceiver(keyReceiver);
return;
}
if(ea.matches(valueTag)) {
- state.loader = valueLoader;
- state.receiver = valueReceiver;
+ state.setLoader(valueLoader);
+ state.setReceiver(valueReceiver);
return;
}
super.childElement(state,ea);
@@ -232,7 +232,7 @@
this.index = index;
}
public void receive(UnmarshallingContext.State state, Object o) {
- ((Object[])state.target)[index] = o;
+ ((Object[])state.getTarget())[index] = o;
}
}
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/Utils.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/Utils.java Mon Jan 05 11:56:55 2015 -0800
@@ -54,17 +54,20 @@
static { // we statically initializing REFLECTION_NAVIGATOR property
try {
- Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
- //noinspection unchecked
- final Method getInstance = refNav.getDeclaredMethod("getInstance");
+ final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
// requires accessClassInPackage privilege
- AccessController.doPrivileged(
- new PrivilegedAction<Object>() {
+ final Method getInstance = AccessController.doPrivileged(
+ new PrivilegedAction<Method>() {
@Override
- public Object run() {
- getInstance.setAccessible(true);
- return null;
+ public Method run() {
+ try {
+ Method getInstance = refNav.getDeclaredMethod("getInstance");
+ getInstance.setAccessible(true);
+ return getInstance;
+ } catch (NoSuchMethodException e) {
+ throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
+ }
}
}
);
@@ -72,16 +75,10 @@
//noinspection unchecked
REFLECTION_NAVIGATOR = (Navigator<Type, Class, Field, Method>) getInstance.invoke(null);
} catch (ClassNotFoundException e) {
- e.printStackTrace();
throw new IllegalStateException("Can't find ReflectionNavigator class");
} catch (InvocationTargetException e) {
- e.printStackTrace();
throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception");
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
} catch (IllegalAccessException e) {
- e.printStackTrace();
throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible");
} catch (SecurityException e) {
LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e);
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Accessor.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Accessor.java Mon Jan 05 11:56:55 2015 -0800
@@ -152,7 +152,7 @@
public void receive(UnmarshallingContext.State state, Object o) throws SAXException {
try {
- set((BeanT) state.target, (ValueT) o);
+ set((BeanT) state.getTarget(), (ValueT) o);
} catch (AccessorException e) {
Loader.handleGenericException(e, true);
} catch (IllegalAccessError iae) {
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Utils.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Utils.java Mon Jan 05 11:56:55 2015 -0800
@@ -54,17 +54,20 @@
static { // we statically initializing REFLECTION_NAVIGATOR property
try {
- Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
- //noinspection unchecked
- final Method getInstance = refNav.getDeclaredMethod("getInstance");
+ final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
// requires accessClassInPackage privilege
- AccessController.doPrivileged(
- new PrivilegedAction<Object>() {
+ final Method getInstance = AccessController.doPrivileged(
+ new PrivilegedAction<Method>() {
@Override
- public Object run() {
- getInstance.setAccessible(true);
- return null;
+ public Method run() {
+ try {
+ Method getInstance = refNav.getDeclaredMethod("getInstance");
+ getInstance.setAccessible(true);
+ return getInstance;
+ } catch (NoSuchMethodException e) {
+ throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
+ }
}
}
);
@@ -72,16 +75,10 @@
//noinspection unchecked
REFLECTION_NAVIGATOR = (Navigator<Type, Class, Field, Method>) getInstance.invoke(null);
} catch (ClassNotFoundException e) {
- e.printStackTrace();
throw new IllegalStateException("Can't find ReflectionNavigator class");
} catch (InvocationTargetException e) {
- e.printStackTrace();
throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception");
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
} catch (IllegalAccessException e) {
- e.printStackTrace();
throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible");
} catch (SecurityException e) {
LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e);
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/DefaultValueLoaderDecorator.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/DefaultValueLoaderDecorator.java Mon Jan 05 11:56:55 2015 -0800
@@ -44,10 +44,10 @@
@Override
public void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
// install the default value, but don't override the one given by the parent loader
- if(state.elementDefaultValue==null)
- state.elementDefaultValue = defaultValue;
+ if(state.getElementDefaultValue() == null)
+ state.setElementDefaultValue(defaultValue);
- state.loader = l;
+ state.setLoader(l);
l.startElement(state,ea);
}
}
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Discarder.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Discarder.java Mon Jan 05 11:56:55 2015 -0800
@@ -44,8 +44,8 @@
@Override
public void childElement(UnmarshallingContext.State state, TagName ea) {
- state.target = null;
+ state.setTarget(null);
// registering this allows the discarder to process the whole subtree.
- state.loader = this;
+ state.setLoader(this);
}
}
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/DomLoader.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/DomLoader.java Mon Jan 05 11:56:55 2015 -0800
@@ -98,10 +98,10 @@
@Override
public void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
UnmarshallingContext context = state.getContext();
- if (state.target == null)
- state.target = new State(context);
+ if (state.getTarget() == null)
+ state.setTarget(new State(context));
- State s = (State) state.target;
+ State s = (State) state.getTarget();
try {
s.declarePrefixes(context, context.getNewlyDeclaredPrefixes());
s.handler.startElement(ea.uri, ea.local, ea.getQname(), ea.atts);
@@ -113,10 +113,10 @@
@Override
public void childElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
- state.loader = this;
- State s = (State) state.prev.target;
+ state.setLoader(this);
+ State s = (State) state.getPrev().getTarget();
s.depth++;
- state.target = s;
+ state.setTarget(s);
}
@Override
@@ -124,7 +124,7 @@
if(text.length()==0)
return; // there's no point in creating an empty Text node in DOM.
try {
- State s = (State) state.target;
+ State s = (State) state.getTarget();
s.handler.characters(text.toString().toCharArray(),0,text.length());
} catch( SAXException e ) {
state.getContext().handleError(e);
@@ -134,7 +134,7 @@
@Override
public void leaveElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
- State s = (State) state.target;
+ State s = (State) state.getTarget();
UnmarshallingContext context = state.getContext();
try {
@@ -156,7 +156,7 @@
}
// we are done
- state.target = s.getElement();
+ state.setTarget(s.getElement());
}
}
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/LeafPropertyLoader.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/LeafPropertyLoader.java Mon Jan 05 11:56:55 2015 -0800
@@ -47,7 +47,7 @@
public void text(UnmarshallingContext.State state, CharSequence text) throws SAXException {
try {
- xacc.parse(state.prev.target,text);
+ xacc.parse(state.getPrev().getTarget(), text);
} catch (AccessorException e) {
handleGenericException(e,true);
} catch (RuntimeException e) {
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/LeafPropertyXsiLoader.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/LeafPropertyXsiLoader.java Mon Jan 05 11:56:55 2015 -0800
@@ -55,9 +55,9 @@
@Override
public void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
- state.loader = selectLoader(state, ea);
-
- state.loader.startElement(state, ea);
+ final Loader loader = selectLoader(state, ea);
+ state.setLoader(loader);
+ loader.startElement(state, ea);
}
protected Loader selectLoader(UnmarshallingContext.State state, TagName ea) throws SAXException {
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Loader.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Loader.java Mon Jan 05 11:56:55 2015 -0800
@@ -88,8 +88,8 @@
public void childElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
// notify the error, then recover by ignoring the whole element.
reportUnexpectedChildElement(ea, true);
- state.loader = Discarder.INSTANCE;
- state.receiver = null;
+ state.setLoader(Discarder.INSTANCE);
+ state.setReceiver(null);
}
@SuppressWarnings({"StringEquality"})
@@ -191,10 +191,10 @@
UnmarshallingContext context = state.getContext();
Unmarshaller.Listener listener = context.parent.getListener();
if(beanInfo.hasBeforeUnmarshalMethod()) {
- beanInfo.invokeBeforeUnmarshalMethod(context.parent, child, state.prev.target);
+ beanInfo.invokeBeforeUnmarshalMethod(context.parent, child, state.getPrev().getTarget());
}
if(listener!=null) {
- listener.beforeUnmarshal(child, state.prev.target);
+ listener.beforeUnmarshal(child, state.getPrev().getTarget());
}
}
}
@@ -211,10 +211,10 @@
UnmarshallingContext context = state.getContext();
Unmarshaller.Listener listener = context.parent.getListener();
if(beanInfo.hasAfterUnmarshalMethod()) {
- beanInfo.invokeAfterUnmarshalMethod(context.parent, child, state.target);
+ beanInfo.invokeAfterUnmarshalMethod(context.parent, child, state.getTarget());
}
if(listener!=null)
- listener.afterUnmarshal(child, state.target);
+ listener.afterUnmarshal(child, state.getTarget());
}
}
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/ProxyLoader.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/ProxyLoader.java Mon Jan 05 11:56:55 2015 -0800
@@ -41,7 +41,7 @@
@Override
public final void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
Loader loader = selectLoader(state,ea);
- state.loader = loader;
+ state.setLoader(loader);
loader.startElement(state,ea);
}
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/SAXConnector.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/SAXConnector.java Mon Jan 05 11:56:55 2015 -0800
@@ -116,17 +116,7 @@
if( qname==null || qname.length()==0 )
qname=local;
-
- boolean ignorable = true;
- StructureLoader sl;
-
- // not null only if element content is processed (StructureLoader is used)
- // ugly
- if((sl = this.context.getStructureLoader()) != null) {
- ignorable = ((ClassBeanInfoImpl)sl.getBeanInfo()).hasElementOnlyContentModel();
- }
-
- processText(ignorable);
+ processText(!context.getCurrentState().isMixed());
tagName.uri = uri;
tagName.local = local;
@@ -162,7 +152,7 @@
}
private void processText( boolean ignorable ) throws SAXException {
- if( predictor.expectText() && (!ignorable || !WhiteSpaceProcessor.isWhiteSpace(buffer)))
+ if (predictor.expectText() && (!ignorable || !WhiteSpaceProcessor.isWhiteSpace(buffer)))
next.text(buffer);
buffer.setLength(0);
}
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Scope.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Scope.java Mon Jan 05 11:56:55 2015 -0800
@@ -97,7 +97,7 @@
public void add( Accessor<BeanT,PropT> acc, Lister<BeanT,PropT,ItemT,PackT> lister, ItemT value) throws SAXException{
try {
if(!hasStarted()) {
- this.bean = (BeanT)context.getCurrentState().target;
+ this.bean = (BeanT)context.getCurrentState().getTarget();
this.acc = acc;
this.lister = lister;
this.pack = lister.startPacking(bean,acc);
@@ -121,7 +121,7 @@
public void start( Accessor<BeanT,PropT> acc, Lister<BeanT,PropT,ItemT,PackT> lister) throws SAXException{
try {
if(!hasStarted()) {
- this.bean = (BeanT)context.getCurrentState().target;
+ this.bean = (BeanT)context.getCurrentState().getTarget();
this.acc = acc;
this.lister = lister;
this.pack = lister.startPacking(bean,acc);
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/StAXStreamConnector.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/StAXStreamConnector.java Mon Jan 05 11:56:55 2015 -0800
@@ -70,7 +70,7 @@
// Quick hack until SJSXP fixes 6270116
boolean isZephyr = readerClass.getName().equals("com.sun.xml.internal.stream.XMLReaderImpl");
if (getBoolProp(reader,"org.codehaus.stax2.internNames") &&
- getBoolProp(reader,"org.codehaus.stax2.internNsUris"))
+ getBoolProp(reader,"org.codehaus.stax2.internNsUris"))
; // no need for interning
else
if (isZephyr)
@@ -219,8 +219,8 @@
int nsCount = staxStreamReader.getNamespaceCount();
for (int i = 0; i < nsCount; i++) {
visitor.startPrefixMapping(
- fixNull(staxStreamReader.getNamespacePrefix(i)),
- fixNull(staxStreamReader.getNamespaceURI(i)));
+ fixNull(staxStreamReader.getNamespacePrefix(i)),
+ fixNull(staxStreamReader.getNamespaceURI(i)));
}
// fire startElement
@@ -310,13 +310,13 @@
protected void handleCharacters() throws XMLStreamException, SAXException {
if( predictor.expectText() )
buffer.append(
- staxStreamReader.getTextCharacters(),
- staxStreamReader.getTextStart(),
- staxStreamReader.getTextLength() );
+ staxStreamReader.getTextCharacters(),
+ staxStreamReader.getTextStart(),
+ staxStreamReader.getTextLength() );
}
private void processText( boolean ignorable ) throws SAXException {
- if( predictor.expectText() && (!ignorable || !WhiteSpaceProcessor.isWhiteSpace(buffer))) {
+ if( predictor.expectText() && (!ignorable || !WhiteSpaceProcessor.isWhiteSpace(buffer) || context.getCurrentState().isMixed())) {
if(textReported) {
textReported = false;
} else {
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/StructureLoader.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/StructureLoader.java Mon Jan 05 11:56:55 2015 -0800
@@ -171,7 +171,7 @@
context.recordInnerPeer(child);
- state.target = child;
+ state.setTarget(child);
fireBeforeUnmarshal(beanInfo, child, state);
@@ -196,7 +196,7 @@
String qname = atts.getQName(i);
if(atts.getURI(i).equals(WellKnownNamespace.XML_SCHEMA_INSTANCE))
continue; // xsi:* attributes are meant to be processed by us, not by user apps.
- Object o = state.target;
+ Object o = state.getTarget();
Map<QName,String> map = attCatchAll.get(o);
if(map==null) {
// TODO: use ClassFactory.inferImplClass(sig,knownImplClasses)
@@ -238,8 +238,8 @@
}
}
- state.loader = child.loader;
- state.receiver = child.receiver;
+ state.setLoader(child.loader);
+ state.setReceiver(child.receiver);
}
@Override
@@ -261,7 +261,7 @@
@Override
public void leaveElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
state.getContext().endScope(frameSize);
- fireAfterUnmarshal(beanInfo, state.target, state.prev);
+ fireAfterUnmarshal(beanInfo, state.getTarget(), state.getPrev());
}
private static final QNameMap<TransducedAccessor> EMPTY = new QNameMap<TransducedAccessor>();
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/TextLoader.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/TextLoader.java Mon Jan 05 11:56:55 2015 -0800
@@ -51,7 +51,7 @@
public void text(UnmarshallingContext.State state, CharSequence text) throws SAXException {
try {
- state.target = xducer.parse(text);
+ state.setTarget(xducer.parse(text));
} catch (AccessorException e) {
handleGenericException(e,true);
} catch (RuntimeException e) {
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/UnmarshallingContext.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/UnmarshallingContext.java Mon Jan 05 11:56:55 2015 -0800
@@ -183,20 +183,19 @@
/**
* Loader that owns this element.
*/
- public Loader loader;
+ private Loader loader;
/**
* Once {@link #loader} is completed, this receiver
* receives the result.
*/
- public Receiver receiver;
+ private Receiver receiver;
- public Intercepter intercepter;
-
+ private Intercepter intercepter;
/**
* Object being unmarshalled by this {@link #loader}.
*/
- public Object target;
+ private Object target;
/**
* Hack for making JAXBElement unmarshalling work.
@@ -225,7 +224,7 @@
* @see ElementBeanInfoImpl.IntercepterLoader#startElement(State, TagName)
* @see ElementBeanInfoImpl.IntercepterLoader#intercept(State, Object)
*/
- public Object backup;
+ private Object backup;
/**
* Number of {@link UnmarshallingContext#nsBind}s declared thus far.
@@ -241,17 +240,22 @@
* or by a child {@link Loader} when
* {@link Loader#startElement(State, TagName)} is called.
*/
- public String elementDefaultValue;
+ private String elementDefaultValue;
/**
* {@link State} for the parent element
*
* {@link State} objects form a doubly linked list.
*/
- public State prev;
+ private State prev;
private State next;
- public boolean nil = false;
+ private boolean nil = false;
+
+ /**
+ * specifies that we are working with mixed content
+ */
+ private boolean mixed = false;
/**
* Gets the context.
@@ -262,13 +266,17 @@
private State(State prev) {
this.prev = prev;
- if(prev!=null)
+ if(prev!=null) {
prev.next = this;
+ if (prev.mixed) // parent is in mixed mode
+ this.mixed = true;
+ }
}
private void push() {
- if(next==null)
- allocateMoreStates();
+ if(next==null) {
+ next = new State(this);
+ }
State n = next;
n.numNsDecl = nsLen;
current = n;
@@ -278,11 +286,71 @@
assert prev!=null;
loader = null;
nil = false;
+ mixed = false;
receiver = null;
intercepter = null;
elementDefaultValue = null;
target = null;
current = prev;
+ next = null;
+ }
+
+ public boolean isMixed() {
+ return mixed;
+ }
+
+ public Object getTarget() {
+ return target;
+ }
+
+ public void setLoader(Loader loader) {
+ if (loader instanceof StructureLoader) // set mixed mode
+ mixed = !((StructureLoader)loader).getBeanInfo().hasElementOnlyContentModel();
+ this.loader = loader;
+ }
+
+ public void setReceiver(Receiver receiver) {
+ this.receiver = receiver;
+ }
+
+ public State getPrev() {
+ return prev;
+ }
+
+ public void setIntercepter(Intercepter intercepter) {
+ this.intercepter = intercepter;
+ }
+
+ public void setBackup(Object backup) {
+ this.backup = backup;
+ }
+
+ public void setTarget(Object target) {
+ this.target = target;
+ }
+
+ public Object getBackup() {
+ return backup;
+ }
+
+ public boolean isNil() {
+ return nil;
+ }
+
+ public void setNil(boolean nil) {
+ this.nil = nil;
+ }
+
+ public Loader getLoader() {
+ return loader;
+ }
+
+ public String getElementDefaultValue() {
+ return elementDefaultValue;
+ }
+
+ public void setElementDefaultValue(String elementDefaultValue) {
+ this.elementDefaultValue = elementDefaultValue;
}
}
@@ -322,7 +390,6 @@
this.parent = _parent;
this.assoc = assoc;
this.root = this.current = new State(null);
- allocateMoreStates();
}
public void reset(InfosetScanner scanner,boolean isInplaceMode, JaxBeanInfo expectedType, IDResolver idResolver) {
@@ -369,22 +436,6 @@
return null;
}
- /**
- * Allocates a few more {@link State}s.
- *
- * Allocating multiple {@link State}s at once allows those objects
- * to be allocated near each other, which reduces the working set
- * of CPU. It improves the chance the relevant data is in the cache.
- */
- private void allocateMoreStates() {
- // this method should be used only when we run out of a state.
- assert current.next==null;
-
- State s = current;
- for( int i=0; i<8; i++ )
- s = new State(s);
- }
-
public void clearStates() {
State last = current;
while (last.next != null) last = last.next;
@@ -487,16 +538,15 @@
}
public void text(CharSequence pcdata) throws SAXException {
- State cur = current;
pushCoordinator();
try {
- if(cur.elementDefaultValue!=null) {
- if(pcdata.length()==0) {
+ if (current.elementDefaultValue != null) {
+ if (pcdata.length() == 0) {
// send the default value into the unmarshaller instead
- pcdata = cur.elementDefaultValue;
+ pcdata = current.elementDefaultValue;
}
}
- cur.loader.text(cur,pcdata);
+ current.loader.text(current, pcdata);
} finally {
popCoordinator();
}
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/ValuePropertyLoader.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/ValuePropertyLoader.java Mon Jan 05 11:56:55 2015 -0800
@@ -49,18 +49,17 @@
public void text(UnmarshallingContext.State state, CharSequence text) throws SAXException {
try {
- xacc.parse(state.target,text);
+ xacc.parse(state.getTarget(),text);
} catch (AccessorException e) {
handleGenericException(e,true);
} catch (RuntimeException e) {
- if(state.prev != null) {
- if(state.prev.target instanceof JAXBElement) {
- ; // do nothing - issue 601 - don't report exceptions like
- // NumberFormatException when unmarshalling "nillable" element
- // (I suppose JAXBElement indicates this
- } else {
+ if(state.getPrev() != null) {
+ if (!(state.getPrev().getTarget() instanceof JAXBElement))
handleParseConversionException(state,e);
- }
+ // else
+ // do nothing - issue 601 - don't report exceptions like
+ // NumberFormatException when unmarshalling "nillable" element
+ // (I suppose JAXBElement indicates this
} else {
handleParseConversionException(state,e);
}
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiNilLoader.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiNilLoader.java Mon Jan 05 11:56:55 2015 -0800
@@ -62,7 +62,7 @@
onNil(state);
boolean hasOtherAttributes = (ea.atts.getLength() - 1) > 0;
// see issues 6759703 and 565 - need to preserve attributes even if the element is nil; only when the type is stored in JAXBElement
- if (!(hasOtherAttributes && (state.prev.target instanceof JAXBElement))) {
+ if (!(hasOtherAttributes && (state.getPrev().getTarget() instanceof JAXBElement))) {
return Discarder.INSTANCE;
}
}
@@ -96,8 +96,8 @@
@Override
protected void onNil(UnmarshallingContext.State state) throws SAXException {
try {
- acc.set(state.prev.target,null);
- state.prev.nil = true;
+ acc.set(state.getPrev().getTarget(),null);
+ state.getPrev().setNil(true);
} catch (AccessorException e) {
handleGenericException(e,true);
}
@@ -113,7 +113,7 @@
@Override
protected void onNil(UnmarshallingContext.State state) {
// let the receiver add this to the lister
- state.target = null;
+ state.setTarget(null);
}
}
}
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiTypeLoader.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiTypeLoader.java Mon Jan 05 11:56:55 2015 -0800
@@ -61,7 +61,7 @@
beanInfo = defaultBeanInfo;
Loader loader = beanInfo.getLoader(null,false);
- state.loader = loader;
+ state.setLoader(loader);
loader.startElement(state,ea);
}
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/AttachmentPartImpl.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/AttachmentPartImpl.java Mon Jan 05 11:56:55 2015 -0800
@@ -571,7 +571,8 @@
mailMap.addMailcap("text/xml;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.XmlDataContentHandler");
mailMap.addMailcap("application/xml;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.XmlDataContentHandler");
mailMap.addMailcap("application/fastinfoset;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.FastInfosetDataContentHandler");
- mailMap.addMailcap("multipart/*;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.MultipartDataContentHandler");
+ // this handler seems to be not used according VCS history ...
+ // mailMap.addMailcap("multipart/*;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.MultipartDataContentHandler");
mailMap.addMailcap("image/*;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.ImageDataContentHandler");
mailMap.addMailcap("text/plain;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.StringDataContentHandler");
}
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/model/Utils.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/model/Utils.java Mon Jan 05 11:56:55 2015 -0800
@@ -54,17 +54,20 @@
static { // we statically initializing REFLECTION_NAVIGATOR property
try {
- Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
- //noinspection unchecked
- final Method getInstance = refNav.getDeclaredMethod("getInstance");
+ final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
// requires accessClassInPackage privilege
- AccessController.doPrivileged(
- new PrivilegedAction<Object>() {
+ final Method getInstance = AccessController.doPrivileged(
+ new PrivilegedAction<Method>() {
@Override
- public Object run() {
- getInstance.setAccessible(true);
- return null;
+ public Method run() {
+ try {
+ Method getInstance = refNav.getDeclaredMethod("getInstance");
+ getInstance.setAccessible(true);
+ return getInstance;
+ } catch (NoSuchMethodException e) {
+ throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
+ }
}
}
);
@@ -72,16 +75,10 @@
//noinspection unchecked
REFLECTION_NAVIGATOR = (Navigator<Type, Class, Field, Method>) getInstance.invoke(null);
} catch (ClassNotFoundException e) {
- e.printStackTrace();
throw new IllegalStateException("Can't find ReflectionNavigator class");
} catch (InvocationTargetException e) {
- e.printStackTrace();
throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception");
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
} catch (IllegalAccessException e) {
- e.printStackTrace();
throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible");
} catch (SecurityException e) {
LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e);
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/spi/ProviderImpl.java Mon Sep 08 12:16:05 2014 -0700
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/spi/ProviderImpl.java Mon Jan 05 11:56:55 2015 -0800
@@ -139,19 +139,12 @@
}
public EndpointReference readEndpointReference(final Source eprInfoset) {
- // EPR constructors are private, so we need privilege escalation.
- // this unmarshalling can only access instances of a fixed, known set of classes,
- // so doing that shouldn't introduce security vulnerability.
- return AccessController.doPrivileged(new PrivilegedAction<EndpointReference>() {
- public EndpointReference run() {
- try {
- Unmarshaller unmarshaller = eprjc.get().createUnmarshaller();
- return (EndpointReference) unmarshaller.unmarshal(eprInfoset);
- } catch (JAXBException e) {
- throw new WebServiceException("Error creating Marshaller or marshalling.", e);
- }
- }
- });
+ try {
+ Unmarshaller unmarshaller = eprjc.get().createUnmarshaller();
+ return (EndpointReference) unmarshaller.unmarshal(eprInfoset);
+ } catch (JAXBException e) {
+ throw new WebServiceException("Error creating Marshaller or marshalling.", e);
+ }
}
public <T> T getPort(EndpointReference endpointReference, Class<T> clazz, WebServiceFeature... webServiceFeatures) {
--- ./jdk/.hgtags Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/.hgtags Mon Jan 05 11:57:27 2015 -0800
@@ -456,11 +456,19 @@
7f7430459adfe7b7fb65da8c3fac2ac5e3495ea1 jdk7u65-b18
ba6cef21c369076be97dd8133fd4a158cd486bd8 jdk7u65-b19
c3a56021fc22f886106f123d4f25b385ac6b79d7 jdk7u65-b32
+efc8886310cbccb941f826acfad2ad51a2891be5 jdk7u80-b00
+bc7f9d966c1df3748ef9c148eab25976cd065963 jdk7u80-b01
+2590a9c18fdba19086712bb91a28352e9239a2be jdk7u80-b02
8b9d926bd35adceb99f244b7b068fedb0f220f03 jdk7u65-b20
5cf343beab2ce73d299d4f1a8f3b95892f9fd818 jdk7u67-b01
ba6cef21c369076be97dd8133fd4a158cd486bd8 jdk7u65-b40
7b47a34063e94e1ab5636b11231d33fae92754c9 jdk7u65-b31
4cb63f8ca9ee8c60d6f3d0051b69acc8392bd8de jdk7u65-b33
+5cf343beab2ce73d299d4f1a8f3b95892f9fd818 jdk7u67-b01
+388d34a2e45c2660e7ede2a9d80949b14b5d8df9 jdk7u67-b31
+de2b809bb95904bfd5c2ad47cf0f41c97abd5750 jdk7u67-b32
+193d852a6dce1aaf47f1e6960e1c83936bd0e0a4 jdk7u67-b33
+d425e2aa1a6bcdf909c9ac7f690f3e87dcf6e3f6 jdk7u67-b34
9ccfe70cee626ac7831cfa7b7a7eb7a88fe1cd42 jdk7u66-b00
fc87b55d62fc1e81aaf61ff21175129b8ccc302e jdk7u66-b01
c67e394e49429565540f04c5c2a5544f750658bb jdk7u66-b09
@@ -486,3 +494,55 @@
1108ab8e3dce0318529b4bcda46ce895659bb09b jdk7u71-b11
ae4e88c495851c43862e2fc3d1ff7b64c68f368c jdk7u71-b12
a6cbc82d62f915cdcd6037c8b40a4590585553c7 jdk7u71-b13
+78a7e3c7165d4c281d4f90bb2304e95ca2c96969 jdk7u71-b14
+c76a5b2876b98194ccbeffeab76a0326bf163ba2 jdk7u72-b01
+b02c1a8b10cd7338eb808ebfaa5a74b4997fdc8f jdk7u72-b02
+bc98cecdab4cd4a97316a5407c91bdedc92d4bb5 jdk7u72-b03
+b227c93ab2c91ce4b412d1cfb4f7649bff30677b jdk7u72-b04
+dd7983c1586dd9e6e6d53bfa05d7e164329979b0 jdk7u72-b05
+b57a21af9f6d3cd9498099c329063a671b39e3c4 jdk7u72-b06
+9d53e2319954cc1479e190e26b110168c7073b0a jdk7u72-b07
+584b227e8efe21dd47a616afdb4f1f2a2fd630cf jdk7u72-b08
+2ee54b1c7203b9973e0b2ab06cf73e98886ee099 jdk7u72-b09
+d3257f2beb42163afe64adea65b53a18d039eb0d jdk7u72-b10
+4946dc66a0c77133a0a6e3198bd9bd1ec5ef0344 jdk7u72-b11
+e556571078d5c8d24b527ed809d12f37f6e3745b jdk7u72-b12
+13ed37084621a8af551ec46650c07ea96f1a22ba jdk7u72-b13
+f4cf053f2ed3df23b756dd182061876ac9774bc5 jdk7u72-b14
+6ef59d24666e8af5428706fc32295a5d088a48c9 jdk7u72-b30
+550c9196d41b566e01f2d164a1b5e0aba9871f5e jdk7u72-b31
+87f9570ca734714f981d4a47477dcc6c80a7d324 jdk7u75-b00
+0fefa48e670a31015be985ba74e35841d0cc66c1 jdk7u75-b01
+e885a036cc5dc0f8fa07dc0a5f55647f819f3fc5 jdk7u75-b02
+4b81833e1c004460c78208c2529775a05f3abf80 jdk7u75-b03
+1964c973dcc1ddb30115b7c7b6183548b3adcdf5 jdk7u75-b04
+ec3e1e179298a41bc6b77a170e2da66efb0bae3b jdk7u75-b05
+e9596c6470c944ff19c5198cfeb7fd979aad9120 jdk7u75-b06
+e0afb6ec0633d18f360f074c5672fa4c2196ea39 jdk7u75-b07
+8268d82995af433655d3db9a51b549032c19537d jdk7u75-b08
+0a1fe04693dd9f65176c35dc0631652086795f01 jdk7u75-b09
+c43642c55cd483f1d270e9ce55b9721fc32f900c jdk7u75-b10
+7bac76091c46f667f69aa9e426c29cc8e3a2d861 jdk7u75-b11
+1a37584734ff241c0c4c4382f7870efedef7e706 jdk7u75-b12
+16043c4cefc3cc5d859d97434abbdf79a7a58e49 jdk7u75-b13
+3778e2621fc972f88ac8a247543ad63527e7d9cd jdk7u75-b30
+cc9469a8208838cc4adec61acf0429c17622e75b jdk7u75-b31
+0666a58a7e584380c1b1dadb50ec67400110a9ab jdk7u76-b00
+182b3e8a732d6b0d21bd7d602361e5276f14b886 jdk7u76-b01
+3c743031578a431ccc1e27691b1958355d02caec jdk7u76-b02
+5e3a73518863851da31129b815a142ad34a3d376 jdk7u76-b03
+50322d45a16bd3f50a050f858495a586395e6095 jdk7u76-b04
+e41867e626749cf34019f9e45493cf049acbcec4 jdk7u76-b05
+7ca26abf06dd8e11c6d7f6ad724b8d5abc3c709d jdk7u76-b06
+84163d4b66f0acc5301223cd25b4093780950640 jdk7u76-b07
+81f8878be887f80e2bcd4c7f43f1da2de8d22273 jdk7u76-b08
+81f8878be887f80e2bcd4c7f43f1da2de8d22273 jdk7u76-b08
+0000000000000000000000000000000000000000 jdk7u76-b08
+0000000000000000000000000000000000000000 jdk7u76-b08
+9c008aa88919f1ab6d4337b66546f594443680b2 jdk7u76-b08
+70371a63e6c9ff4a73a2bbb09315c4138cf25792 jdk7u76-b09
+c67a0b63cc6971ced2e233b63ebbdec063ad81d2 jdk7u76-b10
+e0e3c03502518c460d51d8c517b081cbd712a9c1 jdk7u76-b11
+9af83882ca9e628f9e35634b930081271a91d561 jdk7u76-b12
+1af0023da23e23482947b715fbf3bdfdee0d2813 jdk7u76-b13
+c5567031a820910ded5f20f2d7fa21c433d744ca jdk7u76-b30
--- ./jdk/make/bridge/Jabswitch/Makefile Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/bridge/Jabswitch/Makefile Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 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
@@ -44,7 +44,10 @@
JAB_MANIFEST_INP = $(CLOSED_PLATFORM_SRC)/native/sun/bridge/jabswitch.manifest
JAB_MANIFEST_OUT = $(TEMPDIR)/jabswitch.exe.intermediate.manifest
-RC_FLAGS += /fo "$(VERSIONRES)"
+RC_FLAGS += /fo "$(VERSIONRES)" \
+ /D "JDK_FNAME=$(PROGRAM)$(EXE_SUFFIX)" \
+ /D "JDK_INTERNAL_NAME=$(PROGRAM)" \
+ /D "JDK_FTYPE=0x1L"
OTHER_CPPFLAGS += /MD /Fo"$(TEMPDIR)/" /Fd"$(TEMPDIR)/" /analyze- /Od /Gd /nologo /Gm /D "WIN32" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /RTC1 /W3 /ZI /Zc:wchar_t /EHsc
LDDFLAGS += Advapi32.lib Version.lib User32.lib
--- ./jdk/make/com/apple/osxui/Makefile Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/com/apple/osxui/Makefile Mon Jan 05 11:57:27 2015 -0800
@@ -67,6 +67,7 @@
RESOURCE_BUNDLES_COMPILED_PROPERTIES += \
com/apple/laf/resources/aqua.properties
+LOCALE_SET_DEFINITION = jre
#
# Rules
--- ./jdk/make/com/sun/nio/Makefile Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/com/sun/nio/Makefile Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 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
@@ -29,13 +29,8 @@
BUILDDIR = ../../..
include $(BUILDDIR)/common/Defs.gmk
-
-# MMM: disable for now
-ifneq ($(PLATFORM), macosx)
include $(BUILDDIR)/common/Subdirs.gmk
SUBDIRS = sctp
-endif
-
all build clean clobber::
$(SUBDIRS-loop)
--- ./jdk/make/com/sun/nio/sctp/Exportedfiles.gmk Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/com/sun/nio/sctp/Exportedfiles.gmk Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 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
@@ -28,6 +28,7 @@
#
ifneq ($(PLATFORM), windows)
+ifneq ($(PLATFORM), macosx)
FILES_export = \
sun/nio/ch/SctpAssocChange.java \
sun/nio/ch/SctpChannelImpl.java \
@@ -37,3 +38,4 @@
sun/nio/ch/SctpServerChannelImpl.java \
sun/nio/ch/SctpStdSocketOption.java
endif
+endif
--- ./jdk/make/com/sun/nio/sctp/FILES_c.gmk Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/com/sun/nio/sctp/FILES_c.gmk Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 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
@@ -24,8 +24,10 @@
#
ifneq ($(PLATFORM),windows)
+ifneq ($(PLATFORM),macosx)
FILES_c = \
SctpNet.c \
SctpChannelImpl.c \
SctpServerChannelImpl.c
endif
+endif
--- ./jdk/make/com/sun/nio/sctp/FILES_java.gmk Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/com/sun/nio/sctp/FILES_java.gmk Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 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
@@ -23,7 +23,7 @@
# questions.
#
FILES_java = \
- com/sun/nio/sctp/AbstractNotificationHandler.java \
+ com/sun/nio/sctp/AbstractNotificationHandler.java \
com/sun/nio/sctp/Association.java \
com/sun/nio/sctp/AssociationChangeNotification.java \
com/sun/nio/sctp/HandlerResult.java \
@@ -43,9 +43,13 @@
com/sun/nio/sctp/ShutdownNotification.java \
\
sun/nio/ch/SctpMessageInfoImpl.java \
- sun/nio/ch/SctpStdSocketOption.java
+ sun/nio/ch/SctpStdSocketOption.java \
+ sun/nio/ch/SctpChannelImpl.java \
+ sun/nio/ch/SctpMultiChannelImpl.java \
+ sun/nio/ch/SctpServerChannelImpl.java
ifneq ($(PLATFORM), windows)
+ifneq ($(PLATFORM), macosx)
FILES_java += \
sun/nio/ch/SctpAssocChange.java \
sun/nio/ch/SctpAssociationImpl.java \
@@ -58,9 +62,5 @@
sun/nio/ch/SctpSendFailed.java \
sun/nio/ch/SctpServerChannelImpl.java \
sun/nio/ch/SctpShutdown.java
-else
-FILES_java += \
- sun/nio/ch/SctpChannelImpl.java \
- sun/nio/ch/SctpMultiChannelImpl.java \
- sun/nio/ch/SctpServerChannelImpl.java
endif
+endif
--- ./jdk/make/com/sun/nio/sctp/Makefile Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/com/sun/nio/sctp/Makefile Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 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
@@ -41,7 +41,15 @@
include FILES_java.gmk
include Exportedfiles.gmk
+ifeq ($(PLATFORM), windows)
+include $(BUILDDIR)/common/Classes.gmk
+endif
+ifeq ($(PLATFORM), macosx)
+include $(BUILDDIR)/common/Classes.gmk
+endif
+
ifneq ($(PLATFORM), windows)
+ifneq ($(PLATFORM), macosx)
include $(BUILDDIR)/common/Mapfile-vers.gmk
include $(BUILDDIR)/common/Library.gmk
@@ -67,12 +75,9 @@
ifeq ($(PLATFORM), solaris)
#LIBSCTP = -lsctp
OTHER_LDLIBS += $(LIBSOCKET) -L$(LIBDIR)/$(LIBARCH) -lnet -lnio
-endif # PLATFORM
-
-else # windows
-include $(BUILDDIR)/common/Classes.gmk
-endif # ifneq windows
-
+endif
+endif # macosx
+endif # windows
clean clobber::
$(RM) -r $(CLASSDESTDIR)/com/sun/nio/sctp
--- ./jdk/make/common/Defs-linux.gmk Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/common/Defs-linux.gmk Mon Jan 05 11:57:27 2015 -0800
@@ -191,9 +191,9 @@
CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
CFLAGS_REQUIRED_ia64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
-CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9
+CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9 -D_BIG_ENDIAN
LDFLAGS_COMMON_sparcv9 += -m64 -mcpu=v9
-CFLAGS_REQUIRED_sparc += -m32 -mcpu=v9
+CFLAGS_REQUIRED_sparc += -m32 -mcpu=v9 -D_BIG_ENDIAN
LDFLAGS_COMMON_sparc += -m32 -mcpu=v9
CFLAGS_REQUIRED_arm += -fsigned-char -D_LITTLE_ENDIAN
CFLAGS_REQUIRED_ppc += -fsigned-char -D_BIG_ENDIAN
--- ./jdk/make/common/internal/Resources.gmk Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/common/internal/Resources.gmk Mon Jan 05 11:57:27 2015 -0800
@@ -225,6 +225,10 @@
$(add-property-java-file)
$(GENSRCDIR)/%_zh_HK.java: $(SHARE_SRC)/classes/%_zh_TW.properties
$(add-property-java-file)
+ifdef PLATFORM_SRC_MACOS
+$(GENSRCDIR)/%_zh_HK.java: $(PLATFORM_SRC_MACOS)/classes/%_zh_TW.properties
+ $(add-property-java-file)
+endif
# Simple delivery of zh_HK properties files just copies zh_TW properties files
$(CLASSDESTDIR)/%_zh_HK.properties: \
--- ./jdk/make/java/java/mapfile-vers Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/java/java/mapfile-vers Mon Jan 05 11:57:27 2015 -0800
@@ -275,6 +275,7 @@
Java_sun_misc_VM_latestUserDefinedLoader;
Java_sun_misc_VM_initialize;
Java_sun_misc_VMSupport_initAgentProperties;
+ Java_sun_misc_VMSupport_getVMTemporaryDirectory;
# ZipFile.c needs this one
throwFileNotFoundException;
--- ./jdk/make/sun/javazic/tzdata/VERSION Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/sun/javazic/tzdata/VERSION Mon Jan 05 11:57:27 2015 -0800
@@ -1,24 +1,24 @@
#
# 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.
#
-tzdata2014c
+tzdata2014j
--- ./jdk/make/sun/javazic/tzdata/africa Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/sun/javazic/tzdata/africa Mon Jan 05 11:57:27 2015 -0800
@@ -21,36 +21,35 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future). For more, please see
+# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2013-02-21):
+# From Paul Eggert (2014-10-31):
#
-# A good source for time zone historical data outside the U.S. is
+# Unless otherwise specified, the source for data through 1990 is:
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
# San Diego: ACS Publications, Inc. (2003).
+# Unfortunately this book contains many errors and cites no sources.
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
# Association's Standard Schedules Information Manual (IATA SSIM),
# published semiannually. Law sent in several helpful summaries
-# of the IATA's data after 1990.
-#
-# Except where otherwise noted, Shanks & Pottenger is the source for
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
+# of the IATA's data after 1990. Except where otherwise noted,
+# IATA SSIM is the source for entries after 1990.
#
# Another source occasionally used is Edward W. Whitman, World Time Differences,
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
# I found in the UCLA library.
#
# For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
-# <http://www.jstor.org/stable/1774359>.
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
+# http://www.jstor.org/stable/1774359
#
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
@@ -58,13 +57,13 @@
# Previous editions of this database used WAT, CAT, SAT, and EAT
# for +0:00 through +3:00, respectively,
# but Mark R V Murray reports that
-# `SAST' is the official abbreviation for +2:00 in the country of South Africa,
-# `CAT' is commonly used for +2:00 in countries north of South Africa, and
-# `WAT' is probably the best name for +1:00, as the common phrase for
-# the area that includes Nigeria is ``West Africa''.
-# He has heard of ``Western Sahara Time'' for +0:00 but can find no reference.
+# 'SAST' is the official abbreviation for +2:00 in the country of South Africa,
+# 'CAT' is commonly used for +2:00 in countries north of South Africa, and
+# 'WAT' is probably the best name for +1:00, as the common phrase for
+# the area that includes Nigeria is "West Africa".
+# He has heard of "Western Sahara Time" for +0:00 but can find no reference.
#
-# To make things confusing, `WAT' seems to have been used for -1:00 long ago;
+# To make things confusing, 'WAT' seems to have been used for -1:00 long ago;
# I'd guess that this was because people needed _some_ name for -1:00,
# and at the time, far west Africa was the only major land area in -1:00.
# This usage is now obsolete, as the last use of -1:00 on the African
@@ -77,7 +76,7 @@
# 2:00 SAST South Africa Standard Time
# and Murray suggests the following abbreviation:
# 1:00 WAT West Africa Time
-# I realize that this leads to `WAT' being used for both -1:00 and 1:00
+# I realize that this leads to 'WAT' being used for both -1:00 and 1:00
# for times before 1976, but this is the best I can think of
# until we get more information.
#
@@ -88,7 +87,6 @@
# 3:00 CAST Central Africa Summer Time (no longer used)
# 3:00 SAST South Africa Summer Time (no longer used)
# 3:00 EAT East Africa Time
-# 4:00 EAST East Africa Summer Time (no longer used)
# Algeria
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -117,9 +115,9 @@
# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
# more precise 0:09:21.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01
- 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
- 0:00 Algeria WE%sT 1940 Feb 25 2:00
+Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01
+ 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
+ 0:00 Algeria WE%sT 1940 Feb 25 2:00
1:00 Algeria CE%sT 1946 Oct 7
0:00 - WET 1956 Jan 29
1:00 - CET 1963 Apr 14
@@ -129,92 +127,71 @@
1:00 - CET
# Angola
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Luanda 0:52:56 - LMT 1892
- 0:52:04 - AOT 1911 May 26 # Angola Time
- 1:00 - WAT
-
# Benin
-# Whitman says they switched to 1:00 in 1946, not 1934;
-# go with Shanks & Pottenger.
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Porto-Novo 0:10:28 - LMT 1912
- 0:00 - GMT 1934 Feb 26
- 1:00 - WAT
+# See Africa/Lagos.
# Botswana
-# From Paul Eggert (2013-02-21):
-# Milne says they were regulated by the Cape Town Signal in 1899;
-# assume they switched to 2:00 when Cape Town did.
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Gaborone 1:43:40 - LMT 1885
- 1:30 - SAST 1903 Mar
- 2:00 - CAT 1943 Sep 19 2:00
- 2:00 1:00 CAST 1944 Mar 19 2:00
- 2:00 - CAT
+# See Africa/Maputo.
# Burkina Faso
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Ouagadougou -0:06:04 - LMT 1912
- 0:00 - GMT
+# See Africa/Abidjan.
# Burundi
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Bujumbura 1:57:28 - LMT 1890
- 2:00 - CAT
+# See Africa/Maputo.
# Cameroon
-# Whitman says they switched to 1:00 in 1920; go with Shanks & Pottenger.
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Douala 0:38:48 - LMT 1912
- 1:00 - WAT
+# See Africa/Lagos.
# Cape Verde
+#
+# Shanks gives 1907 for the transition to CVT.
+# Perhaps the 1911-05-26 Portuguese decree
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# merely made it official?
+#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia
+Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia
-2:00 - CVT 1942 Sep
-2:00 1:00 CVST 1945 Oct 15
- -2:00 - CVT 1975 Nov 25 2:00
+ -2:00 - CVT 1975 Nov 25 2:00
-1:00 - CVT
# Central African Republic
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Bangui 1:14:20 - LMT 1912
- 1:00 - WAT
+# See Africa/Lagos.
# Chad
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Ndjamena 1:00:12 - LMT 1912
+Zone Africa/Ndjamena 1:00:12 - LMT 1912 # N'Djamena
1:00 - WAT 1979 Oct 14
1:00 1:00 WAST 1980 Mar 8
1:00 - WAT
# Comoros
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Comoro 2:53:04 - LMT 1911 Jul # Moroni, Gran Comoro
- 3:00 - EAT
+# See Africa/Nairobi.
-# Democratic Republic of Congo
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Kinshasa 1:01:12 - LMT 1897 Nov 9
- 1:00 - WAT
-Zone Africa/Lubumbashi 1:49:52 - LMT 1897 Nov 9
- 2:00 - CAT
+# Democratic Republic of the Congo
+# See Africa/Lagos for the western part and Africa/Maputo for the eastern.
# Republic of the Congo
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Brazzaville 1:01:08 - LMT 1912
- 1:00 - WAT
+# See Africa/Lagos.
-# Cote D'Ivoire
+# Côte d'Ivoire / Ivory Coast
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Abidjan -0:16:08 - LMT 1912
0:00 - GMT
+Link Africa/Abidjan Africa/Bamako # Mali
+Link Africa/Abidjan Africa/Banjul # Gambia
+Link Africa/Abidjan Africa/Conakry # Guinea
+Link Africa/Abidjan Africa/Dakar # Senegal
+Link Africa/Abidjan Africa/Freetown # Sierra Leone
+Link Africa/Abidjan Africa/Lome # Togo
+Link Africa/Abidjan Africa/Nouakchott # Mauritania
+Link Africa/Abidjan Africa/Ouagadougou # Burkina Faso
+Link Africa/Abidjan Africa/Sao_Tome # São Tomé and Príncipe
+Link Africa/Abidjan Atlantic/St_Helena # St Helena
# Djibouti
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Djibouti 2:52:36 - LMT 1911 Jul
- 3:00 - EAT
+# See Africa/Nairobi.
###############################################################################
@@ -254,30 +231,26 @@
# Egyptians would approve the cancellation."
#
# Egypt to cancel daylight saving time
-# <a href="http://www.almasryalyoum.com/en/node/407168">
# http://www.almasryalyoum.com/en/node/407168
-# </a>
# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_egypt04.html">
# http://www.worldtimezone.com/dst_news/dst_news_egypt04.html
-# </a>
Rule Egypt 1995 2010 - Apr lastFri 0:00s 1:00 S
-Rule Egypt 1995 2005 - Sep lastThu 23:00s 0 -
+Rule Egypt 1995 2005 - Sep lastThu 24:00 0 -
# From Steffen Thorsen (2006-09-19):
# The Egyptian Gazette, issue 41,090 (2006-09-18), page 1, reports:
# Egypt will turn back clocks by one hour at the midnight of Thursday
# after observing the daylight saving time since May.
# http://news.gom.com.eg/gazette/pdf/2006/09/18/01.pdf
-Rule Egypt 2006 only - Sep 21 23:00s 0 -
+Rule Egypt 2006 only - Sep 21 24:00 0 -
# From Dirk Losch (2007-08-14):
# I received a mail from an airline which says that the daylight
# saving time in Egypt will end in the night of 2007-09-06 to 2007-09-07.
-# From Jesper Norgaard Welen (2007-08-15): [The following agree:]
+# From Jesper Nørgaard Welen (2007-08-15): [The following agree:]
# http://www.nentjes.info/Bill/bill5.htm
# http://www.timeanddate.com/worldclock/city.html?n=53
# From Steffen Thorsen (2007-09-04): The official information...:
# http://www.sis.gov.eg/En/EgyptOnline/Miscellaneous/000002/0207000000000000001580.htm
-Rule Egypt 2007 only - Sep Thu>=1 23:00s 0 -
+Rule Egypt 2007 only - Sep Thu>=1 24:00 0 -
# From Abdelrahman Hassan (2007-09-06):
# Due to the Hijri (lunar Islamic calendar) year being 11 days shorter
# than the year of the Gregorian calendar, Ramadan shifts earlier each
@@ -311,15 +284,9 @@
#
# timeanddate[2] and another site I've found[3] also support that.
#
-# [1] <a href="https://bugzilla.redhat.com/show_bug.cgi?id=492263">
-# https://bugzilla.redhat.com/show_bug.cgi?id=492263
-# </a>
-# [2] <a href="http://www.timeanddate.com/worldclock/clockchange.html?n=53">
-# http://www.timeanddate.com/worldclock/clockchange.html?n=53
-# </a>
-# [3] <a href="http://wwp.greenwichmeantime.com/time-zone/africa/egypt/">
-# http://wwp.greenwichmeantime.com/time-zone/africa/egypt/
-# </a>
+# [1] https://bugzilla.redhat.com/show_bug.cgi?id=492263
+# [2] http://www.timeanddate.com/worldclock/clockchange.html?n=53
+# [3] http://wwp.greenwichmeantime.com/time-zone/africa/egypt/
# From Arthur David Olson (2009-04-20):
# In 2009 (and for the next several years), Ramadan ends before the fourth
@@ -329,14 +296,10 @@
# From Steffen Thorsen (2009-08-11):
# We have been able to confirm the August change with the Egyptian Cabinet
# Information and Decision Support Center:
-# <a href="http://www.timeanddate.com/news/time/egypt-dst-ends-2009.html">
# http://www.timeanddate.com/news/time/egypt-dst-ends-2009.html
-# </a>
#
# The Middle East News Agency
-# <a href="http://www.mena.org.eg/index.aspx">
# http://www.mena.org.eg/index.aspx
-# </a>
# also reports "Egypt starts winter time on August 21"
# today in article numbered "71, 11/08/2009 12:25 GMT."
# Only the title above is available without a subscription to their service,
@@ -344,67 +307,93 @@
# (at least today).
# From Alexander Krivenyshev (2010-07-20):
-# According to News from Egypt - Al-Masry Al-Youm Egypt's cabinet has
+# According to News from Egypt - Al-Masry Al-Youm Egypt's cabinet has
# decided that Daylight Saving Time will not be used in Egypt during
# Ramadan.
#
# Arabic translation:
-# "Clocks to go back during Ramadan--and then forward again"
-# <a href="http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again">
+# "Clocks to go back during Ramadan - and then forward again"
# http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_egypt02.html">
# http://www.worldtimezone.com/dst_news/dst_news_egypt02.html
-# </a>
# From Ahmad El-Dardiry (2014-05-07):
# Egypt is to change back to Daylight system on May 15
# http://english.ahram.org.eg/NewsContent/1/64/100735/Egypt/Politics-/Egypts-government-to-reapply-daylight-saving-time-.aspx
-# From Gunther Vermier (2015-05-13):
+# From Gunther Vermier (2014-05-13):
# our Egypt office confirms that the change will be at 15 May "midnight" (24:00)
-# From Paul Eggert (2014-05-13):
+# From Imed Chihi (2014-06-04):
+# We have finally "located" a precise official reference about the DST changes
+# in Egypt. The Ministers Cabinet decision is explained at
+# http://www.cabinet.gov.eg/Media/CabinetMeetingsDetails.aspx?id=347 ...
+# [T]his (Arabic) site is not accessible outside Egypt, but the page ...
+# translates into: "With regard to daylight saving time, it is scheduled to
+# take effect at exactly twelve o'clock this evening, Thursday, 15 MAY 2014,
+# to be suspended by twelve o'clock on the evening of Thursday, 26 JUN 2014,
+# and re-established again at the end of the month of Ramadan, at twelve
+# o'clock on the evening of Thursday, 31 JUL 2014." This statement has been
+# reproduced by other (more accessible) sites[, e.g.,]...
+# http://elgornal.net/news/news.aspx?id=4699258
+
+# From Paul Eggert (2014-06-04):
# Sarah El Deeb and Lee Keath of AP report that the Egyptian government says
# the change is because of blackouts in Cairo, even though Ahram Online (cited
-# above) says DST had no affect on electricity consumption. The AP story says
-# DST will not be observed during Ramadan. There is no information about when
-# DST will end. See:
+# above) says DST had no affect on electricity consumption. There is
+# no information about when DST will end this fall. See:
# http://abcnews.go.com/International/wireStory/el-sissi-pushes-egyptians-line-23614833
#
-# For now, guess that later transitions will use 2010's rules, and that
-# Egypt will agree with Morocco (see below) about the date Ramadan starts and
-# ends, though (unlike Morocco) it will switch at 00:00 standard time. In
-# Egypt the spring-forward transitions are removed for 2020-2022, when the
-# guessed spring-forward date falls during the estimated Ramadan, and all
-# transitions removed for 2023-2038, where the estimated Ramadan falls entirely
-# outside the guessed daylight-saving time. Ramadan intrudes on the guessed
-# DST starting in 2039, but that's beyond our somewhat-arbitrary cutoff.
-
-Rule Egypt 2008 only - Aug lastThu 23:00s 0 -
-Rule Egypt 2009 only - Aug 20 23:00s 0 -
-Rule Egypt 2010 only - Aug 11 0:00 0 -
-Rule Egypt 2010 only - Sep 10 0:00 1:00 S
-Rule Egypt 2010 only - Sep lastThu 23:00s 0 -
+# For now, guess that later spring and fall transitions will use
+# 2010's rules, and guess that Egypt will switch to standard time at
+# 24:00 the last Thursday before Ramadan, and back to DST at 00:00 the
+# first Friday after Ramadan. To implement this,
+# transition dates for 2015 through 2037 were determined by running
+# the following program under GNU Emacs 24.3, with the results integrated
+# by hand into the table below. Ramadan again intrudes on the guessed
+# DST starting in 2038, but that's beyond our somewhat-arbitrary cutoff.
+# (let ((islamic-year 1436))
+# (while (< islamic-year 1460)
+# (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
+# (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
+# (friday 5))
+# (while (/= friday (mod a 7))
+# (setq a (1- a)))
+# (while (/= friday (mod b 7))
+# (setq b (1+ b)))
+# (setq a (1- a))
+# (setq b (1- b))
+# (setq a (calendar-gregorian-from-absolute a))
+# (setq b (calendar-gregorian-from-absolute b))
+# (insert
+# (format
+# (concat "Rule\tEgypt\t%d\tonly\t-\t%s\t%2d\t24:00\t0\t-\n"
+# "Rule\tEgypt\t%d\tonly\t-\t%s\t%2d\t24:00\t1:00\tS\n")
+# (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
+# (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
+# (setq islamic-year (+ 1 islamic-year))))
+Rule Egypt 2008 only - Aug lastThu 24:00 0 -
+Rule Egypt 2009 only - Aug 20 24:00 0 -
+Rule Egypt 2010 only - Aug 10 24:00 0 -
+Rule Egypt 2010 only - Sep 9 24:00 1:00 S
+Rule Egypt 2010 only - Sep lastThu 24:00 0 -
Rule Egypt 2014 only - May 15 24:00 1:00 S
-Rule Egypt 2014 only - Jun 29 0:00s 0 -
-Rule Egypt 2014 only - Jul 29 0:00s 1:00 S
-Rule Egypt 2014 max - Sep lastThu 23:00s 0 -
+Rule Egypt 2014 only - Jun 26 24:00 0 -
+Rule Egypt 2014 only - Jul 31 24:00 1:00 S
+Rule Egypt 2014 max - Sep lastThu 24:00 0 -
Rule Egypt 2015 2019 - Apr lastFri 0:00s 1:00 S
-Rule Egypt 2015 only - Jun 18 0:00s 0 -
-Rule Egypt 2015 only - Jul 18 0:00s 1:00 S
-Rule Egypt 2016 only - Jun 7 0:00s 0 -
-Rule Egypt 2016 only - Jul 7 0:00s 1:00 S
-Rule Egypt 2017 only - May 27 0:00s 0 -
-Rule Egypt 2017 only - Jun 26 0:00s 1:00 S
-Rule Egypt 2018 only - May 16 0:00s 0 -
-Rule Egypt 2018 only - Jun 15 0:00s 1:00 S
-Rule Egypt 2019 only - May 6 0:00s 0 -
-Rule Egypt 2019 only - Jun 5 0:00s 1:00 S
-Rule Egypt 2020 only - May 24 0:00s 1:00 S
-Rule Egypt 2021 only - May 13 0:00s 1:00 S
-Rule Egypt 2022 only - May 3 0:00s 1:00 S
+Rule Egypt 2015 only - Jun 11 24:00 0 -
+Rule Egypt 2015 only - Jul 23 24:00 1:00 S
+Rule Egypt 2016 only - Jun 2 24:00 0 -
+Rule Egypt 2016 only - Jul 7 24:00 1:00 S
+Rule Egypt 2017 only - May 25 24:00 0 -
+Rule Egypt 2017 only - Jun 29 24:00 1:00 S
+Rule Egypt 2018 only - May 10 24:00 0 -
+Rule Egypt 2018 only - Jun 14 24:00 1:00 S
+Rule Egypt 2019 only - May 2 24:00 0 -
+Rule Egypt 2019 only - Jun 6 24:00 1:00 S
+Rule Egypt 2020 only - May 28 24:00 1:00 S
+Rule Egypt 2021 only - May 13 24:00 1:00 S
+Rule Egypt 2022 only - May 5 24:00 1:00 S
Rule Egypt 2023 max - Apr lastFri 0:00s 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -412,60 +401,44 @@
2:00 Egypt EE%sT
# Equatorial Guinea
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Malabo 0:35:08 - LMT 1912
- 0:00 - GMT 1963 Dec 15
- 1:00 - WAT
+# See Africa/Lagos.
# Eritrea
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Asmara 2:35:32 - LMT 1870
- 2:35:32 - AMT 1890 # Asmara Mean Time
- 2:35:20 - ADMT 1936 May 5 # Adis Dera MT
- 3:00 - EAT
-
# Ethiopia
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time zones
-# between 1870 and 1890, and that they merged to 38E50 (2:35:20) in 1890.
-# We'll guess that 38E50 is for Adis Dera.
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Addis_Ababa 2:34:48 - LMT 1870
- 2:35:20 - ADMT 1936 May 5 # Adis Dera MT
- 3:00 - EAT
+# See Africa/Nairobi.
# Gabon
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Libreville 0:37:48 - LMT 1912
- 1:00 - WAT
+# See Africa/Lagos.
# Gambia
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Banjul -1:06:36 - LMT 1912
- -1:06:36 - BMT 1935 # Banjul Mean Time
- -1:00 - WAT 1964
- 0:00 - GMT
+# See Africa/Abidjan.
# Ghana
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# Whitman says DST was observed from 1931 to ``the present'';
-# go with Shanks & Pottenger.
-Rule Ghana 1936 1942 - Sep 1 0:00 0:20 GHST
-Rule Ghana 1936 1942 - Dec 31 0:00 0 GMT
+# Whitman says DST was observed from 1931 to "the present";
+# Shanks & Pottenger say 1936 to 1942;
+# and September 1 to January 1 is given by:
+# Scott Keltie J, Epstein M (eds), The Statesman's Year-Book,
+# 57th ed. Macmillan, London (1920), OCLC 609408015, pp xxviii.
+# For lack of better info, assume DST was observed from 1920 to 1942.
+Rule Ghana 1920 1942 - Sep 1 0:00 0:20 GHST
+Rule Ghana 1920 1942 - Dec 31 0:00 0 GMT
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Accra -0:00:52 - LMT 1918
0:00 Ghana %s
# Guinea
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Conakry -0:54:52 - LMT 1912
- 0:00 - GMT 1934 Feb 26
- -1:00 - WAT 1960
- 0:00 - GMT
+# See Africa/Abidjan.
# Guinea-Bissau
+#
+# Shanks gives 1911-05-26 for the transition to WAT,
+# evidently confusing the date of the Portuguese decree
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# with the date that it took effect, namely 1912-01-01.
+#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Bissau -1:02:20 - LMT 1911 May 26
+Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1
-1:00 - WAT 1975
0:00 - GMT
@@ -476,13 +449,18 @@
2:30 - BEAT 1940
2:45 - BEAUT 1960
3:00 - EAT
+Link Africa/Nairobi Africa/Addis_Ababa # Ethiopia
+Link Africa/Nairobi Africa/Asmara # Eritrea
+Link Africa/Nairobi Africa/Dar_es_Salaam # Tanzania
+Link Africa/Nairobi Africa/Djibouti
+Link Africa/Nairobi Africa/Kampala # Uganda
+Link Africa/Nairobi Africa/Mogadishu # Somalia
+Link Africa/Nairobi Indian/Antananarivo # Madagascar
+Link Africa/Nairobi Indian/Comoro
+Link Africa/Nairobi Indian/Mayotte
# Lesotho
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Maseru 1:50:00 - LMT 1903 Mar
- 2:00 - SAST 1943 Sep 19 2:00
- 2:00 1:00 SAST 1944 Mar 19 2:00
- 2:00 - SAST
+# See Africa/Johannesburg.
# Liberia
# From Paul Eggert (2006-03-22):
@@ -549,38 +527,22 @@
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.
+# the IATA SSIM data entries 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
- 1:00 Libya CE%sT 2013 Oct 25 2:00
+ 2:00 - EET 2012 Nov 10 2:00
+ 1:00 Libya CE%sT 2013 Oct 25 2:00
2:00 - EET
# Madagascar
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Antananarivo 3:10:04 - LMT 1911 Jul
- 3:00 - EAT 1954 Feb 27 23:00s
- 3:00 1:00 EAST 1954 May 29 23:00s
- 3:00 - EAT
+# See Africa/Nairobi.
# Malawi
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Blantyre 2:20:00 - LMT 1903 Mar
- 2:00 - CAT
+# See Africa/Maputo.
# Mali
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Bamako -0:32:00 - LMT 1912
- 0:00 - GMT 1934 Feb 26
- -1:00 - WAT 1960 Jun 20
- 0:00 - GMT
-
# Mauritania
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Nouakchott -1:03:48 - LMT 1912
- 0:00 - GMT 1934 Feb 26
- -1:00 - WAT 1960 Nov 28
- 0:00 - GMT
+# See Africa/Abidjan.
# Mauritius
@@ -604,9 +566,7 @@
# From Steffen Thorsen (2008-07-10):
# According to
-# <a href="http://www.lexpress.mu/display_article.php?news_id=111216">
# http://www.lexpress.mu/display_article.php?news_id=111216
-# </a>
# (in French), Mauritius will start and end their DST a few days earlier
# than previously announced (2008-11-01 to 2009-03-31). The new start
# date is 2008-10-26 at 02:00 and the new end date is 2009-03-27 (no time
@@ -621,22 +581,17 @@
# From Alex Krivenyshev (2008-07-11):
# Seems that English language article "The revival of daylight saving
-# time: Energy conservation?"-# No. 16578 (07/11/2008) was originally
+# time: Energy conservation?"-# No. 16578 (07/11/2008) was originally
# published on Monday, June 30, 2008...
#
# I guess that article in French "Le gouvernement avance l'introduction
-# de l'heure d'ete" stating that DST in Mauritius starting on October 26
-# and ending on March 27, 2009 is the most recent one.
-# ...
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html">
+# de l'heure d'été" stating that DST in Mauritius starting on October 26
+# and ending on March 27, 2009 is the most recent one....
# http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html
-# </a>
# From Riad M. Hossen Ally (2008-08-03):
# The Government of Mauritius weblink
-# <a href="http://www.gov.mu/portal/site/pmosite/menuitem.4ca0efdee47462e7440a600248a521ca/?content_id=4728ca68b2a5b110VgnVCM1000000a04a8c0RCRD">
# http://www.gov.mu/portal/site/pmosite/menuitem.4ca0efdee47462e7440a600248a521ca/?content_id=4728ca68b2a5b110VgnVCM1000000a04a8c0RCRD
-# </a>
# Cabinet Decision of July 18th, 2008 states as follows:
#
# 4. ...Cabinet has agreed to the introduction into the National Assembly
@@ -646,33 +601,25 @@
# States of America. It will start at two o'clock in the morning on the
# last Sunday of October and will end at two o'clock in the morning on
# the last Sunday of March the following year. The summer time for the
-# year 2008 - 2009 will, therefore, be effective as from 26 October 2008
+# year 2008-2009 will, therefore, be effective as from 26 October 2008
# and end on 29 March 2009.
# From Ed Maste (2008-10-07):
# THE TIME BILL (No. XXVII of 2008) Explanatory Memorandum states the
# beginning / ending of summer time is 2 o'clock standard time in the
# morning of the last Sunday of October / last Sunday of March.
-# <a href="http://www.gov.mu/portal/goc/assemblysite/file/bill2708.pdf">
# http://www.gov.mu/portal/goc/assemblysite/file/bill2708.pdf
-# </a>
# From Steffen Thorsen (2009-06-05):
# According to several sources, Mauritius will not continue to observe
# DST the coming summer...
#
# Some sources, in French:
-# <a href="http://www.defimedia.info/news/946/Rashid-Beebeejaun-:-%C2%AB-L%E2%80%99heure-d%E2%80%99%C3%A9t%C3%A9-ne-sera-pas-appliqu%C3%A9e-cette-ann%C3%A9e-%C2%BB">
# http://www.defimedia.info/news/946/Rashid-Beebeejaun-:-%C2%AB-L%E2%80%99heure-d%E2%80%99%C3%A9t%C3%A9-ne-sera-pas-appliqu%C3%A9e-cette-ann%C3%A9e-%C2%BB
-# </a>
-# <a href="http://lexpress.mu/Story/3398~Beebeejaun---Les-objectifs-d-%C3%A9conomie-d-%C3%A9nergie-de-l-heure-d-%C3%A9t%C3%A9-ont-%C3%A9t%C3%A9-atteints-">
# http://lexpress.mu/Story/3398~Beebeejaun---Les-objectifs-d-%C3%A9conomie-d-%C3%A9nergie-de-l-heure-d-%C3%A9t%C3%A9-ont-%C3%A9t%C3%A9-atteints-
-# </a>
#
# Our wrap-up:
-# <a href="http://www.timeanddate.com/news/time/mauritius-dst-will-not-repeat.html">
# http://www.timeanddate.com/news/time/mauritius-dst-will-not-repeat.html
-# </a>
# From Arthur David Olson (2009-07-11):
# The "mauritius-dst-will-not-repeat" wrapup includes this:
@@ -685,18 +632,16 @@
Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 S
Rule Mauritius 2009 only - Mar lastSun 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
+Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
4:00 Mauritius MU%sT # Mauritius Time
# Agalega Is, Rodriguez
# no information; probably like Indian/Mauritius
# Mayotte
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou
- 3:00 - EAT
+# See Africa/Nairobi.
# Morocco
-# See the `europe' file for Spanish Morocco (Africa/Ceuta).
+# See the 'europe' file for Spanish Morocco (Africa/Ceuta).
# From Alex Krivenyshev (2008-05-09):
# Here is an article that Morocco plan to introduce Daylight Saving Time between
@@ -704,60 +649,44 @@
#
# "... Morocco is to save energy by adjusting its clock during summer so it will
# be one hour ahead of GMT between 1 June and 27 September, according to
-# Communication Minister and Gov ernment Spokesman, Khalid Naciri...."
+# Communication Minister and Government Spokesman, Khalid Naciri...."
#
-# <a href="http://www.worldtimezone.net/dst_news/dst_news_morocco01.html">
# http://www.worldtimezone.net/dst_news/dst_news_morocco01.html
-# </a>
-# OR
-# <a href="http://en.afrik.com/news11892.html">
# http://en.afrik.com/news11892.html
-# </a>
# From Alex Krivenyshev (2008-05-09):
-# The Morocco time change can be confirmed on Morocco web site Maghreb Arabe Presse:
-# <a href="http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view">
+# The Morocco time change can be confirmed on Morocco web site Maghreb Arabe
+# Presse:
# http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view
-# </a>
#
# Morocco shifts to daylight time on June 1st through September 27, Govt.
# spokesman.
# From Patrice Scattolin (2008-05-09):
# According to this article:
-# <a href="http://www.avmaroc.com/actualite/heure-dete-comment-a127896.html">
# http://www.avmaroc.com/actualite/heure-dete-comment-a127896.html
-# </a>
-# (and republished here:
-# <a href="http://www.actu.ma/heure-dete-comment_i127896_0.html">
-# http://www.actu.ma/heure-dete-comment_i127896_0.html
-# </a>
-# )
-# the changes occurs at midnight:
+# (and republished here: <http://www.actu.ma/heure-dete-comment_i127896_0.html>)
+# the changes occur at midnight:
#
-# saturday night may 31st at midnight (which in french is to be
-# intrepreted as the night between saturday and sunday)
-# sunday night the 28th at midnight
+# Saturday night May 31st at midnight (which in French is to be
+# interpreted as the night between Saturday and Sunday)
+# Sunday night the 28th at midnight
#
-# Seeing that the 28th is monday, I am guessing that she intends to say
-# the midnight of the 28th which is the midnight between sunday and
-# monday, which jives with other sources that say that it's inclusive
-# june1st to sept 27th.
+# Seeing that the 28th is Monday, I am guessing that she intends to say
+# the midnight of the 28th which is the midnight between Sunday and
+# Monday, which jives with other sources that say that it's inclusive
+# June 1st to Sept 27th.
#
# The decision was taken by decree *2-08-224 *but I can't find the decree
# published on the web.
#
# It's also confirmed here:
-# <a href="http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm">
# http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm
-# </a>
-# on a government portal as being between june 1st and sept 27th (not yet
-# posted in english).
+# on a government portal as being between June 1st and Sept 27th (not yet
+# posted in English).
#
-# The following google query will generate many relevant hits:
-# <a href="http://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search">
+# The following Google query will generate many relevant hits:
# http://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search
-# </a>
# From Steffen Thorsen (2008-08-27):
# Morocco will change the clocks back on the midnight between August 31
@@ -765,47 +694,32 @@
# of September:
#
# One article about it (in French):
-# <a href="http://www.menara.ma/fr/Actualites/Maroc/Societe/ci.retour_a_l_heure_gmt_a_partir_du_dimanche_31_aout_a_minuit_officiel_.default">
# http://www.menara.ma/fr/Actualites/Maroc/Societe/ci.retour_a_l_heure_gmt_a_partir_du_dimanche_31_aout_a_minuit_officiel_.default
-# </a>
#
# We have some further details posted here:
-# <a href="http://www.timeanddate.com/news/time/morocco-ends-dst-early-2008.html">
# http://www.timeanddate.com/news/time/morocco-ends-dst-early-2008.html
-# </a>
# From Steffen Thorsen (2009-03-17):
# Morocco will observe DST from 2009-06-01 00:00 to 2009-08-21 00:00 according
# to many sources, such as
-# <a href="http://news.marweb.com/morocco/entertainment/morocco-daylight-saving.html">
# http://news.marweb.com/morocco/entertainment/morocco-daylight-saving.html
-# </a>
-# <a href="http://www.medi1sat.ma/fr/depeche.aspx?idp=2312">
# http://www.medi1sat.ma/fr/depeche.aspx?idp=2312
-# </a>
# (French)
#
# Our summary:
-# <a href="http://www.timeanddate.com/news/time/morocco-starts-dst-2009.html">
# http://www.timeanddate.com/news/time/morocco-starts-dst-2009.html
-# </a>
# From Alexander Krivenyshev (2009-03-17):
# Here is a link to official document from Royaume du Maroc Premier Ministre,
-# Ministere de la Modernisation des Secteurs Publics
+# Ministère de la Modernisation des Secteurs Publics
#
# Under Article 1 of Royal Decree No. 455-67 of Act 23 safar 1387 (2 june 1967)
# concerning the amendment of the legal time, the Ministry of Modernization of
# Public Sectors announced that the official time in the Kingdom will be
# advanced 60 minutes from Sunday 31 May 2009 at midnight.
#
-# <a href="http://www.mmsp.gov.ma/francais/Actualites_fr/PDF_Actualites_Fr/HeureEte_FR.pdf">
# http://www.mmsp.gov.ma/francais/Actualites_fr/PDF_Actualites_Fr/HeureEte_FR.pdf
-# </a>
-#
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_morocco03.html">
# http://www.worldtimezone.com/dst_news/dst_news_morocco03.html
-# </a>
# From Steffen Thorsen (2010-04-13):
# Several news media in Morocco report that the Ministry of Modernization
@@ -813,51 +727,33 @@
# 2010-05-02 to 2010-08-08.
#
# Example:
-# <a href="http://www.lavieeco.com/actualites/4099-le-maroc-passera-a-l-heure-d-ete-gmt1-le-2-mai.html">
# http://www.lavieeco.com/actualites/4099-le-maroc-passera-a-l-heure-d-ete-gmt1-le-2-mai.html
-# </a>
# (French)
# Our page:
-# <a href="http://www.timeanddate.com/news/time/morocco-starts-dst-2010.html">
# http://www.timeanddate.com/news/time/morocco-starts-dst-2010.html
-# </a>
# From Dan Abitol (2011-03-30):
# ...Rules for Africa/Casablanca are the following (24h format)
-# The 3rd april 2011 at 00:00:00, [it] will be 3rd april 1:00:00
-# The 31th july 2011 at 00:59:59, [it] will be 31th July 00:00:00
+# The 3rd April 2011 at 00:00:00, [it] will be 3rd April 01:00:00
+# The 31st July 2011 at 00:59:59, [it] will be 31st July 00:00:00
# ...Official links of change in morocco
# The change was broadcast on the FM Radio
# I ve called ANRT (telecom regulations in Morocco) at
# +212.537.71.84.00
-# <a href="http://www.anrt.net.ma/fr/">
# http://www.anrt.net.ma/fr/
-# </a>
# They said that
-# <a href="http://www.map.ma/fr/sections/accueil/l_heure_legale_au_ma/view">
# http://www.map.ma/fr/sections/accueil/l_heure_legale_au_ma/view
-# </a>
# is the official publication to look at.
# They said that the decision was already taken.
#
# More articles in the press
-# <a href="http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-lev">
-# http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-lev
-# </a>
-# e.html
-# <a href="http://www.lematin.ma/Actualite/Express/Article.asp?id=148923">
+# http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-leve.html
# http://www.lematin.ma/Actualite/Express/Article.asp?id=148923
-# </a>
-# <a href="http://www.lavieeco.com/actualite/Le-Maroc-passe-sur-GMT%2B1-a-partir-de-dim">
# http://www.lavieeco.com/actualite/Le-Maroc-passe-sur-GMT%2B1-a-partir-de-dim
-# anche-prochain-5538.html
-# </a>
# From Petr Machata (2011-03-30):
# They have it written in English here:
-# <a href="http://www.map.ma/eng/sections/home/morocco_to_spring_fo/view">
# http://www.map.ma/eng/sections/home/morocco_to_spring_fo/view
-# </a>
#
# It says there that "Morocco will resume its standard time on July 31,
# 2011 at midnight." Now they don't say whether they mean midnight of
@@ -865,20 +761,16 @@
# also been like that in the past.
# From Alexander Krivenyshev (2012-03-09):
-# According to Infom&eacute;diaire web site from Morocco (infomediaire.ma),
-# on March 9, 2012, (in French) Heure l&eacute;gale:
-# Le Maroc adopte officiellement l'heure d'&eacute;t&eacute;
-# <a href="http://www.infomediaire.ma/news/maroc/heure-l%C3%A9gale-le-maroc-adopte-officiellement-lheure-d%C3%A9t%C3%A9">
+# According to Infomédiaire web site from Morocco (infomediaire.ma),
+# on March 9, 2012, (in French) Heure légale:
+# Le Maroc adopte officiellement l'heure d'été
# http://www.infomediaire.ma/news/maroc/heure-l%C3%A9gale-le-maroc-adopte-officiellement-lheure-d%C3%A9t%C3%A9
-# </a>
# Governing Council adopted draft decree, that Morocco DST starts on
# the last Sunday of March (March 25, 2012) and ends on
# last Sunday of September (September 30, 2012)
# except the month of Ramadan.
# or (brief)
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_morocco06.html">
# http://www.worldtimezone.com/dst_news/dst_news_morocco06.html
-# </a>
# From Arthur David Olson (2012-03-10):
# The infomediaire.ma source indicates that the system is to be in
@@ -889,17 +781,13 @@
# From Christophe Tropamer (2012-03-16):
# Seen Morocco change again:
-# <a href="http://www.le2uminutes.com/actualite.php">
# http://www.le2uminutes.com/actualite.php
-# </a>
-# "...&agrave; partir du dernier dimance d'avril et non fins mars,
-# comme annonc&eacute; pr&eacute;c&eacute;demment."
+# "...à partir du dernier dimanche d'avril et non fins mars,
+# comme annoncé précédemment."
# From Milamber Space Network (2012-07-17):
# The official return to GMT is announced by the Moroccan government:
-# <a href="http://www.mmsp.gov.ma/fr/actualites.aspx?id=288">
# http://www.mmsp.gov.ma/fr/actualites.aspx?id=288 [in French]
-# </a>
#
# Google translation, lightly edited:
# Back to the standard time of the Kingdom (GMT)
@@ -917,7 +805,7 @@
# announced a bit in advance. On 2012-07-11 the Moroccan government
# announced that year's Ramadan daylight-saving transitions would be
# 2012-07-20 and 2012-08-20; see
-# <http://www.mmsp.gov.ma/fr/actualites.aspx?id=288>.
+# http://www.mmsp.gov.ma/fr/actualites.aspx?id=288
# From Andrew Paprocki (2013-07-02):
# Morocco announced that the year's Ramadan daylight-savings
@@ -937,39 +825,36 @@
# From Sebastien Willemijns (2014-03-18):
# http://www.afriquinfos.com/articles/2014/3/18/maroc-heure-dete-avancez-tous-horloges-247891.asp
-# From Paul Eggert (2014-03-19):
-# To estimate what the Moroccan government will do in future years,
-# transition dates for 2014 through 2038 were determined by running
-# the following program under GNU Emacs 24.3:
-#
-# (let ((islamic-year 1435))
-# (while (< islamic-year 1461)
-# (let ((a
-# (calendar-gregorian-from-absolute
-# (calendar-islamic-to-absolute (list 9 1 islamic-year))))
-# (b
-# (calendar-gregorian-from-absolute
-# (calendar-islamic-to-absolute (list 10 1 islamic-year)))))
-# (insert
-# (format
-# (concat "Rule\tMorocco\t%d\tonly\t-\t%s\t %2d\t 3:00\t0\t-\n"
-# "Rule\tMorocco\t%d\tonly\t-\t%s\t %2d\t 2:00\t1:00\tS\n")
-# (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
-# (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
+# From Milamber Space Network (2014-06-05):
+# The Moroccan government has recently announced that the country will return
+# to standard time at 03:00 on Saturday, June 28, 2014 local time.... DST
+# will resume again at 02:00 on Saturday, August 2, 2014....
+# http://www.mmsp.gov.ma/fr/actualites.aspx?id=586
+
+# From Paul Eggert (2014-06-05):
+# For now, guess that later spring and fall transitions will use 2014's rules,
+# and guess that Morocco will switch to standard time at 03:00 the last
+# Saturday before Ramadan, and back to DST at 02:00 the first Saturday after
+# Ramadan. To implement this, transition dates for 2015 through 2037 were
+# determined by running the following program under GNU Emacs 24.3, with the
+# results integrated by hand into the table below.
+# (let ((islamic-year 1436))
+# (while (< islamic-year 1460)
+# (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
+# (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
+# (saturday 6))
+# (while (/= saturday (mod (setq a (1- a)) 7)))
+# (while (/= saturday (mod b 7))
+# (setq b (1+ b)))
+# (setq a (calendar-gregorian-from-absolute a))
+# (setq b (calendar-gregorian-from-absolute b))
+# (insert
+# (format
+# (concat "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 3:00\t0\t-\n"
+# "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 2:00\t1:00\tS\n")
+# (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
+# (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
# (setq islamic-year (+ 1 islamic-year))))
-#
-# with spring-forward transitions removed for 2023-2025, when the
-# normal spring-forward date falls during the estimated Ramadan; with
-# all transitions removed for 2026-2035, where the estimated Ramadan
-# falls entirely outside daylight-saving time; and with fall-back
-# transitions removed for 2036-2037, where the normal fall-back
-# date falls during the estimated Ramadan. Normally, the table would
-# stop after 2037 because 32-bit time_t values roll around early in 2038,
-# but that would imply a prediction of perpetual DST after March 2038
-# due to the year-2037 glitches. So, this table instead stops after
-# 2038, the first non-glitchy year after the 32-bit rollover.
-# An advantage of stopping after 2038 is that it lets zic guess
-# TZ='WET0WEST,M3.5.0,M10.5.0/3' for time stamps far in the future.
# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -991,46 +876,44 @@
Rule Morocco 2008 only - Jun 1 0:00 1:00 S
Rule Morocco 2008 only - Sep 1 0:00 0 -
Rule Morocco 2009 only - Jun 1 0:00 1:00 S
-Rule Morocco 2009 only - Aug 21 0:00 0 -
+Rule Morocco 2009 only - Aug 21 0:00 0 -
Rule Morocco 2010 only - May 2 0:00 1:00 S
Rule Morocco 2010 only - Aug 8 0:00 0 -
Rule Morocco 2011 only - Apr 3 0:00 1:00 S
-Rule Morocco 2011 only - Jul 31 0 0 -
-Rule Morocco 2012 2013 - Apr lastSun 2:00 1:00 S
-Rule Morocco 2012 only - Sep 30 3:00 0 -
-Rule Morocco 2012 only - Jul 20 3:00 0 -
-Rule Morocco 2012 only - Aug 20 2:00 1:00 S
-Rule Morocco 2013 only - Jul 7 3:00 0 -
-Rule Morocco 2013 only - Aug 10 2:00 1:00 S
-Rule Morocco 2013 2035 - Oct lastSun 3:00 0 -
-Rule Morocco 2014 2022 - Mar lastSun 2:00 1:00 S
-Rule Morocco 2014 only - Jun 29 3:00 0 -
-Rule Morocco 2014 only - Jul 29 2:00 1:00 S
-Rule Morocco 2015 only - Jun 18 3:00 0 -
-Rule Morocco 2015 only - Jul 18 2:00 1:00 S
-Rule Morocco 2016 only - Jun 7 3:00 0 -
-Rule Morocco 2016 only - Jul 7 2:00 1:00 S
-Rule Morocco 2017 only - May 27 3:00 0 -
-Rule Morocco 2017 only - Jun 26 2:00 1:00 S
-Rule Morocco 2018 only - May 16 3:00 0 -
-Rule Morocco 2018 only - Jun 15 2:00 1:00 S
-Rule Morocco 2019 only - May 6 3:00 0 -
-Rule Morocco 2019 only - Jun 5 2:00 1:00 S
-Rule Morocco 2020 only - Apr 24 3:00 0 -
-Rule Morocco 2020 only - May 24 2:00 1:00 S
-Rule Morocco 2021 only - Apr 13 3:00 0 -
-Rule Morocco 2021 only - May 13 2:00 1:00 S
-Rule Morocco 2022 only - Apr 3 3:00 0 -
-Rule Morocco 2022 only - May 3 2:00 1:00 S
-Rule Morocco 2023 only - Apr 22 2:00 1:00 S
-Rule Morocco 2024 only - Apr 10 2:00 1:00 S
-Rule Morocco 2025 only - Mar 31 2:00 1:00 S
-Rule Morocco 2026 max - Mar lastSun 2:00 1:00 S
-Rule Morocco 2036 only - Oct 21 3:00 0 -
-Rule Morocco 2037 only - Oct 11 3:00 0 -
-Rule Morocco 2038 only - Sep 30 3:00 0 -
-Rule Morocco 2038 only - Oct 30 2:00 1:00 S
-Rule Morocco 2038 max - Oct lastSun 3:00 0 -
+Rule Morocco 2011 only - Jul 31 0 0 -
+Rule Morocco 2012 2013 - Apr lastSun 2:00 1:00 S
+Rule Morocco 2012 only - Sep 30 3:00 0 -
+Rule Morocco 2012 only - Jul 20 3:00 0 -
+Rule Morocco 2012 only - Aug 20 2:00 1:00 S
+Rule Morocco 2013 only - Jul 7 3:00 0 -
+Rule Morocco 2013 only - Aug 10 2:00 1:00 S
+Rule Morocco 2013 max - Oct lastSun 3:00 0 -
+Rule Morocco 2014 2022 - Mar lastSun 2:00 1:00 S
+Rule Morocco 2014 only - Jun 28 3:00 0 -
+Rule Morocco 2014 only - Aug 2 2:00 1:00 S
+Rule Morocco 2015 only - Jun 13 3:00 0 -
+Rule Morocco 2015 only - Jul 18 2:00 1:00 S
+Rule Morocco 2016 only - Jun 4 3:00 0 -
+Rule Morocco 2016 only - Jul 9 2:00 1:00 S
+Rule Morocco 2017 only - May 20 3:00 0 -
+Rule Morocco 2017 only - Jul 1 2:00 1:00 S
+Rule Morocco 2018 only - May 12 3:00 0 -
+Rule Morocco 2018 only - Jun 16 2:00 1:00 S
+Rule Morocco 2019 only - May 4 3:00 0 -
+Rule Morocco 2019 only - Jun 8 2:00 1:00 S
+Rule Morocco 2020 only - Apr 18 3:00 0 -
+Rule Morocco 2020 only - May 30 2:00 1:00 S
+Rule Morocco 2021 only - Apr 10 3:00 0 -
+Rule Morocco 2021 only - May 15 2:00 1:00 S
+Rule Morocco 2022 only - Apr 2 3:00 0 -
+Rule Morocco 2022 only - May 7 2:00 1:00 S
+Rule Morocco 2023 only - Apr 22 2:00 1:00 S
+Rule Morocco 2024 only - Apr 13 2:00 1:00 S
+Rule Morocco 2025 only - Apr 5 2:00 1:00 S
+Rule Morocco 2026 max - Mar lastSun 2:00 1:00 S
+Rule Morocco 2035 only - Oct 27 3:00 0 -
+Rule Morocco 2036 only - Oct 18 3:00 0 -
+Rule Morocco 2037 only - Oct 10 3:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
@@ -1049,21 +932,34 @@
# Assume that this has been true since Western Sahara switched to GMT,
# since most of it was then controlled by Morocco.
-Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan
+Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan # El Aaiún
-1:00 - WAT 1976 Apr 14
0:00 Morocco WE%sT
# Mozambique
+#
+# Shanks gives 1903-03-01 for the transition to CAT.
+# Perhaps the 1911-05-26 Portuguese decree
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# merely made it official?
+#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Maputo 2:10:20 - LMT 1903 Mar
2:00 - CAT
+Link Africa/Maputo Africa/Blantyre # Malawi
+Link Africa/Maputo Africa/Bujumbura # Burundi
+Link Africa/Maputo Africa/Gaborone # Botswana
+Link Africa/Maputo Africa/Harare # Zimbabwe
+Link Africa/Maputo Africa/Kigali # Rwanda
+Link Africa/Maputo Africa/Lubumbashi # E Dem. Rep. of Congo
+Link Africa/Maputo Africa/Lusaka # Zambia
# Namibia
# The 1994-04-03 transition is from Shanks & Pottenger.
# Shanks & Pottenger report no DST after 1998-04; go with IATA.
-# From Petronella Sibeene (2007-03-30) in
-# <http://allafrica.com/stories/200703300178.html>:
+# From Petronella Sibeene (2007-03-30):
+# http://allafrica.com/stories/200703300178.html
# While the entire country changes its time, Katima Mulilo and other
# settlements in Caprivi unofficially will not because the sun there
# rises and sets earlier compared to other regions. Chief of
@@ -1080,34 +976,41 @@
Rule Namibia 1995 max - Apr Sun>=1 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
- 1:30 - SWAT 1903 Mar # SW Africa Time
- 2:00 - SAST 1942 Sep 20 2:00
- 2:00 1:00 SAST 1943 Mar 21 2:00
+ 1:30 - SWAT 1903 Mar # SW Africa Time
+ 2:00 - SAST 1942 Sep 20 2:00
+ 2:00 1:00 SAST 1943 Mar 21 2:00
2:00 - SAST 1990 Mar 21 # independence
2:00 - CAT 1994 Apr 3
1:00 Namibia WA%sT
# Niger
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Niamey 0:08:28 - LMT 1912
- -1:00 - WAT 1934 Feb 26
- 0:00 - GMT 1960
- 1:00 - WAT
+# See Africa/Lagos.
# Nigeria
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Lagos 0:13:36 - LMT 1919 Sep
1:00 - WAT
+Link Africa/Lagos Africa/Bangui # Central African Republic
+Link Africa/Lagos Africa/Brazzaville # Rep. of the Congo
+Link Africa/Lagos Africa/Douala # Cameroon
+Link Africa/Lagos Africa/Kinshasa # Dem. Rep. of the Congo (west)
+Link Africa/Lagos Africa/Libreville # Gabon
+Link Africa/Lagos Africa/Luanda # Angola
+Link Africa/Lagos Africa/Malabo # Equatorial Guinea
+Link Africa/Lagos Africa/Niamey # Niger
+Link Africa/Lagos Africa/Porto-Novo # Benin
-# Reunion
+# Réunion
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
- 4:00 - RET # Reunion Time
+Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
+ 4:00 - RET # Réunion Time
#
-# Scattered Islands (Iles Eparses) administered from Reunion are as follows.
+# Crozet Islands also observes Réunion time; see the 'antarctica' file.
+#
+# Scattered Islands (Îles Éparses) administered from Réunion are as follows.
# The following information about them is taken from
-# Iles Eparses (www.outre-mer.gouv.fr/domtom/ile.htm, 1997-07-22, in French;
-# no longer available as of 1999-08-17).
+# Îles Éparses (<http://www.outre-mer.gouv.fr/domtom/ile.htm>, 1997-07-22,
+# in French; no longer available as of 1999-08-17).
# We have no info about their time zone histories.
#
# Bassas da India - uninhabited
@@ -1117,37 +1020,24 @@
# Tromelin - inhabited until at least 1958
# Rwanda
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Kigali 2:00:16 - LMT 1935 Jun
- 2:00 - CAT
+# See Africa/Maputo.
# St Helena
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Atlantic/St_Helena -0:22:48 - LMT 1890 # Jamestown
- -0:22:48 - JMT 1951 # Jamestown Mean Time
- 0:00 - GMT
+# See Africa/Abidjan.
# The other parts of the St Helena territory are similar:
# Tristan da Cunha: on GMT, say Whitman and the CIA
-# Ascension: on GMT, says usno1995 and the CIA
+# Ascension: on GMT, say the USNO (1995-12-21) and the CIA
# Gough (scientific station since 1955; sealers wintered previously):
# on GMT, says the CIA
-# Inaccessible, Nightingale: no information, but probably GMT
+# Inaccessible, Nightingale: uninhabited
-# Sao Tome and Principe
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Sao_Tome 0:26:56 - LMT 1884
- -0:36:32 - LMT 1912 # Lisbon Mean Time
- 0:00 - GMT
-
+# São Tomé and Príncipe
# Senegal
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Dakar -1:09:44 - LMT 1912
- -1:00 - WAT 1941 Jun
- 0:00 - GMT
+# See Africa/Abidjan.
# Seychelles
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
+Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
4:00 - SCT # Seychelles Time
# From Paul Eggert (2001-05-30):
# Aldabra, Farquhar, and Desroches, originally dependencies of the
@@ -1157,24 +1047,10 @@
# Possibly the islands were uninhabited.
# Sierra Leone
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# Whitman gives Mar 31 - Aug 31 for 1931 on; go with Shanks & Pottenger.
-Rule SL 1935 1942 - Jun 1 0:00 0:40 SLST
-Rule SL 1935 1942 - Oct 1 0:00 0 WAT
-Rule SL 1957 1962 - Jun 1 0:00 1:00 SLST
-Rule SL 1957 1962 - Sep 1 0:00 0 GMT
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Freetown -0:53:00 - LMT 1882
- -0:53:00 - FMT 1913 Jun # Freetown Mean Time
- -1:00 SL %s 1957
- 0:00 SL %s
+# See Africa/Abidjan.
# Somalia
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Mogadishu 3:01:28 - LMT 1893 Nov
- 3:00 - EAT 1931
- 2:30 - BEAT 1957
- 3:00 - EAT
+# See Africa/Nairobi.
# South Africa
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -1184,15 +1060,18 @@
Zone Africa/Johannesburg 1:52:00 - LMT 1892 Feb 8
1:30 - SAST 1903 Mar
2:00 SA SAST
+Link Africa/Johannesburg Africa/Maseru # Lesotho
+Link Africa/Johannesburg Africa/Mbabane # Swaziland
+#
# Marion and Prince Edward Is
# scientific station since 1947
# no information
# Sudan
#
-# From <a href="http://www.sunanews.net/sn13jane.html">
-# Sudan News Agency (2000-01-13)
-# </a>, also reported by Michael De Beukelaer-Dossche via Steffen Thorsen:
+# From <http://www.sunanews.net/sn13jane.html>
+# Sudan News Agency (2000-01-13),
+# also reported by Michaël De Beukelaer-Dossche via Steffen Thorsen:
# Clocks will be moved ahead for 60 minutes all over the Sudan as of noon
# Saturday.... This was announced Thursday by Caretaker State Minister for
# Manpower Abdul-Rahman Nur-Eddin.
@@ -1211,26 +1090,18 @@
Link Africa/Khartoum Africa/Juba
# Swaziland
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Mbabane 2:04:24 - LMT 1903 Mar
- 2:00 - SAST
+# See Africa/Johannesburg.
# Tanzania
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Dar_es_Salaam 2:37:08 - LMT 1931
- 3:00 - EAT 1948
- 2:45 - BEAUT 1961
- 3:00 - EAT
+# See Africa/Nairobi.
# Togo
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Lome 0:04:52 - LMT 1893
- 0:00 - GMT
+# See Africa/Abidjan.
# Tunisia
# From Gwillim Law (2005-04-30):
-# My correspondent, Risto Nykanen, has alerted me to another adoption of DST,
+# My correspondent, Risto Nykänen, has alerted me to another adoption of DST,
# this time in Tunisia. According to Yahoo France News
# <http://fr.news.yahoo.com/050426/5/4dumk.html>, in a story attributed to AP
# and dated 2005-04-26, "Tunisia has decided to advance its official time by
@@ -1239,8 +1110,8 @@
# Saturday." (My translation)
#
# From Oscar van Vlijmen (2005-05-02):
-# LaPresse, the first national daily newspaper ...
-# <http://www.lapresse.tn/archives/archives280405/actualites/lheure.html>
+# La Presse, the first national daily newspaper ...
+# http://www.lapresse.tn/archives/archives280405/actualites/lheure.html
# ... DST for 2005: on: Sun May 1 0h standard time, off: Fri Sept. 30,
# 1h standard time.
#
@@ -1253,18 +1124,12 @@
# From Steffen Thorsen (2009-03-16):
# According to several news sources, Tunisia will not observe DST this year.
# (Arabic)
-# <a href="http://www.elbashayer.com/?page=viewn&nid=42546">
# http://www.elbashayer.com/?page=viewn&nid=42546
-# </a>
-# <a href="http://www.babnet.net/kiwidetail-15295.asp">
# http://www.babnet.net/kiwidetail-15295.asp
-# </a>
#
# We have also confirmed this with the US embassy in Tunisia.
# We have a wrap-up about this on the following page:
-# <a href="http://www.timeanddate.com/news/time/tunisia-cancels-dst-2009.html">
# http://www.timeanddate.com/news/time/tunisia-cancels-dst-2009.html
-# </a>
# From Alexander Krivenyshev (2009-03-17):
# Here is a link to Tunis Afrique Presse News Agency
@@ -1272,20 +1137,17 @@
# Standard time to be kept the whole year long (tap.info.tn):
#
# (in English)
-# <a href="http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=26813&Itemid=157">
# http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=26813&Itemid=157
-# </a>
#
# (in Arabic)
-# <a href="http://www.tap.info.tn/ar/index.php?option=com_content&task=view&id=61240&Itemid=1">
# http://www.tap.info.tn/ar/index.php?option=com_content&task=view&id=61240&Itemid=1
-# </a>
-# From Arthur David Olson (2009--3-18):
-# The Tunis Afrique Presse News Agency notice contains this: "This measure is due to the fact
-# that the fasting month of ramadan coincides with the period concerned by summer time.
-# Therefore, the standard time will be kept unchanged the whole year long."
-# So foregoing DST seems to be an exception (albeit one that may be repeated in the future).
+# From Arthur David Olson (2009-03-18):
+# The Tunis Afrique Presse News Agency notice contains this: "This measure is
+# due to the fact that the fasting month of Ramadan coincides with the period
+# concerned by summer time. Therefore, the standard time will be kept
+# unchanged the whole year long." So foregoing DST seems to be an exception
+# (albeit one that may be repeated in the future).
# From Alexander Krivenyshev (2010-03-27):
# According to some news reports Tunis confirmed not to use DST in 2010
@@ -1297,12 +1159,8 @@
# coincided with the month of Ramadan..."
#
# (in Arabic)
-# <a href="http://www.moheet.com/show_news.aspx?nid=358861&pg=1">
# http://www.moheet.com/show_news.aspx?nid=358861&pg=1
-# <a href="http://www.almadenahnews.com/newss/news.php?c=118&id=38036">
# http://www.almadenahnews.com/newss/news.php?c=118&id=38036
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_tunis02.html">
# http://www.worldtimezone.com/dst_news/dst_news_tunis02.html
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -1337,23 +1195,12 @@
# Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Tunis 0:40:44 - LMT 1881 May 12
- 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
+ 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
1:00 Tunisia CE%sT
# Uganda
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Kampala 2:09:40 - LMT 1928 Jul
- 3:00 - EAT 1930
- 2:30 - BEAT 1948
- 2:45 - BEAUT 1957
- 3:00 - EAT
+# See Africa/Nairobi.
# Zambia
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Lusaka 1:53:08 - LMT 1903 Mar
- 2:00 - CAT
-
# Zimbabwe
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Harare 2:04:12 - LMT 1903 Mar
- 2:00 - CAT
+# See Africa/Maputo.
--- ./jdk/make/sun/javazic/tzdata/antarctica Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/sun/javazic/tzdata/antarctica Mon Jan 05 11:57:27 2015 -0800
@@ -21,19 +21,16 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
# From Paul Eggert (1999-11-15):
# To keep things manageable, we list only locations occupied year-round; see
-# <a href="http://www.comnap.aq/comnap/comnap.nsf/P/Stations/">
# COMNAP - Stations and Bases
-# </a>
+# http://www.comnap.aq/comnap/comnap.nsf/P/Stations/
# and
-# <a href="http://www.spri.cam.ac.uk/bob/periant.htm">
# Summary of the Peri-Antarctic Islands (1998-07-23)
-# </a>
+# http://www.spri.cam.ac.uk/bob/periant.htm
# for information.
# Unless otherwise specified, we have no time zone information.
#
@@ -78,19 +75,19 @@
# Argentina - year-round bases
# Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
-# Esperanza, San Martin Land, -6323-05659, since 1952-12-17
-# Jubany, Potter Peninsula, King George Island, -6414-0602320, since 1982-01
-# Marambio, Seymour I, -6414-05637, since 1969-10-29
+# Carlini, Potter Cove, King George Island, -6414-0602320, since 1982-01
+# Esperanza, Hope Bay, -6323-05659, since 1952-12-17
+# Marambio, -6414-05637, since 1969-10-29
# Orcadas, Laurie I, -6016-04444, since 1904-02-22
-# San Martin, Debenham I, -6807-06708, since 1951-03-21
+# San Martín, Barry I, -6808-06706, since 1951-03-21
# (except 1960-03 / 1976-03-21)
# Australia - territories
# Heard Island, McDonald Islands (uninhabited)
# previously sealers and scientific personnel wintered
-# <a href="http://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html">
# Margaret Turner reports
-# </a> (1999-09-30) that they're UTC+5, with no DST;
+# http://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html
+# (1999-09-30) that they're UTC+5, with no DST;
# presumably this is when they have visitors.
#
# year-round bases
@@ -107,14 +104,10 @@
# The changes occurred on 2009-10-18 at 02:00 (local times).
#
# Government source: (Australian Antarctic Division)
-# <a href="http://www.aad.gov.au/default.asp?casid=37079">
# http://www.aad.gov.au/default.asp?casid=37079
-# </a>
#
# We have more background information here:
-# <a href="http://www.timeanddate.com/news/time/antarctica-new-times.html">
# http://www.timeanddate.com/news/time/antarctica-new-times.html
-# </a>
# From Steffen Thorsen (2010-03-10):
# We got these changes from the Australian Antarctic Division: ...
@@ -129,50 +122,49 @@
# - Mawson station stays on UTC+5.
#
# Background:
-# <a href="http://www.timeanddate.com/news/time/antartica-time-changes-2010.html">
# http://www.timeanddate.com/news/time/antartica-time-changes-2010.html
-# </a>
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Casey 0 - zzz 1969
- 8:00 - WST 2009 Oct 18 2:00
- # Western (Aus) Standard Time
- 11:00 - CAST 2010 Mar 5 2:00
- # Casey Time
- 8:00 - WST 2011 Oct 28 2:00
+ 8:00 - AWST 2009 Oct 18 2:00
+ # Australian Western Std Time
+ 11:00 - CAST 2010 Mar 5 2:00 # Casey Time
+ 8:00 - AWST 2011 Oct 28 2:00
11:00 - CAST 2012 Feb 21 17:00u
- 8:00 - WST
+ 8:00 - AWST
Zone Antarctica/Davis 0 - zzz 1957 Jan 13
- 7:00 - DAVT 1964 Nov # Davis Time
+ 7:00 - DAVT 1964 Nov # Davis Time
0 - zzz 1969 Feb
- 7:00 - DAVT 2009 Oct 18 2:00
+ 7:00 - DAVT 2009 Oct 18 2:00
5:00 - DAVT 2010 Mar 10 20:00u
- 7:00 - DAVT 2011 Oct 28 2:00
+ 7:00 - DAVT 2011 Oct 28 2:00
5:00 - DAVT 2012 Feb 21 20:00u
7:00 - DAVT
Zone Antarctica/Mawson 0 - zzz 1954 Feb 13
- 6:00 - MAWT 2009 Oct 18 2:00
- # Mawson Time
+ 6:00 - MAWT 2009 Oct 18 2:00 # Mawson Time
5:00 - MAWT
# References:
-# <a href="http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html">
# Casey Weather (1998-02-26)
-# </a>
-# <a href="http://www.antdiv.gov.au/aad/exop/sfo/davis/video.html">
+# http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html
# Davis Station, Antarctica (1998-02-26)
-# </a>
-# <a href="http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html">
+# http://www.antdiv.gov.au/aad/exop/sfo/davis/video.html
# Mawson Station, Antarctica (1998-02-25)
-# </a>
+# http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html
+
+# Belgium - year-round base
+# Princess Elisabeth, Queen Maud Land, -713412+0231200, since 2007
# Brazil - year-round base
-# Comandante Ferraz, King George Island, -6205+05824, since 1983/4
+# Ferraz, King George Island, -6205+05824, since 1983/4
+
+# Bulgaria - year-round base
+# St. Kliment Ohridski, Livingston Island, -623829-0602153, since 1988
# Chile - year-round bases and towns
# Escudero, South Shetland Is, -621157-0585735, since 1994
-# Presidente Eduadro Frei, King George Island, -6214-05848, since 1969-03-07
-# General Bernardo O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
-# Capitan Arturo Prat, -6230-05941
+# Frei Montalva, King George Island, -6214-05848, since 1969-03-07
+# O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
+# Prat, -6230-05941
# Villa Las Estrellas (a town), around the Frei base, since 1984-04-09
# These locations have always used Santiago time; use TZ='America/Santiago'.
@@ -180,31 +172,35 @@
# Great Wall, King George Island, -6213-05858, since 1985-02-20
# Zhongshan, Larsemann Hills, Prydz Bay, -6922+07623, since 1989-02-26
-# France - year-round bases
+# France - year-round bases (also see "France & Italy")
#
# From Antoine Leca (1997-01-20):
-# Time data are from Nicole Pailleau at the IFRTP
+# Time data entries are from Nicole Pailleau at the IFRTP
# (French Institute for Polar Research and Technology).
-# She confirms that French Southern Territories and Terre Adelie bases
-# don't observe daylight saving time, even if Terre Adelie supplies came
+# She confirms that French Southern Territories and Terre Adélie bases
+# don't observe daylight saving time, even if Terre Adélie supplies came
# from Tasmania.
#
# French Southern Territories with year-round inhabitants
#
-# Martin-de-Vivies Base, Amsterdam Island, -374105+0773155, since 1950
-# Alfred-Faure Base, Crozet Islands, -462551+0515152, since 1964
-# Port-aux-Francais, Kerguelen Islands, -492110+0701303, since 1951;
+# Alfred Faure, Possession Island, Crozet Islands, -462551+0515152, since 1964;
+# sealing & whaling stations operated variously 1802/1911+;
+# see Indian/Reunion.
+#
+# Martin-de-Viviès, Amsterdam Island, -374105+0773155, since 1950
+# Port-aux-Français, Kerguelen Islands, -492110+0701303, since 1951;
# whaling & sealing station operated 1908/1914, 1920/1929, and 1951/1956
#
# St Paul Island - near Amsterdam, uninhabited
# fishing stations operated variously 1819/1931
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Kerguelen 0 - zzz 1950 # Port-aux-Francais
+Zone Indian/Kerguelen 0 - zzz 1950 # Port-aux-Français
5:00 - TFT # ISO code TF Time
#
# year-round base in the main continent
-# Dumont-d'Urville, Ile des Petrels, -6640+14001, since 1956-11
+# Dumont d'Urville, Île des Pétrels, -6640+14001, since 1956-11
+# <http://en.wikipedia.org/wiki/Dumont_d'Urville_Station> (2005-12-05)
#
# Another base at Port-Martin, 50km east, began operation in 1947.
# It was destroyed by fire on 1952-01-14.
@@ -214,20 +210,22 @@
10:00 - PMT 1952 Jan 14 # Port-Martin Time
0 - zzz 1956 Nov
10:00 - DDUT # Dumont-d'Urville Time
-# Reference:
-# <a href="http://en.wikipedia.org/wiki/Dumont_d'Urville_Station">
-# Dumont d'Urville Station (2005-12-05)
-# </a>
+
+# France & Italy - year-round base
+# Concordia, -750600+1232000, since 2005
# Germany - year-round base
-# Georg von Neumayer, -7039-00815
+# Neumayer III, -704080-0081602, since 2009
-# India - year-round base
-# Dakshin Gangotri, -7005+01200
+# India - year-round bases
+# Bharati, -692428+0761114, since 2012
+# Maitri, -704558+0114356, since 1989
+
+# Italy - year-round base (also see "France & Italy")
+# Zuchelli, Terra Nova Bay, -744140+1640647, since 1986
# Japan - year-round bases
-# Dome Fuji, -7719+03942
-# Syowa, -690022+0393524
+# Syowa (also known as Showa), -690022+0393524, since 1957
#
# From Hideyuki Suzuki (1999-02-06):
# In all Japanese stations, +0300 is used as the standard time.
@@ -239,11 +237,11 @@
Zone Antarctica/Syowa 0 - zzz 1957 Jan 29
3:00 - SYOT # Syowa Time
# See:
-# <a href="http://www.nipr.ac.jp/english/ara01.html">
# NIPR Antarctic Research Activities (1999-08-17)
-# </a>
+# http://www.nipr.ac.jp/english/ara01.html
# S Korea - year-round base
+# Jang Bogo, Terra Nova Bay, -743700+1641205 since 2014
# King Sejong, King George Island, -6213-05847, since 1988
# New Zealand - claims
@@ -287,11 +285,14 @@
Rule Troll 2004 max - Oct lastSun 1:00u 0:00 UTC
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Troll 0 - zzz 2005 Feb 12
- 0:00 Troll %s
+ 0:00 Troll %s
# Poland - year-round base
# Arctowski, King George Island, -620945-0582745, since 1977
+# Romania - year-bound base
+# Law-Racoviță, Larsemann Hills, -692319+0762251, since 1986
+
# Russia - year-round bases
# Bellingshausen, King George Island, -621159-0585337, since 1968-02-22
# Mirny, Davis coast, -6633+09301, since 1956-02
@@ -301,8 +302,8 @@
# year-round from 1960/61 to 1992
# Vostok, since 1957-12-16, temporarily closed 1994-02/1994-11
-# <a href="http://quest.arc.nasa.gov/antarctica/QA/computers/Directions,Time,ZIP">
-# From Craig Mundell (1994-12-15)</a>:
+# From Craig Mundell (1994-12-15):
+# http://quest.arc.nasa.gov/antarctica/QA/computers/Directions,Time,ZIP
# Vostok, which is one of the Russian stations, is set on the same
# time as Moscow, Russia.
#
@@ -317,7 +318,7 @@
#
# From Paul Eggert (2001-05-04):
# This seems to be hopelessly confusing, so I asked Lee Hotz about it
-# in person. He said that some Antartic locations set their local
+# in person. He said that some Antarctic locations set their local
# time so that noon is the warmest part of the day, and that this
# changes during the year and does not necessarily correspond to mean
# solar noon. So the Vostok time might have been whatever the clocks
@@ -329,9 +330,12 @@
# S Africa - year-round bases
# Marion Island, -4653+03752
-# Sanae, -7141-00250
+# SANAE IV, Vesleskarvet, Queen Maud Land, -714022-0025026, since 1997
-# UK
+# Ukraine - year-round base
+# Vernadsky (formerly Faraday), Galindez Island, -651445-0641526, since 1954
+
+# United Kingdom
#
# British Antarctic Territories (BAT) claims
# South Orkney Islands
@@ -387,7 +391,7 @@
# but that he found it more convenient to keep GMT+12
# as supplies for the station were coming from McMurdo Sound,
# which was on GMT+12 because New Zealand was on GMT+12 all year
-# at that time (1957). (Source: Siple's book 90 degrees SOUTH.)
+# at that time (1957). (Source: Siple's book 90 Degrees South.)
#
# From Susan Smith
# http://www.cybertours.com/whs/pole10.html
--- ./jdk/make/sun/javazic/tzdata/asia Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/sun/javazic/tzdata/asia Mon Jan 05 11:57:27 2015 -0800
@@ -21,41 +21,44 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future). For more, please see
+# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2013-08-11):
+# From Paul Eggert (2014-10-31):
#
-# A good source for time zone historical data outside the U.S. is
+# Unless otherwise specified, the source for data through 1990 is:
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
# San Diego: ACS Publications, Inc. (2003).
+# Unfortunately this book contains many errors and cites no sources.
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
# Association's Standard Schedules Information Manual (IATA SSIM),
# published semiannually. Law sent in several helpful summaries
-# of the IATA's data after 1990.
-#
-# Except where otherwise noted, Shanks & Pottenger is the source for
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
+# of the IATA's data after 1990. Except where otherwise noted,
+# IATA SSIM is the source for entries after 1990.
#
# Another source occasionally used is Edward W. Whitman, World Time Differences,
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
# I found in the UCLA library.
#
# For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
-# <http://www.jstor.org/stable/1774359>.
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
+# http://www.jstor.org/stable/1774359
+#
+# For Russian data circa 1919, a source is:
+# Byalokoz EL. New Counting of Time in Russia since July 1, 1919.
+# (See the 'europe' file for a fuller citation.)
#
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
-# I invented the abbreviations marked `*' in the following table;
+# I invented the abbreviations marked '*' in the following table;
# the rest are from earlier versions of this file, or from other sources.
# Corrections are welcome!
# std dst
@@ -66,17 +69,19 @@
# 3:30 IRST IRDT Iran
# 4:00 GST Gulf*
# 5:30 IST India
-# 7:00 ICT Indochina*
+# 7:00 ICT Indochina, most times and locations*
# 7:00 WIB west Indonesia (Waktu Indonesia Barat)
# 8:00 WITA central Indonesia (Waktu Indonesia Tengah)
# 8:00 CST China
-# 9:00 CJT Central Japanese Time (1896/1937)*
+# 8:00 IDT Indochina, 1943-45, 1947-55, 1960-75 (some locations)*
+# 8:00 JWST Western Standard Time (Japan, 1896/1937)*
+# 9:00 JCST Central Standard Time (Japan, 1896/1937)
# 9:00 WIT east Indonesia (Waktu Indonesia Timur)
# 9:00 JST JDT Japan
# 9:00 KST KDT Korea
-# 9:30 CST (Australian) Central Standard Time
+# 9:30 ACST Australian Central Standard Time
#
-# See the `europe' file for Russia and Turkey in Asia.
+# See the 'europe' file for Russia and Turkey in Asia.
# From Guy Harris:
# Incorporates data for Singapore from Robert Elz' asia 1.1, as well as
@@ -86,7 +91,7 @@
###############################################################################
-# These rules are stolen from the `europe' file.
+# These rules are stolen from the 'europe' file.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S
Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 -
@@ -138,11 +143,11 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
3:00 - YERT 1957 Mar # Yerevan Time
- 4:00 RussiaAsia YER%sT 1991 Mar 31 2:00s
+ 4:00 RussiaAsia YER%sT 1991 Mar 31 2:00s
3:00 1:00 YERST 1991 Sep 23 # independence
- 3:00 RussiaAsia AM%sT 1995 Sep 24 2:00s
+ 3:00 RussiaAsia AM%sT 1995 Sep 24 2:00s
4:00 - AMT 1997
- 4:00 RussiaAsia AM%sT 2012 Mar 25 2:00s
+ 4:00 RussiaAsia AM%sT 2012 Mar 25 2:00s
4:00 - AMT
# Azerbaijan
@@ -155,16 +160,16 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Baku 3:19:24 - LMT 1924 May 2
3:00 - BAKT 1957 Mar # Baku Time
- 4:00 RussiaAsia BAK%sT 1991 Mar 31 2:00s
+ 4:00 RussiaAsia BAK%sT 1991 Mar 31 2:00s
3:00 1:00 BAKST 1991 Aug 30 # independence
3:00 RussiaAsia AZ%sT 1992 Sep lastSat 23:00
- 4:00 - AZT 1996 # Azerbaijan time
+ 4:00 - AZT 1996 # Azerbaijan Time
4:00 EUAsia AZ%sT 1997
4:00 Azer AZ%sT
# Bahrain
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Bahrain 3:22:20 - LMT 1920 # Al Manamah
+Zone Asia/Bahrain 3:22:20 - LMT 1920 # Manamah
4:00 - GST 1972 Jun
3:00 - AST
@@ -174,13 +179,8 @@
# Daylight Saving Time from June 16 to Sept 30
#
# Bangladesh to introduce daylight saving time likely from June 16
-# <a href="http://www.asiantribune.com/?q=node/17288">
# http://www.asiantribune.com/?q=node/17288
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_bangladesh02.html">
# http://www.worldtimezone.com/dst_news/dst_news_bangladesh02.html
-# </a>
#
# "... Bangladesh government has decided to switch daylight saving time from
# June
@@ -195,17 +195,11 @@
# the 19th and 20th, and they have not set the end date yet.
#
# Some sources:
-# <a href="http://in.reuters.com/article/southAsiaNews/idINIndia-40017620090601">
# http://in.reuters.com/article/southAsiaNews/idINIndia-40017620090601
-# </a>
-# <a href="http://bdnews24.com/details.php?id=85889&cid=2">
# http://bdnews24.com/details.php?id=85889&cid=2
-# </a>
#
# Our wrap-up:
-# <a href="http://www.timeanddate.com/news/time/bangladesh-daylight-saving-2009.html">
# http://www.timeanddate.com/news/time/bangladesh-daylight-saving-2009.html
-# </a>
# From A. N. M. Kamrus Saadat (2009-06-15):
# Finally we've got the official mail regarding DST start time where DST start
@@ -220,13 +214,8 @@
#
# Following report by same newspaper-"The Daily Star Friday":
# "DST change awaits cabinet decision-Clock won't go back by 1-hr from Oct 1"
-# <a href="http://www.thedailystar.net/newDesign/news-details.php?nid=107021">
# http://www.thedailystar.net/newDesign/news-details.php?nid=107021
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_bangladesh04.html">
# http://www.worldtimezone.com/dst_news/dst_news_bangladesh04.html
-# </a>
# From Steffen Thorsen (2009-10-13):
# IANS (Indo-Asian News Service) now reports:
@@ -235,22 +224,15 @@
# "continue for an indefinite period."
#
# One of many places where it is published:
-# <a href="http://www.thaindian.com/newsportal/business/bangladesh-to-continue-indefinitely-with-advanced-time_100259987.html">
# http://www.thaindian.com/newsportal/business/bangladesh-to-continue-indefinitely-with-advanced-time_100259987.html
-# </a>
# From Alexander Krivenyshev (2009-12-24):
# According to Bangladesh newspaper "The Daily Star,"
# Bangladesh will change its clock back to Standard Time on Dec 31, 2009.
#
# Clock goes back 1-hr on Dec 31 night.
-# <a href="http://www.thedailystar.net/newDesign/news-details.php?nid=119228">
# http://www.thedailystar.net/newDesign/news-details.php?nid=119228
-# </a>
-# and
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_bangladesh05.html">
# http://www.worldtimezone.com/dst_news/dst_news_bangladesh05.html
-# </a>
#
# "...The government yesterday decided to put the clock back by one hour
# on December 31 midnight and the new time will continue until March 31,
@@ -260,17 +242,12 @@
# From Alexander Krivenyshev (2010-03-22):
# According to Bangladesh newspaper "The Daily Star,"
# Cabinet cancels Daylight Saving Time
-# <a href="http://www.thedailystar.net/newDesign/latest_news.php?nid=22817">
# http://www.thedailystar.net/newDesign/latest_news.php?nid=22817
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html">
# http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html
-# </a>
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Dhaka 2009 only - Jun 19 23:00 1:00 S
-Rule Dhaka 2009 only - Dec 31 23:59 0 -
+Rule Dhaka 2009 only - Dec 31 24:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Dhaka 6:01:40 - LMT 1890
@@ -301,7 +278,7 @@
# Brunei
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan
+Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan
7:30 - BNT 1933
8:00 - BNT
@@ -310,19 +287,15 @@
# Milne says 6:24:40 was the meridian of the time ball observatory at Rangoon.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Rangoon 6:24:40 - LMT 1880 # or Yangon
- 6:24:40 - RMT 1920 # Rangoon Mean Time?
- 6:30 - BURT 1942 May # Burma Time
- 9:00 - JST 1945 May 3
- 6:30 - MMT # Myanmar Time
+Zone Asia/Rangoon 6:24:40 - LMT 1880 # or Yangon
+ 6:24:40 - RMT 1920 # Rangoon Mean Time?
+ 6:30 - BURT 1942 May # Burma Time
+ 9:00 - JST 1945 May 3
+ 6:30 - MMT # Myanmar Time
# Cambodia
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Phnom_Penh 6:59:40 - LMT 1906 Jun 9
- 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
- 7:00 - ICT 1912 May
- 8:00 - ICT 1931 May
- 7:00 - ICT
+# See Asia/Bangkok.
+
# China
@@ -332,12 +305,12 @@
# From Bob Devine (1988-01-28):
# No they don't. See TIME mag, 1986-02-17 p.52. Even though
# China is across 4 physical time zones, before Feb 1, 1986 only the
-# Peking (Bejing) time zone was recognized. Since that date, China
-# has two of 'em -- Peking's and Urumqi (named after the capital of
+# Peking (Beijing) time zone was recognized. Since that date, China
+# has two of 'em - Peking's and Ürümqi (named after the capital of
# the Xinjiang Uyghur Autonomous Region). I don't know about DST for it.
#
# . . .I just deleted the DST table and this editor makes it too
-# painful to suck in another copy.. So, here is what I have for
+# painful to suck in another copy. So, here is what I have for
# DST start/end dates for Peking's time zone (info from AP):
#
# 1986 May 4 - Sept 14
@@ -347,15 +320,16 @@
# CHINA 8 H AHEAD OF UTC ALL OF CHINA, INCL TAIWAN
# CHINA 9 H AHEAD OF UTC APR 17 - SEP 10
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that China (except for Hong Kong and Macau)
-# has had a single time zone since 1980 May 1, observing summer DST
-# from 1986 through 1991; this contradicts Devine's
-# note about Time magazine, though apparently _something_ happened in 1986.
-# Go with Shanks & Pottenger for now. I made up names for the other
-# pre-1980 time zones.
+# From Paul Eggert (2008-02-11):
+# Jim Mann, "A clumsy embrace for another western custom: China on daylight
+# time - sort of", Los Angeles Times, 1986-05-05 ... [says] that China began
+# observing daylight saving time in 1986.
-# From Shanks & Pottenger:
+# From Paul Eggert (2014-06-30):
+# Shanks & Pottenger have China switching to a single time zone in 1980, but
+# this doesn't seem to be correct. They also write that China observed summer
+# DST from 1986 through 1991, which seems to match the above commentary, so
+# go with them for DST rules as follows:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Shang 1940 only - Jun 3 0:00 1:00 D
Rule Shang 1940 1941 - Oct 1 0:00 0 S
@@ -369,7 +343,7 @@
# historic timezones from some Taiwan websites. And yes, there are official
# Chinese names for these locales (before 1949).
#
-# From Jesper Norgaard Welen (2006-07-14):
+# From Jesper Nørgaard Welen (2006-07-14):
# I have investigated the timezones around 1970 on the
# http://www.astro.com/atlas site [with provinces and county
# boundaries summarized below].... A few other exceptions were two
@@ -380,65 +354,97 @@
# (could be true), for the moment I am assuming that those two
# counties are mistakes in the astro.com data.
-# From Paul Eggert (2008-02-11):
-# I just now checked Google News for western news sources that talk
-# about China's single time zone, and couldn't find anything before 1986
-# talking about China being in one time zone. (That article was: Jim
-# Mann, "A clumsy embrace for another western custom: China on daylight
-# time--sort of", Los Angeles Times, 1986-05-05. By the way, this
-# article confirms the tz database's data claiming that China began
-# observing daylight saving time in 1986.
+# From Paul Eggert (2014-06-30):
+# Alois Treindl kindly sent me translations of the following two sources:
#
-# From Thomas S. Mullaney (2008-02-11):
-# I think you're combining two subjects that need to treated
-# separately: daylight savings (which, you're correct, wasn't
-# implemented until the 1980s) and the unified time zone centered near
-# Beijing (which was implemented in 1949). Briefly, there was also a
-# "Lhasa Time" in Tibet and "Urumqi Time" in Xinjiang. The first was
-# ceased, and the second eventually recognized (again, in the 1980s).
+# (1)
+# Guo Qingsheng (National Time-Service Center, CAS, Xi'an 710600, China)
+# Beijing Time at the Beginning of the PRC
+# China Historical Materials of Science and Technology
+# (Zhongguo ke ji shi liao, 中国科技史料), Vol. 24, No. 1 (2003)
+# It gives evidence that at the beginning of the PRC, Beijing time was
+# officially apparent solar time! However, Guo also says that the
+# evidence is dubious, as the relevant institute of astronomy had not
+# been taken over by the PRC yet. It's plausible that apparent solar
+# time was announced but never implemented, and that people continued
+# to use UT+8. As the Shanghai radio station (and I presume the
+# observatory) was still under control of French missionaries, it
+# could well have ignored any such mandate.
#
-# From Paul Eggert (2008-06-30):
-# There seems to be a good chance China switched to a single time zone in 1949
-# rather than in 1980 as Shanks & Pottenger have it, but we don't have a
-# reliable documentary source saying so yet, so for now we still go with
-# Shanks & Pottenger.
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-# Changbai Time ("Long-white Time", Long-white = Heilongjiang area)
+# (2)
+# Guo Qing-sheng (Shaanxi Astronomical Observatory, CAS, Xi'an 710600, China)
+# A Study on the Standard Time Changes for the Past 100 Years in China
+# [undated and unknown publication location]
+# It says several things:
+# * The Qing dynasty used local apparent solar time throughout China.
+# * The Republic of China instituted Beijing mean solar time effective
+# the official calendar book of 1914.
+# * The French Concession in Shanghai set up signal stations in
+# French docks in the 1890s, controlled by Xujiahui (Zikawei)
+# Observatory and set to local mean time.
+# * "From the end of the 19th century" it changed to UT+8.
+# * Chinese Customs (by then reduced to a tool of foreign powers)
+# eventually standardized on this time for all ports, and it
+# became used by railways as well.
+# * In 1918 the Central Observatory proposed dividing China into
+# five time zones (see below for details). This caught on
+# at first only in coastal areas observing UT+8.
+# * During WWII all of China was in theory was at UT+7. In practice
+# this was ignored in the west, and I presume was ignored in
+# Japanese-occupied territory.
+# * Japanese-occupied Manchuria was at UT+9, i.e., Japan time.
+# * The five-zone plan was resurrected after WWII and officially put into
+# place (with some modifications) in March 1948. It's not clear
+# how well it was observed in areas under Nationalist control.
+# * The People's Liberation Army used UT+8 during the civil war.
+#
+# An AP article "Shanghai Internat'l Area Little Changed" in the
+# Lewiston (ME) Daily Sun (1939-05-29), p 17, said "Even the time is
+# different - the occupied districts going by Tokyo time, an hour
+# ahead of that prevailing in the rest of Shanghai." Guess that the
+# Xujiahui Observatory was under French control and stuck with UT+8.
+#
+# In earlier versions of this file, China had many separate Zone entries, but
+# this was based on what were apparently incorrect data in Shanks & Pottenger.
+# This has now been simplified to the two entries Asia/Shanghai and
+# Asia/Urumqi, with the others being links for backward compatibility.
+# Proposed in 1918 and theoretically in effect until 1949 (although in practice
+# mainly observed in coastal areas), the five zones were:
+#
+# Changbai Time ("Long-white Time", Long-white = Heilongjiang area) UT+8.5
+# Asia/Harbin (currently a link to Asia/Shanghai)
# Heilongjiang (except Mohe county), Jilin
-Zone Asia/Harbin 8:26:44 - LMT 1928 # or Haerbin
- 8:30 - CHAT 1932 Mar # Changbai Time
- 8:00 - CST 1940
- 9:00 - CHAT 1966 May
- 8:30 - CHAT 1980 May
- 8:00 PRC C%sT
-# Zhongyuan Time ("Central plain Time")
+#
+# Zhongyuan Time ("Central plain Time") UT+8
+# Asia/Shanghai
# most of China
-# Milne gives 8:05:56.7; round to nearest.
-Zone Asia/Shanghai 8:05:57 - LMT 1928
- 8:00 Shang C%sT 1949
- 8:00 PRC C%sT
-# Long-shu Time (probably due to Long and Shu being two names of that area)
+# This currently represents most other zones as well,
+# as apparently these regions have been the same since 1970.
+# Milne gives 8:05:43.2 for Xujiahui Observatory time; round to nearest.
+# Guo says Shanghai switched to UT+8 "from the end of the 19th century".
+#
+# Long-shu Time (probably due to Long and Shu being two names of that area) UT+7
+# Asia/Chongqing (currently a link to Asia/Shanghai)
# Guangxi, Guizhou, Hainan, Ningxia, Sichuan, Shaanxi, and Yunnan;
# most of Gansu; west Inner Mongolia; west Qinghai; and the Guangdong
# counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing,
# Yangchun, Yangjiang, Yu'nan, and Yunfu.
-Zone Asia/Chongqing 7:06:20 - LMT 1928 # or Chungking
- 7:00 - LONT 1980 May # Long-shu Time
- 8:00 PRC C%sT
-# Xin-zang Time ("Xinjiang-Tibet Time")
+#
+# Xin-zang Time ("Xinjiang-Tibet Time") UT+6
+# Asia/Urumqi
+# This currently represents Kunlun Time as well,
+# as apparently the two regions have been the same since 1970.
# The Gansu counties Aksay, Anxi, Dunhuang, Subei; west Qinghai;
# the Guangdong counties Xuwen, Haikang, Suixi, Lianjiang,
# Zhanjiang, Wuchuan, Huazhou, Gaozhou, Maoming, Dianbai, and Xinyi;
# east Tibet, including Lhasa, Chamdo, Shigaise, Jimsar, Shawan and Hutubi;
-# east Xinjiang, including Urumqi, Turpan, Karamay, Korla, Minfeng, Jinghe,
+# east Xinjiang, including Ürümqi, Turpan, Karamay, Korla, Minfeng, Jinghe,
# Wusu, Qiemo, Xinyan, Wulanwusu, Jinghe, Yumin, Tacheng, Tuoli, Emin,
# Shihezi, Changji, Yanqi, Heshuo, Tuokexun, Tulufan, Shanshan, Hami,
# Fukang, Kuitun, Kumukuli, Miquan, Qitai, and Turfan.
-Zone Asia/Urumqi 5:50:20 - LMT 1928 # or Urumchi
- 6:00 - URUT 1980 May # Urumqi Time
- 8:00 PRC C%sT
-# Kunlun Time
+#
+# Kunlun Time UT+5.5
+# Asia/Kashgar (currently a link to Asia/Urumqi)
# West Tibet, including Pulan, Aheqi, Shufu, Shule;
# West Xinjiang, including Aksu, Atushi, Yining, Hetian, Cele, Luopu, Nileke,
# Zhaosu, Tekesi, Gongliu, Chabuchaer, Huocheng, Bole, Pishan, Suiding,
@@ -455,9 +461,9 @@
# population of Xinjiang, typically use "Xinjiang time" which is two
# hours behind Beijing time, or UTC +0600. The government of the Xinjiang
# Uyghur Autonomous Region, (XAUR, or just Xinjiang for short) as well as
-# local governments such as the Urumqi city government use both times in
+# local governments such as the Ürümqi city government use both times in
# publications, referring to what is popularly called Xinjiang time as
-# "Urumqi time." When Uyghurs make an appointment in the Uyghur language
+# "Ürümqi time." When Uyghurs make an appointment in the Uyghur language
# they almost invariably use Xinjiang time.
#
# (Their ethnic Han compatriots would typically have no clue of its
@@ -469,21 +475,6 @@
# the province not having dual times but four times in use at the same
# time. Some areas remained on standard Xinjiang time or Beijing time and
# others moving their clocks ahead.)
-#
-# ...an example of an official website using of Urumqi time.
-#
-# The first few lines of the Google translation of
-# <a href="http://www.fjysgl.gov.cn/show.aspx?id=2379&cid=39">
-# http://www.fjysgl.gov.cn/show.aspx?id=2379&cid=39
-# </a>
-# (retrieved 2009-10-13)
-# > Urumqi fire seven people are missing the alleged losses of at least
-# > 500 million yuan
-# >
-# > (Reporter Dong Liu) the day before 20:20 or so (Urumqi Time 18:20),
-# > Urumqi City Department of International Plaza Luther Qiantang River
-# > burst fire. As of yesterday, 18:30, Urumqi City Fire officers and men
-# > have worked continuously for 22 hours...
# From Luther Ma (2009-11-19):
# With the risk of being redundant to previous answers these are the most common
@@ -494,7 +485,7 @@
# 3. Urumqi...
# 4. Kashgar...
# ...
-# 5. It seems that Uyghurs in Urumqi has been using Xinjiang since at least the
+# 5. It seems that Uyghurs in Ürümqi has been using Xinjiang since at least the
# 1960's. I know of one Han, now over 50, who grew up in the surrounding
# countryside and used Xinjiang time as a child.
#
@@ -506,10 +497,55 @@
# Autonomous Region under the PRC. (Before that Uyghurs, of course, would also
# not be using Beijing time, but some local time.)
-Zone Asia/Kashgar 5:03:56 - LMT 1928 # or Kashi or Kaxgar
- 5:30 - KAST 1940 # Kashgar Time
- 5:00 - KAST 1980 May
+# From David Cochrane (2014-03-26):
+# Just a confirmation that Ürümqi time was implemented in Ürümqi on 1 Feb 1986:
+# http://content.time.com/time/magazine/article/0,9171,960684,00.html
+
+# From Luther Ma (2014-04-22):
+# I have interviewed numerous people of various nationalities and from
+# different localities in Xinjiang and can confirm the information in Guo's
+# report regarding Xinjiang, as well as the Time article reference by David
+# Cochrane. Whether officially recognized or not (and both are officially
+# recognized), two separate times have been in use in Xinjiang since at least
+# the Cultural Revolution: Xinjiang Time (XJT), aka Ürümqi Time or local time;
+# and Beijing Time. There is no confusion in Xinjiang as to which name refers
+# to which time. Both are widely used in the province, although in some
+# population groups might be use one to the exclusion of the other. The only
+# problem is that computers and smart phones list Ürümqi (or Kashgar) as
+# having the same time as Beijing.
+
+# From Paul Eggert (2014-06-30):
+# In the early days of the PRC, Tibet was given its own time zone (UT+6) but
+# this was withdrawn in 1959 and never reinstated; see Tubten Khétsun,
+# Memories of life in Lhasa under Chinese Rule, Columbia U Press, ISBN
+# 978-0231142861 (2008), translator's introduction by Matthew Akester, p x.
+# As this is before our 1970 cutoff, Tibet doesn't need a separate zone.
+#
+# Xinjiang Time is well-documented as being officially recognized. E.g., see
+# "The Working-Calendar for The Xinjiang Uygur Autonomous Region Government"
+# <http://www.sinkiang.gov.cn/service/ourworking/> (2014-04-22).
+# Unfortunately, we have no good records of time in Xinjiang before 1986.
+# During the 20th century parts of Xinjiang were ruled by the Qing dynasty,
+# the Republic of China, various warlords, the First and Second East Turkestan
+# Republics, the Soviet Union, the Kuomintang, and the People's Republic of
+# China, and tracking down all these organizations' timekeeping rules would be
+# quite a trick. Approximate this lost history by a transition from LMT to
+# XJT at the start of 1928, the year of accession of the warlord Jin Shuren,
+# which happens to be the date given by Shanks & Pottenger (no doubt as a
+# guess) as the transition from LMT. Ignore the usage of UT+8 before
+# 1986-02-01 under the theory that the transition date to UT+8 is unknown and
+# that the sort of users who prefer Asia/Urumqi now typically ignored the
+# UT+8 mandate back then.
+
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+# Beijing time, used throughout China; represented by Shanghai.
+Zone Asia/Shanghai 8:05:43 - LMT 1901
+ 8:00 Shang C%sT 1949
8:00 PRC C%sT
+# Xinjiang time, used by many in western China; represented by Ürümqi / Ürümchi
+# / Wulumuqi. (Please use Asia/Shanghai if you prefer Beijing time.)
+Zone Asia/Urumqi 5:50:20 - LMT 1928
+ 6:00 - XJT
# Hong Kong (Xianggang)
@@ -524,15 +560,11 @@
# and incorrect rules. Although the exact switch over time is missing, I
# think 3:30 is correct. The official DST record for Hong Kong can be
# obtained from
-# <a href="http://www.hko.gov.hk/gts/time/Summertime.htm">
# http://www.hko.gov.hk/gts/time/Summertime.htm
-# </a>.
# From Arthur David Olson (2009-10-28):
# Here are the dates given at
-# <a href="http://www.hko.gov.hk/gts/time/Summertime.htm">
# http://www.hko.gov.hk/gts/time/Summertime.htm
-# </a>
# as of 2009-10-28:
# Year Period
# 1941 1 Apr to 30 Sep
@@ -612,35 +644,113 @@
# Taiwan
-# Shanks & Pottenger write that Taiwan observed DST during 1945, when it
-# was still controlled by Japan. This is hard to believe, but we don't
-# have any other information.
-
# From smallufo (2010-04-03):
-# According to Taiwan's CWB,
-# <a href="http://www.cwb.gov.tw/V6/astronomy/cdata/summert.htm">
+# According to Taiwan's CWB [Central Weather Bureau],
# http://www.cwb.gov.tw/V6/astronomy/cdata/summert.htm
-# </a>
# Taipei has DST in 1979 between July 1st and Sep 30.
-# From Arthur David Olson (2010-04-07):
-# Here's Google's translation of the table at the bottom of the "summert.htm" page:
-# Decade Name Start and end date
-# Republic of China 34 years to 40 years (AD 1945-1951 years) Summer Time May 1 to September 30
-# 41 years of the Republic of China (AD 1952) Daylight Saving Time March 1 to October 31
-# Republic of China 42 years to 43 years (AD 1953-1954 years) Daylight Saving Time April 1 to October 31
-# In the 44 years to 45 years (AD 1955-1956 years) Daylight Saving Time April 1 to September 30
-# Republic of China 46 years to 48 years (AD 1957-1959) Summer Time April 1 to September 30
-# Republic of China 49 years to 50 years (AD 1960-1961) Summer Time June 1 to September 30
-# Republic of China 51 years to 62 years (AD 1962-1973 years) Stop Summer Time
-# Republic of China 63 years to 64 years (1974-1975 AD) Daylight Saving Time April 1 to September 30
-# Republic of China 65 years to 67 years (1976-1978 AD) Stop Daylight Saving Time
-# Republic of China 68 years (AD 1979) Daylight Saving Time July 1 to September 30
-# Republic of China since 69 years (AD 1980) Stop Daylight Saving Time
+# From Yu-Cheng Chuang (2013-07-12):
+# On Dec 28, 1895, the Meiji Emperor announced Ordinance No. 167 of
+# Meiji Year 28 "The clause about standard time", mentioned that
+# Taiwan and Penghu Islands, as well as Yaeyama and Miyako Islands
+# (both in Okinawa) adopt the Western Standard Time which is based on
+# 120E. The adoption began from Jan 1, 1896. The original text can be
+# found on Wikisource:
+# http://ja.wikisource.org/wiki/標準時ニ關スル件_(公布時)
+# ... This could be the first adoption of time zone in Taiwan, because
+# during the Qing Dynasty, it seems that there was no time zone
+# declared officially.
+#
+# Later, in the beginning of World War II, on Sep 25, 1937, the Showa
+# Emperor announced Ordinance No. 529 of Showa Year 12 "The clause of
+# revision in the ordinance No. 167 of Meiji year 28 about standard
+# time", in which abolished the adoption of Western Standard Time in
+# western islands (listed above), which means the whole Japan
+# territory, including later occupations, adopt Japan Central Time
+# (UTC+9). The adoption began on Oct 1, 1937. The original text can
+# be found on Wikisource:
+# http://ja.wikisource.org/wiki/明治二十八年勅令第百六十七號標準時ニ關スル件中改正ノ件
+#
+# That is, the time zone of Taipei switched to UTC+9 on Oct 1, 1937.
+
+# From Yu-Cheng Chuang (2014-07-02):
+# I've found more evidence about when the time zone was switched from UTC+9
+# back to UTC+8 after WW2. I believe it was on Sep 21, 1945. In a document
+# during Japanese era [1] in which the officer told the staff to change time
+# zone back to Western Standard Time (UTC+8) on Sep 21. And in another
+# history page of National Cheng Kung University [2], on Sep 21 there is a
+# note "from today, switch back to Western Standard Time". From these two
+# materials, I believe that the time zone change happened on Sep 21. And
+# today I have found another monthly journal called "The Astronomical Herald"
+# from The Astronomical Society of Japan [3] in which it mentioned the fact
+# that:
+#
+# 1. Standard Time of the Country (Japan) was adopted on Jan 1, 1888, using
+# the time at 135E (GMT+9)
+#
+# 2. Standard Time of the Country was renamed to Central Standard Time, on Jan
+# 1, 1898, and on the same day, the new territories Taiwan and Penghu islands,
+# as well as Yaeyama and Miyako islands, adopted a new time zone called
+# Western Standard Time, which is in GMT+8.
+#
+# 3. Western Standard Time was deprecated on Sep 30, 1937. From then all the
+# territories of Japan adopted the same time zone, which is Central Standard
+# Time.
+#
+# [1] Academica Historica, Taiwan:
+# http://163.29.208.22:8080/govsaleShowImage/connect_img.php?s=00101738900090036&e=00101738900090037
+# [2] Nat'l Cheng Kung University 70th Anniversary Special Site:
+# http://www.ncku.edu.tw/~ncku70/menu/001/01_01.htm
+# [3] Yukio Niimi, The Standard Time in Japan (1997), p.475:
+# http://www.asj.or.jp/geppou/archive_open/1997/pdf/19971001c.pdf
+
+# Yu-Cheng Chuang (2014-07-03):
+# I finally have found the real official gazette about changing back to
+# Western Standard Time on Sep 21 in Taiwan. It's Taiwan Governor-General
+# Bulletin No. 386 in Showa 20 years (1945), published on Sep 19, 1945. [1] ...
+# [It] abolishes Bulletin No. 207 in Showa 12 years (1937), which is a local
+# bulletin in Taiwan for that Ordinance No. 529. It also mentioned that 1am on
+# Sep 21, 1945 will be 12am on Sep 21. I think this bulletin is much more
+# official than the one I mentioned in my first mail, because it's from the
+# top-level government in Taiwan. If you're going to quote any resource, this
+# would be a good one.
+# [1] Taiwan Governor-General Gazette, No. 1018, Sep 19, 1945:
+# http://db2.th.gov.tw/db2/view/viewImg.php?imgcode=0072031018a&num=19&bgn=019&end=019&otherImg=&type=gener
+
+# From Yu-Cheng Chuang (2014-07-02):
+# In 1946, DST in Taiwan was from May 15 and ended on Sep 30. The info from
+# Central Weather Bureau website was not correct.
+#
+# Original Bulletin:
+# http://subtpg.tpg.gov.tw/og/image2.asp?f=03502F0AKM1AF
+# http://subtpg.tpg.gov.tw/og/image2.asp?f=0350300AKM1B0 (cont.)
+#
+# In 1947, DST in Taiwan was expanded to Oct 31. There is a backup of that
+# telegram announcement from Taiwan Province Government:
+#
+# http://subtpg.tpg.gov.tw/og/image2.asp?f=0360310AKZ431
+#
+# Here is a brief translation:
+#
+# The Summer Time this year is adopted from midnight Apr 15 until Sep 20
+# midnight. To save (energy?) consumption, we're expanding Summer Time
+# adoption till Oct 31 midnight.
+#
+# The Central Weather Bureau website didn't mention that, however it can
+# be found from historical government announcement database.
+
+# From Paul Eggert (2014-07-03):
+# As per Yu-Cheng Chuang, say that Taiwan was at UT+9 from 1937-10-01
+# until 1945-09-21 at 01:00, overriding Shanks & Pottenger.
+# Likewise, use Yu-Cheng Chuang's data for DST in Taiwan.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Taiwan 1945 1951 - May 1 0:00 1:00 D
-Rule Taiwan 1945 1951 - Oct 1 0:00 0 S
+Rule Taiwan 1946 only - May 15 0:00 1:00 D
+Rule Taiwan 1946 only - Oct 1 0:00 0 S
+Rule Taiwan 1947 only - Apr 15 0:00 1:00 D
+Rule Taiwan 1947 only - Nov 1 0:00 0 S
+Rule Taiwan 1948 1951 - May 1 0:00 1:00 D
+Rule Taiwan 1948 1951 - Oct 1 0:00 0 S
Rule Taiwan 1952 only - Mar 1 0:00 1:00 D
Rule Taiwan 1952 1954 - Nov 1 0:00 0 S
Rule Taiwan 1953 1959 - Apr 1 0:00 1:00 D
@@ -648,11 +758,14 @@
Rule Taiwan 1960 1961 - Jun 1 0:00 1:00 D
Rule Taiwan 1974 1975 - Apr 1 0:00 1:00 D
Rule Taiwan 1974 1975 - Oct 1 0:00 0 S
-Rule Taiwan 1979 only - Jun 30 0:00 1:00 D
-Rule Taiwan 1979 only - Sep 30 0:00 0 S
+Rule Taiwan 1979 only - Jul 1 0:00 1:00 D
+Rule Taiwan 1979 only - Oct 1 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Taipei 8:06:00 - LMT 1896 # or Taibei or T'ai-pei
+# Taipei or Taibei or T'ai-pei
+Zone Asia/Taipei 8:06:00 - LMT 1896 Jan 1
+ 8:00 - JWST 1937 Oct 1
+ 9:00 - JST 1945 Sep 21 1:00
8:00 Taiwan C%sT
# Macau (Macao, Aomen)
@@ -672,7 +785,7 @@
Rule Macau 1978 1980 - Apr Sun>=15 0:00 1:00 S
Rule Macau 1978 1980 - Oct Sun>=15 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Macau 7:34:20 - LMT 1912
+Zone Asia/Macau 7:34:20 - LMT 1912 Jan 1
8:00 Macau MO%sT 1999 Dec 20 # return to China
8:00 PRC C%sT
@@ -721,7 +834,7 @@
# republic has changed its time zone back to that of Moscow. As a result it
# is now just four hours ahead of Greenwich Mean Time, rather than five hours
# ahead. The switch was decreed by the pro-Western president of Georgia,
-# Mikhail Saakashvili, who said the change was partly prompted by the process
+# Mikheil Saakashvili, who said the change was partly prompted by the process
# of integration into Europe.
# From Teimuraz Abashidze (2005-11-07):
@@ -734,29 +847,31 @@
# I don't know what can be done, especially knowing that some years ago our
# DST rules where changed THREE TIMES during one month.
+# Milne 1899 says Tbilisi (Tiflis) time was 2:59:05.7.
+# Byalokoz 1919 says Georgia was 2:59:11.
+# Go with Byalokoz.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Tbilisi 2:59:16 - LMT 1880
- 2:59:16 - TBMT 1924 May 2 # Tbilisi Mean Time
+Zone Asia/Tbilisi 2:59:11 - LMT 1880
+ 2:59:11 - TBMT 1924 May 2 # Tbilisi Mean Time
3:00 - TBIT 1957 Mar # Tbilisi Time
- 4:00 RussiaAsia TBI%sT 1991 Mar 31 2:00s
+ 4:00 RussiaAsia TBI%sT 1991 Mar 31 2:00s
3:00 1:00 TBIST 1991 Apr 9 # independence
- 3:00 RussiaAsia GE%sT 1992 # Georgia Time
+ 3:00 RussiaAsia GE%sT 1992 # Georgia Time
3:00 E-EurAsia GE%sT 1994 Sep lastSun
4:00 E-EurAsia GE%sT 1996 Oct lastSun
4:00 1:00 GEST 1997 Mar lastSun
4:00 E-EurAsia GE%sT 2004 Jun 27
- 3:00 RussiaAsia GE%sT 2005 Mar lastSun 2:00
+ 3:00 RussiaAsia GE%sT 2005 Mar lastSun 2:00
4:00 - GET
# East Timor
# See Indonesia for the 1945 transition.
-# From Joao Carrascalao, brother of the former governor of East Timor, in
-# <a href="http://etan.org/et99c/december/26-31/30ETMAY.htm">
+# From João Carrascalão, brother of the former governor of East Timor, in
# East Timor may be late for its millennium
-# </a> (1999-12-26/31):
+# <http://etan.org/et99c/december/26-31/30ETMAY.htm> (1999-12-26/31):
# Portugal tried to change the time forward in 1974 because the sun
# rises too early but the suggestion raised a lot of problems with the
# Timorese and I still don't think it would work today because it
@@ -766,25 +881,25 @@
# We don't have any record of the above attempt.
# Most likely our records are incomplete, but we have no better data.
-# <a href="http://www.hri.org/news/world/undh/last/00-08-16.undh.html">
# From Manoel de Almeida e Silva, Deputy Spokesman for the UN Secretary-General
-# (2000-08-16)</a>:
+# http://www.hri.org/news/world/undh/2000/00-08-16.undh.html
+# (2000-08-16):
# The Cabinet of the East Timor Transition Administration decided
# today to advance East Timor's time by one hour. The time change,
# which will be permanent, with no seasonal adjustment, will happen at
# midnight on Saturday, September 16.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Dili 8:22:20 - LMT 1912
+Zone Asia/Dili 8:22:20 - LMT 1912 Jan 1
8:00 - TLT 1942 Feb 21 23:00 # E Timor Time
9:00 - JST 1945 Sep 23
9:00 - TLT 1976 May 3
- 8:00 - WITA 2000 Sep 17 00:00
+ 8:00 - WITA 2000 Sep 17 0:00
9:00 - TLT
# India
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata
+Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata
5:53:20 - HMT 1941 Oct # Howrah Mean Time?
6:30 - BURT 1942 May 15 # Burma Time
5:30 - IST 1942 Sep
@@ -797,8 +912,12 @@
# Indonesia
#
+# From Paul Eggert (2014-09-06):
+# The 1876 Report of the Secretary of the [US] Navy, p 306 says that Batavia
+# civil time was 7:07:12.5; round to even for Jakarta.
+#
# From Gwillim Law (2001-05-28), overriding Shanks & Pottenger:
-# <http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime>
+# http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime
# says that Indonesia's time zones changed on 1988-01-01. Looking at some
# time zone maps, I think that must refer to Western Borneo (Kalimantan Barat
# and Kalimantan Tengah) switching from UTC+8 to UTC+7.
@@ -810,7 +929,7 @@
# other formal surrender ceremonies were September 9, 11, and 13, plus
# September 12 for the regional surrender to Mountbatten in Singapore.
# These would be the earliest possible times for a change.
-# Regimes horaires pour le monde entier, by Henri Le Corre, (Editions
+# Régimes horaires pour le monde entier, by Henri Le Corre, (Éditions
# Traditionnelles, 1987, Paris) says that Java and Madura switched
# from JST to UTC+07:30 on 1945-09-23, and gives 1944-09-01 for Jayapura
# (Hollandia). For now, assume all Indonesian locations other than Jayapura
@@ -835,7 +954,7 @@
# Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
# but this must be a typo.
7:07:12 - BMT 1923 Dec 31 23:47:12 # Batavia
- 7:20 - JAVT 1932 Nov # Java Time
+ 7:20 - JAVT 1932 Nov # Java Time
7:30 - WIB 1942 Mar 23
9:00 - JST 1945 Sep 23
7:30 - WIB 1948 May
@@ -861,7 +980,7 @@
# Maluku Islands, West Papua, Papua
Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
9:00 - WIT 1944 Sep 1
- 9:30 - CST 1964
+ 9:30 - ACST 1964
9:00 - WIT
# Iran
@@ -927,7 +1046,7 @@
# Several of my users have reported that Iran will not observe DST anymore:
# http://www.irna.ir/en/news/view/line-17/0603193812164948.htm
#
-# From Reuters (2007-09-16), with a heads-up from Jesper Norgaard Welen:
+# From Reuters (2007-09-16), with a heads-up from Jesper Nørgaard Welen:
# ... the Guardian Council ... approved a law on Sunday to re-introduce
# daylight saving time ...
# http://uk.reuters.com/article/oilRpt/idUKBLA65048420070916
@@ -993,7 +1112,7 @@
Rule Iran 2036 2037 - Sep 21 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tehran 3:25:44 - LMT 1916
- 3:25:44 - TMT 1946 # Tehran Mean Time
+ 3:25:44 - TMT 1946 # Tehran Mean Time
3:30 - IRST 1977 Nov
4:00 Iran IR%sT 1979
3:30 Iran IR%sT
@@ -1018,17 +1137,11 @@
# From Steffen Thorsen (2008-03-10):
# The cabinet in Iraq abolished DST last week, according to the following
# news sources (in Arabic):
-# <a href="http://www.aljeeran.net/wesima_articles/news-20080305-98602.html">
# http://www.aljeeran.net/wesima_articles/news-20080305-98602.html
-# </a>
-# <a href="http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10">
# http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10
-# </a>
#
# We have published a short article in English about the change:
-# <a href="http://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html">
# http://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html
-# </a>
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Iraq 1982 only - May 1 0:00 1:00 D
@@ -1037,14 +1150,14 @@
Rule Iraq 1984 1985 - Apr 1 0:00 1:00 D
Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 S
Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 D
-# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the `:01' is a typo.
+# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the ':01' is a typo.
# Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this.
#
Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 D
Rule Iraq 1991 2007 - Oct 1 3:00s 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Baghdad 2:57:40 - LMT 1890
- 2:57:36 - BMT 1918 # Baghdad Mean Time?
+ 2:57:36 - BMT 1918 # Baghdad Mean Time?
3:00 - AST 1982 May
3:00 Iraq A%sT
@@ -1272,7 +1385,7 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Jerusalem 2:20:54 - LMT 1880
- 2:20:40 - JMT 1918 # Jerusalem Mean Time?
+ 2:20:40 - JMT 1918 # Jerusalem Mean Time?
2:00 Zion I%sT
@@ -1281,15 +1394,15 @@
# Japan
-# `9:00' and `JST' is from Guy Harris.
+# '9:00' and 'JST' is from Guy Harris.
# From Paul Eggert (1995-03-06):
# Today's _Asahi Evening News_ (page 4) reports that Japan had
-# daylight saving between 1948 and 1951, but ``the system was discontinued
-# because the public believed it would lead to longer working hours.''
+# daylight saving between 1948 and 1951, but "the system was discontinued
+# because the public believed it would lead to longer working hours."
-# From Mayumi Negishi in the 2005-08-10 Japan Times
-# <http://www.japantimes.co.jp/cgi-bin/getarticle.pl5?nn20050810f2.htm>:
+# From Mayumi Negishi in the 2005-08-10 Japan Times:
+# http://www.japantimes.co.jp/cgi-bin/getarticle.pl5?nn20050810f2.htm
# Occupation authorities imposed daylight-saving time on Japan on
# [1948-05-01].... But lack of prior debate and the execution of
# daylight-saving time just three days after the bill was passed generated
@@ -1313,7 +1426,8 @@
# From Hideyuki Suzuki (1998-11-09):
# 'Tokyo' usually stands for the former location of Tokyo Astronomical
-# Observatory: E 139 44' 40".90 (9h 18m 58s.727), N 35 39' 16".0.
+# Observatory: 139 degrees 44' 40.90" E (9h 18m 58.727s),
+# 35 degrees 39' 16.0" N.
# This data is from 'Rika Nenpyou (Chronological Scientific Tables) 1996'
# edited by National Astronomical Observatory of Japan....
# JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST).
@@ -1321,10 +1435,10 @@
# From Hideyuki Suzuki (1998-11-16):
# The ordinance No. 51 (1886) established "standard time" in Japan,
-# which stands for the time on E 135 degree.
+# which stands for the time on 135 degrees E.
# In the ordinance No. 167 (1895), "standard time" was renamed to "central
# standard time". And the same ordinance also established "western standard
-# time", which stands for the time on E 120 degree.... But "western standard
+# time", which stands for the time on 120 degrees E.... But "western standard
# time" was abolished in the ordinance No. 529 (1937). In the ordinance No.
# 167, there is no mention regarding for what place western standard time is
# standard....
@@ -1332,27 +1446,33 @@
# I wrote "ordinance" above, but I don't know how to translate.
# In Japanese it's "chokurei", which means ordinance from emperor.
-# Shanks & Pottenger claim JST in use since 1896, and that a few
-# places (e.g. Ishigaki) use +0800; go with Suzuki. Guess that all
-# ordinances took effect on Jan 1.
+# From Yu-Cheng Chuang (2013-07-12):
+# ...the Meiji Emperor announced Ordinance No. 167 of Meiji Year 28 "The clause
+# about standard time" ... The adoption began from Jan 1, 1896.
+# http://ja.wikisource.org/wiki/標準時ニ關スル件_(公布時)
+#
+# ...the Showa Emperor announced Ordinance No. 529 of Showa Year 12 ... which
+# means the whole Japan territory, including later occupations, adopt Japan
+# Central Time (UTC+9). The adoption began on Oct 1, 1937.
+# http://ja.wikisource.org/wiki/明治二十八年勅令第百六十七號標準時ニ關スル件中改正ノ件
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
- 9:00 - JST 1896
- 9:00 - CJT 1938
+ 9:00 - JST 1896 Jan 1
+ 9:00 - JCST 1937 Oct 1
9:00 Japan J%sT
# Since 1938, all Japanese possessions have been like Asia/Tokyo.
# Jordan
#
-# From <a href="http://star.arabia.com/990701/JO9.html">
-# Jordan Week (1999-07-01) </a> via Steffen Thorsen (1999-09-09):
+# From <http://star.arabia.com/990701/JO9.html>
+# Jordan Week (1999-07-01) via Steffen Thorsen (1999-09-09):
# Clocks in Jordan were forwarded one hour on Wednesday at midnight,
# in accordance with the government's decision to implement summer time
# all year round.
#
-# From <a href="http://star.arabia.com/990930/JO9.html">
-# Jordan Week (1999-09-30) </a> via Steffen Thorsen (1999-11-09):
+# From <http://star.arabia.com/990930/JO9.html>
+# Jordan Week (1999-09-30) via Steffen Thorsen (1999-11-09):
# Winter time starts today Thursday, 30 September. Clocks will be turned back
# by one hour. This is the latest government decision and it's final!
# The decision was taken because of the increase in working hours in
@@ -1372,9 +1492,7 @@
# From Steffen Thorsen (2009-04-02):
# This single one might be good enough, (2009-03-24, Arabic):
-# <a href="http://petra.gov.jo/Artical.aspx?Lng=2&Section=8&Artical=95279">
# http://petra.gov.jo/Artical.aspx?Lng=2&Section=8&Artical=95279
-# </a>
#
# Google's translation:
#
@@ -1465,9 +1583,8 @@
# - Qyzylorda switched from +5:00 to +6:00 on 1992-01-19 02:00.
# - Oral switched from +5:00 to +4:00 in spring 1989.
-# <a href="http://www.kazsociety.org.uk/news/2005/03/30.htm">
-# From Kazakhstan Embassy's News Bulletin #11 (2005-03-21):
-# </a>
+# From Kazakhstan Embassy's News Bulletin #11
+# <http://www.kazsociety.org.uk/news/2005/03/30.htm> (2005-03-21):
# The Government of Kazakhstan passed a resolution March 15 abolishing
# daylight saving time citing lack of economic benefits and health
# complications coupled with a decrease in productivity.
@@ -1500,10 +1617,10 @@
6:00 - KIZT 1982 Apr 1
5:00 RussiaAsia KIZ%sT 1991
5:00 - KIZT 1991 Dec 16 # independence
- 5:00 - QYZT 1992 Jan 19 2:00
+ 5:00 - QYZT 1992 Jan 19 2:00
6:00 RussiaAsia QYZ%sT 2005 Mar 15
6:00 - QYZT
-# Aqtobe (aka Aktobe, formerly Akt'ubinsk)
+# Aqtobe (aka Aktobe, formerly Aktyubinsk)
Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2
4:00 - AKTT 1930 Jun 21 # Aktyubinsk Time
5:00 - AKTT 1981 Apr 1
@@ -1523,7 +1640,7 @@
6:00 - SHET 1982 Apr 1
5:00 RussiaAsia SHE%sT 1991
5:00 - SHET 1991 Dec 16 # independence
- 5:00 RussiaAsia AQT%sT 1995 Mar lastSun 2:00 # Aqtau Time
+ 5:00 RussiaAsia AQT%sT 1995 Mar lastSun 2:00 # Aqtau Time
4:00 RussiaAsia AQT%sT 2005 Mar 15
5:00 - AQTT
# West Kazakhstan
@@ -1532,7 +1649,7 @@
5:00 - URAT 1981 Apr 1
5:00 1:00 URAST 1981 Oct 1
6:00 - URAT 1982 Apr 1
- 5:00 RussiaAsia URA%sT 1989 Mar 26 2:00
+ 5:00 RussiaAsia URA%sT 1989 Mar 26 2:00
4:00 RussiaAsia URA%sT 1991
4:00 - URAT 1991 Dec 16 # independence
4:00 RussiaAsia ORA%sT 2005 Mar 15 # Oral Time
@@ -1543,7 +1660,7 @@
# From Paul Eggert (2005-08-15):
# According to an article dated today in the Kyrgyzstan Development Gateway
-# <http://eng.gateway.kg/cgi-bin/page.pl?id=1&story_name=doc9979.shtml>
+# http://eng.gateway.kg/cgi-bin/page.pl?id=1&story_name=doc9979.shtml
# Kyrgyzstan is canceling the daylight saving time system. I take the article
# to mean that they will leave their clocks at 6 hours ahead of UTC.
# From Malik Abdugaliev (2005-09-21):
@@ -1558,68 +1675,92 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2
5:00 - FRUT 1930 Jun 21 # Frunze Time
- 6:00 RussiaAsia FRU%sT 1991 Mar 31 2:00s
- 5:00 1:00 FRUST 1991 Aug 31 2:00 # independence
- 5:00 Kyrgyz KG%sT 2005 Aug 12 # Kyrgyzstan Time
+ 6:00 RussiaAsia FRU%sT 1991 Mar 31 2:00s
+ 5:00 1:00 FRUST 1991 Aug 31 2:00 # independence
+ 5:00 Kyrgyz KG%sT 2005 Aug 12 # Kyrgyzstan Time
6:00 - KGT
###############################################################################
# Korea (North and South)
-# From Annie I. Bang (2006-07-10) in
-# <http://www.koreaherald.co.kr/SITE/data/html_dir/2006/07/10/200607100012.asp>:
-# The Ministry of Commerce, Industry and Energy has already
-# commissioned a research project [to reintroduce DST] and has said
-# the system may begin as early as 2008.... Korea ran a daylight
-# saving program from 1949-61 but stopped it during the 1950-53 Korean War.
+# From Annie I. Bang (2006-07-10):
+# http://www.koreaherald.com/view.php?ud=200607100012
+# Korea ran a daylight saving program from 1949-61 but stopped it
+# during the 1950-53 Korean War. The system was temporarily enforced
+# between 1987 and 1988 ...
-# From Shanks & Pottenger:
+# From Sanghyuk Jung (2014-10-29):
+# http://mm.icann.org/pipermail/tz/2014-October/021830.html
+# According to the Korean Wikipedia
+# http://ko.wikipedia.org/wiki/한국_표준시
+# [oldid=12896437 2014-09-04 08:03 UTC]
+# DST in Republic of Korea was as follows.... And I checked old
+# newspapers in Korean, all articles correspond with data in Wikipedia.
+# For example, the article in 1948 (Korean Language) proved that DST
+# started at June 1 in that year. For another example, the article in
+# 1988 said that DST started at 2:00 AM in that year.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule ROK 1960 only - May 15 0:00 1:00 D
-Rule ROK 1960 only - Sep 13 0:00 0 S
-Rule ROK 1987 1988 - May Sun>=8 0:00 1:00 D
-Rule ROK 1987 1988 - Oct Sun>=8 0:00 0 S
+Rule ROK 1948 only - Jun 1 0:00 1:00 D
+Rule ROK 1948 only - Sep 13 0:00 0 S
+Rule ROK 1949 only - Apr 3 0:00 1:00 D
+Rule ROK 1949 1951 - Sep Sun>=8 0:00 0 S
+Rule ROK 1950 only - Apr 1 0:00 1:00 D
+Rule ROK 1951 only - May 6 0:00 1:00 D
+Rule ROK 1955 only - May 5 0:00 1:00 D
+Rule ROK 1955 only - Sep 9 0:00 0 S
+Rule ROK 1956 only - May 20 0:00 1:00 D
+Rule ROK 1956 only - Sep 30 0:00 0 S
+Rule ROK 1957 1960 - May Sun>=1 0:00 1:00 D
+Rule ROK 1957 1960 - Sep Sun>=18 0:00 0 S
+Rule ROK 1987 1988 - May Sun>=8 2:00 1:00 D
+Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S
+
+# From Paul Eggert (2014-10-30):
+# The Korean Wikipedia entry gives the following sources for UT offsets:
+#
+# 1908: Official Journal Article No. 3994 (Edict No. 5)
+# 1912: Governor-General of Korea Official Gazette Issue No. 367
+# (Announcement No. 338)
+# 1954: Presidential Decree No. 876 (1954-03-17)
+# 1961: Law No. 676 (1961-08-07)
+# 1987: Law No. 3919 (1986-12-31)
+#
+# The Wikipedia entry also has confusing information about a change
+# to UT+9 in April 1910, but then what would be the point of the later change
+# to UT+9 on 1912-01-01? Omit the 1910 change for now.
+#
+# I guessed that time zone abbreviations through 1945 followed the same
+# rules as discussed under Taiwan, with nominal switches from JST to KST
+# when the respective cities were taken over by the Allies after WWII.
+#
+# For Pyongyang we have no information; guess no changes since World War II.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Seoul 8:27:52 - LMT 1890
- 8:30 - KST 1904 Dec
- 9:00 - KST 1928
- 8:30 - KST 1932
+Zone Asia/Seoul 8:27:52 - LMT 1908 Apr 1
+ 8:30 - KST 1912 Jan 1
+ 9:00 - JCST 1937 Oct 1
+ 9:00 - JST 1945 Sep 8
9:00 - KST 1954 Mar 21
- 8:00 ROK K%sT 1961 Aug 10
- 8:30 - KST 1968 Oct
+ 8:30 ROK K%sT 1961 Aug 10
9:00 ROK K%sT
-Zone Asia/Pyongyang 8:23:00 - LMT 1890
- 8:30 - KST 1904 Dec
- 9:00 - KST 1928
- 8:30 - KST 1932
- 9:00 - KST 1954 Mar 21
- 8:00 - KST 1961 Aug 10
+Zone Asia/Pyongyang 8:23:00 - LMT 1908 Apr 1
+ 8:30 - KST 1912 Jan 1
+ 9:00 - JCST 1937 Oct 1
+ 9:00 - JST 1945 Aug 24
9:00 - KST
###############################################################################
# Kuwait
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-# From the Arab Times (2007-03-14):
-# The Civil Service Commission (CSC) has approved a proposal forwarded
-# by MP Ahmad Baqer on implementing the daylight saving time (DST) in
-# Kuwait starting from April until the end of Sept this year, reports Al-Anba.
-# <http://www.arabtimesonline.com/arabtimes/kuwait/Viewdet.asp?ID=9950>.
-# From Paul Eggert (2007-03-29):
-# We don't know the details, or whether the approval means it'll happen,
-# so for now we assume no DST.
Zone Asia/Kuwait 3:11:56 - LMT 1950
3:00 - AST
# Laos
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Vientiane 6:50:24 - LMT 1906 Jun 9 # or Viangchan
- 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
- 7:00 - ICT 1912 May
- 8:00 - ICT 1931 May
- 7:00 - ICT
+# See Asia/Bangkok.
+
# Lebanon
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -1657,8 +1798,8 @@
Rule NBorneo 1935 1941 - Dec 14 0:00 0 -
#
# peninsular Malaysia
-# The data here are taken from Mok Ly Yng (2003-10-30)
-# <http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html>.
+# taken from Mok Ly Yng (2003-10-30)
+# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Kuala_Lumpur 6:46:46 - LMT 1901 Jan 1
6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
@@ -1670,12 +1811,12 @@
7:30 - MALT 1982 Jan 1
8:00 - MYT # Malaysia Time
# Sabah & Sarawak
-# From Paul Eggert (2006-03-22):
-# The data here are mostly from Shanks & Pottenger, but the 1942, 1945 and 1982
-# transition dates are from Mok Ly Yng.
+# From Paul Eggert (2014-08-12):
+# The data entries here are mostly from Shanks & Pottenger, but the 1942, 1945
+# and 1982 transition dates are from Mok Ly Yng.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Kuching 7:21:20 - LMT 1926 Mar
- 7:30 - BORT 1933 # Borneo Time
+ 7:30 - BORT 1933 # Borneo Time
8:00 NBorneo BOR%sT 1942 Feb 16
9:00 - JST 1945 Sep 12
8:00 - BORT 1982 Jan 1
@@ -1683,22 +1824,21 @@
# Maldives
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
- 4:54:00 - MMT 1960 # Male Mean Time
- 5:00 - MVT # Maldives Time
+Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
+ 4:54:00 - MMT 1960 # Male Mean Time
+ 5:00 - MVT # Maldives Time
# Mongolia
# Shanks & Pottenger say that Mongolia has three time zones, but
-# usno1995 and the CIA map Standard Time Zones of the World (2005-03)
-# both say that it has just one.
+# The USNO (1995-12-21) and the CIA map Standard Time Zones of the World
+# (2005-03) both say that it has just one.
# From Oscar van Vlijmen (1999-12-11):
-# <a href="http://www.mongoliatourism.gov.mn/general.htm">
# General Information Mongolia
-# </a> (1999-09)
+# <http://www.mongoliatourism.gov.mn/general.htm> (1999-09)
# "Time: Mongolia has two time zones. Three westernmost provinces of
-# Bayan-Ulgii, Uvs, and Hovd are one hour earlier than the capital city, and
+# Bayan-Ölgii, Uvs, and Hovd are one hour earlier than the capital city, and
# the rest of the country follows the Ulaanbaatar time, which is UTC/GMT plus
# eight hours."
@@ -1709,7 +1849,7 @@
# of implementation may have been different....
# Some maps in the past have indicated that there was an additional time
# zone in the eastern part of Mongolia, including the provinces of Dornod,
-# Suhbaatar, and possibly Khentij.
+# Sükhbaatar, and possibly Khentii.
# From Paul Eggert (1999-12-15):
# Naming and spelling is tricky in Mongolia.
@@ -1723,10 +1863,10 @@
# (adopted DST on 2001-04-27 02:00 local time, ending 2001-09-28),
# there are three time zones.
#
-# Provinces [at 7:00]: Bayan-ulgii, Uvs, Khovd, Zavkhan, Govi-Altai
-# Provinces [at 8:00]: Khovsgol, Bulgan, Arkhangai, Khentii, Tov,
-# Bayankhongor, Ovorkhangai, Dundgovi, Dornogovi, Omnogovi
-# Provinces [at 9:00]: Dornod, Sukhbaatar
+# Provinces [at 7:00]: Bayan-Ölgii, Uvs, Khovd, Zavkhan, Govi-Altai
+# Provinces [at 8:00]: Khövsgöl, Bulgan, Arkhangai, Khentii, Töv,
+# Bayankhongor, Övörkhangai, Dundgovi, Dornogovi, Ömnögovi
+# Provinces [at 9:00]: Dornod, Sükhbaatar
#
# [The province of Selenge is omitted from the above lists.]
@@ -1743,16 +1883,16 @@
# We have wildly conflicting information about Mongolia's time zones.
# Bill Bonnet (2005-05-19) reports that the US Embassy in Ulaanbaatar says
# there is only one time zone and that DST is observed, citing Microsoft
-# Windows XP as the source. Risto Nykanen (2005-05-16) reports that
+# Windows XP as the source. Risto Nykänen (2005-05-16) reports that
# travelmongolia.org says there are two time zones (UTC+7, UTC+8) with no DST.
# Oscar van Vlijmen (2005-05-20) reports that the Mongolian Embassy in
# Washington, DC says there are two time zones, with DST observed.
# He also found
-# <http://ubpost.mongolnews.mn/index.php?subaction=showcomments&id=1111634894&archive=&start_from=&ucat=1&>
+# http://ubpost.mongolnews.mn/index.php?subaction=showcomments&id=1111634894&archive=&start_from=&ucat=1&
# which also says that there is DST, and which has a comment by "Toddius"
# (2005-03-31 06:05 +0700) saying "Mongolia actually has 3.5 time zones.
# The West (OLGII) is +7 GMT, most of the country is ULAT is +8 GMT
-# and some Eastern provinces are +9 GMT but Sukhbaatar Aimag is SUHK +8.5 GMT.
+# and some Eastern provinces are +9 GMT but Sükhbaatar Aimag is SUHK +8.5 GMT.
# The SUKH timezone is new this year, it is one of the few things the
# parliament passed during the tumultuous winter session."
# For now, let's ignore this information, until we have more confirmation.
@@ -1768,29 +1908,23 @@
# +08:00 instead. Different sources appear to disagree with the tz
# database on this, e.g.:
#
-# <a href="http://www.timeanddate.com/worldclock/city.html?n=1026">
# http://www.timeanddate.com/worldclock/city.html?n=1026
-# </a>
-# <a href="http://www.worldtimeserver.com/current_time_in_MN.aspx">
# http://www.worldtimeserver.com/current_time_in_MN.aspx
-# </a>
#
# both say GMT+08:00.
# From Steffen Thorsen (2008-03-31):
# eznis airways, which operates several domestic flights, has a flight
# schedule here:
-# <a href="http://www.eznis.com/Container.jsp?id=112">
# http://www.eznis.com/Container.jsp?id=112
-# </a>
# (click the English flag for English)
#
-# There it appears that flights between Choibalsan and Ulaanbatar arrive
+# There it appears that flights between Choibalsan and Ulaanbaatar arrive
# about 1:35 - 1:50 hours later in local clock time, no matter the
-# direction, while Ulaanbaatar-Khvod takes 2 hours in the Eastern
-# direction and 3:35 back, which indicates that Ulaanbatar and Khvod are
+# direction, while Ulaanbaatar-Khovd takes 2 hours in the Eastern
+# direction and 3:35 back, which indicates that Ulaanbaatar and Khovd are
# in different time zones (like we know about), while Choibalsan and
-# Ulaanbatar are in the same time zone (correction needed).
+# Ulaanbaatar are in the same time zone (correction needed).
# From Arthur David Olson (2008-05-19):
# Assume that Choibalsan is indeed offset by 8:00.
@@ -1806,7 +1940,7 @@
# (1996-09) says 1996-10-25. Go with Shanks & Pottenger through 1998.
#
# Shanks & Pottenger say that the Sept. 1984 through Sept. 1990 switches
-# in Choibalsan (more precisely, in Dornod and Sukhbaatar) took place
+# in Choibalsan (more precisely, in Dornod and Sükhbaatar) took place
# at 02:00 standard time, not at 00:00 local time as in the rest of
# the country. That would be odd, and possibly is a result of their
# correction of 02:00 (in the previous edition) not being done correctly
@@ -1822,13 +1956,13 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
# Hovd, a.k.a. Chovd, Dund-Us, Dzhargalant, Khovd, Jirgalanta
Zone Asia/Hovd 6:06:36 - LMT 1905 Aug
- 6:00 - HOVT 1978 # Hovd Time
+ 6:00 - HOVT 1978 # Hovd Time
7:00 Mongol HOV%sT
# Ulaanbaatar, a.k.a. Ulan Bataar, Ulan Bator, Urga
Zone Asia/Ulaanbaatar 7:07:32 - LMT 1905 Aug
- 7:00 - ULAT 1978 # Ulaanbaatar Time
+ 7:00 - ULAT 1978 # Ulaanbaatar Time
8:00 Mongol ULA%sT
-# Choibalsan, a.k.a. Bajan Tuemen, Bajan Tumen, Chojbalsan,
+# Choibalsan, a.k.a. Bajan Tümen, Bajan Tumen, Chojbalsan,
# Choybalsan, Sanbejse, Tchoibalsan
Zone Asia/Choibalsan 7:38:00 - LMT 1905 Aug
7:00 - ULAT 1978
@@ -1860,7 +1994,7 @@
# 00:01 was to make it clear which day it was on.
# From Paul Eggert (2002-03-15):
-# Jesper Norgaard found this URL:
+# Jesper Nørgaard found this URL:
# http://www.pak.gov.pk/public/news/app/app06_dec.htm
# (dated 2001-12-06) which says that the Cabinet adopted a scheme "to
# advance the clocks by one hour on the night between the first
@@ -1892,43 +2026,30 @@
# Here is an article that Pakistan plan to introduce Daylight Saving Time
# on June 1, 2008 for 3 months.
#
-# "... The federal cabinet on Wednesday announced a new conservation plan to help
-# reduce load shedding by approving the closure of commercial centres at 9pm and
-# moving clocks forward by one hour for the next three months.
-# ...."
+# "... The federal cabinet on Wednesday announced a new conservation plan to
+# help reduce load shedding by approving the closure of commercial centres at
+# 9pm and moving clocks forward by one hour for the next three months. ...."
#
-# <a href="http://www.worldtimezone.net/dst_news/dst_news_pakistan01.html">
# http://www.worldtimezone.net/dst_news/dst_news_pakistan01.html
-# </a>
-# OR
-# <a href="http://www.dailytimes.com.pk/default.asp?page=2008%5C05%5C15%5Cstory_15-5-2008_pg1_4">
# http://www.dailytimes.com.pk/default.asp?page=2008%5C05%5C15%5Cstory_15-5-2008_pg1_4
-# </a>
# From Arthur David Olson (2008-05-19):
# XXX--midnight transitions is a guess; 2008 only is a guess.
# From Alexander Krivenyshev (2008-08-28):
# Pakistan government has decided to keep the watches one-hour advanced
-# for another 2 months--plan to return to Standard Time on October 31
+# for another 2 months - plan to return to Standard Time on October 31
# instead of August 31.
#
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_pakistan02.html">
# http://www.worldtimezone.com/dst_news/dst_news_pakistan02.html
-# </a>
-# OR
-# <a href="http://dailymailnews.com/200808/28/news/dmbrn03.html">
# http://dailymailnews.com/200808/28/news/dmbrn03.html
-# </a>
# From Alexander Krivenyshev (2009-04-08):
# Based on previous media reports that "... proposed plan to
# advance clocks by one hour from May 1 will cause disturbance
# to the working schedules rather than bringing discipline in
# official working."
-# <a href="http://www.thenews.com.pk/daily_detail.asp?id=171280">
# http://www.thenews.com.pk/daily_detail.asp?id=171280
-# </a>
#
# recent news that instead of May 2009 - Pakistan plan to
# introduce DST from April 15, 2009
@@ -1936,15 +2057,8 @@
# FYI: Associated Press Of Pakistan
# April 08, 2009
# Cabinet okays proposal to advance clocks by one hour from April 15
-# <a href="http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=73043&Itemid=1">
# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=73043&Itemid=1
-# </a>
-#
-# or
-#
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_pakistan05.html">
# http://www.worldtimezone.com/dst_news/dst_news_pakistan05.html
-# </a>
#
# ....
# The Federal Cabinet on Wednesday approved the proposal to
@@ -1957,34 +2071,20 @@
# clocks backward by one hour from October 1. A formal announcement to
# this effect will be made after the Prime Minister grants approval in
# this regard."
-# <a href="http://www.thenews.com.pk/updates.asp?id=87168">
# http://www.thenews.com.pk/updates.asp?id=87168
-# </a>
# From Alexander Krivenyshev (2009-09-28):
# According to Associated Press Of Pakistan, it is confirmed that
-# Pakistan clocks across the country would be turned back by an hour from October
-# 1, 2009.
+# Pakistan clocks across the country would be turned back by an hour from
+# October 1, 2009.
#
# "Clocks to go back one hour from 1 Oct"
-# <a href="http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=86715&Itemid=2">
# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=86715&Itemid=2
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_pakistan07.htm">
# http://www.worldtimezone.com/dst_news/dst_news_pakistan07.htm
-# </a>
-
+#
# From Steffen Thorsen (2009-09-29):
-# Alexander Krivenyshev wrote:
-# > According to Associated Press Of Pakistan, it is confirmed that
-# > Pakistan clocks across the country would be turned back by an hour from October
-# > 1, 2009.
-#
# Now they seem to have changed their mind, November 1 is the new date:
-# <a href="http://www.thenews.com.pk/top_story_detail.asp?Id=24742">
# http://www.thenews.com.pk/top_story_detail.asp?Id=24742
-# </a>
# "The country's clocks will be reversed by one hour on November 1.
# Officials of Federal Ministry for Interior told this to Geo News on
# Monday."
@@ -1996,11 +2096,9 @@
#
# We have confirmed this year's end date with both with the Ministry of
# Water and Power and the Pakistan Electric Power Company:
-# <a href="http://www.timeanddate.com/news/time/pakistan-ends-dst09.html">
# http://www.timeanddate.com/news/time/pakistan-ends-dst09.html
-# </a>
-# From Christoph Goehre (2009-10-01):
+# From Christoph Göhre (2009-10-01):
# [T]he German Consulate General in Karachi reported me today that Pakistan
# will go back to standard time on 1st of November.
@@ -2016,22 +2114,17 @@
# Now, it seems that the decision to not observe DST in final:
#
# "Govt Withdraws Plan To Advance Clocks"
-# <a href="http://www.apakistannews.com/govt-withdraws-plan-to-advance-clocks-172041">
# http://www.apakistannews.com/govt-withdraws-plan-to-advance-clocks-172041
-# </a>
#
# "People laud PM's announcement to end DST"
-# <a href="http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2">
# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2
-# </a>
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Pakistan 2002 only - Apr Sun>=2 0:01 1:00 S
Rule Pakistan 2002 only - Oct Sun>=2 0:01 0 -
Rule Pakistan 2008 only - Jun 1 0:00 1:00 S
-Rule Pakistan 2008 only - Nov 1 0:00 0 -
+Rule Pakistan 2008 2009 - Nov 1 0:00 0 -
Rule Pakistan 2009 only - Apr 15 0:00 1:00 S
-Rule Pakistan 2009 only - Nov 1 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Karachi 4:28:12 - LMT 1907
@@ -2105,10 +2198,9 @@
# the PA has decided to implement DST in April.
# From Paul Eggert (1999-09-20):
-# Daoud Kuttab writes in
-# <a href="http://www.jpost.com/com/Archive/22.Apr.1999/Opinion/Article-2.html">
-# Holiday havoc
-# </a> (Jerusalem Post, 1999-04-22) that
+# Daoud Kuttab writes in Holiday havoc
+# http://www.jpost.com/com/Archive/22.Apr.1999/Opinion/Article-2.html
+# (Jerusalem Post, 1999-04-22) that
# the Palestinian National Authority changed to DST on 1999-04-15.
# I vaguely recall that they switch back in October (sorry, forgot the source).
# For now, let's assume that the spring switch was at 24:00,
@@ -2121,7 +2213,7 @@
# A user from Gaza reported that Gaza made the change early because of
# the Ramadan. Next year Ramadan will be even earlier, so I think
# there is a good chance next year's end date will be around two weeks
-# earlier--the same goes for Jordan.
+# earlier - the same goes for Jordan.
# From Steffen Thorsen (2006-08-17):
# I was informed by a user in Bethlehem that in Bethlehem it started the
@@ -2140,7 +2232,7 @@
# I guess it is likely that next year's date will be moved as well,
# because of the Ramadan.
-# From Jesper Norgaard Welen (2007-09-18):
+# From Jesper Nørgaard Welen (2007-09-18):
# According to Steffen Thorsen's web site the Gaza Strip and the rest of the
# Palestinian territories left DST early on 13.th. of September at 2:00.
@@ -2157,16 +2249,9 @@
# Gaza Strip (as Egypt) ended DST at midnight Thursday (Aug 28, 2008), while
# the West Bank will end Daylight Saving Time at midnight Sunday (Aug 31, 2008).
#
-# <a href="http://www.guardian.co.uk/world/feedarticle/7759001">
# http://www.guardian.co.uk/world/feedarticle/7759001
-# </a>
-# <a href="http://www.abcnews.go.com/International/wireStory?id=5676087">
# http://www.abcnews.go.com/International/wireStory?id=5676087
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_gazastrip01.html">
# http://www.worldtimezone.com/dst_news/dst_news_gazastrip01.html
-# </a>
# From Alexander Krivenyshev (2009-03-26):
# According to the Palestine News Network (arabic.pnn.ps), Palestinian
@@ -2174,24 +2259,17 @@
# 26 and continue until the night of 27 September 2009.
#
# (in Arabic)
-# <a href="http://arabic.pnn.ps/index.php?option=com_content&task=view&id=50850">
# http://arabic.pnn.ps/index.php?option=com_content&task=view&id=50850
-# </a>
#
-# or
# (English translation)
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_westbank01.html">
# http://www.worldtimezone.com/dst_news/dst_news_westbank01.html
-# </a>
# From Steffen Thorsen (2009-08-31):
# Palestine's Council of Ministers announced that they will revert back to
# winter time on Friday, 2009-09-04.
#
# One news source:
-# <a href="http://www.safa.ps/ara/?action=showdetail&seid=4158">
# http://www.safa.ps/ara/?action=showdetail&seid=4158
-# </a>
# (Palestinian press agency, Arabic),
# Google translate: "Decided that the Palestinian government in Ramallah
# headed by Salam Fayyad, the start of work in time for the winter of
@@ -2200,9 +2278,7 @@
#
# We are not sure if Gaza will do the same, last year they had a different
# end date, we will keep this page updated:
-# <a href="http://www.timeanddate.com/news/time/westbank-gaza-dst-2009.html">
# http://www.timeanddate.com/news/time/westbank-gaza-dst-2009.html
-# </a>
# From Alexander Krivenyshev (2009-09-02):
# Seems that Gaza Strip will go back to Winter Time same date as West Bank.
@@ -2212,51 +2288,35 @@
#
# "Winter time unite the West Bank and Gaza"
# (from Palestinian National Authority):
-# <a href="http://www.moi.gov.ps/en/?page=633167343250594025&nid=11505
# http://www.moi.gov.ps/en/?page=633167343250594025&nid=11505
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_gazastrip02.html>
# http://www.worldtimezone.com/dst_news/dst_news_gazastrip02.html
-# </a>
# From Alexander Krivenyshev (2010-03-19):
# According to Voice of Palestine DST will last for 191 days, from March
# 26, 2010 till "the last Sunday before the tenth day of Tishri
# (October), each year" (October 03, 2010?)
#
-# <a href="http://palvoice.org/forums/showthread.php?t=245697">
# http://palvoice.org/forums/showthread.php?t=245697
-# </a>
# (in Arabic)
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_westbank03.html">
# http://www.worldtimezone.com/dst_news/dst_news_westbank03.html
-# </a>
# From Steffen Thorsen (2010-03-24):
# ...Ma'an News Agency reports that Hamas cabinet has decided it will
# start one day later, at 12:01am. Not sure if they really mean 12:01am or
# noon though:
#
-# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=271178">
# http://www.maannews.net/eng/ViewDetails.aspx?ID=271178
-# </a>
# (Ma'an News Agency)
# "At 12:01am Friday, clocks in Israel and the West Bank will change to
# 1:01am, while Gaza clocks will change at 12:01am Saturday morning."
# From Steffen Thorsen (2010-08-11):
# According to several sources, including
-# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=306795">
# http://www.maannews.net/eng/ViewDetails.aspx?ID=306795
-# </a>
# the clocks were set back one hour at 2010-08-11 00:00:00 local time in
# Gaza and the West Bank.
# Some more background info:
-# <a href="http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html">
# http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html
-# </a>
# From Steffen Thorsen (2011-08-26):
# Gaza and the West Bank did go back to standard time in the beginning of
@@ -2264,13 +2324,9 @@
# 00:00 (so two periods of DST in 2011). The pause was because of
# Ramadan.
#
-# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=416217">
# http://www.maannews.net/eng/ViewDetails.aspx?ID=416217
-# </a>
# Additional info:
-# <a href="http://www.timeanddate.com/news/time/palestine-dst-2011.html">
# http://www.timeanddate.com/news/time/palestine-dst-2011.html
-# </a>
# From Alexander Krivenyshev (2011-08-27):
# According to the article in The Jerusalem Post:
@@ -2280,14 +2336,9 @@
# The Hamas government said on Saturday that it won't observe summertime after
# the Muslim feast of Id al-Fitr, which begins on Tuesday..."
# ...
-# <a href="http://www.jpost.com/MiddleEast/Article.aspx?id=235650">
# http://www.jpost.com/MiddleEast/Article.aspx?id=235650
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_gazastrip05.html">
# http://www.worldtimezone.com/dst_news/dst_news_gazastrip05.html
-# </a>
-# The rules for Egypt are stolen from the `africa' file.
+# The rules for Egypt are stolen from the 'africa' file.
# From Steffen Thorsen (2011-09-30):
# West Bank did end Daylight Saving Time this morning/midnight (2011-09-30
@@ -2295,26 +2346,18 @@
# So West Bank and Gaza now have the same time again.
#
# Many sources, including:
-# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=424808">
# http://www.maannews.net/eng/ViewDetails.aspx?ID=424808
-# </a>
# From Steffen Thorsen (2012-03-26):
# Palestinian news sources tell that both Gaza and West Bank will start DST
# on Friday (Thursday midnight, 2012-03-29 24:00).
# Some of many sources in Arabic:
-# <a href="http://www.samanews.com/index.php?act=Show&id=122638">
# http://www.samanews.com/index.php?act=Show&id=122638
-# </a>
#
-# <a href="http://safa.ps/details/news/74352/%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-%D8%A8%D8%A7%D9%84%D8%B6%D9%81%D8%A9-%D9%88%D8%BA%D8%B2%D8%A9-%D9%84%D9%8A%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D8%B9%D8%A9.html">
# http://safa.ps/details/news/74352/%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-%D8%A8%D8%A7%D9%84%D8%B6%D9%81%D8%A9-%D9%88%D8%BA%D8%B2%D8%A9-%D9%84%D9%8A%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D8%B9%D8%A9.html
-# </a>
#
# Our brief summary:
-# <a href="http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html">
# http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html
-# </a>
# From Steffen Thorsen (2013-03-26):
# The following news sources tells that Palestine will "start daylight saving
@@ -2374,10 +2417,10 @@
2:00 EgyptAsia EE%sT 1967 Jun 5
2:00 Zion I%sT 1996
2:00 Jordan EE%sT 1999
- 2:00 Palestine EE%sT 2008 Aug 29 0:00
+ 2:00 Palestine EE%sT 2008 Aug 29 0:00
2:00 - EET 2008 Sep
2:00 Palestine EE%sT 2010
- 2:00 - EET 2010 Mar 27 0:01
+ 2:00 - EET 2010 Mar 27 0:01
2:00 Palestine EE%sT 2011 Aug 1
2:00 - EET 2012
2:00 Palestine EE%sT
@@ -2393,25 +2436,27 @@
# no information
# Philippines
-# On 1844-08-16, Narciso Claveria, governor-general of the
+# On 1844-08-16, Narciso Clavería, governor-general of the
# Philippines, issued a proclamation announcing that 1844-12-30 was to
-# be immediately followed by 1845-01-01. Robert H. van Gent has a
-# transcript of the decree in <http://www.phys.uu.nl/~vgent/idl/idl.htm>.
-# The rest of the data are from Shanks & Pottenger.
+# be immediately followed by 1845-01-01; see R.H. van Gent's
+# History of the International Date Line
+# http://www.staff.science.uu.nl/~gent0113/idl/idl_philippines.htm
+# The rest of the data entries are from Shanks & Pottenger.
-# From Paul Eggert (2006-04-25):
-# Tomorrow's Manila Standard reports that the Philippines Department of
-# Trade and Industry is considering adopting DST this June when the
-# rainy season begins. See
-# <http://www.manilastandardtoday.com/?page=politics02_april26_2006>.
-# For now, we'll ignore this, since it's not definite and we lack details.
-#
-# From Jesper Norgaard Welen (2006-04-26):
+# From Jesper Nørgaard Welen (2006-04-26):
# ... claims that Philippines had DST last time in 1990:
# http://story.philippinetimes.com/p.x/ct/9/id/145be20cc6b121c0/cid/3e5bbccc730d258c/
# [a story dated 2006-04-25 by Cris Larano of Dow Jones Newswires,
# but no details]
+# From Paul Eggert (2014-08-14):
+# The following source says DST may be instituted November-January and again
+# March-June, but this is not definite. It also says DST was last proclaimed
+# during the Ramos administration (1992-1998); but again, no details.
+# Carcamo D. PNoy urged to declare use of daylight saving time.
+# Philippine Star 2014-08-05
+# http://www.philstar.com/headlines/2014/08/05/1354152/pnoy-urged-declare-use-daylight-saving-time
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Phil 1936 only - Nov 1 0:00 1:00 S
Rule Phil 1937 only - Feb 1 0:00 0 -
@@ -2428,18 +2473,39 @@
# Qatar
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha
+Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha
4:00 - GST 1972 Jun
3:00 - AST
# Saudi Arabia
+#
+# From Paul Eggert (2014-07-15):
+# Time in Saudi Arabia and other countries in the Arabian peninsula was not
+# standardized until relatively recently; we don't know when, and possibly it
+# has never been made official. Richard P Hunt, in "Islam city yielding to
+# modern times", New York Times (1961-04-09), p 20, wrote that only airlines
+# observed standard time, and that people in Jeddah mostly observed quasi-solar
+# time, doing so by setting their watches at sunrise to 6 o'clock (or to 12
+# o'clock for "Arab" time).
+#
+# The TZ database cannot represent quasi-solar time; airline time is the best
+# we can do. The 1946 foreign air news digest of the U.S. Civil Aeronautics
+# Board (OCLC 42299995) reported that the "... Arabian Government, inaugurated
+# a weekly Dhahran-Cairo service, via the Saudi Arabian cities of Riyadh and
+# Jidda, on March 14, 1947". Shanks & Pottenger guessed 1950; go with the
+# earlier date.
+#
+# Shanks & Pottenger also state that until 1968-05-01 Saudi Arabia had two
+# time zones; the other zone, at UTC+4, was in the far eastern part of
+# the country. Ignore this, as it's before our 1970 cutoff.
+#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Riyadh 3:06:52 - LMT 1950
+Zone Asia/Riyadh 3:06:52 - LMT 1947 Mar 14
3:00 - AST
# Singapore
-# The data here are taken from Mok Ly Yng (2003-10-30)
-# <http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html>.
+# taken from Mok Ly Yng (2003-10-30)
+# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
@@ -2465,26 +2531,24 @@
# From Paul Eggert (1996-09-03):
# "Sri Lanka advances clock by an hour to avoid blackout"
-# (www.virtual-pc.com/lankaweb/news/items/240596-2.html, 1996-05-24,
+# (<http://www.virtual-pc.com/lankaweb/news/items/240596-2.html>, 1996-05-24,
# no longer available as of 1999-08-17)
-# reported ``the country's standard time will be put forward by one hour at
-# midnight Friday (1830 GMT) `in the light of the present power crisis'.''
+# reported "the country's standard time will be put forward by one hour at
+# midnight Friday (1830 GMT) 'in the light of the present power crisis'."
#
# From Dharmasiri Senanayake, Sri Lanka Media Minister (1996-10-24), as quoted
-# by Shamindra in
-# <a href="news:54rka5$m5h@mtinsc01-mgt.ops.worldnet.att.net">
-# Daily News - Hot News Section (1996-10-26)
-# </a>:
+# by Shamindra in Daily News - Hot News Section
+# <news:54rka5$m5h@mtinsc01-mgt.ops.worldnet.att.net> (1996-10-26):
# With effect from 12.30 a.m. on 26th October 1996
# Sri Lanka will be six (06) hours ahead of GMT.
-# From Jesper Norgaard Welen (2006-04-14), quoting Sri Lanka News Online
+# From Jesper Nørgaard Welen (2006-04-14), quoting Sri Lanka News Online
# <http://news.sinhalaya.com/wmview.php?ArtID=11002> (2006-04-13):
# 0030 hrs on April 15, 2006 (midnight of April 14, 2006 +30 minutes)
# at present, become 2400 hours of April 14, 2006 (midnight of April 14, 2006).
# From Peter Apps and Ranga Sirila of Reuters (2006-04-12) in:
-# <http://today.reuters.co.uk/news/newsArticle.aspx?type=scienceNews&storyID=2006-04-12T172228Z_01_COL295762_RTRIDST_0_SCIENCE-SRILANKA-TIME-DC.XML>
+# http://today.reuters.co.uk/news/newsArticle.aspx?type=scienceNews&storyID=2006-04-12T172228Z_01_COL295762_RTRIDST_0_SCIENCE-SRILANKA-TIME-DC.XML
# [The Tamil Tigers] never accepted the original 1996 time change and simply
# kept their clocks set five and a half hours ahead of Greenwich Mean
# Time (GMT), in line with neighbor India.
@@ -2498,7 +2562,7 @@
# twice in 1996 and probably SL Government or its standardization
# agencies never declared an abbreviation as a national standard.
#
-# I recollect before the recent change the government annoucemments
+# I recollect before the recent change the government announcements
# mentioning it as simply changing Sri Lanka Standard Time or Sri Lanka
# Time and no mention was made about the abbreviation.
#
@@ -2508,7 +2572,7 @@
# item....
#
# Within Sri Lanka I think LKT is well known among computer users and
-# adminsitrators. In my opinion SLT may not be a good choice because the
+# administrators. In my opinion SLT may not be a good choice because the
# nation's largest telcom / internet operator Sri Lanka Telcom is well
# known by that abbreviation - simply as SLT (there IP domains are
# slt.lk and sltnet.lk).
@@ -2523,13 +2587,13 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Colombo 5:19:24 - LMT 1880
- 5:19:32 - MMT 1906 # Moratuwa Mean Time
+ 5:19:32 - MMT 1906 # Moratuwa Mean Time
5:30 - IST 1942 Jan 5
5:30 0:30 IHST 1942 Sep
- 5:30 1:00 IST 1945 Oct 16 2:00
- 5:30 - IST 1996 May 25 0:00
- 6:30 - LKT 1996 Oct 26 0:30
- 6:00 - LKT 2006 Apr 15 0:30
+ 5:30 1:00 IST 1945 Oct 16 2:00
+ 5:30 - IST 1996 May 25 0:00
+ 6:30 - LKT 1996 Oct 26 0:30
+ 6:00 - LKT 2006 Apr 15 0:30
5:30 - IST
# Syria
@@ -2580,7 +2644,7 @@
# Today the AP reported "Syria will switch to summertime at midnight Thursday."
# http://www.iht.com/articles/ap/2007/03/29/africa/ME-GEN-Syria-Time-Change.php
Rule Syria 2007 only - Mar lastFri 0:00 1:00 S
-# From Jesper Norgard (2007-10-27):
+# From Jesper Nørgaard (2007-10-27):
# The sister center ICARDA of my work CIMMYT is confirming that Syria DST will
# not take place 1st November at 0:00 o'clock but 1st November at 24:00 or
# rather Midnight between Thursday and Friday. This does make more sense than
@@ -2589,7 +2653,7 @@
# it is implemented at midnight of the last workday before weekend...
#
# From Steffen Thorsen (2007-10-27):
-# Jesper Norgaard Welen wrote:
+# Jesper Nørgaard Welen wrote:
#
# > "Winter local time in Syria will be observed at midnight of Thursday 1
# > November 2007, and the clock will be put back 1 hour."
@@ -2605,8 +2669,7 @@
# From Stephen Colebourne (2008-03-17):
# For everyone's info, I saw an IATA time zone change for [Syria] for
-# this month (March 2008) in the last day or so...This is the data IATA
-# are now using:
+# this month (March 2008) in the last day or so....
# Country Time Standard --- DST Start --- --- DST End --- DST
# Name Zone Variation Time Date Time Date
# Variation
@@ -2618,16 +2681,15 @@
# From Arthur David Olson (2008-03-17):
# Here's a link to English-language coverage by the Syrian Arab News
# Agency (SANA)...
-# <a href="http://www.sana.sy/eng/21/2008/03/11/165173.htm">
# http://www.sana.sy/eng/21/2008/03/11/165173.htm
-# </a>...which reads (in part) "The Cabinet approved the suggestion of the
+# ...which reads (in part) "The Cabinet approved the suggestion of the
# Ministry of Electricity to begin daylight savings time on Friday April
# 4th, advancing clocks one hour ahead on midnight of Thursday April 3rd."
# Since Syria is two hours east of UTC, the 2200 and 2100 transition times
# shown above match up with midnight in Syria.
# From Arthur David Olson (2008-03-18):
-# My buest guess at a Syrian rule is "the Friday nearest April 1";
+# My best guess at a Syrian rule is "the Friday nearest April 1";
# coding that involves either using a "Mar Fri>=29" construct that old time zone
# compilers can't handle or having multiple Rules (a la Israel).
# For now, use "Apr Fri>=1", and go with IATA on a uniform Sep 30 end.
@@ -2640,37 +2702,27 @@
# winter time on 2008-11-01 at 00:00 local daylight time (delaying/setting
# clocks back 60 minutes).
#
-# <a href="http://sana.sy/ara/2/2008/10/07/195459.htm">
# http://sana.sy/ara/2/2008/10/07/195459.htm
-# </a>
# From Steffen Thorsen (2009-03-19):
# Syria will start DST on 2009-03-27 00:00 this year according to many sources,
# two examples:
#
-# <a href="http://www.sana.sy/eng/21/2009/03/17/217563.htm">
# http://www.sana.sy/eng/21/2009/03/17/217563.htm
-# </a>
# (English, Syrian Arab News # Agency)
-# <a href="http://thawra.alwehda.gov.sy/_View_news2.asp?FileName=94459258720090318012209">
# http://thawra.alwehda.gov.sy/_View_news2.asp?FileName=94459258720090318012209
-# </a>
# (Arabic, gov-site)
#
# We have not found any sources saying anything about when DST ends this year.
#
# Our summary
-# <a href="http://www.timeanddate.com/news/time/syria-dst-starts-march-27-2009.html">
# http://www.timeanddate.com/news/time/syria-dst-starts-march-27-2009.html
-# </a>
# From Steffen Thorsen (2009-10-27):
# The Syrian Arab News Network on 2009-09-29 reported that Syria will
# revert back to winter (standard) time on midnight between Thursday
# 2009-10-29 and Friday 2009-10-30:
-# <a href="http://www.sana.sy/ara/2/2009/09/29/247012.htm">
# http://www.sana.sy/ara/2/2009/09/29/247012.htm (Arabic)
-# </a>
# From Arthur David Olson (2009-10-28):
# We'll see if future DST switching times turn out to be end of the last
@@ -2681,23 +2733,17 @@
# The "Syrian News Station" reported on 2010-03-16 that the Council of
# Ministers has decided that Syria will start DST on midnight Thursday
# 2010-04-01: (midnight between Thursday and Friday):
-# <a href="http://sns.sy/sns/?path=news/read/11421">
# http://sns.sy/sns/?path=news/read/11421 (Arabic)
-# </a>
# From Steffen Thorsen (2012-03-26):
# Today, Syria's government announced that they will start DST early on Friday
# (00:00). This is a bit earlier than the past two years.
#
# From Syrian Arab News Agency, in Arabic:
-# <a href="http://www.sana.sy/ara/2/2012/03/26/408215.htm">
# http://www.sana.sy/ara/2/2012/03/26/408215.htm
-# </a>
#
# Our brief summary:
-# <a href="http://www.timeanddate.com/news/time/syria-dst-2012.html">
# http://www.timeanddate.com/news/time/syria-dst-2012.html
-# </a>
# From Arthur David Olson (2012-03-27):
# Assume last Friday in March going forward XXX.
@@ -2710,7 +2756,7 @@
Rule Syria 2009 max - Oct lastFri 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
+Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
2:00 Syria EE%sT
# Tajikistan
@@ -2718,24 +2764,26 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
5:00 - DUST 1930 Jun 21 # Dushanbe Time
- 6:00 RussiaAsia DUS%sT 1991 Mar 31 2:00s
- 5:00 1:00 DUSST 1991 Sep 9 2:00s
- 5:00 - TJT # Tajikistan Time
+ 6:00 RussiaAsia DUS%sT 1991 Mar 31 2:00s
+ 5:00 1:00 DUSST 1991 Sep 9 2:00s
+ 5:00 - TJT # Tajikistan Time
# Thailand
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Bangkok 6:42:04 - LMT 1880
6:42:04 - BMT 1920 Apr # Bangkok Mean Time
7:00 - ICT
+Link Asia/Bangkok Asia/Phnom_Penh # Cambodia
+Link Asia/Bangkok Asia/Vientiane # Laos
# Turkmenistan
# From Shanks & Pottenger.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad
4:00 - ASHT 1930 Jun 21 # Ashkhabad Time
- 5:00 RussiaAsia ASH%sT 1991 Mar 31 2:00
+ 5:00 RussiaAsia ASH%sT 1991 Mar 31 2:00
4:00 RussiaAsia ASH%sT 1991 Oct 27 # independence
- 4:00 RussiaAsia TM%sT 1992 Jan 19 2:00
+ 4:00 RussiaAsia TM%sT 1992 Jan 19 2:00
5:00 - TMT
# United Arab Emirates
@@ -2744,8 +2792,9 @@
4:00 - GST
# Uzbekistan
+# Byalokoz 1919 says Uzbekistan was 4:27:53.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Samarkand 4:27:12 - LMT 1924 May 2
+Zone Asia/Samarkand 4:27:53 - LMT 1924 May 2
4:00 - SAMT 1930 Jun 21 # Samarkand Time
5:00 - SAMT 1981 Apr 1
5:00 1:00 SAMST 1981 Oct 1
@@ -2753,31 +2802,75 @@
5:00 RussiaAsia SAM%sT 1991 Sep 1 # independence
5:00 RussiaAsia UZ%sT 1992
5:00 - UZT
-Zone Asia/Tashkent 4:37:12 - LMT 1924 May 2
+# Milne says Tashkent was 4:37:10.8; round to nearest.
+Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
5:00 - TAST 1930 Jun 21 # Tashkent Time
- 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00
+ 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00
5:00 RussiaAsia TAS%sT 1991 Sep 1 # independence
5:00 RussiaAsia UZ%sT 1992
5:00 - UZT
# Vietnam
-# From Paul Eggert (2013-02-21):
+# From Paul Eggert (2014-10-04):
# Milne gives 7:16:56 for the meridian of Saigon in 1899, as being
# used in Lower Laos, Cambodia, and Annam. But this is quite a ways
# from Saigon's location. For now, ignore this and stick with Shanks
-# and Pottenger.
+# and Pottenger for LMT before 1906.
# From Arthur David Olson (2008-03-18):
-# The English-language name of Vietnam's most populous city is "Ho Chi Min City";
-# we use Ho_Chi_Minh below to avoid a name of more than 14 characters.
+# The English-language name of Vietnam's most populous city is "Ho Chi Minh
+# City"; use Ho_Chi_Minh below to avoid a name of more than 14 characters.
-# From Shanks & Pottenger:
+# From Paul Eggert (2014-10-21) after a heads-up from Trần Ngọc Quân:
+# Trần Tiến Bình's authoritative book "Lịch Việt Nam: thế kỷ XX-XXI (1901-2100)"
+# (Nhà xuất bản Văn Hoá - Thông Tin, Hanoi, 2005), pp 49-50,
+# is quoted verbatim in:
+# http://www.thoigian.com.vn/?mPage=P80D01
+# is translated by Brian Inglis in:
+# http://mm.icann.org/pipermail/tz/2014-October/021654.html
+# and is the basis for the information below.
+#
+# The 1906 transition was effective July 1 and standardized Indochina to
+# Phù Liễn Observatory, legally 104 deg. 17'17" east of Paris.
+# It's unclear whether this meant legal Paris Mean Time (00:09:21) or
+# the Paris Meridian (2 deg. 20'14.03" E); the former yields 07:06:30.1333...
+# and the latter 07:06:29.333... so either way it rounds to 07:06:30,
+# which is used below even though the modern-day Phù Liễn Observatory
+# is closer to 07:06:31. Abbreviate Phù Liễn Mean Time as PLMT.
+#
+# The following transitions occurred in Indochina in general (before 1954)
+# and in South Vietnam in particular (after 1954):
+# To 07:00 on 1911-05-01.
+# To 08:00 on 1942-12-31 at 23:00.
+# To 09:00 in 1945-03-14 at 23:00.
+# To 07:00 on 1945-09-02 in Vietnam.
+# To 08:00 on 1947-04-01 in French-controlled Indochina.
+# To 07:00 on 1955-07-01 in South Vietnam.
+# To 08:00 on 1959-12-31 at 23:00 in South Vietnam.
+# To 07:00 on 1975-06-13 in South Vietnam.
+#
+# Trần cites the following sources; it's unclear which supplied the info above.
+#
+# Hoàng Xuân Hãn: "Lịch và lịch Việt Nam". Tập san Khoa học Xã hội,
+# No. 9, Paris, February 1982.
+#
+# Lê Thành Lân: "Lịch và niên biểu lịch sử hai mươi thế kỷ (0001-2010)",
+# NXB Thống kê, Hanoi, 2000.
+#
+# Lê Thành Lân: "Lịch hai thế kỷ (1802-2010) và các lịch vĩnh cửu",
+# NXB Thuận Hoá, Huế, 1995.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Ho_Chi_Minh 7:06:40 - LMT 1906 Jun 9
- 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
- 7:00 - ICT 1912 May
- 8:00 - ICT 1931 May
+Zone Asia/Ho_Chi_Minh 7:06:40 - LMT 1906 Jul 1
+ 7:06:30 - PLMT 1911 May 1
+ 7:00 - ICT 1942 Dec 31 23:00
+ 8:00 - IDT 1945 Mar 14 23:00
+ 9:00 - JST 1945 Sep 2
+ 7:00 - ICT 1947 Apr 1
+ 8:00 - IDT 1955 Jul 1
+ 7:00 - ICT 1959 Dec 31 23:00
+ 8:00 - IDT 1975 Jun 13
7:00 - ICT
# Yemen
--- ./jdk/make/sun/javazic/tzdata/australasia Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/sun/javazic/tzdata/australasia Mon Jan 05 11:57:27 2015 -0800
@@ -21,7 +21,6 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
@@ -36,13 +35,13 @@
# Please see the notes below for the controversy about "EST" versus "AEST" etc.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Aus 1917 only - Jan 1 0:01 1:00 -
-Rule Aus 1917 only - Mar 25 2:00 0 -
-Rule Aus 1942 only - Jan 1 2:00 1:00 -
-Rule Aus 1942 only - Mar 29 2:00 0 -
-Rule Aus 1942 only - Sep 27 2:00 1:00 -
-Rule Aus 1943 1944 - Mar lastSun 2:00 0 -
-Rule Aus 1943 only - Oct 3 2:00 1:00 -
+Rule Aus 1917 only - Jan 1 0:01 1:00 D
+Rule Aus 1917 only - Mar 25 2:00 0 S
+Rule Aus 1942 only - Jan 1 2:00 1:00 D
+Rule Aus 1942 only - Mar 29 2:00 0 S
+Rule Aus 1942 only - Sep 27 2:00 1:00 D
+Rule Aus 1943 1944 - Mar lastSun 2:00 0 S
+Rule Aus 1943 only - Oct 3 2:00 1:00 D
# Go with Whitman and the Australian National Standards Commission, which
# says W Australia didn't use DST in 1943/1944. Ignore Whitman's claim that
# 1944/1945 was just like 1943/1944.
@@ -50,26 +49,26 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
# Northern Territory
Zone Australia/Darwin 8:43:20 - LMT 1895 Feb
- 9:00 - CST 1899 May
- 9:30 Aus CST
+ 9:00 - ACST 1899 May
+ 9:30 Aus AC%sT
# Western Australia
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule AW 1974 only - Oct lastSun 2:00s 1:00 -
-Rule AW 1975 only - Mar Sun>=1 2:00s 0 -
-Rule AW 1983 only - Oct lastSun 2:00s 1:00 -
-Rule AW 1984 only - Mar Sun>=1 2:00s 0 -
-Rule AW 1991 only - Nov 17 2:00s 1:00 -
-Rule AW 1992 only - Mar Sun>=1 2:00s 0 -
-Rule AW 2006 only - Dec 3 2:00s 1:00 -
-Rule AW 2007 2009 - Mar lastSun 2:00s 0 -
-Rule AW 2007 2008 - Oct lastSun 2:00s 1:00 -
+Rule AW 1974 only - Oct lastSun 2:00s 1:00 D
+Rule AW 1975 only - Mar Sun>=1 2:00s 0 S
+Rule AW 1983 only - Oct lastSun 2:00s 1:00 D
+Rule AW 1984 only - Mar Sun>=1 2:00s 0 S
+Rule AW 1991 only - Nov 17 2:00s 1:00 D
+Rule AW 1992 only - Mar Sun>=1 2:00s 0 S
+Rule AW 2006 only - Dec 3 2:00s 1:00 D
+Rule AW 2007 2009 - Mar lastSun 2:00s 0 S
+Rule AW 2007 2008 - Oct lastSun 2:00s 1:00 D
Zone Australia/Perth 7:43:24 - LMT 1895 Dec
- 8:00 Aus WST 1943 Jul
- 8:00 AW WST
+ 8:00 Aus AW%sT 1943 Jul
+ 8:00 AW AW%sT
Zone Australia/Eucla 8:35:28 - LMT 1895 Dec
- 8:45 Aus CWST 1943 Jul
- 8:45 AW CWST
+ 8:45 Aus ACW%sT 1943 Jul
+ 8:45 AW ACW%sT
# Queensland
#
@@ -85,150 +84,150 @@
# so use Lindeman.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule AQ 1971 only - Oct lastSun 2:00s 1:00 -
-Rule AQ 1972 only - Feb lastSun 2:00s 0 -
-Rule AQ 1989 1991 - Oct lastSun 2:00s 1:00 -
-Rule AQ 1990 1992 - Mar Sun>=1 2:00s 0 -
-Rule Holiday 1992 1993 - Oct lastSun 2:00s 1:00 -
-Rule Holiday 1993 1994 - Mar Sun>=1 2:00s 0 -
+Rule AQ 1971 only - Oct lastSun 2:00s 1:00 D
+Rule AQ 1972 only - Feb lastSun 2:00s 0 S
+Rule AQ 1989 1991 - Oct lastSun 2:00s 1:00 D
+Rule AQ 1990 1992 - Mar Sun>=1 2:00s 0 S
+Rule Holiday 1992 1993 - Oct lastSun 2:00s 1:00 D
+Rule Holiday 1993 1994 - Mar Sun>=1 2:00s 0 S
Zone Australia/Brisbane 10:12:08 - LMT 1895
- 10:00 Aus EST 1971
- 10:00 AQ EST
+ 10:00 Aus AE%sT 1971
+ 10:00 AQ AE%sT
Zone Australia/Lindeman 9:55:56 - LMT 1895
- 10:00 Aus EST 1971
- 10:00 AQ EST 1992 Jul
- 10:00 Holiday EST
+ 10:00 Aus AE%sT 1971
+ 10:00 AQ AE%sT 1992 Jul
+ 10:00 Holiday AE%sT
# South Australia
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule AS 1971 1985 - Oct lastSun 2:00s 1:00 -
-Rule AS 1986 only - Oct 19 2:00s 1:00 -
-Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 -
-Rule AS 1972 only - Feb 27 2:00s 0 -
-Rule AS 1973 1985 - Mar Sun>=1 2:00s 0 -
-Rule AS 1986 1990 - Mar Sun>=15 2:00s 0 -
-Rule AS 1991 only - Mar 3 2:00s 0 -
-Rule AS 1992 only - Mar 22 2:00s 0 -
-Rule AS 1993 only - Mar 7 2:00s 0 -
-Rule AS 1994 only - Mar 20 2:00s 0 -
-Rule AS 1995 2005 - Mar lastSun 2:00s 0 -
-Rule AS 2006 only - Apr 2 2:00s 0 -
-Rule AS 2007 only - Mar lastSun 2:00s 0 -
-Rule AS 2008 max - Apr Sun>=1 2:00s 0 -
-Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 -
+Rule AS 1971 1985 - Oct lastSun 2:00s 1:00 D
+Rule AS 1986 only - Oct 19 2:00s 1:00 D
+Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 D
+Rule AS 1972 only - Feb 27 2:00s 0 S
+Rule AS 1973 1985 - Mar Sun>=1 2:00s 0 S
+Rule AS 1986 1990 - Mar Sun>=15 2:00s 0 S
+Rule AS 1991 only - Mar 3 2:00s 0 S
+Rule AS 1992 only - Mar 22 2:00s 0 S
+Rule AS 1993 only - Mar 7 2:00s 0 S
+Rule AS 1994 only - Mar 20 2:00s 0 S
+Rule AS 1995 2005 - Mar lastSun 2:00s 0 S
+Rule AS 2006 only - Apr 2 2:00s 0 S
+Rule AS 2007 only - Mar lastSun 2:00s 0 S
+Rule AS 2008 max - Apr Sun>=1 2:00s 0 S
+Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Australia/Adelaide 9:14:20 - LMT 1895 Feb
- 9:00 - CST 1899 May
- 9:30 Aus CST 1971
- 9:30 AS CST
+ 9:00 - ACST 1899 May
+ 9:30 Aus AC%sT 1971
+ 9:30 AS AC%sT
# Tasmania
#
# From Paul Eggert (2005-08-16):
-# <http://www.bom.gov.au/climate/averages/tables/dst_times.shtml>
+# http://www.bom.gov.au/climate/averages/tables/dst_times.shtml
# says King Island didn't observe DST from WWII until late 1971.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule AT 1967 only - Oct Sun>=1 2:00s 1:00 -
-Rule AT 1968 only - Mar lastSun 2:00s 0 -
-Rule AT 1968 1985 - Oct lastSun 2:00s 1:00 -
-Rule AT 1969 1971 - Mar Sun>=8 2:00s 0 -
-Rule AT 1972 only - Feb lastSun 2:00s 0 -
-Rule AT 1973 1981 - Mar Sun>=1 2:00s 0 -
-Rule AT 1982 1983 - Mar lastSun 2:00s 0 -
-Rule AT 1984 1986 - Mar Sun>=1 2:00s 0 -
-Rule AT 1986 only - Oct Sun>=15 2:00s 1:00 -
-Rule AT 1987 1990 - Mar Sun>=15 2:00s 0 -
-Rule AT 1987 only - Oct Sun>=22 2:00s 1:00 -
-Rule AT 1988 1990 - Oct lastSun 2:00s 1:00 -
-Rule AT 1991 1999 - Oct Sun>=1 2:00s 1:00 -
-Rule AT 1991 2005 - Mar lastSun 2:00s 0 -
-Rule AT 2000 only - Aug lastSun 2:00s 1:00 -
-Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 -
-Rule AT 2006 only - Apr Sun>=1 2:00s 0 -
-Rule AT 2007 only - Mar lastSun 2:00s 0 -
-Rule AT 2008 max - Apr Sun>=1 2:00s 0 -
+Rule AT 1967 only - Oct Sun>=1 2:00s 1:00 D
+Rule AT 1968 only - Mar lastSun 2:00s 0 S
+Rule AT 1968 1985 - Oct lastSun 2:00s 1:00 D
+Rule AT 1969 1971 - Mar Sun>=8 2:00s 0 S
+Rule AT 1972 only - Feb lastSun 2:00s 0 S
+Rule AT 1973 1981 - Mar Sun>=1 2:00s 0 S
+Rule AT 1982 1983 - Mar lastSun 2:00s 0 S
+Rule AT 1984 1986 - Mar Sun>=1 2:00s 0 S
+Rule AT 1986 only - Oct Sun>=15 2:00s 1:00 D
+Rule AT 1987 1990 - Mar Sun>=15 2:00s 0 S
+Rule AT 1987 only - Oct Sun>=22 2:00s 1:00 D
+Rule AT 1988 1990 - Oct lastSun 2:00s 1:00 D
+Rule AT 1991 1999 - Oct Sun>=1 2:00s 1:00 D
+Rule AT 1991 2005 - Mar lastSun 2:00s 0 S
+Rule AT 2000 only - Aug lastSun 2:00s 1:00 D
+Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 D
+Rule AT 2006 only - Apr Sun>=1 2:00s 0 S
+Rule AT 2007 only - Mar lastSun 2:00s 0 S
+Rule AT 2008 max - Apr Sun>=1 2:00s 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Australia/Hobart 9:49:16 - LMT 1895 Sep
- 10:00 - EST 1916 Oct 1 2:00
- 10:00 1:00 EST 1917 Feb
- 10:00 Aus EST 1967
- 10:00 AT EST
+ 10:00 - AEST 1916 Oct 1 2:00
+ 10:00 1:00 AEDT 1917 Feb
+ 10:00 Aus AE%sT 1967
+ 10:00 AT AE%sT
Zone Australia/Currie 9:35:28 - LMT 1895 Sep
- 10:00 - EST 1916 Oct 1 2:00
- 10:00 1:00 EST 1917 Feb
- 10:00 Aus EST 1971 Jul
- 10:00 AT EST
+ 10:00 - AEST 1916 Oct 1 2:00
+ 10:00 1:00 AEDT 1917 Feb
+ 10:00 Aus AE%sT 1971 Jul
+ 10:00 AT AE%sT
# Victoria
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule AV 1971 1985 - Oct lastSun 2:00s 1:00 -
-Rule AV 1972 only - Feb lastSun 2:00s 0 -
-Rule AV 1973 1985 - Mar Sun>=1 2:00s 0 -
-Rule AV 1986 1990 - Mar Sun>=15 2:00s 0 -
-Rule AV 1986 1987 - Oct Sun>=15 2:00s 1:00 -
-Rule AV 1988 1999 - Oct lastSun 2:00s 1:00 -
-Rule AV 1991 1994 - Mar Sun>=1 2:00s 0 -
-Rule AV 1995 2005 - Mar lastSun 2:00s 0 -
-Rule AV 2000 only - Aug lastSun 2:00s 1:00 -
-Rule AV 2001 2007 - Oct lastSun 2:00s 1:00 -
-Rule AV 2006 only - Apr Sun>=1 2:00s 0 -
-Rule AV 2007 only - Mar lastSun 2:00s 0 -
-Rule AV 2008 max - Apr Sun>=1 2:00s 0 -
-Rule AV 2008 max - Oct Sun>=1 2:00s 1:00 -
+Rule AV 1971 1985 - Oct lastSun 2:00s 1:00 D
+Rule AV 1972 only - Feb lastSun 2:00s 0 S
+Rule AV 1973 1985 - Mar Sun>=1 2:00s 0 S
+Rule AV 1986 1990 - Mar Sun>=15 2:00s 0 S
+Rule AV 1986 1987 - Oct Sun>=15 2:00s 1:00 D
+Rule AV 1988 1999 - Oct lastSun 2:00s 1:00 D
+Rule AV 1991 1994 - Mar Sun>=1 2:00s 0 S
+Rule AV 1995 2005 - Mar lastSun 2:00s 0 S
+Rule AV 2000 only - Aug lastSun 2:00s 1:00 D
+Rule AV 2001 2007 - Oct lastSun 2:00s 1:00 D
+Rule AV 2006 only - Apr Sun>=1 2:00s 0 S
+Rule AV 2007 only - Mar lastSun 2:00s 0 S
+Rule AV 2008 max - Apr Sun>=1 2:00s 0 S
+Rule AV 2008 max - Oct Sun>=1 2:00s 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Australia/Melbourne 9:39:52 - LMT 1895 Feb
- 10:00 Aus EST 1971
- 10:00 AV EST
+ 10:00 Aus AE%sT 1971
+ 10:00 AV AE%sT
# New South Wales
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule AN 1971 1985 - Oct lastSun 2:00s 1:00 -
-Rule AN 1972 only - Feb 27 2:00s 0 -
-Rule AN 1973 1981 - Mar Sun>=1 2:00s 0 -
-Rule AN 1982 only - Apr Sun>=1 2:00s 0 -
-Rule AN 1983 1985 - Mar Sun>=1 2:00s 0 -
-Rule AN 1986 1989 - Mar Sun>=15 2:00s 0 -
-Rule AN 1986 only - Oct 19 2:00s 1:00 -
-Rule AN 1987 1999 - Oct lastSun 2:00s 1:00 -
-Rule AN 1990 1995 - Mar Sun>=1 2:00s 0 -
-Rule AN 1996 2005 - Mar lastSun 2:00s 0 -
-Rule AN 2000 only - Aug lastSun 2:00s 1:00 -
-Rule AN 2001 2007 - Oct lastSun 2:00s 1:00 -
-Rule AN 2006 only - Apr Sun>=1 2:00s 0 -
-Rule AN 2007 only - Mar lastSun 2:00s 0 -
-Rule AN 2008 max - Apr Sun>=1 2:00s 0 -
-Rule AN 2008 max - Oct Sun>=1 2:00s 1:00 -
+Rule AN 1971 1985 - Oct lastSun 2:00s 1:00 D
+Rule AN 1972 only - Feb 27 2:00s 0 S
+Rule AN 1973 1981 - Mar Sun>=1 2:00s 0 S
+Rule AN 1982 only - Apr Sun>=1 2:00s 0 S
+Rule AN 1983 1985 - Mar Sun>=1 2:00s 0 S
+Rule AN 1986 1989 - Mar Sun>=15 2:00s 0 S
+Rule AN 1986 only - Oct 19 2:00s 1:00 D
+Rule AN 1987 1999 - Oct lastSun 2:00s 1:00 D
+Rule AN 1990 1995 - Mar Sun>=1 2:00s 0 S
+Rule AN 1996 2005 - Mar lastSun 2:00s 0 S
+Rule AN 2000 only - Aug lastSun 2:00s 1:00 D
+Rule AN 2001 2007 - Oct lastSun 2:00s 1:00 D
+Rule AN 2006 only - Apr Sun>=1 2:00s 0 S
+Rule AN 2007 only - Mar lastSun 2:00s 0 S
+Rule AN 2008 max - Apr Sun>=1 2:00s 0 S
+Rule AN 2008 max - Oct Sun>=1 2:00s 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Australia/Sydney 10:04:52 - LMT 1895 Feb
- 10:00 Aus EST 1971
- 10:00 AN EST
+ 10:00 Aus AE%sT 1971
+ 10:00 AN AE%sT
Zone Australia/Broken_Hill 9:25:48 - LMT 1895 Feb
- 10:00 - EST 1896 Aug 23
- 9:00 - CST 1899 May
- 9:30 Aus CST 1971
- 9:30 AN CST 2000
- 9:30 AS CST
+ 10:00 - AEST 1896 Aug 23
+ 9:00 - ACST 1899 May
+ 9:30 Aus AC%sT 1971
+ 9:30 AN AC%sT 2000
+ 9:30 AS AC%sT
# Lord Howe Island
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule LH 1981 1984 - Oct lastSun 2:00 1:00 -
-Rule LH 1982 1985 - Mar Sun>=1 2:00 0 -
-Rule LH 1985 only - Oct lastSun 2:00 0:30 -
-Rule LH 1986 1989 - Mar Sun>=15 2:00 0 -
-Rule LH 1986 only - Oct 19 2:00 0:30 -
-Rule LH 1987 1999 - Oct lastSun 2:00 0:30 -
-Rule LH 1990 1995 - Mar Sun>=1 2:00 0 -
-Rule LH 1996 2005 - Mar lastSun 2:00 0 -
-Rule LH 2000 only - Aug lastSun 2:00 0:30 -
-Rule LH 2001 2007 - Oct lastSun 2:00 0:30 -
-Rule LH 2006 only - Apr Sun>=1 2:00 0 -
-Rule LH 2007 only - Mar lastSun 2:00 0 -
-Rule LH 2008 max - Apr Sun>=1 2:00 0 -
-Rule LH 2008 max - Oct Sun>=1 2:00 0:30 -
+Rule LH 1981 1984 - Oct lastSun 2:00 1:00 D
+Rule LH 1982 1985 - Mar Sun>=1 2:00 0 S
+Rule LH 1985 only - Oct lastSun 2:00 0:30 D
+Rule LH 1986 1989 - Mar Sun>=15 2:00 0 S
+Rule LH 1986 only - Oct 19 2:00 0:30 D
+Rule LH 1987 1999 - Oct lastSun 2:00 0:30 D
+Rule LH 1990 1995 - Mar Sun>=1 2:00 0 S
+Rule LH 1996 2005 - Mar lastSun 2:00 0 S
+Rule LH 2000 only - Aug lastSun 2:00 0:30 D
+Rule LH 2001 2007 - Oct lastSun 2:00 0:30 D
+Rule LH 2006 only - Apr Sun>=1 2:00 0 S
+Rule LH 2007 only - Mar lastSun 2:00 0 S
+Rule LH 2008 max - Apr Sun>=1 2:00 0 S
+Rule LH 2008 max - Oct Sun>=1 2:00 0:30 D
Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
- 10:00 - EST 1981 Mar
- 10:30 LH LHST
+ 10:00 - AEST 1981 Mar
+ 10:30 LH LH%sT
# Australian miscellany
#
@@ -244,8 +243,8 @@
# Permanent occupation (scientific station) 1911-1915 and since 25 March 1948;
# sealing and penguin oil station operated Nov 1899 to Apr 1919. See the
# Tasmania Parks & Wildlife Service history of sealing at Macquarie Island
-# <http://www.parks.tas.gov.au/index.aspx?base=1828>
-# <http://www.parks.tas.gov.au/index.aspx?base=1831>.
+# http://www.parks.tas.gov.au/index.aspx?base=1828
+# http://www.parks.tas.gov.au/index.aspx?base=1831
# Guess that it was like Australia/Hobart while inhabited before 2010.
#
# From Steffen Thorsen (2010-03-10):
@@ -256,16 +255,16 @@
#
# From Arthur David Olson (2013-05-23):
# The 1919 transition is overspecified below so pre-2013 zics
-# will produce a binary file with an EST-type as the first 32-bit type;
+# will produce a binary file with an [A]EST-type as the first 32-bit type;
# this is required for correct handling of times before 1916 by
# pre-2013 versions of localtime.
Zone Antarctica/Macquarie 0 - zzz 1899 Nov
- 10:00 - EST 1916 Oct 1 2:00
- 10:00 1:00 EST 1917 Feb
- 10:00 Aus EST 1919 Apr 1 0:00s
+ 10:00 - AEST 1916 Oct 1 2:00
+ 10:00 1:00 AEDT 1917 Feb
+ 10:00 Aus AE%sT 1919 Apr 1 0:00s
0 - zzz 1948 Mar 25
- 10:00 Aus EST 1967
- 10:00 AT EST 2010 Apr 4 3:00
+ 10:00 Aus AE%sT 1967
+ 10:00 AT AE%sT 2010 Apr 4 3:00
11:00 - MIST # Macquarie I Standard Time
# Christmas
@@ -273,24 +272,14 @@
Zone Indian/Christmas 7:02:52 - LMT 1895 Feb
7:00 - CXT # Christmas Island Time
-# Cook Is
-# From Shanks & Pottenger:
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Cook 1978 only - Nov 12 0:00 0:30 HS
-Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
-Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 HS
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
- -10:30 - CKT 1978 Nov 12 # Cook Is Time
- -10:00 Cook CK%sT
-
-# Cocos
+# Cocos (Keeling) Is
# These islands were ruled by the Ross family from about 1830 to 1978.
# We don't know when standard time was introduced; for now, we guess 1900.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Cocos 6:27:40 - LMT 1900
6:30 - CCT # Cocos Islands Time
+
# Fiji
# Milne gives 11:55:44 for Suva.
@@ -300,20 +289,13 @@
# from November 29th 2009 to April 25th 2010.
#
# "Daylight savings to commence this month"
-# <a href="http://www.radiofiji.com.fj/fullstory.php?id=23719">
# http://www.radiofiji.com.fj/fullstory.php?id=23719
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_fiji01.html">
# http://www.worldtimezone.com/dst_news/dst_news_fiji01.html
-# </a>
# From Steffen Thorsen (2009-11-10):
# The Fiji Government has posted some more details about the approved
# amendments:
-# <a href="http://www.fiji.gov.fj/publish/page_16198.shtml">
# http://www.fiji.gov.fj/publish/page_16198.shtml
-# </a>
# From Steffen Thorsen (2010-03-03):
# The Cabinet in Fiji has decided to end DST about a month early, on
@@ -322,35 +304,24 @@
# 2011 (last Sunday a good guess?).
#
# Official source:
-# <a href="http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=1096:3310-cabinet-approves-change-in-daylight-savings-dates&catid=49:cabinet-releases&Itemid=166">
# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=1096:3310-cabinet-approves-change-in-daylight-savings-dates&catid=49:cabinet-releases&Itemid=166
-# </a>
#
# A bit more background info here:
-# <a href="http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html">
# http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html
-# </a>
# From Alexander Krivenyshev (2010-10-24):
# According to Radio Fiji and Fiji Times online, Fiji will end DST 3
# weeks earlier than expected - on March 6, 2011, not March 27, 2011...
# Here is confirmation from Government of the Republic of the Fiji Islands,
# Ministry of Information (fiji.gov.fj) web site:
-# <a href="http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155">
# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_fiji04.html">
# http://www.worldtimezone.com/dst_news/dst_news_fiji04.html
-# </a>
# From Steffen Thorsen (2011-10-03):
# Now the dates have been confirmed, and at least our start date
# assumption was correct (end date was one week wrong).
#
-# <a href="http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155">
-# www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155
-# </a>
+# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155
# which says
# Members of the public are reminded to change their time to one hour in
# advance at 2am to 3am on October 23, 2011 and one hour back at 3am to
@@ -360,9 +331,7 @@
# Another change to the Fiji DST end date. In the TZ database the end date for
# Fiji DST 2012, is currently Feb 26. This has been changed to Jan 22.
#
-# <a href="http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=5017:amendments-to-daylight-savings&catid=71:press-releases&Itemid=155">
# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=5017:amendments-to-daylight-savings&catid=71:press-releases&Itemid=155
-# </a>
# states:
#
# The end of daylight saving scheduled initially for the 26th of February 2012
@@ -385,31 +354,38 @@
# Fiji will end DST on 2014-01-19 02:00:
# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVINGS-TO-END-THIS-MONTH-%281%29.aspx
-# From Paul Eggert (2014-01-10):
-# For now, guess that Fiji springs forward the Sunday before the fourth
-# Monday in October, and springs back the penultimate Sunday in January.
-# This is ad hoc, but matches recent practice.
+# From Ken Rylander (2014-10-20):
+# DST will start Nov. 2 this year.
+# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-SUNDAY,-NOVEMBER-2ND.aspx
+
+# From Paul Eggert (2014-10-20):
+# For now, guess DST from 02:00 the first Sunday in November to
+# 03:00 the first Sunday on or after January 18. Although ad hoc, it
+# matches this year's plan and seems more likely to match future
+# practice than guessing no DST.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S
Rule Fiji 1999 2000 - Feb lastSun 3:00 0 -
Rule Fiji 2009 only - Nov 29 2:00 1:00 S
Rule Fiji 2010 only - Mar lastSun 3:00 0 -
-Rule Fiji 2010 max - Oct Sun>=21 2:00 1:00 S
+Rule Fiji 2010 2013 - Oct Sun>=21 2:00 1:00 S
Rule Fiji 2011 only - Mar Sun>=1 3:00 0 -
Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 -
-Rule Fiji 2014 max - Jan Sun>=18 2:00 0 -
+Rule Fiji 2014 only - Jan Sun>=18 2:00 0 -
+Rule Fiji 2014 max - Nov Sun>=1 2:00 1:00 S
+Rule Fiji 2015 max - Jan Sun>=18 3:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
+Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
12:00 Fiji FJ%sT # Fiji Time
# French Polynesia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct # Rikitea
+Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct # Rikitea
-9:00 - GAMT # Gambier Time
Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct
-9:30 - MART # Marquesas Time
-Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete
+Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete
-10:00 - TAHT # Tahiti Time
# Clipperton (near North America) is administered from French Polynesia;
# it is uninhabited.
@@ -417,14 +393,14 @@
# Guam
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31
- 9:39:00 - LMT 1901 # Agana
- 10:00 - GST 2000 Dec 23 # Guam
+ 9:39:00 - LMT 1901 # Agana
+ 10:00 - GST 2000 Dec 23 # Guam
10:00 - ChST # Chamorro Standard Time
# Kiribati
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
- 12:00 - GILT # Gilbert Is Time
+Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
+ 12:00 - GILT # Gilbert Is Time
Zone Pacific/Enderbury -11:24:20 - LMT 1901
-12:00 - PHOT 1979 Oct # Phoenix Is Time
-11:00 - PHOT 1995
@@ -438,7 +414,7 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Saipan -14:17:00 - LMT 1844 Dec 31
9:43:00 - LMT 1901
- 9:00 - MPT 1969 Oct # N Mariana Is Time
+ 9:00 - MPT 1969 Oct # N Mariana Is Time
10:00 - MPT 2000 Dec 23
10:00 - ChST # Chamorro Standard Time
@@ -449,24 +425,24 @@
12:00 - MHT
Zone Pacific/Kwajalein 11:09:20 - LMT 1901
11:00 - MHT 1969 Oct
- -12:00 - KWAT 1993 Aug 20 # Kwajalein Time
+ -12:00 - KWAT 1993 Aug 20 # Kwajalein Time
12:00 - MHT
# Micronesia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Chuuk 10:07:08 - LMT 1901
- 10:00 - CHUT # Chuuk Time
-Zone Pacific/Pohnpei 10:32:52 - LMT 1901 # Kolonia
- 11:00 - PONT # Pohnpei Time
+ 10:00 - CHUT # Chuuk Time
+Zone Pacific/Pohnpei 10:32:52 - LMT 1901 # Kolonia
+ 11:00 - PONT # Pohnpei Time
Zone Pacific/Kosrae 10:51:56 - LMT 1901
- 11:00 - KOST 1969 Oct # Kosrae Time
+ 11:00 - KOST 1969 Oct # Kosrae Time
12:00 - KOST 1999
11:00 - KOST
# Nauru
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
- 11:30 - NRT 1942 Mar 15 # Nauru Time
+Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
+ 11:30 - NRT 1942 Mar 15 # Nauru Time
9:00 - JST 1944 Aug 15
11:30 - NRT 1979 May
12:00 - NRT
@@ -479,7 +455,7 @@
# Shanks & Pottenger say the following was at 2:00; go with IATA.
Rule NC 1997 only - Mar 2 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Noumea 11:05:48 - LMT 1912 Jan 13
+Zone Pacific/Noumea 11:05:48 - LMT 1912 Jan 13 # Nouméa
11:00 NC NC%sT
@@ -496,7 +472,8 @@
Rule NZ 1934 1940 - Sep lastSun 2:00 0:30 S
Rule NZ 1946 only - Jan 1 0:00 0 S
# Since 1957 Chatham has been 45 minutes ahead of NZ, but there's no
-# convenient notation for this so we must duplicate the Rule lines.
+# convenient single notation for the date and time of this transition
+# so we must duplicate the Rule lines.
Rule NZ 1974 only - Nov Sun>=1 2:00s 1:00 D
Rule Chatham 1974 only - Nov Sun>=1 2:45s 1:00 D
Rule NZ 1975 only - Feb lastSun 2:00s 0 S
@@ -519,13 +496,14 @@
Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2
11:30 NZ NZ%sT 1946 Jan 1
12:00 NZ NZ%sT
-Zone Pacific/Chatham 12:13:48 - LMT 1957 Jan 1
+Zone Pacific/Chatham 12:13:48 - LMT 1868 Nov 2
+ 12:15 - CHAST 1946 Jan 1
12:45 Chatham CHA%sT
Link Pacific/Auckland Antarctica/McMurdo
# Auckland Is
-# uninhabited; Maori and Moriori, colonial settlers, pastoralists, sealers,
+# uninhabited; Māori and Moriori, colonial settlers, pastoralists, sealers,
# and scientific personnel have wintered
# Campbell I
@@ -534,48 +512,82 @@
# previously whalers, sealers, pastoralists, and scientific personnel wintered
# was probably like Pacific/Auckland
+# Cook Is
+# From Shanks & Pottenger:
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Cook 1978 only - Nov 12 0:00 0:30 HS
+Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
+Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 HS
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
+ -10:30 - CKT 1978 Nov 12 # Cook Is Time
+ -10:00 Cook CK%sT
+
###############################################################################
# Niue
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Niue -11:19:40 - LMT 1901 # Alofi
- -11:20 - NUT 1951 # Niue Time
- -11:30 - NUT 1978 Oct 1
+Zone Pacific/Niue -11:19:40 - LMT 1901 # Alofi
+ -11:20 - NUT 1951 # Niue Time
+ -11:30 - NUT 1978 Oct 1
-11:00 - NUT
# Norfolk
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston
- 11:12 - NMT 1951 # Norfolk Mean Time
- 11:30 - NFT # Norfolk Time
+Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston
+ 11:12 - NMT 1951 # Norfolk Mean Time
+ 11:30 - NFT # Norfolk Time
# Palau (Belau)
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Palau 8:57:56 - LMT 1901 # Koror
+Zone Pacific/Palau 8:57:56 - LMT 1901 # Koror
9:00 - PWT # Palau Time
# Papua New Guinea
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Port_Moresby 9:48:40 - LMT 1880
- 9:48:32 - PMMT 1895 # Port Moresby Mean Time
- 10:00 - PGT # Papua New Guinea Time
+ 9:48:32 - PMMT 1895 # Port Moresby Mean Time
+ 10:00 - PGT # Papua New Guinea Time
+#
+# From Paul Eggert (2014-10-13):
+# Base the Bougainville entry on the Arawa-Kieta region, which appears to have
+# the most people even though it was devastated in the Bougainville Civil War.
+#
+# Although Shanks gives 1942-03-15 / 1943-11-01 for JST, these dates
+# are apparently rough guesswork from the starts of military campaigns.
+# The World War II entries below are instead based on Arawa-Kieta.
+# The Japanese occupied Kieta in July 1942,
+# according to the Pacific War Online Encyclopedia
+# http://pwencycl.kgbudge.com/B/o/Bougainville.htm
+# and seem to have controlled it until their 1945-08-21 surrender.
+#
+# The Autonomous Region of Bougainville plans to switch from UTC+10 to UTC+11
+# on 2014-12-28 at 02:00. They call UTC+11 "Bougainville Standard Time";
+# abbreviate this as BST. See:
+# http://www.bougainville24.com/bougainville-issues/bougainville-gets-own-timezone/
+#
+Zone Pacific/Bougainville 10:22:16 - LMT 1880
+ 9:48:32 - PMMT 1895
+ 10:00 - PGT 1942 Jul
+ 9:00 - JST 1945 Aug 21
+ 10:00 - PGT 2014 Dec 28 2:00
+ 11:00 - BST
# Pitcairn
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Pitcairn -8:40:20 - LMT 1901 # Adamstown
- -8:30 - PNT 1998 Apr 27 00:00
+Zone Pacific/Pitcairn -8:40:20 - LMT 1901 # Adamstown
+ -8:30 - PNT 1998 Apr 27 0:00
-8:00 - PST # Pitcairn Standard Time
# American Samoa
Zone Pacific/Pago_Pago 12:37:12 - LMT 1879 Jul 5
-11:22:48 - LMT 1911
- -11:30 - SAMT 1950 # Samoa Time
- -11:00 - NST 1967 Apr # N=Nome
- -11:00 - BST 1983 Nov 30 # B=Bering
- -11:00 - SST # S=Samoa
+ -11:00 - NST 1967 Apr # N=Nome
+ -11:00 - BST 1983 Nov 30 # B=Bering
+ -11:00 - SST # S=Samoa
-# Samoa
+# Samoa (formerly and also known as Western Samoa)
# From Steffen Thorsen (2009-10-16):
# We have been in contact with the government of Samoa again, and received
@@ -586,141 +598,80 @@
# Sunday of April 2011."
#
# Background info:
-# <a href="http://www.timeanddate.com/news/time/samoa-dst-plan-2009.html">
# http://www.timeanddate.com/news/time/samoa-dst-plan-2009.html
-# </a>
#
# Samoa's Daylight Saving Time Act 2009 is available here, but does not
# contain any dates:
-# <a href="http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf">
# http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf
-# </a>
# From Laupue Raymond Hughes (2010-10-07):
# Please see
-# <a href="http://www.mcil.gov.ws">
# http://www.mcil.gov.ws
-# </a>,
# the Ministry of Commerce, Industry and Labour (sideframe) "Last Sunday
# September 2010 (26/09/10) - adjust clocks forward from 12:00 midnight
# to 01:00am and First Sunday April 2011 (03/04/11) - adjust clocks
# backwards from 1:00am to 12:00am"
# From Laupue Raymond Hughes (2011-03-07):
-# I believe this will be posted shortly on the website
-# <a href="http://www.mcil.gov.ws">
-# www.mcil.gov.ws
-# </a>
+# [http://www.mcil.gov.ws/ftcd/daylight_saving_2011.pdf]
#
-# PUBLIC NOTICE ON DAYLIGHT SAVING TIME
-#
-# Pursuant to the Daylight Saving Act 2009 and Cabinets decision,
-# businesses and the general public are hereby advised that daylight
-# saving time is on the first Saturday of April 2011 (02/04/11).
-#
-# The public is therefore advised that when the standard time strikes
-# the hour of four oclock (4.00am or 0400 Hours) on the 2nd April 2011,
-# then all instruments used to measure standard time are to be
-# adjusted/changed to three oclock (3:00am or 0300Hrs).
-#
-# Margaret Fruean ACTING CHIEF EXECUTIVE OFFICER MINISTRY OF COMMERCE,
-# INDUSTRY AND LABOUR 28th February 2011
+# ... when the standard time strikes the hour of four o'clock (4.00am
+# or 0400 Hours) on the 2nd April 2011, then all instruments used to
+# measure standard time are to be adjusted/changed to three o'clock
+# (3:00am or 0300Hrs).
-# From David Zuelke (2011-05-09):
+# From David Zülke (2011-05-09):
# Subject: Samoa to move timezone from east to west of international date line
#
-# <a href="http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963">
# http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963
-# </a>
-# From Mark Sim-Smith (2011-08-17):
-# I have been in contact with Leilani Tuala Warren from the Samoa Law
-# Reform Commission, and she has sent me a copy of the Bill that she
-# confirmed has been passed...Most of the sections are about maps rather
-# than the time zone change, but I'll paste the relevant bits below. But
-# the essence is that at midnight 29 Dec (UTC-11 I suppose), Samoa
-# changes from UTC-11 to UTC+13:
-#
-# International Date Line Bill 2011
-#
-# AN ACT to provide for the change to standard time in Samoa and to make
-# consequential amendments to the position of the International Date
-# Line, and for related purposes.
-#
-# BE IT ENACTED by the Legislative Assembly of Samoa in Parliament
-# assembled as follows:
-#
-# 1. Short title and commencement-(1) This Act may be cited as the
-# International Date Line Act 2011. (2) Except for section 5(3) this Act
-# commences at 12 o'clock midnight, on Thursday 29th December 2011. (3)
-# Section 5(3) commences on the date of assent by the Head of State.
-#
-# [snip]
-#
-# 3. Interpretation - [snip] "Samoa standard time" in this Act and any
-# other statute of Samoa which refers to 'Samoa standard time' means the
-# time 13 hours in advance of Co-ordinated Universal Time.
-#
-# 4. Samoa standard time - (1) Upon the commencement of this Act, Samoa
-# standard time shall be set at 13 hours in advance of Co-ordinated
-# Universal Time for the whole of Samoa. (2) All references to Samoa's
-# time zone and to Samoa standard time in Samoa in all legislation and
-# instruments after the commencement of this Act shall be references to
-# Samoa standard time as provided for in this Act. (3) Nothing in this
-# Act affects the provisions of the Daylight Saving Act 2009, except that
-# it defines Samoa standard time....
+# From Paul Eggert (2014-06-27):
+# The International Date Line Act 2011
+# http://www.parliament.gov.ws/images/ACTS/International_Date_Line_Act__2011_-_Eng.pdf
+# changed Samoa from UTC-11 to UTC+13, effective "12 o'clock midnight, on
+# Thursday 29th December 2011". The International Date Line was adjusted
+# accordingly.
# From Laupue Raymond Hughes (2011-09-02):
-# <a href="http://www.mcil.gov.ws/mcil_publications.html">
# http://www.mcil.gov.ws/mcil_publications.html
-# </a>
#
# here is the official website publication for Samoa DST and dateline change
#
# DST
-# Year End Time Start Time
-# 2011 - - - - - - 24 September 3:00am to 4:00am
-# 2012 01 April 4:00am to 3:00am - - - - - -
+# Year End Time Start Time
+# 2011 - - - - - - 24 September 3:00am to 4:00am
+# 2012 01 April 4:00am to 3:00am - - - - - -
#
# Dateline Change skip Friday 30th Dec 2011
# Thursday 29th December 2011 23:59:59 Hours
# Saturday 31st December 2011 00:00:00 Hours
#
-# Clarification by Tim Parenti (2012-01-03):
-# Although Samoa has used Daylight Saving Time in the 2010-2011 and 2011-2012
-# seasons, there is not yet any indication that this trend will continue on
-# a regular basis. For now, we have explicitly listed the transitions below.
-#
-# From Nicky (2012-09-10):
+# From Nicholas Pereira (2012-09-10):
# Daylight Saving Time commences on Sunday 30th September 2012 and
-# ends on Sunday 7th of April 2013.
-#
-# Please find link below for more information.
+# ends on Sunday 7th of April 2013....
# http://www.mcil.gov.ws/mcil_publications.html
#
-# That publication also includes dates for Summer of 2013/4 as well
-# which give the impression of a pattern in selecting dates for the
-# future, so for now, we will guess this will continue.
+# From Paul Eggert (2014-07-08):
+# That web page currently lists transitions for 2012/3 and 2013/4.
+# Assume the pattern instituted in 2012 will continue indefinitely.
-# Western Samoa
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule WS 2010 only - Sep lastSun 0:00 1 D
+Rule WS 2011 only - Apr Sat>=1 4:00 0 S
+Rule WS 2011 only - Sep lastSat 3:00 1 D
+Rule WS 2012 max - Apr Sun>=1 4:00 0 S
Rule WS 2012 max - Sep lastSun 3:00 1 D
-Rule WS 2012 max - Apr Sun>=1 4:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5
-11:26:56 - LMT 1911
- -11:30 - SAMT 1950 # Samoa Time
- -11:00 - WST 2010 Sep 26
- -11:00 1:00 WSDT 2011 Apr 2 4:00
- -11:00 - WST 2011 Sep 24 3:00
- -11:00 1:00 WSDT 2011 Dec 30
- 13:00 1:00 WSDT 2012 Apr Sun>=1 4:00
+ -11:30 - WSST 1950
+ -11:00 WS S%sT 2011 Dec 29 24:00 # S=Samoa
13:00 WS WS%sT
# Solomon Is
# excludes Bougainville, for which see Papua New Guinea
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara
+Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara
11:00 - SBT # Solomon Is Time
# Tokelau Is
@@ -744,7 +695,7 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Fakaofo -11:24:56 - LMT 1901
- -11:00 - TKT 2011 Dec 30 # Tokelau Time
+ -11:00 - TKT 2011 Dec 30 # Tokelau Time
13:00 - TKT
# Tonga
@@ -804,8 +755,8 @@
# time from Operation Newsreel (Hardtack I/Teak shot, 1958-08-01) to the last
# Operation Fishbowl shot (Tightrope, 1962-11-04).... [See] Herman Hoerlin,
# "The United States High-Altitude Test Experience: A Review Emphasizing the
-# Impact on the Environment", Los Alamos LA-6405, Oct 1976
-# <http://www.fas.org/sgp/othergov/doe/lanl/docs1/00322994.pdf>.
+# Impact on the Environment", Los Alamos LA-6405, Oct 1976.
+# http://www.fas.org/sgp/othergov/doe/lanl/docs1/00322994.pdf
# See the table on page 4 where he lists GMT and local times for the tests; a
# footnote for the JI tests reads that local time is "JI time = Hawaii Time
# Minus One Hour".
@@ -820,7 +771,7 @@
# From Mark Brader (2005-01-23):
# [Fallacies and Fantasies of Air Transport History, by R.E.G. Davies,
# published 1994 by Paladwr Press, McLean, VA, USA; ISBN 0-9626483-5-3]
-# reproduced a Pan American Airways timeables from 1936, for their weekly
+# reproduced a Pan American Airways timetable from 1936, for their weekly
# "Orient Express" flights between San Francisco and Manila, and connecting
# flights to Chicago and the US East Coast. As it uses some time zone
# designations that I've never seen before:....
@@ -830,9 +781,9 @@
Zone Pacific/Midway -11:49:28 - LMT 1901
-11:00 - NST 1956 Jun 3
-11:00 1:00 NDT 1956 Sep 2
- -11:00 - NST 1967 Apr # N=Nome
- -11:00 - BST 1983 Nov 30 # B=Bering
- -11:00 - SST # S=Samoa
+ -11:00 - NST 1967 Apr # N=Nome
+ -11:00 - BST 1983 Nov 30 # B=Bering
+ -11:00 - SST # S=Samoa
# Palmyra
# uninhabited since World War II; was probably like Pacific/Kiritimati
@@ -852,7 +803,7 @@
Rule Vanuatu 1992 1993 - Jan Sun>=23 0:00 0 -
Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
+Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
11:00 Vanuatu VU%sT # Vanuatu Time
# Wallis and Futuna
@@ -864,188 +815,213 @@
# NOTES
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future). For more, please see
+# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2013-02-21):
-# A good source for time zone historical data outside the U.S. is
+# From Paul Eggert (2014-10-31):
+#
+# Unless otherwise specified, the source for data through 1990 is:
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
# San Diego: ACS Publications, Inc. (2003).
+# Unfortunately this book contains many errors and cites no sources.
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
# Association's Standard Schedules Information Manual (IATA SSIM),
# published semiannually. Law sent in several helpful summaries
-# of the IATA's data after 1990.
-#
-# Except where otherwise noted, Shanks & Pottenger is the source for
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
+# of the IATA's data after 1990. Except where otherwise noted,
+# IATA SSIM is the source for entries after 1990.
#
# Another source occasionally used is Edward W. Whitman, World Time Differences,
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
# I found in the UCLA library.
#
# For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
-# <http://www.jstor.org/stable/1774359>.
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
+# http://www.jstor.org/stable/1774359
#
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
-# I invented the abbreviations marked `*' in the following table;
+# I invented the abbreviations marked '*' in the following table;
# the rest are from earlier versions of this file, or from other sources.
# Corrections are welcome!
-# std dst
-# LMT Local Mean Time
-# 8:00 WST WST Western Australia
-# 8:45 CWST CWST Central Western Australia*
-# 9:00 JST Japan
-# 9:30 CST CST Central Australia
-# 10:00 EST EST Eastern Australia
-# 10:00 ChST Chamorro
-# 10:30 LHST LHST Lord Howe*
-# 11:30 NZMT NZST New Zealand through 1945
-# 12:00 NZST NZDT New Zealand 1946-present
-# 12:45 CHAST CHADT Chatham*
-# -11:00 SST Samoa
-# -10:00 HST Hawaii
-# - 8:00 PST Pitcairn*
+# std dst
+# LMT Local Mean Time
+# 8:00 AWST AWDT Western Australia
+# 8:45 ACWST ACWDT Central Western Australia*
+# 9:00 JST Japan
+# 9:30 ACST ACDT Central Australia
+# 10:00 AEST AEDT Eastern Australia
+# 10:00 ChST Chamorro
+# 10:30 LHST LHDT Lord Howe*
+# 11:00 BST Bougainville*
+# 11:30 NZMT NZST New Zealand through 1945
+# 12:00 NZST NZDT New Zealand 1946-present
+# 12:15 CHAST Chatham through 1945*
+# 12:45 CHAST CHADT Chatham 1946-present*
+# 13:00 WSST WSDT (western) Samoa 2011-present*
+# -11:30 WSST Western Samoa through 1950*
+# -11:00 SST Samoa
+# -10:00 HST Hawaii
+# - 8:00 PST Pitcairn*
#
-# See the `northamerica' file for Hawaii.
-# See the `southamerica' file for Easter I and the Galapagos Is.
+# See the 'northamerica' file for Hawaii.
+# See the 'southamerica' file for Easter I and the Galápagos Is.
###############################################################################
# Australia
+# From Paul Eggert (2014-06-30):
+# Daylight saving time has long been controversial in Australia, pitting
+# region against region, rural against urban, and local against global.
+# For example, in her review of Graeme Davison's _The Unforgiving
+# Minute: how Australians learned to tell the time_ (1993), Perth native
+# Phillipa J Martyr wrote, "The section entitled 'Saving Daylight' was
+# very informative, but was (as can, sadly, only be expected from a
+# Melbourne-based study) replete with the usual chuckleheaded
+# Queenslanders and straw-chewing yokels from the West prattling fables
+# about fading curtains and crazed farm animals."
+# Electronic Journal of Australian and New Zealand History (1997-03-03)
+# http://www.jcu.edu.au/aff/history/reviews/davison.htm
+
# From Paul Eggert (2005-12-08):
-# <a href="http://www.bom.gov.au/climate/averages/tables/dst_times.shtml">
# Implementation Dates of Daylight Saving Time within Australia
-# </a> summarizes daylight saving issues in Australia.
+# http://www.bom.gov.au/climate/averages/tables/dst_times.shtml
+# summarizes daylight saving issues in Australia.
# From Arthur David Olson (2005-12-12):
-# <a href="http://www.lawlink.nsw.gov.au/lawlink/Corporate/ll_agdinfo.nsf/pages/community_relations_daylight_saving">
# Lawlink NSW:Daylight Saving in New South Wales
-# </a> covers New South Wales in particular.
+# http://www.lawlink.nsw.gov.au/lawlink/Corporate/ll_agdinfo.nsf/pages/community_relations_daylight_saving
+# covers New South Wales in particular.
# From John Mackin (1991-03-06):
-# We in Australia have _never_ referred to DST as `daylight' time.
-# It is called `summer' time. Now by a happy coincidence, `summer'
-# and `standard' happen to start with the same letter; hence, the
+# We in Australia have _never_ referred to DST as 'daylight' time.
+# It is called 'summer' time. Now by a happy coincidence, 'summer'
+# and 'standard' happen to start with the same letter; hence, the
# abbreviation does _not_ change...
# The legislation does not actually define abbreviations, at least
# in this State, but the abbreviation is just commonly taken to be the
# initials of the phrase, and the legislation here uniformly uses
-# the phrase `summer time' and does not use the phrase `daylight
+# the phrase 'summer time' and does not use the phrase 'daylight
# time'.
# Announcers on the Commonwealth radio network, the ABC (for Australian
-# Broadcasting Commission), use the phrases `Eastern Standard Time'
-# or `Eastern Summer Time'. (Note, though, that as I say in the
+# Broadcasting Commission), use the phrases 'Eastern Standard Time'
+# or 'Eastern Summer Time'. (Note, though, that as I say in the
# current australasia file, there is really no such thing.) Announcers
# on its overseas service, Radio Australia, use the same phrases
-# prefixed by the word `Australian' when referring to local times;
+# prefixed by the word 'Australian' when referring to local times;
# time announcements on that service, naturally enough, are made in UTC.
-# From Arthur David Olson (1992-03-08):
-# Given the above, what's chosen for year-round use is:
-# CST for any place operating at a GMTOFF of 9:30
-# WST for any place operating at a GMTOFF of 8:00
-# EST for any place operating at a GMTOFF of 10:00
-
-# From Chuck Soper (2006-06-01):
-# I recently found this Australian government web page on time zones:
-# <http://www.australia.gov.au/about-australia-13time>
-# And this government web page lists time zone names and abbreviations:
-# <http://www.bom.gov.au/climate/averages/tables/daysavtm.shtml>
-
-# From Paul Eggert (2001-04-05), summarizing a long discussion about "EST"
-# versus "AEST" etc.:
+# From Paul Eggert (2014-06-30):
#
-# I see the following points of dispute:
+# Inspired by Mackin's remarks quoted above, earlier versions of this
+# file used "EST" for both Eastern Standard Time and Eastern Summer
+# Time in Australia, and similarly for "CST", "CWST", and "WST".
+# However, these abbreviations were confusing and were not common
+# practice among Australians, and there were justifiable complaints
+# about them, so I attempted to survey current Australian usage.
+# For the tz database, the full English phrase is not that important;
+# what matters is the abbreviation. It's difficult to survey the web
+# directly for abbreviation usage, as there are so many false hits for
+# strings like "EST" and "EDT", so I looked for pages that defined an
+# abbreviation for eastern or central DST in Australia, and got the
+# following numbers of unique hits for the listed Google queries:
#
-# * How important are unique time zone abbreviations?
+# 10 "Eastern Daylight Time AEST" site:au [some are false hits]
+# 10 "Eastern Summer Time AEST" site:au
+# 10 "Summer Time AEDT" site:au
+# 13 "EDST Eastern Daylight Saving Time" site:au
+# 18 "Summer Time ESST" site:au
+# 28 "Eastern Daylight Saving Time EDST" site:au
+# 39 "EDT Eastern Daylight Time" site:au [some are false hits]
+# 53 "Eastern Daylight Time EDT" site:au [some are false hits]
+# 54 "AEDT Australian Eastern Daylight Time" site:au
+# 182 "Eastern Daylight Time AEDT" site:au
#
-# Here I tend to agree with the point (most recently made by Chris
-# Newman) that unique abbreviations should not be essential for proper
-# operation of software. We have other instances of ambiguity
-# (e.g. "IST" denoting both "Israel Standard Time" and "Indian
-# Standard Time"), and they are not likely to go away any time soon.
-# In the old days, some software mistakenly relied on unique
-# abbreviations, but this is becoming less true with time, and I don't
-# think it's that important to cater to such software these days.
+# 17 "Central Daylight Time CDT" site:au [some are false hits]
+# 46 "Central Daylight Time ACDT" site:au
#
-# On the other hand, there is another motivation for unambiguous
-# abbreviations: it cuts down on human confusion. This is
-# particularly true for Australia, where "EST" can mean one thing for
-# time T and a different thing for time T plus 1 second.
+# I tried several other variants (e.g., "Eastern Summer Time EST") but
+# they all returned fewer than 10 unique hits. I also looked for pages
+# mentioning both "western standard time" and an abbreviation, since
+# there is no WST in the US to generate false hits, and found:
#
-# * Does the relevant legislation indicate which abbreviations should be used?
+# 156 "western standard time" AWST site:au
+# 226 "western standard time" WST site:au
#
-# Here I tend to think that things are a mess, just as they are in
-# many other countries. We Americans are currently disagreeing about
-# which abbreviation to use for the newly legislated Chamorro Standard
-# Time, for example.
+# I then surveyed the top ten newspapers in Australia by circulation as
+# listed in Wikipedia, using Google queries like "AEDT site:heraldsun.com.au"
+# and obtaining estimated counts from the initial page of search results.
+# All ten papers greatly preferred "AEDT" to "EDT". The papers
+# surveyed were the Herald Sun, The Daily Telegraph, The Courier-Mail,
+# The Sydney Morning Herald, The West Australian, The Age, The Advertiser,
+# The Australian, The Financial Review, and The Herald (Newcastle).
#
-# Personally, I would prefer to use common practice; I would like to
-# refer to legislation only for examples of common practice, or as a
-# tiebreaker.
+# I also searched for historical usage, to see whether abbreviations
+# like "AEDT" are new. A Trove search <http://trove.nla.gov.au/>
+# found only one newspaper (The Canberra Times) with a house style
+# dating back to the 1970s, I expect because other newspapers weren't
+# fully indexed. The Canberra Times strongly preferred abbreviations
+# like "AEDT". The first occurrence of "AEDT" was a World Weather
+# column (1971-11-17, page 24), and of "ACDT" was a Scoreboard column
+# (1993-01-24, p 16). The style was the typical usage but was not
+# strictly enforced; for example, "Welcome to the twilight zones ..."
+# (1994-10-29, p 1) uses the abbreviations AEST/AEDT, CST/CDT, and
+# WST, and goes on to say, "The confusion and frustration some feel
+# about the lack of uniformity among Australia's six states and two
+# territories has prompted one group to form its very own political
+# party -- the Sydney-based Daylight Saving Extension Party."
#
-# * Do Australians more often use "Eastern Daylight Time" or "Eastern
-# Summer Time"? Do they typically prefix the time zone names with
-# the word "Australian"?
+# I also surveyed federal government sources. They did not agree:
#
-# My own impression is that both "Daylight Time" and "Summer Time" are
-# common and are widely understood, but that "Summer Time" is more
-# popular; and that the leading "A" is also common but is omitted more
-# often than not. I just used AltaVista advanced search and got the
-# following count of page hits:
+# The Australian Government (2014-03-26)
+# http://australia.gov.au/about-australia/our-country/time
+# (This document was produced by the Department of Finance.)
+# AEST ACST AWST AEDT ACDT
#
-# 1,103 "Eastern Summer Time" AND domain:au
-# 971 "Australian Eastern Summer Time" AND domain:au
-# 613 "Eastern Daylight Time" AND domain:au
-# 127 "Australian Eastern Daylight Time" AND domain:au
+# Bureau of Meteorology (2012-11-08)
+# http://www.bom.gov.au/climate/averages/tables/daysavtm.shtml
+# EST CST WST EDT CDT
#
-# Here "Summer" seems quite a bit more popular than "Daylight",
-# particularly when we know the time zone is Australian and not US,
-# say. The "Australian" prefix seems to be popular for Eastern Summer
-# Time, but unpopular for Eastern Daylight Time.
+# Civil Aviation Safety Authority (undated)
+# http://services.casa.gov.au/outnback/inc/pages/episode3/episode-3_time_zones.shtml
+# EST CST WST (no abbreviations given for DST)
#
-# For abbreviations, tools like AltaVista are less useful because of
-# ambiguity. Many hits are not really time zones, unfortunately, and
-# many hits denote US time zones and not Australian ones. But here
-# are the hit counts anyway:
+# Geoscience Australia (2011-11-24)
+# http://www.ga.gov.au/geodesy/astro/sunrise.jsp
+# AEST ACST AWST AEDT ACDT
#
-# 161,304 "EST" and domain:au
-# 25,156 "EDT" and domain:au
-# 18,263 "AEST" and domain:au
-# 10,416 "AEDT" and domain:au
+# Parliamentary Library (2008-11-10)
+# http://www.aph.gov.au/binaries/library/pubs/rp/2008-09/09rp14.pdf
+# EST CST WST preferred for standard time; AEST AEDT ACST ACDT also used
#
-# 14,538 "CST" and domain:au
-# 5,728 "CDT" and domain:au
-# 176 "ACST" and domain:au
-# 29 "ACDT" and domain:au
+# The Transport Safety Bureau has an extensive series of accident reports,
+# and investigators seem to use whatever abbreviation they like.
+# Googling site:atsb.gov.au found the following number of unique hits:
+# 311 "ESuT", 195 "EDT", 26 "AEDT", 83 "CSuT", 46 "CDT".
+# "_SuT" tended to appear in older reports, and "A_DT" tended to
+# appear in reports of events with international implications.
#
-# 7,539 "WST" and domain:au
-# 68 "AWST" and domain:au
-#
-# This data suggest that Australians tend to omit the "A" prefix in
-# practice. The situation for "ST" versus "DT" is less clear, given
-# the ambiguities involved.
-#
-# * How do Australians feel about the abbreviations in the tz database?
-#
-# If you just count Australians on this list, I count 2 in favor and 3
-# against. One of the "against" votes (David Keegel) counseled delay,
-# saying that both AEST/AEDT and EST/EST are widely used and
-# understood in Australia.
+# From the above it appears that there is a working consensus in
+# Australia to use trailing "DT" for daylight saving time; although
+# some sources use trailing "SST" or "ST" or "SuT" they are by far in
+# the minority. The case for leading "A" is weaker, but since it
+# seems to be preferred in the overall web and is preferred in all
+# the leading newspaper websites and in many government departments,
+# it has a stronger case than omitting the leading "A". The current
+# version of the database therefore uses abbreviations like "AEST" and
+# "AEDT" for Australian time zones.
# From Paul Eggert (1995-12-19):
# Shanks & Pottenger report 2:00 for all autumn changes in Australia and NZ.
# Mark Prior writes that his newspaper
# reports that NSW's fall 1995 change will occur at 2:00,
# but Robert Elz says it's been 3:00 in Victoria since 1970
-# and perhaps the newspaper's `2:00' is referring to standard time.
+# and perhaps the newspaper's '2:00' is referring to standard time.
# For now we'll continue to assume 2:00s for changes since 1960.
# From Eric Ulevik (1998-01-05):
@@ -1055,17 +1031,14 @@
# relevant entries in this database.
#
# NSW (including LHI and Broken Hill):
-# <a href="http://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html">
# Standard Time Act 1987 (updated 1995-04-04)
-# </a>
+# http://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html
# ACT
-# <a href="http://www.austlii.edu.au/au/legis/act/consol_act/stasta1972279/index.html">
# Standard Time and Summer Time Act 1972
-# </a>
+# http://www.austlii.edu.au/au/legis/act/consol_act/stasta1972279/index.html
# SA
-# <a href="http://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html">
# Standard Time Act, 1898
-# </a>
+# http://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html
# From David Grosz (2005-06-13):
# It was announced last week that Daylight Saving would be extended by
@@ -1083,7 +1056,7 @@
# Victoria: I wasn't able to find anything separate, but the other articles
# allude to it.
# But not Queensland
-# http://www.news.com.au/story/0,10117,15564030-1248,00.html.
+# http://www.news.com.au/story/0,10117,15564030-1248,00.html
# Northern Territory
@@ -1130,9 +1103,9 @@
# The 1992 ending date used in the rules is a best guess;
# it matches what was used in the past.
-# <a href="http://www.bom.gov.au/faq/faqgen.htm">
# The Australian Bureau of Meteorology FAQ
-# </a> (1999-09-27) writes that Giles Meteorological Station uses
+# http://www.bom.gov.au/faq/faqgen.htm
+# (1999-09-27) writes that Giles Meteorological Station uses
# South Australian time even though it's located in Western Australia.
# Queensland
@@ -1173,9 +1146,9 @@
# The chosen rules the union of the 1971/1972 change and the 1989-1992 changes.
# From Christopher Hunt (2006-11-21), after an advance warning
-# from Jesper Norgaard Welen (2006-11-01):
+# from Jesper Nørgaard Welen (2006-11-01):
# WA are trialing DST for three years.
-# <http://www.parliament.wa.gov.au/parliament/bills.nsf/9A1B183144403DA54825721200088DF1/$File/Bill175-1B.pdf>
+# http://www.parliament.wa.gov.au/parliament/bills.nsf/9A1B183144403DA54825721200088DF1/$File/Bill175-1B.pdf
# From Rives McDow (2002-04-09):
# The most interesting region I have found consists of three towns on the
@@ -1189,7 +1162,7 @@
# From Paul Eggert (2002-04-09):
# This is confirmed by the section entitled
# "What's the deal with time zones???" in
-# <http://www.earthsci.unimelb.edu.au/~awatkins/null.html>.
+# http://www.earthsci.unimelb.edu.au/~awatkins/null.html
#
# From Alex Livingston (2006-12-07):
# ... it was just on four years ago that I drove along the Eyre Highway,
@@ -1337,7 +1310,7 @@
# Based on law library research by John Mackin,
# who notes:
# In Australia, time is not legislated federally, but rather by the
-# individual states. Thus, while such terms as ``Eastern Standard Time''
+# individual states. Thus, while such terms as "Eastern Standard Time"
# [I mean, of course, Australian EST, not any other kind] are in common
# use, _they have NO REAL MEANING_, as they are not defined in the
# legislation. This is very important to understand.
@@ -1345,48 +1318,42 @@
# From Eric Ulevik (1999-05-26):
# DST will start in NSW on the last Sunday of August, rather than the usual
-# October in 2000. [See: Matthew Moore,
-# <a href="http://www.smh.com.au/news/9905/26/pageone/pageone4.html">
-# Two months more daylight saving
-# </a>
-# Sydney Morning Herald (1999-05-26).]
+# October in 2000. See: Matthew Moore,
+# Two months more daylight saving, Sydney Morning Herald (1999-05-26).
+# http://www.smh.com.au/news/9905/26/pageone/pageone4.html
# From Paul Eggert (1999-09-27):
# See the following official NSW source:
-# <a href="http://dir.gis.nsw.gov.au/cgi-bin/genobject/document/other/daylightsaving/tigGmZ">
# Daylight Saving in New South Wales.
-# </a>
+# http://dir.gis.nsw.gov.au/cgi-bin/genobject/document/other/daylightsaving/tigGmZ
#
# Narrabri Shire (NSW) council has announced it will ignore the extension of
# daylight saving next year. See:
-# <a href="http://abc.net.au/news/regionals/neweng/monthly/regeng-22jul1999-1.htm">
# Narrabri Council to ignore daylight saving
-# </a> (1999-07-22). For now, we'll wait to see if this really happens.
+# http://abc.net.au/news/regionals/neweng/monthly/regeng-22jul1999-1.htm
+# (1999-07-22). For now, we'll wait to see if this really happens.
#
# Victoria will following NSW. See:
-# <a href="http://abc.net.au/local/news/olympics/1999/07/item19990728112314_1.htm">
-# Vic to extend daylight saving
-# </a> (1999-07-28).
+# Vic to extend daylight saving (1999-07-28)
+# http://abc.net.au/local/news/olympics/1999/07/item19990728112314_1.htm
#
# However, South Australia rejected the DST request. See:
-# <a href="http://abc.net.au/news/olympics/1999/07/item19990719151754_1.htm">
-# South Australia rejects Olympics daylight savings request
-# </a> (1999-07-19).
+# South Australia rejects Olympics daylight savings request (1999-07-19)
+# http://abc.net.au/news/olympics/1999/07/item19990719151754_1.htm
#
# Queensland also will not observe DST for the Olympics. See:
-# <a href="http://abc.net.au/news/olympics/1999/06/item19990601114608_1.htm">
# Qld says no to daylight savings for Olympics
-# </a> (1999-06-01), which quotes Queensland Premier Peter Beattie as saying
-# ``Look you've got to remember in my family when this came up last time
+# http://abc.net.au/news/olympics/1999/06/item19990601114608_1.htm
+# (1999-06-01), which quotes Queensland Premier Peter Beattie as saying
+# "Look you've got to remember in my family when this came up last time
# I voted for it, my wife voted against it and she said to me it's all very
# well for you, you don't have to worry about getting the children out of
# bed, getting them to school, getting them to sleep at night.
-# I've been through all this argument domestically...my wife rules.''
+# I've been through all this argument domestically...my wife rules."
#
# Broken Hill will stick with South Australian time in 2000. See:
-# <a href="http://abc.net.au/news/regionals/brokenh/monthly/regbrok-21jul1999-6.htm">
-# Broken Hill to be behind the times
-# </a> (1999-07-21).
+# Broken Hill to be behind the times (1999-07-21)
+# http://abc.net.au/news/regionals/brokenh/monthly/regbrok-21jul1999-6.htm
# IATA SSIM (1998-09) says that the spring 2000 change for Australian
# Capital Territory, New South Wales except Lord Howe Island and Broken
@@ -1402,7 +1369,7 @@
# Yancowinna
# From John Mackin (1989-01-04):
-# `Broken Hill' means the County of Yancowinna.
+# 'Broken Hill' means the County of Yancowinna.
# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
# # YANCOWINNA.. [ Confirmation courtesy of Broken Hill Postmaster ]
@@ -1459,9 +1426,7 @@
# summer (southern hemisphere).
#
# From
-# <a href="http://www.safework.sa.gov.au/uploaded_files/DaylightDatesSet.pdf">
# http://www.safework.sa.gov.au/uploaded_files/DaylightDatesSet.pdf
-# </a>
# The extended daylight saving period that South Australia has been trialling
# for over the last year is now set to be ongoing.
# Daylight saving will continue to start on the first Sunday in October each
@@ -1471,9 +1436,7 @@
# the ACT for all 52 weeks of the year...
#
# We have a wrap-up here:
-# <a href="http://www.timeanddate.com/news/time/south-australia-extends-dst.html">
# http://www.timeanddate.com/news/time/south-australia-extends-dst.html
-# </a>
###############################################################################
# New Zealand
@@ -1482,7 +1445,7 @@
# the 1989/90 year was a trial of an extended "daylight saving" period.
# This trial was deemed successful and the extended period adopted for
# subsequent years (with the addition of a further week at the start).
-# source -- phone call to Ministry of Internal Affairs Head Office.
+# source - phone call to Ministry of Internal Affairs Head Office.
# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
# # The Country of New Zealand (Australia's east island -) Gee they hate that!
@@ -1524,6 +1487,19 @@
# that DST will begin on 2007-09-30 2008-04-06.
# http://www.dia.govt.nz/diawebsite.nsf/wpg_URL/Services-Daylight-Saving-Daylight-saving-to-be-extended
+# From Paul Eggert (2014-07-14):
+# Chatham Island time was formally standardized on 1957-01-01 by
+# New Zealand's Standard Time Amendment Act 1956 (1956-10-26).
+# http://www.austlii.edu.au/nz/legis/hist_act/staa19561956n100244.pdf
+# According to Google Books snippet view, a speaker in the New Zealand
+# parliamentary debates in 1956 said "Clause 78 makes provision for standard
+# time in the Chatham Islands. The time there is 45 minutes in advance of New
+# Zealand time. I understand that is the time they keep locally, anyhow."
+# For now, assume this practice goes back to the introduction of standard time
+# in New Zealand, as this would make Chatham Islands time almost exactly match
+# LMT back when New Zealand was at UTC+11:30; also, assume Chatham Islands did
+# not observe New Zealand's prewar DST.
+
###############################################################################
@@ -1543,7 +1519,7 @@
# From the BBC World Service in
# http://news.bbc.co.uk/2/hi/asia-pacific/205226.stm (1998-10-31 16:03 UTC):
-# The Fijiian government says the main reasons for the time change is to
+# The Fijian government says the main reasons for the time change is to
# improve productivity and reduce road accidents.... [T]he move is also
# intended to boost Fiji's ability to attract tourists to witness the dawning
# of the new millennium.
@@ -1551,16 +1527,12 @@
# http://www.fiji.gov.fj/press/2000_09/2000_09_13-05.shtml (2000-09-13)
# reports that Fiji has discontinued DST.
-# Johnston
-
-# Johnston data is from usno1995.
-
# Kiribati
# From Paul Eggert (1996-01-22):
# Today's _Wall Street Journal_ (page 1) reports that Kiribati
-# ``declared it the same day [throughout] the country as of Jan. 1, 1995''
+# "declared it the same day [throughout] the country as of Jan. 1, 1995"
# as part of the competition to be first into the 21st century.
@@ -1575,8 +1547,8 @@
# N Mariana Is, Guam
-# Howse writes (p 153) ``The Spaniards, on the other hand, reached the
-# Philippines and the Ladrones from America,'' and implies that the Ladrones
+# Howse writes (p 153) "The Spaniards, on the other hand, reached the
+# Philippines and the Ladrones from America," and implies that the Ladrones
# (now called the Marianas) kept American date for quite some time.
# For now, we assume the Ladrones switched at the same time as the Philippines;
# see Asia/Manila.
@@ -1590,17 +1562,16 @@
# Micronesia
# Alan Eugene Davis writes (1996-03-16),
-# ``I am certain, having lived there for the past decade, that "Truk"
-# (now properly known as Chuuk) ... is in the time zone GMT+10.''
+# "I am certain, having lived there for the past decade, that 'Truk'
+# (now properly known as Chuuk) ... is in the time zone GMT+10."
#
# Shanks & Pottenger write that Truk switched from UTC+10 to UTC+11
# on 1978-10-01; ignore this for now.
# From Paul Eggert (1999-10-29):
# The Federated States of Micronesia Visitors Board writes in
-# <a href="http://www.fsmgov.org/info/clocks.html">
-# The Federated States of Micronesia - Visitor Information
-# </a> (1999-01-26)
+# The Federated States of Micronesia - Visitor Information (1999-01-26)
+# http://www.fsmgov.org/info/clocks.html
# that Truk and Yap are UTC+10, and Ponape and Kosrae are UTC+11.
# We don't know when Kosrae switched from UTC+12; assume January 1 for now.
@@ -1646,27 +1617,34 @@
# Sacramento but it was changed a couple of years ago.
-# Samoa
+# (Western) Samoa and American Samoa
# Howse writes (p 153, citing p 10 of the 1883-11-18 New York Herald)
# that in 1879 the King of Samoa decided to change
-# ``the date in his kingdom from the Antipodean to the American system,
-# ordaining -- by a masterpiece of diplomatic flattery -- that
-# the Fourth of July should be celebrated twice in that year.''
+# "the date in his kingdom from the Antipodean to the American system,
+# ordaining - by a masterpiece of diplomatic flattery - that
+# the Fourth of July should be celebrated twice in that year."
+# Although Shanks & Pottenger says they both switched to UTC-11:30
+# in 1911, and to UTC-11 in 1950. many earlier sources give UTC-11
+# for American Samoa, e.g., the US National Bureau of Standards
+# circular "Standard Time Throughout the World", 1932.
+# Assume American Samoa switched to UTC-11 in 1911, not 1950,
+# and that after 1950 they agreed until (western) Samoa skipped a
+# day in 2011. Assume also that the Samoas follow the US and New
+# Zealand's "ST"/"DT" style of daylight-saving abbreviations.
# Tonga
# From Paul Eggert (1996-01-22):
-# Today's _Wall Street Journal_ (p 1) reports that ``Tonga has been plotting
-# to sneak ahead of [New Zealanders] by introducing daylight-saving time.''
+# Today's _Wall Street Journal_ (p 1) reports that "Tonga has been plotting
+# to sneak ahead of [New Zealanders] by introducing daylight-saving time."
# Since Kiribati has moved the Date Line it's not clear what Tonga will do.
# Don Mundell writes in the 1997-02-20 Tonga Chronicle
-# <a href="http://www.tongatapu.net.to/tonga/homeland/timebegins.htm">
-# How Tonga became `The Land where Time Begins'
-# </a>:
-
+# How Tonga became 'The Land where Time Begins':
+# http://www.tongatapu.net.to/tonga/homeland/timebegins.htm
+#
# Until 1941 Tonga maintained a standard time 50 minutes ahead of NZST
# 12 hours and 20 minutes ahead of GMT. When New Zealand adjusted its
# standard time in 1940s, Tonga had the choice of subtracting from its
@@ -1674,8 +1652,8 @@
# advancing its time to maintain the differential of 13 degrees
# (approximately 50 minutes ahead of New Zealand time).
#
-# Because His Majesty King Taufa'ahau Tupou IV, then Crown Prince
-# Tungi, preferred to ensure Tonga's title as the land where time
+# Because His Majesty King Tāufaʻāhau Tupou IV, then Crown Prince
+# Tungī, preferred to ensure Tonga's title as the land where time
# begins, the Legislative Assembly approved the latter change.
#
# But some of the older, more conservative members from the outer
@@ -1701,9 +1679,7 @@
# * Tonga will introduce DST in November
#
# I was given this link by John Letts:
-# <a href="http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm">
# http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm
-# </a>
#
# I have not been able to find exact dates for the transition in November
# yet. By reading this article it seems like Fiji will be 14 hours ahead
@@ -1711,9 +1687,7 @@
# (12 + 1 hour DST).
# From Arthur David Olson (1999-09-20):
-# According to <a href="http://www.tongaonline.com/news/sept1799.html">
-# http://www.tongaonline.com/news/sept1799.html
-# </a>:
+# According to <http://www.tongaonline.com/news/sept1799.html>:
# "Daylight Savings Time will take effect on Oct. 2 through April 15, 2000
# and annually thereafter from the first Saturday in October through the
# third Saturday of April. Under the system approved by Privy Council on
@@ -1731,7 +1705,7 @@
# instead of the original reported date April 16. Unfortunately, the article
# is no longer available on the site, and I did not make a copy of the
# text, and I have forgotten to report it here.
-# (Original URL was: http://www.tongaonline.com/news/march162000.htm )
+# (Original URL was <http://www.tongaonline.com/news/march162000.htm>)
# From Rives McDow (2000-12-01):
# Tonga is observing DST as of 2000-11-04 and will stop on 2001-01-27.
@@ -1751,7 +1725,7 @@
# From Vernice Anderson, Personal Secretary to Philip Jessup,
# US Ambassador At Large (oral history interview, 1971-02-02):
#
-# Saturday, the 14th [of October, 1950] -- ... The time was all the
+# Saturday, the 14th [of October, 1950] - ... The time was all the
# more confusing at that point, because we had crossed the
# International Date Line, thus getting two Sundays. Furthermore, we
# discovered that Wake Island had two hours of daylight saving time
@@ -1796,7 +1770,7 @@
# on the high seas. Whenever a ship was within the territorial waters of any
# nation it would use that nation's standard time. The captain was permitted
# to change his ship's clocks at a time of his choice following his ship's
-# entry into another zone time--he often chose midnight. These zones were
+# entry into another zone time - he often chose midnight. These zones were
# adopted by all major fleets between 1920 and 1925 but not by many
# independent merchant ships until World War II.
@@ -1804,6 +1778,6 @@
# (2005-03-20):
#
# The American Practical Navigator (2002)
-# <http://pollux.nss.nima.mil/pubs/pubs_j_apn_sections.html?rid=187>
+# http://pollux.nss.nima.mil/pubs/pubs_j_apn_sections.html?rid=187
# talks only about the 180-degree meridian with respect to ships in
# international waters; it ignores the international date line.
--- ./jdk/make/sun/javazic/tzdata/backward Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/sun/javazic/tzdata/backward Mon Jan 05 11:57:27 2015 -0800
@@ -21,15 +21,15 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
# This file provides links between current names for time zones
# and their old names. Many names changed in late 1993.
+# Link TARGET LINK-NAME
Link Africa/Asmara Africa/Asmera
-Link Africa/Bamako Africa/Timbuktu
+Link Africa/Abidjan Africa/Timbuktu
Link America/Argentina/Catamarca America/Argentina/ComodRivadavia
Link America/Adak America/Atka
Link America/Argentina/Buenos_Aires America/Buenos_Aires
@@ -50,8 +50,11 @@
Link Pacific/Auckland Antarctica/South_Pole
Link Asia/Ashgabat Asia/Ashkhabad
Link Asia/Kolkata Asia/Calcutta
-Link Asia/Chongqing Asia/Chungking
+Link Asia/Shanghai Asia/Chongqing
+Link Asia/Shanghai Asia/Chungking
Link Asia/Dhaka Asia/Dacca
+Link Asia/Shanghai Asia/Harbin
+Link Asia/Urumqi Asia/Kashgar
Link Asia/Kathmandu Asia/Katmandu
Link Asia/Macau Asia/Macao
Link Asia/Ho_Chi_Minh Asia/Saigon
--- ./jdk/make/sun/javazic/tzdata/etcetera Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/sun/javazic/tzdata/etcetera Mon Jan 05 11:57:27 2015 -0800
@@ -21,7 +21,6 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
@@ -37,7 +36,7 @@
Zone Etc/UCT 0 - UCT
# The following link uses older naming conventions,
-# but it belongs here, not in the file `backward',
+# but it belongs here, not in the file 'backward',
# as functions like gmtime load the "GMT" file to handle leap seconds properly.
# We want this to work even on installations that omit the other older names.
Link Etc/GMT GMT
--- ./jdk/make/sun/javazic/tzdata/europe Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/sun/javazic/tzdata/europe Mon Jan 05 11:57:27 2015 -0800
@@ -21,24 +21,30 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future). For more, please see
+# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2006-03-22):
-# A good source for time zone historical data outside the U.S. is
+# From Paul Eggert (2014-10-31):
+#
+# Unless otherwise specified, the source for data through 1990 is:
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
# San Diego: ACS Publications, Inc. (2003).
+# Unfortunately this book contains many errors and cites no sources.
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
# Association's Standard Schedules Information Manual (IATA SSIM),
# published semiannually. Law sent in several helpful summaries
-# of the IATA's data after 1990.
+# of the IATA's data after 1990. Except where otherwise noted,
+# IATA SSIM is the source for entries after 1990.
+#
+# A reliable and entertaining source about time zones is
+# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
# Except where otherwise noted, Shanks & Pottenger is the source for
# entries through 1991, and IATA SSIM is the source for entries afterwards.
@@ -49,9 +55,9 @@
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated),
# which I found in the UCLA library.
#
-# <a href="http://www.pettswoodvillage.co.uk/Daylight_Savings_William_Willett.pdf">
# William Willett, The Waste of Daylight, 19th edition
-# </a> (1914-03)
+# <http://cs.ucla.edu/~eggert/The-Waste-of-Daylight-19th.pdf>
+# [PDF] (1914-03)
#
# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
# <http://www.jstor.org/stable/1774359>. He writes:
@@ -59,10 +65,20 @@
# may be sent to Mr. John Milne, Royal Geographical Society,
# Savile Row, London." Nowadays please email them to tz@iana.org.
#
-# Brazil's Departamento Servico da Hora (DSH),
-# <a href="http://pcdsh01.on.br/HISTHV.htm">
+# Byalokoz EL. New Counting of Time in Russia since July 1, 1919.
+# This Russian-language source was consulted by Vladimir Karpinsky; see
+# http://mm.icann.org/pipermail/tz/2014-August/021320.html
+# The full Russian citation is:
+# Бялокоз, Евгений Людвигович. Новый счет времени в течении суток
+# введенный декретом Совета народных комиссаров для всей России с 1-го
+# июля 1919 г. / Изд. 2-е Междуведомственной комиссии. - Петроград:
+# Десятая гос. тип., 1919.
+# http://resolver.gpntb.ru/purl?docushare/dsweb/Get/Resource-2011/Byalokoz__E.L.__Novyy__schet__vremeni__v__techenie__sutok__izd__2(1).pdf
+#
+# Brazil's Divisão Serviço da Hora (DSHO),
# History of Summer Time
-# </a> (1998-09-21, in Portuguese)
+# <http://pcdsh01.on.br/HISTHV.htm>
+# (1998-09-21, in Portuguese)
#
# I invented the abbreviations marked '*' in the following table;
@@ -78,13 +94,12 @@
# 0:00 WET WEST WEMT Western Europe
# 0:19:32.13 AMT NST Amsterdam, Netherlands Summer (1835-1937)*
# 0:20 NET NEST Netherlands (1937-1940)*
+# 1:00 BST British Standard (1968-1971)
# 1:00 CET CEST CEMT Central Europe
# 1:00:14 SET Swedish (1879-1899)*
# 2:00 EET EEST Eastern Europe
-# 3:00 MSK MSD Moscow
-#
-# A reliable and entertaining source about time zones, especially in Britain,
-# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
+# 3:00 FET Further-eastern Europe (2011-2014)*
+# 3:00 MSK MSD MSM* Moscow
# From Peter Ilieve (1994-12-04),
# The original six [EU members]: Belgium, France, (West) Germany, Italy,
@@ -128,7 +143,7 @@
# along the towpath within a few yards of it.'
#
# I have a one inch to one mile map of London and my estimate of the stone's
-# position is 51 deg. 28' 30" N, 0 deg. 18' 45" W. The longitude should
+# position is 51 degrees 28' 30" N, 0 degrees 18' 45" W. The longitude should
# be within about +-2". The Ordnance Survey grid reference is TQ172761.
#
# [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.]
@@ -160,8 +175,22 @@
# transition date for London, namely 1847-12-01. We don't know as much
# about Dublin, so we use 1880-08-02, the legal transition time.
-# From Paul Eggert (2003-09-27):
-# Summer Time was first seriously proposed by William Willett (1857-1915),
+# From Paul Eggert (2014-07-19):
+# The ancients had no need for daylight saving, as they kept time
+# informally or via hours whose length depended on the time of year.
+# Daylight saving time in its modern sense was invented by the
+# New Zealand entomologist George Vernon Hudson (1867-1946),
+# whose day job as a postal clerk led him to value
+# after-hours daylight in which to pursue his research.
+# In 1895 he presented a paper to the Wellington Philosophical Society
+# that proposed a two-hour daylight-saving shift. See:
+# Hudson GV. On seasonal time-adjustment in countries south of lat. 30 deg.
+# Transactions and Proceedings of the New Zealand Institute. 1895;28:734
+# http://rsnz.natlib.govt.nz/volume/rsnz_28/rsnz_28_00_006110.html
+# Although some interest was expressed in New Zealand, his proposal
+# did not find its way into law and eventually it was almost forgotten.
+#
+# In England, DST was independently reinvented by William Willett (1857-1915),
# a London builder and member of the Royal Astronomical Society
# who circulated a pamphlet "The Waste of Daylight" (1907)
# that proposed advancing clocks 20 minutes on each of four Sundays in April,
@@ -174,7 +203,7 @@
# A monument to Willett was unveiled on 1927-05-21, in an open space in
# a 45-acre wood near Chislehurst, Kent that was purchased by popular
# subscription and open to the public. On the south face of the monolith,
-# designed by G. W. Miller, is the...William Willett Memorial Sundial,
+# designed by G. W. Miller, is the William Willett Memorial Sundial,
# which is permanently set to Summer Time.
# From Winston Churchill (1934-04-28):
@@ -183,9 +212,9 @@
# between 160 and 170 hours more daylight leisure, to a war which
# plunged Europe into darkness for four years, and shook the
# foundations of civilization throughout the world.
-# -- <a href="http://www.winstonchurchill.org/fh114willett.htm">
-# "A Silent Toast to William Willett", Pictorial Weekly
-# </a>
+# -- "A Silent Toast to William Willett", Pictorial Weekly;
+# republished in Finest Hour (Spring 2002) 1(114):26
+# http://www.winstonchurchill.org/images/finesthour/Vol.01%20No.114.pdf
# From Paul Eggert (1996-09-03):
# The OED Supplement says that the English originally said "Daylight Saving"
@@ -194,7 +223,6 @@
# proponents (who eventually won the argument) are quoted as using "Summer".
# From Arthur David Olson (1989-01-19):
-#
# A source at the British Information Office in New York avers that it's
# known as "British" Summer Time in all parts of the United Kingdom.
@@ -221,8 +249,8 @@
# official designation; the reply of the 21st was that there wasn't
# but he couldn't think of anything better than the "Double British
# Summer Time" that the BBC had been using informally.
-# http://student.cusu.cam.ac.uk/~jsm28/british-time/bbc-19410418.png
-# http://student.cusu.cam.ac.uk/~jsm28/british-time/ho-19410421.png
+# http://www.polyomino.org.uk/british-time/bbc-19410418.png
+# http://www.polyomino.org.uk/british-time/ho-19410421.png
# From Sir Alexander Maxwell in the above-mentioned letter (1941-04-21):
# [N]o official designation has as far as I know been adopted for the time
@@ -239,23 +267,14 @@
# the history of summer time legislation in the United Kingdom.
# Since 1998 Joseph S. Myers has been updating
# and extending this list, which can be found in
-# http://student.cusu.cam.ac.uk/~jsm28/british-time/
-# <a href="http://www.polyomino.org.uk/british-time/">
-# History of legal time in Britain
-# </a>
-# Rob Crowther (2012-01-04) reports that that URL no longer
-# exists, and the article can now be found at:
-# <a href="http://www.polyomino.org.uk/british-time/">
# http://www.polyomino.org.uk/british-time/
-# </a>
# From Joseph S. Myers (1998-01-06):
#
# The legal time in the UK outside of summer time is definitely GMT, not UTC;
# see Lord Tanlaw's speech
-# <a href="http://www.parliament.the-stationery-office.co.uk/pa/ld199697/ldhansrd/pdvn/lds97/text/70611-20.htm#70611-20_head0">
-# (Lords Hansard 11 June 1997 columns 964 to 976)
-# </a>.
+# http://www.publications.parliament.uk/pa/ld199798/ldhansrd/vo970611/text/70611-10.htm#70611-10_head0
+# (Lords Hansard 11 June 1997 columns 964 to 976).
# From Paul Eggert (2006-03-22):
#
@@ -294,9 +313,17 @@
# "Timeball on the ballast office is down. Dunsink time."
# -- James Joyce, Ulysses
+# "Countess Markievicz ... claimed that the [1916] abolition of Dublin Mean Time
+# was among various actions undertaken by the 'English' government that
+# would 'put the whole country into the SF (Sinn Féin) camp'. She claimed
+# Irish 'public feeling (was) outraged by forcing of English time on us'."
+# -- Parsons M. Dublin lost its time zone - and 25 minutes - after 1916 Rising.
+# Irish Times 2014-10-27.
+# http://www.irishtimes.com/news/politics/dublin-lost-its-time-zone-and-25-minutes-after-1916-rising-1.1977411
+
# From Joseph S. Myers (2005-01-26):
-# Irish laws are available online at www.irishstatutebook.ie. These include
-# various relating to legal time, for example:
+# Irish laws are available online at <http://www.irishstatutebook.ie>.
+# These include various relating to legal time, for example:
#
# ZZA13Y1923.html ZZA12Y1924.html ZZA8Y1925.html ZZSIV20PG1267.html
#
@@ -458,25 +485,27 @@
# Use Europe/London for Jersey, Guernsey, and the Isle of Man.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/London -0:01:15 - LMT 1847 Dec 1 0:00s
+Zone Europe/London -0:01:15 - LMT 1847 Dec 1 0:00s
0:00 GB-Eire %s 1968 Oct 27
- 1:00 - BST 1971 Oct 31 2:00u
+ 1:00 - BST 1971 Oct 31 2:00u
0:00 GB-Eire %s 1996
0:00 EU GMT/BST
Link Europe/London Europe/Jersey
Link Europe/London Europe/Guernsey
Link Europe/London Europe/Isle_of_Man
+
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2
- -0:25:21 - DMT 1916 May 21 2:00
- -0:25:21 1:00 IST 1916 Oct 1 2:00s
+ -0:25:21 - DMT 1916 May 21 2:00
+ -0:25:21 1:00 IST 1916 Oct 1 2:00s
0:00 GB-Eire %s 1921 Dec 6 # independence
- 0:00 GB-Eire GMT/IST 1940 Feb 25 2:00
- 0:00 1:00 IST 1946 Oct 6 2:00
- 0:00 - GMT 1947 Mar 16 2:00
- 0:00 1:00 IST 1947 Nov 2 2:00
- 0:00 - GMT 1948 Apr 18 2:00
+ 0:00 GB-Eire GMT/IST 1940 Feb 25 2:00
+ 0:00 1:00 IST 1946 Oct 6 2:00
+ 0:00 - GMT 1947 Mar 16 2:00
+ 0:00 1:00 IST 1947 Nov 2 2:00
+ 0:00 - GMT 1948 Apr 18 2:00
0:00 GB-Eire GMT/IST 1968 Oct 27
- 1:00 - IST 1971 Oct 31 2:00u
+ 1:00 - IST 1971 Oct 31 2:00u
0:00 GB-Eire GMT/IST 1996
0:00 EU GMT/IST
@@ -495,10 +524,9 @@
Rule EU 1981 max - Mar lastSun 1:00u 1:00 S
Rule EU 1996 max - Oct lastSun 1:00u 0 -
# The most recent directive covers the years starting in 2002. See:
-# <a="http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:32000L0084:EN:NOT">
# Directive 2000/84/EC of the European Parliament and of the Council
# of 19 January 2001 on summer-time arrangements.
-# </a>
+# http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:32000L0084:EN:NOT
# W-Eur differs from EU only in that W-Eur uses standard time.
Rule W-Eur 1977 1980 - Apr Sun>=1 1:00s 1:00 S
@@ -521,18 +549,18 @@
Rule C-Eur 1944 1945 - Apr Mon>=1 2:00s 1:00 S
# Whitman gives 1944 Oct 7; go with Shanks & Pottenger.
Rule C-Eur 1944 only - Oct 2 2:00s 0 -
-# From Jesper Norgaard Welen (2008-07-13):
+# From Jesper Nørgaard Welen (2008-07-13):
#
# I found what is probably a typo of 2:00 which should perhaps be 2:00s
# in the C-Eur rule from tz database version 2008d (this part was
-# corrected in version 2008d). The circumstancial evidence is simply the
+# corrected in version 2008d). The circumstantial evidence is simply the
# tz database itself, as seen below:
#
# Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01
# 0:00 France WE%sT 1945 Sep 16 3:00
#
# Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
-# 0:00 France WE%sT 1945 Sep 16 3:00
+# 0:00 France WE%sT 1945 Sep 16 3:00
#
# Zone Europe/Belgrade 1:22:00 - LMT 1884
# 1:00 1:00 CEST 1945 Sep 16 2:00s
@@ -576,16 +604,16 @@
Rule E-Eur 1996 max - Oct lastSun 0:00 0 -
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Russia 1917 only - Jul 1 23:00 1:00 MST # Moscow Summer Time
-Rule Russia 1917 only - Dec 28 0:00 0 MMT # Moscow Mean Time
-Rule Russia 1918 only - May 31 22:00 2:00 MDST # Moscow Double Summer Time
+Rule Russia 1917 only - Jul 1 23:00 1:00 MST # Moscow Summer Time
+Rule Russia 1917 only - Dec 28 0:00 0 MMT # Moscow Mean Time
+Rule Russia 1918 only - May 31 22:00 2:00 MDST # Moscow Double Summer Time
Rule Russia 1918 only - Sep 16 1:00 1:00 MST
Rule Russia 1919 only - May 31 23:00 2:00 MDST
-Rule Russia 1919 only - Jul 1 2:00 1:00 S
-Rule Russia 1919 only - Aug 16 0:00 0 -
-Rule Russia 1921 only - Feb 14 23:00 1:00 S
-Rule Russia 1921 only - Mar 20 23:00 2:00 M # Midsummer
-Rule Russia 1921 only - Sep 1 0:00 1:00 S
+Rule Russia 1919 only - Jul 1 2:00 1:00 MSD
+Rule Russia 1919 only - Aug 16 0:00 0 MSK
+Rule Russia 1921 only - Feb 14 23:00 1:00 MSD
+Rule Russia 1921 only - Mar 20 23:00 2:00 MSM # Midsummer
+Rule Russia 1921 only - Sep 1 0:00 1:00 MSD
Rule Russia 1921 only - Oct 1 0:00 0 -
# Act No.925 of the Council of Ministers of the USSR (1980-10-24):
Rule Russia 1981 1984 - Apr 1 0:00 1:00 S
@@ -600,6 +628,7 @@
Rule Russia 1993 2010 - Mar lastSun 2:00s 1:00 S
Rule Russia 1993 1995 - Sep lastSun 2:00s 0 -
Rule Russia 1996 2010 - Oct lastSun 2:00s 0 -
+# As described below, Russia's 2014 change affects Zone data, not Rule data.
# From Alexander Krivenyshev (2011-06-14):
# According to Kremlin press service, Russian President Dmitry Medvedev
@@ -607,14 +636,10 @@
# According to the law Russia is abolishing daylight saving time.
#
# Medvedev signed a law "On the Calculation of Time" (in russian):
-# <a href="http://bmockbe.ru/events/?ID=7583">
# http://bmockbe.ru/events/?ID=7583
-# </a>
#
# Medvedev signed a law on the calculation of the time (in russian):
-# <a href="http://www.regnum.ru/news/polit/1413906.html">
# http://www.regnum.ru/news/polit/1413906.html
-# </a>
# From Arthur David Olson (2011-06-15):
# Take "abolishing daylight saving time" to mean that time is now considered
@@ -634,10 +659,10 @@
# From Markus Kuhn (1996-07-12):
# The official German names ... are
#
-# Mitteleuropaeische Zeit (MEZ) = UTC+01:00
-# Mitteleuropaeische Sommerzeit (MESZ) = UTC+02:00
+# Mitteleuropäische Zeit (MEZ) = UTC+01:00
+# Mitteleuropäische Sommerzeit (MESZ) = UTC+02:00
#
-# as defined in the German Time Act (Gesetz ueber die Zeitbestimmung (ZeitG),
+# as defined in the German Time Act (Gesetz über die Zeitbestimmung (ZeitG),
# 1978-07-25, Bundesgesetzblatt, Jahrgang 1978, Teil I, S. 1110-1111)....
# I wrote ... to the German Federal Physical-Technical Institution
#
@@ -692,7 +717,7 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Andorra 0:06:04 - LMT 1901
0:00 - WET 1946 Sep 30
- 1:00 - CET 1985 Mar 31 2:00
+ 1:00 - CET 1985 Mar 31 2:00
1:00 EU CE%sT
# Austria
@@ -718,9 +743,9 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Vienna 1:05:21 - LMT 1893 Apr
1:00 C-Eur CE%sT 1920
- 1:00 Austria CE%sT 1940 Apr 1 2:00s
- 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
- 1:00 1:00 CEST 1945 Apr 12 2:00s
+ 1:00 Austria CE%sT 1940 Apr 1 2:00s
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
+ 1:00 1:00 CEST 1945 Apr 12 2:00s
1:00 - CET 1946
1:00 Austria CE%sT 1981
1:00 EU CE%sT
@@ -731,38 +756,37 @@
# GMT+3 without DST (was GMT+2 with DST).
#
# Sources (Russian language):
-# 1.
-# <a href="http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html">
# http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html
-# </a>
-# 2.
-# <a href="http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/">
# http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/
-# </a>
-# 3.
-# <a href="http://news.tut.by/society/250578.html">
# http://news.tut.by/society/250578.html
-# </a>
+#
+# From Alexander Bokovoy (2014-10-09):
+# Belarussian government decided against changing to winter time....
+# http://eng.belta.by/all_news/society/Belarus-decides-against-adjusting-time-in-Russias-wake_i_76335.html
+# From Paul Eggert (2014-10-08):
+# Hence Belarus can share time zone abbreviations with Moscow again.
+#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Minsk 1:50:16 - LMT 1880
- 1:50 - MMT 1924 May 2 # Minsk Mean Time
+ 1:50 - MMT 1924 May 2 # Minsk Mean Time
2:00 - EET 1930 Jun 21
3:00 - MSK 1941 Jun 28
1:00 C-Eur CE%sT 1944 Jul 3
3:00 Russia MSK/MSD 1990
- 3:00 - MSK 1991 Mar 31 2:00s
- 2:00 1:00 EEST 1991 Sep 29 2:00s
- 2:00 - EET 1992 Mar 29 0:00s
- 2:00 1:00 EEST 1992 Sep 27 0:00s
- 2:00 Russia EE%sT 2011 Mar 27 2:00s
- 3:00 - FET # Further-eastern European Time
+ 3:00 - MSK 1991 Mar 31 2:00s
+ 2:00 1:00 EEST 1991 Sep 29 2:00s
+ 2:00 - EET 1992 Mar 29 0:00s
+ 2:00 1:00 EEST 1992 Sep 27 0:00s
+ 2:00 Russia EE%sT 2011 Mar 27 2:00s
+ 3:00 - FET 2014 Oct 26 1:00s
+ 3:00 - MSK
# Belgium
#
# From Paul Eggert (1997-07-02):
# Entries from 1918 through 1991 are taken from:
# Annuaire de L'Observatoire Royal de Belgique,
-# Avenue Circulaire, 3, B-1180 BRUXELLES, CLVIIe annee, 1991
+# Avenue Circulaire, 3, B-1180 BRUXELLES, CLVIIe année, 1991
# (Imprimerie HAYEZ, s.p.r.l., Rue Fin, 4, 1080 BRUXELLES, MCMXC),
# pp 8-9.
# LMT before 1892 was 0:17:30, according to the official journal of Belgium:
@@ -812,7 +836,7 @@
Rule Belgium 1946 only - Oct 7 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Brussels 0:17:30 - LMT 1880
- 0:17:30 - BMT 1892 May 1 12:00 # Brussels MT
+ 0:17:30 - BMT 1892 May 1 12:00 # Brussels MT
0:00 - WET 1914 Nov 8
1:00 - CET 1916 May 1 0:00
1:00 C-Eur CE%sT 1918 Nov 11 11:00u
@@ -828,8 +852,8 @@
#
# From Plamen Simenov via Steffen Thorsen (1999-09-09):
# A document of Government of Bulgaria (No.94/1997) says:
-# EET --> EETDST is in 03:00 Local time in last Sunday of March ...
-# EETDST --> EET is in 04:00 Local time in last Sunday of October
+# EET -> EETDST is in 03:00 Local time in last Sunday of March ...
+# EETDST -> EET is in 04:00 Local time in last Sunday of October
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Bulg 1979 only - Mar 31 23:00 1:00 S
@@ -842,7 +866,7 @@
1:56:56 - IMT 1894 Nov 30 # Istanbul MT?
2:00 - EET 1942 Nov 2 3:00
1:00 C-Eur CE%sT 1945
- 1:00 - CET 1945 Apr 2 3:00
+ 1:00 - CET 1945 Apr 2 3:00
2:00 - EET 1979 Mar 31 23:00
2:00 Bulg EE%sT 1982 Sep 26 2:00
2:00 C-Eur EE%sT 1991
@@ -866,15 +890,15 @@
Rule Czech 1949 only - Apr 9 2:00s 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Prague 0:57:44 - LMT 1850
- 0:57:44 - PMT 1891 Oct # Prague Mean Time
- 1:00 C-Eur CE%sT 1944 Sep 17 2:00s
+ 0:57:44 - PMT 1891 Oct # Prague Mean Time
+ 1:00 C-Eur CE%sT 1944 Sep 17 2:00s
1:00 Czech CE%sT 1979
1:00 EU CE%sT
# Use Europe/Prague also for Slovakia.
# Denmark, Faroe Islands, and Greenland
-# From Jesper Norgaard Welen (2005-04-26):
+# From Jesper Nørgaard Welen (2005-04-26):
# http://www.hum.aau.dk/~poe/tid/tine/DanskTid.htm says that the law
# [introducing standard time] was in effect from 1894-01-01....
# The page http://www.retsinfo.dk/_GETDOCI_/ACCN/A18930008330-REGL
@@ -884,7 +908,7 @@
# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19722110030-REGL
#
# This provoked a new law from 1974 to make possible summer time changes
-# in subsequenet decrees with the law
+# in subsequent decrees with the law
# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19740022330-REGL
#
# It seems however that no decree was set forward until 1980. I have
@@ -899,7 +923,7 @@
# was suspended on that night):
# http://www.retsinfo.dk/_GETDOCI_/ACCN/C19801120554-REGL
-# From Jesper Norgaard Welen (2005-06-11):
+# From Jesper Nørgaard Welen (2005-06-11):
# The Herning Folkeblad (1980-09-26) reported that the night between
# Saturday and Sunday the clock is set back from three to two.
@@ -923,11 +947,11 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Copenhagen 0:50:20 - LMT 1890
0:50:20 - CMT 1894 Jan 1 # Copenhagen MT
- 1:00 Denmark CE%sT 1942 Nov 2 2:00s
- 1:00 C-Eur CE%sT 1945 Apr 2 2:00
+ 1:00 Denmark CE%sT 1942 Nov 2 2:00s
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00
1:00 Denmark CE%sT 1980
1:00 EU CE%sT
-Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Torshavn
+Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Tórshavn
0:00 - WET 1981
0:00 EU WE%sT
#
@@ -939,11 +963,11 @@
# From Paul Eggert (2006-03-22):
# Greenland joined the EU as part of Denmark, obtained home rule on 1979-05-01,
# and left the EU on 1985-02-01. It therefore should have been using EU
-# rules at least through 1984. Shanks & Pottenger say Scoresbysund and Godthab
+# rules at least through 1984. Shanks & Pottenger say Scoresbysund and Godthåb
# used C-Eur rules after 1980, but IATA SSIM (1991/1996) says they use EU
# rules since at least 1991. Assume EU rules since 1980.
-# From Gwillin Law (2001-06-06), citing
+# From Gwillim Law (2001-06-06), citing
# <http://www.statkart.no/efs/efshefter/2001/efs5-2001.pdf> (2001-03-15),
# and with translations corrected by Steffen Thorsen:
#
@@ -978,16 +1002,16 @@
# DPC research station at Zackenberg.
#
# Scoresbysund and two small villages nearby keep time UTC-1 and use
-# the same daylight savings time period as in West Greenland (Godthab).
+# the same daylight savings time period as in West Greenland (Godthåb).
#
-# The rest of Greenland, including Godthab (this area, although it
+# The rest of Greenland, including Godthåb (this area, although it
# includes central Greenland, is known as west Greenland), keeps time
# UTC-3, with daylight savings methods according to European rules.
#
# It is common procedure to use UTC 0 in the wilderness of East and
# North Greenland, because it is mainly Icelandic aircraft operators
# maintaining traffic in these areas. However, the official status of
-# this area is that it sticks with Godthab time. This area might be
+# this area is that it sticks with Godthåb time. This area might be
# considered a dual time zone in some respects because of this.
# From Rives McDow (2001-11-19):
@@ -996,8 +1020,8 @@
# From Paul Eggert (2006-03-22):
# From 1997 on the CIA map shows Danmarkshavn on GMT;
-# the 1995 map as like Godthab.
-# For lack of better info, assume they were like Godthab before 1996.
+# the 1995 map as like Godthåb.
+# For lack of better info, assume they were like Godthåb before 1996.
# startkart.no says Thule does not observe DST, but this is clearly an error,
# so go with Shanks & Pottenger for Thule transitions until this year.
# For 2007 on assume Thule will stay in sync with US DST rules.
@@ -1012,15 +1036,15 @@
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28
- -3:00 - WGT 1980 Apr 6 2:00
+ -3:00 - WGT 1980 Apr 6 2:00
-3:00 EU WG%sT 1996
0:00 - GMT
Zone America/Scoresbysund -1:27:52 - LMT 1916 Jul 28 # Ittoqqortoormiit
- -2:00 - CGT 1980 Apr 6 2:00
+ -2:00 - CGT 1980 Apr 6 2:00
-2:00 C-Eur CG%sT 1981 Mar 29
-1:00 EU EG%sT
Zone America/Godthab -3:26:56 - LMT 1916 Jul 28 # Nuuk
- -3:00 - WGT 1980 Apr 6 2:00
+ -3:00 - WGT 1980 Apr 6 2:00
-3:00 EU WG%sT
Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik air base
-4:00 Thule A%sT
@@ -1042,17 +1066,16 @@
# summer time next spring."
# From Peter Ilieve (1998-11-04), heavily edited:
-# <a href="http://trip.rk.ee/cgi-bin/thw?${BASE}=akt&${OOHTML}=rtd&TA=1998&TO=1&AN=1390">
# The 1998-09-22 Estonian time law
-# </a>
+# http://trip.rk.ee/cgi-bin/thw?${BASE}=akt&${OOHTML}=rtd&TA=1998&TO=1&AN=1390
# refers to the Eighth Directive and cites the association agreement between
-# the EU and Estonia, ratified by the Estonian law (RT II 1995, 22--27, 120).
+# the EU and Estonia, ratified by the Estonian law (RT II 1995, 22-27, 120).
#
# I also asked [my relative] whether they use any standard abbreviation
# for their standard and summer times. He says no, they use "suveaeg"
# (summer time) and "talveaeg" (winter time).
-# From <a href="http://www.baltictimes.com/">The Baltic Times</a> (1999-09-09)
+# From The Baltic Times <http://www.baltictimes.com/> (1999-09-09)
# via Steffen Thorsen:
# This year will mark the last time Estonia shifts to summer time,
# a council of the ruling coalition announced Sept. 6....
@@ -1070,19 +1093,19 @@
# The Estonian government has changed once again timezone politics.
# Now we are using again EU rules.
#
-# From Urmet Jaanes (2002-03-28):
+# From Urmet Jänes (2002-03-28):
# The legislative reference is Government decree No. 84 on 2002-02-21.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Tallinn 1:39:00 - LMT 1880
- 1:39:00 - TMT 1918 Feb # Tallinn Mean Time
+ 1:39:00 - TMT 1918 Feb # Tallinn Mean Time
1:00 C-Eur CE%sT 1919 Jul
1:39:00 - TMT 1921 May
2:00 - EET 1940 Aug 6
3:00 - MSK 1941 Sep 15
1:00 C-Eur CE%sT 1944 Sep 22
- 3:00 Russia MSK/MSD 1989 Mar 26 2:00s
- 2:00 1:00 EEST 1989 Sep 24 2:00s
+ 3:00 Russia MSK/MSD 1989 Mar 26 2:00s
+ 2:00 1:00 EEST 1989 Sep 24 2:00s
2:00 C-Eur EE%sT 1998 Sep 22
2:00 EU EE%sT 1999 Nov 1
2:00 - EET 2002 Feb 21
@@ -1104,35 +1127,45 @@
# This is documented in Heikki Oja: Aikakirja 2007, published by The Almanac
# Office of University of Helsinki, ISBN 952-10-3221-9, available online (in
# Finnish) at
-#
-# <a href="http://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf">
# http://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf
-# </a>
#
# Page 105 (56 in PDF version) has a handy table of all past daylight savings
# transitions. It is easy enough to interpret without Finnish skills.
#
# This is also confirmed by Finnish Broadcasting Company's archive at:
-#
-# <a href="http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401">
# http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401
-# </a>
#
# The news clip from 1981 says that "the time between 2 and 3 o'clock does not
# exist tonight."
+# From Konstantin Hyppönen (2014-06-13):
+# [Heikki Oja's book Aikakirja 2013]
+# http://almanakka.helsinki.fi/images/aikakirja/Aikakirja2013kokonaan.pdf
+# pages 104-105, including a scan from a newspaper published on Apr 2 1942
+# say that ... [o]n Apr 2 1942, 24 o'clock (which means Apr 3 1942,
+# 00:00), clocks were moved one hour forward. The newspaper
+# mentions "on the night from Thursday to Friday"....
+# On Oct 4 1942, clocks were moved at 1:00 one hour backwards.
+#
+# From Paul Eggert (2014-06-14):
+# Go with Oja over Shanks.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Finland 1942 only - Apr 3 0:00 1:00 S
-Rule Finland 1942 only - Oct 3 0:00 0 -
+Rule Finland 1942 only - Apr 2 24:00 1:00 S
+Rule Finland 1942 only - Oct 4 1:00 0 -
Rule Finland 1981 1982 - Mar lastSun 2:00 1:00 S
Rule Finland 1981 1982 - Sep lastSun 3:00 0 -
+
+# Milne says Helsinki (Helsingfors) time was 1:39:49.2 (official document);
+# round to nearest.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Helsinki 1:39:52 - LMT 1878 May 31
- 1:39:52 - HMT 1921 May # Helsinki Mean Time
+Zone Europe/Helsinki 1:39:49 - LMT 1878 May 31
+ 1:39:49 - HMT 1921 May # Helsinki Mean Time
2:00 Finland EE%sT 1983
2:00 EU EE%sT
-# Aaland Is
+# Åland Is
Link Europe/Helsinki Europe/Mariehamn
@@ -1140,14 +1173,14 @@
# From Ciro Discepolo (2000-12-20):
#
-# Henri Le Corre, Regimes Horaires pour le monde entier, Editions
+# Henri Le Corre, Régimes horaires pour le monde entier, Éditions
# Traditionnelles - Paris 2 books, 1993
#
-# Gabriel, Traite de l'heure dans le monde, Guy Tredaniel editeur,
+# Gabriel, Traité de l'heure dans le monde, Guy Trédaniel,
# Paris, 1991
#
-# Francoise Gauquelin, Problemes de l'heure resolus en astrologie,
-# Guy tredaniel, Paris 1987
+# Françoise Gauquelin, Problèmes de l'heure résolus en astrologie,
+# Guy Trédaniel, Paris 1987
#
@@ -1188,16 +1221,16 @@
Rule France 1940 only - Feb 25 2:00 1:00 S
# The French rules for 1941-1944 were not used in Paris, but Shanks & Pottenger
# write that they were used in Monaco and in many French locations.
-# Le Corre writes that the upper limit of the free zone was Arneguy, Orthez,
-# Mont-de-Marsan, Bazas, Langon, Lamotte-Montravel, Marouil, La
-# Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Descartes,
+# Le Corre writes that the upper limit of the free zone was Arnéguy, Orthez,
+# Mont-de-Marsan, Bazas, Langon, Lamothe-Montravel, Marœuil, La
+# Rochefoucauld, Champagne-Mouton, La Roche-Posay, La Haye-Descartes,
# Loches, Montrichard, Vierzon, Bourges, Moulins, Digoin,
-# Paray-le-Monial, Montceau-les-Mines, Chalons-sur-Saone, Arbois,
+# Paray-le-Monial, Montceau-les-Mines, Chalon-sur-Saône, Arbois,
# Dole, Morez, St-Claude, and Collonges (Haute-Savoie).
Rule France 1941 only - May 5 0:00 2:00 M # Midsummer
# Shanks & Pottenger say this transition occurred at Oct 6 1:00,
# but go with Denis Excoffier (1997-12-12),
-# who quotes the Ephemerides Astronomiques for 1998 from Bureau des Longitudes
+# who quotes the Ephémérides astronomiques for 1998 from Bureau des Longitudes
# as saying 5/10/41 22hUT.
Rule France 1941 only - Oct 6 0:00 1:00 S
Rule France 1942 only - Mar 9 0:00 2:00 M
@@ -1218,7 +1251,7 @@
# on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01
- 0:09:21 - PMT 1911 Mar 11 0:01 # Paris MT
+ 0:09:21 - PMT 1911 Mar 11 0:01 # Paris MT
# Shanks & Pottenger give 1940 Jun 14 0:00; go with Excoffier and Le Corre.
0:00 France WE%sT 1940 Jun 14 23:00
# Le Corre says Paris stuck with occupied-France time after the liberation;
@@ -1235,15 +1268,13 @@
# Bundesanstalt contains DST information back to 1916.
# [See tz-link.htm for the URL.]
-# From Joerg Schilling (2002-10-23):
+# From Jörg Schilling (2002-10-23):
# In 1945, Berlin was switched to Moscow Summer time (GMT+4) by
-# <a href="http://www.dhm.de/lemo/html/biografien/BersarinNikolai/">
-# General [Nikolai] Bersarin</a>.
+# http://www.dhm.de/lemo/html/biografien/BersarinNikolai/
+# General [Nikolai] Bersarin.
# From Paul Eggert (2003-03-08):
-# <a href="http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf">
# http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf
-# </a>
# says that Bersarin issued an order to use Moscow time on May 20.
# However, Moscow did not observe daylight saving in 1945, so
# this was equivalent to CEMT (GMT+3), not GMT+4.
@@ -1268,23 +1299,23 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Berlin 0:53:28 - LMT 1893 Apr
- 1:00 C-Eur CE%sT 1945 May 24 2:00
+ 1:00 C-Eur CE%sT 1945 May 24 2:00
1:00 SovietZone CE%sT 1946
1:00 Germany CE%sT 1980
1:00 EU CE%sT
# From Tobias Conradi (2011-09-12):
-# Busingen <http://www.buesingen.de>, surrounded by the Swiss canton
+# Büsingen <http://www.buesingen.de>, surrounded by the Swiss canton
# Schaffhausen, did not start observing DST in 1980 as the rest of DE
# (West Germany at that time) and DD (East Germany at that time) did.
# DD merged into DE, the area is currently covered by code DE in ISO 3166-1,
# which in turn is covered by the zone Europe/Berlin.
#
-# Source for the time in Busingen 1980:
+# Source for the time in Büsingen 1980:
# http://www.srf.ch/player/video?id=c012c029-03b7-4c2b-9164-aa5902cd58d3
# From Arthur David Olson (2012-03-03):
-# Busingen and Zurich have shared clocks since 1970.
+# Büsingen and Zurich have shared clocks since 1970.
Link Europe/Zurich Europe/Busingen
@@ -1295,8 +1326,8 @@
# Gibraltar
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2 0:00s
- 0:00 GB-Eire %s 1957 Apr 14 2:00
+Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2 0:00s
+ 0:00 GB-Eire %s 1957 Apr 14 2:00
1:00 - CET 1982
1:00 EU CE%sT
@@ -1327,7 +1358,7 @@
Rule Greece 1980 only - Sep 28 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Athens 1:34:52 - LMT 1895 Sep 14
- 1:34:52 - AMT 1916 Jul 28 0:01 # Athens MT
+ 1:34:52 - AMT 1916 Jul 28 0:01 # Athens MT
2:00 Greece EE%sT 1941 Apr 30
1:00 Greece CE%sT 1944 Apr 4
2:00 Greece EE%sT 1981
@@ -1336,15 +1367,20 @@
2:00 EU EE%sT
# Hungary
+# From Paul Eggert (2014-07-15):
+# Dates for 1916-1945 are taken from:
+# Oross A. Jelen a múlt jövője: a nyári időszámítás Magyarországon 1916-1945.
+# National Archives of Hungary (2012-10-29).
+# http://mnl.gov.hu/a_het_dokumentuma/a_nyari_idoszamitas_magyarorszagon_19161945.html
+# This source does not always give times, which are taken from Shanks
+# & Pottenger (which disagree about the dates).
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Hungary 1918 only - Apr 1 3:00 1:00 S
-Rule Hungary 1918 only - Sep 29 3:00 0 -
+Rule Hungary 1918 only - Sep 16 3:00 0 -
Rule Hungary 1919 only - Apr 15 3:00 1:00 S
-Rule Hungary 1919 only - Sep 15 3:00 0 -
-Rule Hungary 1920 only - Apr 5 3:00 1:00 S
-Rule Hungary 1920 only - Sep 30 3:00 0 -
+Rule Hungary 1919 only - Nov 24 3:00 0 -
Rule Hungary 1945 only - May 1 23:00 1:00 S
-Rule Hungary 1945 only - Nov 3 0:00 0 -
+Rule Hungary 1945 only - Nov 1 0:00 0 -
Rule Hungary 1946 only - Mar 31 2:00s 1:00 S
Rule Hungary 1946 1949 - Oct Sun>=1 2:00s 0 -
Rule Hungary 1947 1949 - Apr Sun>=4 2:00s 1:00 S
@@ -1360,7 +1396,7 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Budapest 1:16:20 - LMT 1890 Oct
1:00 C-Eur CE%sT 1918
- 1:00 Hungary CE%sT 1941 Apr 6 2:00
+ 1:00 Hungary CE%sT 1941 Apr 8
1:00 C-Eur CE%sT 1945
1:00 Hungary CE%sT 1980 Sep 28 2:00s
1:00 EU CE%sT
@@ -1423,7 +1459,7 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/Reykjavik -1:27:24 - LMT 1837
-1:27:48 - RMT 1908 # Reykjavik Mean Time?
- -1:00 Iceland IS%sT 1968 Apr 7 1:00s
+ -1:00 Iceland IS%sT 1968 Apr 7 1:00s
0:00 - GMT
# Italy
@@ -1438,9 +1474,8 @@
# From Paul Eggert (2006-03-22):
# For Italian DST we have three sources: Shanks & Pottenger, Whitman, and
# F. Pollastri
-# <a href="http://toi.iriti.cnr.it/uk/ienitlt.html">
# Day-light Saving Time in Italy (2006-02-03)
-# </a>
+# http://toi.iriti.cnr.it/uk/ienitlt.html
# ('FP' below), taken from an Italian National Electrotechnical Institute
# publication. When the three sources disagree, guess who's right, as follows:
#
@@ -1500,8 +1535,8 @@
Rule Italy 1979 only - Sep 30 0:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Rome 0:49:56 - LMT 1866 Sep 22
- 0:49:56 - RMT 1893 Nov 1 0:00s # Rome Mean
- 1:00 Italy CE%sT 1942 Nov 2 2:00s
+ 0:49:56 - RMT 1893 Nov 1 0:00s # Rome Mean
+ 1:00 Italy CE%sT 1942 Nov 2 2:00s
1:00 C-Eur CE%sT 1944 Jul
1:00 Italy CE%sT 1980
1:00 EU CE%sT
@@ -1548,18 +1583,18 @@
# From Andrei Ivanov (2000-03-06):
# This year Latvia will not switch to Daylight Savings Time (as specified in
-# <a href="http://www.lv-laiks.lv/wwwraksti/2000/071072/vd4.htm">
# The Regulations of the Cabinet of Ministers of the Rep. of Latvia of
-# 29-Feb-2000 (#79)</a>, in Latvian for subscribers only).
+# 29-Feb-2000 (#79) <http://www.lv-laiks.lv/wwwraksti/2000/071072/vd4.htm>,
+# in Latvian for subscribers only).
-# <a href="http://www.rferl.org/newsline/2001/01/3-CEE/cee-030101.html">
-# From RFE/RL Newsline (2001-01-03), noted after a heads-up by Rives McDow:
-# </a>
+# From RFE/RL Newsline
+# http://www.rferl.org/newsline/2001/01/3-CEE/cee-030101.html
+# (2001-01-03), noted after a heads-up by Rives McDow:
# The Latvian government on 2 January decided that the country will
# institute daylight-saving time this spring, LETA reported.
# Last February the three Baltic states decided not to turn back their
# clocks one hour in the spring....
-# Minister of Economy Aigars Kalvitis noted that Latvia had too few
+# Minister of Economy Aigars Kalvītis noted that Latvia had too few
# daylight hours and thus decided to comply with a draft European
# Commission directive that provides for instituting daylight-saving
# time in EU countries between 2002 and 2006. The Latvian government
@@ -1569,18 +1604,23 @@
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Latvia 1989 1996 - Mar lastSun 2:00s 1:00 S
Rule Latvia 1989 1996 - Sep lastSun 2:00s 0 -
+
+# Milne 1899 says Riga was 1:36:28 (Polytechnique House time).
+# Byalokoz 1919 says Latvia was 1:36:34.
+# Go with Byalokoz.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Riga 1:36:24 - LMT 1880
- 1:36:24 - RMT 1918 Apr 15 2:00 #Riga Mean Time
- 1:36:24 1:00 LST 1918 Sep 16 3:00 #Latvian Summer
- 1:36:24 - RMT 1919 Apr 1 2:00
- 1:36:24 1:00 LST 1919 May 22 3:00
- 1:36:24 - RMT 1926 May 11
+Zone Europe/Riga 1:36:34 - LMT 1880
+ 1:36:34 - RMT 1918 Apr 15 2:00 # Riga MT
+ 1:36:34 1:00 LST 1918 Sep 16 3:00 # Latvian ST
+ 1:36:34 - RMT 1919 Apr 1 2:00
+ 1:36:34 1:00 LST 1919 May 22 3:00
+ 1:36:34 - RMT 1926 May 11
2:00 - EET 1940 Aug 5
3:00 - MSK 1941 Jul
1:00 C-Eur CE%sT 1944 Oct 13
- 3:00 Russia MSK/MSD 1989 Mar lastSun 2:00s
- 2:00 1:00 EEST 1989 Sep lastSun 2:00s
+ 3:00 Russia MSK/MSD 1989 Mar lastSun 2:00s
+ 2:00 1:00 EEST 1989 Sep lastSun 2:00s
2:00 Latvia EE%sT 1997 Jan 21
2:00 EU EE%sT 2000 Feb 29
2:00 - EET 2001 Jan 2
@@ -1614,7 +1654,7 @@
# I would like to inform that in this year Lithuanian time zone
# (Europe/Vilnius) was changed.
-# From <a href="http://www.elta.lt/">ELTA</a> No. 972 (2582) (1999-09-29),
+# From ELTA No. 972 (2582) (1999-09-29) <http://www.elta.lt/>,
# via Steffen Thorsen:
# Lithuania has shifted back to the second time zone (GMT plus two hours)
# to be valid here starting from October 31,
@@ -1623,9 +1663,9 @@
# motion to give up shifting to summer time in spring, as it was
# already done by Estonia.
-# From the <a href="http://www.tourism.lt/informa/ff.htm">
-# Fact File, Lithuanian State Department of Tourism
-# </a> (2000-03-27): Local time is GMT+2 hours ..., no daylight saving.
+# From the Fact File, Lithuanian State Department of Tourism
+# <http://www.tourism.lt/informa/ff.htm> (2000-03-27):
+# Local time is GMT+2 hours ..., no daylight saving.
# From a user via Klaus Marten (2003-02-07):
# As a candidate for membership of the European Union, Lithuania will
@@ -1638,18 +1678,18 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Vilnius 1:41:16 - LMT 1880
- 1:24:00 - WMT 1917 # Warsaw Mean Time
+ 1:24:00 - WMT 1917 # Warsaw Mean Time
1:35:36 - KMT 1919 Oct 10 # Kaunas Mean Time
1:00 - CET 1920 Jul 12
2:00 - EET 1920 Oct 9
1:00 - CET 1940 Aug 3
3:00 - MSK 1941 Jun 24
1:00 C-Eur CE%sT 1944 Aug
- 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
- 2:00 1:00 EEST 1991 Sep 29 2:00s
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
+ 2:00 1:00 EEST 1991 Sep 29 2:00s
2:00 C-Eur EE%sT 1998
- 2:00 - EET 1998 Mar 29 1:00u
- 1:00 EU CE%sT 1999 Oct 31 1:00u
+ 2:00 - EET 1998 Mar 29 1:00u
+ 1:00 EU CE%sT 1999 Oct 31 1:00u
2:00 - EET 2003 Jan 1
2:00 EU EE%sT
@@ -1683,9 +1723,9 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Luxembourg 0:24:36 - LMT 1904 Jun
1:00 Lux CE%sT 1918 Nov 25
- 0:00 Lux WE%sT 1929 Oct 6 2:00s
- 0:00 Belgium WE%sT 1940 May 14 3:00
- 1:00 C-Eur WE%sT 1944 Sep 18 3:00
+ 0:00 Lux WE%sT 1929 Oct 6 2:00s
+ 0:00 Belgium WE%sT 1940 May 14 3:00
+ 1:00 C-Eur WE%sT 1944 Sep 18 3:00
1:00 Belgium CE%sT 1977
1:00 EU CE%sT
@@ -1702,9 +1742,9 @@
Rule Malta 1975 1980 - Sep Sun>=15 2:00 0 -
Rule Malta 1980 only - Mar 31 2:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
- 1:00 Italy CE%sT 1942 Nov 2 2:00s
- 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
+Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
+ 1:00 Italy CE%sT 1942 Nov 2 2:00s
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
1:00 Italy CE%sT 1973 Mar 31
1:00 Malta CE%sT 1981
1:00 EU CE%sT
@@ -1719,7 +1759,7 @@
# In early 1992 there was large-scale interethnic violence in the area
# and it's possible that some Russophones continued to observe Moscow time.
# But [two people] separately reported via
-# Jesper Norgaard that as of 2001-01-24 Tiraspol was like Chisinau.
+# Jesper Nørgaard that as of 2001-01-24 Tiraspol was like Chisinau.
# The Tiraspol entry has therefore been removed for now.
#
# From Alexander Krivenyshev (2011-10-17):
@@ -1728,13 +1768,8 @@
# to the Winter Time).
#
# News (in Russian):
-# <a href="http://www.kyivpost.ua/russia/news/pridnestrove-otkazalos-ot-perehoda-na-zimnee-vremya-30954.html">
# http://www.kyivpost.ua/russia/news/pridnestrove-otkazalos-ot-perehoda-na-zimnee-vremya-30954.html
-# </a>
-#
-# <a href="http://www.allmoldova.com/moldova-news/1249064116.html">
# http://www.allmoldova.com/moldova-news/1249064116.html
-# </a>
#
# The substance of this change (reinstatement of the Tiraspol entry)
# is from a patch from Petr Machata (2011-10-17)
@@ -1752,9 +1787,7 @@
# Following Moldova and neighboring Ukraine- Transnistria (Pridnestrovie)-
# Tiraspol will go back to winter time on October 30, 2011.
# News from Moldova (in russian):
-# <a href="http://ru.publika.md/link_317061.html">
# http://ru.publika.md/link_317061.html
-# </a>
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1777,8 +1810,8 @@
# more precise 0:09:21.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
- 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
- 0:00 France WE%sT 1945 Sep 16 3:00
+ 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
+ 0:00 France WE%sT 1945 Sep 16 3:00
1:00 France CE%sT 1977
1:00 EU CE%sT
@@ -1822,8 +1855,8 @@
# was not until 1866 when they were all required by law to observe
# Amsterdam mean time.
-# The data before 1945 are taken from
-# <http://www.phys.uu.nl/~vgent/wettijd/wettijd.htm>.
+# The data entries before 1945 are taken from
+# http://www.phys.uu.nl/~vgent/wettijd/wettijd.htm
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Neth 1916 only - May 1 0:00 1:00 NST # Netherlands Summer Time
@@ -1854,8 +1887,8 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Amsterdam 0:19:32 - LMT 1835
0:19:32 Neth %s 1937 Jul 1
- 0:20 Neth NE%sT 1940 May 16 0:00 # Dutch Time
- 1:00 C-Eur CE%sT 1945 Apr 2 2:00
+ 0:20 Neth NE%sT 1940 May 16 0:00 # Dutch Time
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00
1:00 Neth CE%sT 1977
1:00 EU CE%sT
@@ -1885,14 +1918,14 @@
# time they were declared as parts of Norway. Svalbard was declared
# as a part of Norway by law of 1925-07-17 no 11, section 4 and Jan
# Mayen by law of 1930-02-27 no 2, section 2. (From
-# http://www.lovdata.no/all/nl-19250717-011.html and
-# http://www.lovdata.no/all/nl-19300227-002.html). The law/regulation
+# <http://www.lovdata.no/all/nl-19250717-011.html> and
+# <http://www.lovdata.no/all/nl-19300227-002.html>). The law/regulation
# for normal/standard time in Norway is from 1894-06-29 no 1 (came
# into operation on 1895-01-01) and Svalbard/Jan Mayen seem to be a
# part of this law since 1925/1930. (From
-# http://www.lovdata.no/all/nl-18940629-001.html ) I have not been
+# <http://www.lovdata.no/all/nl-18940629-001.html>) I have not been
# able to find if Jan Mayen used a different time zone (e.g. -0100)
-# before 1930. Jan Mayen has only been "inhabitated" since 1921 by
+# before 1930. Jan Mayen has only been "inhabited" since 1921 by
# Norwegian meteorologists and maybe used the same time as Norway ever
# since 1921. Svalbard (Arctic/Longyearbyen) has been inhabited since
# before 1895, and therefore probably changed the local time somewhere
@@ -1907,7 +1940,7 @@
# <http://home.no.net/janmayen/history.htm> says that the meteorologists
# burned down their station in 1940 and left the island, but returned in
# 1941 with a small Norwegian garrison and continued operations despite
-# frequent air ttacks from Germans. In 1943 the Americans established a
+# frequent air attacks from Germans. In 1943 the Americans established a
# radiolocating station on the island, called "Atlantic City". Possibly
# the UT offset changed during the war, but I think it unlikely that
# Jan Mayen used German daylight-saving rules.
@@ -1918,7 +1951,7 @@
# <http://www.svalbard.com/SvalbardFAQ.html> says that the Germans were
# expelled on 1942-05-14. However, small parties of Germans did return,
# and according to Wilhelm Dege's book "War North of 80" (1954)
-# <http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html>
+# http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html
# the German armed forces at the Svalbard weather station code-named
# Haudegen did not surrender to the Allies until September 1945.
#
@@ -1927,6 +1960,10 @@
Link Europe/Oslo Arctic/Longyearbyen
# Poland
+
+# The 1919 dates and times can be found in Tygodnik Urzędowy nr 1 (1919-03-20),
+# <http://www.wbc.poznan.pl/publication/32156> pp 1-2.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Poland 1918 1919 - Sep 16 2:00s 0 -
Rule Poland 1919 only - Apr 15 2:00s 1:00 S
@@ -1937,9 +1974,9 @@
Rule Poland 1945 only - Apr 29 0:00 1:00 S
Rule Poland 1945 only - Nov 1 0:00 0 -
# For 1946 on the source is Kazimierz Borkowski,
-# Torun Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U.,
-# <http://www.astro.uni.torun.pl/~kb/Artykuly/U-PA/Czas2.htm#tth_tAb1>
-# Thanks to Przemyslaw Augustyniak (2005-05-28) for this reference.
+# Toruń Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U.,
+# http://www.astro.uni.torun.pl/~kb/Artykuly/U-PA/Czas2.htm#tth_tAb1
+# Thanks to Przemysław Augustyniak (2005-05-28) for this reference.
# He also gives these further references:
# Mon Pol nr 13, poz 162 (1995) <http://www.abc.com.pl/serwis/mp/1995/0162.htm>
# Druk nr 2180 (2003) <http://www.senat.gov.pl/k5/dok/sejm/053/2180.pdf>
@@ -1959,10 +1996,10 @@
Rule Poland 1962 1964 - Sep lastSun 1:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Warsaw 1:24:00 - LMT 1880
- 1:24:00 - WMT 1915 Aug 5 # Warsaw Mean Time
- 1:00 C-Eur CE%sT 1918 Sep 16 3:00
+ 1:24:00 - WMT 1915 Aug 5 # Warsaw Mean Time
+ 1:00 C-Eur CE%sT 1918 Sep 16 3:00
2:00 Poland EE%sT 1922 Jun
- 1:00 Poland CE%sT 1940 Jun 23 2:00
+ 1:00 Poland CE%sT 1940 Jun 23 2:00
1:00 C-Eur CE%sT 1944 Oct
1:00 Poland CE%sT 1977
1:00 W-Eur CE%sT 1988
@@ -1970,6 +2007,14 @@
# Portugal
#
+# From Paul Eggert (2014-08-11), after a heads-up from Stephen Colebourne:
+# According to a Portuguese decree (1911-05-26)
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# Lisbon was at -0:36:44.68, but switched to GMT on 1912-01-01 at 00:00.
+# Round the old offset to -0:36:45. This agrees with Willett but disagrees
+# with Shanks, who says the transition occurred on 1911-05-24 at 00:00 for
+# Europe/Lisbon, Atlantic/Azores, and Atlantic/Madeira.
+#
# From Rui Pedro Salgueiro (1992-11-12):
# Portugal has recently (September, 27) changed timezone
# (from WET to MET or CET) to harmonize with EEC.
@@ -2049,35 +2094,34 @@
Rule Port 1980 only - Mar lastSun 0:00s 1:00 S
Rule Port 1981 1982 - Mar lastSun 1:00s 1:00 S
Rule Port 1983 only - Mar lastSun 2:00s 1:00 S
+#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-# Shanks & Pottenger say the transition from LMT to WET occurred 1911-05-24;
-# Willett says 1912-01-01. Go with Willett.
-Zone Europe/Lisbon -0:36:32 - LMT 1884
- -0:36:32 - LMT 1912 Jan 1 # Lisbon Mean Time
- 0:00 Port WE%sT 1966 Apr 3 2:00
- 1:00 - CET 1976 Sep 26 1:00
- 0:00 Port WE%sT 1983 Sep 25 1:00s
- 0:00 W-Eur WE%sT 1992 Sep 27 1:00s
- 1:00 EU CE%sT 1996 Mar 31 1:00u
+Zone Europe/Lisbon -0:36:45 - LMT 1884
+ -0:36:45 - LMT 1912 Jan 1 # Lisbon Mean Time
+ 0:00 Port WE%sT 1966 Apr 3 2:00
+ 1:00 - CET 1976 Sep 26 1:00
+ 0:00 Port WE%sT 1983 Sep 25 1:00s
+ 0:00 W-Eur WE%sT 1992 Sep 27 1:00s
+ 1:00 EU CE%sT 1996 Mar 31 1:00u
0:00 EU WE%sT
-Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada
- -1:54:32 - HMT 1911 May 24 # Horta Mean Time
- -2:00 Port AZO%sT 1966 Apr 3 2:00 # Azores Time
- -1:00 Port AZO%sT 1983 Sep 25 1:00s
- -1:00 W-Eur AZO%sT 1992 Sep 27 1:00s
- 0:00 EU WE%sT 1993 Mar 28 1:00u
+Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada
+ -1:54:32 - HMT 1912 Jan 1 # Horta Mean Time
+ -2:00 Port AZO%sT 1966 Apr 3 2:00 # Azores Time
+ -1:00 Port AZO%sT 1983 Sep 25 1:00s
+ -1:00 W-Eur AZO%sT 1992 Sep 27 1:00s
+ 0:00 EU WE%sT 1993 Mar 28 1:00u
-1:00 EU AZO%sT
-Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal
- -1:07:36 - FMT 1911 May 24 # Funchal Mean Time
- -1:00 Port MAD%sT 1966 Apr 3 2:00 # Madeira Time
- 0:00 Port WE%sT 1983 Sep 25 1:00s
+Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal
+ -1:07:36 - FMT 1912 Jan 1 # Funchal Mean Time
+ -1:00 Port MAD%sT 1966 Apr 3 2:00 # Madeira Time
+ 0:00 Port WE%sT 1983 Sep 25 1:00s
0:00 EU WE%sT
# Romania
#
# From Paul Eggert (1999-10-07):
-# <a href="http://www.nineoclock.ro/POL/1778pol.html">
-# Nine O'clock</a> (1998-10-23) reports that the switch occurred at
+# Nine O'clock <http://www.nineoclock.ro/POL/1778pol.html>
+# (1998-10-23) reports that the switch occurred at
# 04:00 local time in fall 1998. For lack of better info,
# assume that Romania and Moldova switched to EU rules in 1997,
# the same year as Bulgaria.
@@ -2094,32 +2138,28 @@
Rule Romania 1991 1993 - Sep lastSun 0:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct
- 1:44:24 - BMT 1931 Jul 24 # Bucharest MT
- 2:00 Romania EE%sT 1981 Mar 29 2:00s
+ 1:44:24 - BMT 1931 Jul 24 # Bucharest MT
+ 2:00 Romania EE%sT 1981 Mar 29 2:00s
2:00 C-Eur EE%sT 1991
2:00 Romania EE%sT 1994
2:00 E-Eur EE%sT 1997
2:00 EU EE%sT
+
# Russia
# From Alexander Krivenyshev (2011-09-15):
# Based on last Russian Government Decree # 725 on August 31, 2011
# (Government document
-# <a href="http://www.government.ru/gov/results/16355/print/">
# http://www.government.ru/gov/results/16355/print/
-# </a>
# in Russian)
# there are few corrections have to be made for some Russian time zones...
# All updated Russian Time Zones were placed in table and translated to English
# by WorldTimeZone.com at the link below:
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_russia36.htm">
# http://www.worldtimezone.com/dst_news/dst_news_russia36.htm
-# </a>
# From Sanjeev Gupta (2011-09-27):
# Scans of [Decree #23 of January 8, 1992] are available at:
-# <a href="http://government.consultant.ru/page.aspx?1223966">
# http://government.consultant.ru/page.aspx?1223966
# They are in Cyrillic letters (presumably Russian).
@@ -2128,16 +2168,12 @@
# changed in September 2011:
#
# One source is
-# < a href="http://government.ru/gov/results/16355/>
# http://government.ru/gov/results/16355/
-# </a>
# which, according to translate.google.com, begins "Decree of August 31,
# 2011 No 725" and contains no other dates or "effective date" information.
#
# Another source is
-# <a href="http://www.rg.ru/2011/09/06/chas-zona-dok.html">
# http://www.rg.ru/2011/09/06/chas-zona-dok.html
-# </a>
# which, according to translate.google.com, begins "Resolution of the
# Government of the Russian Federation on August 31, 2011 N 725" and also
# contains "Date first official publication: September 6, 2011 Posted on:
@@ -2145,28 +2181,45 @@
# does not contain any "effective date" information.
#
# Another source is
-# <a href="http://en.wikipedia.org/wiki/Oymyakonsky_District#cite_note-RuTime-7">
# http://en.wikipedia.org/wiki/Oymyakonsky_District#cite_note-RuTime-7
-# </a>
# which, in note 8, contains "Resolution #725 of August 31, 2011...
# Effective as of after 7 days following the day of the official publication"
# but which does not contain any reference to September 6, 2011.
#
# The Wikipedia article refers to
-# <a href="http://base.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=118896">
# http://base.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=118896
-# </a>
# which seems to copy the text of the government.ru page.
#
# Tobias Conradi combines Wikipedia's
# "as of after 7 days following the day of the official publication"
-# with www.rg.ru's "Date of first official publication: September 6, 2011" to get
-# September 13, 2011 as the cutover date (unusually, a Tuesday, as Tobias Conradi notes).
+# with www.rg.ru's "Date of first official publication: September 6, 2011" to
+# get September 13, 2011 as the cutover date (unusually, a Tuesday, as Tobias
+# Conradi notes).
#
# None of the sources indicates a time of day for changing clocks.
#
# Go with 2011-09-13 0:00s.
+# From Alexander Krivenyshev (2014-07-01):
+# According to the Russian news (ITAR-TASS News Agency)
+# http://en.itar-tass.com/russia/738562
+# the State Duma has approved ... the draft bill on returning to
+# winter time standard and return Russia 11 time zones. The new
+# regulations will come into effect on October 26, 2014 at 02:00 ...
+# http://asozd2.duma.gov.ru/main.nsf/%28Spravka%29?OpenAgent&RN=431985-6&02
+# Here is a link where we put together table (based on approved Bill N
+# 431985-6) with proposed 11 Russian time zones and corresponding
+# areas/cities/administrative centers in the Russian Federation (in English):
+# http://www.worldtimezone.com/dst_news/dst_news_russia65.html
+#
+# From Alexander Krivenyshev (2014-07-22):
+# Putin signed the Federal Law 431985-6 ... (in Russian)
+# http://itar-tass.com/obschestvo/1333711
+# http://www.pravo.gov.ru:8080/page.aspx?111660
+# http://www.kremlin.ru/acts/46279
+# From October 26, 2014 the new Russian time zone map will looks like this:
+# http://www.worldtimezone.com/dst_news/dst_news_russia-map-2014-07.html
+
# From Paul Eggert (2006-03-22):
# Except for Moscow after 1919-07-01, I invented the time zone abbreviations.
# Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991,
@@ -2193,9 +2246,9 @@
#
# For Grozny, Chechnya, we have the following story from
# John Daniszewski, "Scavengers in the Rubble", Los Angeles Times (2001-02-07):
-# News--often false--is spread by word of mouth. A rumor that it was
+# News - often false - is spread by word of mouth. A rumor that it was
# time to move the clocks back put this whole city out of sync with
-# the rest of Russia for two weeks--even soldiers stationed here began
+# the rest of Russia for two weeks - even soldiers stationed here began
# enforcing curfew at the wrong time.
#
# From Gwillim Law (2001-06-05):
@@ -2206,107 +2259,265 @@
# since September 1997.... Although the Kuril Islands are
# administratively part of Sakhalin oblast', they appear to have
# remained on UTC+11 along with Magadan.
-#
+
+# From Tim Parenti (2014-07-06):
+# The comments detailing the coverage of each Russian zone are meant to assist
+# with maintenance only and represent our best guesses as to which regions
+# are covered by each zone. They are not meant to be taken as an authoritative
+# listing. The region codes listed come from
+# http://en.wikipedia.org/w/?title=Federal_subjects_of_Russia&oldid=611810498
+# and are used for convenience only; no guarantees are made regarding their
+# future stability. ISO 3166-2:RU codes are also listed for first-level
+# divisions where available.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-#
-# Kaliningradskaya oblast'.
+
+
+# From Tim Parenti (2014-07-03):
+# Europe/Kaliningrad covers...
+# 39 RU-KGD Kaliningrad Oblast
+
Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr
1:00 C-Eur CE%sT 1945
2:00 Poland CE%sT 1946
- 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
- 2:00 Russia EE%sT 2011 Mar 27 2:00s
- 3:00 - FET # Further-eastern European Time
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
+ 2:00 Russia EE%sT 2011 Mar 27 2:00s
+ 3:00 - FET 2014 Oct 26 2:00s
+ 2:00 - EET
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Europe/Moscow covers...
+# 01 RU-AD Adygea, Republic of
+# 05 RU-DA Dagestan, Republic of
+# 06 RU-IN Ingushetia, Republic of
+# 07 RU-KB Kabardino-Balkar Republic
+# 08 RU-KL Kalmykia, Republic of
+# 09 RU-KC Karachay-Cherkess Republic
+# 10 RU-KR Karelia, Republic of
+# 11 RU-KO Komi Republic
+# 12 RU-ME Mari El Republic
+# 13 RU-MO Mordovia, Republic of
+# 15 RU-SE North Ossetia-Alania, Republic of
+# 16 RU-TA Tatarstan, Republic of
+# 20 RU-CE Chechen Republic
+# 21 RU-CU Chuvash Republic
+# 23 RU-KDA Krasnodar Krai
+# 26 RU-STA Stavropol Krai
+# 29 RU-ARK Arkhangelsk Oblast
+# 31 RU-BEL Belgorod Oblast
+# 32 RU-BRY Bryansk Oblast
+# 33 RU-VLA Vladimir Oblast
+# 35 RU-VLG Vologda Oblast
+# 36 RU-VOR Voronezh Oblast
+# 37 RU-IVA Ivanovo Oblast
+# 40 RU-KLU Kaluga Oblast
+# 44 RU-KOS Kostroma Oblast
+# 46 RU-KRS Kursk Oblast
+# 47 RU-LEN Leningrad Oblast
+# 48 RU-LIP Lipetsk Oblast
+# 50 RU-MOS Moscow Oblast
+# 51 RU-MUR Murmansk Oblast
+# 52 RU-NIZ Nizhny Novgorod Oblast
+# 53 RU-NGR Novgorod Oblast
+# 57 RU-ORL Oryol Oblast
+# 58 RU-PNZ Penza Oblast
+# 60 RU-PSK Pskov Oblast
+# 61 RU-ROS Rostov Oblast
+# 62 RU-RYA Ryazan Oblast
+# 67 RU-SMO Smolensk Oblast
+# 68 RU-TAM Tambov Oblast
+# 69 RU-TVE Tver Oblast
+# 71 RU-TUL Tula Oblast
+# 73 RU-ULY Ulyanovsk Oblast
+# 76 RU-YAR Yaroslavl Oblast
+# 77 RU-MOW Moscow
+# 78 RU-SPE Saint Petersburg
+# 83 RU-NEN Nenets Autonomous Okrug
+
+# From Vladimir Karpinsky (2014-07-08):
+# LMT in Moscow (before Jul 3, 1916) is 2:30:17, that was defined by Moscow
+# Observatory (coordinates: 55 deg. 45'29.70", 37 deg. 34'05.30")....
+# LMT in Moscow since Jul 3, 1916 is 2:31:01 as a result of new standard.
+# (The info is from the book by Byalokoz ... p. 18.)
+# The time in St. Petersburg as capital of Russia was defined by
+# Pulkov observatory, near St. Petersburg. In 1916 LMT Moscow
+# was synchronized with LMT St. Petersburg (+30 minutes), (Pulkov observatory
+# coordinates: 59 deg. 46'18.70", 30 deg. 19'40.70") so 30 deg. 19'40.70" >
+# 2h01m18.7s = 2:01:19. LMT Moscow = LMT St.Petersburg + 30m 2:01:19 + 0:30 =
+# 2:31:19 ...
#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Adygeya, Arkhangel'skaya oblast',
-# Belgorodskaya oblast', Bryanskaya oblast', Vladimirskaya oblast',
-# Vologodskaya oblast', Voronezhskaya oblast',
-# Respublika Dagestan, Ivanovskaya oblast', Respublika Ingushetiya,
-# Kabarbino-Balkarskaya Respublika, Respublika Kalmykiya,
-# Kalyzhskaya oblast', Respublika Karachaevo-Cherkessiya,
-# Respublika Kareliya, Respublika Komi,
-# Kostromskaya oblast', Krasnodarskij kraj, Kurskaya oblast',
-# Leningradskaya oblast', Lipetskaya oblast', Respublika Marij El,
-# Respublika Mordoviya, Moskva, Moskovskaya oblast',
-# Murmanskaya oblast', Nenetskij avtonomnyj okrug,
-# Nizhegorodskaya oblast', Novgorodskaya oblast', Orlovskaya oblast',
-# Penzenskaya oblast', Pskovskaya oblast', Rostovskaya oblast',
-# Ryazanskaya oblast', Sankt-Peterburg,
-# Respublika Severnaya Osetiya, Smolenskaya oblast',
-# Stavropol'skij kraj, Tambovskaya oblast', Respublika Tatarstan,
-# Tverskaya oblast', Tyl'skaya oblast', Ul'yanovskaya oblast',
-# Chechenskaya Respublika, Chuvashskaya oblast',
-# Yaroslavskaya oblast'
-Zone Europe/Moscow 2:30:20 - LMT 1880
- 2:30 - MMT 1916 Jul 3 # Moscow Mean Time
- 2:30:48 Russia %s 1919 Jul 1 2:00
+# From Paul Eggert (2014-07-08):
+# Milne does not list Moscow, but suggests that its time might be listed in
+# Résumés mensuels et annuels des observations météorologiques (1895).
+# Presumably this is OCLC 85825704, a journal published with parallel text in
+# Russian and French. This source has not been located; go with Karpinsky.
+
+Zone Europe/Moscow 2:30:17 - LMT 1880
+ 2:30:17 - MMT 1916 Jul 3 # Moscow Mean Time
+ 2:31:19 Russia %s 1919 Jul 1 2:00
+ 3:00 Russia %s 1921 Oct
3:00 Russia MSK/MSD 1922 Oct
2:00 - EET 1930 Jun 21
- 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
- 2:00 Russia EE%sT 1992 Jan 19 2:00s
- 3:00 Russia MSK/MSD 2011 Mar 27 2:00s
- 4:00 - MSK
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
+ 2:00 Russia EE%sT 1992 Jan 19 2:00s
+ 3:00 Russia MSK/MSD 2011 Mar 27 2:00s
+ 4:00 - MSK 2014 Oct 26 2:00s
+ 3:00 - MSK
+
+
+# From Tim Parenti (2014-07-03):
+# Europe/Simferopol covers...
+# ** **** Crimea, Republic of
+# ** **** Sevastopol
+
+Zone Europe/Simferopol 2:16:24 - LMT 1880
+ 2:16 - SMT 1924 May 2 # Simferopol Mean T
+ 2:00 - EET 1930 Jun 21
+ 3:00 - MSK 1941 Nov
+ 1:00 C-Eur CE%sT 1944 Apr 13
+ 3:00 Russia MSK/MSD 1990
+ 3:00 - MSK 1990 Jul 1 2:00
+ 2:00 - EET 1992
+# Central Crimea used Moscow time 1994/1997.
#
-# Astrakhanskaya oblast', Kirovskaya oblast', Saratovskaya oblast',
-# Volgogradskaya oblast'. Shanks & Pottenger say Kirov is still at +0400
-# but Wikipedia (2006-05-09) says +0300. Perhaps it switched after the
-# others? But we have no data.
+# From Paul Eggert (2006-03-22):
+# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
+# from Kiev to Moscow time sometime after the January 1994 elections.
+# Shanks (1999) says "date of change uncertain", but implies that it happened
+# sometime between the 1994 DST switches. Shanks & Pottenger simply say
+# 1994-09-25 03:00, but that can't be right. For now, guess it
+# changed in May.
+ 2:00 E-Eur EE%sT 1994 May
+# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.
+ 3:00 E-Eur MSK/MSD 1996 Mar 31 3:00s
+ 3:00 1:00 MSD 1996 Oct 27 3:00s
+# IATA SSIM (1997-09) says Crimea switched to EET/EEST.
+# Assume it happened in March by not changing the clocks.
+ 3:00 Russia MSK/MSD 1997
+ 3:00 - MSK 1997 Mar lastSun 1:00u
+# From Alexander Krivenyshev (2014-03-17):
+# time change at 2:00 (2am) on March 30, 2014
+# http://vz.ru/news/2014/3/17/677464.html
+# From Paul Eggert (2014-03-30):
+# Simferopol and Sevastopol reportedly changed their central town clocks
+# late the previous day, but this appears to have been ceremonial
+# and the discrepancies are small enough to not worry about.
+ 2:00 EU EE%sT 2014 Mar 30 2:00
+ 4:00 - MSK 2014 Oct 26 2:00s
+ 3:00 - MSK
+
+
+# From Tim Parenti (2014-07-03):
+# Europe/Volgograd covers...
+# 30 RU-AST Astrakhan Oblast
+# 34 RU-VGG Volgograd Oblast
+# 43 RU-KIR Kirov Oblast
+# 64 RU-SAR Saratov Oblast
+
+# From Paul Eggert (2006-05-09):
+# Shanks & Pottenger say Kirov is still at +0400 but Wikipedia says +0300.
+# Perhaps it switched after the others? But we have no data.
+
Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3
3:00 - TSAT 1925 Apr 6 # Tsaritsyn Time
3:00 - STAT 1930 Jun 21 # Stalingrad Time
4:00 - STAT 1961 Nov 11
- 4:00 Russia VOL%sT 1989 Mar 26 2:00s # Volgograd T
- 3:00 Russia VOL%sT 1991 Mar 31 2:00s
- 4:00 - VOLT 1992 Mar 29 2:00s
- 3:00 Russia VOL%sT 2011 Mar 27 2:00s
- 4:00 - VOLT
-#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Samarskaya oblast', Udmyrtskaya respublika
-Zone Europe/Samara 3:20:36 - LMT 1919 Jul 1 2:00
+ 4:00 Russia VOL%sT 1989 Mar 26 2:00s # Volgograd T
+ 3:00 Russia VOL%sT 1991 Mar 31 2:00s
+ 4:00 - VOLT 1992 Mar 29 2:00s
+ 3:00 Russia MSK 2011 Mar 27 2:00s
+ 4:00 - MSK 2014 Oct 26 2:00s
+ 3:00 - MSK
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Europe/Samara covers...
+# 18 RU-UD Udmurt Republic
+# 63 RU-SAM Samara Oblast
+
+# Byalokoz 1919 says Samara was 3:20:20.
+
+Zone Europe/Samara 3:20:20 - LMT 1919 Jul 1 2:00
3:00 - SAMT 1930 Jun 21
4:00 - SAMT 1935 Jan 27
- 4:00 Russia KUY%sT 1989 Mar 26 2:00s # Kuybyshev
- 3:00 Russia KUY%sT 1991 Mar 31 2:00s
- 2:00 Russia KUY%sT 1991 Sep 29 2:00s
- 3:00 - KUYT 1991 Oct 20 3:00
- 4:00 Russia SAM%sT 2010 Mar 28 2:00s # Samara Time
- 3:00 Russia SAM%sT 2011 Mar 27 2:00s
+ 4:00 Russia KUY%sT 1989 Mar 26 2:00s # Kuybyshev
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
+ 2:00 Russia EE%sT 1991 Sep 29 2:00s
+ 3:00 - KUYT 1991 Oct 20 3:00
+ 4:00 Russia SAM%sT 2010 Mar 28 2:00s # Samara Time
+ 3:00 Russia SAM%sT 2011 Mar 27 2:00s
4:00 - SAMT
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Yekaterinburg covers...
+# 02 RU-BA Bashkortostan, Republic of
+# 90 RU-PER Perm Krai
+# 45 RU-KGN Kurgan Oblast
+# 56 RU-ORE Orenburg Oblast
+# 66 RU-SVE Sverdlovsk Oblast
+# 72 RU-TYU Tyumen Oblast
+# 74 RU-CHE Chelyabinsk Oblast
+# 86 RU-KHM Khanty-Mansi Autonomous Okrug - Yugra
+# 89 RU-YAN Yamalo-Nenets Autonomous Okrug
#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Bashkortostan, Komi-Permyatskij avtonomnyj okrug,
-# Kurganskaya oblast', Orenburgskaya oblast', Permskaya oblast',
-# Sverdlovskaya oblast', Tyumenskaya oblast',
-# Khanty-Manskijskij avtonomnyj okrug, Chelyabinskaya oblast',
-# Yamalo-Nenetskij avtonomnyj okrug.
-Zone Asia/Yekaterinburg 4:02:24 - LMT 1919 Jul 15 4:00
+# Note: Effective 2005-12-01, (59) Perm Oblast and (81) Komi-Permyak
+# Autonomous Okrug merged to form (90, RU-PER) Perm Krai.
+
+# Milne says Yekaterinburg was 4:02:32.9; round to nearest.
+# Byalokoz 1919 says its provincial time was based on Perm, at 3:45:05.
+# Assume it switched on 1916-07-03, the time of the new standard.
+# The 1919 and 1930 transitions are from Shanks.
+
+Zone Asia/Yekaterinburg 4:02:33 - LMT 1916 Jul 3
+ 3:45:05 - PMT 1919 Jul 15 4:00
4:00 - SVET 1930 Jun 21 # Sverdlovsk Time
- 5:00 Russia SVE%sT 1991 Mar 31 2:00s
- 4:00 Russia SVE%sT 1992 Jan 19 2:00s
- 5:00 Russia YEK%sT 2011 Mar 27 2:00s
- 6:00 - YEKT # Yekaterinburg Time
-#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Altaj, Altajskij kraj, Omskaya oblast'.
-Zone Asia/Omsk 4:53:36 - LMT 1919 Nov 14
- 5:00 - OMST 1930 Jun 21 # Omsk TIme
- 6:00 Russia OMS%sT 1991 Mar 31 2:00s
- 5:00 Russia OMS%sT 1992 Jan 19 2:00s
- 6:00 Russia OMS%sT 2011 Mar 27 2:00s
- 7:00 - OMST
-#
+ 5:00 Russia SVE%sT 1991 Mar 31 2:00s
+ 4:00 Russia SVE%sT 1992 Jan 19 2:00s
+ 5:00 Russia YEK%sT 2011 Mar 27 2:00s
+ 6:00 - YEKT 2014 Oct 26 2:00s
+ 5:00 - YEKT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Omsk covers...
+# 04 RU-AL Altai Republic
+# 22 RU-ALT Altai Krai
+# 55 RU-OMS Omsk Oblast
+
+# Byalokoz 1919 says Omsk was 4:53:30.
+
+Zone Asia/Omsk 4:53:30 - LMT 1919 Nov 14
+ 5:00 - OMST 1930 Jun 21 # Omsk Time
+ 6:00 Russia OMS%sT 1991 Mar 31 2:00s
+ 5:00 Russia OMS%sT 1992 Jan 19 2:00s
+ 6:00 Russia OMS%sT 2011 Mar 27 2:00s
+ 7:00 - OMST 2014 Oct 26 2:00s
+ 6:00 - OMST
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Novosibirsk covers...
+# 54 RU-NVS Novosibirsk Oblast
+# 70 RU-TOM Tomsk Oblast
+
# From Paul Eggert (2006-08-19): I'm guessing about Tomsk here; it's
# not clear when it switched from +7 to +6.
-# Novosibirskaya oblast', Tomskaya oblast'.
-Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
+
+Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
6:00 - NOVT 1930 Jun 21 # Novosibirsk Time
- 7:00 Russia NOV%sT 1991 Mar 31 2:00s
- 6:00 Russia NOV%sT 1992 Jan 19 2:00s
+ 7:00 Russia NOV%sT 1991 Mar 31 2:00s
+ 6:00 Russia NOV%sT 1992 Jan 19 2:00s
7:00 Russia NOV%sT 1993 May 23 # say Shanks & P.
- 6:00 Russia NOV%sT 2011 Mar 27 2:00s
- 7:00 - NOVT
+ 6:00 Russia NOV%sT 2011 Mar 27 2:00s
+ 7:00 - NOVT 2014 Oct 26 2:00s
+ 6:00 - NOVT
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Novokuznetsk covers...
+# 42 RU-KEM Kemerovo Oblast
# From Alexander Krivenyshev (2009-10-13):
# Kemerovo oblast' (Kemerovo region) in Russia will change current time zone on
@@ -2319,14 +2530,10 @@
# time zone." ("Russia Zone 5" or old "USSR Zone 5" is GMT +0600)
#
# Russian Government web site (Russian language)
-# <a href="http://www.government.ru/content/governmentactivity/rfgovernmentdecisions/archiv">
# http://www.government.ru/content/governmentactivity/rfgovernmentdecisions/archive/2009/09/14/991633.htm
-# </a>
# or Russian-English translation by WorldTimeZone.com with reference
# map to local region and new Russia Time Zone map after March 28, 2010
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_russia03.html">
# http://www.worldtimezone.com/dst_news/dst_news_russia03.html
-# </a>
#
# Thus, when Russia will switch to DST on the night of March 28, 2010
# Kemerovo region (Kemerovo oblast') will not change the clock.
@@ -2334,152 +2541,319 @@
# As a result, Kemerovo oblast' will be in the same time zone as
# Novosibirsk, Omsk, Tomsk, Barnaul and Altai Republic.
-Zone Asia/Novokuznetsk 5:48:48 - NMT 1920 Jan 6
+# From Tim Parenti (2014-07-02), per Alexander Krivenyshev (2014-07-02):
+# The Kemerovo region will remain at UTC+7 through the 2014-10-26 change, thus
+# realigning itself with KRAT.
+
+Zone Asia/Novokuznetsk 5:48:48 - LMT 1924 May 1
6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time
- 7:00 Russia KRA%sT 1991 Mar 31 2:00s
- 6:00 Russia KRA%sT 1992 Jan 19 2:00s
- 7:00 Russia KRA%sT 2010 Mar 28 2:00s
- 6:00 Russia NOV%sT 2011 Mar 27 2:00s
- 7:00 - NOVT # Novosibirsk/Novokuznetsk Time
+ 7:00 Russia KRA%sT 1991 Mar 31 2:00s
+ 6:00 Russia KRA%sT 1992 Jan 19 2:00s
+ 7:00 Russia KRA%sT 2010 Mar 28 2:00s
+ 6:00 Russia NOV%sT 2011 Mar 27 2:00s # Novosibirsk
+ 7:00 - NOVT 2014 Oct 26 2:00s
+ 7:00 - KRAT # Krasnoyarsk Time
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Krasnoyarsk covers...
+# 17 RU-TY Tuva Republic
+# 19 RU-KK Khakassia, Republic of
+# 24 RU-KYA Krasnoyarsk Krai
#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Krasnoyarskij kraj,
-# Tajmyrskij (Dolgano-Nenetskij) avtonomnyj okrug,
-# Respublika Tuva, Respublika Khakasiya, Evenkijskij avtonomnyj okrug.
-Zone Asia/Krasnoyarsk 6:11:20 - LMT 1920 Jan 6
+# Note: Effective 2007-01-01, (88) Evenk Autonomous Okrug and (84) Taymyr
+# Autonomous Okrug were merged into (24, RU-KYA) Krasnoyarsk Krai.
+
+# Byalokoz 1919 says Krasnoyarsk was 6:11:26.
+
+Zone Asia/Krasnoyarsk 6:11:26 - LMT 1920 Jan 6
6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time
- 7:00 Russia KRA%sT 1991 Mar 31 2:00s
- 6:00 Russia KRA%sT 1992 Jan 19 2:00s
- 7:00 Russia KRA%sT 2011 Mar 27 2:00s
- 8:00 - KRAT
+ 7:00 Russia KRA%sT 1991 Mar 31 2:00s
+ 6:00 Russia KRA%sT 1992 Jan 19 2:00s
+ 7:00 Russia KRA%sT 2011 Mar 27 2:00s
+ 8:00 - KRAT 2014 Oct 26 2:00s
+ 7:00 - KRAT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Irkutsk covers...
+# 03 RU-BU Buryatia, Republic of
+# 38 RU-IRK Irkutsk Oblast
#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Buryatiya, Irkutskaya oblast',
-# Ust'-Ordynskij Buryatskij avtonomnyj okrug.
-Zone Asia/Irkutsk 6:57:20 - LMT 1880
- 6:57:20 - IMT 1920 Jan 25 # Irkutsk Mean Time
+# Note: Effective 2008-01-01, (85) Ust-Orda Buryat Autonomous Okrug was
+# merged into (38, RU-IRK) Irkutsk Oblast.
+
+# Milne 1899 says Irkutsk was 6:57:15.
+# Byalokoz 1919 says Irkutsk was 6:57:05.
+# Go with Byalokoz.
+
+Zone Asia/Irkutsk 6:57:05 - LMT 1880
+ 6:57:05 - IMT 1920 Jan 25 # Irkutsk Mean Time
7:00 - IRKT 1930 Jun 21 # Irkutsk Time
- 8:00 Russia IRK%sT 1991 Mar 31 2:00s
- 7:00 Russia IRK%sT 1992 Jan 19 2:00s
- 8:00 Russia IRK%sT 2011 Mar 27 2:00s
- 9:00 - IRKT
+ 8:00 Russia IRK%sT 1991 Mar 31 2:00s
+ 7:00 Russia IRK%sT 1992 Jan 19 2:00s
+ 8:00 Russia IRK%sT 2011 Mar 27 2:00s
+ 9:00 - IRKT 2014 Oct 26 2:00s
+ 8:00 - IRKT
+
+
+# From Tim Parenti (2014-07-06):
+# Asia/Chita covers...
+# 92 RU-ZAB Zabaykalsky Krai
#
-# From Oscar van Vlijmen (2003-10-18): [This region consists of]
-# Aginskij Buryatskij avtonomnyj okrug, Amurskaya oblast',
-# [parts of] Respublika Sakha (Yakutiya), Chitinskaya oblast'.
+# Note: Effective 2008-03-01, (75) Chita Oblast and (80) Agin-Buryat
+# Autonomous Okrug merged to form (92, RU-ZAB) Zabaykalsky Krai.
-# From Oscar van Vlijmen (2009-11-29):
-# ...some regions of [Russia] were merged with others since 2005...
-# Some names were changed, no big deal, except for one instance: a new name.
-# YAK/YAKST: UTC+9 Zabajkal'skij kraj.
+Zone Asia/Chita 7:33:52 - LMT 1919 Dec 15
+ 8:00 - YAKT 1930 Jun 21 # Yakutsk Time
+ 9:00 Russia YAK%sT 1991 Mar 31 2:00s
+ 8:00 Russia YAK%sT 1992 Jan 19 2:00s
+ 9:00 Russia YAK%sT 2011 Mar 27 2:00s
+ 10:00 - YAKT 2014 Oct 26 2:00s
+ 8:00 - IRKT
-# From Oscar van Vlijmen (2009-11-29):
-# The Sakha districts are: Aldanskij, Amginskij, Anabarskij,
-# Verkhnevilyujskij, Vilyujskij, Gornyj,
-# Zhiganskij, Kobyajskij, Lenskij, Megino-Kangalasskij, Mirninskij,
-# Namskij, Nyurbinskij, Olenyokskij, Olyokminskij,
-# Suntarskij, Tattinskij, Ust'-Aldanskij, Khangalasskij,
-# Churapchinskij, Eveno-Bytantajskij Natsional'nij.
-Zone Asia/Yakutsk 8:38:40 - LMT 1919 Dec 15
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
+# Asia/Yakutsk covers...
+# 28 RU-AMU Amur Oblast
+#
+# ...and parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-02 **** Aldansky District
+# 14-04 **** Amginsky District
+# 14-05 **** Anabarsky District
+# 14-06 **** Bulunsky District
+# 14-07 **** Verkhnevilyuysky District
+# 14-10 **** Vilyuysky District
+# 14-11 **** Gorny District
+# 14-12 **** Zhigansky District
+# 14-13 **** Kobyaysky District
+# 14-14 **** Lensky District
+# 14-15 **** Megino-Kangalassky District
+# 14-16 **** Mirninsky District
+# 14-18 **** Namsky District
+# 14-19 **** Neryungrinsky District
+# 14-21 **** Nyurbinsky District
+# 14-23 **** Olenyoksky District
+# 14-24 **** Olyokminsky District
+# 14-26 **** Suntarsky District
+# 14-27 **** Tattinsky District
+# 14-29 **** Ust-Aldansky District
+# 14-32 **** Khangalassky District
+# 14-33 **** Churapchinsky District
+# 14-34 **** Eveno-Bytantaysky National District
+
+# From Tim Parenti (2014-07-03):
+# Our commentary seems to have lost mention of (14-19) Neryungrinsky District.
+# Since the surrounding districts of Sakha are all YAKT, assume this is, too.
+# Also assume its history has been the same as the rest of Asia/Yakutsk.
+
+# Byalokoz 1919 says Yakutsk was 8:38:58.
+
+Zone Asia/Yakutsk 8:38:58 - LMT 1919 Dec 15
8:00 - YAKT 1930 Jun 21 # Yakutsk Time
- 9:00 Russia YAK%sT 1991 Mar 31 2:00s
- 8:00 Russia YAK%sT 1992 Jan 19 2:00s
- 9:00 Russia YAK%sT 2011 Mar 27 2:00s
- 10:00 - YAKT
+ 9:00 Russia YAK%sT 1991 Mar 31 2:00s
+ 8:00 Russia YAK%sT 1992 Jan 19 2:00s
+ 9:00 Russia YAK%sT 2011 Mar 27 2:00s
+ 10:00 - YAKT 2014 Oct 26 2:00s
+ 9:00 - YAKT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
+# Asia/Vladivostok covers...
+# 25 RU-PRI Primorsky Krai
+# 27 RU-KHA Khabarovsk Krai
+# 79 RU-YEV Jewish Autonomous Oblast
#
-# From Oscar van Vlijmen (2003-10-18): [This region consists of]
-# Evrejskaya avtonomnaya oblast', Khabarovskij kraj, Primorskij kraj,
-# [parts of] Respublika Sakha (Yakutiya).
+# ...and parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-09 **** Verkhoyansky District
+# 14-31 **** Ust-Yansky District
-# From Oscar van Vlijmen (2009-11-29):
-# The Sakha districts are: Bulunskij, Verkhoyanskij, ... Ust'-Yanskij.
-Zone Asia/Vladivostok 8:47:44 - LMT 1922 Nov 15
+# Milne 1899 says Vladivostok was 8:47:33.5.
+# Byalokoz 1919 says Vladivostok was 8:47:31.
+# Go with Byalokoz.
+
+Zone Asia/Vladivostok 8:47:31 - LMT 1922 Nov 15
9:00 - VLAT 1930 Jun 21 # Vladivostok Time
- 10:00 Russia VLA%sT 1991 Mar 31 2:00s
- 9:00 Russia VLA%sST 1992 Jan 19 2:00s
- 10:00 Russia VLA%sT 2011 Mar 27 2:00s
- 11:00 - VLAT
+ 10:00 Russia VLA%sT 1991 Mar 31 2:00s
+ 9:00 Russia VLA%sT 1992 Jan 19 2:00s
+ 10:00 Russia VLA%sT 2011 Mar 27 2:00s
+ 11:00 - VLAT 2014 Oct 26 2:00s
+ 10:00 - VLAT
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Khandyga covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-28 **** Tomponsky District
+# 14-30 **** Ust-Maysky District
# From Arthur David Olson (2012-05-09):
# Tomponskij and Ust'-Majskij switched from Vladivostok time to Yakutsk time
# in 2011.
-#
+
# From Paul Eggert (2012-11-25):
# Shanks and Pottenger (2003) has Khandyga on Yakutsk time.
# Make a wild guess that it switched to Vladivostok time in 2004.
# This transition is no doubt wrong, but we have no better info.
-#
+
Zone Asia/Khandyga 9:02:13 - LMT 1919 Dec 15
8:00 - YAKT 1930 Jun 21 # Yakutsk Time
- 9:00 Russia YAK%sT 1991 Mar 31 2:00s
- 8:00 Russia YAK%sT 1992 Jan 19 2:00s
+ 9:00 Russia YAK%sT 1991 Mar 31 2:00s
+ 8:00 Russia YAK%sT 1992 Jan 19 2:00s
9:00 Russia YAK%sT 2004
- 10:00 Russia VLA%sT 2011 Mar 27 2:00s
- 11:00 - VLAT 2011 Sep 13 0:00s # Decree 725?
- 10:00 - YAKT
+ 10:00 Russia VLA%sT 2011 Mar 27 2:00s
+ 11:00 - VLAT 2011 Sep 13 0:00s # Decree 725?
+ 10:00 - YAKT 2014 Oct 26 2:00s
+ 9:00 - YAKT
-#
-# Sakhalinskaya oblast'.
-# The Zone name should be Yuzhno-Sakhalinsk, but that's too long.
+
+# From Tim Parenti (2014-07-03):
+# Asia/Sakhalin covers...
+# 65 RU-SAK Sakhalin Oblast
+# ...with the exception of:
+# 65-11 **** Severo-Kurilsky District (North Kuril Islands)
+
+# The Zone name should be Asia/Yuzhno-Sakhalinsk, but that's too long.
Zone Asia/Sakhalin 9:30:48 - LMT 1905 Aug 23
- 9:00 - CJT 1938
+ 9:00 - JCST 1937 Oct 1
9:00 - JST 1945 Aug 25
- 11:00 Russia SAK%sT 1991 Mar 31 2:00s # Sakhalin T.
- 10:00 Russia SAK%sT 1992 Jan 19 2:00s
- 11:00 Russia SAK%sT 1997 Mar lastSun 2:00s
- 10:00 Russia SAK%sT 2011 Mar 27 2:00s
- 11:00 - SAKT
-#
-# From Oscar van Vlijmen (2003-10-18): [This region consists of]
-# Magadanskaya oblast', Respublika Sakha (Yakutiya).
-# Probably also: Kuril Islands.
+ 11:00 Russia SAK%sT 1991 Mar 31 2:00s # Sakhalin T
+ 10:00 Russia SAK%sT 1992 Jan 19 2:00s
+ 11:00 Russia SAK%sT 1997 Mar lastSun 2:00s
+ 10:00 Russia SAK%sT 2011 Mar 27 2:00s
+ 11:00 - SAKT 2014 Oct 26 2:00s
+ 10:00 - SAKT
-# From Oscar van Vlijmen (2009-11-29):
-# The Sakha districts are: Abyjskij, Allaikhovskij, Verkhhhnekolymskij, Momskij,
-# Nizhnekolymskij, ... Srednekolymskij.
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
+# Asia/Magadan covers...
+# 49 RU-MAG Magadan Oblast
+
+# From Tim Parenti (2014-07-06), per Alexander Krivenyshev (2014-07-02):
+# Magadan Oblast is moving from UTC+12 to UTC+10 on 2014-10-26; however,
+# several districts of Sakha Republic as well as Severo-Kurilsky District of
+# the Sakhalin Oblast (also known as the North Kuril Islands), represented
+# until now by Asia/Magadan, will instead move to UTC+11. These regions will
+# need their own zone.
+
Zone Asia/Magadan 10:03:12 - LMT 1924 May 2
10:00 - MAGT 1930 Jun 21 # Magadan Time
- 11:00 Russia MAG%sT 1991 Mar 31 2:00s
- 10:00 Russia MAG%sT 1992 Jan 19 2:00s
- 11:00 Russia MAG%sT 2011 Mar 27 2:00s
- 12:00 - MAGT
+ 11:00 Russia MAG%sT 1991 Mar 31 2:00s
+ 10:00 Russia MAG%sT 1992 Jan 19 2:00s
+ 11:00 Russia MAG%sT 2011 Mar 27 2:00s
+ 12:00 - MAGT 2014 Oct 26 2:00s
+ 10:00 - MAGT
+
+
+# From Tim Parenti (2014-07-06):
+# Asia/Srednekolymsk covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-01 **** Abyysky District
+# 14-03 **** Allaikhovsky District
+# 14-08 **** Verkhnekolymsky District
+# 14-17 **** Momsky District
+# 14-20 **** Nizhnekolymsky District
+# 14-25 **** Srednekolymsky District
+#
+# ...and parts of (65, RU-SAK) Sakhalin Oblast:
+# 65-11 **** Severo-Kurilsky District (North Kuril Islands)
+
+# From Tim Parenti (2014-07-02):
+# Oymyakonsky District of Sakha Republic (represented by Ust-Nera), along with
+# most of Sakhalin Oblast (represented by Sakhalin) will be moving to UTC+10 on
+# 2014-10-26 to stay aligned with VLAT/SAKT; however, Severo-Kurilsky District
+# of the Sakhalin Oblast (also known as the North Kuril Islands, represented by
+# Severo-Kurilsk) will remain on UTC+11.
+
+# From Tim Parenti (2014-07-06):
+# Assume North Kuril Islands have history like Magadan before 2011-03-27.
+# There is a decent chance this is wrong, in which case a new zone
+# Asia/Severo-Kurilsk would become necessary.
+#
+# Srednekolymsk and Zyryanka are the most populous places amongst these
+# districts, but have very similar populations. In fact, Wikipedia currently
+# lists them both as having 3528 people, exactly 1668 males and 1860 females
+# each! (Yikes!)
+# http://en.wikipedia.org/w/?title=Srednekolymsky_District&oldid=603435276
+# http://en.wikipedia.org/w/?title=Verkhnekolymsky_District&oldid=594378493
+# Assume this is a mistake, albeit an amusing one.
+#
+# Looking at censuses, the populations of the two municipalities seem to have
+# fluctuated recently. Zyryanka was more populous than Srednekolymsk in the
+# 1989 and 2002 censuses, but Srednekolymsk was more populous in the most
+# recent (2010) census, 3525 to 3170. (See pages 195 and 197 of
+# http://www.gks.ru/free_doc/new_site/perepis2010/croc/Documents/Vol1/pub-01-05.pdf
+# in Russian.) In addition, Srednekolymsk appears to be a much older
+# settlement and the population of Zyryanka seems to be declining.
+# Go with Srednekolymsk.
+#
+# Since Magadan Oblast moves to UTC+10 on 2014-10-26, we cannot keep using MAGT
+# as the abbreviation. Use SRET instead.
+
+Zone Asia/Srednekolymsk 10:14:52 - LMT 1924 May 2
+ 10:00 - MAGT 1930 Jun 21 # Magadan Time
+ 11:00 Russia MAG%sT 1991 Mar 31 2:00s
+ 10:00 Russia MAG%sT 1992 Jan 19 2:00s
+ 11:00 Russia MAG%sT 2011 Mar 27 2:00s
+ 12:00 - MAGT 2014 Oct 26 2:00s
+ 11:00 - SRET # Srednekolymsk Time
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Ust-Nera covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-22 **** Oymyakonsky District
# From Arthur David Olson (2012-05-09):
-# Ojmyakonskij and the Kuril Islands switched from
+# Ojmyakonskij [and the Kuril Islands] switched from
# Magadan time to Vladivostok time in 2011.
+#
+# From Tim Parenti (2014-07-06), per Alexander Krivenyshev (2014-07-02):
+# It's unlikely that any of the Kuril Islands were involved in such a switch,
+# as the South and Middle Kurils have been on UTC+11 (SAKT) with the rest of
+# Sakhalin Oblast since at least 2011-09, and the North Kurils have been on
+# UTC+12 since at least then, too.
+
Zone Asia/Ust-Nera 9:32:54 - LMT 1919 Dec 15
8:00 - YAKT 1930 Jun 21 # Yakutsk Time
9:00 Russia YAKT 1981 Apr 1
- 11:00 Russia MAG%sT 1991 Mar 31 2:00s
- 10:00 Russia MAG%sT 1992 Jan 19 2:00s
- 11:00 Russia MAG%sT 2011 Mar 27 2:00s
- 12:00 - MAGT 2011 Sep 13 0:00s # Decree 725?
- 11:00 - VLAT
+ 11:00 Russia MAG%sT 1991 Mar 31 2:00s
+ 10:00 Russia MAG%sT 1992 Jan 19 2:00s
+ 11:00 Russia MAG%sT 2011 Mar 27 2:00s
+ 12:00 - MAGT 2011 Sep 13 0:00s # Decree 725?
+ 11:00 - VLAT 2014 Oct 26 2:00s
+ 10:00 - VLAT
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Kamchatskaya oblast', Koryakskij avtonomnyj okrug.
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Kamchatka covers...
+# 91 RU-KAM Kamchatka Krai
#
-# The Zone name should be Asia/Petropavlovsk-Kamchatski, but that's too long.
+# Note: Effective 2007-07-01, (41) Kamchatka Oblast and (82) Koryak
+# Autonomous Okrug merged to form (91, RU-KAM) Kamchatka Krai.
+
+# The Zone name should be Asia/Petropavlovsk-Kamchatski or perhaps
+# Asia/Petropavlovsk-Kamchatsky, but these are too long.
Zone Asia/Kamchatka 10:34:36 - LMT 1922 Nov 10
11:00 - PETT 1930 Jun 21 # P-K Time
- 12:00 Russia PET%sT 1991 Mar 31 2:00s
- 11:00 Russia PET%sT 1992 Jan 19 2:00s
- 12:00 Russia PET%sT 2010 Mar 28 2:00s
- 11:00 Russia PET%sT 2011 Mar 27 2:00s
+ 12:00 Russia PET%sT 1991 Mar 31 2:00s
+ 11:00 Russia PET%sT 1992 Jan 19 2:00s
+ 12:00 Russia PET%sT 2010 Mar 28 2:00s
+ 11:00 Russia PET%sT 2011 Mar 27 2:00s
12:00 - PETT
-#
-# Chukotskij avtonomnyj okrug
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Anadyr covers...
+# 87 RU-CHU Chukotka Autonomous Okrug
+
Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2
12:00 - ANAT 1930 Jun 21 # Anadyr Time
- 13:00 Russia ANA%sT 1982 Apr 1 0:00s
- 12:00 Russia ANA%sT 1991 Mar 31 2:00s
- 11:00 Russia ANA%sT 1992 Jan 19 2:00s
- 12:00 Russia ANA%sT 2010 Mar 28 2:00s
- 11:00 Russia ANA%sT 2011 Mar 27 2:00s
+ 13:00 Russia ANA%sT 1982 Apr 1 0:00s
+ 12:00 Russia ANA%sT 1991 Mar 31 2:00s
+ 11:00 Russia ANA%sT 1992 Jan 19 2:00s
+ 12:00 Russia ANA%sT 2010 Mar 28 2:00s
+ 11:00 Russia ANA%sT 2011 Mar 27 2:00s
12:00 - ANAT
+
# San Marino
# See Europe/Rome.
@@ -2488,11 +2862,11 @@
Zone Europe/Belgrade 1:22:00 - LMT 1884
1:00 - CET 1941 Apr 18 23:00
1:00 C-Eur CE%sT 1945
- 1:00 - CET 1945 May 8 2:00s
+ 1:00 - CET 1945 May 8 2:00s
1:00 1:00 CEST 1945 Sep 16 2:00s
-# Metod Kozelj reports that the legal date of
+# Metod Koželj reports that the legal date of
# transition to EU rules was 1982-11-27, for all of Yugoslavia at the time.
-# Shanks & Pottenger don't give as much detail, so go with Kozelj.
+# Shanks & Pottenger don't give as much detail, so go with Koželj.
1:00 - CET 1982 Nov 27
1:00 EU CE%sT
Link Europe/Belgrade Europe/Ljubljana # Slovenia
@@ -2568,13 +2942,13 @@
0:00 1:00 WEST 1918 Oct 7 23:00
0:00 - WET 1924
0:00 Spain WE%sT 1929
- 0:00 SpainAfrica WE%sT 1984 Mar 16
+ 0:00 SpainAfrica WE%sT 1984 Mar 16
1:00 - CET 1986
1:00 EU CE%sT
Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
- -1:00 - CANT 1946 Sep 30 1:00 # Canaries Time
- 0:00 - WET 1980 Apr 6 0:00s
- 0:00 1:00 WEST 1980 Sep 28 0:00s
+ -1:00 - CANT 1946 Sep 30 1:00 # Canaries T
+ 0:00 - WET 1980 Apr 6 0:00s
+ 0:00 1:00 WEST 1980 Sep 28 0:00s
0:00 EU WE%sT
# IATA SSIM (1996-09) says the Canaries switch at 2:00u, not 1:00u.
# Ignore this for now, as the Canaries are part of the EU.
@@ -2583,7 +2957,7 @@
# From Ivan Nilsson (2001-04-13), superseding Shanks & Pottenger:
#
-# The law "Svensk forfattningssamling 1878, no 14" about standard time in 1879:
+# The law "Svensk författningssamling 1878, no 14" about standard time in 1879:
# From the beginning of 1879 (that is 01-01 00:00) the time for all
# places in the country is "the mean solar time for the meridian at
# three degrees, or twelve minutes of time, to the west of the
@@ -2594,7 +2968,7 @@
# national standard time as 01:00:14 ahead of GMT....
#
# About the beginning of CET in Sweden. The lawtext ("Svensk
-# forfattningssamling 1899, no 44") states, that "from the beginning
+# författningssamling 1899, no 44") states, that "from the beginning
# of 1900... ... the same as the mean solar time for the meridian at
# the distance of one hour of time from the meridian of the English
# observatory at Greenwich, or at 12 minutes 14 seconds to the west
@@ -2602,7 +2976,7 @@
# 1899-06-16. In short: At 1900-01-01 00:00:00 the new standard time
# in Sweden is 01:00:00 ahead of GMT.
#
-# 1916: The lawtext ("Svensk forfattningssamling 1916, no 124") states
+# 1916: The lawtext ("Svensk författningssamling 1916, no 124") states
# that "1916-05-15 is considered to begin one hour earlier". It is
# pretty obvious that at 05-14 23:00 the clocks are set to 05-15 00:00....
# Further the law says, that "1916-09-30 is considered to end one hour later".
@@ -2612,7 +2986,7 @@
# not available on the site (to my knowledge they are only available
# in Swedish): <http://www.riksdagen.se/english/work/sfst.asp> (type
# "sommartid" without the quotes in the field "Fritext" and then click
-# the Sok-button).
+# the Sök-button).
#
# (2001-05-13):
#
@@ -2627,9 +3001,9 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1
- 1:00:14 - SET 1900 Jan 1 # Swedish Time
+ 1:00:14 - SET 1900 Jan 1 # Swedish Time
1:00 - CET 1916 May 14 23:00
- 1:00 1:00 CEST 1916 Oct 1 01:00
+ 1:00 1:00 CEST 1916 Oct 1 1:00
1:00 - CET 1980
1:00 EU CE%sT
@@ -2637,7 +3011,7 @@
# From Howse:
# By the end of the 18th century clocks and watches became commonplace
# and their performance improved enormously. Communities began to keep
-# mean time in preference to apparent time -- Geneva from 1780 ....
+# mean time in preference to apparent time - Geneva from 1780 ....
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
# From Whitman (who writes "Midnight?"):
# Rule Swiss 1940 only - Nov 2 0:00 1:00 S
@@ -2653,7 +3027,7 @@
# to be wrong. This is now verified.
#
# I have found copies of the original ruling by the Swiss Federal
-# government, in 'Eidgen[o]ssische Gesetzessammlung 1941 and 1942' (Swiss
+# government, in 'Eidgenössische Gesetzessammlung 1941 and 1942' (Swiss
# federal law collection)...
#
# DST began on Monday 5 May 1941, 1:00 am by shifting the clocks to 2:00 am
@@ -2672,7 +3046,7 @@
# night as an absolute novelty, because this was the first time that such
# a thing had happened in Switzerland.
#
-# I have also checked 1916, because one book source (Gabriel, Traite de
+# I have also checked 1916, because one book source (Gabriel, Traité de
# l'heure dans le monde) claims that Switzerland had DST in 1916. This is
# false, no official document could be found. Probably Gabriel got misled
# by references to Germany, which introduced DST in 1916 for the first time.
@@ -2686,19 +3060,19 @@
# One further detail for Switzerland, which is probably out of scope for
# most users of tzdata: The [Europe/Zurich zone] ...
# describes all of Switzerland correctly, with the exception of
-# the Cantone Geneve (Geneva, Genf). Between 1848 and 1894 Geneve did not
+# the Canton de Genève (Geneva, Genf). Between 1848 and 1894 Geneva did not
# follow Bern Mean Time but kept its own local mean time.
# To represent this, an extra zone would be needed.
#
# From Alois Treindl (2013-09-11):
# The Federal regulations say
# http://www.admin.ch/opc/de/classified-compilation/20071096/index.html
-# ... the meridian for Bern mean time ... is 7 degrees 26'22.50".
+# ... the meridian for Bern mean time ... is 7 degrees 26' 22.50".
# Expressed in time, it is 0h29m45.5s.
# From Pierre-Yves Berger (2013-09-11):
-# the "Circulaire du conseil federal" (December 11 1893)
-# <http://www.amtsdruckschriften.bar.admin.ch/viewOrigDoc.do?id=10071353> ...
+# the "Circulaire du conseil fédéral" (December 11 1893)
+# http://www.amtsdruckschriften.bar.admin.ch/viewOrigDoc.do?id=10071353
# clearly states that the [1894-06-01] change should be done at midnight
# but if no one is present after 11 at night, could be postponed until one
# hour before the beginning of service.
@@ -2709,14 +3083,14 @@
# We can find no reliable source for Shanks's assertion that all of Switzerland
# except Geneva switched to Bern Mean Time at 00:00 on 1848-09-12. This book:
#
-# Jakob Messerli. Gleichmassig, punktlich, schnell: Zeiteinteilung und
+# Jakob Messerli. Gleichmässig, pünktlich, schnell. Zeiteinteilung und
# Zeitgebrauch in der Schweiz im 19. Jahrhundert. Chronos, Zurich 1995,
# ISBN 3-905311-68-2, OCLC 717570797.
#
# suggests that the transition was more gradual, and that the Swiss did not
# agree about civil time during the transition. The timekeeping it gives the
# most detail for is postal and telegraph time: here, federal legislation (the
-# "Bundesgesetz uber die Erstellung von elektrischen Telegraphen") passed on
+# "Bundesgesetz über die Erstellung von elektrischen Telegraphen") passed on
# 1851-11-23, and an official implementation notice was published 1853-07-16
# (Bundesblatt 1853, Bd. II, S. 859). On p 72 Messerli writes that in
# practice since July 1853 Bernese time was used in "all postal and telegraph
@@ -2730,7 +3104,7 @@
Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16 # See above comment.
- 0:29:46 - BMT 1894 Jun # Bern Mean Time
+ 0:29:46 - BMT 1894 Jun # Bern Mean Time
1:00 Swiss CE%sT 1981
1:00 EU CE%sT
@@ -2738,7 +3112,7 @@
# From Amar Devegowda (2007-01-03):
# The time zone rules for Istanbul, Turkey have not been changed for years now.
-# ... The latest rules are available at -
+# ... The latest rules are available at:
# http://www.timeanddate.com/worldclock/timezone.html?n=107
# From Steffen Thorsen (2007-01-03):
# I have been able to find press records back to 1996 which all say that
@@ -2763,8 +3137,7 @@
# (on a non-government server though) describing dates between 2002 and 2006:
# http://www.alomaliye.com/bkk_2002_3769.htm
-# From G&ouml;kdeniz Karada&#x011f; (2011-03-10):
-#
+# From Gökdeniz Karadağ (2011-03-10):
# According to the articles linked below, Turkey will change into summer
# time zone (GMT+3) on March 28, 2011 at 3:00 a.m. instead of March 27.
# This change is due to a nationwide exam on 27th.
@@ -2777,9 +3150,16 @@
# Turkish Local election....
# http://www.sabah.com.tr/Ekonomi/2014/02/12/yaz-saatinde-onemli-degisiklik
# ... so Turkey will move clocks forward one hour on March 31 at 3:00 a.m.
-# From Paul Eggert (2014-02-17):
-# Here is an English-language source:
-# http://www.worldbulletin.net/turkey/129016/turkey-switches-to-daylight-saving-time-march-31
+# From Randal L. Schwartz (2014-04-15):
+# Having landed on a flight from the states to Istanbul (via AMS) on March 31,
+# I can tell you that NOBODY (even the airlines) respected this timezone DST
+# change delay. Maybe the word just didn't get out in time.
+# From Paul Eggert (2014-06-15):
+# The press reported massive confusion, as election officials obeyed the rule
+# change but cell phones (and airline baggage systems) did not. See:
+# Kostidis M. Eventful elections in Turkey. Balkan News Agency
+# http://www.balkaneu.com/eventful-elections-turkey/ 2014-03-30.
+# I guess the best we can do is document the official time.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Turkey 1916 only - May 1 0:00 1:00 S
@@ -2846,10 +3226,10 @@
2:00 Turkey EE%sT 1978 Oct 15
3:00 Turkey TR%sT 1985 Apr 20 # Turkey Time
2:00 Turkey EE%sT 2007
- 2:00 EU EE%sT 2011 Mar 27 1:00u
- 2:00 - EET 2011 Mar 28 1:00u
- 2:00 EU EE%sT 2014 Mar 30 1:00u
- 2:00 - EET 2014 Mar 31 1:00u
+ 2:00 EU EE%sT 2011 Mar 27 1:00u
+ 2:00 - EET 2011 Mar 28 1:00u
+ 2:00 EU EE%sT 2014 Mar 30 1:00u
+ 2:00 - EET 2014 Mar 31 1:00u
2:00 EU EE%sT
Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
@@ -2870,7 +3250,7 @@
# Bill number 8330 of MP from the Party of Regions Oleg Nadoshi got
# approval from 266 deputies.
#
-# Ukraine abolishes transter back to the winter time (in Russian)
+# Ukraine abolishes transfer back to the winter time (in Russian)
# http://news.mail.ru/politics/6861560/
#
# The Ukrainians will no longer change the clock (in Russian)
@@ -2931,12 +3311,12 @@
2:00 - EET 1930 Jun 21
3:00 - MSK 1941 Sep 20
1:00 C-Eur CE%sT 1943 Nov 6
- 3:00 Russia MSK/MSD 1990 Jul 1 2:00
- 2:00 1:00 EEST 1991 Sep 29 3:00
+ 3:00 Russia MSK/MSD 1990 Jul 1 2:00
+ 2:00 1:00 EEST 1991 Sep 29 3:00
2:00 E-Eur EE%sT 1995
2:00 EU EE%sT
# Ruthenia used CET 1990/1991.
-# "Uzhhorod" is the transliteration of the Ukrainian name, but
+# "Uzhhorod" is the transliteration of the Rusyn/Ukrainian pronunciation, but
# "Uzhgorod" is more common in English.
Zone Europe/Uzhgorod 1:29:12 - LMT 1890 Oct
1:00 - CET 1940
@@ -2944,8 +3324,8 @@
1:00 1:00 CEST 1944 Oct 26
1:00 - CET 1945 Jun 29
3:00 Russia MSK/MSD 1990
- 3:00 - MSK 1990 Jul 1 2:00
- 1:00 - CET 1991 Mar 31 3:00
+ 3:00 - MSK 1990 Jul 1 2:00
+ 1:00 - CET 1991 Mar 31 3:00
2:00 - EET 1992
2:00 E-Eur EE%sT 1995
2:00 EU EE%sT
@@ -2959,42 +3339,9 @@
2:00 - EET 1930 Jun 21
3:00 - MSK 1941 Aug 25
1:00 C-Eur CE%sT 1943 Oct 25
- 3:00 Russia MSK/MSD 1991 Mar 31 2:00
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00
2:00 E-Eur EE%sT 1995
2:00 EU EE%sT
-# Central Crimea used Moscow time 1994/1997.
-Zone Europe/Simferopol 2:16:24 - LMT 1880
- 2:16 - SMT 1924 May 2 # Simferopol Mean T
- 2:00 - EET 1930 Jun 21
- 3:00 - MSK 1941 Nov
- 1:00 C-Eur CE%sT 1944 Apr 13
- 3:00 Russia MSK/MSD 1990
- 3:00 - MSK 1990 Jul 1 2:00
- 2:00 - EET 1992
-# From Paul Eggert (2006-03-22):
-# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
-# from Kiev to Moscow time sometime after the January 1994 elections.
-# Shanks (1999) says "date of change uncertain", but implies that it happened
-# sometime between the 1994 DST switches. Shanks & Pottenger simply say
-# 1994-09-25 03:00, but that can't be right. For now, guess it
-# changed in May.
- 2:00 E-Eur EE%sT 1994 May
-# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.
- 3:00 E-Eur MSK/MSD 1996 Mar 31 3:00s
- 3:00 1:00 MSD 1996 Oct 27 3:00s
-# IATA SSIM (1997-09) says Crimea switched to EET/EEST.
-# Assume it happened in March by not changing the clocks.
- 3:00 Russia MSK/MSD 1997
- 3:00 - MSK 1997 Mar lastSun 1:00u
-# From Alexander Krivenyshev (2014-03-17):
-# time change at 2:00 (2am) on March 30, 2014
-# http://vz.ru/news/2014/3/17/677464.html
-# From Paul Eggert (2014-03-30):
-# Simferopol and Sevastopol reportedly changed their central town clocks
-# late the previous day, but this appears to have been ceremonial
-# and the discrepancies are small enough to not worry about.
- 2:00 EU EE%sT 2014 Mar 30 2:00
- 4:00 - MSK
# Vatican City
# See Europe/Rome.
@@ -3018,7 +3365,7 @@
# ...
#
# ...the European time rules are...standardized since 1981, when
-# most European coun[tr]ies started DST. Before that year, only
+# most European countries started DST. Before that year, only
# a few countries (UK, France, Italy) had DST, each according
# to own national rules. In 1981, however, DST started on
# 'Apr firstSun', and not on 'Mar lastSun' as in the following
@@ -3026,7 +3373,7 @@
# But also since 1981 there are some more national exceptions
# than listed in 'europe': Switzerland, for example, joined DST
# one year later, Denmark ended DST on 'Oct 1' instead of 'Sep
-# lastSun' in 1981---I don't know how they handle now.
+# lastSun' in 1981 - I don't know how they handle now.
#
# Finally, DST ist always from 'Apr 1' to 'Oct 1' in the
# Soviet Union (as far as I know).
--- ./jdk/make/sun/javazic/tzdata/factory Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/sun/javazic/tzdata/factory Mon Jan 05 11:57:27 2015 -0800
@@ -21,7 +21,6 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
--- ./jdk/make/sun/javazic/tzdata/iso3166.tab Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/sun/javazic/tzdata/iso3166.tab Mon Jan 05 11:57:27 2015 -0800
@@ -26,21 +26,21 @@
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
#
-# From Paul Eggert (2013-05-27):
+# From Paul Eggert (2014-07-18):
+# This file contains a table of two-letter country codes. Columns are
+# separated by a single tab. Lines beginning with '#' are comments.
+# Although all text currently uses ASCII encoding, this is planned to
+# change to UTF-8 soon. The columns of the table are as follows:
#
-# This file contains a table with the following columns:
# 1. ISO 3166-1 alpha-2 country code, current as of
-# ISO 3166-1 Newsletter VI-15 (2013-05-10). See: Updates on ISO 3166
+# ISO 3166-1 Newsletter VI-16 (2013-07-11). See: Updates on ISO 3166
# http://www.iso.org/iso/home/standards/country_codes/updates_on_iso_3166.htm
# 2. The usual English name for the coded region,
# chosen so that alphabetic sorting of subsets produces helpful lists.
# This is not the same as the English name in the ISO 3166 tables.
#
-# Columns are separated by a single tab.
# The table is sorted by country code.
#
-# Lines beginning with `#' are comments.
-#
# This table is intended as an aid for users, to help them select time
# zone data appropriate for their practical needs. It is not intended
# to take or endorse any position on legal or territorial claims.
--- ./jdk/make/sun/javazic/tzdata/leapseconds Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/sun/javazic/tzdata/leapseconds Mon Jan 05 11:57:27 2015 -0800
@@ -21,7 +21,7 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-# Allowance for leapseconds added to each timezone file.
+# Allowance for leap seconds added to each time zone file.
# This file is in the public domain.
@@ -31,10 +31,10 @@
# you should be able to pick up leap-seconds.list from a secondary NIST server.
# For more about leap-seconds.list, please see
# The NTP Timescale and Leap Seconds
-# <http://www.eecis.udel.edu/~mills/leap.html>.
+# http://www.eecis.udel.edu/~mills/leap.html
-# The International Earth Rotation Service periodically uses leap seconds
-# to keep UTC to within 0.9 s of UT1
+# The International Earth Rotation and Reference Systems Service
+# periodically uses leap seconds to keep UTC to within 0.9 s of UT1
# (which measures the true angular orientation of the earth in space); see
# Terry J Quinn, The BIPM and the accurate measure of time,
# Proc IEEE 79, 7 (July 1991), 894-905 <http://dx.doi.org/10.1109/5.84965>.
--- ./jdk/make/sun/javazic/tzdata/northamerica Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/sun/javazic/tzdata/northamerica Mon Jan 05 11:57:27 2015 -0800
@@ -21,15 +21,15 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
# also includes Central America and the Caribbean
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future). For more, please see
+# the file CONTRIBUTING in the tz distribution.
# From Paul Eggert (1999-03-22):
# A reliable and entertaining source about time zones is
@@ -78,13 +78,13 @@
# to push people into bed earlier, and get them up earlier, to make
# them healthy, wealthy and wise in spite of themselves.
#
-# -- Robertson Davies, The diary of Samuel Marchbanks,
+# -- Robertson Davies, The diary of Samuel Marchbanks,
# Clarke, Irwin (1947), XIX, Sunday
#
# For more about the first ten years of DST in the United States, see
-# Robert Garland's <a href="http://www.clpgh.org/exhibit/dst.html">
-# Ten years of daylight saving from the Pittsburgh standpoint
-# (Carnegie Library of Pittsburgh, 1927)</a>.
+# Robert Garland, Ten years of daylight saving from the Pittsburgh standpoint
+# (Carnegie Library of Pittsburgh, 1927).
+# http://www.clpgh.org/exhibit/dst.html
#
# Shanks says that DST was called "War Time" in the US in 1918 and 1919.
# However, DST was imposed by the Standard Time Act of 1918, which
@@ -103,11 +103,11 @@
# From Arthur David Olson (2000-09-25):
# Last night I heard part of a rebroadcast of a 1945 Arch Oboler radio drama.
# In the introduction, Oboler spoke of "Eastern Peace Time."
-# An AltaVista search turned up
-# <a href="http://rowayton.org/rhs/hstaug45.html">:
+# An AltaVista search turned up:
+# http://rowayton.org/rhs/hstaug45.html
# "When the time is announced over the radio now, it is 'Eastern Peace
# Time' instead of the old familiar 'Eastern War Time.' Peace is wonderful."
-# </a> (August 1945) by way of confirmation.
+# (August 1945) by way of confirmation.
# From Joseph Gallant citing
# George H. Douglas, _The Early Days of Radio Broadcasting_ (1987):
@@ -205,7 +205,7 @@
# USA ALASKA STD 9 H BEHIND UTC MOST OF ALASKA (AKST)
# USA ALASKA STD 8 H BEHIND UTC APR 3 - OCT 30 (AKDT)
# USA ALEUTIAN 10 H BEHIND UTC ISLANDS WEST OF 170W
-# USA - " - 9 H BEHIND UTC APR 3 - OCT 30
+# USA " 9 H BEHIND UTC APR 3 - OCT 30
# USA HAWAII 10 H BEHIND UTC
# USA BERING 11 H BEHIND UTC SAMOA, MIDWAY
@@ -258,19 +258,19 @@
# The following was signed into law on 2005-08-08.
#
# H.R. 6, Energy Policy Act of 2005, SEC. 110. DAYLIGHT SAVINGS.
-# (a) Amendment- Section 3(a) of the Uniform Time Act of 1966 (15
+# (a) Amendment.--Section 3(a) of the Uniform Time Act of 1966 (15
# U.S.C. 260a(a)) is amended--
-# (1) by striking 'first Sunday of April' and inserting 'second
-# Sunday of March'; and
-# (2) by striking 'last Sunday of October' and inserting 'first
+# (1) by striking "first Sunday of April" and inserting "second
+# Sunday of March"; and
+# (2) by striking "last Sunday of October" and inserting "first
# Sunday of November'.
-# (b) Effective Date- Subsection (a) shall take effect 1 year after the
+# (b) Effective Date.--Subsection (a) shall take effect 1 year after the
# date of enactment of this Act or March 1, 2007, whichever is later.
-# (c) Report to Congress- Not later than 9 months after the effective
+# (c) Report to Congress.--Not later than 9 months after the effective
# date stated in subsection (b), the Secretary shall report to Congress
# on the impact of this section on energy consumption in the United
# States.
-# (d) Right to Revert- Congress retains the right to revert the
+# (d) Right to Revert.--Congress retains the right to revert the
# Daylight Saving Time back to the 2005 time schedules once the
# Department study is complete.
@@ -292,7 +292,7 @@
# From Paul Eggert (2005-08-26):
# According to today's Huntsville Times
-# <http://www.al.com/news/huntsvilletimes/index.ssf?/base/news/1125047783228320.xml&coll=1>
+# http://www.al.com/news/huntsvilletimes/index.ssf?/base/news/1125047783228320.xml&coll=1
# a few towns on Alabama's "eastern border with Georgia, such as Phenix City
# in Russell County, Lanett in Chambers County and some towns in Lee County,
# set their watches and clocks on Eastern time." It quotes H.H. "Bubba"
@@ -300,6 +300,12 @@
# time zone, but we do go by the Eastern time zone because so many people work
# in Columbus."
+# From Paul Eggert (2014-09-06):
+# Monthly Notices of the Royal Astronomical Society 44, 4 (1884-02-08), 208
+# says that New York City Hall time was 3 minutes 58.4 seconds fast of
+# Eastern time (i.e., -4:56:01.6) just before the 1883 switch. Round to the
+# nearest second.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
Rule NYC 1920 only - Mar lastSun 2:00 1:00 D
Rule NYC 1920 only - Oct lastSun 2:00 0 S
@@ -347,15 +353,15 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 12:09:24
-6:00 US C%sT 1920
- -6:00 Chicago C%sT 1936 Mar 1 2:00
- -5:00 - EST 1936 Nov 15 2:00
+ -6:00 Chicago C%sT 1936 Mar 1 2:00
+ -5:00 - EST 1936 Nov 15 2:00
-6:00 Chicago C%sT 1942
-6:00 US C%sT 1946
-6:00 Chicago C%sT 1967
-6:00 US C%sT
# Oliver County, ND switched from mountain to central time on 1992-10-25.
Zone America/North_Dakota/Center -6:45:12 - LMT 1883 Nov 18 12:14:48
- -7:00 US M%sT 1992 Oct 25 02:00
+ -7:00 US M%sT 1992 Oct 25 2:00
-6:00 US C%sT
# Morton County, ND, switched from mountain to central time on
# 2003-10-26, except for the area around Mandan which was already central time.
@@ -364,29 +370,26 @@
# Jones, Mellette, and Todd Counties in South Dakota;
# but in practice these other counties were already observing central time.
# See <http://www.epa.gov/fedrgstr/EPA-IMPACT/2003/October/Day-28/i27056.htm>.
-Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
- -7:00 US M%sT 2003 Oct 26 02:00
+Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
+ -7:00 US M%sT 2003 Oct 26 2:00
-6:00 US C%sT
# From Josh Findley (2011-01-21):
# ...it appears that Mercer County, North Dakota, changed from the
# mountain time zone to the central time zone at the last transition from
# daylight-saving to standard time (on Nov. 7, 2010):
-# <a href="http://www.gpo.gov/fdsys/pkg/FR-2010-09-29/html/2010-24376.htm">
# http://www.gpo.gov/fdsys/pkg/FR-2010-09-29/html/2010-24376.htm
-# </a>
-# <a href="http://www.bismarcktribune.com/news/local/article_1eb1b588-c758-11df-b472-001cc4c03286.html">
# http://www.bismarcktribune.com/news/local/article_1eb1b588-c758-11df-b472-001cc4c03286.html
-# </a>
# From Andy Lipscomb (2011-01-24):
# ...according to the Census Bureau, the largest city is Beulah (although
# it's commonly referred to as Beulah-Hazen, with Hazen being the next
# largest city in Mercer County). Google Maps places Beulah's city hall
-# at 4715'51" north, 10146'40" west, which yields an offset of 6h47'07".
+# at 47 degrees 15' 51" N, 101 degrees 46' 40" W, which yields an offset
+# of 6h47'07".
-Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53
- -7:00 US M%sT 2010 Nov 7 2:00
+Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53
+ -7:00 US M%sT 2010 Nov 7 2:00
-6:00 US C%sT
# US mountain time, represented by Denver
@@ -448,15 +451,18 @@
# was destroyed in 1805 by a Yakutat-kon war party.) However, there
# were nearby inhabitants in some cases and for our purposes perhaps
# it's best to simply use the official transition.
+
+# From Paul Eggert (2014-07-18):
+# One opinion of the early-1980s turmoil in Alaska over time zones and
+# daylight saving time appeared as graffiti on a Juneau airport wall:
+# "Welcome to Juneau. Please turn your watch back to the 19th century."
+# See: Turner W. Alaska's four time zones now two. NY Times 1983-11-01.
+# http://www.nytimes.com/1983/11/01/us/alaska-s-four-time-zones-now-two.html
#
-
-# From Steve Ferguson (2011-01-31):
-# The author lives in Alaska and many of the references listed are only
-# available to Alaskan residents.
-#
-# <a href="http://www.alaskahistoricalsociety.org/index.cfm?section=discover%20alaska&page=Glimpses%20of%20the%20Past&viewpost=2&ContentId=98">
-# http://www.alaskahistoricalsociety.org/index.cfm?section=discover%20alaska&page=Glimpses%20of%20the%20Past&viewpost=2&ContentId=98
-# </a>
+# Steve Ferguson (2011-01-31) referred to the following source:
+# Norris F. Keeping time in Alaska: national directives, local response.
+# Alaska History 2001;16(1-2).
+# http://alaskahistoricalsociety.org/discover-alaska/glimpses-of-the-past/keeping-time-in-alaska/
# From Arthur David Olson (2011-02-01):
# Here's database-relevant material from the 2001 "Alaska History" article:
@@ -482,12 +488,10 @@
# From Arthur David Olson (2011-02-09):
# I just spoke by phone with a staff member at the Metlakatla Indian
# Community office (using contact information available at
-# <a href="http://www.commerce.state.ak.us/dca/commdb/CIS.cfm?Comm_Boro_name=Metlakatla">
# http://www.commerce.state.ak.us/dca/commdb/CIS.cfm?Comm_Boro_name=Metlakatla
-# </a>).
# It's shortly after 1:00 here on the east coast of the United States;
# the staffer said it was shortly after 10:00 there. When I asked whether
-# that meant they were on Pacific time, they said no--they were on their
+# that meant they were on Pacific time, they said no - they were on their
# own time. I asked about daylight saving; they said it wasn't used. I
# did not inquire about practices in the past.
@@ -501,9 +505,9 @@
-8:00 - PST 1942
-8:00 US P%sT 1946
-8:00 - PST 1969
- -8:00 US P%sT 1980 Apr 27 2:00
- -9:00 US Y%sT 1980 Oct 26 2:00
- -8:00 US P%sT 1983 Oct 30 2:00
+ -8:00 US P%sT 1980 Apr 27 2:00
+ -9:00 US Y%sT 1980 Oct 26 2:00
+ -8:00 US P%sT 1983 Oct 30 2:00
-9:00 US Y%sT 1983 Nov 30
-9:00 US AK%sT
Zone America/Sitka 14:58:47 - LMT 1867 Oct 18
@@ -511,7 +515,7 @@
-8:00 - PST 1942
-8:00 US P%sT 1946
-8:00 - PST 1969
- -8:00 US P%sT 1983 Oct 30 2:00
+ -8:00 US P%sT 1983 Oct 30 2:00
-9:00 US Y%sT 1983 Nov 30
-9:00 US AK%sT
Zone America/Metlakatla 15:13:42 - LMT 1867 Oct 18
@@ -519,8 +523,8 @@
-8:00 - PST 1942
-8:00 US P%sT 1946
-8:00 - PST 1969
- -8:00 US P%sT 1983 Oct 30 2:00
- -8:00 - MeST
+ -8:00 US P%sT 1983 Oct 30 2:00
+ -8:00 - PST
Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18
-9:18:55 - LMT 1900 Aug 20 12:00
-9:00 - YST 1942
@@ -535,7 +539,7 @@
-10:00 US CAT/CAPT 1946 # Peace
-10:00 - CAT 1967 Apr
-10:00 - AHST 1969
- -10:00 US AH%sT 1983 Oct 30 2:00
+ -10:00 US AH%sT 1983 Oct 30 2:00
-9:00 US Y%sT 1983 Nov 30
-9:00 US AK%sT
Zone America/Nome 12:58:21 - LMT 1867 Oct 18
@@ -544,7 +548,7 @@
-11:00 US N%sT 1946
-11:00 - NST 1967 Apr
-11:00 - BST 1969
- -11:00 US B%sT 1983 Oct 30 2:00
+ -11:00 US B%sT 1983 Oct 30 2:00
-9:00 US Y%sT 1983 Nov 30
-9:00 US AK%sT
Zone America/Adak 12:13:21 - LMT 1867 Oct 18
@@ -553,7 +557,7 @@
-11:00 US N%sT 1946
-11:00 - NST 1967 Apr
-11:00 - BST 1969
- -11:00 US B%sT 1983 Oct 30 2:00
+ -11:00 US B%sT 1983 Oct 30 2:00
-10:00 US AH%sT 1983 Nov 30
-10:00 US HA%sT
# The following switches don't quite make our 1970 cutoff.
@@ -571,7 +575,7 @@
# Minutes of the Unalaska City Council Meeting, January 10, 1967:
# "Except for St. Paul and Akutan, Unalaska is the only important
# location not on Alaska Standard Time. The following resolution was
-# made by William Robinson and seconded by Henry Swanson: Be it
+# made by William Robinson and seconded by Henry Swanson: Be it
# resolved that the City of Unalaska hereby goes to Alaska Standard
# Time as of midnight Friday, January 13, 1967 (1 A.M. Saturday,
# January 14, Alaska Standard Time.) This resolution was passed with
@@ -583,9 +587,7 @@
# "Hawaiian Time" by Robert C. Schmitt and Doak C. Cox appears on pages 207-225
# of volume 26 of The Hawaiian Journal of History (1992). As of 2010-12-09,
# the article is available at
-# <a href="http://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf">
# http://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf
-# </a>
# and indicates that standard time was adopted effective noon, January
# 13, 1896 (page 218), that in "1933, the Legislature decreed daylight
# saving for the period between the last Sunday of each April and the
@@ -606,7 +608,7 @@
# year, the standard time of this Territory shall be advanced one
# hour...This Act shall take effect upon its approval. Approved this 26th
# day of April, A. D. 1933. LAWRENCE M JUDD, Governor of the Territory of
-# Hawaii." Page 172: "Act 163...Act 90 of the Session Laws of 1933 is
+# Hawaii." Page 172: "Act 163...Act 90 of the Session Laws of 1933 is
# hereby repealed...This Act shall take effect upon its approval, upon
# which date the standard time of this Territory shall be restored to
# that existing immediately prior to the taking effect of said Act 90.
@@ -616,14 +618,14 @@
# Note that 1933-05-21 was a Sunday.
# We're left to guess the time of day when Act 163 was approved; guess noon.
-Zone Pacific/Honolulu -10:31:26 - LMT 1896 Jan 13 12:00 #Schmitt&Cox
- -10:30 - HST 1933 Apr 30 2:00 #Laws 1933
- -10:30 1:00 HDT 1933 May 21 12:00 #Laws 1933+12
- -10:30 - HST 1942 Feb 09 2:00 #Schmitt&Cox+2
- -10:30 1:00 HDT 1945 Sep 30 2:00 #Schmitt&Cox+2
- -10:30 - HST 1947 Jun 8 2:00 #Schmitt&Cox+2
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Honolulu -10:31:26 - LMT 1896 Jan 13 12:00
+ -10:30 - HST 1933 Apr 30 2:00
+ -10:30 1:00 HDT 1933 May 21 12:00
+ -10:30 - HST 1942 Feb 9 2:00
+ -10:30 1:00 HDT 1945 Sep 30 2:00
+ -10:30 - HST 1947 Jun 8 2:00
-10:00 - HST
-
Link Pacific/Honolulu Pacific/Johnston
# Now we turn to US areas that have diverged from the consensus since 1970.
@@ -633,9 +635,9 @@
# From Paul Eggert (2002-10-20):
#
# The information in the rest of this paragraph is derived from the
-# <a href="http://www.dlapr.lib.az.us/links/daylight.htm">
-# Daylight Saving Time web page (2002-01-23)</a> maintained by the
-# Arizona State Library, Archives and Public Records.
+# Daylight Saving Time web page
+# <http://www.dlapr.lib.az.us/links/daylight.htm> (2002-01-23)
+# maintained by the Arizona State Library, Archives and Public Records.
# Between 1944-01-01 and 1944-04-01 the State of Arizona used standard
# time, but by federal law railroads, airlines, bus lines, military
# personnel, and some engaged in interstate commerce continued to
@@ -649,10 +651,11 @@
# Shanks says the 1944 experiment came to an end on 1944-03-17.
# Go with the Arizona State Library instead.
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Phoenix -7:28:18 - LMT 1883 Nov 18 11:31:42
- -7:00 US M%sT 1944 Jan 1 00:01
- -7:00 - MST 1944 Apr 1 00:01
- -7:00 US M%sT 1944 Oct 1 00:01
+ -7:00 US M%sT 1944 Jan 1 0:01
+ -7:00 - MST 1944 Apr 1 0:01
+ -7:00 US M%sT 1944 Oct 1 0:01
-7:00 - MST 1967
-7:00 US M%sT 1968 Mar 21
-7:00 - MST
@@ -676,24 +679,22 @@
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11
- -8:00 US P%sT 1923 May 13 2:00
+ -8:00 US P%sT 1923 May 13 2:00
-7:00 US M%sT 1974
- -7:00 - MST 1974 Feb 3 2:00
+ -7:00 - MST 1974 Feb 3 2:00
-7:00 US M%sT
# Indiana
#
# For a map of Indiana's time zone regions, see:
-# <a href="http://www.mccsc.edu/time.html">
-# What time is it in Indiana?
-# </a> (2006-03-01)
+# http://en.wikipedia.org/wiki/Time_in_Indiana
#
# From Paul Eggert (2007-08-17):
# Since 1970, most of Indiana has been like America/Indiana/Indianapolis,
# with the following exceptions:
#
# - Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer,
-# Vandenburgh, and Warrick counties have been like America/Chicago.
+# Vanderburgh, and Warrick counties have been like America/Chicago.
#
# - Dearborn and Ohio counties have been like America/New_York.
#
@@ -712,22 +713,16 @@
# that they would be ambiguous if we left them at the 'America' level.
# So we reluctantly put them all in a subdirectory 'America/Indiana'.
-# From Paul Eggert (2005-08-16):
-# http://www.mccsc.edu/time.html says that Indiana will use DST starting 2006.
-
-# From Nathan Stratton Treadway (2006-03-30):
-# http://www.dot.gov/affairs/dot0406.htm [3705 B]
-# From Deborah Goldsmith (2006-01-18):
-# http://dmses.dot.gov/docimages/pdf95/382329_web.pdf [2.9 MB]
-# From Paul Eggert (2006-01-20):
-# It says "DOT is relocating the time zone boundary in Indiana to move Starke,
+# From Paul Eggert (2014-06-26):
+# https://www.federalregister.gov/articles/2006/01/20/06-563/standard-time-zone-boundary-in-the-state-of-indiana
+# says "DOT is relocating the time zone boundary in Indiana to move Starke,
# Pulaski, Knox, Daviess, Martin, Pike, Dubois, and Perry Counties from the
# Eastern Time Zone to the Central Time Zone.... The effective date of
-# this rule is 2:OO a.m. EST Sunday, April 2, 2006, which is the
+# this rule is 2 a.m. EST Sunday, April 2, 2006, which is the
# changeover date from standard time to Daylight Saving Time."
-# Strictly speaking, this means the affected counties will change their
-# clocks twice that night, but this obviously is in error. The intent
-# is that 01:59:59 EST be followed by 02:00:00 CDT.
+# Strictly speaking, this meant the affected counties changed their
+# clocks twice that night, but this obviously was in error. The intent
+# was that 01:59:59 EST be followed by 02:00:00 CDT.
# From Gwillim Law (2007-02-10):
# The Associated Press has been reporting that Pulaski County, Indiana is
@@ -739,13 +734,13 @@
Rule Indianapolis 1941 1954 - Sep lastSun 2:00 0 S
Rule Indianapolis 1946 1954 - Apr lastSun 2:00 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
+Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
-6:00 US C%sT 1920
-6:00 Indianapolis C%sT 1942
-6:00 US C%sT 1946
- -6:00 Indianapolis C%sT 1955 Apr 24 2:00
- -5:00 - EST 1957 Sep 29 2:00
- -6:00 - CST 1958 Apr 27 2:00
+ -6:00 Indianapolis C%sT 1955 Apr 24 2:00
+ -5:00 - EST 1957 Sep 29 2:00
+ -6:00 - CST 1958 Apr 27 2:00
-5:00 - EST 1969
-5:00 US E%sT 1971
-5:00 - EST 2006
@@ -761,10 +756,10 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Indiana/Marengo -5:45:23 - LMT 1883 Nov 18 12:14:37
-6:00 US C%sT 1951
- -6:00 Marengo C%sT 1961 Apr 30 2:00
+ -6:00 Marengo C%sT 1961 Apr 30 2:00
-5:00 - EST 1969
- -5:00 US E%sT 1974 Jan 6 2:00
- -6:00 1:00 CDT 1974 Oct 27 2:00
+ -5:00 US E%sT 1974 Jan 6 2:00
+ -6:00 1:00 CDT 1974 Oct 27 2:00
-5:00 US E%sT 1976
-5:00 - EST 2006
-5:00 US E%sT
@@ -785,11 +780,11 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Indiana/Vincennes -5:50:07 - LMT 1883 Nov 18 12:09:53
-6:00 US C%sT 1946
- -6:00 Vincennes C%sT 1964 Apr 26 2:00
+ -6:00 Vincennes C%sT 1964 Apr 26 2:00
-5:00 - EST 1969
-5:00 US E%sT 1971
- -5:00 - EST 2006 Apr 2 2:00
- -6:00 US C%sT 2007 Nov 4 2:00
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT 2007 Nov 4 2:00
-5:00 US E%sT
#
# Perry County, Indiana, switched from eastern to central time in April 2006.
@@ -806,10 +801,10 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Indiana/Tell_City -5:47:03 - LMT 1883 Nov 18 12:12:57
-6:00 US C%sT 1946
- -6:00 Perry C%sT 1964 Apr 26 2:00
+ -6:00 Perry C%sT 1964 Apr 26 2:00
-5:00 - EST 1969
-5:00 US E%sT 1971
- -5:00 - EST 2006 Apr 2 2:00
+ -5:00 - EST 2006 Apr 2 2:00
-6:00 US C%sT
#
# Pike County, Indiana moved from central to eastern time in 1977,
@@ -822,11 +817,11 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Indiana/Petersburg -5:49:07 - LMT 1883 Nov 18 12:10:53
-6:00 US C%sT 1955
- -6:00 Pike C%sT 1965 Apr 25 2:00
- -5:00 - EST 1966 Oct 30 2:00
- -6:00 US C%sT 1977 Oct 30 2:00
- -5:00 - EST 2006 Apr 2 2:00
- -6:00 US C%sT 2007 Nov 4 2:00
+ -6:00 Pike C%sT 1965 Apr 25 2:00
+ -5:00 - EST 1966 Oct 30 2:00
+ -6:00 US C%sT 1977 Oct 30 2:00
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT 2007 Nov 4 2:00
-5:00 US E%sT
#
# Starke County, Indiana moved from central to eastern time in 1991,
@@ -844,10 +839,10 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Indiana/Knox -5:46:30 - LMT 1883 Nov 18 12:13:30
-6:00 US C%sT 1947
- -6:00 Starke C%sT 1962 Apr 29 2:00
- -5:00 - EST 1963 Oct 27 2:00
- -6:00 US C%sT 1991 Oct 27 2:00
- -5:00 - EST 2006 Apr 2 2:00
+ -6:00 Starke C%sT 1962 Apr 29 2:00
+ -5:00 - EST 1963 Oct 27 2:00
+ -6:00 US C%sT 1991 Oct 27 2:00
+ -5:00 - EST 2006 Apr 2 2:00
-6:00 US C%sT
#
# Pulaski County, Indiana, switched from eastern to central time in
@@ -860,17 +855,17 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Indiana/Winamac -5:46:25 - LMT 1883 Nov 18 12:13:35
-6:00 US C%sT 1946
- -6:00 Pulaski C%sT 1961 Apr 30 2:00
+ -6:00 Pulaski C%sT 1961 Apr 30 2:00
-5:00 - EST 1969
-5:00 US E%sT 1971
- -5:00 - EST 2006 Apr 2 2:00
- -6:00 US C%sT 2007 Mar 11 2:00
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT 2007 Mar 11 2:00
-5:00 US E%sT
#
# Switzerland County, Indiana, did not observe DST from 1973 through 2005.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Indiana/Vevay -5:40:16 - LMT 1883 Nov 18 12:19:44
- -6:00 US C%sT 1954 Apr 25 2:00
+ -6:00 US C%sT 1954 Apr 25 2:00
-5:00 - EST 1969
-5:00 US E%sT 1973
-5:00 - EST 2006
@@ -891,18 +886,17 @@
-6:00 US C%sT 1921
-6:00 Louisville C%sT 1942
-6:00 US C%sT 1946
- -6:00 Louisville C%sT 1961 Jul 23 2:00
+ -6:00 Louisville C%sT 1961 Jul 23 2:00
-5:00 - EST 1968
- -5:00 US E%sT 1974 Jan 6 2:00
- -6:00 1:00 CDT 1974 Oct 27 2:00
+ -5:00 US E%sT 1974 Jan 6 2:00
+ -6:00 1:00 CDT 1974 Oct 27 2:00
-5:00 US E%sT
#
# Wayne County, Kentucky
#
-# From
-# <a href="http://www.lake-cumberland.com/life/archive/news990129time.shtml">
-# Lake Cumberland LIFE
-# </a> (1999-01-29) via WKYM-101.7:
+# From Lake Cumberland LIFE
+# http://www.lake-cumberland.com/life/archive/news990129time.shtml
+# (1999-01-29) via WKYM-101.7:
# Clinton County has joined Wayne County in asking the DoT to change from
# the Central to the Eastern time zone.... The Wayne County government made
# the same request in December. And while Russell County officials have not
@@ -919,9 +913,8 @@
#
# From Paul Eggert (2001-07-16):
# The final rule was published in the
-# <a href="http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=2000_register&docid=fr17au00-22">
-# Federal Register 65, 160 (2000-08-17), page 50154-50158.
-# </a>
+# Federal Register 65, 160 (2000-08-17), pp 50154-50158.
+# http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=2000_register&docid=fr17au00-22
#
Zone America/Kentucky/Monticello -5:39:24 - LMT 1883 Nov 18 12:20:36
-6:00 US C%sT 1946
@@ -946,9 +939,8 @@
# See America/North_Dakota/Center for the Oliver County, ND change.
# West Wendover, NV officially switched from Pacific to mountain time on
# 1999-10-31. See the
-# <a href="http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=1999_register&docid=fr21oc99-15">
-# Federal Register 64, 203 (1999-10-21), page 56705-56707.
-# </a>
+# Federal Register 64, 203 (1999-10-21), pp 56705-56707.
+# http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=1999_register&docid=fr21oc99-15
# However, the Federal Register says that West Wendover already operated
# on mountain time, and the rule merely made this official;
# hence a separate tz entry is not needed.
@@ -986,12 +978,12 @@
Rule Detroit 1967 only - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Detroit -5:32:11 - LMT 1905
- -6:00 - CST 1915 May 15 2:00
+ -6:00 - CST 1915 May 15 2:00
-5:00 - EST 1942
-5:00 US E%sT 1946
-5:00 Detroit E%sT 1973
-5:00 US E%sT 1975
- -5:00 - EST 1975 Apr 27 2:00
+ -5:00 - EST 1975 Apr 27 2:00
-5:00 US E%sT
#
# Dickinson, Gogebic, Iron, and Menominee Counties, Michigan,
@@ -1004,8 +996,8 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
-6:00 US C%sT 1946
- -6:00 Menominee C%sT 1969 Apr 27 2:00
- -5:00 - EST 1973 Apr 29 2:00
+ -6:00 Menominee C%sT 1969 Apr 27 2:00
+ -5:00 - EST 1973 Apr 29 2:00
-6:00 US C%sT
# Navassa
@@ -1022,19 +1014,19 @@
################################################################################
-# From Paul Eggert (2006-03-22):
-# A good source for time zone historical data outside the U.S. is
+# From Paul Eggert (2014-10-31):
+#
+# Unless otherwise specified, the source for data through 1990 is:
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
# San Diego: ACS Publications, Inc. (2003).
+# Unfortunately this book contains many errors and cites no sources.
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
# Association's Standard Schedules Information Manual (IATA SSIM),
# published semiannually. Law sent in several helpful summaries
-# of the IATA's data after 1990.
-#
-# Except where otherwise noted, Shanks & Pottenger is the source for
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
+# of the IATA's data after 1990. Except where otherwise noted,
+# IATA SSIM is the source for entries after 1990.
#
# Other sources occasionally used include:
#
@@ -1042,9 +1034,9 @@
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated),
# which I found in the UCLA library.
#
-# <a href="http://www.pettswoodvillage.co.uk/Daylight_Savings_William_Willett.pdf">
# William Willett, The Waste of Daylight, 19th edition
-# </a> (1914-03)
+# <http://cs.ucla.edu/~eggert/The-Waste-of-Daylight-19th.pdf>
+# [PDF] (1914-03)
#
# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
# <http://www.jstor.org/stable/1774359>.
@@ -1053,11 +1045,11 @@
# Canada
-# From Alain LaBont<e'> (1994-11-14):
+# From Alain LaBonté (1994-11-14):
# I post here the time zone abbreviations standardized in Canada
# for both English and French in the CAN/CSA-Z234.4-89 standard....
#
-# UTC Standard time Daylight savings time
+# UTC Standard time Daylight saving time
# offset French English French English
# -2:30 - - HAT NDT
# -3 - - HAA ADT
@@ -1070,7 +1062,7 @@
# -9 HNY YST - -
#
# HN: Heure Normale ST: Standard Time
-# HA: Heure Avanc<e'>e DT: Daylight saving Time
+# HA: Heure Avancée DT: Daylight saving Time
#
# A: de l'Atlantique Atlantic
# C: du Centre Central
@@ -1085,7 +1077,7 @@
# From Paul Eggert (1994-11-22):
# Alas, this sort of thing must be handled by localization software.
-# Unless otherwise specified, the data for Canada are all from Shanks
+# Unless otherwise specified, the data entries for Canada are all from Shanks
# & Pottenger.
# From Chris Walton (2006-04-01, 2006-04-25, 2006-06-26, 2007-01-31,
@@ -1132,17 +1124,16 @@
# An amendment to the Interpretation Act was registered on February 19/2007....
# http://action.attavik.ca/home/justice-gn/attach/2007/gaz02part2.pdf
-# From Paul Eggert (2006-04-25):
+# From Paul Eggert (2014-10-18):
# H. David Matthews and Mary Vincent's map
-# <a href="http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp">
# "It's about TIME", _Canadian Geographic_ (September-October 1998)
-# </a> contains detailed boundaries for regions observing nonstandard
+# http://www.canadiangeographic.ca/Magazine/SO98/alacarte.asp
+# contains detailed boundaries for regions observing nonstandard
# time and daylight saving time arrangements in Canada circa 1998.
#
-# INMS, the Institute for National Measurement Standards in Ottawa, has <a
-# href="http://inms-ienm.nrc-cnrc.gc.ca/en/time_services/daylight_saving_e.php">
-# information about standard and daylight saving time zones in Canada.
-# </a> (updated periodically).
+# National Research Council Canada maintains info about time zones and DST.
+# http://www.nrc-cnrc.gc.ca/eng/services/time/time_zones.html
+# http://www.nrc-cnrc.gc.ca/eng/services/time/faq/index.html#Q5
# Its unofficial information is often taken from Matthews and Vincent.
# From Paul Eggert (2006-06-27):
@@ -1151,9 +1142,7 @@
# From Chris Walton (2011-12-01)
# In the first of Tammy Hardwick's articles
-# <a href="http://www.ilovecreston.com/?p=articles&t=spec&ar=260">
# http://www.ilovecreston.com/?p=articles&t=spec&ar=260
-# </a>
# she quotes the Friday November 1/1918 edition of the Creston Review.
# The quote includes these two statements:
# 'Sunday the CPR went back to the old system of time...'
@@ -1221,9 +1210,7 @@
# Time to Standard Time and from Standard Time to Daylight Savings Time
# now occurs at 2:00AM.
# ...
-# <a href="http://www.assembly.nl.ca/legislation/sr/annualstatutes/2011/1106.chp.htm">
# http://www.assembly.nl.ca/legislation/sr/annualstatutes/2011/1106.chp.htm
-# </a>
# ...
# MICHAEL PELLEY | Manager of Enterprise Architecture - Solution Delivery
# Office of the Chief Information Officer
@@ -1259,7 +1246,7 @@
-3:30 - NST 1936
-3:30 StJohns N%sT 1942 May 11
-3:30 Canada N%sT 1946
- -3:30 StJohns N%sT 1966 Mar 15 2:00
+ -3:30 StJohns N%sT 1966 Mar 15 2:00
-4:00 StJohns A%sT 2011 Nov
-4:00 Canada A%sT
@@ -1320,7 +1307,7 @@
Zone America/Halifax -4:14:24 - LMT 1902 Jun 15
-4:00 Halifax A%sT 1918
-4:00 Canada A%sT 1919
- -4:00 Halifax A%sT 1942 Feb 9 2:00s
+ -4:00 Halifax A%sT 1942 Feb 9 2:00s
-4:00 Canada A%sT 1946
-4:00 Halifax A%sT 1974
-4:00 Canada A%sT
@@ -1379,7 +1366,7 @@
# meridian is supposed to observe AST, but residents as far east as
# Natashquan use EST/EDT, and residents east of Natashquan use AST.
# The Quebec department of justice writes in
-# "The situation in Minganie and Basse-Cote-Nord"
+# "The situation in Minganie and Basse-Côte-Nord"
# http://www.justice.gouv.qc.ca/english/publications/generale/temps-minganie-a.htm
# that the coastal strip from just east of Natashquan to Blanc-Sablon
# observes Atlantic standard time all year round.
@@ -1387,7 +1374,6 @@
# says this common practice was codified into law as of 2007.
# For lack of better info, guess this practice began around 1970, contra to
# Shanks & Pottenger who have this region observing AST/ADT.
-# for post-1970 data America/Puerto_Rico.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Mont 1917 only - Mar 25 2:00 1:00 D
@@ -1401,18 +1387,10 @@
Rule Mont 1924 only - May 17 2:00 1:00 D
Rule Mont 1924 1926 - Sep lastSun 2:30 0 S
Rule Mont 1925 1926 - May Sun>=1 2:00 1:00 D
-# The 1927-to-1937 rules can be expressed more simply as
-# Rule Mont 1927 1937 - Apr lastSat 24:00 1:00 D
-# Rule Mont 1927 1937 - Sep lastSat 24:00 0 S
-# The rules below avoid use of 24:00
-# (which pre-1998 versions of zic cannot handle).
-Rule Mont 1927 only - May 1 0:00 1:00 D
-Rule Mont 1927 1932 - Sep lastSun 0:00 0 S
-Rule Mont 1928 1931 - Apr lastSun 0:00 1:00 D
-Rule Mont 1932 only - May 1 0:00 1:00 D
-Rule Mont 1933 1940 - Apr lastSun 0:00 1:00 D
-Rule Mont 1933 only - Oct 1 0:00 0 S
-Rule Mont 1934 1939 - Sep lastSun 0:00 0 S
+Rule Mont 1927 1937 - Apr lastSat 24:00 1:00 D
+Rule Mont 1927 1937 - Sep lastSat 24:00 0 S
+Rule Mont 1938 1940 - Apr lastSun 0:00 1:00 D
+Rule Mont 1938 1939 - Sep lastSun 0:00 0 S
Rule Mont 1946 1973 - Apr lastSun 2:00 1:00 D
Rule Mont 1945 1948 - Sep lastSun 2:00 0 S
Rule Mont 1949 1950 - Oct lastSun 2:00 0 S
@@ -1426,7 +1404,7 @@
Zone America/Montreal -4:54:16 - LMT 1884
-5:00 Mont E%sT 1918
-5:00 Canada E%sT 1919
- -5:00 Mont E%sT 1942 Feb 9 2:00s
+ -5:00 Mont E%sT 1942 Feb 9 2:00s
-5:00 Canada E%sT 1946
-5:00 Mont E%sT 1974
-5:00 Canada E%sT
@@ -1448,7 +1426,7 @@
# have already done so. In Orillia DST was to run until Saturday,
# 1912-08-31 (no time mentioned), but it was met with considerable
# hostility from certain segments of the public, and was revoked after
-# only two weeks -- I copied it as Saturday, 1912-07-07, 22:00, but
+# only two weeks - I copied it as Saturday, 1912-07-07, 22:00, but
# presumably that should be -07-06. (1912-06-19, -07-12; also letters
# earlier in June).
#
@@ -1458,10 +1436,8 @@
# Mark Brader writes that an article in the 1997-10-14 Toronto Star
# says that Atikokan, Ontario currently does not observe DST,
# but will vote on 11-10 whether to use EST/EDT.
-# He also writes that the
-# <a href="http://www.gov.on.ca/MBS/english/publications/statregs/conttext.html">
-# Ontario Time Act (1990, Chapter T.9)
-# </a>
+# He also writes that the Ontario Time Act (1990, Chapter T.9)
+# http://www.gov.on.ca/MBS/english/publications/statregs/conttext.html
# says that Ontario east of 90W uses EST/EDT, and west of 90W uses CST/CDT.
# Officially Atikokan is therefore on CST/CDT, and most likely this report
# concerns a non-official time observed as a matter of local practice.
@@ -1540,9 +1516,7 @@
# The Journal of The Royal Astronomical Society of Canada,
# volume 26, number 2 (February 1932) and, as of 2010-07-17,
# was available at
-# <a href="http://adsabs.harvard.edu/full/1932JRASC..26...49S">
# http://adsabs.harvard.edu/full/1932JRASC..26...49S
-# </a>
#
# It includes the text below (starting on page 57):
#
@@ -1553,26 +1527,26 @@
# ing in 1930. The information for the province of Quebec is definite,
# for the other provinces only approximate:
#
-# Province Daylight saving time used
+# Province Daylight saving time used
# Prince Edward Island Not used.
# Nova Scotia In Halifax only.
# New Brunswick In St. John only.
# Quebec In the following places:
-# Montreal Lachine
-# Quebec Mont-Royal
-# Levis Iberville
-# St. Lambert Cap de la Madeleine
-# Verdun Loretteville
-# Westmount Richmond
-# Outremont St. Jerome
-# Longueuil Greenfield Park
-# Arvida Waterloo
-# Chambly-Canton Beaulieu
-# Melbourne La Tuque
-# St. Theophile Buckingham
+# Montreal Lachine
+# Quebec Mont-Royal
+# Lévis Iberville
+# St. Lambert Cap de la Madelèine
+# Verdun Loretteville
+# Westmount Richmond
+# Outremont St. Jérôme
+# Longueuil Greenfield Park
+# Arvida Waterloo
+# Chambly-Canton Beaulieu
+# Melbourne La Tuque
+# St. Théophile Buckingham
# Ontario Used generally in the cities and towns along
-# the southerly part of the province. Not
-# used in the northwesterlhy part.
+# the southerly part of the province. Not
+# used in the northwesterly part.
# Manitoba Not used.
# Saskatchewan In Regina only.
# Alberta Not used.
@@ -1641,7 +1615,7 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Toronto -5:17:32 - LMT 1895
-5:00 Canada E%sT 1919
- -5:00 Toronto E%sT 1942 Feb 9 2:00s
+ -5:00 Toronto E%sT 1942 Feb 9 2:00s
-5:00 Canada E%sT 1946
-5:00 Toronto E%sT 1974
-5:00 Canada E%sT
@@ -1654,16 +1628,16 @@
-5:00 Canada E%sT
Zone America/Nipigon -5:53:04 - LMT 1895
-5:00 Canada E%sT 1940 Sep 29
- -5:00 1:00 EDT 1942 Feb 9 2:00s
+ -5:00 1:00 EDT 1942 Feb 9 2:00s
-5:00 Canada E%sT
Zone America/Rainy_River -6:18:16 - LMT 1895
-6:00 Canada C%sT 1940 Sep 29
- -6:00 1:00 CDT 1942 Feb 9 2:00s
+ -6:00 1:00 CDT 1942 Feb 9 2:00s
-6:00 Canada C%sT
Zone America/Atikokan -6:06:28 - LMT 1895
-6:00 Canada C%sT 1940 Sep 29
- -6:00 1:00 CDT 1942 Feb 9 2:00s
- -6:00 Canada C%sT 1945 Sep 30 2:00
+ -6:00 1:00 CDT 1942 Feb 9 2:00s
+ -6:00 Canada C%sT 1945 Sep 30 2:00
-5:00 - EST
@@ -1676,7 +1650,7 @@
# the first Sunday of April of each year and two o'clock Central
# Standard Time in the morning of the last Sunday of October next
# following, one hour in advance of Central Standard Time."...
-# I believe that the English legislation [of the old time act] had =
+# I believe that the English legislation [of the old time act] had
# been assented to (March 22, 1967)....
# Also, as far as I can tell, there was no order-in-council varying
# the time of Daylight Saving Time for 2005 and so the provisions of
@@ -1799,12 +1773,12 @@
Rule Swift 1960 1961 - Sep lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Regina -6:58:36 - LMT 1905 Sep
- -7:00 Regina M%sT 1960 Apr lastSun 2:00
+ -7:00 Regina M%sT 1960 Apr lastSun 2:00
-6:00 - CST
Zone America/Swift_Current -7:11:20 - LMT 1905 Sep
- -7:00 Canada M%sT 1946 Apr lastSun 2:00
+ -7:00 Canada M%sT 1946 Apr lastSun 2:00
-7:00 Regina M%sT 1950
- -7:00 Swift M%sT 1972 Apr lastSun 2:00
+ -7:00 Swift M%sT 1972 Apr lastSun 2:00
-6:00 - CST
@@ -1854,9 +1828,7 @@
# Earlier this year I stumbled across a detailed article about the time
# keeping history of Creston; it was written by Tammy Hardwick who is the
# manager of the Creston & District Museum. The article was written in May 2009.
-# <a href="http://www.ilovecreston.com/?p=articles&t=spec&ar=260">
# http://www.ilovecreston.com/?p=articles&t=spec&ar=260
-# </a>
# According to the article, Creston has not changed its clocks since June 1918.
# i.e. Creston has been stuck on UTC-7 for 93 years.
# Dawson Creek, on the other hand, changed its clocks as recently as April 1972.
@@ -1864,18 +1836,16 @@
# Unfortunately the exact date for the time change in June 1918 remains
# unknown and will be difficult to ascertain. I e-mailed Tammy a few months
# ago to ask if Sunday June 2 was a reasonable guess. She said it was just
-# as plausible as any other date (in June). She also said that after writing the
-# article she had discovered another time change in 1916; this is the subject
-# of another article which she wrote in October 2010.
-# <a href="http://www.creston.museum.bc.ca/index.php?module=comments&uop=view_comment&cm+id=56">
+# as plausible as any other date (in June). She also said that after writing
+# the article she had discovered another time change in 1916; this is the
+# subject of another article which she wrote in October 2010.
# http://www.creston.museum.bc.ca/index.php?module=comments&uop=view_comment&cm+id=56
-# </a>
# Here is a summary of the three clock change events in Creston's history:
# 1. 1884 or 1885: adoption of Mountain Standard Time (GMT-7)
# Exact date unknown
# 2. Oct 1916: switch to Pacific Standard Time (GMT-8)
-# Exact date in October unknown; Sunday October 1 is a reasonable guess.
+# Exact date in October unknown; Sunday October 1 is a reasonable guess.
# 3. June 1918: switch to Pacific Daylight Time (GMT-7)
# Exact date in June unknown; Sunday June 2 is a reasonable guess.
# note#1:
@@ -1888,9 +1858,7 @@
# There is no guarantee that Creston will remain on Mountain Standard Time
# (UTC-7) forever.
# The subject was debated at least once this year by the town Council.
-# <a href="http://www.bclocalnews.com/kootenay_rockies/crestonvalleyadvance/news/116760809.html">
# http://www.bclocalnews.com/kootenay_rockies/crestonvalleyadvance/news/116760809.html
-# </a>
# During a period WWII, summer time (Daylight saying) was mandatory in Canada.
# In Creston, that was handled by shifting the area to PST (-8:00) then applying
@@ -1917,7 +1885,7 @@
-8:00 Canada P%sT
Zone America/Dawson_Creek -8:00:56 - LMT 1884
-8:00 Canada P%sT 1947
- -8:00 Vanc P%sT 1972 Aug 30 2:00
+ -8:00 Vanc P%sT 1972 Aug 30 2:00
-7:00 - MST
Zone America/Creston -7:46:04 - LMT 1884
-7:00 - MST 1916 Oct 1
@@ -1944,18 +1912,17 @@
# From Rives McDow (1999-09-04):
# Nunavut ... moved ... to incorporate the whole territory into one time zone.
-# <a href="http://www.nunatsiaq.com/nunavut/nvt90903_13.html">
# Nunavut moves to single time zone Oct. 31
-# </a>
+# http://www.nunatsiaq.com/nunavut/nvt90903_13.html
#
# From Antoine Leca (1999-09-06):
# We then need to create a new timezone for the Kitikmeot region of Nunavut
# to differentiate it from the Yellowknife region.
# From Paul Eggert (1999-09-20):
-# <a href="http://www.nunavut.com/basicfacts/english/basicfacts_1territory.html">
# Basic Facts: The New Territory
-# </a> (1999) reports that Pangnirtung operates on eastern time,
+# http://www.nunavut.com/basicfacts/english/basicfacts_1territory.html
+# (1999) reports that Pangnirtung operates on eastern time,
# and that Coral Harbour does not observe DST. We don't know when
# Pangnirtung switched to eastern time; we'll guess 1995.
@@ -1983,8 +1950,8 @@
# the current state of affairs.
# From Michaela Rodrigue, writing in the
-# <a href="http://www.nunatsiaq.com/archives/nunavut991130/nvt91119_17.html">
-# Nunatsiaq News (1999-11-19)</a>:
+# Nunatsiaq News (1999-11-19):
+# http://www.nunatsiaq.com/archives/nunavut991130/nvt91119_17.html
# Clyde River, Pangnirtung and Sanikiluaq now operate with two time zones,
# central - or Nunavut time - for government offices, and eastern time
# for municipal offices and schools.... Igloolik [was similar but then]
@@ -2002,10 +1969,8 @@
# Central Time and Southampton Island [in the Central zone] is not
# required to use daylight savings.
-# From
-# <a href="http://www.nunatsiaq.com/archives/nunavut001130/nvt21110_02.html">
-# Nunavut now has two time zones
-# </a> (2000-11-10):
+# From <http://www.nunatsiaq.com/archives/nunavut001130/nvt21110_02.html>
+# Nunavut now has two time zones (2000-11-10):
# The Nunavut government would allow its employees in Kugluktuk and
# Cambridge Bay to operate on central time year-round, putting them
# one hour behind the rest of Nunavut for six months during the winter.
@@ -2033,10 +1998,7 @@
# [Also see <http://www.nunatsiaq.com/nunavut/nvt10309_06.html> (2001-03-09).]
# From Gwillim Law (2005-05-21):
-# According to maps at
-# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SWE.jpg
-# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SSE.jpg
-# (both dated 2003), and
+# According to ...
# http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp
# (from a 1998 Canadian Geographic article), the de facto and de jure time
# for Southampton Island (at the north end of Hudson Bay) is UTC-5 all year
@@ -2045,9 +2007,11 @@
# predates the creation of Nunavut, it probably goes back many years....
# The Inuktitut name of Coral Harbour is Sallit, but it's rarely used.
#
-# From Paul Eggert (2005-07-26):
+# From Paul Eggert (2014-10-17):
# For lack of better information, assume that Southampton Island observed
-# daylight saving only during wartime.
+# daylight saving only during wartime. Gwillim Law's email also
+# mentioned maps now maintained by National Research Council Canada;
+# see above for an up-to-date link.
# From Chris Walton (2007-03-01):
# ... the community of Resolute (located on Cornwallis Island in
@@ -2096,9 +2060,7 @@
# used to be the mayor of Resolute Bay and he apparently owns half the
# businesses including "South Camp Inn." This website has some info on
# Aziz:
-# <a href="http://www.uphere.ca/node/493">
# http://www.uphere.ca/node/493
-# </a>
#
# I sent Aziz an e-mail asking when Resolute Bay had stopped using
# Eastern Standard Time.
@@ -2136,47 +2098,47 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
# aka Panniqtuuq
Zone America/Pangnirtung 0 - zzz 1921 # trading post est.
- -4:00 NT_YK A%sT 1995 Apr Sun>=1 2:00
- -5:00 Canada E%sT 1999 Oct 31 2:00
- -6:00 Canada C%sT 2000 Oct 29 2:00
+ -4:00 NT_YK A%sT 1995 Apr Sun>=1 2:00
+ -5:00 Canada E%sT 1999 Oct 31 2:00
+ -6:00 Canada C%sT 2000 Oct 29 2:00
-5:00 Canada E%sT
# formerly Frobisher Bay
Zone America/Iqaluit 0 - zzz 1942 Aug # Frobisher Bay est.
- -5:00 NT_YK E%sT 1999 Oct 31 2:00
- -6:00 Canada C%sT 2000 Oct 29 2:00
+ -5:00 NT_YK E%sT 1999 Oct 31 2:00
+ -6:00 Canada C%sT 2000 Oct 29 2:00
-5:00 Canada E%sT
# aka Qausuittuq
Zone America/Resolute 0 - zzz 1947 Aug 31 # Resolute founded
- -6:00 NT_YK C%sT 2000 Oct 29 2:00
- -5:00 - EST 2001 Apr 1 3:00
- -6:00 Canada C%sT 2006 Oct 29 2:00
- -5:00 - EST 2007 Mar 11 3:00
+ -6:00 NT_YK C%sT 2000 Oct 29 2:00
+ -5:00 - EST 2001 Apr 1 3:00
+ -6:00 Canada C%sT 2006 Oct 29 2:00
+ -5:00 - EST 2007 Mar 11 3:00
-6:00 Canada C%sT
# aka Kangiqiniq
Zone America/Rankin_Inlet 0 - zzz 1957 # Rankin Inlet founded
- -6:00 NT_YK C%sT 2000 Oct 29 2:00
- -5:00 - EST 2001 Apr 1 3:00
+ -6:00 NT_YK C%sT 2000 Oct 29 2:00
+ -5:00 - EST 2001 Apr 1 3:00
-6:00 Canada C%sT
# aka Iqaluktuuttiaq
Zone America/Cambridge_Bay 0 - zzz 1920 # trading post est.?
- -7:00 NT_YK M%sT 1999 Oct 31 2:00
- -6:00 Canada C%sT 2000 Oct 29 2:00
- -5:00 - EST 2000 Nov 5 0:00
- -6:00 - CST 2001 Apr 1 3:00
+ -7:00 NT_YK M%sT 1999 Oct 31 2:00
+ -6:00 Canada C%sT 2000 Oct 29 2:00
+ -5:00 - EST 2000 Nov 5 0:00
+ -6:00 - CST 2001 Apr 1 3:00
-7:00 Canada M%sT
Zone America/Yellowknife 0 - zzz 1935 # Yellowknife founded?
-7:00 NT_YK M%sT 1980
-7:00 Canada M%sT
Zone America/Inuvik 0 - zzz 1953 # Inuvik founded
- -8:00 NT_YK P%sT 1979 Apr lastSun 2:00
+ -8:00 NT_YK P%sT 1979 Apr lastSun 2:00
-7:00 NT_YK M%sT 1980
-7:00 Canada M%sT
Zone America/Whitehorse -9:00:12 - LMT 1900 Aug 20
- -9:00 NT_YK Y%sT 1966 Jul 1 2:00
+ -9:00 NT_YK Y%sT 1966 Jul 1 2:00
-8:00 NT_YK P%sT 1980
-8:00 Canada P%sT
Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
- -9:00 NT_YK Y%sT 1973 Oct 28 0:00
+ -9:00 NT_YK Y%sT 1973 Oct 28 0:00
-8:00 NT_YK P%sT 1980
-8:00 Canada P%sT
@@ -2188,9 +2150,8 @@
# From Paul Eggert (2001-03-05):
# The Investigation and Analysis Service of the
# Mexican Library of Congress (MLoC) has published a
-# <a href="http://www.cddhcu.gob.mx/bibliot/publica/inveyana/polisoc/horver/">
# history of Mexican local time (in Spanish)
-# </a>.
+# http://www.cddhcu.gob.mx/bibliot/publica/inveyana/polisoc/horver/
#
# Here are the discrepancies between Shanks & Pottenger (S&P) and the MLoC.
# (In all cases we go with the MLoC.)
@@ -2235,9 +2196,8 @@
# -------------- End Forwarded Message --------------
# From Paul Eggert (1996-06-12):
# For an English translation of the decree, see
-# <a href="http://mexico-travel.com/extra/timezone_eng.html">
# "Diario Oficial: Time Zone Changeover" (1996-01-04).
-# </a>
+# http://mexico-travel.com/extra/timezone_eng.html
# From Rives McDow (1998-10-08):
# The State of Quintana Roo has reverted back to central STD and DST times
@@ -2249,7 +2209,7 @@
# savings time so as to stay on the same time zone as the southern part of
# Arizona year round.
-# From Jesper Norgaard, translating
+# From Jesper Nørgaard, translating
# <http://www.reforma.com/nacional/articulo/064327/> (2001-01-17):
# In Oaxaca, the 55.000 teachers from the Section 22 of the National
# Syndicate of Education Workers, refuse to apply daylight saving each
@@ -2262,7 +2222,7 @@
# January 17, 2000 - The Energy Secretary, Ernesto Martens, announced
# that Summer Time will be reduced from seven to five months, starting
# this year....
-# <http://www.publico.com.mx/scripts/texto3.asp?action=pagina&pag=21&pos=p&secc=naci&date=01/17/2001>
+# http://www.publico.com.mx/scripts/texto3.asp?action=pagina&pag=21&pos=p&secc=naci&date=01/17/2001
# [translated], says "summer time will ... take effect on the first Sunday
# in May, and end on the last Sunday of September.
@@ -2270,23 +2230,22 @@
# The 2001-01-24 traditional Washington Post contained the page one
# story "Timely Issue Divides Mexicans."...
# http://www.washingtonpost.com/wp-dyn/articles/A37383-2001Jan23.html
-# ... Mexico City Mayor Lopez Obrador "...is threatening to keep
+# ... Mexico City Mayor López Obrador "...is threatening to keep
# Mexico City and its 20 million residents on a different time than
-# the rest of the country..." In particular, Lopez Obrador would abolish
+# the rest of the country..." In particular, López Obrador would abolish
# observation of Daylight Saving Time.
-# <a href="http://www.conae.gob.mx/ahorro/decretohorver2001.html#decre">
# Official statute published by the Energy Department
-# </a> (2001-02-01) shows Baja and Chihauhua as still using US DST rules,
-# and Sonora with no DST. This was reported by Jesper Norgaard (2001-02-03).
+# http://www.conae.gob.mx/ahorro/decretohorver2001.html#decre
+# (2001-02-01) shows Baja and Chihauhua as still using US DST rules,
+# and Sonora with no DST. This was reported by Jesper Nørgaard (2001-02-03).
# From Paul Eggert (2001-03-03):
#
-# <a href="http://www.latimes.com/news/nation/20010303/t000018766.html">
+# http://www.latimes.com/news/nation/20010303/t000018766.html
# James F. Smith writes in today's LA Times
-# </a>
# * Sonora will continue to observe standard time.
-# * Last week Mexico City's mayor Andres Manuel Lopez Obrador decreed that
+# * Last week Mexico City's mayor Andrés Manuel López Obrador decreed that
# the Federal District will not adopt DST.
# * 4 of 16 district leaders announced they'll ignore the decree.
# * The decree does not affect federal-controlled facilities including
@@ -2294,7 +2253,7 @@
#
# For now we'll assume that the Federal District will bow to federal rules.
-# From Jesper Norgaard (2001-04-01):
+# From Jesper Nørgaard (2001-04-01):
# I found some references to the Mexican application of daylight
# saving, which modifies what I had already sent you, stating earlier
# that a number of northern Mexican states would go on daylight
@@ -2303,7 +2262,7 @@
# saving all year) will follow the original decree of president
# Vicente Fox, starting daylight saving May 6, 2001 and ending
# September 30, 2001.
-# References: "Diario de Monterrey" <www.diariodemonterrey.com/index.asp>
+# References: "Diario de Monterrey" <http://www.diariodemonterrey.com/index.asp>
# Palabra <http://palabra.infosel.com/010331/primera/ppri3101.pdf> (2001-03-31)
# From Reuters (2001-09-04):
@@ -2315,7 +2274,7 @@
# standard time. "This is so residents of the Federal District are not
# subject to unexpected time changes," a statement from the court said.
-# From Jesper Norgaard Welen (2002-03-12):
+# From Jesper Nørgaard Welen (2002-03-12):
# ... consulting my local grocery store(!) and my coworkers, they all insisted
# that a new decision had been made to reinstate US style DST in Mexico....
# http://www.conae.gob.mx/ahorro/horaver2001_m1_2002.html (2002-02-20)
@@ -2329,48 +2288,36 @@
# > the United States.
# Now this has passed both the Congress and the Senate, so starting from
# 2010, some border regions will be the same:
-# <a href="http://www.signonsandiego.com/news/2009/dec/28/clocks-will-match-both-sides-border/">
# http://www.signonsandiego.com/news/2009/dec/28/clocks-will-match-both-sides-border/
-# </a>
-# <a href="http://www.elmananarey.com/diario/noticia/nacional/noticias/empatan_horario_de_frontera_con_eu/621939">
# http://www.elmananarey.com/diario/noticia/nacional/noticias/empatan_horario_de_frontera_con_eu/621939
-# </a>
# (Spanish)
#
# Could not find the new law text, but the proposed law text changes are here:
-# <a href="http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/20091210-V.pdf">
# http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/20091210-V.pdf
-# </a>
# (Gaceta Parlamentaria)
#
# There is also a list of the votes here:
-# <a href="http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/V2-101209.html">
# http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/V2-101209.html
-# </a>
#
# Our page:
-# <a href="http://www.timeanddate.com/news/time/north-mexico-dst-change.html">
# http://www.timeanddate.com/news/time/north-mexico-dst-change.html
-# </a>
# From Arthur David Olson (2010-01-20):
# The page
-# <a href="http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010">
# http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010
-# </a>
# includes this text:
# En los municipios fronterizos de Tijuana y Mexicali en Baja California;
-# Ju&aacute;rez y Ojinaga en Chihuahua; Acu&ntilde;a y Piedras Negras en Coahuila;
-# An&aacute;huac en Nuevo Le&oacute;n; y Nuevo Laredo, Reynosa y Matamoros en
-# Tamaulipas, la aplicaci&oacute;n de este horario estacional surtir&aacute; efecto
-# desde las dos horas del segundo domingo de marzo y concluir&aacute; a las dos
+# Juárez y Ojinaga en Chihuahua; Acuña y Piedras Negras en Coahuila;
+# Anáhuac en Nuevo León; y Nuevo Laredo, Reynosa y Matamoros en
+# Tamaulipas, la aplicación de este horario estacional surtirá efecto
+# desde las dos horas del segundo domingo de marzo y concluirá a las dos
# horas del primer domingo de noviembre.
# En los municipios fronterizos que se encuentren ubicados en la franja
-# fronteriza norte en el territorio comprendido entre la l&iacute;nea
-# internacional y la l&iacute;nea paralela ubicada a una distancia de veinte
-# kil&oacute;metros, as&iacute; como la Ciudad de Ensenada, Baja California, hacia el
-# interior del pa&iacute;s, la aplicaci&oacute;n de este horario estacional surtir&aacute;
-# efecto desde las dos horas del segundo domingo de marzo y concluir&aacute; a
+# fronteriza norte en el territorio comprendido entre la línea
+# internacional y la línea paralela ubicada a una distancia de veinte
+# kilómetros, así como la Ciudad de Ensenada, Baja California, hacia el
+# interior del país, la aplicación de este horario estacional surtirá
+# efecto desde las dos horas del segundo domingo de marzo y concluirá a
# las dos horas del primer domingo de noviembre.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -2389,39 +2336,39 @@
Rule Mexico 2002 max - Apr Sun>=1 2:00 1:00 D
Rule Mexico 2002 max - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-# Quintana Roo
+# Quintana Roo; represented by Cancún
Zone America/Cancun -5:47:04 - LMT 1922 Jan 1 0:12:56
-6:00 - CST 1981 Dec 23
-5:00 Mexico E%sT 1998 Aug 2 2:00
-6:00 Mexico C%sT
-# Campeche, Yucatan
+# Campeche, Yucatán; represented by Mérida
Zone America/Merida -5:58:28 - LMT 1922 Jan 1 0:01:32
-6:00 - CST 1981 Dec 23
-5:00 - EST 1982 Dec 2
-6:00 Mexico C%sT
-# Coahuila, Durango, Nuevo Leon, Tamaulipas (near US border)
+# Coahuila, Durango, Nuevo León, Tamaulipas (near US border)
Zone America/Matamoros -6:40:00 - LMT 1921 Dec 31 23:20:00
-6:00 - CST 1988
-6:00 US C%sT 1989
-6:00 Mexico C%sT 2010
-6:00 US C%sT
-# Coahuila, Durango, Nuevo Leon, Tamaulipas (away from US border)
+# Coahuila, Durango, Nuevo León, Tamaulipas (away from US border)
Zone America/Monterrey -6:41:16 - LMT 1921 Dec 31 23:18:44
-6:00 - CST 1988
-6:00 US C%sT 1989
-6:00 Mexico C%sT
# Central Mexico
-Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 0:23:24
+Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 0:23:24
-7:00 - MST 1927 Jun 10 23:00
-6:00 - CST 1930 Nov 15
-7:00 - MST 1931 May 1 23:00
-6:00 - CST 1931 Oct
-7:00 - MST 1932 Apr 1
- -6:00 Mexico C%sT 2001 Sep 30 02:00
+ -6:00 Mexico C%sT 2001 Sep 30 2:00
-6:00 - CST 2002 Feb 20
-6:00 Mexico C%sT
# Chihuahua (near US border)
-Zone America/Ojinaga -6:57:40 - LMT 1922 Jan 1 0:02:20
+Zone America/Ojinaga -6:57:40 - LMT 1922 Jan 1 0:02:20
-7:00 - MST 1927 Jun 10 23:00
-6:00 - CST 1930 Nov 15
-7:00 - MST 1931 May 1 23:00
@@ -2429,7 +2376,7 @@
-7:00 - MST 1932 Apr 1
-6:00 - CST 1996
-6:00 Mexico C%sT 1998
- -6:00 - CST 1998 Apr Sun>=1 3:00
+ -6:00 - CST 1998 Apr Sun>=1 3:00
-7:00 Mexico M%sT 2010
-7:00 US M%sT
# Chihuahua (away from US border)
@@ -2441,7 +2388,7 @@
-7:00 - MST 1932 Apr 1
-6:00 - CST 1996
-6:00 Mexico C%sT 1998
- -6:00 - CST 1998 Apr Sun>=1 3:00
+ -6:00 - CST 1998 Apr Sun>=1 3:00
-7:00 Mexico M%sT
# Sonora
Zone America/Hermosillo -7:23:52 - LMT 1921 Dec 31 23:36:08
@@ -2457,42 +2404,33 @@
-7:00 - MST
# From Alexander Krivenyshev (2010-04-21):
-# According to news, Bah&iacute;a de Banderas (Mexican state of Nayarit)
+# According to news, Bahía de Banderas (Mexican state of Nayarit)
# changed time zone UTC-7 to new time zone UTC-6 on April 4, 2010 (to
# share the same time zone as nearby city Puerto Vallarta, Jalisco).
#
# (Spanish)
-# Bah&iacute;a de Banderas homologa su horario al del centro del
-# pa&iacute;s, a partir de este domingo
-# <a href="http://www.nayarit.gob.mx/notes.asp?id=20748">
+# Bahía de Banderas homologa su horario al del centro del
+# país, a partir de este domingo
# http://www.nayarit.gob.mx/notes.asp?id=20748
-# </a>
#
-# Bah&iacute;a de Banderas homologa su horario con el del Centro del
-# Pa&iacute;s
-# <a href="http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50">
-# http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50"
-# </a>
+# Bahía de Banderas homologa su horario con el del Centro del
+# País
+# http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50
#
# (English)
-# Puerto Vallarta and Bah&iacute;a de Banderas: One Time Zone
-# <a href="http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml">
+# Puerto Vallarta and Bahía de Banderas: One Time Zone
# http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml
-# </a>
-#
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_mexico08.html">
# http://www.worldtimezone.com/dst_news/dst_news_mexico08.html
-# </a>
#
# "Mexico's Senate approved the amendments to the Mexican Schedule System that
-# will allow Bah&iacute;a de Banderas and Puerto Vallarta to share the same time
+# will allow Bahía de Banderas and Puerto Vallarta to share the same time
# zone ..."
# Baja California Sur, Nayarit, Sinaloa
# From Arthur David Olson (2010-05-01):
# Use "Bahia_Banderas" to keep the name to fourteen characters.
+# Mazatlán
Zone America/Mazatlan -7:05:40 - LMT 1921 Dec 31 23:54:20
-7:00 - MST 1927 Jun 10 23:00
-6:00 - CST 1930 Nov 15
@@ -2504,6 +2442,7 @@
-8:00 - PST 1970
-7:00 Mexico M%sT
+# Bahía de Banderas
Zone America/Bahia_Banderas -7:01:00 - LMT 1921 Dec 31 23:59:00
-7:00 - MST 1927 Jun 10 23:00
-6:00 - CST 1930 Nov 15
@@ -2513,7 +2452,7 @@
-6:00 - CST 1942 Apr 24
-7:00 - MST 1949 Jan 14
-8:00 - PST 1970
- -7:00 Mexico M%sT 2010 Apr 4 2:00
+ -7:00 Mexico M%sT 2010 Apr 4 2:00
-6:00 Mexico C%sT
# Baja California (near US border)
@@ -2560,7 +2499,7 @@
# America/Tijuana only in that it did not observe DST from 1976
# through 1995. This was as per Shanks (1999). But Shanks & Pottenger say
# Ensenada did not observe DST from 1948 through 1975. Guy Harris reports
-# that the 1987 OAG says "Only Ensenada, Mexicale, San Felipe and
+# that the 1987 OAG says "Only Ensenada, Mexicali, San Felipe and
# Tijuana observe DST," which agrees with Shanks & Pottenger but implies that
# DST-observance was a town-by-town matter back then. This concerns
# data after 1970 so most likely there should be at least one Zone
@@ -2573,7 +2512,7 @@
###############################################################################
# Anguilla
-# See 'southamerica'.
+# See America/Port_of_Spain.
# Antigua and Barbuda
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -2609,8 +2548,8 @@
Rule Barb 1979 only - Sep 30 2:00 0 S
Rule Barb 1980 only - Sep 25 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Barbados -3:58:29 - LMT 1924 # Bridgetown
- -3:58:29 - BMT 1932 # Bridgetown Mean Time
+Zone America/Barbados -3:58:29 - LMT 1924 # Bridgetown
+ -3:58:29 - BMT 1932 # Bridgetown Mean Time
-4:00 Barb A%sT
# Belize
@@ -2640,20 +2579,20 @@
# http://www.theroyalgazette.com/apps/pbcs.dll/article?AID=/20060529/NEWS/105290135
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Atlantic/Bermuda -4:19:18 - LMT 1930 Jan 1 2:00 # Hamilton
- -4:00 - AST 1974 Apr 28 2:00
+Zone Atlantic/Bermuda -4:19:18 - LMT 1930 Jan 1 2:00 # Hamilton
+ -4:00 - AST 1974 Apr 28 2:00
-4:00 Canada A%sT 1976
-4:00 US A%sT
# Cayman Is
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown
- -5:07:11 - KMT 1912 Feb # Kingston Mean Time
+Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown
+ -5:07:11 - KMT 1912 Feb # Kingston Mean Time
-5:00 - EST
# Costa Rica
-# Milne gives -5:36:13.3 as San Jose mean time; round to nearest.
+# Milne gives -5:36:13.3 as San José mean time; round to nearest.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule CR 1979 1980 - Feb lastSun 0:00 1:00 D
@@ -2663,10 +2602,10 @@
# go with Shanks & Pottenger.
Rule CR 1991 only - Jul 1 0:00 0 S
Rule CR 1992 only - Mar 15 0:00 0 S
-# There are too many San Joses elsewhere, so we'll use 'Costa Rica'.
+# There are too many San Josés elsewhere, so we'll use 'Costa Rica'.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Costa_Rica -5:36:13 - LMT 1890 # San Jose
- -5:36:13 - SJMT 1921 Jan 15 # San Jose Mean Time
+Zone America/Costa_Rica -5:36:13 - LMT 1890 # San José
+ -5:36:13 - SJMT 1921 Jan 15 # San José Mean Time
-6:00 CR C%sT
# Coco
# no information; probably like America/Costa_Rica
@@ -2685,8 +2624,8 @@
# During the game, play-by-play announcer Jim Hunter noted that
# "We'll be losing two hours of sleep...Cuba switched to Daylight Saving
# Time today." (The "two hour" remark referred to losing one hour of
-# sleep on 1999-03-28--when the announcers were in Cuba as it switched
-# to DST--and one more hour on 1999-04-04--when the announcers will have
+# sleep on 1999-03-28 - when the announcers were in Cuba as it switched
+# 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):
@@ -2708,16 +2647,16 @@
# adjustment in Cuba. We will stay in daylight saving time:
# http://www.granma.cu/espanol/2005/noviembre/mier9/horario.html
-# From Jesper Norgaard Welen (2006-10-21):
+# From Jesper Nørgaard Welen (2006-10-21):
# An article in GRANMA INTERNACIONAL claims that Cuba will end
# the 3 years of permanent DST next weekend, see
# http://www.granma.cu/ingles/2006/octubre/lun16/43horario.html
# "On Saturday night, October 28 going into Sunday, October 29, at 01:00,
-# watches should be set back one hour -- going back to 00:00 hours -- returning
+# watches should be set back one hour - going back to 00:00 hours - returning
# to the normal schedule....
# From Paul Eggert (2007-03-02):
-# http://www.granma.cubaweb.cu/english/news/art89.html, dated yesterday,
+# <http://www.granma.cubaweb.cu/english/news/art89.html>, dated yesterday,
# says Cuban clocks will advance at midnight on March 10.
# For lack of better information, assume Cuba will use US rules,
# except that it switches at midnight standard time as usual.
@@ -2731,10 +2670,10 @@
# http://www.prensalatina.com.mx/article.asp?ID=%7B4CC32C1B-A9F7-42FB-8A07-8631AFC923AF%7D&language=ES
# http://actualidad.terra.es/sociedad/articulo/cuba_llama_ahorrar_energia_cambio_1957044.htm
#
-# From Alex Kryvenishev (2007-10-25):
+# From Alex Krivenyshev (2007-10-25):
# Here is also article from Granma (Cuba):
#
-# [Regira] el Horario Normal desde el [proximo] domingo 28 de octubre
+# Regirá el Horario Normal desde el próximo domingo 28 de octubre
# http://www.granma.cubaweb.cu/2007/10/24/nacional/artic07.html
#
# http://www.worldtimezone.com/dst_news/dst_news_cuba03.html
@@ -2742,23 +2681,18 @@
# From Arthur David Olson (2008-03-09):
# I'm in Maryland which is now observing United States Eastern Daylight
# Time. At 9:44 local time I used RealPlayer to listen to
-# <a href="http://media.enet.cu/radioreloj">
# http://media.enet.cu/radioreloj
-# </a>, a Cuban information station, and heard
+# a Cuban information station, and heard
# the time announced as "ocho cuarenta y cuatro" ("eight forty-four"),
# indicating that Cuba is still on standard time.
# From Steffen Thorsen (2008-03-12):
# It seems that Cuba will start DST on Sunday, 2007-03-16...
# It was announced yesterday, according to this source (in Spanish):
-# <a href="http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm">
# http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm
-# </a>
#
# Some more background information is posted here:
-# <a href="http://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html">
# http://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html
-# </a>
#
# The article also says that Cuba has been observing DST since 1963,
# while Shanks (and tzdata) has 1965 as the first date (except in the
@@ -2768,18 +2702,14 @@
# change some historic records as well.
#
# One example:
-# <a href="http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm">
# http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm
-# </a>
-# From Jesper Norgaard Welen (2008-03-13):
+# From Jesper Nørgaard Welen (2008-03-13):
# The Cuban time change has just been confirmed on the most authoritative
# web site, the Granma. Please check out
-# <a href="http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html">
# http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html
-# </a>
#
-# Basically as expected after Steffen Thorsens information, the change
+# Basically as expected after Steffen Thorsen's information, the change
# will take place midnight between Saturday and Sunday.
# From Arthur David Olson (2008-03-12):
@@ -2790,18 +2720,14 @@
# midnight between Saturday, March 07, 2009 and Sunday, March 08, 2009-
# not on midnight March 14 / March 15 as previously thought.
#
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_cuba05.html">
# http://www.worldtimezone.com/dst_news/dst_news_cuba05.html
# (in Spanish)
-# </a>
# From Arthur David Olson (2009-03-09)
# I listened over the Internet to
-# <a href="http://media.enet.cu/readioreloj">
# http://media.enet.cu/readioreloj
-# </a>
# this morning; when it was 10:05 a. m. here in Bethesda, Maryland the
-# the time was announced as "diez cinco"--the same time as here, indicating
+# the time was announced as "diez cinco" - the same time as here, indicating
# that has indeed switched to DST. Assume second Sunday from 2009 forward.
# From Steffen Thorsen (2011-03-08):
@@ -2810,42 +2736,30 @@
# changed at all).
#
# Source:
-# <a href="http://granma.co.cu/2011/03/08/nacional/artic01.html">
# http://granma.co.cu/2011/03/08/nacional/artic01.html
-# </a>
#
# Our info:
-# <a href="http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html">
# http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html
-# </a>
#
# From Steffen Thorsen (2011-10-30)
# Cuba will end DST two weeks later this year. Instead of going back
# tonight, it has been delayed to 2011-11-13 at 01:00.
#
# One source (Spanish)
-# <a href="http://www.radioangulo.cu/noticias/cuba/17105-cuba-restablecera-el-horario-del-meridiano-de-greenwich.html">
# http://www.radioangulo.cu/noticias/cuba/17105-cuba-restablecera-el-horario-del-meridiano-de-greenwich.html
-# </a>
#
# Our page:
-# <a href="http://www.timeanddate.com/news/time/cuba-time-changes-2011.html">
# http://www.timeanddate.com/news/time/cuba-time-changes-2011.html
-# </a>
#
# From Steffen Thorsen (2012-03-01)
# According to Radio Reloj, Cuba will start DST on Midnight between March
# 31 and April 1.
#
# Radio Reloj has the following info (Spanish):
-# <a href="http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril">
# http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril
-# </a>
#
# Our info on it:
-# <a href="http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html">
# http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html
-# </a>
# From Steffen Thorsen (2012-11-03):
# Radio Reloj and many other sources report that Cuba is changing back
@@ -2901,7 +2815,7 @@
-5:00 Cuba C%sT
# Dominica
-# See 'southamerica'.
+# See America/Port_of_Spain.
# Dominican Republic
@@ -2934,8 +2848,8 @@
Zone America/Santo_Domingo -4:39:36 - LMT 1890
-4:40 - SDMT 1933 Apr 1 12:00 # S. Dom. MT
-5:00 DR E%sT 1974 Oct 27
- -4:00 - AST 2000 Oct 29 02:00
- -5:00 US E%sT 2000 Dec 3 01:00
+ -4:00 - AST 2000 Oct 29 2:00
+ -5:00 US E%sT 2000 Dec 3 1:00
-4:00 - AST
# El Salvador
@@ -2946,20 +2860,20 @@
# There are too many San Salvadors elsewhere, so use America/El_Salvador
# instead of America/San_Salvador.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/El_Salvador -5:56:48 - LMT 1921 # San Salvador
+Zone America/El_Salvador -5:56:48 - LMT 1921 # San Salvador
-6:00 Salv C%sT
# Grenada
# Guadeloupe
-# St Barthelemy
+# St Barthélemy
# St Martin (French part)
-# See 'southamerica'.
+# See America/Port_of_Spain.
# Guatemala
#
# From Gwillim Law (2006-04-22), after a heads-up from Oscar van Vlijmen:
# Diario Co Latino, at
-# http://www.diariocolatino.com/internacionales/detalles.asp?NewsID=8079,
+# <http://www.diariocolatino.com/internacionales/detalles.asp?NewsID=8079>,
# says in an article dated 2006-04-19 that the Guatemalan government had
# decided on that date to advance official time by 60 minutes, to lessen the
# impact of the elevated cost of oil.... Daylight saving time will last from
@@ -2967,7 +2881,7 @@
# From Paul Eggert (2006-06-22):
# The Ministry of Energy and Mines, press release CP-15/2006
# (2006-04-19), says DST ends at 24:00. See
-# <http://www.sieca.org.gt/Sitio_publico/Energeticos/Doc/Medidas/Cambio_Horario_Nac_190406.pdf>.
+# http://www.sieca.org.gt/Sitio_publico/Energeticos/Doc/Medidas/Cambio_Horario_Nac_190406.pdf
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Guat 1973 only - Nov 25 0:00 1:00 D
@@ -2984,11 +2898,10 @@
# Haiti
# From Gwillim Law (2005-04-15):
-# Risto O. Nykanen wrote me that Haiti is now on DST.
-# I searched for confirmation, and I found a
-# <a href="http://www.haitianconsulate.org/time.doc"> press release
+# Risto O. Nykänen wrote me that Haiti is now on DST.
+# I searched for confirmation, and I found a press release
# on the Web page of the Haitian Consulate in Chicago (2005-03-31),
-# </a>. Translated from French, it says:
+# <http://www.haitianconsulate.org/time.doc>. Translated from French, it says:
#
# "The Prime Minister's Communication Office notifies the public in general
# and the press in particular that, following a decision of the Interior
@@ -3065,14 +2978,14 @@
# <http://www.latribuna.hn/99299.html> that Manuel Zelaya, the president
# of Honduras, refused to back down on this.
-# From Jesper Norgaard Welen (2006-08-08):
+# From Jesper Nørgaard Welen (2006-08-08):
# It seems that Honduras has returned from DST to standard time this Monday at
# 00:00 hours (prolonging Sunday to 25 hours duration).
# http://www.worldtimezone.com/dst_news/dst_news_honduras04.html
# From Paul Eggert (2006-08-08):
-# Also see Diario El Heraldo, The country returns to standard time (2006-08-08)
-# <http://www.elheraldo.hn/nota.php?nid=54941&sec=12>.
+# Also see Diario El Heraldo, The country returns to standard time (2006-08-08).
+# http://www.elheraldo.hn/nota.php?nid=54941&sec=12
# It mentions executive decree 18-2006.
# From Steffen Thorsen (2006-08-17):
@@ -3099,23 +3012,34 @@
# Shanks & Pottenger give -5:07:12, but Milne records -5:07:10.41 from an
# unspecified official document, and says "This time is used throughout the
# island". Go with Milne. Round to the nearest second as required by zic.
+#
+# Shanks & Pottenger give April 28 for the 1974 spring-forward transition, but
+# Lance Neita writes that Prime Minister Michael Manley decreed it January 5.
+# Assume Neita meant Jan 6 02:00, the same as the US. Neita also writes that
+# Manley's supporters associated this act with Manley's nickname "Joshua"
+# (recall that in the Bible the sun stood still at Joshua's request),
+# and with the Rod of Correction which Manley said he had received from
+# Haile Selassie, Emperor of Ethiopia. See:
+# Neita L. The politician in all of us. Jamaica Observer 2014-09-20
+# http://www.jamaicaobserver.com/columns/The-politician-in-all-of-us_17573647
+#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Jamaica -5:07:11 - LMT 1890 # Kingston
+Zone America/Jamaica -5:07:11 - LMT 1890 # Kingston
-5:07:11 - KMT 1912 Feb # Kingston Mean Time
- -5:00 - EST 1974 Apr 28 2:00
+ -5:00 - EST 1974
-5:00 US E%sT 1984
-5:00 - EST
# Martinique
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France
- -4:04:20 - FFMT 1911 May # Fort-de-France MT
+Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France
+ -4:04:20 - FFMT 1911 May # Fort-de-France MT
-4:00 - AST 1980 Apr 6
-4:00 1:00 ADT 1980 Sep 28
-4:00 - AST
# Montserrat
-# See 'southamerica'.
+# See America/Port_of_Spain.
# Nicaragua
#
@@ -3138,27 +3062,27 @@
# From Gwillim Law (2005-04-21):
# The Associated Press story on the time change, which can be found at
# http://www.lapalmainteractivo.com/guias/content/gen/ap/America_Latina/AMC_GEN_NICARAGUA_HORA.html
-# and elsewhere, says (fifth paragraph, translated from Spanish): "The last
+# and elsewhere, says (fifth paragraph, translated from Spanish): "The last
# time that a change of clocks was applied to save energy was in the year 2000
-# during the Arnoldo Aleman administration."...
+# during the Arnoldo Alemán administration."...
# The northamerica file says that Nicaragua has been on UTC-6 continuously
# since December 1998. I wasn't able to find any details of Nicaraguan time
# changes in 2000. Perhaps a note could be added to the northamerica file, to
# the effect that we have indirect evidence that DST was observed in 2000.
#
-# From Jesper Norgaard Welen (2005-11-02):
+# From Jesper Nørgaard Welen (2005-11-02):
# Nicaragua left DST the 2005-10-02 at 00:00 (local time).
# http://www.presidencia.gob.ni/presidencia/files_index/secretaria/comunicados/2005/septiembre/26septiembre-cambio-hora.htm
# (2005-09-26)
#
-# From Jesper Norgaard Welen (2006-05-05):
+# From Jesper Nørgaard Welen (2006-05-05):
# http://www.elnuevodiario.com.ni/2006/05/01/nacionales/18410
# (my informal translation)
-# By order of the president of the republic, Enrique Bolanos, Nicaragua
+# By order of the president of the republic, Enrique Bolaños, Nicaragua
# advanced by sixty minutes their official time, yesterday at 2 in the
-# morning, and will stay that way until 30.th. of september.
+# morning, and will stay that way until 30th of September.
#
-# From Jesper Norgaard Welen (2006-09-30):
+# From Jesper Nørgaard Welen (2006-09-30):
# http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2006/D-063-2006P-PRN-Cambio-Hora.pdf
# My informal translation runs:
# The natural sun time is restored in all the national territory, in that the
@@ -3176,7 +3100,7 @@
-5:45:12 - MMT 1934 Jun 23 # Managua Mean Time?
-6:00 - CST 1973 May
-5:00 - EST 1975 Feb 16
- -6:00 Nic C%sT 1992 Jan 1 4:00
+ -6:00 Nic C%sT 1992 Jan 1 4:00
-5:00 - EST 1992 Sep 24
-6:00 - CST 1993
-5:00 - EST 1997
@@ -3185,36 +3109,36 @@
# Panama
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Panama -5:18:08 - LMT 1890
- -5:19:36 - CMT 1908 Apr 22 # Colon Mean Time
+ -5:19:36 - CMT 1908 Apr 22 # Colón Mean Time
-5:00 - EST
# Puerto Rico
# There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan
+Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan
-4:00 - AST 1942 May 3
-4:00 US A%sT 1946
-4:00 - AST
# St Kitts-Nevis
# St Lucia
-# See 'southamerica'.
+# See America/Port_of_Spain.
# St Pierre and Miquelon
# There are too many St Pierres elsewhere, so we'll use 'Miquelon'.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre
+Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre
-4:00 - AST 1980 May
-3:00 - PMST 1987 # Pierre & Miquelon Time
-3:00 Canada PM%sT
# St Vincent and the Grenadines
-# See 'southamerica'.
+# See America/Port_of_Spain.
# Turks and Caicos
#
# From Chris Dunn in
-# <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=415007>
+# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=415007
# (2007-03-15): In the Turks & Caicos Islands (America/Grand_Turk) the
# daylight saving dates for time changes have been adjusted to match
# the recent U.S. change of dates.
@@ -3227,21 +3151,27 @@
# Clocks are set back one hour at 2:00 a.m. local Daylight Saving Time"
# indicating that the normal ET rules are followed.
#
-# From Paul Eggert (2006-05-01):
-# Shanks & Pottenger say they use US DST rules, but IATA SSIM (1991/1998)
-# says they switch at midnight. Go with Shanks & Pottenger.
+# From Paul Eggert (2014-08-19):
+# The 2014-08-13 Cabinet meeting decided to stay on UTC-4 year-round. See:
+# http://tcweeklynews.com/daylight-savings-time-to-be-maintained-p5353-127.htm
+# Model this as a switch from EST/EDT to AST ...
+# From Chris Walton (2014-11-04):
+# ... the TCI government appears to have delayed the switch to
+# "permanent daylight saving time" by one year....
+# http://tcweeklynews.com/time-change-to-go-ahead-this-november-p5437-127.htm
#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule TC 1979 1986 - Apr lastSun 2:00 1:00 D
-Rule TC 1979 2006 - Oct lastSun 2:00 0 S
-Rule TC 1987 2006 - Apr Sun>=1 2:00 1:00 D
-Rule TC 2007 max - Mar Sun>=8 2:00 1:00 D
-Rule TC 2007 max - Nov Sun>=1 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Grand_Turk -4:44:32 - LMT 1890
- -5:07:11 - KMT 1912 Feb # Kingston Mean Time
- -5:00 TC E%sT
+ -5:07:11 - KMT 1912 Feb # Kingston Mean Time
+ -5:00 - EST 1979
+ -5:00 US E%sT 2015 Nov Sun>=1 2:00
+ -4:00 - AST
# British Virgin Is
# Virgin Is
-# See 'southamerica'.
+# See America/Port_of_Spain.
+
+
+# Local Variables:
+# coding: utf-8
+# End:
--- ./jdk/make/sun/javazic/tzdata/pacificnew Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/sun/javazic/tzdata/pacificnew Mon Jan 05 11:57:27 2015 -0800
@@ -21,7 +21,6 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
--- ./jdk/make/sun/javazic/tzdata/southamerica Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/sun/javazic/tzdata/southamerica Mon Jan 05 11:57:27 2015 -0800
@@ -21,31 +21,31 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future). For more, please see
+# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2006-03-22):
-# A good source for time zone historical data outside the U.S. is
+# From Paul Eggert (2014-10-31):
+#
+# Unless otherwise specified, the source for data through 1990 is:
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
# San Diego: ACS Publications, Inc. (2003).
-#
-# For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
-# <http://www.jstor.org/stable/1774359>.
+# Unfortunately this book contains many errors and cites no sources.
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
# Association's Standard Schedules Information Manual (IATA SSIM),
# published semiannually. Law sent in several helpful summaries
-# of the IATA's data after 1990.
+# of the IATA's data after 1990. Except where otherwise noted,
+# IATA SSIM is the source for entries after 1990.
#
-# Except where otherwise noted, Shanks & Pottenger is the source for
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
+# For data circa 1899, a common source is:
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
+# http://www.jstor.org/stable/1774359
#
# Earlier editions of these tables used the North American style (e.g. ARST and
# ARDT for Argentine Standard and Daylight Time), but the following quote
@@ -53,24 +53,24 @@
# I suggest the use of _Summer time_ instead of the more cumbersome
# _daylight-saving time_. _Summer time_ seems to be in general use
# in Europe and South America.
-# -- E O Cutler, _New York Times_ (1937-02-14), quoted in
+# --E O Cutler, _New York Times_ (1937-02-14), quoted in
# H L Mencken, _The American Language: Supplement I_ (1960), p 466
#
# Earlier editions of these tables also used the North American style
# for time zones in Brazil, but this was incorrect, as Brazilians say
-# "summer time". Reinaldo Goulart, a Sao Paulo businessman active in
+# "summer time". Reinaldo Goulart, a São Paulo businessman active in
# the railroad sector, writes (1999-07-06):
# The subject of time zones is currently a matter of discussion/debate in
-# Brazil. Let's say that "the Brasilia time" is considered the
-# "official time" because Brasilia is the capital city.
-# The other three time zones are called "Brasilia time "minus one" or
+# Brazil. Let's say that "the Brasília time" is considered the
+# "official time" because Brasília is the capital city.
+# The other three time zones are called "Brasília time "minus one" or
# "plus one" or "plus two". As far as I know there is no such
# name/designation as "Eastern Time" or "Central Time".
# So I invented the following (English-language) abbreviations for now.
# Corrections are welcome!
# std dst
# -2:00 FNT FNST Fernando de Noronha
-# -3:00 BRT BRST Brasilia
+# -3:00 BRT BRST Brasília
# -4:00 AMT AMST Amazon
# -5:00 ACT ACST Acre
@@ -84,7 +84,7 @@
# Argentina: first Sunday in October to first Sunday in April since 1976.
# Double Summer time from 1969 to 1974. Switches at midnight.
-# From U. S. Naval Observatory (1988-01-199):
+# From U. S. Naval Observatory (1988-01-19):
# ARGENTINA 3 H BEHIND UTC
# From Hernan G. Otero (1995-06-26):
@@ -118,7 +118,7 @@
# From Hernan G. Otero (1995-06-26):
# These corrections were contributed by InterSoft Argentina S.A.,
# obtaining the data from the:
-# Talleres de Hidrografia Naval Argentina
+# Talleres de Hidrografía Naval Argentina
# (Argentine Naval Hydrography Institute)
Rule Arg 1989 1993 - Mar Sun>=1 0:00 0 -
Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 S
@@ -140,13 +140,13 @@
Rule Arg 2000 only - Mar 3 0:00 0 -
#
# From Peter Gradelski via Steffen Thorsen (2000-03-01):
-# We just checked with our Sao Paulo office and they say the government of
+# We just checked with our São Paulo office and they say the government of
# Argentina decided not to become one of the countries that go on or off DST.
# So Buenos Aires should be -3 hours from GMT at all times.
#
-# From Fabian L. Arce Jofre (2000-04-04):
+# From Fabián L. Arce Jofré (2000-04-04):
# The law that claimed DST for Argentina was derogated by President Fernando
-# de la Rua on March 2, 2000, because it would make people spend more energy
+# de la Rúa on March 2, 2000, because it would make people spend more energy
# in the winter time, rather than less. The change took effect on March 3.
#
# From Mariano Absatz (2001-06-06):
@@ -179,15 +179,13 @@
# that Argentina will use DST next year as well, from October to
# March, although exact rules are not given.
#
-# From Jesper Norgaard Welen (2007-12-26)
+# From Jesper Nørgaard Welen (2007-12-26)
# The last hurdle of Argentina DST is over, the proposal was approved in
-# the lower chamber too (Deputados) with a vote 192 for and 2 against.
+# the lower chamber too (Diputados) with a vote 192 for and 2 against.
# By the way thanks to Mariano Absatz and Daniel Mario Vega for the link to
# the original scanned proposal, where the dates and the zero hours are
# clear and unambiguous...This is the article about final approval:
-# <a href="http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996">
# http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996
-# </a>
#
# From Paul Eggert (2007-12-22):
# For dates after mid-2008, the following rules are my guesses and
@@ -197,13 +195,8 @@
# As per message from Carlos Alberto Fonseca Arauz (Nicaragua),
# Argentina will start DST on Sunday October 19, 2008.
#
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_argentina03.html">
# http://www.worldtimezone.com/dst_news/dst_news_argentina03.html
-# </a>
-# OR
-# <a href="http://www.impulsobaires.com.ar/nota.php?id=57832 (in spanish)">
# http://www.impulsobaires.com.ar/nota.php?id=57832 (in spanish)
-# </a>
# From Rodrigo Severo (2008-10-06):
# Here is some info available at a Gentoo bug related to TZ on Argentina's DST:
@@ -212,48 +205,39 @@
# Hi, there is a problem with timezone-data-2008e and maybe with
# timezone-data-2008f
# Argentinian law [Number] 25.155 is no longer valid.
-# <a href="http://www.infoleg.gov.ar/infolegInternet/anexos/60000-64999/60036/norma.htm">
# http://www.infoleg.gov.ar/infolegInternet/anexos/60000-64999/60036/norma.htm
-# </a>
# The new one is law [Number] 26.350
-# <a href="http://www.infoleg.gov.ar/infolegInternet/anexos/135000-139999/136191/norma.htm">
# http://www.infoleg.gov.ar/infolegInternet/anexos/135000-139999/136191/norma.htm
-# </a>
# So there is no summer time in Argentina for now.
# From Mariano Absatz (2008-10-20):
-# Decree 1693/2008 applies Law 26.350 for the summer 2008/2009 establishing DST in Argentina
-# From 2008-10-19 until 2009-03-15
-# <a href="http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=16102008&pi=3&pf=4&s=0&sec=01">
+# Decree 1693/2008 applies Law 26.350 for the summer 2008/2009 establishing DST
+# in Argentina from 2008-10-19 until 2009-03-15.
# http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=16102008&pi=3&pf=4&s=0&sec=01
-# </a>
#
-# Decree 1705/2008 excepting 12 Provinces from applying DST in the summer 2008/2009:
-# Catamarca, La Rioja, Mendoza, Salta, San Juan, San Luis, La Pampa, Neuquen, Rio Negro, Chubut, Santa Cruz
-# and Tierra del Fuego
-# <a href="http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=17102008&pi=1&pf=1&s=0&sec=01">
+
+# Decree 1705/2008 excepting 12 Provinces from applying DST in the summer
+# 2008/2009: Catamarca, La Rioja, Mendoza, Salta, San Juan, San Luis, La
+# Pampa, Neuquén, Rio Negro, Chubut, Santa Cruz and Tierra del Fuego
# http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=17102008&pi=1&pf=1&s=0&sec=01
-# </a>
#
-# Press release 235 dated Saturday October 18th, from the Government of the Province of Jujuy saying
-# it will not apply DST either (even when it was not included in Decree 1705/2008)
-# <a href="http://www.jujuy.gov.ar/index2/partes_prensa/18_10_08/235-181008.doc">
+# Press release 235 dated Saturday October 18th, from the Government of the
+# Province of Jujuy saying it will not apply DST either (even when it was not
+# included in Decree 1705/2008).
# http://www.jujuy.gov.ar/index2/partes_prensa/18_10_08/235-181008.doc
-# </a>
# From fullinet (2009-10-18):
# As announced in
-# <a hef="http://www.argentina.gob.ar/argentina/portal/paginas.dhtml?pagina=356">
# http://www.argentina.gob.ar/argentina/portal/paginas.dhtml?pagina=356
-# </a>
-# (an official .gob.ar) under title: "Sin Cambio de Hora" (english: "No hour change")
+# (an official .gob.ar) under title: "Sin Cambio de Hora"
+# (English: "No hour change").
#
-# "Por el momento, el Gobierno Nacional resolvio no modificar la hora
-# oficial, decision que estaba en estudio para su implementacion el
-# domingo 18 de octubre. Desde el Ministerio de Planificacion se anuncio
-# que la Argentina hoy, en estas condiciones meteorologicas, no necesita
-# la modificacion del huso horario, ya que 2009 nos encuentra con
-# crecimiento en la produccion y distribucion energetica."
+# "Por el momento, el Gobierno Nacional resolvió no modificar la hora
+# oficial, decisión que estaba en estudio para su implementación el
+# domingo 18 de octubre. Desde el Ministerio de Planificación se anunció
+# que la Argentina hoy, en estas condiciones meteorológicas, no necesita
+# la modificación del huso horario, ya que 2009 nos encuentra con
+# crecimiento en la producción y distribución energética."
Rule Arg 2007 only - Dec 30 0:00 1:00 S
Rule Arg 2008 2009 - Mar Sun>=15 0:00 0 -
@@ -267,10 +251,10 @@
# It's Law No. 7,210. This change is due to a public power emergency, so for
# now we'll assume it's for this year only.
#
-# From Paul Eggert (2006-03-22):
-# <a href="http://www.spicasc.net/horvera.html">
-# Hora de verano para la Republica Argentina (2003-06-08)
-# </a> says that standard time in Argentina from 1894-10-31
+# From Paul Eggert (2014-08-09):
+# Hora de verano para la República Argentina
+# http://buenasiembra.com.ar/esoterismo/astrologia/hora-de-verano-de-la-republica-argentina-27.html
+# says that standard time in Argentina from 1894-10-31
# to 1920-05-01 was -4:16:48.25. Go with this more-precise value
# over Shanks & Pottenger.
#
@@ -285,10 +269,10 @@
# time in October 17th.
#
# Catamarca, Chubut, La Rioja, San Juan, San Luis, Santa Cruz,
-# Tierra del Fuego, Tucuman.
+# Tierra del Fuego, Tucumán.
#
# From Mariano Absatz (2004-06-14):
-# ... this weekend, the Province of Tucuman decided it'd go back to UTC-03:00
+# ... this weekend, the Province of Tucumán decided it'd go back to UTC-03:00
# yesterday midnight (that is, at 24:00 Saturday 12th), since the people's
# annoyance with the change is much higher than the power savings obtained....
#
@@ -323,49 +307,38 @@
# Here are articles that Argentina Province San Luis is planning to end DST
# as earlier as upcoming Monday January 21, 2008 or February 2008:
#
-# Provincia argentina retrasa reloj y marca diferencia con resto del pais
+# Provincia argentina retrasa reloj y marca diferencia con resto del país
# (Argentine Province delayed clock and mark difference with the rest of the
# country)
-# <a href="http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel">
# http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel
-# </a>
#
# Es inminente que en San Luis atrasen una hora los relojes
# (It is imminent in San Luis clocks one hour delay)
-# <a href="http://www.lagaceta.com.ar/vernotae.asp?id_nota=253414">
-# http://www.lagaceta.com.ar/vernotae.asp?id_nota=253414
-# </a>
-#
-# <a href="http://www.worldtimezone.net/dst_news/dst_news_argentina02.html">
+# http://www.lagaceta.com.ar/nota/253414/Economia/Es-inminente-que-en-San-Luis-atrasen-una-hora-los-relojes.html
# http://www.worldtimezone.net/dst_news/dst_news_argentina02.html
-# </a>
-# From Jesper Norgaard Welen (2008-01-18):
+# From Jesper Nørgaard Welen (2008-01-18):
# The page of the San Luis provincial government
-# <a href="http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812">
# http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812
-# </a>
# confirms what Alex Krivenyshev has earlier sent to the tz
# emailing list about that San Luis plans to return to standard
# time much earlier than the rest of the country. It also
# confirms that upon request the provinces San Juan and Mendoza
# refused to follow San Luis in this change.
#
-# The change is supposed to take place Monday the 21.st at 0:00
+# The change is supposed to take place Monday the 21st at 0:00
# hours. As far as I understand it if this goes ahead, we need
# a new timezone for San Luis (although there are also documented
# independent changes in the southamerica file of San Luis in
# 1990 and 1991 which has not been confirmed).
-# From Jesper Norgaard Welen (2008-01-25):
+# From Jesper Nørgaard Welen (2008-01-25):
# Unfortunately the below page has become defunct, about the San Luis
# time change. Perhaps because it now is part of a group of pages "Most
# important pages of 2008."
#
# You can use
-# <a href="http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834">
# http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834
-# </a>
# instead it seems. Or use "Buscador" from the main page of the San Luis
# government, and fill in "huso" and click OK, and you will get 3 pages
# from which the first one is identical to the above.
@@ -385,9 +358,9 @@
# back in 2004, when these provinces changed to UTC-4 for a few days, I
# mailed them personally and never got an answer).
-# From Paul Eggert (2008-06-30):
-# Unless otherwise specified, data are from Shanks & Pottenger through 1992,
-# from the IATA otherwise. As noted below, Shanks & Pottenger say that
+# From Paul Eggert (2014-08-12):
+# Unless otherwise specified, data entries are from Shanks & Pottenger through
+# 1992, from the IATA otherwise. As noted below, Shanks & Pottenger say that
# America/Cordoba split into 6 subregions during 1991/1992, one of which
# was America/San_Luis, but we haven't verified this yet so for now we'll
# keep America/Cordoba a single region rather than splitting it into the
@@ -399,14 +372,9 @@
# to utc-04:00 until the second Saturday in October...
#
# The press release is at
-# <a href="http://www.sanluis.gov.ar/SL/Paginas/NoticiaDetalle.asp?TemaId=1&InfoPrensaId=3102">
# http://www.sanluis.gov.ar/SL/Paginas/NoticiaDetalle.asp?TemaId=1&InfoPrensaId=3102
-# </a>
-# (I couldn't find the decree, but
-# <a href="http://www.sanluis.gov.ar">
-# www.sanluis.gov.ar
-# <a/>
-# is the official page for the Province Government).
+# (I couldn't find the decree, but www.sanluis.gov.ar
+# is the official page for the Province Government.)
#
# There's also a note in only one of the major national papers ...
# http://www.lanacion.com.ar/nota.asp?nota_id=1107912
@@ -423,9 +391,7 @@
# ...the Province of San Luis is a case in itself.
#
# The Law at
-# <a href="http://www.diputadossanluis.gov.ar/diputadosasp/paginas/verNorma.asp?NormaID=276>"
# http://www.diputadossanluis.gov.ar/diputadosasp/paginas/verNorma.asp?NormaID=276
-# </a>
# is ambiguous because establishes a calendar from the 2nd Sunday in
# October at 0:00 thru the 2nd Saturday in March at 24:00 and the
# complement of that starting on the 2nd Sunday of March at 0:00 and
@@ -454,19 +420,15 @@
# ...
# From Alexander Krivenyshev (2010-04-09):
-# According to news reports from El Diario de la Republica Province San
+# According to news reports from El Diario de la República Province San
# Luis, Argentina (standard time UTC-04) will keep Daylight Saving Time
-# after April 11, 2010--will continue to have same time as rest of
+# after April 11, 2010 - will continue to have same time as rest of
# Argentina (UTC-3) (no DST).
#
-# Confirmaron la pr&oacute;rroga del huso horario de verano (Spanish)
-# <a href="http://www.eldiariodelarepublica.com/index.php?option=com_content&task=view&id=29383&Itemid=9">
+# Confirmaron la prórroga del huso horario de verano (Spanish)
# http://www.eldiariodelarepublica.com/index.php?option=com_content&task=view&id=29383&Itemid=9
-# </a>
# or (some English translation):
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_argentina08.html">
# http://www.worldtimezone.com/dst_news/dst_news_argentina08.html
-# </a>
# From Mariano Absatz (2010-04-12):
# yes...I can confirm this...and given that San Luis keeps calling
@@ -478,7 +440,7 @@
# Perhaps San Luis operates on the legal fiction that it is at UTC-4
# with perpetual summer time, but ordinary usage typically seems to
# just say it's at UTC-3; see, for example,
-# <http://es.wikipedia.org/wiki/Hora_oficial_argentina>.
+# http://es.wikipedia.org/wiki/Hora_oficial_argentina
# We've documented similar situations as being plain changes to
# standard time, so let's do that here too. This does not change UTC
# offsets, only tm_isdst and the time zone abbreviations. One minor
@@ -486,20 +448,20 @@
# setting for time stamps past 2038.
# From Paul Eggert (2013-02-21):
-# Milne says Cordoba time was -4:16:48.2. Round to the nearest second.
+# Milne says Córdoba time was -4:16:48.2. Round to the nearest second.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
#
# Buenos Aires (BA), Capital Federal (CF),
-Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
- -4:16:48 - CMT 1920 May # Cordoba Mean Time
+Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May # Córdoba Mean Time
-4:00 - ART 1930 Dec
-4:00 Arg AR%sT 1969 Oct 5
-3:00 Arg AR%sT 1999 Oct 3
-4:00 Arg AR%sT 2000 Mar 3
-3:00 Arg AR%sT
#
-# Cordoba (CB), Santa Fe (SF), Entre Rios (ER), Corrientes (CN), Misiones (MN),
+# Córdoba (CB), Santa Fe (SF), Entre Ríos (ER), Corrientes (CN), Misiones (MN),
# Chaco (CC), Formosa (FM), Santiago del Estero (SE)
#
# Shanks & Pottenger also make the following claims, which we haven't verified:
@@ -519,7 +481,7 @@
-4:00 Arg AR%sT 2000 Mar 3
-3:00 Arg AR%sT
#
-# Salta (SA), La Pampa (LP), Neuquen (NQ), Rio Negro (RN)
+# Salta (SA), La Pampa (LP), Neuquén (NQ), Rio Negro (RN)
Zone America/Argentina/Salta -4:21:40 - LMT 1894 Oct 31
-4:16:48 - CMT 1920 May
-4:00 - ART 1930 Dec
@@ -531,7 +493,7 @@
-3:00 Arg AR%sT 2008 Oct 18
-3:00 - ART
#
-# Tucuman (TM)
+# Tucumán (TM)
Zone America/Argentina/Tucuman -4:20:52 - LMT 1894 Oct 31
-4:16:48 - CMT 1920 May
-4:00 - ART 1930 Dec
@@ -642,8 +604,8 @@
-3:00 - ART
#
# Santa Cruz (SC)
-Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
- -4:16:48 - CMT 1920 May # Cordoba Mean Time
+Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May # Córdoba Mean Time
-4:00 - ART 1930 Dec
-4:00 Arg AR%sT 1969 Oct 5
-3:00 Arg AR%sT 1999 Oct 3
@@ -653,9 +615,9 @@
-3:00 Arg AR%sT 2008 Oct 18
-3:00 - ART
#
-# Tierra del Fuego, Antartida e Islas del Atlantico Sur (TF)
-Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
- -4:16:48 - CMT 1920 May # Cordoba Mean Time
+# Tierra del Fuego, Antártida e Islas del Atlántico Sur (TF)
+Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May # Córdoba Mean Time
-4:00 - ART 1930 Dec
-4:00 Arg AR%sT 1969 Oct 5
-3:00 Arg AR%sT 1999 Oct 3
@@ -686,13 +648,13 @@
# From IATA SSIM (1996-02):
# _Only_ the following states in BR1 observe DST: Rio Grande do Sul (RS),
-# Santa Catarina (SC), Parana (PR), Sao Paulo (SP), Rio de Janeiro (RJ),
-# Espirito Santo (ES), Minas Gerais (MG), Bahia (BA), Goias (GO),
+# Santa Catarina (SC), Paraná (PR), São Paulo (SP), Rio de Janeiro (RJ),
+# Espírito Santo (ES), Minas Gerais (MG), Bahia (BA), Goiás (GO),
# Distrito Federal (DF), Tocantins (TO), Sergipe [SE] and Alagoas [AL].
# [The last three states are new to this issue of the IATA SSIM.]
# From Gwillim Law (1996-10-07):
-# Geography, history (Tocantins was part of Goias until 1989), and other
+# Geography, history (Tocantins was part of Goiás until 1989), and other
# sources of time zone information lead me to believe that AL, SE, and TO were
# always in BR1, and so the only change was whether or not they observed DST....
# The earliest issue of the SSIM I have is 2/91. Each issue from then until
@@ -706,16 +668,14 @@
# However, some conclusions can be drawn from another IATA manual: the Airline
# Coding Directory, which lists close to 400 airports in Brazil. For each
# airport it gives a time zone which is coded to the SSIM. From that
-# information, I'm led to conclude that the states of Amapa (AP), Ceara (CE),
-# Maranhao (MA), Paraiba (PR), Pernambuco (PE), Piaui (PI), and Rio Grande do
-# Norte (RN), and the eastern part of Para (PA) are all in BR1 without DST.
+# information, I'm led to conclude that the states of Amapá (AP), Ceará (CE),
+# Maranhão (MA), Paraíba (PR), Pernambuco (PE), Piauí (PI), and Rio Grande do
+# Norte (RN), and the eastern part of Pará (PA) are all in BR1 without DST.
# From Marcos Tadeu (1998-09-27):
-# <a href="http://pcdsh01.on.br/verao1.html">
-# Brazilian official page
-# </a>
+# Brazilian official page <http://pcdsh01.on.br/verao1.html>
-# From Jesper Norgaard (2000-11-03):
+# From Jesper Nørgaard (2000-11-03):
# [For an official list of which regions in Brazil use which time zones, see:]
# http://pcdsh01.on.br/Fusbr.htm
# http://pcdsh01.on.br/Fusbrhv.htm
@@ -748,13 +708,13 @@
# From Paul Schulze (2008-06-24):
# ...by law number 11.662 of April 24, 2008 (published in the "Diario
-# Oficial da Uniao"...) in Brazil there are changes in the timezones,
+# Oficial da União"...) in Brazil there are changes in the timezones,
# effective today (00:00am at June 24, 2008) as follows:
#
-# a) The timezone UTC+5 is e[x]tinguished, with all the Acre state and the
+# a) The timezone UTC+5 is extinguished, with all the Acre state and the
# part of the Amazonas state that had this timezone now being put to the
# timezone UTC+4
-# b) The whole Para state now is put at timezone UTC+3, instead of just
+# b) The whole Pará state now is put at timezone UTC+3, instead of just
# part of it, as was before.
#
# This change follows a proposal of senator Tiao Viana of Acre state, that
@@ -767,13 +727,11 @@
# From Rodrigo Severo (2008-06-24):
# Just correcting the URL:
-# <a href="https://www.in.gov.br/imprensa/visualiza/index.jsp?jornal=do&secao=1&pagina=1&data=25/04/2008">
# https://www.in.gov.br/imprensa/visualiza/index.jsp?jornal=do&secao=1&pagina=1&data=25/04/2008
-# </a>
#
# As a result of the above Decree I believe the America/Rio_Branco
# timezone shall be modified from UTC-5 to UTC-4 and a new timezone shall
-# be created to represent the...west side of the Para State. I
+# be created to represent the...west side of the Pará State. I
# suggest this new timezone be called Santarem as the most
# important/populated city in the affected area.
#
@@ -782,19 +740,16 @@
# From Alex Krivenyshev (2008-06-24):
# This is a quick reference page for New and Old Brazil Time Zones map.
-# <a href="http://www.worldtimezone.com/brazil-time-new-old.php">
# http://www.worldtimezone.com/brazil-time-new-old.php
-# </a>
#
-# - 4 time zones replaced by 3 time zones-eliminating time zone UTC- 05
-# (state Acre and the part of the Amazonas will be UTC/GMT- 04) - western
-# part of Par state is moving to one timezone UTC- 03 (from UTC -04).
+# - 4 time zones replaced by 3 time zones - eliminating time zone UTC-05
+# (state Acre and the part of the Amazonas will be UTC/GMT-04) - western
+# part of Par state is moving to one timezone UTC-03 (from UTC-04).
# From Paul Eggert (2002-10-10):
# The official decrees referenced below are mostly taken from
-# <a href="http://pcdsh01.on.br/DecHV.html">
-# Decretos sobre o Horario de Verao no Brasil
-# </a>.
+# Decretos sobre o Horário de Verão no Brasil.
+# http://pcdsh01.on.br/DecHV.html
# From Steffen Thorsen (2008-08-29):
# As announced by the government and many newspapers in Brazil late
@@ -806,25 +761,17 @@
# It has not yet been posted to http://pcdsh01.on.br/DecHV.html
#
# An official page about it:
-# <a href="http://www.mme.gov.br/site/news/detail.do?newsId=16722">
# http://www.mme.gov.br/site/news/detail.do?newsId=16722
-# </a>
# Note that this link does not always work directly, but must be accessed
# by going to
-# <a href="http://www.mme.gov.br/first">
# http://www.mme.gov.br/first
-# </a>
#
# One example link that works directly:
-# <a href="http://jornale.com.br/index.php?option=com_content&task=view&id=13530&Itemid=54">
# http://jornale.com.br/index.php?option=com_content&task=view&id=13530&Itemid=54
# (Portuguese)
-# </a>
#
# We have a written a short article about it as well:
-# <a href="http://www.timeanddate.com/news/time/brazil-dst-2008-2009.html">
# http://www.timeanddate.com/news/time/brazil-dst-2008-2009.html
-# </a>
#
# From Alexander Krivenyshev (2011-10-04):
# State Bahia will return to Daylight savings time this year after 8 years off.
@@ -832,17 +779,12 @@
# television station in Salvador.
# In Portuguese:
-# <a href="http://g1.globo.com/bahia/noticia/2011/10/governador-jaques-wagner-confirma-horario-de-verao-na-bahia.html">
# http://g1.globo.com/bahia/noticia/2011/10/governador-jaques-wagner-confirma-horario-de-verao-na-bahia.html
-# </a> and
-# <a href="http://noticias.terra.com.br/brasil/noticias/0,,OI5390887-EI8139,00-Bahia+volta+a+ter+horario+de+verao+apos+oito+anos.html">
# http://noticias.terra.com.br/brasil/noticias/0,,OI5390887-EI8139,00-Bahia+volta+a+ter+horario+de+verao+apos+oito+anos.html
-# </a>
# From Guilherme Bernardes Rodrigues (2011-10-07):
# There is news in the media, however there is still no decree about it.
-# I just send a e-mail to Zulmira Brandao at
-# <a href="http://pcdsh01.on.br/">http://pcdsh01.on.br/</a> the
+# I just send a e-mail to Zulmira Brandao at http://pcdsh01.on.br/ the
# official agency about time in Brazil, and she confirmed that the old rule is
# still in force.
@@ -854,9 +796,7 @@
#
# DECRETO No- 7.584, DE 13 DE OUTUBRO DE 2011
# Link :
-# <a href="http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6">
# http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6
-# </a>
# From Kelley Cook (2012-10-16):
# The governor of state of Bahia in Brazil announced on Thursday that
@@ -884,42 +824,42 @@
# For now, assume western Amazonas will change as well.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# Decree <a href="http://pcdsh01.on.br/HV20466.htm">20,466</a> (1931-10-01)
-# Decree <a href="http://pcdsh01.on.br/HV21896.htm">21,896</a> (1932-01-10)
+# Decree 20,466 <http://pcdsh01.on.br/HV20466.htm> (1931-10-01)
+# Decree 21,896 <http://pcdsh01.on.br/HV21896.htm> (1932-01-10)
Rule Brazil 1931 only - Oct 3 11:00 1:00 S
Rule Brazil 1932 1933 - Apr 1 0:00 0 -
Rule Brazil 1932 only - Oct 3 0:00 1:00 S
-# Decree <a href="http://pcdsh01.on.br/HV23195.htm">23,195</a> (1933-10-10)
+# Decree 23,195 <http://pcdsh01.on.br/HV23195.htm> (1933-10-10)
# revoked DST.
-# Decree <a href="http://pcdsh01.on.br/HV27496.htm">27,496</a> (1949-11-24)
-# Decree <a href="http://pcdsh01.on.br/HV27998.htm">27,998</a> (1950-04-13)
+# Decree 27,496 <http://pcdsh01.on.br/HV27496.htm> (1949-11-24)
+# Decree 27,998 <http://pcdsh01.on.br/HV27998.htm> (1950-04-13)
Rule Brazil 1949 1952 - Dec 1 0:00 1:00 S
Rule Brazil 1950 only - Apr 16 1:00 0 -
Rule Brazil 1951 1952 - Apr 1 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV32308.htm">32,308</a> (1953-02-24)
+# Decree 32,308 <http://pcdsh01.on.br/HV32308.htm> (1953-02-24)
Rule Brazil 1953 only - Mar 1 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV34724.htm">34,724</a> (1953-11-30)
+# Decree 34,724 <http://pcdsh01.on.br/HV34724.htm> (1953-11-30)
# revoked DST.
-# Decree <a href="http://pcdsh01.on.br/HV52700.htm">52,700</a> (1963-10-18)
+# Decree 52,700 <http://pcdsh01.on.br/HV52700.htm> (1963-10-18)
# established DST from 1963-10-23 00:00 to 1964-02-29 00:00
# in SP, RJ, GB, MG, ES, due to the prolongation of the drought.
-# Decree <a href="http://pcdsh01.on.br/HV53071.htm">53,071</a> (1963-12-03)
+# Decree 53,071 <http://pcdsh01.on.br/HV53071.htm> (1963-12-03)
# extended the above decree to all of the national territory on 12-09.
Rule Brazil 1963 only - Dec 9 0:00 1:00 S
-# Decree <a href="http://pcdsh01.on.br/HV53604.htm">53,604</a> (1964-02-25)
+# Decree 53,604 <http://pcdsh01.on.br/HV53604.htm> (1964-02-25)
# extended summer time by one day to 1964-03-01 00:00 (start of school).
Rule Brazil 1964 only - Mar 1 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV55639.htm">55,639</a> (1965-01-27)
+# Decree 55,639 <http://pcdsh01.on.br/HV55639.htm> (1965-01-27)
Rule Brazil 1965 only - Jan 31 0:00 1:00 S
Rule Brazil 1965 only - Mar 31 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV57303.htm">57,303</a> (1965-11-22)
+# Decree 57,303 <http://pcdsh01.on.br/HV57303.htm> (1965-11-22)
Rule Brazil 1965 only - Dec 1 0:00 1:00 S
-# Decree <a href="http://pcdsh01.on.br/HV57843.htm">57,843</a> (1966-02-18)
+# Decree 57,843 <http://pcdsh01.on.br/HV57843.htm> (1966-02-18)
Rule Brazil 1966 1968 - Mar 1 0:00 0 -
Rule Brazil 1966 1967 - Nov 1 0:00 1:00 S
-# Decree <a href="http://pcdsh01.on.br/HV63429.htm">63,429</a> (1968-10-15)
+# Decree 63,429 <http://pcdsh01.on.br/HV63429.htm> (1968-10-15)
# revoked DST.
-# Decree <a href="http://pcdsh01.on.br/HV91698.htm">91,698</a> (1985-09-27)
+# Decree 91,698 <http://pcdsh01.on.br/HV91698.htm> (1985-09-27)
Rule Brazil 1985 only - Nov 2 0:00 1:00 S
# Decree 92,310 (1986-01-21)
# Decree 92,463 (1986-03-13)
@@ -927,42 +867,42 @@
# Decree 93,316 (1986-10-01)
Rule Brazil 1986 only - Oct 25 0:00 1:00 S
Rule Brazil 1987 only - Feb 14 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV94922.htm">94,922</a> (1987-09-22)
+# Decree 94,922 <http://pcdsh01.on.br/HV94922.htm> (1987-09-22)
Rule Brazil 1987 only - Oct 25 0:00 1:00 S
Rule Brazil 1988 only - Feb 7 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV96676.htm">96,676</a> (1988-09-12)
+# Decree 96,676 <http://pcdsh01.on.br/HV96676.htm> (1988-09-12)
# except for the states of AC, AM, PA, RR, RO, and AP (then a territory)
Rule Brazil 1988 only - Oct 16 0:00 1:00 S
Rule Brazil 1989 only - Jan 29 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV98077.htm">98,077</a> (1989-08-21)
+# Decree 98,077 <http://pcdsh01.on.br/HV98077.htm> (1989-08-21)
# with the same exceptions
Rule Brazil 1989 only - Oct 15 0:00 1:00 S
Rule Brazil 1990 only - Feb 11 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV99530.htm">99,530</a> (1990-09-17)
+# Decree 99,530 <http://pcdsh01.on.br/HV99530.htm> (1990-09-17)
# adopted by RS, SC, PR, SP, RJ, ES, MG, GO, MS, DF.
# Decree 99,629 (1990-10-19) adds BA, MT.
Rule Brazil 1990 only - Oct 21 0:00 1:00 S
Rule Brazil 1991 only - Feb 17 0:00 0 -
-# <a href="http://pcdsh01.on.br/HV1991.htm">Unnumbered decree</a> (1991-09-25)
+# Unnumbered decree <http://pcdsh01.on.br/HV1991.htm> (1991-09-25)
# adopted by RS, SC, PR, SP, RJ, ES, MG, BA, GO, MT, MS, DF.
Rule Brazil 1991 only - Oct 20 0:00 1:00 S
Rule Brazil 1992 only - Feb 9 0:00 0 -
-# <a href="http://pcdsh01.on.br/HV1992.htm">Unnumbered decree</a> (1992-10-16)
+# Unnumbered decree <http://pcdsh01.on.br/HV1992.htm> (1992-10-16)
# adopted by same states.
Rule Brazil 1992 only - Oct 25 0:00 1:00 S
Rule Brazil 1993 only - Jan 31 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV942.htm">942</a> (1993-09-28)
+# Decree 942 <http://pcdsh01.on.br/HV942.htm> (1993-09-28)
# adopted by same states, plus AM.
-# Decree <a href="http://pcdsh01.on.br/HV1252.htm">1,252</a> (1994-09-22;
+# Decree 1,252 <http://pcdsh01.on.br/HV1252.htm> (1994-09-22;
# web page corrected 2004-01-07) adopted by same states, minus AM.
-# Decree <a href="http://pcdsh01.on.br/HV1636.htm">1,636</a> (1995-09-14)
+# Decree 1,636 <http://pcdsh01.on.br/HV1636.htm> (1995-09-14)
# adopted by same states, plus MT and TO.
-# Decree <a href="http://pcdsh01.on.br/HV1674.htm">1,674</a> (1995-10-13)
+# Decree 1,674 <http://pcdsh01.on.br/HV1674.htm> (1995-10-13)
# adds AL, SE.
Rule Brazil 1993 1995 - Oct Sun>=11 0:00 1:00 S
Rule Brazil 1994 1995 - Feb Sun>=15 0:00 0 -
Rule Brazil 1996 only - Feb 11 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV2000.htm">2,000</a> (1996-09-04)
+# Decree 2,000 <http://pcdsh01.on.br/HV2000.htm> (1996-09-04)
# adopted by same states, minus AL, SE.
Rule Brazil 1996 only - Oct 6 0:00 1:00 S
Rule Brazil 1997 only - Feb 16 0:00 0 -
@@ -975,53 +915,51 @@
#
# Decree 2,317 (1997-09-04), adopted by same states.
Rule Brazil 1997 only - Oct 6 0:00 1:00 S
-# Decree <a href="http://pcdsh01.on.br/figuras/HV2495.JPG">2,495</a>
+# Decree 2,495 <http://pcdsh01.on.br/figuras/HV2495.JPG>
# (1998-02-10)
Rule Brazil 1998 only - Mar 1 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/figuras/Hv98.jpg">2,780</a> (1998-09-11)
+# Decree 2,780 <http://pcdsh01.on.br/figuras/Hv98.jpg> (1998-09-11)
# adopted by the same states as before.
Rule Brazil 1998 only - Oct 11 0:00 1:00 S
Rule Brazil 1999 only - Feb 21 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/figuras/HV3150.gif">3,150</a>
+# Decree 3,150 <http://pcdsh01.on.br/figuras/HV3150.gif>
# (1999-08-23) adopted by same states.
-# Decree <a href="http://pcdsh01.on.br/DecHV99.gif">3,188</a> (1999-09-30)
+# Decree 3,188 <http://pcdsh01.on.br/DecHV99.gif> (1999-09-30)
# adds SE, AL, PB, PE, RN, CE, PI, MA and RR.
Rule Brazil 1999 only - Oct 3 0:00 1:00 S
Rule Brazil 2000 only - Feb 27 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/DEC3592.htm">3,592</a> (2000-09-06)
+# Decree 3,592 <http://pcdsh01.on.br/DEC3592.htm> (2000-09-06)
# adopted by the same states as before.
-# Decree <a href="http://pcdsh01.on.br/Dec3630.jpg">3,630</a> (2000-10-13)
+# Decree 3,630 <http://pcdsh01.on.br/Dec3630.jpg> (2000-10-13)
# repeals DST in PE and RR, effective 2000-10-15 00:00.
-# Decree <a href="http://pcdsh01.on.br/Dec3632.jpg">3,632</a> (2000-10-17)
+# Decree 3,632 <http://pcdsh01.on.br/Dec3632.jpg> (2000-10-17)
# repeals DST in SE, AL, PB, RN, CE, PI and MA, effective 2000-10-22 00:00.
-# Decree <a href="http://pcdsh01.on.br/figuras/HV3916.gif">3,916</a>
+# Decree 3,916 <http://pcdsh01.on.br/figuras/HV3916.gif>
# (2001-09-13) reestablishes DST in AL, CE, MA, PB, PE, PI, RN, SE.
Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 S
Rule Brazil 2001 2006 - Feb Sun>=15 0:00 0 -
# Decree 4,399 (2002-10-01) repeals DST in AL, CE, MA, PB, PE, PI, RN, SE.
-# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/2002/D4399.htm">4,399</a>
+# 4,399 <http://www.presidencia.gov.br/CCIVIL/decreto/2002/D4399.htm>
Rule Brazil 2002 only - Nov 3 0:00 1:00 S
# Decree 4,844 (2003-09-24; corrected 2003-09-26) repeals DST in BA, MT, TO.
-# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/2003/D4844.htm">4,844</a>
+# 4,844 <http://www.presidencia.gov.br/CCIVIL/decreto/2003/D4844.htm>
Rule Brazil 2003 only - Oct 19 0:00 1:00 S
# Decree 5,223 (2004-10-01) reestablishes DST in MT.
-# <a href="http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm">5,223</a>
+# 5,223 <http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm>
Rule Brazil 2004 only - Nov 2 0:00 1:00 S
-# Decree <a href="http://pcdsh01.on.br/DecHV5539.gif">5,539</a> (2005-09-19),
+# Decree 5,539 <http://pcdsh01.on.br/DecHV5539.gif> (2005-09-19),
# adopted by the same states as before.
Rule Brazil 2005 only - Oct 16 0:00 1:00 S
-# Decree <a href="http://pcdsh01.on.br/DecHV5920.gif">5,920</a> (2006-10-03),
+# Decree 5,920 <http://pcdsh01.on.br/DecHV5920.gif> (2006-10-03),
# adopted by the same states as before.
Rule Brazil 2006 only - Nov 5 0:00 1:00 S
Rule Brazil 2007 only - Feb 25 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/DecHV6212.gif">6,212</a> (2007-09-26),
+# Decree 6,212 <http://pcdsh01.on.br/DecHV6212.gif> (2007-09-26),
# adopted by the same states as before.
Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 S
# From Frederico A. C. Neves (2008-09-10):
# According to this decree
-# <a href="http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm">
# http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm
-# </a>
# [t]he DST period in Brazil now on will be from the 3rd Oct Sunday to the
# 3rd Feb Sunday. There is an exception on the return date when this is
# the Carnival Sunday then the return date will be the next Sunday...
@@ -1056,29 +994,29 @@
-2:00 Brazil FN%sT 2002 Oct 1
-2:00 - FNT
# Other Atlantic islands have no permanent settlement.
-# These include Trindade and Martin Vaz (administratively part of ES),
-# Atol das Rocas (RN), and Penedos de Sao Pedro e Sao Paulo (PE).
+# These include Trindade and Martim Vaz (administratively part of ES),
+# Rocas Atoll (RN), and the St Peter and St Paul Archipelago (PE).
# Fernando de Noronha was a separate territory from 1942-09-02 to 1989-01-01;
# it also included the Penedos.
#
-# Amapa (AP), east Para (PA)
-# East Para includes Belem, Maraba, Serra Norte, and Sao Felix do Xingu.
-# The division between east and west Para is the river Xingu.
+# Amapá (AP), east Pará (PA)
+# East Pará includes Belém, Marabá, Serra Norte, and São Félix do Xingu.
+# The division between east and west Pará is the river Xingu.
# In the north a very small part from the river Javary (now Jari I guess,
-# the border with Amapa) to the Amazon, then to the Xingu.
+# the border with Amapá) to the Amazon, then to the Xingu.
Zone America/Belem -3:13:56 - LMT 1914
-3:00 Brazil BR%sT 1988 Sep 12
-3:00 - BRT
#
-# west Para (PA)
-# West Para includes Altamira, Oribidos, Prainha, Oriximina, and Santarem.
+# west Pará (PA)
+# West Pará includes Altamira, Óbidos, Prainha, Oriximiná, and Santarém.
Zone America/Santarem -3:38:48 - LMT 1914
-4:00 Brazil AM%sT 1988 Sep 12
- -4:00 - AMT 2008 Jun 24 00:00
+ -4:00 - AMT 2008 Jun 24 0:00
-3:00 - BRT
#
-# Maranhao (MA), Piaui (PI), Ceara (CE), Rio Grande do Norte (RN),
-# Paraiba (PB)
+# Maranhão (MA), Piauí (PI), Ceará (CE), Rio Grande do Norte (RN),
+# Paraíba (PB)
Zone America/Fortaleza -2:34:00 - LMT 1914
-3:00 Brazil BR%sT 1990 Sep 17
-3:00 - BRT 1999 Sep 30
@@ -1125,11 +1063,11 @@
-3:00 Brazil BR%sT 2012 Oct 21
-3:00 - BRT
#
-# Goias (GO), Distrito Federal (DF), Minas Gerais (MG),
-# Espirito Santo (ES), Rio de Janeiro (RJ), Sao Paulo (SP), Parana (PR),
+# Goiás (GO), Distrito Federal (DF), Minas Gerais (MG),
+# Espírito Santo (ES), Rio de Janeiro (RJ), São Paulo (SP), Paraná (PR),
# Santa Catarina (SC), Rio Grande do Sul (RS)
Zone America/Sao_Paulo -3:06:28 - LMT 1914
- -3:00 Brazil BR%sT 1963 Oct 23 00:00
+ -3:00 Brazil BR%sT 1963 Oct 23 0:00
-3:00 1:00 BRST 1964
-3:00 Brazil BR%sT
#
@@ -1143,7 +1081,7 @@
-4:00 - AMT 2004 Oct 1
-4:00 Brazil AM%sT
#
-# Rondonia (RO)
+# Rondônia (RO)
Zone America/Porto_Velho -4:15:36 - LMT 1914
-4:00 Brazil AM%sT 1988 Sep 12
-4:00 - AMT
@@ -1155,7 +1093,7 @@
-4:00 Brazil AM%sT 2000 Oct 15
-4:00 - AMT
#
-# east Amazonas (AM): Boca do Acre, Jutai, Manaus, Floriano Peixoto
+# east Amazonas (AM): Boca do Acre, Jutaí, Manaus, Floriano Peixoto
# The great circle line from Tabatinga to Porto Acre divides
# east from west Amazonas.
Zone America/Manaus -4:00:04 - LMT 1914
@@ -1165,19 +1103,19 @@
-4:00 - AMT
#
# west Amazonas (AM): Atalaia do Norte, Boca do Maoco, Benjamin Constant,
-# Eirunepe, Envira, Ipixuna
+# Eirunepé, Envira, Ipixuna
Zone America/Eirunepe -4:39:28 - LMT 1914
-5:00 Brazil AC%sT 1988 Sep 12
-5:00 - ACT 1993 Sep 28
-5:00 Brazil AC%sT 1994 Sep 22
- -5:00 - ACT 2008 Jun 24 00:00
+ -5:00 - ACT 2008 Jun 24 0:00
-4:00 - AMT 2013 Nov 10
-5:00 - ACT
#
# Acre (AC)
Zone America/Rio_Branco -4:31:12 - LMT 1914
-5:00 Brazil AC%sT 1988 Sep 12
- -5:00 - ACT 2008 Jun 24 00:00
+ -5:00 - ACT 2008 Jun 24 0:00
-4:00 - AMT 2013 Nov 10
-5:00 - ACT
@@ -1198,66 +1136,54 @@
# From Oscar van Vlijmen (2006-10-08):
# http://www.horaoficial.cl/cambio.htm
-# From Jesper Norgaard Welen (2006-10-08):
+# From Jesper Nørgaard Welen (2006-10-08):
# I think that there are some obvious mistakes in the suggested link
# from Oscar van Vlijmen,... for instance entry 66 says that GMT-4
# ended 1990-09-12 while entry 67 only begins GMT-3 at 1990-09-15
# (they should have been 1990-09-15 and 1990-09-16 respectively), but
# anyhow it clears up some doubts too.
-# From Paul Eggert (2006-12-27):
-# The following data for Chile and America/Santiago are from
+# From Paul Eggert (2014-08-12):
+# The following data entries for Chile and America/Santiago are from
# <http://www.horaoficial.cl/horaof.htm> (2006-09-20), transcribed by
-# Jesper Norgaard Welen. The data for Pacific/Easter are from Shanks
+# Jesper Nørgaard Welen. The data entries for Pacific/Easter are from Shanks
# & Pottenger, except with DST transitions after 1932 cloned from
-# America/Santiago. The pre-1980 Pacific/Easter data are dubious,
+# America/Santiago. The pre-1980 Pacific/Easter data entries are dubious,
# but we have no other source.
-# From German Poo-Caaman~o (2008-03-03):
+# From Germán Poo-Caamaño (2008-03-03):
# Due to drought, Chile extends Daylight Time in three weeks. This
# is one-time change (Saturday 3/29 at 24:00 for America/Santiago
# and Saturday 3/29 at 22:00 for Pacific/Easter)
# The Supreme Decree is located at
-# <a href="http://www.shoa.cl/servicios/supremo316.pdf">
# http://www.shoa.cl/servicios/supremo316.pdf
-# </a>
# and the instructions for 2008 are located in:
-# <a href="http://www.horaoficial.cl/cambio.htm">
# http://www.horaoficial.cl/cambio.htm
-# </a>.
-# From Jose Miguel Garrido (2008-03-05):
+# From José Miguel Garrido (2008-03-05):
# ...
# You could see the announces of the change on
-# <a href="http://www.shoa.cl/noticias/2008/04hora/hora.htm">
# http://www.shoa.cl/noticias/2008/04hora/hora.htm
-# </a>.
# From Angel Chiang (2010-03-04):
# Subject: DST in Chile exceptionally extended to 3 April due to earthquake
-# <a href="http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098">
# http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098
-# </a>
# (in Spanish, last paragraph).
#
# This is breaking news. There should be more information available later.
-# From Arthur Daivd Olson (2010-03-06):
+# From Arthur David Olson (2010-03-06):
# Angel Chiang's message confirmed by Julio Pacheco; Julio provided a patch.
-# From Glenn Eychaner (2011-03-02): [geychaner@mac.com]
+# From Glenn Eychaner (2011-03-02):
# It appears that the Chilean government has decided to postpone the
# change from summer time to winter time again, by three weeks to April
# 2nd:
-# <a href="http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651">
# http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651
-# </a>
#
# This is not yet reflected in the official "cambio de hora" site, but
# probably will be soon:
-# <a href="http://www.horaoficial.cl/cambio.htm">
# http://www.horaoficial.cl/cambio.htm
-# </a>
# From Arthur David Olson (2011-03-02):
# The emol.com article mentions a water shortage as the cause of the
@@ -1265,9 +1191,7 @@
# From Glenn Eychaner (2011-03-28):
# The article:
-# <a href="http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E}">
# http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E}
-# </a>
#
# In English:
# Chile's clocks will go back an hour this year on the 7th of May instead
@@ -1298,7 +1222,7 @@
# start date is 2013-09-08 00:00....
# http://www.gob.cl/informa/2013/02/15/gobierno-anuncia-fechas-de-cambio-de-hora-para-el-ano-2013.htm
-# From Jose Miguel Garrido (2014-02-19):
+# From José Miguel Garrido (2014-02-19):
# Today appeared in the Diario Oficial a decree amending the time change
# dates to 2014.
# DST End: last Saturday of April 2014 (Sun 27 Apr 2014 03:00 UTC)
@@ -1352,7 +1276,7 @@
# (1996-09) says 1998-03-08. Ignore these.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Santiago -4:42:46 - LMT 1890
- -4:42:46 - SMT 1910 # Santiago Mean Time
+ -4:42:46 - SMT 1910 # Santiago Mean Time
-5:00 - CLT 1916 Jul 1 # Chile Time
-4:42:46 - SMT 1918 Sep 1 # Santiago Mean Time
-4:00 - CLT 1919 Jul 1 # Chile Time
@@ -1361,16 +1285,16 @@
-4:00 Chile CL%sT
Zone Pacific/Easter -7:17:44 - LMT 1890
-7:17:28 - EMT 1932 Sep # Easter Mean Time
- -7:00 Chile EAS%sT 1982 Mar 13 21:00 # Easter I Time
+ -7:00 Chile EAS%sT 1982 Mar 13 21:00 # Easter Time
-6:00 Chile EAS%sT
#
-# Sala y Gomez Island is like Pacific/Easter.
-# Other Chilean locations, including Juan Fernandez Is, San Ambrosio,
-# San Felix, and Antarctic bases, are like America/Santiago.
+# Salas y Gómez Island is uninhabited.
+# Other Chilean locations, including Juan Fernández Is, Desventuradas Is,
+# and Antarctic bases, are like America/Santiago.
# Colombia
-# Milne gives 4:56:16.4 for Bogota time in 1899; round to nearest. He writes,
+# Milne gives 4:56:16.4 for Bogotá time in 1899; round to nearest. He writes,
# "A variation of fifteen minutes in the public clocks of Bogota is not rare."
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -1378,37 +1302,37 @@
Rule CO 1993 only - Apr 4 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Bogota -4:56:16 - LMT 1884 Mar 13
- -4:56:16 - BMT 1914 Nov 23 # Bogota Mean Time
+ -4:56:16 - BMT 1914 Nov 23 # Bogotá Mean Time
-5:00 CO CO%sT # Colombia Time
# Malpelo, Providencia, San Andres
# no information; probably like America/Bogota
-# Curacao
+# Curaçao
-# Milne gives 4:35:46.9 for Curacao mean time; round to nearest.
+# Milne gives 4:35:46.9 for Curaçao mean time; round to nearest.
#
# From Paul Eggert (2006-03-22):
# Shanks & Pottenger say that The Bottom and Philipsburg have been at
# -4:00 since standard time was introduced on 1912-03-02; and that
# Kralendijk and Rincon used Kralendijk Mean Time (-4:33:08) from
# 1912-02-02 to 1965-01-01. The former is dubious, since S&P also say
-# Saba Island has been like Curacao.
+# Saba Island has been like Curaçao.
# This all predates our 1970 cutoff, though.
#
-# By July 2007 Curacao and St Maarten are planned to become
+# By July 2007 Curaçao and St Maarten are planned to become
# associated states within the Netherlands, much like Aruba;
# Bonaire, Saba and St Eustatius would become directly part of the
# Netherlands as Kingdom Islands. This won't affect their time zones
# though, as far as we know.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Curacao -4:35:47 - LMT 1912 Feb 12 # Willemstad
+Zone America/Curacao -4:35:47 - LMT 1912 Feb 12 # Willemstad
-4:30 - ANT 1965 # Netherlands Antilles Time
-4:00 - AST
# From Arthur David Olson (2011-06-15):
# use links for places with new iso3166 codes.
-# The name "Lower Prince's Quarter" is both longer than fourteen charaters
+# The name "Lower Prince's Quarter" is both longer than fourteen characters
# and contains an apostrophe; use "Lower_Princes" below.
Link America/Curacao America/Lower_Princes # Sint Maarten
@@ -1416,7 +1340,7 @@
# Ecuador
#
-# Milne says the Sentral and South American Telegraph Company used -5:24:15.
+# Milne says the Central and South American Telegraph Company used -5:24:15.
#
# From Paul Eggert (2007-03-04):
# Apparently Ecuador had a failed experiment with DST in 1992.
@@ -1427,10 +1351,10 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Guayaquil -5:19:20 - LMT 1890
-5:14:00 - QMT 1931 # Quito Mean Time
- -5:00 - ECT # Ecuador Time
+ -5:00 - ECT # Ecuador Time
Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
-5:00 - ECT 1986
- -6:00 - GALT # Galapagos Time
+ -6:00 - GALT # Galápagos Time
# Falklands
@@ -1439,7 +1363,7 @@
# the IATA gives 1996-09-08. Go with Shanks & Pottenger.
# From Falkland Islands Government Office, London (2001-01-22)
-# via Jesper Norgaard:
+# via Jesper Nørgaard:
# ... the clocks revert back to Local Mean Time at 2 am on Sunday 15
# April 2001 and advance one hour to summer time at 2 am on Sunday 2
# September. It is anticipated that the clocks will revert back at 2
@@ -1488,9 +1412,7 @@
# daylight saving time.
#
# One source:
-# <a href="http://www.falklandnews.com/public/story.cfm?get=5914&source=3">
# http://www.falklandnews.com/public/story.cfm?get=5914&source=3
-# </a>
#
# We have gotten this confirmed by a clerk of the legislative assembly:
# Normally the clocks revert to Local Mean Time (UTC/GMT -4 hours) on the
@@ -1531,10 +1453,10 @@
Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/Stanley -3:51:24 - LMT 1890
- -3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
- -4:00 Falk FK%sT 1983 May # Falkland Is Time
+ -3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
+ -4:00 Falk FK%sT 1983 May # Falkland Is Time
-3:00 Falk FK%sT 1985 Sep 15
- -4:00 Falk FK%sT 2010 Sep 5 02:00
+ -4:00 Falk FK%sT 2010 Sep 5 2:00
-3:00 - FKST
# French Guiana
@@ -1545,7 +1467,7 @@
# Guyana
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown
+Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown
-3:45 - GBGT 1966 May 26 # Br Guiana Time
-3:45 - GYT 1975 Jul 31 # Guyana Time
-3:00 - GYT 1991
@@ -1555,8 +1477,8 @@
# Paraguay
#
# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger say that spring transitions are from 01:00 -> 02:00,
-# and autumn transitions are from 00:00 -> 23:00. Go with pre-1999
+# Shanks & Pottenger say that spring transitions are 01:00 -> 02:00,
+# and autumn transitions are 00:00 -> 23:00. Go with pre-1999
# editions of Shanks, and with the IATA, who say transitions occur at 00:00.
#
# From Waldemar Villamayor-Venialbo (2013-09-20):
@@ -1582,9 +1504,8 @@
# (10-01).
#
# Translated by Gwillim Law (2001-02-27) from
-# <a href="http://www.diarionoticias.com.py/011000/nacional/naciona1.htm">
-# Noticias, a daily paper in Asuncion, Paraguay (2000-10-01)
-# </a>:
+# Noticias, a daily paper in Asunción, Paraguay (2000-10-01):
+# http://www.diarionoticias.com.py/011000/nacional/naciona1.htm
# Starting at 0:00 today, the clock will be set forward 60 minutes, in
# fulfillment of Decree No. 7,273 of the Executive Power.... The time change
# system has been operating for several years. Formerly there was a separate
@@ -1605,21 +1526,18 @@
Rule Para 2002 2004 - Apr Sun>=1 0:00 0 -
Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 S
#
-# From Jesper Norgaard Welen (2005-01-02):
+# From Jesper Nørgaard Welen (2005-01-02):
# There are several sources that claim that Paraguay made
# a timezone rule change in autumn 2004.
# From Steffen Thorsen (2005-01-05):
# Decree 1,867 (2004-03-05)
-# From Carlos Raul Perasso via Jesper Norgaard Welen (2006-10-13)
-# <http://www.presidencia.gov.py/decretos/D1867.pdf>
+# From Carlos Raúl Perasso via Jesper Nørgaard Welen (2006-10-13)
+# http://www.presidencia.gov.py/decretos/D1867.pdf
Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 S
Rule Para 2005 2009 - Mar Sun>=8 0:00 0 -
-# From Carlos Raul Perasso (2010-02-18):
-# By decree number 3958 issued yesterday (
-# <a href="http://www.presidencia.gov.py/v1/wp-content/uploads/2010/02/decreto3958.pdf">
+# From Carlos Raúl Perasso (2010-02-18):
+# By decree number 3958 issued yesterday
# http://www.presidencia.gov.py/v1/wp-content/uploads/2010/02/decreto3958.pdf
-# </a>
-# )
# Paraguay changes its DST schedule, postponing the March rule to April and
# modifying the October date. The decree reads:
# ...
@@ -1635,25 +1553,25 @@
# Paraguay will end DST on 2013-03-24 00:00....
# http://www.ande.gov.py/interna.php?id=1075
#
-# From Carlos Raul Perasso (2013-03-15):
+# From Carlos Raúl Perasso (2013-03-15):
# The change in Paraguay is now final. Decree number 10780
# http://www.presidencia.gov.py/uploads/pdf/presidencia-3b86ff4b691c79d4f5927ca964922ec74772ce857c02ca054a52a37b49afc7fb.pdf
-# From Carlos Raul Perasso (2014-02-28):
+# From Carlos Raúl Perasso (2014-02-28):
# Decree 1264 can be found at:
# http://www.presidencia.gov.py/archivos/documentos/DECRETO1264_ey9r8zai.pdf
Rule Para 2013 max - Mar Sun>=22 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Asuncion -3:50:40 - LMT 1890
- -3:50:40 - AMT 1931 Oct 10 # Asuncion Mean Time
- -4:00 - PYT 1972 Oct # Paraguay Time
+ -3:50:40 - AMT 1931 Oct 10 # Asunción Mean Time
+ -4:00 - PYT 1972 Oct # Paraguay Time
-3:00 - PYT 1974 Apr
-4:00 Para PY%sT
# Peru
#
-# <a href="news:xrGmb.39935$gA1.13896113@news4.srv.hcvlny.cv.net">
-# From Evelyn C. Leeper via Mark Brader (2003-10-26):</a>
+# From Evelyn C. Leeper via Mark Brader (2003-10-26)
+# <news:xrGmb.39935$gA1.13896113@news4.srv.hcvlny.cv.net>:
# When we were in Peru in 1985-1986, they apparently switched over
# sometime between December 29 and January 3 while we were on the Amazon.
#
@@ -1679,7 +1597,7 @@
# South Georgia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
+Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
-2:00 - GST # South Georgia Time
# South Sandwich Is
@@ -1689,9 +1607,9 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Paramaribo -3:40:40 - LMT 1911
-3:40:52 - PMT 1935 # Paramaribo Mean Time
- -3:40:36 - PMT 1945 Oct # The capital moved?
+ -3:40:36 - PMT 1945 Oct # The capital moved?
-3:30 - NEGT 1975 Nov 20 # Dutch Guiana Time
- -3:30 - SRT 1984 Oct # Suriname Time
+ -3:30 - SRT 1984 Oct # Suriname Time
-3:00 - SRT
# Trinidad and Tobago
@@ -1706,7 +1624,7 @@
Link America/Port_of_Spain America/Guadeloupe
Link America/Port_of_Spain America/Marigot # St Martin (French part)
Link America/Port_of_Spain America/Montserrat
-Link America/Port_of_Spain America/St_Barthelemy
+Link America/Port_of_Spain America/St_Barthelemy # St Barthélemy
Link America/Port_of_Spain America/St_Kitts # St Kitts & Nevis
Link America/Port_of_Spain America/St_Lucia
Link America/Port_of_Spain America/St_Thomas # Virgin Islands (US)
@@ -1765,7 +1683,7 @@
Rule Uruguay 1992 only - Oct 18 0:00 1:00 S
Rule Uruguay 1993 only - Feb 28 0:00 0 -
# From Eduardo Cota (2004-09-20):
-# The uruguayan government has decreed a change in the local time....
+# The Uruguayan government has decreed a change in the local time....
# http://www.presidencia.gub.uy/decretos/2004091502.htm
Rule Uruguay 2004 only - Sep 19 0:00 1:00 S
# From Steffen Thorsen (2005-03-11):
@@ -1779,14 +1697,14 @@
# 02:00 local time, official time in Uruguay will be at GMT -2.
Rule Uruguay 2005 only - Oct 9 2:00 1:00 S
Rule Uruguay 2006 only - Mar 12 2:00 0 -
-# From Jesper Norgaard Welen (2006-09-06):
+# From Jesper Nørgaard Welen (2006-09-06):
# http://www.presidencia.gub.uy/_web/decretos/2006/09/CM%20210_08%2006%202006_00001.PDF
Rule Uruguay 2006 max - Oct Sun>=1 2:00 1:00 S
Rule Uruguay 2007 max - Mar Sun>=8 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28
- -3:44:44 - MMT 1920 May 1 # Montevideo MT
- -3:30 Uruguay UY%sT 1942 Dec 14 # Uruguay Time
+ -3:44:44 - MMT 1920 May 1 # Montevideo MT
+ -3:30 Uruguay UY%sT 1942 Dec 14 # Uruguay Time
-3:00 Uruguay UY%sT
# Venezuela
@@ -1794,14 +1712,14 @@
# From John Stainforth (2007-11-28):
# ... the change for Venezuela originally expected for 2007-12-31 has
# been brought forward to 2007-12-09. The official announcement was
-# published today in the "Gaceta Oficial de la Republica Bolivariana
-# de Venezuela, numero 38.819" (official document for all laws or
+# published today in the "Gaceta Oficial de la República Bolivariana
+# de Venezuela, número 38.819" (official document for all laws or
# resolution publication)
# http://www.globovision.com/news.php?nid=72208
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Caracas -4:27:44 - LMT 1890
-4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time?
- -4:30 - VET 1965 # Venezuela Time
- -4:00 - VET 2007 Dec 9 03:00
+ -4:30 - VET 1965 # Venezuela Time
+ -4:00 - VET 2007 Dec 9 3:00
-4:30 - VET
--- ./jdk/make/sun/javazic/tzdata/systemv Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/sun/javazic/tzdata/systemv Mon Jan 05 11:57:27 2015 -0800
@@ -21,7 +21,6 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
--- ./jdk/make/sun/javazic/tzdata/zone.tab Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/sun/javazic/tzdata/zone.tab Mon Jan 05 11:57:27 2015 -0800
@@ -21,39 +21,27 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-# TZ zone descriptions
+# tz zone descriptions (deprecated version)
#
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
#
-# From Paul Eggert (2013-08-14):
+# From Paul Eggert (2014-07-31):
+# This file is intended as a backward-compatibility aid for older programs.
+# New programs should use zone1970.tab. This file is like zone1970.tab (see
+# zone1970.tab's comments), but with the following additional restrictions:
#
-# This file contains a table where each row stands for an area that is
-# the intersection of a region identified by a country code and of a
-# zone where civil clocks have agreed since 1970. The columns of the
-# table are as follows:
+# 1. This file contains only ASCII characters.
+# 2. The first data column contains exactly one country code.
#
-# 1. ISO 3166 2-character country code. See the file 'iso3166.tab'.
-# 2. Latitude and longitude of the area's principal location
-# in ISO 6709 sign-degrees-minutes-seconds format,
-# either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
-# first latitude (+ is north), then longitude (+ is east).
-# 3. Zone name used in value of TZ environment variable.
-# Please see the 'Theory' file for how zone names are chosen.
-# If multiple zones overlap a country, each has a row in the
-# table, with column 1 being duplicated.
-# 4. Comments; present if and only if the country has multiple rows.
-#
-# Columns are separated by a single tab.
-# The table is sorted first by country, then an order within the country that
-# (1) makes some geographical sense, and
-# (2) puts the most populous areas first, where that does not contradict (1).
-#
-# Lines beginning with '#' are comments.
+# Because of (2), each row stands for an area that is the intersection
+# of a region identified by a country code and of a zone where civil
+# clocks have agreed since 1970; this is a narrower definition than
+# that of zone1970.tab.
#
# This table is intended as an aid for users, to help them select time
-# zone data appropriate for their practical needs. It is not intended
-# to take or endorse any position on legal or territorial claims.
+# zone data entries appropriate for their practical needs. It is not
+# intended to take or endorse any position on legal or territorial claims.
#
#country-
#code coordinates TZ comments
@@ -72,7 +60,7 @@
AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills
AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula
AQ -7824+10654 Antarctica/Vostok Vostok Station, Lake Vostok
-AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Terre Adelie
+AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Adelie Land
AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I
AQ -720041+0023206 Antarctica/Troll Troll Station, Queen Maud Land
AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF)
@@ -151,7 +139,7 @@
CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario
CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations
CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut
-CA +744144-0944945 America/Resolute Central Standard Time - Resolute, Nunavut
+CA +744144-0944945 America/Resolute Central Time - Resolute, Nunavut
CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut
CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario
@@ -176,13 +164,10 @@
CI +0519-00402 Africa/Abidjan
CK -2114-15946 Pacific/Rarotonga
CL -3327-07040 America/Santiago most locations
-CL -2709-10926 Pacific/Easter Easter Island & Sala y Gomez
+CL -2709-10926 Pacific/Easter Easter Island
CM +0403+00942 Africa/Douala
-CN +3114+12128 Asia/Shanghai east China - Beijing, Guangdong, Shanghai, etc.
-CN +4545+12641 Asia/Harbin Heilongjiang (except Mohe), Jilin
-CN +2934+10635 Asia/Chongqing central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.
-CN +4348+08735 Asia/Urumqi most of Tibet & Xinjiang
-CN +3929+07559 Asia/Kashgar west Tibet & Xinjiang
+CN +3114+12128 Asia/Shanghai Beijing Time
+CN +4348+08735 Asia/Urumqi Xinjiang Time
CO +0436-07405 America/Bogota
CR +0956-08405 America/Costa_Rica
CU +2308-08222 America/Havana
@@ -345,7 +330,8 @@
PF -1732-14934 Pacific/Tahiti Society Islands
PF -0900-13930 Pacific/Marquesas Marquesas Islands
PF -2308-13457 Pacific/Gambier Gambier Islands
-PG -0930+14710 Pacific/Port_Moresby
+PG -0930+14710 Pacific/Port_Moresby most locations
+PG -0613+15534 Pacific/Bougainville Bougainville
PH +1435+12100 Asia/Manila
PK +2452+06703 Asia/Karachi
PL +5215+02100 Europe/Warsaw
@@ -364,24 +350,26 @@
RO +4426+02606 Europe/Bucharest
RS +4450+02030 Europe/Belgrade
RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad
-RU +5545+03735 Europe/Moscow Moscow+00 - west Russia
+RU +554521+0373704 Europe/Moscow Moscow+00 - west Russia
+RU +4457+03406 Europe/Simferopol Moscow+00 - Crimea
RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea
-RU +5312+05009 Europe/Samara Moscow+00 - Samara, Udmurtia
-RU +4457+03406 Europe/Simferopol Moscow+00 - Crimea
+RU +5312+05009 Europe/Samara Moscow+00 (Moscow+01 after 2014-10-26) - Samara, Udmurtia
RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals
RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia
RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk
-RU +5345+08707 Asia/Novokuznetsk Moscow+03 - Novokuznetsk
+RU +5345+08707 Asia/Novokuznetsk Moscow+03 (Moscow+04 after 2014-10-26) - Kemerovo
RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River
RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal
+RU +5203+11328 Asia/Chita Moscow+06 (Moscow+05 after 2014-10-26) - Zabaykalsky
RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River
RU +623923+1353314 Asia/Khandyga Moscow+06 - Tomponsky, Ust-Maysky
RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River
RU +4658+14242 Asia/Sakhalin Moscow+07 - Sakhalin Island
RU +643337+1431336 Asia/Ust-Nera Moscow+07 - Oymyakonsky
-RU +5934+15048 Asia/Magadan Moscow+08 - Magadan
-RU +5301+15839 Asia/Kamchatka Moscow+08 - Kamchatka
-RU +6445+17729 Asia/Anadyr Moscow+08 - Bering Sea
+RU +5934+15048 Asia/Magadan Moscow+08 (Moscow+07 after 2014-10-26) - Magadan
+RU +6728+15343 Asia/Srednekolymsk Moscow+08 - E Sakha, N Kuril Is
+RU +5301+15839 Asia/Kamchatka Moscow+08 (Moscow+09 after 2014-10-26) - Kamchatka
+RU +6445+17729 Asia/Anadyr Moscow+08 (Moscow+09 after 2014-10-26) - Bering Sea
RW -0157+03004 Africa/Kigali
SA +2438+04643 Asia/Riyadh
SB -0932+16012 Pacific/Guadalcanal
@@ -448,13 +436,13 @@
US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon
US +332654-1120424 America/Phoenix Mountain Standard Time - Arizona (except Navajo)
US +340308-1181434 America/Los_Angeles Pacific Time
+US +550737-1313435 America/Metlakatla Pacific Standard Time - Annette Island, Alaska
US +611305-1495401 America/Anchorage Alaska Time
US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle
US +571035-1351807 America/Sitka Alaska Time - southeast Alaska panhandle
US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck
US +643004-1652423 America/Nome Alaska Time - west Alaska
US +515248-1763929 America/Adak Aleutian Islands
-US +550737-1313435 America/Metlakatla Metlakatla Time - Annette Island
US +211825-1575130 Pacific/Honolulu Hawaii
UY -3453-05611 America/Montevideo
UZ +3940+06648 Asia/Samarkand west Uzbekistan
--- ./jdk/make/sun/security/krb5/Makefile Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/sun/security/krb5/Makefile Mon Jan 05 11:57:27 2015 -0800
@@ -92,7 +92,7 @@
OTHER_LDLIBS = $(LIBDL) $(JVMLIB)
endif
-build:
+all:
ifeq ($(PLATFORM),windows)
$(call make-launcher, kinit, sun.security.krb5.internal.tools.Kinit, , )
$(call make-launcher, klist, sun.security.krb5.internal.tools.Klist, , )
--- ./jdk/make/tools/src/build/tools/generatecurrencydata/GenerateCurrencyData.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/make/tools/src/build/tools/generatecurrencydata/GenerateCurrencyData.java Mon Jan 05 11:57:27 2015 -0800
@@ -281,8 +281,8 @@
checkCurrencyCode(newCurrency);
String timeString = currencyInfo.substring(4, length - 4);
long time = format.parse(timeString).getTime();
- if (Math.abs(time - System.currentTimeMillis()) > ((long) 10) * 365 * 24 * 60 * 60 * 1000) {
- throw new RuntimeException("time is more than 10 years from present: " + time);
+ if (Math.abs(time - System.currentTimeMillis()) > ((long) 20) * 365 * 24 * 60 * 60 * 1000) {
+ throw new RuntimeException("time is more than 10 years from present: " + time + " " + timeString + " " + currencyInfo);
}
specialCaseCutOverTimes[specialCaseCount] = time;
specialCaseOldCurrencies[specialCaseCount] = oldCurrency;
--- ./jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java Mon Jan 05 11:57:27 2015 -0800
@@ -755,7 +755,7 @@
public void notifyNCMouseDown() {
// Ungrab except for a click on a Dialog with the grabbing owner
if (grabbingWindow != null &&
- grabbingWindow != getOwnerFrameDialog(this))
+ !grabbingWindow.isOneOfOwnersOf(this))
{
grabbingWindow.ungrab();
}
@@ -851,7 +851,7 @@
// Ungrab only if this window is not an owned window of the grabbing one.
if (!isGrabbing() && grabbingWindow != null &&
- grabbingWindow != getOwnerFrameDialog(this))
+ !grabbingWindow.isOneOfOwnersOf(this))
{
grabbingWindow.ungrab();
}
@@ -1321,6 +1321,17 @@
return !(window instanceof Dialog || window instanceof Frame);
}
+ private boolean isOneOfOwnersOf(LWWindowPeer peer) {
+ Window owner = (peer != null ? peer.getTarget().getOwner() : null);
+ while (owner != null) {
+ if ((LWWindowPeer)owner.getPeer() == this) {
+ return true;
+ }
+ owner = owner.getOwner();
+ }
+ return false;
+ }
+
/*
* Changes focused window on java level.
*/
@@ -1352,7 +1363,7 @@
// - when the opposite (gaining focus) window is an owned/owner window.
// - for a simple window in any case.
if (!becomesFocused &&
- (isGrabbing() || getOwnerFrameDialog(grabbingWindow) == this))
+ (isGrabbing() || this.isOneOfOwnersOf(grabbingWindow)))
{
focusLog.fine("ungrabbing on " + grabbingWindow);
// ungrab a simple window if its owner looses activation.
@@ -1369,6 +1380,11 @@
postEvent(windowEvent);
}
+ /*
+ * Retrieves the owner of the peer.
+ * Note: this method returns the owner which can be activated, (i.e. the instance
+ * of Frame or Dialog may be returned).
+ */
static LWWindowPeer getOwnerFrameDialog(LWWindowPeer peer) {
Window owner = (peer != null ? peer.getTarget().getOwner() : null);
while (owner != null && !(owner instanceof Frame || owner instanceof Dialog)) {
--- ./jdk/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java Mon Jan 05 11:57:27 2015 -0800
@@ -39,7 +39,8 @@
private CPlatformResponder responder;
private static final Object classLock = new Object();
- private static volatile CEmbeddedFrame focusedWindow;
+ private static volatile CEmbeddedFrame globalFocusedWindow;
+ private CEmbeddedFrame browserWindowFocusedApplet;
private boolean parentWindowActive = true;
public CEmbeddedFrame() {
@@ -98,7 +99,8 @@
public void handleKeyEvent(int eventType, int modifierFlags, String characters,
String charsIgnoringMods, boolean isRepeat, short keyCode,
boolean needsKeyTyped) {
- responder.handleKeyEvent(eventType, modifierFlags, charsIgnoringMods, keyCode, needsKeyTyped, isRepeat);
+ responder.handleKeyEvent(eventType, modifierFlags, characters, charsIgnoringMods,
+ keyCode, needsKeyTyped, isRepeat);
}
// REMIND: delete this method once 'deploy' changes for 7156194 is pushed
@@ -117,10 +119,10 @@
synchronized (classLock) {
// In some cases an applet may not receive the focus lost event
// from the parent window (see 8012330)
- focusedWindow = (focused) ? this
- : ((focusedWindow == this) ? null : focusedWindow);
+ globalFocusedWindow = (focused) ? this
+ : ((globalFocusedWindow == this) ? null : globalFocusedWindow);
}
- if (focusedWindow == this) {
+ if (globalFocusedWindow == this) {
// see bug 8010925
// we can't put this to handleWindowFocusEvent because
// it won't be invoced if focuse is moved to a html element
@@ -150,9 +152,23 @@
*/
public void handleWindowFocusEvent(boolean parentWindowActive) {
this.parentWindowActive = parentWindowActive;
+ // If several applets are running in different browser's windows, it is necessary to
+ // detect the switching between the parent windows and update globalFocusedWindow accordingly.
+ synchronized (classLock) {
+ if (!parentWindowActive) {
+ this.browserWindowFocusedApplet = globalFocusedWindow;
+ }
+ if (parentWindowActive && globalFocusedWindow != this && isParentWindowChanged()) {
+ // It looks like we have switched to another browser window, let's restore focus to
+ // the previously focused applet in this window. If no applets were focused in the
+ // window, we will set focus to the first applet in the window.
+ globalFocusedWindow = (this.browserWindowFocusedApplet != null) ? this.browserWindowFocusedApplet
+ : this;
+ }
+ }
// ignore focus "lost" native request as it may mistakenly
// deactivate active window (see 8001161)
- if (focusedWindow == this && parentWindowActive) {
+ if (globalFocusedWindow == this && parentWindowActive) {
responder.handleWindowFocusEvent(parentWindowActive, null);
}
}
@@ -160,4 +176,10 @@
public boolean isParentWindowActive() {
return parentWindowActive;
}
+
+ private boolean isParentWindowChanged() {
+ // If globalFocusedWindow is located at inactive parent window or null, we have swithed to
+ // another window.
+ return globalFocusedWindow != null ? !globalFocusedWindow.isParentWindowActive() : true;
+ }
}
--- ./jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java Mon Jan 05 11:57:27 2015 -0800
@@ -126,7 +126,7 @@
/**
* Handles key events.
*/
- void handleKeyEvent(int eventType, int modifierFlags, String chars,
+ void handleKeyEvent(int eventType, int modifierFlags, String chars, String charsIgnoringModifiers,
short keyCode, boolean needsKeyTyped, boolean needsKeyReleased) {
boolean isFlagsChangedEvent =
isNpapiCallback ? (eventType == CocoaConstants.NPCocoaEventFlagsChanged) :
@@ -154,7 +154,10 @@
testChar = chars.charAt(0);
}
- int[] in = new int[] {testChar, isDeadChar ? 1 : 0, modifierFlags, keyCode};
+ char testCharIgnoringModifiers = charsIgnoringModifiers != null && charsIgnoringModifiers.length() > 0 ?
+ charsIgnoringModifiers.charAt(0) : KeyEvent.CHAR_UNDEFINED;
+
+ int[] in = new int[] {testCharIgnoringModifiers, isDeadChar ? 1 : 0, modifierFlags, keyCode};
int[] out = new int[3]; // [jkeyCode, jkeyLocation, deadChar]
postsTyped = NSEvent.nsToJavaKeyInfo(in, out);
--- ./jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java Mon Jan 05 11:57:27 2015 -0800
@@ -227,7 +227,7 @@
}
private void deliverKeyEvent(NSEvent event) {
- responder.handleKeyEvent(event.getType(), event.getModifierFlags(),
+ responder.handleKeyEvent(event.getType(), event.getModifierFlags(), event.getCharacters(),
event.getCharactersIgnoringModifiers(), event.getKeyCode(), true, false);
}
--- ./jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Mon Jan 05 11:57:27 2015 -0800
@@ -118,6 +118,7 @@
static final int NONACTIVATING = 1 << 24;
static final int IS_DIALOG = 1 << 25;
static final int IS_MODAL = 1 << 26;
+ static final int IS_POPUP = 1 << 27;
static final int _STYLE_PROP_BITMASK = DECORATED | TEXTURED | UNIFIED | UTILITY | HUD | SHEET | CLOSEABLE | MINIMIZABLE | RESIZABLE;
@@ -308,6 +309,7 @@
styleBits = SET(styleBits, TEXTURED, false);
// Popups in applets don't activate applet's process
styleBits = SET(styleBits, NONACTIVATING, true);
+ styleBits = SET(styleBits, IS_POPUP, true);
}
if (Window.Type.UTILITY.equals(target.getType())) {
--- ./jdk/src/macosx/classes/sun/lwawt/macosx/event/NSEvent.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/macosx/classes/sun/lwawt/macosx/event/NSEvent.java Mon Jan 05 11:57:27 2015 -0800
@@ -48,12 +48,14 @@
// Key event information
private short keyCode;
+ private String characters;
private String charactersIgnoringModifiers;
- public NSEvent(int type, int modifierFlags, short keyCode, String charactersIgnoringModifiers) {
+ public NSEvent(int type, int modifierFlags, short keyCode, String characters, String charactersIgnoringModifiers) {
this.type = type;
this.modifierFlags = modifierFlags;
this.keyCode = keyCode;
+ this.characters = characters;
this.charactersIgnoringModifiers = charactersIgnoringModifiers;
}
@@ -120,12 +122,16 @@
return charactersIgnoringModifiers;
}
+ public String getCharacters() {
+ return characters;
+ }
+
@Override
public String toString() {
return "NSEvent[" + getType() + " ," + getModifierFlags() + " ,"
+ getClickCount() + " ," + getButtonNumber() + " ," + getX() + " ,"
+ getY() + " ," + getAbsX() + " ," + getAbsY()+ " ," + getKeyCode() + " ,"
- + getCharactersIgnoringModifiers() + "]";
+ + getCharacters() + " ," + getCharactersIgnoringModifiers() + "]";
}
/*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/src/macosx/classes/sun/nio/ch/SctpChannelImpl.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,150 @@
+/*
+ * Copyright (c) 2009, 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. 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.
+ */
+package sun.nio.ch;
+
+import java.net.SocketAddress;
+import java.net.InetAddress;
+import java.io.IOException;
+import java.util.Set;
+import java.nio.ByteBuffer;
+import java.nio.channels.spi.SelectorProvider;
+import com.sun.nio.sctp.Association;
+import com.sun.nio.sctp.MessageInfo;
+import com.sun.nio.sctp.NotificationHandler;
+import com.sun.nio.sctp.SctpChannel;
+import com.sun.nio.sctp.SctpSocketOption;
+
+/**
+ * Unimplemented.
+ */
+public class SctpChannelImpl extends SctpChannel
+{
+ private static final String message = "SCTP not supported on this platform";
+
+ public SctpChannelImpl(SelectorProvider provider) {
+ super(provider);
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Association association() {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpChannel bind(SocketAddress local)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpChannel bindAddress(InetAddress address)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpChannel unbindAddress(InetAddress address)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public boolean connect(SocketAddress remote) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public boolean connect(SocketAddress remote, int maxOutStreams,
+ int maxInStreams) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public boolean isConnectionPending() {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public boolean finishConnect() throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<SocketAddress> getAllLocalAddresses()
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<SocketAddress> getRemoteAddresses()
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpChannel shutdown() throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public <T> T getOption(SctpSocketOption<T> name)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public <T> SctpChannel setOption(SctpSocketOption<T> name, T value)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<SctpSocketOption<?>> supportedOptions() {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public <T> MessageInfo receive(ByteBuffer dst, T attachment,
+ NotificationHandler<T> handler) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public int send(ByteBuffer src, MessageInfo messageInfo)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ protected void implConfigureBlocking(boolean block) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public void implCloseSelectableChannel() throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/src/macosx/classes/sun/nio/ch/SctpMultiChannelImpl.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2009, 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. 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.
+ */
+package sun.nio.ch;
+
+import java.net.SocketAddress;
+import java.net.InetAddress;
+import java.io.IOException;
+import java.util.Set;
+import java.nio.ByteBuffer;
+import java.nio.channels.spi.SelectorProvider;
+import com.sun.nio.sctp.Association;
+import com.sun.nio.sctp.SctpChannel;
+import com.sun.nio.sctp.MessageInfo;
+import com.sun.nio.sctp.NotificationHandler;
+import com.sun.nio.sctp.SctpMultiChannel;
+import com.sun.nio.sctp.SctpSocketOption;
+
+/**
+ * Unimplemented.
+ */
+public class SctpMultiChannelImpl extends SctpMultiChannel
+{
+ private static final String message = "SCTP not supported on this platform";
+
+ public SctpMultiChannelImpl(SelectorProvider provider) {
+ super(provider);
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<Association> associations() {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpMultiChannel bind(SocketAddress local,
+ int backlog) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpMultiChannel bindAddress(InetAddress address)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpMultiChannel unbindAddress(InetAddress address)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<SocketAddress> getAllLocalAddresses()
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<SocketAddress> getRemoteAddresses
+ (Association association) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpMultiChannel shutdown(Association association)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public <T> T getOption(SctpSocketOption<T> name,
+ Association association) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public <T> SctpMultiChannel setOption(SctpSocketOption<T> name,
+ T value, Association association) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<SctpSocketOption<?>> supportedOptions() {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public <T> MessageInfo receive(ByteBuffer buffer, T attachment,
+ NotificationHandler<T> handler) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public int send(ByteBuffer buffer, MessageInfo messageInfo)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpChannel branch(Association association)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ protected void implConfigureBlocking(boolean block) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public void implCloseSelectableChannel() throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/src/macosx/classes/sun/nio/ch/SctpServerChannelImpl.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2009, 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. 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.
+ */
+package sun.nio.ch;
+
+import java.net.SocketAddress;
+import java.net.InetAddress;
+import java.io.IOException;
+import java.util.Set;
+import java.nio.channels.spi.SelectorProvider;
+import com.sun.nio.sctp.SctpChannel;
+import com.sun.nio.sctp.SctpServerChannel;
+import com.sun.nio.sctp.SctpSocketOption;
+
+/**
+ * Unimplemented.
+ */
+public class SctpServerChannelImpl extends SctpServerChannel
+{
+ private static final String message = "SCTP not supported on this platform";
+
+ public SctpServerChannelImpl(SelectorProvider provider) {
+ super(provider);
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpChannel accept() throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpServerChannel bind(SocketAddress local,
+ int backlog) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpServerChannel bindAddress(InetAddress address)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpServerChannel unbindAddress(InetAddress address)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<SocketAddress> getAllLocalAddresses()
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public <T> T getOption(SctpSocketOption<T> name) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public <T> SctpServerChannel setOption(SctpSocketOption<T> name,
+ T value) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<SctpSocketOption<?>> supportedOptions() {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ protected void implConfigureBlocking(boolean block) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public void implCloseSelectableChannel() throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+}
--- ./jdk/src/macosx/native/sun/awt/AWTView.m Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/macosx/native/sun/awt/AWTView.m Mon Jan 05 11:57:27 2015 -0800
@@ -421,17 +421,20 @@
JNIEnv *env = [ThreadUtilities getJNIEnv];
jstring characters = NULL;
+ jstring charactersIgnoringModifiers = NULL;
if ([event type] != NSFlagsChanged) {
characters = JNFNSToJavaString(env, [event characters]);
+ charactersIgnoringModifiers = JNFNSToJavaString(env, [event charactersIgnoringModifiers]);
}
static JNF_CLASS_CACHE(jc_NSEvent, "sun/lwawt/macosx/event/NSEvent");
- static JNF_CTOR_CACHE(jctor_NSEvent, jc_NSEvent, "(IISLjava/lang/String;)V");
+ static JNF_CTOR_CACHE(jctor_NSEvent, jc_NSEvent, "(IISLjava/lang/String;Ljava/lang/String;)V");
jobject jevent = JNFNewObject(env, jctor_NSEvent,
[event type],
[event modifierFlags],
[event keyCode],
- characters);
+ characters,
+ charactersIgnoringModifiers);
static JNF_CLASS_CACHE(jc_PlatformView, "sun/lwawt/macosx/CPlatformView");
static JNF_MEMBER_CACHE(jm_deliverKeyEvent, jc_PlatformView,
--- ./jdk/src/macosx/native/sun/awt/AWTWindow.m Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/macosx/native/sun/awt/AWTWindow.m Mon Jan 05 11:57:27 2015 -0800
@@ -307,6 +307,10 @@
[self adjustGrowBoxWindow];
} else growBoxWindow = nil;
+ if (IS(self.styleBits, IS_POPUP)) {
+ [self.nsWindow setCollectionBehavior:(1 << 8) /*NSWindowCollectionBehaviorFullScreenAuxiliary*/];
+ }
+
return self;
}
@@ -316,7 +320,8 @@
// return id for the topmost window under mouse
+ (NSInteger) getTopmostWindowUnderMouseID {
-
+ NSInteger result = -1;
+
NSRect screenRect = [[NSScreen mainScreen] frame];
NSPoint nsMouseLocation = [NSEvent mouseLocation];
CGPoint cgMouseLocation = CGPointMake(nsMouseLocation.x, screenRect.size.height - nsMouseLocation.y);
@@ -330,11 +335,13 @@
CGRect rect;
CGRectMakeWithDictionaryRepresentation((CFDictionaryRef)[window objectForKey:(id)kCGWindowBounds], &rect);
if (CGRectContainsPoint(rect, cgMouseLocation)) {
- return [[window objectForKey:(id)kCGWindowNumber] integerValue];
+ result = [[window objectForKey:(id)kCGWindowNumber] integerValue];
+ break;
}
}
}
- return -1;
+ [windows release];
+ return result;
}
// checks that this window is under the mouse cursor and this point is not overlapped by other windows
--- ./jdk/src/macosx/native/sun/awt/JavaComponentAccessibility.m Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/macosx/native/sun/awt/JavaComponentAccessibility.m Mon Jan 05 11:57:27 2015 -0800
@@ -256,11 +256,15 @@
jsize count = [ignoredKeys count];
JNIEnv *env = [ThreadUtilities getJNIEnv];
- jclass clazz = (*env)->FindClass(env, "java/lang/String");
- result = (*env)->NewObjectArray(env, count, clazz, NULL); // AWT_THREADING Safe (known object)
- (*env)->DeleteLocalRef(env, clazz);
- NSUInteger i;
+ static JNF_CLASS_CACHE(jc_String, "java/lang/String");
+ result = JNFNewObjectArray(env, &jc_String, count);
+ if (!result) {
+ NSLog(@"In %s, can't create Java array of String objects", __FUNCTION__);
+ return;
+ }
+
+ NSInteger i;
for (i = 0; i < count; i++) {
jstring jString = JNFNSToJavaString(env, [ignoredKeys objectAtIndex:i]);
(*env)->SetObjectArrayElement(env, result, i, jString);
@@ -295,7 +299,7 @@
jsize arrayLen = (*env)->GetArrayLength(env, jchildrenAndRoles);
NSMutableArray *children = [NSMutableArray arrayWithCapacity:arrayLen/2]; //childrenAndRoles array contains two elements (child, role) for each child
- NSUInteger i;
+ NSInteger i;
NSUInteger childIndex = (whichChildren >= 0) ? whichChildren : 0; // if we're getting one particular child, make sure to set its index correctly
for(i = 0; i < arrayLen; i+=2)
{
@@ -391,8 +395,13 @@
// Get all the other accessibility attributes states we need in one swell foop.
// javaRole isn't pulled in because we need protected access to AccessibleRole.key
jbooleanArray attributeStates = JNFCallStaticObjectMethod(env, jm_getInitialAttributeStates, fAccessible, fComponent); // AWT_THREADING Safe (AWTRunLoop)
- if (attributeStates == NULL) return NULL;
+ if (attributeStates == NULL) return nil;
jboolean *attributeStatesArray = (*env)->GetBooleanArrayElements(env, attributeStates, 0);
+ if (attributeStatesArray == NULL) {
+ // Note: Java will not be on the stack here so a java exception can't happen and no need to call ExceptionCheck.
+ NSLog(@"%s failed calling GetBooleanArrayElements", __FUNCTION__);
+ return nil;
+ }
// if there's a component, it can be enabled and it has a size/position
if (attributeStatesArray[0]) {
@@ -1113,7 +1122,9 @@
JNIEnv *env = [ThreadUtilities getJNIEnv];
id value = nil;
+ NSWindow* hostWindow = [[self->fView window] retain];
jobject focused = JNFCallStaticObjectMethod(env, jm_getFocusOwner, fComponent); // AWT_THREADING Safe (AWTRunLoop)
+ [hostWindow release];
if (focused != NULL) {
if (JNFIsInstanceOf(env, focused, &sjc_Accessible)) {
value = [JavaComponentAccessibility createWithAccessible:focused withEnv:env withView:fView];
@@ -1220,7 +1231,7 @@
// Go through the tabs and find selAccessible
_numTabs = [tabs count];
JavaComponentAccessibility *aTab;
- NSUInteger i;
+ NSInteger i;
for (i = 0; i < _numTabs; i++) {
aTab = (JavaComponentAccessibility *)[tabs objectAtIndex:i];
if ([aTab isAccessibleWithEnv:env forAccessible:selAccessible]) {
@@ -1247,7 +1258,7 @@
NSString *tabJavaRole = JNFJavaToNSString(env, JNFGetObjectField(env, jtabJavaRole, sjf_key));
- NSUInteger i;
+ NSInteger i;
NSUInteger tabIndex = (whichTabs >= 0) ? whichTabs : 0; // if we're getting one particular child, make sure to set its index correctly
for(i = 0; i < arrayLen; i+=2) {
jobject jtab = (*env)->GetObjectArrayElement(env, jtabsAndRoles, i);
--- ./jdk/src/macosx/native/sun/awt/JavaTextAccessibility.m Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/macosx/native/sun/awt/JavaTextAccessibility.m Mon Jan 05 11:57:27 2015 -0800
@@ -40,6 +40,11 @@
*/
NSValue *javaIntArrayToNSRangeValue(JNIEnv* env, jintArray array) {
jint *values = (*env)->GetIntArrayElements(env, array, 0);
+ if (values == NULL) {
+ // Note: Java will not be on the stack here so a java exception can't happen and no need to call ExceptionCheck.
+ NSLog(@"%s failed calling GetIntArrayElements", __FUNCTION__);
+ return nil;
+ };
NSValue *value = [NSValue valueWithRange:NSMakeRange(values[0], values[1] - values[0])];
(*env)->ReleaseIntArrayElements(env, array, values, 0);
return value;
@@ -285,6 +290,11 @@
// We cheat because we know that the array is 4 elements long (x, y, width, height)
jdouble *values = (*env)->GetDoubleArrayElements(env, axBounds, 0);
+ if (values == NULL) {
+ // Note: Java will not be on the stack here so a java exception can't happen and no need to call ExceptionCheck.
+ NSLog(@"%s failed calling GetDoubleArrayElements", __FUNCTION__);
+ return nil;
+ };
NSRect bounds;
bounds.origin.x = values[0];
bounds.origin.y = [[[[self view] window] screen] frame].size.height - values[1] - values[3]; //values[1] is y-coord from top-left of screen. Flip. Account for the height (values[3]) when flipping
--- ./jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java Mon Jan 05 11:57:27 2015 -0800
@@ -106,20 +106,6 @@
}
}
- private static String convertToStandardName(String internalName) {
- if (internalName.equals("SHA")) {
- return "SHA-1";
- } else if (internalName.equals("SHA256")) {
- return "SHA-256";
- } else if (internalName.equals("SHA384")) {
- return "SHA-384";
- } else if (internalName.equals("SHA512")) {
- return "SHA-512";
- } else {
- return internalName;
- }
- }
-
protected void engineInit(byte[] encoded)
throws IOException {
DerInputStream der = new DerInputStream(encoded);
@@ -131,7 +117,7 @@
DerValue data = datum[i];
if (data.isContextSpecific((byte) 0x00)) {
// hash algid
- mdName = convertToStandardName(AlgorithmId.parse
+ mdName = AlgorithmId.getStandardDigestName(AlgorithmId.parse
(data.data.getDerValue()).getName());
} else if (data.isContextSpecific((byte) 0x01)) {
// mgf algid
@@ -141,7 +127,8 @@
}
AlgorithmId params = AlgorithmId.parse(
new DerValue(val.getEncodedParams()));
- String mgfDigestName = convertToStandardName(params.getName());
+ String mgfDigestName = AlgorithmId.getStandardDigestName(
+ params.getName());
if (mgfDigestName.equals("SHA-1")) {
mgfSpec = MGF1ParameterSpec.SHA1;
} else if (mgfDigestName.equals("SHA-256")) {
--- ./jdk/src/share/classes/com/sun/imageio/plugins/png/PNGMetadata.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/imageio/plugins/png/PNGMetadata.java Mon Jan 05 11:57:27 2015 -0800
@@ -1256,8 +1256,11 @@
if (name.equals("IHDR")) {
IHDR_width = getIntAttribute(node, "width");
IHDR_height = getIntAttribute(node, "height");
- IHDR_bitDepth = getEnumeratedAttribute(node, "bitDepth",
- IHDR_bitDepths);
+ IHDR_bitDepth =
+ Integer.valueOf(IHDR_bitDepths[
+ getEnumeratedAttribute(node,
+ "bitDepth",
+ IHDR_bitDepths)]);
IHDR_colorType = getEnumeratedAttribute(node, "colorType",
IHDR_colorTypeNames);
IHDR_compressionMethod =
--- ./jdk/src/share/classes/com/sun/java/swing/SwingUtilities3.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/SwingUtilities3.java Mon Jan 05 11:57:27 2015 -0800
@@ -27,6 +27,8 @@
import sun.awt.EventQueueDelegate;
import sun.awt.AppContext;
+import sun.awt.SunToolkit;
+
import java.util.Collections;
import java.util.Map;
import java.util.WeakHashMap;
@@ -117,8 +119,8 @@
public static RepaintManager getDelegateRepaintManager(Component
component) {
RepaintManager delegate = null;
- if (Boolean.TRUE == AppContext.getAppContext().get(
- DELEGATE_REPAINT_MANAGER_KEY)) {
+ if (Boolean.TRUE == SunToolkit.targetToAppContext(component)
+ .get(DELEGATE_REPAINT_MANAGER_KEY)) {
while (delegate == null && component != null) {
while (component != null
&& ! (component instanceof JComponent)) {
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/AnimationController.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/AnimationController.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 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
@@ -130,11 +130,14 @@
//one second seems plausible value
duration = 1000;
} else {
- duration = XPStyle.getXP().getThemeTransitionDuration(
- c, part,
- normalizeState(oldState),
- normalizeState(newState),
- Prop.TRANSITIONDURATIONS);
+ XPStyle xp = XPStyle.getXP();
+ duration = (xp != null)
+ ? xp.getThemeTransitionDuration(
+ c, part,
+ normalizeState(oldState),
+ normalizeState(newState),
+ Prop.TRANSITIONDURATIONS)
+ : 1000;
}
controller.startAnimation(c, part, oldState, newState, duration);
}
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsComboBoxUI.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsComboBoxUI.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, 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
@@ -37,6 +37,7 @@
import static com.sun.java.swing.plaf.windows.TMSchema.Part;
import static com.sun.java.swing.plaf.windows.TMSchema.State;
import static com.sun.java.swing.plaf.windows.XPStyle.Skin;
+
import sun.swing.DefaultLookup;
import sun.swing.StringUIClientPropertyKey;
@@ -231,6 +232,9 @@
private void paintXPComboBoxBackground(Graphics g, JComponent c) {
XPStyle xp = XPStyle.getXP();
+ if (xp == null) {
+ return;
+ }
State state = getXPComboBoxState(c);
Skin skin = null;
if (! comboBox.isEditable()
@@ -400,17 +404,18 @@
* @return a button which represents the popup control
*/
protected JButton createArrowButton() {
- if (XPStyle.getXP() != null) {
- return new XPComboBoxButton();
+ XPStyle xp = XPStyle.getXP();
+ if (xp != null) {
+ return new XPComboBoxButton(xp);
} else {
return super.createArrowButton();
}
}
private class XPComboBoxButton extends XPStyle.GlyphButton {
- public XPComboBoxButton() {
+ public XPComboBoxButton(XPStyle xp) {
super(null,
- (! XPStyle.getXP().isSkinDefined(comboBox, Part.CP_DROPDOWNBUTTONRIGHT))
+ (! xp.isSkinDefined(comboBox, Part.CP_DROPDOWNBUTTONRIGHT))
? Part.CP_DROPDOWNBUTTON
: (comboBox.getComponentOrientation() == ComponentOrientation.RIGHT_TO_LEFT)
? Part.CP_DROPDOWNBUTTONLEFT
@@ -423,10 +428,11 @@
protected State getState() {
State rv;
rv = super.getState();
+ XPStyle xp = XPStyle.getXP();
if (rv != State.DISABLED
&& comboBox != null && ! comboBox.isEditable()
- && XPStyle.getXP().isSkinDefined(comboBox,
- Part.CP_DROPDOWNBUTTONRIGHT)) {
+ && xp != null && xp.isSkinDefined(comboBox,
+ Part.CP_DROPDOWNBUTTONRIGHT)) {
/*
* for non editable ComboBoxes Vista seems to have the
* same glyph for all non DISABLED states
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java Mon Jan 05 11:57:27 2015 -0800
@@ -1067,16 +1067,9 @@
directories.clear();
- File[] baseFolders;
- if (useShellFolder) {
- baseFolders = AccessController.doPrivileged(new PrivilegedAction<File[]>() {
- public File[] run() {
- return (File[]) ShellFolder.get("fileChooserComboBoxFolders");
- }
- });
- } else {
- baseFolders = fsv.getRoots();
- }
+ File[] baseFolders = (useShellFolder)
+ ? (File[]) ShellFolder.get("fileChooserComboBoxFolders")
+ : fsv.getRoots();
directories.addAll(Arrays.asList(baseFolders));
// Get the canonical (full) path. This has the side
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsGraphicsUtils.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsGraphicsUtils.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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
@@ -125,6 +125,9 @@
static void paintXPText(AbstractButton b, Part part, State state,
Graphics g, int x, int y, String text, int mnemIndex) {
XPStyle xp = XPStyle.getXP();
+ if (xp == null) {
+ return;
+ }
Color textColor = b.getForeground();
if (textColor instanceof UIResource) {
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsIconFactory.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsIconFactory.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -613,8 +613,8 @@
private static class MenuArrowIcon implements Icon, UIResource, Serializable {
public void paintIcon(Component c, Graphics g, int x, int y) {
- if (WindowsMenuItemUI.isVistaPainting()) {
- XPStyle xp = XPStyle.getXP();
+ XPStyle xp = XPStyle.getXP();
+ if (WindowsMenuItemUI.isVistaPainting(xp)) {
State state = State.NORMAL;
if (c instanceof JMenuItem) {
state = ((JMenuItem) c).getModel().isEnabled()
@@ -647,16 +647,18 @@
}
}
public int getIconWidth() {
- if (WindowsMenuItemUI.isVistaPainting()) {
- Skin skin = XPStyle.getXP().getSkin(null, Part.MP_POPUPSUBMENU);
+ XPStyle xp = XPStyle.getXP();
+ if (WindowsMenuItemUI.isVistaPainting(xp)) {
+ Skin skin = xp.getSkin(null, Part.MP_POPUPSUBMENU);
return skin.getWidth();
} else {
return 4;
}
}
public int getIconHeight() {
- if (WindowsMenuItemUI.isVistaPainting()) {
- Skin skin = XPStyle.getXP().getSkin(null, Part.MP_POPUPSUBMENU);
+ XPStyle xp = XPStyle.getXP();
+ if (WindowsMenuItemUI.isVistaPainting(xp)) {
+ Skin skin = xp.getSkin(null, Part.MP_POPUPSUBMENU);
return skin.getHeight();
} else {
return 8;
@@ -682,7 +684,8 @@
}
static int getIconWidth() {
- return XPStyle.getXP().getSkin(null, Part.MP_POPUPCHECK).getWidth()
+ XPStyle xp = XPStyle.getXP();
+ return ((xp != null) ? xp.getSkin(null, Part.MP_POPUPCHECK).getWidth() : 16)
+ 2 * OFFSET;
}
@@ -745,12 +748,17 @@
Icon icon = getIcon();
int height = 0;
if (icon != null) {
- height = icon.getIconHeight() + 2 * OFFSET;
+ height = icon.getIconHeight();
} else {
- Skin skin =
- XPStyle.getXP().getSkin(null, Part.MP_POPUPCHECK);
- height = skin.getHeight() + 2 * OFFSET;
+ XPStyle xp = XPStyle.getXP();
+ if (xp != null) {
+ Skin skin = xp.getSkin(null, Part.MP_POPUPCHECK);
+ height = skin.getHeight();
+ } else {
+ height = 16;
+ }
}
+ height += 2 * OFFSET;
return height;
}
@@ -798,14 +806,16 @@
? State.BULLETDISABLED
: State.CHECKMARKDISABLED;
}
- Skin skin;
XPStyle xp = XPStyle.getXP();
- skin = xp.getSkin(c, backgroundPart);
- skin.paintSkin(g, x, y,
- getIconWidth(), getIconHeight(), backgroundState);
- if (icon == null) {
- skin = xp.getSkin(c, part);
- skin.paintSkin(g, x + OFFSET, y + OFFSET, state);
+ if (xp != null) {
+ Skin skin;
+ skin = xp.getSkin(c, backgroundPart);
+ skin.paintSkin(g, x, y,
+ getIconWidth(), getIconHeight(), backgroundState);
+ if (icon == null) {
+ skin = xp.getSkin(c, part);
+ skin.paintSkin(g, x + OFFSET, y + OFFSET, state);
+ }
}
}
}
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 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
@@ -85,14 +85,15 @@
}
} else {
buttonWidth += 2;
- selectedTitleGradientColor =
- UIManager.getColor("InternalFrame.activeTitleGradient");
- notSelectedTitleGradientColor =
- UIManager.getColor("InternalFrame.inactiveTitleGradient");
Color activeBorderColor =
UIManager.getColor("InternalFrame.activeBorderColor");
setBorder(BorderFactory.createLineBorder(activeBorderColor, 1));
}
+ // JDK-8039383: initialize these colors because getXP() may return null when theme is changed
+ selectedTitleGradientColor =
+ UIManager.getColor("InternalFrame.activeTitleGradient");
+ notSelectedTitleGradientColor =
+ UIManager.getColor("InternalFrame.inactiveTitleGradient");
}
protected void uninstallListeners() {
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, 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
@@ -2400,8 +2400,9 @@
}
public Object getXPValue(UIDefaults table) {
- Border xpBorder = XPStyle.getXP().getBorder(null, (Part)xpValue);
- if (extraMargin != null) {
+ XPStyle xp = XPStyle.getXP();
+ Border xpBorder = xp != null ? xp.getBorder(null, (Part)xpValue) : null;
+ if (xpBorder != null && extraMargin != null) {
return new BorderUIResource.
CompoundBorderUIResource(xpBorder, extraMargin);
} else {
@@ -2417,7 +2418,8 @@
public Object getXPValue(UIDefaults table) {
XPColorValueKey key = (XPColorValueKey)xpValue;
- return XPStyle.getXP().getColor(key.skin, key.prop, null);
+ XPStyle xp = XPStyle.getXP();
+ return xp != null ? xp.getColor(key.skin, key.prop, null) : null;
}
private static class XPColorValueKey {
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsMenuBarUI.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsMenuBarUI.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2006, 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
@@ -155,8 +155,8 @@
@Override
public void paint(Graphics g, JComponent c) {
- if (WindowsMenuItemUI.isVistaPainting()) {
- XPStyle xp = XPStyle.getXP();
+ XPStyle xp = XPStyle.getXP();
+ if (WindowsMenuItemUI.isVistaPainting(xp)) {
Skin skin;
skin = xp.getSkin(c, Part.MP_BARBACKGROUND);
int width = c.getWidth();
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsMenuItemUI.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsMenuItemUI.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2006, 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
@@ -108,8 +108,9 @@
static void paintBackground(WindowsMenuItemUIAccessor menuItemUI,
Graphics g, JMenuItem menuItem, Color bgColor) {
- assert isVistaPainting();
- if (isVistaPainting()) {
+ XPStyle xp = XPStyle.getXP();
+ assert isVistaPainting(xp);
+ if (isVistaPainting(xp)) {
int menuWidth = menuItem.getWidth();
int menuHeight = menuItem.getHeight();
if (menuItem.isOpaque()) {
@@ -118,7 +119,6 @@
g.fillRect(0,0, menuWidth, menuHeight);
g.setColor(oldColor);
}
- XPStyle xp = XPStyle.getXP();
Part part = menuItemUI.getPart(menuItem);
Skin skin = xp.getSkin(menuItem, part);
skin.paintSkin(g, 0 , 0,
@@ -170,8 +170,11 @@
* is it possible that in some theme some Vista parts are not defined while
* others are?
*/
- static boolean isVistaPainting() {
- XPStyle xp = XPStyle.getXP();
+ static boolean isVistaPainting(final XPStyle xp) {
return xp != null && xp.isSkinDefined(null, Part.MP_POPUPITEM);
}
+
+ static boolean isVistaPainting() {
+ return isVistaPainting(XPStyle.getXP());
+ }
}
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsPopupMenuSeparatorUI.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsPopupMenuSeparatorUI.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 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
@@ -50,7 +50,8 @@
public void paint(Graphics g, JComponent c) {
Dimension s = c.getSize();
- if (WindowsMenuItemUI.isVistaPainting()) {
+ XPStyle xp = XPStyle.getXP();
+ if (WindowsMenuItemUI.isVistaPainting(xp)) {
int x = 1;
Component parent = c.getParent();
if (parent instanceof JComponent) {
@@ -67,7 +68,7 @@
x += WindowsPopupMenuUI.getGutterWidth();
}
}
- Skin skin = XPStyle.getXP().getSkin(c, Part.MP_POPUPSEPARATOR);
+ Skin skin = xp.getSkin(c, Part.MP_POPUPSEPARATOR);
int skinHeight = skin.getHeight();
int y = (s.height - skinHeight) / 2;
skin.paintSkin(g, x, y, s.width - x - 1, skinHeight, State.NORMAL);
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsPopupMenuUI.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsPopupMenuUI.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2006, 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
@@ -194,8 +194,8 @@
@Override
public void paint(Graphics g, JComponent c) {
- if (WindowsMenuItemUI.isVistaPainting()) {
- XPStyle xp = XPStyle.getXP();
+ XPStyle xp = XPStyle.getXP();
+ if (WindowsMenuItemUI.isVistaPainting(xp)) {
Skin skin = xp.getSkin(c, Part.MP_POPUPBACKGROUND);
skin.paintSkin(g, 0, 0, c.getWidth(),c.getHeight(), State.NORMAL);
int textOffset = getTextOffset(c);
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsProgressBarUI.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsProgressBarUI.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2006, 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
@@ -317,8 +317,9 @@
private Rectangle getFullChunkBounds(Rectangle box) {
boolean vertical = (progressBar.getOrientation() == JProgressBar.VERTICAL);
XPStyle xp = XPStyle.getXP();
- int gap = xp.getInt(progressBar, Part.PP_PROGRESS, null,
- Prop.PROGRESSSPACESIZE, 0);
+ int gap = (xp != null) ? xp.getInt(progressBar, Part.PP_PROGRESS,
+ null, Prop.PROGRESSSPACESIZE, 0)
+ : 0;
if (!vertical) {
int chunksize = box.width+gap;
@@ -333,6 +334,9 @@
boolean vertical,
int bgwidth, int bgheight) {
XPStyle xp = XPStyle.getXP();
+ if (xp == null) {
+ return;
+ }
// create a new graphics to keep drawing surface state
Graphics2D gfx = (Graphics2D)g.create();
@@ -391,6 +395,9 @@
private void paintXPBackground(Graphics g, boolean vertical,
int barRectWidth, int barRectHeight) {
XPStyle xp = XPStyle.getXP();
+ if (xp == null) {
+ return;
+ }
Part part = vertical ? Part.PP_BARVERT : Part.PP_BAR;
Skin skin = xp.getSkin(progressBar, part);
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsSliderUI.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsSliderUI.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2005, 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
@@ -215,7 +215,6 @@
}
private Part getXPThumbPart() {
- XPStyle xp = XPStyle.getXP();
Part part;
boolean vertical = (slider.getOrientation() == JSlider.VERTICAL);
boolean leftToRight = slider.getComponentOrientation().isLeftToRight();
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsSpinnerUI.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsSpinnerUI.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2006, 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
@@ -63,6 +63,9 @@
private void paintXPBackground(Graphics g, JComponent c) {
XPStyle xp = XPStyle.getXP();
+ if (xp == null) {
+ return;
+ }
Skin skin = xp.getSkin(c, Part.EP_EDIT);
State state = getXPState(c);
skin.paintSkin(g, 0, 0, c.getWidth(), c.getHeight(), state);
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsTableHeaderUI.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsTableHeaderUI.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, 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
@@ -90,9 +90,10 @@
this.column = column;
this.hasRollover = (column == getRolloverColumn());
if (skin == null) {
- skin = XPStyle.getXP().getSkin(header, Part.HP_HEADERITEM);
+ XPStyle xp = XPStyle.getXP();
+ skin = (xp != null) ? xp.getSkin(header, Part.HP_HEADERITEM) : null;
}
- Insets margins = skin.getContentMargin();
+ Insets margins = (skin != null) ? skin.getContentMargin() : null;
Border border = null;
int contentTop = 0;
int contentLeft = 0;
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/XPStyle.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/XPStyle.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -115,7 +115,7 @@
}
}
}
- return xp;
+ return ThemeReader.isXPStyleEnabled() ? xp : null;
}
static boolean isVista() {
@@ -180,9 +180,10 @@
* should probably be cached there instead of here.
*/
Dimension getDimension(Component c, Part part, State state, Prop prop) {
- return ThemeReader.getPosition(part.getControlName(c), part.getValue(),
- State.getValue(part, state),
- prop.getValue());
+ Dimension d = ThemeReader.getPosition(part.getControlName(c), part.getValue(),
+ State.getValue(part, state),
+ prop.getValue());
+ return (d != null) ? d : new Dimension();
}
/** Get a named <code>Point</code> (e.g. a location or an offset) value
@@ -199,11 +200,7 @@
Dimension d = ThemeReader.getPosition(part.getControlName(c), part.getValue(),
State.getValue(part, state),
prop.getValue());
- if (d != null) {
- return new Point(d.width, d.height);
- } else {
- return null;
- }
+ return (d != null) ? new Point(d.width, d.height) : new Point();
}
/** Get a named <code>Insets</code> value from the current style
@@ -217,9 +214,10 @@
* The return value is already cached in those places.
*/
Insets getMargin(Component c, Part part, State state, Prop prop) {
- return ThemeReader.getThemeMargins(part.getControlName(c), part.getValue(),
- State.getValue(part, state),
- prop.getValue());
+ Insets insets = ThemeReader.getThemeMargins(part.getControlName(c), part.getValue(),
+ State.getValue(part, state),
+ prop.getValue());
+ return (insets != null) ? insets : new Insets(0, 0, 0, 0);
}
@@ -505,16 +503,17 @@
int boundingWidth = 100;
int boundingHeight = 100;
- return ThemeReader.getThemeBackgroundContentMargins(
+ Insets insets = ThemeReader.getThemeBackgroundContentMargins(
part.getControlName(null), part.getValue(),
0, boundingWidth, boundingHeight);
+ return (insets != null) ? insets : new Insets(0, 0, 0, 0);
}
private int getWidth(State state) {
if (size == null) {
size = getPartSize(part, state);
}
- return size.width;
+ return (size != null) ? size.width : 0;
}
int getWidth() {
@@ -525,7 +524,7 @@
if (size == null) {
size = getPartSize(part, state);
}
- return size.height;
+ return (size != null) ? size.height : 0;
}
int getHeight() {
@@ -582,6 +581,9 @@
* @param state which state to paint
*/
void paintSkin(Graphics g, int dx, int dy, int dw, int dh, State state) {
+ if (XPStyle.getXP() == null) {
+ return;
+ }
if (ThemeReader.isGetThemeTransitionDurationDefined()
&& component instanceof JComponent
&& SwingUtilities.getAncestorOfClass(CellRendererPane.class,
@@ -607,6 +609,9 @@
* @param state which state to paint
*/
void paintSkinRaw(Graphics g, int dx, int dy, int dw, int dh, State state) {
+ if (XPStyle.getXP() == null) {
+ return;
+ }
skinPainter.paint(null, g, dx, dy, dw, dh, this, state);
}
@@ -625,6 +630,9 @@
*/
void paintSkin(Graphics g, int dx, int dy, int dw, int dh, State state,
boolean borderFill) {
+ if (XPStyle.getXP() == null) {
+ return;
+ }
if(borderFill && "borderfill".equals(getTypeEnumName(component, part,
state, Prop.BGTYPE))) {
return;
@@ -679,7 +687,7 @@
public GlyphButton(Component parent, Part part) {
XPStyle xp = getXP();
- skin = xp.getSkin(parent, part);
+ skin = xp != null ? xp.getSkin(parent, part) : null;
setBorder(null);
setContentAreaFilled(false);
setMinimumSize(new Dimension(5, 5));
@@ -704,13 +712,16 @@
}
public void paintComponent(Graphics g) {
+ if (XPStyle.getXP() == null || skin == null) {
+ return;
+ }
Dimension d = getSize();
skin.paintSkin(g, 0, 0, d.width, d.height, getState());
}
public void setPart(Component parent, Part part) {
XPStyle xp = getXP();
- skin = xp.getSkin(parent, part);
+ skin = xp != null ? xp.getSkin(parent, part) : null;
revalidate();
repaint();
}
--- ./jdk/src/share/classes/com/sun/jndi/ldap/BerDecoder.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/jndi/ldap/BerDecoder.java Mon Jan 05 11:57:27 2015 -0800
@@ -95,6 +95,9 @@
for( int i = 0; i < lengthbyte; i++) {
retval = (retval << 8) + (buf[offset++] & 0xff);
}
+ if (retval < 0) {
+ throw new DecodeException("Invalid length bytes");
+ }
return retval;
} else {
return lengthbyte;
--- ./jdk/src/share/classes/com/sun/jndi/ldap/Connection.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/com/sun/jndi/ldap/Connection.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -464,10 +464,10 @@
// will be woken up before readTimeout only if reply is
// available
ldr.wait(readTimeout);
- waited = true;
} else {
ldr.wait(15 * 1000); // 15 second timeout
}
+ waited = true;
} else {
break;
}
@@ -479,7 +479,7 @@
}
if ((rber == null) && waited) {
- removeRequest(ldr);
+ abandonRequest(ldr, null);
throw new NamingException("LDAP response read timed out, timeout used:"
+ readTimeout + "ms." );
--- ./jdk/src/share/classes/java/awt/Component.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/java/awt/Component.java Mon Jan 05 11:57:27 2015 -0800
@@ -3394,7 +3394,7 @@
(width > 0) && (height > 0)) {
PaintEvent e = new PaintEvent(this, PaintEvent.UPDATE,
new Rectangle(x, y, width, height));
- Toolkit.getEventQueue().postEvent(e);
+ SunToolkit.postEvent(SunToolkit.targetToAppContext(this), e);
}
}
}
--- ./jdk/src/share/classes/java/awt/EventQueue.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/java/awt/EventQueue.java Mon Jan 05 11:57:27 2015 -0800
@@ -209,6 +209,11 @@
{
EventQueue.invokeAndWait(source, r);
}
+
+ @Override
+ public long getMostRecentEventTime(EventQueue eventQueue) {
+ return eventQueue.getMostRecentEventTimeImpl();
+ }
});
}
--- ./jdk/src/share/classes/java/awt/event/InputMethodEvent.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/java/awt/event/InputMethodEvent.java Mon Jan 05 11:57:27 2015 -0800
@@ -25,6 +25,10 @@
package java.awt.event;
+import sun.awt.AWTAccessor;
+import sun.awt.AppContext;
+import sun.awt.SunToolkit;
+
import java.awt.AWTEvent;
import java.awt.Component;
import java.awt.EventQueue;
@@ -217,8 +221,10 @@
public InputMethodEvent(Component source, int id,
AttributedCharacterIterator text, int committedCharacterCount,
TextHitInfo caret, TextHitInfo visiblePosition) {
- this(source, id, EventQueue.getMostRecentEventTime(), text,
- committedCharacterCount, caret, visiblePosition);
+ this(source, id,
+ getMostRecentEventTimeForSource(source),
+ text, committedCharacterCount,
+ caret, visiblePosition);
}
/**
@@ -258,8 +264,9 @@
*/
public InputMethodEvent(Component source, int id, TextHitInfo caret,
TextHitInfo visiblePosition) {
- this(source, id, EventQueue.getMostRecentEventTime(), null,
- 0, caret, visiblePosition);
+ this(source, id,
+ getMostRecentEventTimeForSource(source),
+ null, 0, caret, visiblePosition);
}
/**
@@ -410,7 +417,26 @@
private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException {
s.defaultReadObject();
if (when == 0) {
+ // Can't use getMostRecentEventTimeForSource because source is always null during deserialization
when = EventQueue.getMostRecentEventTime();
}
}
+
+ /**
+ * Get the most recent event time in the {@code EventQueue} which the {@code source}
+ * belongs to.
+ *
+ * @param source the source of the event
+ * @exception IllegalArgumentException if source is null.
+ * @return most recent event time in the {@code EventQueue}
+ */
+ private static long getMostRecentEventTimeForSource(Object source) {
+ if (source == null) {
+ // throw the IllegalArgumentException to conform to EventObject spec
+ throw new IllegalArgumentException("null source");
+ }
+ AppContext appContext = SunToolkit.targetToAppContext(source);
+ EventQueue eventQueue = SunToolkit.getSystemEventQueueImplPP(appContext);
+ return AWTAccessor.getEventQueueAccessor().getMostRecentEventTime(eventQueue);
+ }
}
--- ./jdk/src/share/classes/java/awt/event/MouseEvent.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/java/awt/event/MouseEvent.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2008, 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
@@ -758,7 +758,6 @@
if (getModifiersEx() != 0) { //There is at least one more button in a pressed state.
if (id == MouseEvent.MOUSE_RELEASED || id == MouseEvent.MOUSE_CLICKED){
- System.out.println("MEvent. CASE!");
shouldExcludeButtonFromExtModifiers = true;
}
}
--- ./jdk/src/share/classes/java/beans/IndexedPropertyDescriptor.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/java/beans/IndexedPropertyDescriptor.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2010, 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
@@ -41,8 +41,8 @@
public class IndexedPropertyDescriptor extends PropertyDescriptor {
private Reference<Class> indexedPropertyTypeRef;
- private Reference<Method> indexedReadMethodRef;
- private Reference<Method> indexedWriteMethodRef;
+ private final MethodRef indexedReadMethodRef = new MethodRef();
+ private final MethodRef indexedWriteMethodRef = new MethodRef();
private String indexedReadMethodName;
private String indexedWriteMethodName;
@@ -173,11 +173,11 @@
* May return null if the property isn't indexed or is write-only.
*/
public synchronized Method getIndexedReadMethod() {
- Method indexedReadMethod = getIndexedReadMethod0();
+ Method indexedReadMethod = this.indexedReadMethodRef.get();
if (indexedReadMethod == null) {
Class cls = getClass0();
if (cls == null ||
- (indexedReadMethodName == null && indexedReadMethodRef == null)) {
+ (indexedReadMethodName == null && !this.indexedReadMethodRef.isSet())) {
// the Indexed readMethod was explicitly set to null.
return null;
}
@@ -213,20 +213,19 @@
// the indexed property type is set by the reader.
setIndexedPropertyType(findIndexedPropertyType(readMethod,
- getIndexedWriteMethod0()));
+ this.indexedWriteMethodRef.get()));
setIndexedReadMethod0(readMethod);
}
private void setIndexedReadMethod0(Method readMethod) {
+ this.indexedReadMethodRef.set(readMethod);
if (readMethod == null) {
indexedReadMethodName = null;
- indexedReadMethodRef = null;
return;
}
setClass0(readMethod.getDeclaringClass());
indexedReadMethodName = readMethod.getName();
- this.indexedReadMethodRef = getSoftReference(readMethod);
setTransient(readMethod.getAnnotation(Transient.class));
}
@@ -239,11 +238,11 @@
* May return null if the property isn't indexed or is read-only.
*/
public synchronized Method getIndexedWriteMethod() {
- Method indexedWriteMethod = getIndexedWriteMethod0();
+ Method indexedWriteMethod = this.indexedWriteMethodRef.get();
if (indexedWriteMethod == null) {
Class cls = getClass0();
if (cls == null ||
- (indexedWriteMethodName == null && indexedWriteMethodRef == null)) {
+ (indexedWriteMethodName == null && !this.indexedWriteMethodRef.isSet())) {
// the Indexed writeMethod was explicitly set to null.
return null;
}
@@ -297,15 +296,14 @@
}
private void setIndexedWriteMethod0(Method writeMethod) {
+ this.indexedWriteMethodRef.set(writeMethod);
if (writeMethod == null) {
indexedWriteMethodName = null;
- indexedWriteMethodRef = null;
return;
}
setClass0(writeMethod.getDeclaringClass());
indexedWriteMethodName = writeMethod.getName();
- this.indexedWriteMethodRef = getSoftReference(writeMethod);
setTransient(writeMethod.getAnnotation(Transient.class));
}
@@ -345,18 +343,6 @@
: null;
}
- private Method getIndexedReadMethod0() {
- return (this.indexedReadMethodRef != null)
- ? this.indexedReadMethodRef.get()
- : null;
- }
-
- private Method getIndexedWriteMethod0() {
- return (this.indexedWriteMethodRef != null)
- ? this.indexedWriteMethodRef.get()
- : null;
- }
-
private Class findIndexedPropertyType(Method indexedReadMethod,
Method indexedWriteMethod)
throws IntrospectionException {
@@ -488,8 +474,8 @@
*/
IndexedPropertyDescriptor(IndexedPropertyDescriptor old) {
super(old);
- indexedReadMethodRef = old.indexedReadMethodRef;
- indexedWriteMethodRef = old.indexedWriteMethodRef;
+ this.indexedReadMethodRef.set(old.indexedReadMethodRef.get());
+ this.indexedWriteMethodRef.set(old.indexedWriteMethodRef.get());
indexedPropertyTypeRef = old.indexedPropertyTypeRef;
indexedWriteMethodName = old.indexedWriteMethodName;
indexedReadMethodName = old.indexedReadMethodName;
@@ -498,7 +484,7 @@
void updateGenericsFor(Class<?> type) {
super.updateGenericsFor(type);
try {
- setIndexedPropertyType(findIndexedPropertyType(getIndexedReadMethod0(), getIndexedWriteMethod0()));
+ setIndexedPropertyType(findIndexedPropertyType(this.indexedReadMethodRef.get(), this.indexedWriteMethodRef.get()));
}
catch (IntrospectionException exception) {
setIndexedPropertyType(null);
@@ -528,7 +514,7 @@
void appendTo(StringBuilder sb) {
super.appendTo(sb);
appendTo(sb, "indexedPropertyType", this.indexedPropertyTypeRef);
- appendTo(sb, "indexedReadMethod", this.indexedReadMethodRef);
- appendTo(sb, "indexedWriteMethod", this.indexedWriteMethodRef);
+ appendTo(sb, "indexedReadMethod", this.indexedReadMethodRef.get());
+ appendTo(sb, "indexedWriteMethod", this.indexedWriteMethodRef.get());
}
}
--- ./jdk/src/share/classes/java/beans/MethodDescriptor.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/java/beans/MethodDescriptor.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2010, 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
@@ -38,7 +38,7 @@
public class MethodDescriptor extends FeatureDescriptor {
- private Reference<Method> methodRef;
+ private final MethodRef methodRef = new MethodRef();
private String[] paramNames;
@@ -79,7 +79,7 @@
* @return The low-level description of the method
*/
public synchronized Method getMethod() {
- Method method = getMethod0();
+ Method method = this.methodRef.get();
if (method == null) {
Class cls = getClass0();
String name = getName();
@@ -112,13 +112,7 @@
setClass0(method.getDeclaringClass());
}
setParams(getParameterTypes(getClass0(), method));
- this.methodRef = getSoftReference(method);
- }
-
- private Method getMethod0() {
- return (this.methodRef != null)
- ? this.methodRef.get()
- : null;
+ this.methodRef.set(method);
}
private synchronized void setParams(Class[] param) {
@@ -173,12 +167,10 @@
*/
MethodDescriptor(MethodDescriptor x, MethodDescriptor y) {
- super(x,y);
+ super(x, y);
- methodRef = x.methodRef;
- if (y.methodRef != null) {
- methodRef = y.methodRef;
- }
+ Method method = y.methodRef.get();
+ this.methodRef.set(null != method ? method : x.methodRef.get());
params = x.params;
if (y.params != null) {
params = y.params;
@@ -201,7 +193,7 @@
MethodDescriptor(MethodDescriptor old) {
super(old);
- methodRef = old.methodRef;
+ this.methodRef.set(old.getMethod());
params = old.params;
paramNames = old.paramNames;
@@ -215,7 +207,7 @@
}
void appendTo(StringBuilder sb) {
- appendTo(sb, "method", this.methodRef);
+ appendTo(sb, "method", this.methodRef.get());
if (this.parameterDescriptors != null) {
sb.append("; parameterDescriptors={");
for (ParameterDescriptor pd : this.parameterDescriptors) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/src/share/classes/java/beans/MethodRef.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,87 @@
+/*
+ * 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.
+ */
+
+package java.beans;
+
+import java.lang.ref.SoftReference;
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Method;
+
+import static sun.reflect.misc.ReflectUtil.isPackageAccessible;
+
+final class MethodRef {
+ private String signature;
+ private SoftReference<Method> methodRef;
+ private WeakReference<Class<?>> typeRef;
+
+ void set(Method method) {
+ if (method == null) {
+ this.signature = null;
+ this.methodRef = null;
+ this.typeRef = null;
+ }
+ else {
+ this.signature = method.toGenericString();
+ this.methodRef = new SoftReference<>(method);
+ this.typeRef = new WeakReference<Class<?>>(method.getDeclaringClass());
+ }
+ }
+
+ boolean isSet() {
+ return this.methodRef != null;
+ }
+
+ Method get() {
+ if (this.methodRef == null) {
+ return null;
+ }
+ Method method = this.methodRef.get();
+ if (method == null) {
+ method = find(this.typeRef.get(), this.signature);
+ if (method == null) {
+ this.signature = null;
+ this.methodRef = null;
+ this.typeRef = null;
+ }
+ else {
+ this.methodRef = new SoftReference<>(method);
+ }
+ }
+ return isPackageAccessible(method.getDeclaringClass()) ? method : null;
+ }
+
+ private static Method find(Class<?> type, String signature) {
+ if (type != null) {
+ for (Method method : type.getMethods()) {
+ if (type.equals(method.getDeclaringClass())) {
+ if (method.toGenericString().equals(signature)) {
+ return method;
+ }
+ }
+ }
+ }
+ return null;
+ }
+}
--- ./jdk/src/share/classes/java/beans/PropertyDescriptor.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/java/beans/PropertyDescriptor.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2013, 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
@@ -36,8 +36,8 @@
public class PropertyDescriptor extends FeatureDescriptor {
private Reference<Class> propertyTypeRef;
- private Reference<Method> readMethodRef;
- private Reference<Method> writeMethodRef;
+ private final MethodRef readMethodRef = new MethodRef();
+ private final MethodRef writeMethodRef = new MethodRef();
private Reference<Class> propertyEditorClassRef;
private boolean bound;
@@ -68,8 +68,8 @@
public PropertyDescriptor(String propertyName, Class<?> beanClass)
throws IntrospectionException {
this(propertyName, beanClass,
- Introspector.IS_PREFIX + NameGenerator.capitalize(propertyName),
- Introspector.SET_PREFIX + NameGenerator.capitalize(propertyName));
+ Introspector.IS_PREFIX + NameGenerator.capitalize(propertyName),
+ Introspector.SET_PREFIX + NameGenerator.capitalize(propertyName));
}
/**
@@ -203,10 +203,10 @@
* May return null if the property can't be read.
*/
public synchronized Method getReadMethod() {
- Method readMethod = getReadMethod0();
+ Method readMethod = this.readMethodRef.get();
if (readMethod == null) {
Class cls = getClass0();
- if (cls == null || (readMethodName == null && readMethodRef == null)) {
+ if (cls == null || (readMethodName == null && !this.readMethodRef.isSet())) {
// The read method was explicitly set to null.
return null;
}
@@ -246,17 +246,16 @@
*/
public synchronized void setReadMethod(Method readMethod)
throws IntrospectionException {
+ this.readMethodRef.set(readMethod);
if (readMethod == null) {
readMethodName = null;
- readMethodRef = null;
return;
}
// The property type is determined by the read method.
- setPropertyType(findPropertyType(readMethod, getWriteMethod0()));
+ setPropertyType(findPropertyType(readMethod, this.writeMethodRef.get()));
setClass0(readMethod.getDeclaringClass());
readMethodName = readMethod.getName();
- this.readMethodRef = getSoftReference(readMethod);
setTransient(readMethod.getAnnotation(Transient.class));
}
@@ -267,10 +266,10 @@
* May return null if the property can't be written.
*/
public synchronized Method getWriteMethod() {
- Method writeMethod = getWriteMethod0();
+ Method writeMethod = this.writeMethodRef.get();
if (writeMethod == null) {
Class cls = getClass0();
- if (cls == null || (writeMethodName == null && writeMethodRef == null)) {
+ if (cls == null || (writeMethodName == null && !this.writeMethodRef.isSet())) {
// The write method was explicitly set to null.
return null;
}
@@ -316,9 +315,9 @@
*/
public synchronized void setWriteMethod(Method writeMethod)
throws IntrospectionException {
+ this.writeMethodRef.set(writeMethod);
if (writeMethod == null) {
writeMethodName = null;
- writeMethodRef = null;
return;
}
// Set the property type - which validates the method
@@ -326,22 +325,9 @@
setClass0(writeMethod.getDeclaringClass());
writeMethodName = writeMethod.getName();
- this.writeMethodRef = getSoftReference(writeMethod);
setTransient(writeMethod.getAnnotation(Transient.class));
}
- private Method getReadMethod0() {
- return (this.readMethodRef != null)
- ? this.readMethodRef.get()
- : null;
- }
-
- private Method getWriteMethod0() {
- return (this.writeMethodRef != null)
- ? this.writeMethodRef.get()
- : null;
- }
-
/**
* Overridden to ensure that a super class doesn't take precedent
*/
@@ -618,8 +604,8 @@
PropertyDescriptor(PropertyDescriptor old) {
super(old);
propertyTypeRef = old.propertyTypeRef;
- readMethodRef = old.readMethodRef;
- writeMethodRef = old.writeMethodRef;
+ this.readMethodRef.set(old.readMethodRef.get());
+ this.writeMethodRef.set(old.writeMethodRef.get());
propertyEditorClassRef = old.propertyEditorClassRef;
writeMethodName = old.writeMethodName;
@@ -633,7 +619,7 @@
void updateGenericsFor(Class<?> type) {
setClass0(type);
try {
- setPropertyType(findPropertyType(getReadMethod0(), getWriteMethod0()));
+ setPropertyType(findPropertyType(this.readMethodRef.get(), this.writeMethodRef.get()));
}
catch (IntrospectionException exception) {
setPropertyType(null);
@@ -724,8 +710,8 @@
appendTo(sb, "constrained", this.constrained);
appendTo(sb, "propertyEditorClass", this.propertyEditorClassRef);
appendTo(sb, "propertyType", this.propertyTypeRef);
- appendTo(sb, "readMethod", this.readMethodRef);
- appendTo(sb, "writeMethod", this.writeMethodRef);
+ appendTo(sb, "readMethod", this.readMethodRef.get());
+ appendTo(sb, "writeMethod", this.writeMethodRef.get());
}
private boolean isAssignable(Method m1, Method m2) {
--- ./jdk/src/share/classes/java/beans/XMLEncoder.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/java/beans/XMLEncoder.java Mon Jan 05 11:57:27 2015 -0800
@@ -377,7 +377,7 @@
Object arg = args[i];
mark(arg, true);
}
- mark(stm.getTarget(), false);
+ mark(stm.getTarget(), stm instanceof Expression);
}
--- ./jdk/src/share/classes/java/io/ByteArrayOutputStream.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/java/io/ByteArrayOutputStream.java Mon Jan 05 11:57:27 2015 -0800
@@ -94,6 +94,14 @@
}
/**
+ * The maximum size of array to allocate.
+ * Some VMs reserve some header words in an array.
+ * Attempts to allocate larger arrays may result in
+ * OutOfMemoryError: Requested array size exceeds VM limit
+ */
+ private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
+
+ /**
* Increases the capacity to ensure that it can hold at least the
* number of elements specified by the minimum capacity argument.
*
@@ -105,14 +113,19 @@
int newCapacity = oldCapacity << 1;
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
- if (newCapacity < 0) {
- if (minCapacity < 0) // overflow
- throw new OutOfMemoryError();
- newCapacity = Integer.MAX_VALUE;
- }
+ if (newCapacity - MAX_ARRAY_SIZE > 0)
+ newCapacity = hugeCapacity(minCapacity);
buf = Arrays.copyOf(buf, newCapacity);
}
+ private static int hugeCapacity(int minCapacity) {
+ if (minCapacity < 0) // overflow
+ throw new OutOfMemoryError();
+ return (minCapacity > MAX_ARRAY_SIZE) ?
+ Integer.MAX_VALUE :
+ MAX_ARRAY_SIZE;
+ }
+
/**
* Writes the specified byte to this byte array output stream.
*
--- ./jdk/src/share/classes/java/io/File.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/java/io/File.java Mon Jan 05 11:57:27 2015 -0800
@@ -1891,7 +1891,7 @@
String name = prefix + Long.toString(n) + suffix;
File f = new File(dir, name);
- if (!name.equals(f.getName())) {
+ if (!name.equals(f.getName()) || f.isInvalid()) {
if (System.getSecurityManager() != null)
throw new IOException("Unable to create temporary file");
else
@@ -1981,19 +1981,26 @@
File tmpdir = (directory != null) ? directory
: TempDirectory.location();
+ SecurityManager sm = System.getSecurityManager();
File f;
- try {
- do {
- f = TempDirectory.generateFile(prefix, suffix, tmpdir);
- } while (f.exists());
- if (!f.createNewFile())
- throw new IOException("Unable to create temporary file");
- } catch (SecurityException se) {
- // don't reveal temporary directory location
- if (directory == null)
- throw new SecurityException("Unable to create temporary file");
- throw se;
- }
+ do {
+ f = TempDirectory.generateFile(prefix, suffix, tmpdir);
+
+ if (sm != null) {
+ try {
+ sm.checkWrite(f.getPath());
+ } catch (SecurityException se) {
+ // don't reveal temporary directory location
+ if (directory == null)
+ throw new SecurityException("Unable to create temporary file");
+ throw se;
+ }
+ }
+ } while ((fs.getBooleanAttributes(f) & FileSystem.BA_EXISTS) != 0);
+
+ if (!fs.createFileExclusively(f.getPath()))
+ throw new IOException("Unable to create temporary file");
+
return f;
}
--- ./jdk/src/share/classes/java/lang/ClassValue.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/java/lang/ClassValue.java Mon Jan 05 11:57:27 2015 -0800
@@ -489,9 +489,18 @@
/** Remove an entry. */
synchronized
void removeEntry(ClassValue<?> classValue) {
- // make all cache elements for this guy go stale:
- if (remove(classValue.identity) != null) {
+ Entry<?> e = remove(classValue.identity);
+ if (e == null) {
+ // Uninitialized, and no pending calls to computeValue. No change.
+ } else if (e.isPromise()) {
+ // State is uninitialized, with a pending call to finishEntry.
+ // Since remove is a no-op in such a state, keep the promise
+ // by putting it back into the map.
+ put(classValue.identity, e);
+ } else {
+ // In an initialized state. Bump forward, and de-initialize.
classValue.bumpVersion();
+ // Make all cache elements for this guy go stale.
removeStaleEntries(classValue);
}
}
--- ./jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java Mon Jan 05 11:57:27 2015 -0800
@@ -62,6 +62,7 @@
//# Conditional mappings
//# ================================================================================
new Entry(0x03A3, new char[]{0x03C2}, new char[]{0x03A3}, null, FINAL_CASED), // # GREEK CAPITAL LETTER SIGMA
+ new Entry(0x0130, new char[]{0x0069, 0x0307}, new char[]{0x0130}, null, 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
//# ================================================================================
//# Locale-sensitive mappings
@@ -77,8 +78,8 @@
//# ================================================================================
//# Turkish and Azeri
-// new Entry(0x0130, new char[]{0x0069}, new char[]{0x0130}, "tr", 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
-// new Entry(0x0130, new char[]{0x0069}, new char[]{0x0130}, "az", 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
+ new Entry(0x0130, new char[]{0x0069}, new char[]{0x0130}, "tr", 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
+ new Entry(0x0130, new char[]{0x0069}, new char[]{0x0130}, "az", 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
new Entry(0x0307, new char[]{}, new char[]{0x0307}, "tr", AFTER_I), // # COMBINING DOT ABOVE
new Entry(0x0307, new char[]{}, new char[]{0x0307}, "az", AFTER_I), // # COMBINING DOT ABOVE
new Entry(0x0049, new char[]{0x0131}, new char[]{0x0049}, "tr", NOT_BEFORE_DOT), // # LATIN CAPITAL LETTER I
@@ -148,21 +149,25 @@
private static char[] lookUpTable(String src, int index, Locale locale, boolean bLowerCasing) {
HashSet set = (HashSet)entryTable.get(new Integer(src.codePointAt(index)));
+ char[] ret = null;
if (set != null) {
Iterator iter = set.iterator();
String currentLang = locale.getLanguage();
while (iter.hasNext()) {
Entry entry = (Entry)iter.next();
- String conditionLang= entry.getLanguage();
+ String conditionLang = entry.getLanguage();
if (((conditionLang == null) || (conditionLang.equals(currentLang))) &&
isConditionMet(src, index, locale, entry.getCondition())) {
- return (bLowerCasing ? entry.getLowerCase() : entry.getUpperCase());
+ ret = bLowerCasing ? entry.getLowerCase() : entry.getUpperCase();
+ if (conditionLang != null) {
+ break;
+ }
}
}
}
- return null;
+ return ret;
}
private static boolean isConditionMet(String src, int index, Locale locale, int condition) {
--- ./jdk/src/share/classes/java/lang/String.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/java/lang/String.java Mon Jan 05 11:57:27 2015 -0800
@@ -2459,7 +2459,9 @@
} else {
srcCount = 1;
}
- if (localeDependent || srcChar == '\u03A3') { // GREEK CAPITAL LETTER SIGMA
+ if (localeDependent ||
+ srcChar == '\u03A3' || // GREEK CAPITAL LETTER SIGMA
+ srcChar == '\u0130') { // LATIN CAPITAL LETTER I WITH DOT ABOVE
lowerChar = ConditionalSpecialCasing.toLowerCaseEx(this, i, locale);
} else {
lowerChar = Character.toLowerCase(srcChar);
--- ./jdk/src/share/classes/java/net/InetAddress.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/java/net/InetAddress.java Mon Jan 05 11:57:27 2015 -0800
@@ -1128,7 +1128,7 @@
// see if it is IPv4 address
addr = IPAddressUtil.textToNumericFormatV4(host);
if (addr == null) {
- // see if it is IPv6 address
+ // This is supposed to be an IPv6 literal
// Check if a numeric or string zone id is present
int pos;
if ((pos=host.indexOf ("%")) != -1) {
@@ -1137,7 +1137,9 @@
ifname = host.substring (pos+1);
}
}
- addr = IPAddressUtil.textToNumericFormatV6(host);
+ if ((addr = IPAddressUtil.textToNumericFormatV6(host)) == null && host.contains(":")) {
+ throw new UnknownHostException(host + ": invalid IPv6 address");
+ }
} else if (ipv6Expected) {
// Means an IPv4 litteral between brackets!
throw new UnknownHostException("["+host+"]");
@@ -1155,10 +1157,10 @@
}
return ret;
}
- } else if (ipv6Expected) {
- // We were expecting an IPv6 Litteral, but got something else
- throw new UnknownHostException("["+host+"]");
- }
+ } else if (ipv6Expected) {
+ // We were expecting an IPv6 Litteral, but got something else
+ throw new UnknownHostException("["+host+"]");
+ }
return getAllByName0(host, reqAddr, true);
}
--- ./jdk/src/share/classes/java/net/MulticastSocket.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/java/net/MulticastSocket.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 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
@@ -565,7 +565,7 @@
public NetworkInterface getNetworkInterface() throws SocketException {
NetworkInterface ni
= (NetworkInterface)getImpl().getOption(SocketOptions.IP_MULTICAST_IF2);
- if (ni.getIndex() == 0) {
+ if ((ni.getIndex() == 0) || (ni.getIndex() == -1)) {
InetAddress[] addrs = new InetAddress[1];
addrs[0] = InetAddress.anyLocalAddress();
return new NetworkInterface(addrs[0].getHostName(), 0, addrs);
--- ./jdk/src/share/classes/java/util/CurrencyData.properties Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/java/util/CurrencyData.properties Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2000, 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
@@ -26,10 +26,9 @@
formatVersion=1
# Version of the currency code information in this class.
-# It is a serial number that accompanies with each amendment, such as
-# 'MAxxx.doc'
+# It is a serial number that accompanies with each amendment.
-dataVersion=151
+dataVersion=159
# List of all valid ISO 4217 currency codes.
# To ensure compatibility, do not remove codes.
@@ -49,11 +48,12 @@
NIO558-NLG528-NOK578-NPR524-NZD554-OMR512-PAB590-PEN604-PGK598-PHP608-\
PKR586-PLN985-PTE620-PYG600-QAR634-ROL946-RON946-RSD941-RUB643-RUR810-RWF646-SAR682-\
SBD090-SCR690-SDD736-SDG938-SEK752-SGD702-SHP654-SIT705-SKK703-SLL694-SOS706-\
- SRD968-SRG740-STD678-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TMT934-TND788-TOP776-\
+ SRD968-SRG740-SSP728-STD678-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TMT934-TND788-TOP776-\
TPE626-TRL792-TRY949-TTD780-TWD901-TZS834-UAH980-UGX800-USD840-USN997-USS998-\
UYU858-UZS860-VEB862-VEF937-VND704-VUV548-WST882-XAF950-XAG961-XAU959-XBA955-\
XBB956-XBC957-XBD958-XCD951-XDR960-XFO000-XFU000-XOF952-XPD964-XPF953-\
- XPT962-XSU994-XTS963-XUA965-XXX999-YER886-YUM891-ZAR710-ZMK894-ZWD716-ZWL932-ZWN942-ZWR935
+ XPT962-XSU994-XTS963-XUA965-XXX999-YER886-YUM891-ZAR710-ZMK894-ZMW967-ZWD716-ZWL932-\
+ ZWN942-ZWR935
# Mappings from ISO 3166 country codes to ISO 4217 currency codes.
@@ -71,7 +71,7 @@
#
# The table is based on the following web sites:
# http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/db_en.html
-# http://www.bsi-global.com/iso4217currency
+# http://www.currency-iso.org/iso_index/iso_tables.htm
# http://www.cia.gov/cia/publications/factbook/indexgeo.html
# AFGHANISTAN
@@ -105,7 +105,7 @@
# AUSTRIA
AT=EUR
# AZERBAIJAN
-AZ=AZM;2005-12-31-20-00-00;AZN
+AZ=AZN
# BAHAMAS
BS=BSD
# BAHRAIN
@@ -320,7 +320,7 @@
# LAO PEOPLE'S DEMOCRATIC REPUBLIC
LA=LAK
# LATVIA
-LV=LVL
+LV=LVL;2013-12-31-22-00-00;EUR
# LEBANON
LB=LBP
# LESOTHO
@@ -332,7 +332,7 @@
# LIECHTENSTEIN
LI=CHF
# LITHUANIA
-LT=LTL
+LT=LTL;2014-12-31-22-00-00;EUR
# LUXEMBOURG
LU=EUR
# MACAU
@@ -378,7 +378,7 @@
# MOROCCO
MA=MAD
# MOZAMBIQUE
-MZ=MZM;2006-06-30-22-00-00;MZN
+MZ=MZN
# MYANMAR
MM=MMK
# NAMIBIA
@@ -440,7 +440,7 @@
# REUNION
RE=EUR
# ROMANIA
-RO=ROL;2005-06-30-21-00-00;RON
+RO=RON
# RUSSIAN FEDERATION
RU=RUB
# RWANDA
@@ -463,6 +463,8 @@
WS=WST
# SAN MARINO
SM=EUR
+# SOUTH SUDAN
+SS=SSP
# SAO TOME AND PRINCIPE
ST=STD
# SAUDI ARABIA
@@ -532,7 +534,7 @@
# TUNISIA
TN=TND
# TURKEY
-TR=TRL;2004-12-31-22-00-00;TRY
+TR=TRY
# TURKMENISTAN
TM=TMT
# TURKS AND CAICOS ISLANDS
@@ -558,7 +560,7 @@
# VANUATU
VU=VUV
# VENEZUELA
-VE=VEB;2008-01-01-04-00-00;VEF
+VE=VEF
# VIET NAM
VN=VND
# VIRGIN ISLANDS, BRITISH
@@ -572,7 +574,7 @@
# YEMEN
YE=YER
# ZAMBIA
-ZM=ZMK
+ZM=ZMW
# ZIMBABWE
ZW=ZWL
@@ -583,7 +585,7 @@
minor0=\
ADP-BEF-BIF-BYB-BYR-CLF-CLP-DJF-ESP-GNF-\
GRD-ISK-ITL-JPY-KMF-KRW-LUF-MGF-PYG-PTE-RWF-\
- TPE-TRL-VUV-XAF-XOF-XPF
+ TPE-TRL-UGX-VND-VUV-XAF-XOF-XPF
minor1=
minor3=\
BHD-IQD-JOD-KWD-LYD-OMR-TND
--- ./jdk/src/share/classes/java/util/LocaleISOData.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/java/util/LocaleISOData.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -433,6 +433,7 @@
+ "SN" + "SEN" // Senegal, Republic of
+ "SO" + "SOM" // Somalia, Somali Republic
+ "SR" + "SUR" // Suriname, Republic of
+ + "SS" + "SSD" // South Sudan
+ "ST" + "STP" // Sao Tome and Principe, Democratic Republic of
+ "SV" + "SLV" // El Salvador, Republic of
+ "SX" + "SXM" // Sint Maarten (Dutch part)
--- ./jdk/src/share/classes/javax/accessibility/AccessibleContext.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/javax/accessibility/AccessibleContext.java Mon Jan 05 11:57:27 2015 -0800
@@ -25,6 +25,9 @@
package javax.accessibility;
+import sun.awt.AWTAccessor;
+import sun.awt.AppContext;
+
import java.util.Locale;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
@@ -79,6 +82,26 @@
*/
public abstract class AccessibleContext {
+ /**
+ * The AppContext that should be used to dispatch events for this
+ * AccessibleContext
+ */
+ private volatile AppContext targetAppContext;
+
+ static {
+ AWTAccessor.setAccessibleContextAccessor(new AWTAccessor.AccessibleContextAccessor() {
+ @Override
+ public void setAppContext(AccessibleContext accessibleContext, AppContext appContext) {
+ accessibleContext.targetAppContext = appContext;
+ }
+
+ @Override
+ public AppContext getAppContext(AccessibleContext accessibleContext) {
+ return accessibleContext.targetAppContext;
+ }
+ });
+ }
+
/**
* Constant used to determine when the accessibleName property has
* changed. The old value in the PropertyChangeEvent will be the old
--- ./jdk/src/share/classes/javax/swing/JComboBox.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/javax/swing/JComboBox.java Mon Jan 05 11:57:27 2015 -0800
@@ -1418,6 +1418,28 @@
}
/**
+ * {@inheritDoc}
+ */
+ @Override
+ protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) {
+ if (super.processKeyBinding(ks, e, condition, pressed)) {
+ return true;
+ }
+
+ if (!isEditable() || condition != WHEN_FOCUSED || getEditor() == null
+ || !Boolean.TRUE.equals(getClientProperty("JComboBox.isTableCellEditor"))) {
+ return false;
+ }
+
+ Component editorComponent = getEditor().getEditorComponent();
+ if (editorComponent instanceof JComponent) {
+ JComponent component = (JComponent) editorComponent;
+ return component.processKeyBinding(ks, e, WHEN_FOCUSED, pressed);
+ }
+ return false;
+ }
+
+ /**
* Sets the object that translates a keyboard character into a list
* selection. Typically, the first selection with a matching first
* character becomes the selected item.
--- ./jdk/src/share/classes/javax/swing/JComponent.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/javax/swing/JComponent.java Mon Jan 05 11:57:27 2015 -0800
@@ -63,6 +63,7 @@
import static javax.swing.ClientPropertyKey.*;
import javax.accessibility.*;
+import sun.awt.SunToolkit;
import sun.swing.SwingUtilities2;
import sun.swing.UIClientPropertyKey;
@@ -3989,6 +3990,17 @@
* @since 1.4
*/
public AccessibleKeyBinding getAccessibleKeyBinding() {
+ // Try to get the linked label's mnemonic if it exists
+ Object o = getClientProperty(JLabel.LABELED_BY_PROPERTY);
+ if (o instanceof Accessible){
+ AccessibleContext ac = ((Accessible) o).getAccessibleContext();
+ if (ac != null){
+ AccessibleComponent comp = ac.getAccessibleComponent();
+ if (! (comp instanceof AccessibleExtendedComponent))
+ return null;
+ return ((AccessibleExtendedComponent)comp).getAccessibleKeyBinding();
+ }
+ }
return null;
}
} // inner class AccessibleJComponent
@@ -4790,7 +4802,8 @@
* @see RepaintManager#addDirtyRegion
*/
public void repaint(long tm, int x, int y, int width, int height) {
- RepaintManager.currentManager(this).addDirtyRegion(this, x, y, width, height);
+ RepaintManager.currentManager(SunToolkit.targetToAppContext(this))
+ .addDirtyRegion(this, x, y, width, height);
}
@@ -4845,7 +4858,7 @@
// which was causing some people grief.
return;
}
- if (SwingUtilities.isEventDispatchThread()) {
+ if (SunToolkit.isDispatchThreadForAppContext(this)) {
invalidate();
RepaintManager.currentManager(this).addInvalidComponent(this);
}
@@ -4867,7 +4880,7 @@
revalidate();
}
};
- SwingUtilities.invokeLater(callRevalidate);
+ SunToolkit.executeOnEventHandlerThread(this, callRevalidate);
}
}
--- ./jdk/src/share/classes/javax/swing/JPopupMenu.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/javax/swing/JPopupMenu.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2008, 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
@@ -735,7 +735,7 @@
if (pref == null || pref.width != getWidth() ||
pref.height != getHeight()) {
- popup = getPopup();
+ showPopup();
} else {
validate();
}
@@ -786,7 +786,7 @@
if(b) {
firePopupMenuWillBecomeVisible();
- popup = getPopup();
+ showPopup();
firePropertyChange("visible", Boolean.FALSE, Boolean.TRUE);
@@ -804,7 +804,7 @@
}
/**
- * Returns a <code>Popup</code> instance from the
+ * Retrieves <code>Popup</code> instance from the
* <code>PopupMenuUI</code> that has had <code>show</code> invoked on
* it. If the current <code>popup</code> is non-null,
* this will invoke <code>dispose</code> of it, and then
@@ -813,7 +813,7 @@
* This does NOT fire any events, it is up the caller to dispatch
* the necessary events.
*/
- private Popup getPopup() {
+ private void showPopup() {
Popup oldPopup = popup;
if (oldPopup != null) {
@@ -837,8 +837,8 @@
desiredLocationY);
popupFactory.setPopupType(PopupFactory.LIGHT_WEIGHT_POPUP);
+ popup = newPopup;
newPopup.show();
- return newPopup;
}
/**
@@ -867,7 +867,7 @@
desiredLocationX = x;
desiredLocationY = y;
if(popup != null && (x != oldX || y != oldY)) {
- popup = getPopup();
+ showPopup();
}
}
@@ -1024,7 +1024,7 @@
Dimension newSize = getPreferredSize();
if (!oldSize.equals(newSize)) {
- popup = getPopup();
+ showPopup();
}
}
}
--- ./jdk/src/share/classes/javax/swing/JTable.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/javax/swing/JTable.java Mon Jan 05 11:57:27 2015 -0800
@@ -4041,7 +4041,7 @@
}
// Restore the lead
int viewLeadIndex = modelSelection.getLeadSelectionIndex();
- if (viewLeadIndex != -1) {
+ if (viewLeadIndex != -1 && !modelSelection.isSelectionEmpty()) {
viewLeadIndex = convertRowIndexToView(viewLeadIndex);
}
SwingUtilities2.setLeadAnchorWithoutSelection(
@@ -6587,8 +6587,8 @@
TableColumnModelListener, CellEditorListener, PropertyChangeListener,
AccessibleExtendedTable {
- int lastSelectedRow;
- int lastSelectedCol;
+ int previousFocusedRow;
+ int previousFocusedCol;
/**
* AccessibleJTable constructor
@@ -6603,8 +6603,10 @@
tcm.addColumnModelListener(this);
tcm.getSelectionModel().addListSelectionListener(this);
JTable.this.getModel().addTableModelListener(this);
- lastSelectedRow = JTable.this.getSelectedRow();
- lastSelectedCol = JTable.this.getSelectedColumn();
+ previousFocusedRow = JTable.this.getSelectionModel().
+ getLeadSelectionIndex();
+ previousFocusedCol = JTable.this.getColumnModel().
+ getSelectionModel().getLeadSelectionIndex();
}
// Listeners to track model, etc. changes to as to re-place the other
@@ -6932,18 +6934,21 @@
firePropertyChange(AccessibleContext.ACCESSIBLE_SELECTION_PROPERTY,
Boolean.valueOf(false), Boolean.valueOf(true));
- int selectedRow = JTable.this.getSelectedRow();
- int selectedCol = JTable.this.getSelectedColumn();
- if (selectedRow != lastSelectedRow ||
- selectedCol != lastSelectedCol) {
- Accessible oldA = getAccessibleAt(lastSelectedRow,
- lastSelectedCol);
- Accessible newA = getAccessibleAt(selectedRow, selectedCol);
+ // Using lead selection index to cover both cases: node selected and node
+ // is focused but not selected (Ctrl+up/down)
+ int focusedRow = JTable.this.getSelectionModel().getLeadSelectionIndex();
+ int focusedCol = JTable.this.getColumnModel().getSelectionModel().
+ getLeadSelectionIndex();
+
+ if (focusedRow != previousFocusedRow ||
+ focusedCol != previousFocusedCol){
+ Accessible oldA = getAccessibleAt(previousFocusedRow, previousFocusedCol);
+ Accessible newA = getAccessibleAt(focusedRow, focusedCol);
firePropertyChange(AccessibleContext.ACCESSIBLE_ACTIVE_DESCENDANT_PROPERTY,
- oldA, newA);
- lastSelectedRow = selectedRow;
- lastSelectedCol = selectedCol;
- }
+ oldA, newA);
+ previousFocusedRow = focusedRow;
+ previousFocusedCol = focusedCol;
+ }
}
--- ./jdk/src/share/classes/javax/swing/JTree.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/javax/swing/JTree.java Mon Jan 05 11:57:27 2015 -0800
@@ -1662,6 +1662,11 @@
leadPath = newPath;
firePropertyChange(LEAD_SELECTION_PATH_PROPERTY, oldValue, newPath);
+
+ if (accessibleContext != null){
+ ((AccessibleJTree)accessibleContext).
+ fireActiveDescendantPropertyChange(oldValue, newPath);
+ }
}
/**
@@ -4123,23 +4128,6 @@
*
*/
public void valueChanged(TreeSelectionEvent e) {
- // Fixes 4546503 - JTree is sending incorrect active
- // descendant events
- TreePath oldLeadSelectionPath = e.getOldLeadSelectionPath();
- leadSelectionPath = e.getNewLeadSelectionPath();
-
- if (oldLeadSelectionPath != leadSelectionPath) {
- // Set parent to null so AccessibleJTreeNode computes
- // its parent.
- Accessible oldLSA = leadSelectionAccessible;
- leadSelectionAccessible = (leadSelectionPath != null)
- ? new AccessibleJTreeNode(JTree.this,
- leadSelectionPath,
- null) // parent
- : null;
- firePropertyChange(AccessibleContext.ACCESSIBLE_ACTIVE_DESCENDANT_PROPERTY,
- oldLSA, leadSelectionAccessible);
- }
firePropertyChange(AccessibleContext.ACCESSIBLE_SELECTION_PROPERTY,
Boolean.valueOf(false), Boolean.valueOf(true));
}
@@ -4243,6 +4231,35 @@
}
}
+ /**
+ * Fire an active descendant property change notification.
+ * The active descendant is used for objects such as list,
+ * tree, and table, which may have transient children.
+ * It notifies screen readers the active child of the component
+ * has been changed so user can be notified from there.
+ *
+ * @param oldPath - lead path of previous active child
+ * @param newPath - lead path of current active child
+ *
+ */
+ void fireActiveDescendantPropertyChange(TreePath oldPath, TreePath newPath){
+ if(oldPath != newPath){
+ Accessible oldLSA = (oldPath != null)
+ ? new AccessibleJTreeNode(JTree.this,
+ oldPath,
+ null)
+ : null;
+
+ Accessible newLSA = (newPath != null)
+ ? new AccessibleJTreeNode(JTree.this,
+ newPath,
+ null)
+ : null;
+ firePropertyChange(AccessibleContext.ACCESSIBLE_ACTIVE_DESCENDANT_PROPERTY,
+ oldLSA, newLSA);
+ }
+ }
+
private AccessibleContext getCurrentAccessibleContext() {
Component c = getCurrentComponent();
--- ./jdk/src/share/classes/javax/swing/MenuSelectionManager.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/javax/swing/MenuSelectionManager.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2008, 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
@@ -30,6 +30,7 @@
import javax.swing.event.*;
import sun.awt.AppContext;
+import sun.swing.SwingUtilities2;
/**
* A MenuSelectionManager owns the selection in menu hierarchy.
@@ -60,6 +61,12 @@
if (msm == null) {
msm = new MenuSelectionManager();
context.put(MENU_SELECTION_MANAGER_KEY, msm);
+
+ // installing additional listener if found in the AppContext
+ Object o = context.get(SwingUtilities2.MENU_SELECTION_MANAGER_LISTENER_KEY);
+ if (o != null && o instanceof ChangeListener) {
+ msm.addChangeListener((ChangeListener) o);
+ }
}
return msm;
--- ./jdk/src/share/classes/javax/swing/PopupFactory.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/javax/swing/PopupFactory.java Mon Jan 05 11:57:27 2015 -0800
@@ -25,10 +25,14 @@
package javax.swing;
+import sun.awt.EmbeddedFrame;
+import sun.awt.OSInfo;
+
import java.applet.Applet;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
+import java.security.AccessController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -226,7 +230,13 @@
case MEDIUM_WEIGHT_POPUP:
return getMediumWeightPopup(owner, contents, ownerX, ownerY);
case HEAVY_WEIGHT_POPUP:
- return getHeavyWeightPopup(owner, contents, ownerX, ownerY);
+ Popup popup = getHeavyWeightPopup(owner, contents, ownerX, ownerY);
+ if ((AccessController.doPrivileged(OSInfo.getOSTypeAction()) ==
+ OSInfo.OSType.MACOSX) && (owner != null) &&
+ (EmbeddedFrame.getAppletIfAncestorOf(owner) != null)) {
+ ((HeavyWeightPopup)popup).setCacheEnabled(false);
+ }
+ return popup;
}
return null;
}
@@ -294,6 +304,8 @@
private static final Object heavyWeightPopupCacheKey =
new StringBuffer("PopupFactory.heavyWeightPopupCache");
+ private volatile boolean isCacheEnabled = true;
+
/**
* Returns either a new or recycled <code>Popup</code> containing
* the specified children.
@@ -448,12 +460,23 @@
}
}
+ /**
+ * Enables or disables cache for current object.
+ */
+ void setCacheEnabled(boolean enable) {
+ isCacheEnabled = enable;
+ }
+
//
// Popup methods
//
public void hide() {
super.hide();
- recycleHeavyWeightPopup(this);
+ if (isCacheEnabled) {
+ recycleHeavyWeightPopup(this);
+ } else {
+ this._dispose();
+ }
}
/**
--- ./jdk/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java Mon Jan 05 11:57:27 2015 -0800
@@ -30,6 +30,11 @@
import java.util.*;
import java.awt.FocusTraversalPolicy;
import sun.util.logging.PlatformLogger;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import sun.security.action.GetPropertyAction;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
/**
* A FocusTraversalPolicy that determines traversal order by sorting the
@@ -89,6 +94,34 @@
final private int FORWARD_TRAVERSAL = 0;
final private int BACKWARD_TRAVERSAL = 1;
+ /*
+ * When true (by default), the legacy merge-sort algo is used to sort an FTP cycle.
+ * When false, the default (tim-sort) algo is used, which may lead to an exception.
+ * See: JDK-8048887
+ */
+ private static final boolean legacySortingFTPEnabled;
+ private static final Method legacyMergeSortMethod;
+
+ static {
+ legacySortingFTPEnabled = "true".equals(AccessController.doPrivileged(
+ new GetPropertyAction("swing.legacySortingFTPEnabled", "true")));
+ legacyMergeSortMethod = legacySortingFTPEnabled ?
+ AccessController.doPrivileged(new PrivilegedAction<Method>() {
+ public Method run() {
+ try {
+ Class c = Class.forName("java.util.Arrays");
+ Method m = c.getDeclaredMethod("legacyMergeSort", new Class[]{Object[].class, Comparator.class});
+ m.setAccessible(true);
+ return m;
+ } catch (ClassNotFoundException | NoSuchMethodException e) {
+ // using default sorting algo
+ return null;
+ }
+ }
+ }) :
+ null;
+ }
+
/**
* Constructs a SortingFocusTraversalPolicy without a Comparator.
* Subclasses must set the Comparator using <code>setComparator</code>
@@ -133,10 +166,32 @@
private void enumerateAndSortCycle(Container focusCycleRoot, List<Component> cycle) {
if (focusCycleRoot.isShowing()) {
enumerateCycle(focusCycleRoot, cycle);
- Collections.sort(cycle, comparator);
+ if (!legacySortingFTPEnabled ||
+ !legacySort(cycle, comparator))
+ {
+ Collections.sort(cycle, comparator);
+ }
}
}
+ private boolean legacySort(List<Component> l, Comparator<? super Component> c) {
+ if (legacyMergeSortMethod == null)
+ return false;
+
+ Object[] a = l.toArray();
+ try {
+ legacyMergeSortMethod.invoke(null, a, c);
+ } catch (IllegalAccessException | InvocationTargetException e) {
+ return false;
+ }
+ ListIterator<Component> i = l.listIterator();
+ for (Object e : a) {
+ i.next();
+ i.set((Component)e);
+ }
+ return true;
+ }
+
private void enumerateCycle(Container container, List<Component> cycle) {
if (!(container.isVisible() && container.isDisplayable())) {
return;
--- ./jdk/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java Mon Jan 05 11:57:27 2015 -0800
@@ -941,16 +941,9 @@
directories.clear();
- File[] baseFolders;
- if (useShellFolder) {
- baseFolders = AccessController.doPrivileged(new PrivilegedAction<File[]>() {
- public File[] run() {
- return (File[]) ShellFolder.get("fileChooserComboBoxFolders");
- }
- });
- } else {
- baseFolders = fsv.getRoots();
- }
+ File[] baseFolders = (useShellFolder)
+ ? (File[]) ShellFolder.get("fileChooserComboBoxFolders")
+ : fsv.getRoots();
directories.addAll(Arrays.asList(baseFolders));
// Get the canonical (full) path. This has the side
--- ./jdk/src/share/classes/javax/swing/plaf/nimbus/skin.laf Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/javax/swing/plaf/nimbus/skin.laf Mon Jan 05 11:57:27 2015 -0800
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
- Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 1998, 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
@@ -13424,10 +13424,10 @@
<state stateKeys="Selected">
<style>
<textForeground>
- <matte red="255" green="255" blue="255" alpha="255" uiDefaultParentName="nimbusLightBackground" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0" uiResource="false"/>
+ <matte red="255" green="255" blue="255" alpha="255" uiDefaultParentName="nimbusLightBackground" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0"/>
</textForeground>
<textBackground>
- <matte red="57" green="105" blue="138" alpha="255" uiDefaultParentName="nimbusSelectionBackground" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0" uiResource="false"/>
+ <matte red="57" green="105" blue="138" alpha="255" uiDefaultParentName="nimbusSelectionBackground" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0"/>
</textBackground>
<background/>
<inherit-textForeground>false</inherit-textForeground>
@@ -13453,7 +13453,7 @@
<style>
<textForeground/>
<textBackground>
- <matte red="57" green="105" blue="138" alpha="255" uiDefaultParentName="nimbusSelectionBackground" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0" uiResource="false"/>
+ <matte red="57" green="105" blue="138" alpha="255" uiDefaultParentName="nimbusSelectionBackground" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0"/>
</textBackground>
<background/>
<inherit-textBackground>false</inherit-textBackground>
@@ -13477,7 +13477,7 @@
<state stateKeys="Disabled">
<style>
<textForeground>
- <matte red="142" green="143" blue="145" alpha="255" uiDefaultParentName="nimbusDisabledText" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0" uiResource="false"/>
+ <matte red="142" green="143" blue="145" alpha="255" uiDefaultParentName="nimbusDisabledText" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0"/>
</textForeground>
<textBackground/>
<background/>
@@ -13520,7 +13520,7 @@
</textForeground>
<textBackground/>
<background>
- <matte red="57" green="105" blue="138" alpha="255" uiDefaultParentName="nimbusSelectionBackground" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0" uiResource="false"/>
+ <matte red="57" green="105" blue="138" alpha="255" uiDefaultParentName="nimbusSelectionBackground" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0"/>
</background>
<inherit-textForeground>false</inherit-textForeground>
<inherit-background>false</inherit-background>
--- ./jdk/src/share/classes/javax/swing/text/html/parser/Parser.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/javax/swing/text/html/parser/Parser.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -2081,6 +2081,13 @@
// null end tag.
endTag(false);
continue;
+ } else if (textpos == 0) {
+ if (!legalElementContext(dtd.pcdata)) {
+ error("unexpected.pcdata");
+ }
+ if (last.breaksFlow()) {
+ space = false;
+ }
}
break;
--- ./jdk/src/share/classes/sun/awt/AWTAccessor.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/awt/AWTAccessor.java Mon Jan 05 11:57:27 2015 -0800
@@ -25,6 +25,7 @@
package sun.awt;
+import javax.accessibility.AccessibleContext;
import java.awt.*;
import java.awt.KeyboardFocusManager;
import java.awt.DefaultKeyboardFocusManager;
@@ -491,6 +492,11 @@
*/
void invokeAndWait(Object source, Runnable r)
throws InterruptedException, InvocationTargetException;
+
+ /**
+ * Gets most recent event time in the EventQueue
+ */
+ long getMostRecentEventTime(EventQueue eventQueue);
}
/*
@@ -723,6 +729,14 @@
/*
+ * An accessor object for the AccessibleContext class
+ */
+ public interface AccessibleContextAccessor {
+ void setAppContext(AccessibleContext accessibleContext, AppContext appContext);
+ AppContext getAppContext(AccessibleContext accessibleContext);
+ }
+
+ /*
* Accessor instances are initialized in the static initializers of
* corresponding AWT classes by using setters defined below.
*/
@@ -751,6 +765,7 @@
private static SequencedEventAccessor sequencedEventAccessor;
private static InvocationEventAccessor invocationEventAccessor;
private static ToolkitAccessor toolkitAccessor;
+ private static AccessibleContextAccessor accessibleContextAccessor;
/*
* Set an accessor object for the java.awt.Component class.
@@ -1177,4 +1192,22 @@
public static InvocationEventAccessor getInvocationEventAccessor() {
return invocationEventAccessor;
}
+
+
+ /*
+ * Get the accessor object for the javax.accessibility.AccessibleContext class.
+ */
+ public static AccessibleContextAccessor getAccessibleContextAccessor() {
+ if (accessibleContextAccessor == null) {
+ unsafe.ensureClassInitialized(AccessibleContext.class);
+ }
+ return accessibleContextAccessor;
+ }
+
+ /*
+ * Set the accessor object for the javax.accessibility.AccessibleContext class.
+ */
+ public static void setAccessibleContextAccessor(AccessibleContextAccessor accessor) {
+ AWTAccessor.accessibleContextAccessor = accessor;
+ }
}
--- ./jdk/src/share/classes/sun/awt/AppContext.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/awt/AppContext.java Mon Jan 05 11:57:27 2015 -0800
@@ -167,6 +167,9 @@
*/
private static volatile AppContext mainAppContext = null;
+ private static class GetAppContextLock {};
+ private final static Object getAppContextLock = new GetAppContextLock();
+
/*
* The hash map associated with this AppContext. A private delegate
* is used instead of subclassing HashMap so as to avoid all of
@@ -308,14 +311,16 @@
// if no contexts have been created yet. This covers standalone apps
// and excludes applets because by the time applet starts
// a number of contexts have already been created by the plugin.
- if (numAppContexts.get() == 0) {
- if (System.getProperty("javaplugin.version") == null &&
- System.getProperty("javawebstart.version") == null) {
- initMainAppContext();
- } else if (System.getProperty("javafx.version") != null &&
- threadGroup.getParent() != null) {
- // Swing inside JavaFX case
- SunToolkit.createNewAppContext();
+ synchronized (getAppContextLock) {
+ if (numAppContexts.get() == 0) {
+ if (System.getProperty("javaplugin.version") == null &&
+ System.getProperty("javawebstart.version") == null) {
+ initMainAppContext();
+ } else if (System.getProperty("javafx.version") != null &&
+ threadGroup.getParent() != null) {
+ // Swing inside JavaFX case
+ SunToolkit.createNewAppContext();
+ }
}
}
--- ./jdk/src/share/classes/sun/awt/SunToolkit.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/awt/SunToolkit.java Mon Jan 05 11:57:27 2015 -0800
@@ -378,7 +378,7 @@
* null or the target can't be found, a null with be returned.
*/
public static AppContext targetToAppContext(Object target) {
- if (target == null || GraphicsEnvironment.isHeadless()) {
+ if (target == null) {
return null;
}
AppContext context = getAppContext(target);
@@ -452,12 +452,10 @@
* via targetToAppContext() above.
*/
public static void insertTargetMapping(Object target, AppContext appContext) {
- if (!GraphicsEnvironment.isHeadless()) {
- if (!setAppContext(target, appContext)) {
- // Target is not a Component/MenuComponent, use the private Map
- // instead.
- appContextMap.put(target, appContext);
- }
+ if (!setAppContext(target, appContext)) {
+ // Target is not a Component/MenuComponent, use the private Map
+ // instead.
+ appContextMap.put(target, appContext);
}
}
--- ./jdk/src/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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
@@ -239,6 +239,13 @@
if (localTransferable != null) {
return localTransferable.getTransferData(df);
+ } else if (df.isMimeTypeEqual(DataFlavor.javaJVMLocalObjectMimeType)) {
+ // Workaround to JDK-8024061: Exception thrown when drag and drop
+ // between two components is executed quickly.
+ // It is expected localTransferable is not null if javaJVMLocalObjectMimeType
+ // is used. Executing further results in ClassCastException, so null is
+ // returned here as no transfer data is available in this case.
+ return null;
}
if (dropStatus != STATUS_ACCEPT || dropComplete) {
--- ./jdk/src/share/classes/sun/awt/image/BytePackedRaster.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/awt/image/BytePackedRaster.java Mon Jan 05 11:57:27 2015 -0800
@@ -1408,10 +1408,10 @@
}
}
- long lastbit = (long) dataBitOffset
- + (long) (height - 1) * (long) scanlineStride * 8
- + (long) (width - 1) * (long) pixelBitStride
- + (long) pixelBitStride - 1;
+ int lastbit = (dataBitOffset
+ + (height-1) * scanlineStride * 8
+ + (width-1) * pixelBitStride
+ + pixelBitStride - 1);
if (lastbit < 0 || lastbit / 8 >= data.length) {
throw new RasterFormatException("raster dimensions overflow " +
"array bounds");
--- ./jdk/src/share/classes/sun/java2d/SunGraphics2D.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/java2d/SunGraphics2D.java Mon Jan 05 11:57:27 2015 -0800
@@ -2388,6 +2388,8 @@
surfaceData = NullSurfaceData.theInstance;
}
+ invalidatePipe();
+
// this will recalculate the composite clip
setDevClip(surfaceData.getBounds());
--- ./jdk/src/share/classes/sun/java2d/opengl/OGLSurfaceDataProxy.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/java2d/opengl/OGLSurfaceDataProxy.java Mon Jan 05 11:57:27 2015 -0800
@@ -65,7 +65,11 @@
int w, int h)
{
if (cachedData == null) {
- cachedData = oglgc.createManagedSurface(w, h, transparency);
+ try {
+ cachedData = oglgc.createManagedSurface(w, h, transparency);
+ } catch (OutOfMemoryError er) {
+ return null;
+ }
}
return cachedData;
}
--- ./jdk/src/share/classes/sun/jvmstat/perfdata/monitor/protocol/local/PerfDataFile.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/jvmstat/perfdata/monitor/protocol/local/PerfDataFile.java Mon Jan 05 11:57:27 2015 -0800
@@ -233,8 +233,6 @@
* does not conform to the expected pattern
*/
public static int getLocalVmId(File file) {
- int lvmid = 0;
-
try {
// try 1.4.2 and later format first
return Integer.parseInt(file.getName());
@@ -287,31 +285,13 @@
return tmpDirName + dirNamePrefix + user + File.separator;
}
- /*
- * this static initializer would not be necessary if the
- * Solaris java.io.tmpdir property were set to /tmp by default
- */
static {
/*
- * Why is java.io.tmpdir on Solaris set to "/var/tmp/" when the
- * HotSpot JVM os:get_temp_path() method returns "/tmp/"
- *
- * Why do Solaris and Windows return a string with a trailing
- * file separator character where as Linix does not? (this change
- * seems to have occurred sometime during hopper beta)
+ * For this to work, the target VM and this code need to use
+ * the same directory. Instead of guessing which directory the
+ * VM is using, we will ask.
*/
- String tmpdir = System.getProperty("java.io.tmpdir");
-
- if (tmpdir.compareTo("/var/tmp/") == 0) {
- /*
- * shared memory files are created in /tmp. Interestingly,
- * java.io.tmpdir is set to "/var/tmp/" on Solaris and Linux,
- * but os::get_temp_directory() is set to "/tmp/" on these
- * platforms. the java.io.logging packages also makes reference
- * to java.io.tmpdir.
- */
- tmpdir = "/tmp/";
- }
+ String tmpdir = sun.misc.VMSupport.getVMTemporaryDirectory();
/*
* Assure that the string returned has a trailing File.separator
--- ./jdk/src/share/classes/sun/launcher/resources/launcher_de.properties Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/launcher/resources/launcher_de.properties Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2007, 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
@@ -34,7 +34,7 @@
java.launcher.ergo.message2 =\ weil die Ausf\u00FChrung auf einem Server-Class-Rechner erfolgt.\n
# Translators please note do not translate the options themselves
-java.launcher.opt.footer =\ -cp <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n -classpath <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n Eine durch {0} getrennte Liste mit Verzeichnissen, JAR-Archiven\n und ZIP-Archiven zur Suche nach Klassendateien.\n -D<name>=<value>\n Legt eine Systemeigenschaft fest\n -verbose:[class|gc|jni]\n Aktiviert die Verbose-Ausgabe\n -version Druckt Produktversion und beendet das Programm\n -version:<value>\n Erfordert die angegebene Version zur Ausf\u00FChrung\n -showversion Druckt Produktversion und f\u00E4hrt fort\n -jre-restrict-search | -no-jre-restrict-search\n Bezieht private JREs des Benutzers in Versionssuche ein bzw. schlie\u00DFt sie aus\n -? -help Druckt diese Hilfemeldung\n -X Druckt Hilfe zu Nicht-Standardoptionen\n -ea[:<packagename>...|:<classname>]\n -enableassertions[:<packagename>...|:<classname>]\n Aktiviert Assertionen mit angegebener Granularit\u00E4t\n -da[:<packagename>...|:<classname>]\n -disableassertions[:<packagename>...|:<classname>]\n Deaktiviert Assertionen mit angegebener Granularit\u00E4t\n -esa | -enablesystemassertions\n Aktiviert Systemassertionen\n -dsa | -disablesystemassertions\n Deaktiviert Systemassertionen\n -agentlib:<libname>[=<options>]\n L\u00E4dt native Agent Library <libname>, z.B. -agentlib:hprof\n siehe auch -agentlib:jdwp=help und -agentlib:hprof=help\n -agentpath:<pathname>[=<options>]\n L\u00E4dt native Agent Library nach vollem Pfadnamen\n -javaagent:<jarpath>[=<options>]\n L\u00E4dt Java-Programmiersprachen-Agent, siehe java.lang.instrument\n -splash:<imagepath>\n Zeigt Startbildschirm mit angegebenem Bild\nWeitere Einzelheiten finden Sie unter http://www.oracle.com/technetwork/java/javase/documentation/index.html
+java.launcher.opt.footer =\ -cp <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n -classpath <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n Eine durch {0} getrennte Liste mit Verzeichnissen, JAR-Archiven\n und ZIP-Archiven zur Suche nach Klassendateien.\n -D<name>=<value>\n Legt eine Systemeigenschaft fest\n -verbose:[class|gc|jni]\n Aktiviert die Verbose-Ausgabe\n -version Druckt Produktversion und beendet das Programm\n -version:<value>\n Erfordert die angegebene Version zur Ausf\u00FChrung\n -showversion Druckt Produktversion und f\u00E4hrt fort\n -jre-restrict-search | -no-jre-restrict-search\n Bezieht private JREs des Benutzers in Versionssuche ein bzw. schlie\u00DFt sie aus\n -? -help Druckt diese Hilfemeldung\n -X Druckt Hilfe zu Nicht-Standardoptionen\n -ea[:<packagename>...|:<classname>]\n -enableassertions[:<packagename>...|:<classname>]\n Aktiviert Assertions mit angegebener Granularit\u00E4t\n -da[:<packagename>...|:<classname>]\n -disableassertions[:<packagename>...|:<classname>]\n Deaktiviert Assertions mit angegebener Granularit\u00E4t\n -esa | -enablesystemassertions\n Aktiviert Systemassertionen\n -dsa | -disablesystemassertions\n Deaktiviert Systemassertionen\n -agentlib:<libname>[=<options>]\n L\u00E4dt native Agent Library <libname>, z.B. -agentlib:hprof\n siehe auch -agentlib:jdwp=help und -agentlib:hprof=help\n -agentpath:<pathname>[=<options>]\n L\u00E4dt native Agent Library nach vollem Pfadnamen\n -javaagent:<jarpath>[=<options>]\n L\u00E4dt Java-Programmiersprachen-Agent, siehe java.lang.instrument\n -splash:<imagepath>\n Zeigt Startbildschirm mit angegebenem Bild\nWeitere Einzelheiten finden Sie unter http://www.oracle.com/technetwork/java/javase/documentation/index.html
# Translators please note do not translate the options themselves
java.launcher.X.usage=\ -Xmixed Ausf\u00FChrung im gemischten Modus (Standard)\n -Xint Nur Ausf\u00FChrung im interpretierten Modus\n -Xbootclasspath:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n Legt Suchpfad f\u00FCr Bootstrap-Klassen und Ressourcen fest\n -Xbootclasspath/a:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n H\u00E4ngt an das Ende des Bootstrap Classpath an\n -Xbootclasspath/p:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n Stellt Bootstrap Classpath voran\n -Xdiag Zeigt zus\u00E4tzliche Diagnosemeldungen an\n -Xnoclassgc Deaktiviert Klassen-Garbage Collection\n -Xincgc Aktiviert inkrementelle Garbage Collection\n -Xloggc:<file> Loggt GC-Status in einer Datei mit Zeitstempeln\n -Xbatch Deaktiviert Hintergrundkompilierung\n -Xms<size> Legt anf\u00E4ngliche Java Heap-Gr\u00F6\u00DFe fest\n -Xmx<size> Legt maximale Java Heap-Gr\u00F6\u00DFe fest\n -Xss<size> Legt Java-Threadstackgr\u00F6\u00DFe fest\n -Xprof Gibt CPU-Profiling-Daten aus\n -Xfuture Aktiviert strengste Pr\u00FCfungen, antizipiert zuk\u00FCnftigen Standardwert\n -Xrs Reduziert Verwendung von BS-Signalen durch Java/VM (siehe Dokumentation)\n -Xcheck:jni F\u00FChrt zus\u00E4tzliche Pr\u00FCfungen f\u00FCr JNI-Funktionen durch\n -Xshare:off Kein Versuch, gemeinsame Klassendaten zu verwenden\n -Xshare:auto Verwendet gemeinsame Klassendaten, wenn m\u00F6glich (Standard)\n -Xshare:on Erfordert die Verwendung gemeinsamer Klassendaten, sonst verl\u00E4uft der Vorgang nicht erfolgreich.\n -XshowSettings Zeigt alle Einstellungen und f\u00E4hrt fort\n -XshowSettings:all\n Zeigt alle Einstellungen und f\u00E4hrt fort\n -XshowSettings:vm Zeigt alle VM-bezogenen Einstellungen und f\u00E4hrt fort\n -XshowSettings:properties\n Zeigt alle Eigenschaftseinstellungen und f\u00E4hrt fort\n -XshowSettings:locale\n Zeigt alle gebietsschemabezogenen Einstellungen und f\u00E4hrt fort\n\nDie -X-Optionen sind keine Standardoptionen und k\u00F6nnen ohne Vorank\u00FCndigung ge\u00E4ndert werden.\n
--- ./jdk/src/share/classes/sun/misc/VMSupport.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/misc/VMSupport.java Mon Jan 05 11:57:27 2015 -0800
@@ -97,4 +97,14 @@
throw new RuntimeException(ioe.getMessage());
}
}
+
+ /*
+ * Return the temporary directory that the VM uses for the attach
+ * and perf data files.
+ *
+ * It is important that this directory is well-known and the
+ * same for all VM instances. It cannot be affected by configuration
+ * variables such as java.io.tmpdir.
+ */
+ public static native String getVMTemporaryDirectory();
}
--- ./jdk/src/share/classes/sun/net/www/http/HttpClient.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/net/www/http/HttpClient.java Mon Jan 05 11:57:27 2015 -0800
@@ -651,7 +651,9 @@
// try once more
openServer();
if (needsTunneling()) {
+ MessageHeader origRequests = requests;
httpuc.doTunneling();
+ requests = origRequests;
}
afterConnect();
writeRequests(requests, poster);
@@ -762,7 +764,9 @@
cachedHttpClient = false;
openServer();
if (needsTunneling()) {
+ MessageHeader origRequests = requests;
httpuc.doTunneling();
+ requests = origRequests;
}
afterConnect();
writeRequests(requests, poster);
--- ./jdk/src/share/classes/sun/net/www/protocol/ftp/FtpURLConnection.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/net/www/protocol/ftp/FtpURLConnection.java Mon Jan 05 11:57:27 2015 -0800
@@ -301,7 +301,7 @@
throw new IOException(fe);
}
try {
- ftp.login(user, password.toCharArray());
+ ftp.login(user, password == null ? null : password.toCharArray());
} catch (sun.net.ftp.FtpProtocolException e) {
ftp.close();
// Backward compatibility
--- ./jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java Mon Jan 05 11:57:27 2015 -0800
@@ -315,6 +315,7 @@
/* try auth without calling Authenticator. Used for transparent NTLM authentication */
private boolean tryTransparentNTLMServer = true;
private boolean tryTransparentNTLMProxy = true;
+ private boolean useProxyResponseCode = false;
/* Used by Windows specific code */
private Object authObj;
@@ -2032,6 +2033,14 @@
if (tryTransparentNTLMProxy) {
tryTransparentNTLMProxy =
NTLMAuthenticationProxy.proxy.supportsTransparentAuth;
+ /* If the platform supports transparent authentication
+ * then normally it's ok to do transparent auth to a proxy
+ * because we generally trust proxies (chosen by the user)
+ * But not in the case of 305 response where the server
+ * chose it. */
+ if (tryTransparentNTLMProxy && useProxyResponseCode) {
+ tryTransparentNTLMProxy = false;
+ }
}
a = null;
if (tryTransparentNTLMProxy) {
@@ -2364,6 +2373,10 @@
requests.set(0, method + " " + getRequestURI()+" " +
httpVersion, null);
connected = true;
+ // need to remember this in case NTLM proxy authentication gets
+ // used. We can't use transparent authentication when user
+ // doesn't know about proxy.
+ useProxyResponseCode = true;
} else {
// maintain previous headers, just change the name
// of the file we're getting
--- ./jdk/src/share/classes/sun/net/www/protocol/http/NegotiateAuthentication.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/net/www/protocol/http/NegotiateAuthentication.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -32,6 +32,7 @@
import sun.net.www.HeaderParser;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
+import sun.util.logging.PlatformLogger;
import static sun.net.www.protocol.http.AuthScheme.NEGOTIATE;
import static sun.net.www.protocol.http.AuthScheme.KERBEROS;
@@ -45,6 +46,7 @@
class NegotiateAuthentication extends AuthenticationInfo {
private static final long serialVersionUID = 100L;
+ private static final PlatformLogger logger = HttpURLConnection.getHttpLogger();
final private HttpCallerInfo hci;
@@ -80,6 +82,31 @@
}
/**
+ * Find out if the HttpCallerInfo supports Negotiate protocol.
+ * @return true if supported
+ */
+ public static boolean isSupported(HttpCallerInfo hci) {
+ ClassLoader loader = null;
+ try {
+ loader = Thread.currentThread().getContextClassLoader();
+ } catch (SecurityException se) {
+ if (logger.isLoggable(PlatformLogger.Level.FINER)) {
+ logger.finer("NegotiateAuthentication: " +
+ "Attempt to get the context class loader failed - " + se);
+ }
+ }
+
+ if (loader != null) {
+ // Lock on the class loader instance to avoid the deadlock engaging
+ // the lock in "ClassLoader.loadClass(String, boolean)" method.
+ synchronized (loader) {
+ return isSupportedImpl(hci);
+ }
+ }
+ return isSupportedImpl(hci);
+ }
+
+ /**
* Find out if the HttpCallerInfo supports Negotiate protocol. In order to
* find out yes or no, an initialization of a Negotiator object against it
* is tried. The generated object will be cached under the name of ths
@@ -90,7 +117,7 @@
*
* @return true if supported
*/
- synchronized public static boolean isSupported(HttpCallerInfo hci) {
+ private static synchronized boolean isSupportedImpl(HttpCallerInfo hci) {
if (supported == null) {
supported = new HashMap <String, Boolean>();
cache = new HashMap <String, Negotiator>();
--- ./jdk/src/share/classes/sun/rmi/transport/Transport.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/rmi/transport/Transport.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2008, 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
@@ -37,6 +37,10 @@
import java.rmi.server.RemoteServer;
import java.rmi.server.ServerNotActiveException;
import java.security.AccessControlContext;
+import java.security.AccessController;
+import java.security.Permissions;
+import java.security.PrivilegedAction;
+import java.security.ProtectionDomain;
import sun.rmi.runtime.Log;
import sun.rmi.server.Dispatcher;
import sun.rmi.server.UnicastServerRef;
@@ -67,6 +71,15 @@
/** ObjID for DGCImpl */
private static final ObjID dgcID = new ObjID(ObjID.DGC_ID);
+ /** AccessControlContext for setting context ClassLoader */
+ private static final AccessControlContext SETCCL_ACC;
+ static {
+ Permissions perms = new Permissions();
+ perms.add(new RuntimePermission("setContextClassLoader"));
+ ProtectionDomain[] pd = { new ProtectionDomain(null, perms) };
+ SETCCL_ACC = new AccessControlContext(pd);
+ }
+
/**
* Returns a <I>Channel</I> that generates connections to the
* endpoint <I>ep</I>. A Channel is an object that creates and
@@ -116,6 +129,19 @@
protected abstract void checkAcceptPermission(AccessControlContext acc);
/**
+ * Sets the context class loader for the current thread.
+ */
+ private static void setContextClassLoader(final ClassLoader ccl) {
+ AccessController.doPrivileged(new PrivilegedAction<Void> () {
+ @Override
+ public Void run() {
+ Thread.currentThread().setContextClassLoader(ccl);
+ return null;
+ }
+ }, SETCCL_ACC);
+ }
+
+ /**
* Service an incoming remote call. When a message arrives on the
* connection indicating the beginning of a remote call, the
* threads are required to call the <I>serviceCall</I> method of
@@ -163,11 +189,10 @@
target.getAccessControlContext();
ClassLoader ccl = target.getContextClassLoader();
- Thread t = Thread.currentThread();
- ClassLoader savedCcl = t.getContextClassLoader();
+ ClassLoader savedCcl = Thread.currentThread().getContextClassLoader();
try {
- t.setContextClassLoader(ccl);
+ setContextClassLoader(ccl);
currentTransport.set(this);
try {
java.security.AccessController.doPrivileged(
@@ -182,7 +207,7 @@
throw (IOException) pae.getException();
}
} finally {
- t.setContextClassLoader(savedCcl);
+ setContextClassLoader(savedCcl);
currentTransport.set(null);
}
--- ./jdk/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 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
@@ -49,6 +49,9 @@
import java.rmi.server.UID;
import java.security.AccessControlContext;
import java.security.AccessController;
+import java.security.Permissions;
+import java.security.PrivilegedAction;
+import java.security.ProtectionDomain;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
@@ -122,6 +125,14 @@
private static final ThreadLocal<ConnectionHandler>
threadConnectionHandler = new ThreadLocal<>();
+ /** an AccessControlContext with no permissions */
+ private static final AccessControlContext NOPERMS_ACC;
+ static {
+ Permissions perms = new Permissions();
+ ProtectionDomain[] pd = { new ProtectionDomain(null, perms) };
+ NOPERMS_ACC = new AccessControlContext(pd);
+ }
+
/** endpoints for this transport */
private final LinkedList<TCPEndpoint> epList;
/** number of objects exported on this transport */
@@ -667,7 +678,13 @@
t.setName("RMI TCP Connection(" +
connectionCount.incrementAndGet() +
")-" + remoteHost);
- run0();
+ AccessController.doPrivileged(new PrivilegedAction<Void>() {
+ @Override
+ public Void run() {
+ run0();
+ return null;
+ }
+ }, NOPERMS_ACC);
} finally {
t.setName(name);
}
--- ./jdk/src/share/classes/sun/security/jgss/GSSHeader.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/jgss/GSSHeader.java Mon Jan 05 11:57:27 2015 -0800
@@ -270,6 +270,9 @@
value <<= 8;
value += 0x0ff & in.read();
}
+ if (value < 0) {
+ throw new IOException("Invalid length bytes");
+ }
}
return value;
}
--- ./jdk/src/share/classes/sun/security/jgss/GSSNameImpl.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/jgss/GSSNameImpl.java Mon Jan 05 11:57:27 2015 -0800
@@ -257,6 +257,10 @@
((0xFF & bytes[pos++]) << 16) |
((0xFF & bytes[pos++]) << 8) |
(0xFF & bytes[pos++]));
+ if (mechPortionLen < 0 || pos > bytes.length - mechPortionLen) {
+ throw new GSSExceptionImpl(GSSException.BAD_NAME,
+ "Exported name mech name is corrupted!");
+ }
byte[] mechPortion = new byte[mechPortionLen];
System.arraycopy(bytes, pos, mechPortion, 0, mechPortionLen);
--- ./jdk/src/share/classes/sun/security/jgss/wrapper/GSSNameElement.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/jgss/wrapper/GSSNameElement.java Mon Jan 05 11:57:27 2015 -0800
@@ -233,6 +233,9 @@
((0xFF & nameVal[pos++]) << 16) |
((0xFF & nameVal[pos++]) << 8) |
(0xFF & nameVal[pos++]));
+ if (mechPortionLen < 0) {
+ throw new GSSException(GSSException.BAD_NAME);
+ }
byte[] mechPortion = new byte[mechPortionLen];
System.arraycopy(nameVal, pos, mechPortion, 0, mechPortionLen);
return mechPortion;
--- ./jdk/src/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java Mon Jan 05 11:57:27 2015 -0800
@@ -123,7 +123,7 @@
} else {
type = read(4);
}
- length = read(4);
+ length = readLength4();
String[] result = new String[length + 1];
/*
* DCE includes the principal's realm in the count; the new format
@@ -132,7 +132,7 @@
if (version == KRB5_FCC_FVNO_1)
length--;
for (int i = 0; i <= length; i++) {
- namelength = read(4);
+ namelength = readLength4();
if (namelength > MAXNAMELENGTH) {
throw new IOException("Invalid name length in principal name.");
}
@@ -182,7 +182,7 @@
keyType = read(2);
if (version == KRB5_FCC_FVNO_3)
read(2); /* keytype recorded twice in fvno 3 */
- keyLen = read(4);
+ keyLen = readLength4();
byte[] bytes = new byte[keyLen];
for (int i = 0; i < keyLen; i++) {
bytes[i] = (byte)read();
@@ -208,12 +208,12 @@
HostAddress[] readAddr() throws IOException, KrbApErrException {
int numAddrs, addrType, addrLength;
- numAddrs = read(4);
+ numAddrs = readLength4();
if (numAddrs > 0) {
HostAddress[] addrs = new HostAddress[numAddrs];
for (int i = 0; i < numAddrs; i++) {
addrType = read(2);
- addrLength = read(4);
+ addrLength = readLength4();
if (!(addrLength == 4 || addrLength == 16)) {
if (DEBUG) {
System.out.println("Incorrect address format.");
@@ -232,13 +232,13 @@
AuthorizationDataEntry[] readAuth() throws IOException {
int num, adtype, adlength;
- num = read(4);
+ num = readLength4();
if (num > 0) {
AuthorizationDataEntry[] auData = new AuthorizationDataEntry[num];
byte[] data = null;
for (int i = 0; i < num; i++) {
adtype = read(2);
- adlength = read(4);
+ adlength = readLength4();
data = new byte[adlength];
for (int j = 0; j < adlength; j++) {
data[j] = (byte)read();
@@ -252,7 +252,7 @@
byte[] readData() throws IOException {
int length;
- length = read(4);
+ length = readLength4();
if (length == 0) {
return null;
} else {
--- ./jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java Mon Jan 05 11:57:27 2015 -0800
@@ -154,44 +154,44 @@
throws IOException, KrbException {
primaryPrincipal = principal;
primaryRealm = principal.getRealm();
- CCacheOutputStream cos =
- new CCacheOutputStream(new FileOutputStream(name));
- version = KRB5_FCC_FVNO_3;
- cos.writeHeader(primaryPrincipal, version);
- cos.close();
+ try (FileOutputStream fos = new FileOutputStream(name);
+ CCacheOutputStream cos = new CCacheOutputStream(fos)) {
+ version = KRB5_FCC_FVNO_3;
+ cos.writeHeader(primaryPrincipal, version);
+ }
load(name);
}
synchronized void load(String name) throws IOException, KrbException {
PrincipalName p;
- CCacheInputStream cis =
- new CCacheInputStream(new FileInputStream(name));
- version = cis.readVersion();
- if (version == KRB5_FCC_FVNO_4) {
- tag = cis.readTag();
- } else {
- tag = null;
- if (version == KRB5_FCC_FVNO_1 || version == KRB5_FCC_FVNO_2) {
- cis.setNativeByteOrder();
+ try (FileInputStream fis = new FileInputStream(name);
+ CCacheInputStream cis = new CCacheInputStream(fis)) {
+ version = cis.readVersion();
+ if (version == KRB5_FCC_FVNO_4) {
+ tag = cis.readTag();
+ } else {
+ tag = null;
+ if (version == KRB5_FCC_FVNO_1 || version == KRB5_FCC_FVNO_2) {
+ cis.setNativeByteOrder();
+ }
+ }
+ p = cis.readPrincipal(version);
+
+ if (primaryPrincipal != null) {
+ if (!(primaryPrincipal.match(p))) {
+ throw new IOException("Primary principals don't match.");
+ }
+ } else
+ primaryPrincipal = p;
+ primaryRealm = primaryPrincipal.getRealm();
+ credentialsList = new Vector<Credentials>();
+ while (cis.available() > 0) {
+ Credentials cred = cis.readCred(version);
+ if (cred != null) {
+ credentialsList.addElement(cred);
+ }
}
}
- p = cis.readPrincipal(version);
-
- if (primaryPrincipal != null) {
- if (!(primaryPrincipal.match(p))) {
- throw new IOException("Primary principals don't match.");
- }
- } else
- primaryPrincipal = p;
- primaryRealm = primaryPrincipal.getRealm();
- credentialsList = new Vector<Credentials> ();
- while (cis.available() > 0) {
- Credentials cred = cis.readCred(version);
- if (cred != null) {
- credentialsList.addElement(cred);
- }
- }
- cis.close();
}
@@ -250,16 +250,16 @@
* Saves the credentials cache file to the disk.
*/
public synchronized void save() throws IOException, Asn1Exception {
- CCacheOutputStream cos
- = new CCacheOutputStream(new FileOutputStream(cacheName));
- cos.writeHeader(primaryPrincipal, version);
- Credentials[] tmp = null;
- if ((tmp = getCredsList()) != null) {
- for (int i = 0; i < tmp.length; i++) {
- cos.addCreds(tmp[i]);
+ try (FileOutputStream fos = new FileOutputStream(cacheName);
+ CCacheOutputStream cos = new CCacheOutputStream(fos)) {
+ cos.writeHeader(primaryPrincipal, version);
+ Credentials[] tmp = null;
+ if ((tmp = getCredsList()) != null) {
+ for (int i = 0; i < tmp.length; i++) {
+ cos.addCreds(tmp[i]);
+ }
}
}
- cos.close();
}
boolean match(String[] s1, String[] s2) {
--- ./jdk/src/share/classes/sun/security/krb5/internal/util/KrbDataInputStream.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/krb5/internal/util/KrbDataInputStream.java Mon Jan 05 11:57:27 2015 -0800
@@ -56,15 +56,33 @@
public KrbDataInputStream(InputStream is){
super(is);
}
+
+ /**
+ * Reads a length value which is represented in 4 bytes from
+ * this input stream. The value must be positive.
+ * @return the length value represented by this byte array.
+ * @throws IOException if there are not enough bytes or it represents
+ * a negative value
+ */
+ final public int readLength4() throws IOException {
+ int len = read(4);
+ if (len < 0) {
+ throw new IOException("Invalid encoding");
+ }
+ return len;
+ }
+
/**
* Reads up to the specific number of bytes from this input stream.
* @param num the number of bytes to be read.
* @return the int value of this byte array.
- * @exception IOException.
+ * @throws IOException if there are not enough bytes
*/
- public int read(int num) throws IOException{
+ public int read(int num) throws IOException {
byte[] bytes = new byte[num];
- read(bytes, 0, num);
+ if (read(bytes, 0, num) != num) {
+ throw new IOException("Premature end of stream reached");
+ }
int result = 0;
for (int i = 0; i < num; i++) {
if (bigEndian) {
--- ./jdk/src/share/classes/sun/security/pkcs/SignerInfo.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/pkcs/SignerInfo.java Mon Jan 05 11:57:27 2015 -0800
@@ -273,24 +273,6 @@
return certList;
}
- // Copied from com.sun.crypto.provider.OAEPParameters.
- private static String convertToStandardName(String internalName) {
- if (internalName.equals("SHA")) {
- return "SHA-1";
- } else if (internalName.equals("SHA224")) {
- return "SHA-224";
- } else if (internalName.equals("SHA256")) {
- return "SHA-256";
- } else if (internalName.equals("SHA384")) {
- return "SHA-384";
- } else if (internalName.equals("SHA512")) {
- return "SHA-512";
- } else {
- return internalName;
- }
- }
-
-
/* Returns null if verify fails, this signerInfo if
verify succeeds. */
SignerInfo verify(PKCS7 block, byte[] data)
@@ -330,7 +312,7 @@
return null;
MessageDigest md = MessageDigest.getInstance(
- convertToStandardName(digestAlgname));
+ AlgorithmId.getStandardDigestName(digestAlgname));
byte[] computedMessageDigest = md.digest(data);
if (messageDigest.length != computedMessageDigest.length)
--- ./jdk/src/share/classes/sun/security/provider/SecureRandom.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/provider/SecureRandom.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -29,6 +29,7 @@
import java.security.MessageDigest;
import java.security.SecureRandomSpi;
import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
/**
* <p>This class provides a crytpographically strong pseudo-random number
@@ -94,9 +95,19 @@
*/
private void init(byte[] seed) {
try {
- digest = MessageDigest.getInstance ("SHA");
- } catch (NoSuchAlgorithmException e) {
- throw new InternalError("internal error: SHA-1 not available.");
+ /*
+ * Use the local SUN implementation to avoid native
+ * performance overhead.
+ */
+ digest = MessageDigest.getInstance("SHA", "SUN");
+ } catch (NoSuchProviderException | NoSuchAlgorithmException e) {
+ // Fallback to any available.
+ try {
+ digest = MessageDigest.getInstance("SHA");
+ } catch (NoSuchAlgorithmException exc) {
+ throw new InternalError(
+ "internal error: SHA-1 not available.");
+ }
}
if (seed != null) {
@@ -258,9 +269,19 @@
s.defaultReadObject ();
try {
- digest = MessageDigest.getInstance ("SHA");
- } catch (NoSuchAlgorithmException e) {
- throw new InternalError("internal error: SHA-1 not available.");
+ /*
+ * Use the local SUN implementation to avoid native
+ * performance overhead.
+ */
+ digest = MessageDigest.getInstance("SHA", "SUN");
+ } catch (NoSuchProviderException | NoSuchAlgorithmException e) {
+ // Fallback to any available.
+ try {
+ digest = MessageDigest.getInstance("SHA");
+ } catch (NoSuchAlgorithmException exc) {
+ throw new InternalError(
+ "internal error: SHA-1 not available.");
+ }
}
}
}
--- ./jdk/src/share/classes/sun/security/provider/certpath/ForwardBuilder.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/provider/certpath/ForwardBuilder.java Mon Jan 05 11:57:27 2015 -0800
@@ -375,20 +375,22 @@
boolean add = false;
for (AccessDescription ad : adList) {
CertStore cs = URICertStore.getInstance(ad);
- try {
- if (certs.addAll((Collection<X509Certificate>)
- cs.getCertificates(caSelector))) {
- add = true;
- if (!searchAllCertStores) {
- return true;
+ if (cs != null) {
+ try {
+ if (certs.addAll((Collection<X509Certificate>)
+ cs.getCertificates(caSelector))) {
+ add = true;
+ if (!searchAllCertStores) {
+ return true;
+ }
}
+ } catch (CertStoreException cse) {
+ if (debug != null) {
+ debug.println("exception getting certs from CertStore:");
+ cse.printStackTrace();
+ }
+ continue;
}
- } catch (CertStoreException cse) {
- if (debug != null) {
- debug.println("exception getting certs from CertStore:");
- cse.printStackTrace();
- }
- continue;
}
}
return add;
--- ./jdk/src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java Mon Jan 05 11:57:27 2015 -0800
@@ -234,10 +234,6 @@
// check trusted certificate's subject
issuerSelector.setSubject(firstCert.getIssuerX500Principal());
- // check the validity period
- issuerSelector.setValidityPeriod(firstCert.getNotBefore(),
- firstCert.getNotAfter());
-
/*
* Facilitate certification path construction with authority
* key identifier and subject key identifier.
--- ./jdk/src/share/classes/sun/security/smartcardio/CardImpl.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/smartcardio/CardImpl.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -26,9 +26,9 @@
package sun.security.smartcardio;
import java.nio.ByteBuffer;
-
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import javax.smartcardio.*;
-
import static sun.security.smartcardio.PCSC.*;
/**
@@ -62,6 +62,19 @@
// thread holding exclusive access to the card, or null
private volatile Thread exclusiveThread;
+ // used for platform specific logic
+ private static final boolean isWindows;
+
+ static {
+ final String osName = AccessController.doPrivileged(
+ new PrivilegedAction<String>() {
+ @Override public String run() {
+ return System.getProperty("os.name");
+ }
+ });
+ isWindows = osName.startsWith("Windows");
+ }
+
CardImpl(TerminalImpl terminal, String protocol) throws PCSCException {
this.terminal = terminal;
int sharingMode = SCARD_SHARE_SHARED;
@@ -74,7 +87,12 @@
connectProtocol = SCARD_PROTOCOL_T1;
} else if (protocol.equalsIgnoreCase("direct")) {
// testing
- connectProtocol = 0;
+
+ // MSDN states that the preferred protocol can be zero, but doesn't
+ // specify whether other values are allowed.
+ // pcsc-lite implementation expects the preferred protocol to be non zero.
+ connectProtocol = isWindows ? 0 : SCARD_PROTOCOL_RAW;
+
sharingMode = SCARD_SHARE_DIRECT;
} else {
throw new IllegalArgumentException("Unsupported protocol " + protocol);
@@ -237,6 +255,12 @@
}
}
+ private static final boolean invertReset =
+ Boolean.parseBoolean(
+ java.security.AccessController.doPrivileged(
+ new sun.security.action.GetPropertyAction(
+ "sun.security.smartcardio.invertCardReset", "true")));
+
public void disconnect(boolean reset) throws CardException {
if (reset) {
checkSecurity("reset");
@@ -245,8 +269,12 @@
return;
}
checkExclusive();
+ // to preserve old behaviour, don't change flag until here
+ if (invertReset) {
+ reset = !reset;
+ }
try {
- SCardDisconnect(cardId, (reset ? SCARD_LEAVE_CARD : SCARD_RESET_CARD));
+ SCardDisconnect(cardId, (reset ? SCARD_RESET_CARD : SCARD_LEAVE_CARD));
} catch (PCSCException e) {
throw new CardException("disconnect() failed", e);
} finally {
--- ./jdk/src/share/classes/sun/security/ssl/CipherSuite.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/ssl/CipherSuite.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -82,6 +82,10 @@
private final static boolean ALLOW_ECC = Debug.getBooleanProperty
("com.sun.net.ssl.enableECC", true);
+ // preserve the old order of RC4 preference
+ private final static boolean PRESERVE_RC4 = Debug.getBooleanProperty
+ ("jdk.tls.preserveRC4CipherSuites", false);
+
// Map Integer(id) -> CipherSuite
// contains all known CipherSuites
private final static Map<Integer,CipherSuite> idMap;
@@ -963,16 +967,18 @@
add("TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
0x0032, --p, K_DHE_DSS, B_AES_128, T);
- add("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
- 0xC007, --p, K_ECDHE_ECDSA, B_RC4_128, N);
- add("TLS_ECDHE_RSA_WITH_RC4_128_SHA",
- 0xC011, --p, K_ECDHE_RSA, B_RC4_128, N);
- add("SSL_RSA_WITH_RC4_128_SHA",
- 0x0005, --p, K_RSA, B_RC4_128, N);
- add("TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
- 0xC002, --p, K_ECDH_ECDSA, B_RC4_128, N);
- add("TLS_ECDH_RSA_WITH_RC4_128_SHA",
- 0xC00C, --p, K_ECDH_RSA, B_RC4_128, N);
+ if (PRESERVE_RC4) {
+ add("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
+ 0xC007, --p, K_ECDHE_ECDSA, B_RC4_128, N);
+ add("TLS_ECDHE_RSA_WITH_RC4_128_SHA",
+ 0xC011, --p, K_ECDHE_RSA, B_RC4_128, N);
+ add("SSL_RSA_WITH_RC4_128_SHA",
+ 0x0005, --p, K_RSA, B_RC4_128, N);
+ add("TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
+ 0xC002, --p, K_ECDH_ECDSA, B_RC4_128, N);
+ add("TLS_ECDH_RSA_WITH_RC4_128_SHA",
+ 0xC00C, --p, K_ECDH_RSA, B_RC4_128, N);
+ }
add("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA",
0xC008, --p, K_ECDHE_ECDSA, B_3DES, T);
@@ -989,6 +995,18 @@
add("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA",
0x0013, --p, K_DHE_DSS, B_3DES, N);
+ if (!PRESERVE_RC4) {
+ add("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
+ 0xC007, --p, K_ECDHE_ECDSA, B_RC4_128, N);
+ add("TLS_ECDHE_RSA_WITH_RC4_128_SHA",
+ 0xC011, --p, K_ECDHE_RSA, B_RC4_128, N);
+ add("SSL_RSA_WITH_RC4_128_SHA",
+ 0x0005, --p, K_RSA, B_RC4_128, N);
+ add("TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
+ 0xC002, --p, K_ECDH_ECDSA, B_RC4_128, N);
+ add("TLS_ECDH_RSA_WITH_RC4_128_SHA",
+ 0xC00C, --p, K_ECDH_RSA, B_RC4_128, N);
+ }
add("SSL_RSA_WITH_RC4_128_MD5",
0x0004, --p, K_RSA, B_RC4_128, N);
@@ -1008,7 +1026,7 @@
* 2. If a cipher suite has been obsoleted, we put it at the end of
* the list.
* 3. Prefer the stronger bulk cipher, in the order of AES_256,
- * AES_128, RC-4, 3DES-EDE, DES, RC4_40, DES40, NULL.
+ * AES_128, 3DES-EDE, RC-4, DES, DES40, RC4_40, NULL.
* 4. Prefer the stronger MAC algorithm, in the order of SHA384,
* SHA256, SHA, MD5.
* 5. Prefer the better performance of key exchange and digital
@@ -1031,15 +1049,51 @@
add("TLS_DH_anon_WITH_AES_128_CBC_SHA",
0x0034, --p, K_DH_ANON, B_AES_128, N);
+ if (!PRESERVE_RC4) {
+ add("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
+ 0xC017, --p, K_ECDH_ANON, B_3DES, T);
+ add("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
+ 0x001b, --p, K_DH_ANON, B_3DES, N);
+ }
+
add("TLS_ECDH_anon_WITH_RC4_128_SHA",
0xC016, --p, K_ECDH_ANON, B_RC4_128, N);
add("SSL_DH_anon_WITH_RC4_128_MD5",
0x0018, --p, K_DH_ANON, B_RC4_128, N);
- add("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
- 0xC017, --p, K_ECDH_ANON, B_3DES, T);
- add("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
- 0x001b, --p, K_DH_ANON, B_3DES, N);
+ if (!PRESERVE_RC4) {
+ // weak cipher suites obsoleted in TLS 1.2
+ add("SSL_RSA_WITH_DES_CBC_SHA",
+ 0x0009, --p, K_RSA, B_DES, N, tls12);
+ add("SSL_DHE_RSA_WITH_DES_CBC_SHA",
+ 0x0015, --p, K_DHE_RSA, B_DES, N, tls12);
+ add("SSL_DHE_DSS_WITH_DES_CBC_SHA",
+ 0x0012, --p, K_DHE_DSS, B_DES, N, tls12);
+ add("SSL_DH_anon_WITH_DES_CBC_SHA",
+ 0x001a, --p, K_DH_ANON, B_DES, N, tls12);
+
+ // weak cipher suites obsoleted in TLS 1.1
+ add("SSL_RSA_EXPORT_WITH_RC4_40_MD5",
+ 0x0003, --p, K_RSA_EXPORT, B_RC4_40, N, tls11);
+ add("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
+ 0x0017, --p, K_DH_ANON, B_RC4_40, N, tls11);
+
+ add("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
+ 0x0008, --p, K_RSA_EXPORT, B_DES_40, N, tls11);
+ add("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
+ 0x0014, --p, K_DHE_RSA, B_DES_40, N, tls11);
+ add("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
+ 0x0011, --p, K_DHE_DSS, B_DES_40, N, tls11);
+ add("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
+ 0x0019, --p, K_DH_ANON, B_DES_40, N, tls11);
+ }
+
+ if (PRESERVE_RC4) {
+ add("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
+ 0xC017, --p, K_ECDH_ANON, B_3DES, T);
+ add("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
+ 0x001b, --p, K_DH_ANON, B_3DES, N);
+ }
add("TLS_RSA_WITH_NULL_SHA256",
0x003b, --p, K_RSA, B_NULL, N, max, tls12, P_SHA256);
@@ -1058,52 +1112,70 @@
add("SSL_RSA_WITH_NULL_MD5",
0x0001, --p, K_RSA, B_NULL, N);
- // weak cipher suites obsoleted in TLS 1.2
- add("SSL_RSA_WITH_DES_CBC_SHA",
- 0x0009, --p, K_RSA, B_DES, N, tls12);
- add("SSL_DHE_RSA_WITH_DES_CBC_SHA",
- 0x0015, --p, K_DHE_RSA, B_DES, N, tls12);
- add("SSL_DHE_DSS_WITH_DES_CBC_SHA",
- 0x0012, --p, K_DHE_DSS, B_DES, N, tls12);
- add("SSL_DH_anon_WITH_DES_CBC_SHA",
- 0x001a, --p, K_DH_ANON, B_DES, N, tls12);
+ if (PRESERVE_RC4) {
+ // weak cipher suites obsoleted in TLS 1.2
+ add("SSL_RSA_WITH_DES_CBC_SHA",
+ 0x0009, --p, K_RSA, B_DES, N, tls12);
+ add("SSL_DHE_RSA_WITH_DES_CBC_SHA",
+ 0x0015, --p, K_DHE_RSA, B_DES, N, tls12);
+ add("SSL_DHE_DSS_WITH_DES_CBC_SHA",
+ 0x0012, --p, K_DHE_DSS, B_DES, N, tls12);
+ add("SSL_DH_anon_WITH_DES_CBC_SHA",
+ 0x001a, --p, K_DH_ANON, B_DES, N, tls12);
- // weak cipher suites obsoleted in TLS 1.1
- add("SSL_RSA_EXPORT_WITH_RC4_40_MD5",
- 0x0003, --p, K_RSA_EXPORT, B_RC4_40, N, tls11);
- add("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
- 0x0017, --p, K_DH_ANON, B_RC4_40, N, tls11);
+ // weak cipher suites obsoleted in TLS 1.1
+ add("SSL_RSA_EXPORT_WITH_RC4_40_MD5",
+ 0x0003, --p, K_RSA_EXPORT, B_RC4_40, N, tls11);
+ add("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
+ 0x0017, --p, K_DH_ANON, B_RC4_40, N, tls11);
- add("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
- 0x0008, --p, K_RSA_EXPORT, B_DES_40, N, tls11);
- add("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
- 0x0014, --p, K_DHE_RSA, B_DES_40, N, tls11);
- add("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
- 0x0011, --p, K_DHE_DSS, B_DES_40, N, tls11);
- add("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
- 0x0019, --p, K_DH_ANON, B_DES_40, N, tls11);
+ add("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
+ 0x0008, --p, K_RSA_EXPORT, B_DES_40, N, tls11);
+ add("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
+ 0x0014, --p, K_DHE_RSA, B_DES_40, N, tls11);
+ add("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
+ 0x0011, --p, K_DHE_DSS, B_DES_40, N, tls11);
+ add("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
+ 0x0019, --p, K_DH_ANON, B_DES_40, N, tls11);
+ }
// Supported Kerberos ciphersuites from RFC2712
+ if (!PRESERVE_RC4) {
+ add("TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
+ 0x001f, --p, K_KRB5, B_3DES, N);
+ add("TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
+ 0x0023, --p, K_KRB5, B_3DES, N);
+ }
add("TLS_KRB5_WITH_RC4_128_SHA",
0x0020, --p, K_KRB5, B_RC4_128, N);
add("TLS_KRB5_WITH_RC4_128_MD5",
0x0024, --p, K_KRB5, B_RC4_128, N);
- add("TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
- 0x001f, --p, K_KRB5, B_3DES, N);
- add("TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
- 0x0023, --p, K_KRB5, B_3DES, N);
+ if (PRESERVE_RC4) {
+ add("TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
+ 0x001f, --p, K_KRB5, B_3DES, N);
+ add("TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
+ 0x0023, --p, K_KRB5, B_3DES, N);
+ }
add("TLS_KRB5_WITH_DES_CBC_SHA",
0x001e, --p, K_KRB5, B_DES, N, tls12);
add("TLS_KRB5_WITH_DES_CBC_MD5",
0x0022, --p, K_KRB5, B_DES, N, tls12);
+ if (!PRESERVE_RC4) {
+ add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
+ 0x0026, --p, K_KRB5_EXPORT, B_DES_40, N, tls11);
+ add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5",
+ 0x0029, --p, K_KRB5_EXPORT, B_DES_40, N, tls11);
+ }
add("TLS_KRB5_EXPORT_WITH_RC4_40_SHA",
0x0028, --p, K_KRB5_EXPORT, B_RC4_40, N, tls11);
add("TLS_KRB5_EXPORT_WITH_RC4_40_MD5",
0x002b, --p, K_KRB5_EXPORT, B_RC4_40, N, tls11);
- add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
- 0x0026, --p, K_KRB5_EXPORT, B_DES_40, N, tls11);
- add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5",
- 0x0029, --p, K_KRB5_EXPORT, B_DES_40, N, tls11);
+ if (PRESERVE_RC4) {
+ add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
+ 0x0026, --p, K_KRB5_EXPORT, B_DES_40, N, tls11);
+ add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5",
+ 0x0029, --p, K_KRB5_EXPORT, B_DES_40, N, tls11);
+ }
/*
* Other values from the TLS Cipher Suite Registry, as of August 2010.
--- ./jdk/src/share/classes/sun/security/ssl/ClientHandshaker.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/ssl/ClientHandshaker.java Mon Jan 05 11:57:27 2015 -0800
@@ -342,6 +342,13 @@
break;
case HandshakeMessage.ht_finished:
+ // A ChangeCipherSpec record must have been received prior to
+ // reception of the Finished message (RFC 5246, 7.4.9).
+ if (!receivedChangeCipherSpec()) {
+ fatalSE(Alerts.alert_handshake_failure,
+ "Received Finished message before ChangeCipherSpec");
+ }
+
this.serverFinished(
new Finished(protocolVersion, input, cipherSuite));
break;
--- ./jdk/src/share/classes/sun/security/ssl/DHCrypt.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/ssl/DHCrypt.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2012, 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
@@ -188,7 +188,7 @@
* the same size as the Diffie-Hellman modulus.
*/
SecretKey getAgreedSecret(BigInteger peerPublicValue,
- boolean keyIsValidated) throws IOException {
+ boolean keyIsValidated) throws SSLHandshakeException {
try {
KeyFactory kf = JsseJce.getKeyFactory("DiffieHellman");
DHPublicKeySpec spec =
@@ -211,7 +211,8 @@
ka.doPhase(publicKey, true);
return ka.generateSecret("TlsPremasterSecret");
} catch (GeneralSecurityException e) {
- throw new RuntimeException("Could not generate secret", e);
+ throw (SSLHandshakeException) new SSLHandshakeException(
+ "Could not generate secret").initCause(e);
}
}
--- ./jdk/src/share/classes/sun/security/ssl/ECDHCrypt.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/ssl/ECDHCrypt.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 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
@@ -32,6 +32,7 @@
import javax.crypto.SecretKey;
import javax.crypto.KeyAgreement;
import javax.crypto.spec.*;
+import javax.net.ssl.SSLHandshakeException;
/**
* Helper class for the ECDH key exchange. It generates the appropriate
@@ -89,19 +90,20 @@
}
// called by ClientHandshaker with either the server's static or ephemeral public key
- SecretKey getAgreedSecret(PublicKey peerPublicKey) {
+ SecretKey getAgreedSecret(PublicKey peerPublicKey) throws SSLHandshakeException {
try {
KeyAgreement ka = JsseJce.getKeyAgreement("ECDH");
ka.init(privateKey);
ka.doPhase(peerPublicKey, true);
return ka.generateSecret("TlsPremasterSecret");
} catch (GeneralSecurityException e) {
- throw new RuntimeException("Could not generate secret", e);
+ throw (SSLHandshakeException) new SSLHandshakeException(
+ "Could not generate secret").initCause(e);
}
}
// called by ServerHandshaker
- SecretKey getAgreedSecret(byte[] encodedPoint) {
+ SecretKey getAgreedSecret(byte[] encodedPoint) throws SSLHandshakeException {
try {
ECParameterSpec params = publicKey.getParams();
ECPoint point = JsseJce.decodePoint(encodedPoint, params.getCurve());
@@ -109,10 +111,9 @@
ECPublicKeySpec spec = new ECPublicKeySpec(point, params);
PublicKey peerPublicKey = kf.generatePublic(spec);
return getAgreedSecret(peerPublicKey);
- } catch (GeneralSecurityException e) {
- throw new RuntimeException("Could not generate secret", e);
- } catch (java.io.IOException e) {
- throw new RuntimeException("Could not generate secret", e);
+ } catch (GeneralSecurityException | java.io.IOException e) {
+ throw (SSLHandshakeException) new SSLHandshakeException(
+ "Could not generate secret").initCause(e);
}
}
--- ./jdk/src/share/classes/sun/security/ssl/Handshaker.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/ssl/Handshaker.java Mon Jan 05 11:57:27 2015 -0800
@@ -65,27 +65,27 @@
ProtocolVersion protocolVersion;
// the currently active protocol version during a renegotiation
- ProtocolVersion activeProtocolVersion;
+ ProtocolVersion activeProtocolVersion;
// security parameters for secure renegotiation.
- boolean secureRenegotiation;
- byte[] clientVerifyData;
- byte[] serverVerifyData;
+ boolean secureRenegotiation;
+ byte[] clientVerifyData;
+ byte[] serverVerifyData;
// Is it an initial negotiation or a renegotiation?
- boolean isInitialHandshake;
+ boolean isInitialHandshake;
// List of enabled protocols
- private ProtocolList enabledProtocols;
+ private ProtocolList enabledProtocols;
// List of enabled CipherSuites
- private CipherSuiteList enabledCipherSuites;
+ private CipherSuiteList enabledCipherSuites;
// The endpoint identification protocol
- String identificationProtocol;
+ String identificationProtocol;
// The cryptographic algorithm constraints
- private AlgorithmConstraints algorithmConstraints = null;
+ private AlgorithmConstraints algorithmConstraints = null;
// Local supported signature and algorithms
Collection<SignatureAndHashAlgorithm> localSupportedSignAlgs;
@@ -94,15 +94,13 @@
Collection<SignatureAndHashAlgorithm> peerSupportedSignAlgs;
/*
-
- /*
* List of active protocols
*
* Active protocols is a subset of enabled protocols, and will
* contain only those protocols that have vaild cipher suites
* enabled.
*/
- private ProtocolList activeProtocols;
+ private ProtocolList activeProtocols;
/*
* List of active cipher suites
@@ -110,33 +108,37 @@
* Active cipher suites is a subset of enabled cipher suites, and will
* contain only those cipher suites available for the active protocols.
*/
- private CipherSuiteList activeCipherSuites;
+ private CipherSuiteList activeCipherSuites;
- private boolean isClient;
- private boolean needCertVerify;
+ private boolean isClient;
+ private boolean needCertVerify;
- SSLSocketImpl conn = null;
- SSLEngineImpl engine = null;
+ SSLSocketImpl conn = null;
+ SSLEngineImpl engine = null;
- HandshakeHash handshakeHash;
- HandshakeInStream input;
- HandshakeOutStream output;
- int state;
- SSLContextImpl sslContext;
- RandomCookie clnt_random, svr_random;
- SSLSessionImpl session;
+ HandshakeHash handshakeHash;
+ HandshakeInStream input;
+ HandshakeOutStream output;
+ int state;
+ SSLContextImpl sslContext;
+ RandomCookie clnt_random, svr_random;
+ SSLSessionImpl session;
// current CipherSuite. Never null, initially SSL_NULL_WITH_NULL_NULL
- CipherSuite cipherSuite;
+ CipherSuite cipherSuite;
// current key exchange. Never null, initially K_NULL
- KeyExchange keyExchange;
+ KeyExchange keyExchange;
- /* True if this session is being resumed (fast handshake) */
- boolean resumingSession;
+ // True if this session is being resumed (fast handshake)
+ boolean resumingSession;
- /* True if it's OK to start a new SSL session */
- boolean enableNewSession;
+ // True if it's OK to start a new SSL session
+ boolean enableNewSession;
+
+ // True if session keys have been calculated and the caller may receive
+ // and process a ChangeCipherSpec message
+ private boolean sessKeysCalculated;
// Temporary storage for the individual keys. Set by
// calculateConnectionKeys() and cleared once the ciphers are
@@ -161,7 +163,7 @@
// here instead of using this lock. Consider changing.
private Object thrownLock = new Object();
- /* Class and subclass dynamic debugging support */
+ // Class and subclass dynamic debugging support
static final Debug debug = Debug.getInstance("ssl");
// By default, disable the unsafe legacy session renegotiation
@@ -228,6 +230,7 @@
this.serverVerifyData = serverVerifyData;
enableNewSession = true;
invalidated = false;
+ sessKeysCalculated = false;
setCipherSuite(CipherSuite.C_NULL);
setEnabledProtocols(enabledProtocols);
@@ -348,6 +351,14 @@
}
}
+ final boolean receivedChangeCipherSpec() {
+ if (conn != null) {
+ return conn.receivedChangeCipherSpec();
+ } else {
+ return engine.receivedChangeCipherSpec();
+ }
+ }
+
String getEndpointIdentificationAlgorithmSE() {
SSLParameters paras;
if (conn != null) {
@@ -456,7 +467,9 @@
if (activeProtocols.collection().isEmpty() ||
activeProtocols.max.v == ProtocolVersion.NONE.v) {
- throw new SSLHandshakeException("No appropriate protocol");
+ throw new SSLHandshakeException(
+ "No appropriate protocol (protocol is disabled or " +
+ "cipher suites are inappropriate)");
}
if (activeCipherSuites == null) {
@@ -625,14 +638,24 @@
ProtocolList getActiveProtocols() {
if (activeProtocols == null) {
ArrayList<ProtocolVersion> protocols = new ArrayList<>(4);
+ EnumSet<CryptoPrimitive> cryptoPrimitives =
+ EnumSet.<CryptoPrimitive>of(CryptoPrimitive.KEY_AGREEMENT);
for (ProtocolVersion protocol : enabledProtocols.collection()) {
+ if (!algorithmConstraints.permits(
+ cryptoPrimitives, protocol.name, null)) {
+ if (debug != null && Debug.isOn("verbose")) {
+ System.out.println(
+ "Ignoring disabled protocol: " + protocol);
+ }
+
+ continue;
+ }
boolean found = false;
for (CipherSuite suite : enabledCipherSuites.collection()) {
if (suite.isAvailable() && suite.obsoleted > protocol.v &&
suite.supported <= protocol.v) {
if (algorithmConstraints.permits(
- EnumSet.of(CryptoPrimitive.KEY_AGREEMENT),
- suite.name, null)) {
+ cryptoPrimitives, suite.name, null)) {
protocols.add(protocol);
found = true;
break;
@@ -1140,6 +1163,10 @@
throw new ProviderException(e);
}
+ // Mark a flag that allows outside entities (like SSLSocket/SSLEngine)
+ // determine if a ChangeCipherSpec message could be processed.
+ sessKeysCalculated = true;
+
//
// Dump the connection keys as they're generated.
//
@@ -1190,6 +1217,15 @@
}
}
+ /**
+ * Return whether or not the Handshaker has derived session keys for
+ * this handshake. This is used for determining readiness to process
+ * an incoming ChangeCipherSpec message.
+ */
+ boolean sessionKeysCalculated() {
+ return sessKeysCalculated;
+ }
+
private static void printHex(HexDumpEncoder dump, byte[] bytes) {
if (bytes == null) {
System.out.println("(key bytes not available)");
--- ./jdk/src/share/classes/sun/security/ssl/ProtocolVersion.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/ssl/ProtocolVersion.java Mon Jan 05 11:57:27 2015 -0800
@@ -25,6 +25,9 @@
package sun.security.ssl;
+import java.util.*;
+import java.security.CryptoPrimitive;
+
/**
* Type safe enum for an SSL/TLS protocol version. Instances are obtained
* using the static factory methods or by referencing the static members
@@ -86,6 +89,11 @@
// Default version for hello messages (SSLv2Hello)
final static ProtocolVersion DEFAULT_HELLO = FIPS ? TLS10 : SSL30;
+ // Available protocols
+ //
+ // Including all supported protocols except the disabled ones.
+ final static Set<ProtocolVersion> availableProtocols;
+
// version in 16 bit MSB format as it appears in records and
// messages, i.e. 0x0301 for TLS 1.0
public final int v;
@@ -96,6 +104,25 @@
// name used in JSSE (e.g. TLSv1 for TLS 1.0)
final String name;
+ // Initialize the available protocols.
+ static {
+ Set<ProtocolVersion> protocols = new HashSet<>(5);
+
+ ProtocolVersion[] pvs = new ProtocolVersion[] {
+ SSL20Hello, SSL30, TLS10, TLS11, TLS12};
+ EnumSet<CryptoPrimitive> cryptoPrimitives =
+ EnumSet.<CryptoPrimitive>of(CryptoPrimitive.KEY_AGREEMENT);
+ for (ProtocolVersion p : pvs) {
+ if (SSLAlgorithmConstraints.DEFAULT_SSL_ONLY.permits(
+ cryptoPrimitives, p.name, null)) {
+ protocols.add(p);
+ }
+ }
+
+ availableProtocols =
+ Collections.<ProtocolVersion>unmodifiableSet(protocols);
+ }
+
// private
private ProtocolVersion(int v, String name) {
this.v = v;
--- ./jdk/src/share/classes/sun/security/ssl/SSLAlgorithmConstraints.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/ssl/SSLAlgorithmConstraints.java Mon Jan 05 11:57:27 2015 -0800
@@ -55,6 +55,14 @@
private boolean enabledX509DisabledAlgConstraints = true;
+ // the default algorithm constraints
+ final static AlgorithmConstraints DEFAULT =
+ new SSLAlgorithmConstraints(null);
+
+ // the default SSL only algorithm constraints
+ final static AlgorithmConstraints DEFAULT_SSL_ONLY =
+ new SSLAlgorithmConstraints((SSLSocket)null, false);
+
SSLAlgorithmConstraints(AlgorithmConstraints algorithmConstraints) {
userAlgConstraints = algorithmConstraints;
}
--- ./jdk/src/share/classes/sun/security/ssl/SSLContextImpl.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/ssl/SSLContextImpl.java Mon Jan 05 11:57:27 2015 -0800
@@ -51,10 +51,6 @@
private X509TrustManager trustManager;
private SecureRandom secureRandom;
- // The default algrithm constraints
- private AlgorithmConstraints defaultAlgorithmConstraints =
- new SSLAlgorithmConstraints(null);
-
// supported and default protocols
private ProtocolList defaultServerProtocolList;
private ProtocolList defaultClientProtocolList;
@@ -342,7 +338,7 @@
if (suite.isAvailable() &&
suite.obsoleted > protocols.min.v &&
suite.supported <= protocols.max.v) {
- if (defaultAlgorithmConstraints.permits(
+ if (SSLAlgorithmConstraints.DEFAULT.permits(
EnumSet.of(CryptoPrimitive.KEY_AGREEMENT),
suite.name, null)) {
suites.add(suite);
@@ -384,6 +380,22 @@
}
}
+ static String[] getAvailableProtocols(
+ ProtocolVersion[] protocolCandidates) {
+
+ List<String> availableProtocols = Collections.<String>emptyList();
+ if (protocolCandidates != null && protocolCandidates.length != 0) {
+ availableProtocols = new ArrayList<>(protocolCandidates.length);
+ for (ProtocolVersion p : protocolCandidates) {
+ if (ProtocolVersion.availableProtocols.contains(p)) {
+ availableProtocols.add(p.name);
+ }
+ }
+ }
+
+ return availableProtocols.toArray(new String[0]);
+ }
+
/*
* The SSLContext implementation for TLS/SSL algorithm
*
@@ -423,28 +435,35 @@
*/
private static class ConservativeSSLContext extends SSLContextImpl {
// parameters
- private static SSLParameters defaultServerSSLParams;
- private static SSLParameters defaultClientSSLParams;
- private static SSLParameters supportedSSLParams;
+ private static final SSLParameters defaultServerSSLParams;
+ private static final SSLParameters defaultClientSSLParams;
+ private static final SSLParameters supportedSSLParams;
static {
+ // supported SSL parameters
+ supportedSSLParams = new SSLParameters();
+
+ // candidates for available protocols
+ ProtocolVersion[] serverCandidates;
+ ProtocolVersion[] clientCandidates;
+
if (SunJSSE.isFIPS()) {
- supportedSSLParams = new SSLParameters();
supportedSSLParams.setProtocols(new String[] {
ProtocolVersion.TLS10.name,
ProtocolVersion.TLS11.name,
ProtocolVersion.TLS12.name
});
- defaultServerSSLParams = supportedSSLParams;
+ serverCandidates = new ProtocolVersion[] {
+ ProtocolVersion.TLS10,
+ ProtocolVersion.TLS11,
+ ProtocolVersion.TLS12
+ };
- defaultClientSSLParams = new SSLParameters();
- defaultClientSSLParams.setProtocols(new String[] {
- ProtocolVersion.TLS10.name
- });
-
+ clientCandidates = new ProtocolVersion[] {
+ ProtocolVersion.TLS10
+ };
} else {
- supportedSSLParams = new SSLParameters();
supportedSSLParams.setProtocols(new String[] {
ProtocolVersion.SSL20Hello.name,
ProtocolVersion.SSL30.name,
@@ -453,14 +472,27 @@
ProtocolVersion.TLS12.name
});
- defaultServerSSLParams = supportedSSLParams;
+ serverCandidates = new ProtocolVersion[] {
+ ProtocolVersion.SSL20Hello,
+ ProtocolVersion.SSL30,
+ ProtocolVersion.TLS10,
+ ProtocolVersion.TLS11,
+ ProtocolVersion.TLS12
+ };
- defaultClientSSLParams = new SSLParameters();
- defaultClientSSLParams.setProtocols(new String[] {
- ProtocolVersion.SSL30.name,
- ProtocolVersion.TLS10.name
- });
+ clientCandidates = new ProtocolVersion[] {
+ ProtocolVersion.SSL30,
+ ProtocolVersion.TLS10
+ };
}
+
+ defaultClientSSLParams = new SSLParameters();
+ defaultClientSSLParams.setProtocols(
+ getAvailableProtocols(clientCandidates));
+
+ defaultServerSSLParams = new SSLParameters();
+ defaultServerSSLParams.setProtocols(
+ getAvailableProtocols(serverCandidates));
}
SSLParameters getDefaultServerSSLParams() {
@@ -651,29 +683,36 @@
*/
public static final class TLS11Context extends SSLContextImpl {
// parameters
- private static SSLParameters defaultServerSSLParams;
- private static SSLParameters defaultClientSSLParams;
- private static SSLParameters supportedSSLParams;
+ private static final SSLParameters defaultServerSSLParams;
+ private static final SSLParameters defaultClientSSLParams;
+ private static final SSLParameters supportedSSLParams;
static {
+ // supported SSL parameters
+ supportedSSLParams = new SSLParameters();
+
+ // candidates for available protocols
+ ProtocolVersion[] serverCandidates;
+ ProtocolVersion[] clientCandidates;
+
if (SunJSSE.isFIPS()) {
- supportedSSLParams = new SSLParameters();
supportedSSLParams.setProtocols(new String[] {
ProtocolVersion.TLS10.name,
ProtocolVersion.TLS11.name,
ProtocolVersion.TLS12.name
});
- defaultServerSSLParams = supportedSSLParams;
+ serverCandidates = new ProtocolVersion[] {
+ ProtocolVersion.TLS10,
+ ProtocolVersion.TLS11,
+ ProtocolVersion.TLS12
+ };
- defaultClientSSLParams = new SSLParameters();
- defaultClientSSLParams.setProtocols(new String[] {
- ProtocolVersion.TLS10.name,
- ProtocolVersion.TLS11.name
- });
-
+ clientCandidates = new ProtocolVersion[] {
+ ProtocolVersion.TLS10,
+ ProtocolVersion.TLS11
+ };
} else {
- supportedSSLParams = new SSLParameters();
supportedSSLParams.setProtocols(new String[] {
ProtocolVersion.SSL20Hello.name,
ProtocolVersion.SSL30.name,
@@ -682,15 +721,28 @@
ProtocolVersion.TLS12.name
});
- defaultServerSSLParams = supportedSSLParams;
+ serverCandidates = new ProtocolVersion[] {
+ ProtocolVersion.SSL20Hello,
+ ProtocolVersion.SSL30,
+ ProtocolVersion.TLS10,
+ ProtocolVersion.TLS11,
+ ProtocolVersion.TLS12
+ };
- defaultClientSSLParams = new SSLParameters();
- defaultClientSSLParams.setProtocols(new String[] {
- ProtocolVersion.SSL30.name,
- ProtocolVersion.TLS10.name,
- ProtocolVersion.TLS11.name
- });
+ clientCandidates = new ProtocolVersion[] {
+ ProtocolVersion.SSL30,
+ ProtocolVersion.TLS10,
+ ProtocolVersion.TLS11
+ };
}
+
+ defaultClientSSLParams = new SSLParameters();
+ defaultClientSSLParams.setProtocols(
+ getAvailableProtocols(clientCandidates));
+
+ defaultServerSSLParams = new SSLParameters();
+ defaultServerSSLParams.setProtocols(
+ getAvailableProtocols(serverCandidates));
}
SSLParameters getDefaultServerSSLParams() {
@@ -713,30 +765,37 @@
*/
public static final class TLS12Context extends SSLContextImpl {
// parameters
- private static SSLParameters defaultServerSSLParams;
- private static SSLParameters defaultClientSSLParams;
- private static SSLParameters supportedSSLParams;
+ private static final SSLParameters defaultServerSSLParams;
+ private static final SSLParameters defaultClientSSLParams;
+ private static final SSLParameters supportedSSLParams;
static {
+ // supported SSL parameters
+ supportedSSLParams = new SSLParameters();
+
+ // candidates for available protocols
+ ProtocolVersion[] serverCandidates;
+ ProtocolVersion[] clientCandidates;
+
if (SunJSSE.isFIPS()) {
- supportedSSLParams = new SSLParameters();
supportedSSLParams.setProtocols(new String[] {
ProtocolVersion.TLS10.name,
ProtocolVersion.TLS11.name,
ProtocolVersion.TLS12.name
});
- defaultServerSSLParams = supportedSSLParams;
+ serverCandidates = new ProtocolVersion[] {
+ ProtocolVersion.TLS10,
+ ProtocolVersion.TLS11,
+ ProtocolVersion.TLS12
+ };
- defaultClientSSLParams = new SSLParameters();
- defaultClientSSLParams.setProtocols(new String[] {
- ProtocolVersion.TLS10.name,
- ProtocolVersion.TLS11.name,
- ProtocolVersion.TLS12.name
- });
-
+ clientCandidates = new ProtocolVersion[] {
+ ProtocolVersion.TLS10,
+ ProtocolVersion.TLS11,
+ ProtocolVersion.TLS12
+ };
} else {
- supportedSSLParams = new SSLParameters();
supportedSSLParams.setProtocols(new String[] {
ProtocolVersion.SSL20Hello.name,
ProtocolVersion.SSL30.name,
@@ -745,16 +804,29 @@
ProtocolVersion.TLS12.name
});
- defaultServerSSLParams = supportedSSLParams;
+ serverCandidates = new ProtocolVersion[] {
+ ProtocolVersion.SSL20Hello,
+ ProtocolVersion.SSL30,
+ ProtocolVersion.TLS10,
+ ProtocolVersion.TLS11,
+ ProtocolVersion.TLS12
+ };
- defaultClientSSLParams = new SSLParameters();
- defaultClientSSLParams.setProtocols(new String[] {
- ProtocolVersion.SSL30.name,
- ProtocolVersion.TLS10.name,
- ProtocolVersion.TLS11.name,
- ProtocolVersion.TLS12.name
- });
+ clientCandidates = new ProtocolVersion[] {
+ ProtocolVersion.SSL30,
+ ProtocolVersion.TLS10,
+ ProtocolVersion.TLS11,
+ ProtocolVersion.TLS12
+ };
}
+
+ defaultClientSSLParams = new SSLParameters();
+ defaultClientSSLParams.setProtocols(
+ getAvailableProtocols(clientCandidates));
+
+ defaultServerSSLParams = new SSLParameters();
+ defaultServerSSLParams.setProtocols(
+ getAvailableProtocols(serverCandidates));
}
SSLParameters getDefaultServerSSLParams() {
--- ./jdk/src/share/classes/sun/security/ssl/SSLEngineImpl.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/ssl/SSLEngineImpl.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -215,6 +215,11 @@
static final byte clauth_required = 2;
/*
+ * Flag indicating that the engine has received a ChangeCipherSpec message.
+ */
+ private boolean receivedCCS;
+
+ /*
* Flag indicating if the next record we receive MUST be a Finished
* message. Temporarily set during the handshake to ensure that
* a change cipher spec message is followed by a finished message.
@@ -363,6 +368,7 @@
*/
roleIsServer = true;
connectionState = cs_START;
+ receivedCCS = false;
/*
* default read and write side cipher and MAC support
@@ -1006,6 +1012,7 @@
if (handshaker.invalidated) {
handshaker = null;
+ receivedCCS = false;
// if state is cs_RENEGOTIATE, revert it to cs_DATA
if (connectionState == cs_RENEGOTIATE) {
connectionState = cs_DATA;
@@ -1024,6 +1031,7 @@
}
handshaker = null;
connectionState = cs_DATA;
+ receivedCCS = false;
// No handshakeListeners here. That's a
// SSLSocket thing.
@@ -1063,13 +1071,25 @@
case Record.ct_change_cipher_spec:
if ((connectionState != cs_HANDSHAKE
&& connectionState != cs_RENEGOTIATE)
- || inputRecord.available() != 1
+ || !handshaker.sessionKeysCalculated()
+ || receivedCCS) {
+ // For the CCS message arriving in the wrong state
+ fatal(Alerts.alert_unexpected_message,
+ "illegal change cipher spec msg, conn state = "
+ + connectionState + ", handshake state = "
+ + handshaker.state);
+ } else if (inputRecord.available() != 1
|| inputRecord.read() != 1) {
+ // For structural/content issues with the CCS
fatal(Alerts.alert_unexpected_message,
- "illegal change cipher spec msg, state = "
- + connectionState);
+ "Malformed change cipher spec msg");
}
+ // Once we've received CCS, update the flag.
+ // If the remote endpoint sends it again in this handshake
+ // we won't process it.
+ receivedCCS = true;
+
//
// The first message after a change_cipher_spec
// record MUST be a "Finished" handshake record,
@@ -2065,6 +2085,14 @@
return Thread.currentThread().getName();
}
+ /*
+ * Returns a boolean indicating whether the ChangeCipherSpec message
+ * has been received for this handshake.
+ */
+ boolean receivedChangeCipherSpec() {
+ return receivedCCS;
+ }
+
/**
* Returns a printable representation of this end of the connection.
*/
--- ./jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2013, 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
@@ -175,6 +175,12 @@
private volatile int connectionState;
/*
+ * Flag indicating that the engine's handshaker has done the necessary
+ * steps so the engine may process a ChangeCipherSpec message.
+ */
+ private boolean receivedCCS;
+
+ /*
* Flag indicating if the next record we receive MUST be a Finished
* message. Temporarily set during the handshake to ensure that
* a change cipher spec message is followed by a finished message.
@@ -557,6 +563,7 @@
*/
roleIsServer = isServer;
connectionState = cs_START;
+ receivedCCS = false;
/*
* default read and write side cipher and MAC support
@@ -1018,6 +1025,7 @@
if (handshaker.invalidated) {
handshaker = null;
+ receivedCCS = false;
// if state is cs_RENEGOTIATE, revert it to cs_DATA
if (connectionState == cs_RENEGOTIATE) {
connectionState = cs_DATA;
@@ -1033,6 +1041,7 @@
handshakeSession = null;
handshaker = null;
connectionState = cs_DATA;
+ receivedCCS = false;
//
// Tell folk about handshake completion, but do
@@ -1080,13 +1089,24 @@
case Record.ct_change_cipher_spec:
if ((connectionState != cs_HANDSHAKE
&& connectionState != cs_RENEGOTIATE)
- || r.available() != 1
- || r.read() != 1) {
+ || !handshaker.sessionKeysCalculated()
+ || receivedCCS) {
+ // For the CCS message arriving in the wrong state
fatal(Alerts.alert_unexpected_message,
- "illegal change cipher spec msg, state = "
- + connectionState);
+ "illegal change cipher spec msg, conn state = "
+ + connectionState + ", handshake state = "
+ + handshaker.state);
+ } else if (r.available() != 1 || r.read() != 1) {
+ // For structural/content issues with the CCS
+ fatal(Alerts.alert_unexpected_message,
+ "Malformed change cipher spec msg");
}
+ // Once we've received CCS, update the flag.
+ // If the remote endpoint sends it again in this handshake
+ // we won't process it.
+ receivedCCS = true;
+
//
// The first message after a change_cipher_spec
// record MUST be a "Finished" handshake record,
@@ -2478,6 +2498,14 @@
}
}
+ /*
+ * Returns a boolean indicating whether the ChangeCipherSpec message
+ * has been received for this handshake.
+ */
+ boolean receivedChangeCipherSpec() {
+ return receivedCCS;
+ }
+
//
// We allocate a separate thread to deliver handshake completion
// events. This ensures that the notifications don't block the
--- ./jdk/src/share/classes/sun/security/ssl/ServerHandshaker.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/ssl/ServerHandshaker.java Mon Jan 05 11:57:27 2015 -0800
@@ -240,6 +240,13 @@
break;
case HandshakeMessage.ht_finished:
+ // A ChangeCipherSpec record must have been received prior to
+ // reception of the Finished message (RFC 5246, 7.4.9).
+ if (!receivedChangeCipherSpec()) {
+ fatalSE(Alerts.alert_handshake_failure,
+ "Received Finished message before ChangeCipherSpec");
+ }
+
this.clientFinished(
new Finished(protocolVersion, input, cipherSuite));
break;
--- ./jdk/src/share/classes/sun/security/tools/JarSigner.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/tools/JarSigner.java Mon Jan 05 11:57:27 2015 -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
@@ -1547,8 +1547,7 @@
first = false;
}
try {
- CertPath cp = certificateFactory.generateCertPath(certs);
- validator.validate(cp, pkixParameters);
+ validateCertChain(certs);
} catch (Exception e) {
if (debug) {
e.printStackTrace();
@@ -1859,8 +1858,7 @@
printCert("", certChain[0], true, null, true);
try {
- CertPath cp = certificateFactory.generateCertPath(Arrays.asList(certChain));
- validator.validate(cp, pkixParameters);
+ validateCertChain(Arrays.asList(certChain));
} catch (Exception e) {
if (debug) {
e.printStackTrace();
@@ -1925,6 +1923,22 @@
System.exit(1);
}
+ void validateCertChain(List<? extends Certificate> certs) throws Exception {
+ int cpLen = 0;
+ out: for (; cpLen<certs.size(); cpLen++) {
+ for (TrustAnchor ta: pkixParameters.getTrustAnchors()) {
+ if (ta.getTrustedCert().equals(certs.get(cpLen))) {
+ break out;
+ }
+ }
+ }
+ if (cpLen > 0) {
+ CertPath cp = certificateFactory.generateCertPath(
+ (cpLen == certs.size())? certs: certs.subList(0, cpLen));
+ validator.validate(cp, pkixParameters);
+ }
+ }
+
char[] getPass(String prompt)
{
System.err.print(prompt);
--- ./jdk/src/share/classes/sun/security/util/DerIndefLenConverter.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/util/DerIndefLenConverter.java Mon Jan 05 11:57:27 2015 -0800
@@ -156,12 +156,18 @@
}
if (isLongForm(lenByte)) {
lenByte &= LEN_MASK;
- if (lenByte > 4)
+ if (lenByte > 4) {
throw new IOException("Too much data");
- if ((dataSize - dataPos) < (lenByte + 1))
+ }
+ if ((dataSize - dataPos) < (lenByte + 1)) {
throw new IOException("Too little data");
- for (int i = 0; i < lenByte; i++)
+ }
+ for (int i = 0; i < lenByte; i++) {
curLen = (curLen << 8) + (data[dataPos++] & 0xff);
+ }
+ if (curLen < 0) {
+ throw new IOException("Invalid length bytes");
+ }
} else {
curLen = (lenByte & LEN_MASK);
}
@@ -188,10 +194,15 @@
}
if (isLongForm(lenByte)) {
lenByte &= LEN_MASK;
- for (int i = 0; i < lenByte; i++)
+ for (int i = 0; i < lenByte; i++) {
curLen = (curLen << 8) + (data[dataPos++] & 0xff);
- } else
+ }
+ if (curLen < 0) {
+ throw new IOException("Invalid length bytes");
+ }
+ } else {
curLen = (lenByte & LEN_MASK);
+ }
writeLength(curLen);
writeValue(curLen);
}
--- ./jdk/src/share/classes/sun/security/util/DerInputStream.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/util/DerInputStream.java Mon Jan 05 11:57:27 2015 -0800
@@ -566,6 +566,10 @@
value <<= 8;
value += 0x0ff & in.read();
}
+ if (value < 0) {
+ throw new IOException("DerInputStream.getLength(): "
+ + "Invalid length bytes");
+ }
}
return value;
}
--- ./jdk/src/share/classes/sun/security/util/SignatureFileVerifier.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/util/SignatureFileVerifier.java Mon Jan 05 11:57:27 2015 -0800
@@ -39,6 +39,7 @@
import sun.misc.BASE64Decoder;
import sun.security.jca.Providers;
+import sun.security.x509.AlgorithmId;
public class SignatureFileVerifier {
@@ -613,7 +614,8 @@
throws NoSuchAlgorithmException, SignatureException {
MessageDigest md =
- MessageDigest.getInstance(token.getHashAlgorithm().getName());
+ MessageDigest.getInstance(AlgorithmId.getStandardDigestName(
+ token.getHashAlgorithm().getName()));
if (!Arrays.equals(token.getHashedMessage(), md.digest(signature))) {
throw new SignatureException("Signature timestamp (#" +
--- ./jdk/src/share/classes/sun/security/x509/AlgorithmId.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/x509/AlgorithmId.java Mon Jan 05 11:57:27 2015 -0800
@@ -940,4 +940,21 @@
}
return null;
}
+
+ // Copied from com.sun.crypto.provider.OAEPParameters.convertToStandardName()
+ public static String getStandardDigestName(String internalName) {
+ if (internalName.equals("SHA")) {
+ return "SHA-1";
+ } else if (internalName.equals("SHA224")) {
+ return "SHA-224";
+ } else if (internalName.equals("SHA256")) {
+ return "SHA-256";
+ } else if (internalName.equals("SHA384")) {
+ return "SHA-384";
+ } else if (internalName.equals("SHA512")) {
+ return "SHA-512";
+ } else {
+ return internalName;
+ }
+ }
}
--- ./jdk/src/share/classes/sun/security/x509/CertAndKeyGen.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/security/x509/CertAndKeyGen.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2009, 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
@@ -156,9 +156,11 @@
// publicKey's format must be X.509 otherwise
// the whole CertGen part of this class is broken.
- if (!"X.509".equalsIgnoreCase(publicKey.getFormat())) {
- throw new IllegalArgumentException("publicKey's is not X.509, but "
- + publicKey.getFormat());
+ // Allow "X509" in 7u for backwards compatibility.
+ if (!"X.509".equalsIgnoreCase(publicKey.getFormat()) &&
+ !"X509".equalsIgnoreCase(publicKey.getFormat())) {
+ throw new IllegalArgumentException("Public key format is " +
+ publicKey.getFormat() + ", must be X.509");
}
}
--- ./jdk/src/share/classes/sun/swing/FilePane.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/swing/FilePane.java Mon Jan 05 11:57:27 2015 -0800
@@ -1979,6 +1979,7 @@
return false;
}
+ try {
if (f instanceof ShellFolder) {
return ((ShellFolder) f).isFileSystem();
} else {
@@ -1994,6 +1995,9 @@
return true;
}
}
+ } catch (SecurityException e) {
+ return false;
+ }
}
/**
--- ./jdk/src/share/classes/sun/swing/SwingUtilities2.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/swing/SwingUtilities2.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -80,6 +80,9 @@
public static final Object LAF_STATE_KEY =
new StringBuffer("LookAndFeel State");
+ public static final Object MENU_SELECTION_MANAGER_LISTENER_KEY =
+ new StringBuffer("MenuSelectionManager listener key");
+
// Maintain a cache of CACHE_SIZE fonts and the left side bearing
// of the characters falling into the range MIN_CHAR_INDEX to
// MAX_CHAR_INDEX. The values in fontCache are created as needed.
--- ./jdk/src/share/classes/sun/swing/WindowsPlacesBar.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/swing/WindowsPlacesBar.java Mon Jan 05 11:57:27 2015 -0800
@@ -81,11 +81,7 @@
setBackground(bgColor);
FileSystemView fsv = fc.getFileSystemView();
- files = AccessController.doPrivileged(new PrivilegedAction<File[]>() {
- public File[] run() {
- return (File[]) ShellFolder.get("fileChooserShortcutPanelFolders");
- }
- });
+ files = (File[]) ShellFolder.get("fileChooserShortcutPanelFolders");
buttons = new JToggleButton[files.length];
buttonGroup = new ButtonGroup();
--- ./jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java Mon Jan 05 11:57:27 2015 -0800
@@ -771,16 +771,9 @@
fireIntervalRemoved(this, 0, oldSize);
}
- File[] baseFolders;
- if (useShellFolder) {
- baseFolders = AccessController.doPrivileged(new PrivilegedAction<File[]>() {
- public File[] run() {
- return (File[]) ShellFolder.get("fileChooserComboBoxFolders");
- }
- });
- } else {
- baseFolders = fsv.getRoots();
- }
+ File[] baseFolders = (useShellFolder)
+ ? (File[]) ShellFolder.get("fileChooserComboBoxFolders")
+ : fsv.getRoots();
directories.addAll(Arrays.asList(baseFolders));
// Get the canonical (full) path. This has the side
--- ./jdk/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties Mon Jan 05 11:57:27 2015 -0800
@@ -103,7 +103,7 @@
HELP_ABOUT_DIALOG_JAVA_VERSION=Java VM\u30D0\u30FC\u30B8\u30E7\u30F3:<br>{0}
HELP_ABOUT_DIALOG_MASTHEAD_ACCESSIBLE_NAME=\u30DE\u30B9\u30C8\u30D8\u30C3\u30C9\u56F3\u5F62
HELP_ABOUT_DIALOG_MASTHEAD_TITLE=JConsole\u306B\u3064\u3044\u3066
-HELP_ABOUT_DIALOG_TITLE=JConsole: \u8A73\u7D30
+HELP_ABOUT_DIALOG_TITLE=JConsole: \u60C5\u5831
HELP_ABOUT_DIALOG_USER_GUIDE_LINK=JConsole\u30E6\u30FC\u30B6\u30FC\u30FB\u30AC\u30A4\u30C9(&U):<br>{0}
HELP_ABOUT_DIALOG_USER_GUIDE_LINK_URL=http://docs.oracle.com/javase/{0}/docs/technotes/guides/management/jconsole.html
HELP_MENU_ABOUT_TITLE=JConsole\u306B\u3064\u3044\u3066(&A)
--- ./jdk/src/share/classes/sun/util/resources/CurrencyNames.properties Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/util/resources/CurrencyNames.properties Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2005, 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
@@ -26,7 +26,7 @@
#
# COPYRIGHT AND PERMISSION NOTICE
#
-# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved.
+# Copyright (C) 1991-2012 Unicode, Inc. All rights reserved.
# Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
#
# Permission is hereby granted, free of charge, to any person obtaining
@@ -226,6 +226,7 @@
SOS=SOS
SRD=SRD
SRG=SRG
+SSP=SSP
STD=STD
SVC=SVC
SYP=SYP
@@ -277,6 +278,7 @@
YUM=YUM
ZAR=ZAR
ZMK=ZMK
+ZMW=ZMW
ZWD=ZWD
ZWL=ZWL
ZWN=ZWN
@@ -443,6 +445,7 @@
sos=Somali Shilling
srd=Surinamese Dollar
srg=Surinamese Guilder
+ssp=South Sudanese Pound
std=S\u00e3o Tom\u00e9 and Pr\u00edncipe Dobra
svc=Salvadoran Col\u00f3n
syp=Syrian Pound
@@ -486,7 +489,9 @@
xpd=Palladium
xpf=CFP Franc
xpt=Platinum
+xsu=Sucre
xts=Testing Currency Code
+xua=ADB Unit of Account
xxx=Unknown Currency
yer=Yemeni Rial
yum=Yugoslavian New Dinar (1994-2002)
--- ./jdk/src/share/classes/sun/util/resources/CurrencyNames_es_PE.properties Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/util/resources/CurrencyNames_es_PE.properties Mon Jan 05 11:57:27 2015 -0800
@@ -35,4 +35,4 @@
# This notice and attribution to Taligent may not be removed.
# Taligent is a registered trademark of Taligent, Inc.
-PEN=S/
+PEN=S/.
--- ./jdk/src/share/classes/sun/util/resources/CurrencyNames_lt_LT.properties Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/util/resources/CurrencyNames_lt_LT.properties Mon Jan 05 11:57:27 2015 -0800
@@ -35,4 +35,5 @@
# This notice and attribution to Taligent may not be removed.
# Taligent is a registered trademark of Taligent, Inc.
+EUR=\u20AC
LTL=Lt
--- ./jdk/src/share/classes/sun/util/resources/CurrencyNames_lv_LV.properties Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/util/resources/CurrencyNames_lv_LV.properties Mon Jan 05 11:57:27 2015 -0800
@@ -35,4 +35,5 @@
# This notice and attribution to Taligent may not be removed.
# Taligent is a registered trademark of Taligent, Inc.
+EUR=\u20AC
LVL=Ls
--- ./jdk/src/share/classes/sun/util/resources/LocaleNames.properties Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/util/resources/LocaleNames.properties Mon Jan 05 11:57:27 2015 -0800
@@ -1077,6 +1077,7 @@
SN=Senegal
SO=Somalia
SR=Suriname
+SS=South Sudan
ST=Sao Tome And Principe
SV=El Salvador
SX=Sint Maarten (Dutch part)
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames.java Mon Jan 05 11:57:27 2015 -0800
@@ -45,8 +45,8 @@
protected final Object[][] getContents() {
String ACT[] = new String[] {"Acre Time", "ACT",
"Acre Summer Time", "ACST"};
- String ADELAIDE[] = new String[] {"Central Standard Time (South Australia)", "CST",
- "Central Summer Time (South Australia)", "CST"};
+ String ADELAIDE[] = new String[] {"Australian Central Standard Time (South Australia)", "ACST",
+ "Australian Central Daylight Time (South Australia)", "ACDT"};
String AGT[] = new String[] {"Argentine Time", "ART",
"Argentine Summer Time", "ARST"};
String AKST[] = new String[] {"Alaska Standard Time", "AKST",
@@ -61,10 +61,10 @@
"Atlantic Daylight Time", "ADT"};
String BDT[] = new String[] {"Bangladesh Time", "BDT",
"Bangladesh Summer Time", "BDST"};
- String BRISBANE[] = new String[] {"Eastern Standard Time (Queensland)", "EST",
- "Eastern Summer Time (Queensland)", "EST"};
- String BROKEN_HILL[] = new String[] {"Central Standard Time (South Australia/New South Wales)", "CST",
- "Central Summer Time (South Australia/New South Wales)", "CST"};
+ String BRISBANE[] = new String[] {"Australian Eastern Standard Time (Queensland)", "AEST",
+ "Australian Eastern Daylight Time (Queensland)", "AEDT"};
+ String BROKEN_HILL[] = new String[] {"Australian Central Standard Time (South Australia/New South Wales)", "ACST",
+ "Australian Central Daylight Time (South Australia/New South Wales)", "ACDT"};
String BRT[] = new String[] {"Brasilia Time", "BRT",
"Brasilia Summer Time", "BRST"};
String BTT[] = new String[] {"Bhutan Time", "BTT",
@@ -89,8 +89,8 @@
"China Daylight Time", "CDT"};
String CUBA[] = new String[] {"Cuba Standard Time", "CST",
"Cuba Daylight Time", "CDT"};
- String DARWIN[] = new String[] {"Central Standard Time (Northern Territory)", "CST",
- "Central Summer Time (Northern Territory)", "CST"};
+ String DARWIN[] = new String[] {"Australian Central Standard Time (Northern Territory)", "ACST",
+ "Australian Central Daylight Time (Northern Territory)", "ACDT"};
String DUBLIN[] = new String[] {"Greenwich Mean Time", "GMT",
"Irish Summer Time", "IST"};
String EAT[] = new String[] {"Eastern African Time", "EAT",
@@ -103,8 +103,8 @@
"Eastern Greenland Summer Time", "EGST"};
String EST[] = new String[] {"Eastern Standard Time", "EST",
"Eastern Daylight Time", "EDT"};
- String EST_NSW[] = new String[] {"Eastern Standard Time (New South Wales)", "EST",
- "Eastern Summer Time (New South Wales)", "EST"};
+ String EST_NSW[] = new String[] {"Australian Eastern Standard Time (New South Wales)", "AEST",
+ "Australian Eastern Daylight Time (New South Wales)", "AEDT"};
String FET[] = new String[] {"Further-eastern European Time", "FET",
"Further-eastern European Summer Time", "FEST"};
String GHMT[] = new String[] {"Ghana Mean Time", "GMT",
@@ -133,10 +133,12 @@
"India Daylight Time", "IDT"};
String JST[] = new String[] {"Japan Standard Time", "JST",
"Japan Daylight Time", "JDT"};
+ String KRAT[] = new String[] {"Krasnoyarsk Time", "KRAT",
+ "Krasnoyarsk Summer Time", "KRAST"};
String KST[] = new String[] {"Korea Standard Time", "KST",
"Korea Daylight Time", "KDT"};
String LORD_HOWE[] = new String[] {"Lord Howe Standard Time", "LHST",
- "Lord Howe Summer Time", "LHST"};
+ "Lord Howe Daylight Time", "LHDT"};
String MHT[] = new String[] {"Marshall Islands Time", "MHT",
"Marshall Islands Summer Time", "MHST"};
String MSK[] = new String[] {"Moscow Standard Time", "MSK",
@@ -167,14 +169,14 @@
"Samoa Daylight Time", "SDT"};
String SAST[] = new String[] {"South Africa Standard Time", "SAST",
"South Africa Summer Time", "SAST"};
+ String IRKT[] = new String[] {"Irkutsk Time", "IRKT",
+ "Irkutsk Summer Time", "IRKST"};
String SBT[] = new String[] {"Solomon Is. Time", "SBT",
"Solomon Is. Summer Time", "SBST"};
String SGT[] = new String[] {"Singapore Time", "SGT",
"Singapore Summer Time", "SGST"};
- String SLST[] = new String[] {"Greenwich Mean Time", "GMT",
- "Sierra Leone Summer Time", "SLST"};
- String TASMANIA[] = new String[] {"Eastern Standard Time (Tasmania)", "EST",
- "Eastern Summer Time (Tasmania)", "EST"};
+ String TASMANIA[] = new String[] {"Australian Eastern Standard Time (Tasmania)", "AEST",
+ "Australian Eastern Daylight Time (Tasmania)", "AEDT"};
String TMT[] = new String[] {"Turkmenistan Time", "TMT",
"Turkmenistan Summer Time", "TMST"};
String ULAT[]= new String[] {"Ulaanbaatar Time", "ULAT",
@@ -183,22 +185,22 @@
"Coordinated Universal Time", "UTC"};
String UZT[] = new String[] {"Uzbekistan Time", "UZT",
"Uzbekistan Summer Time", "UZST"};
- String VICTORIA[] = new String[] {"Eastern Standard Time (Victoria)", "EST",
- "Eastern Summer Time (Victoria)", "EST"};
+ String VICTORIA[] = new String[] {"Australian Eastern Standard Time (Victoria)", "AEST",
+ "Australian Eastern Daylight Time (Victoria)", "AEDT"};
String VLAT[] = new String[] {"Vladivostok Time", "VLAT",
"Vladivostok Summer Time", "VLAST"};
- String WART[] = new String[] {"Western Argentine Time", "WART",
- "Western Argentine Summer Time", "WARST"};
String WAT[] = new String[] {"Western African Time", "WAT",
"Western African Summer Time", "WAST"};
String WET[] = new String[] {"Western European Time", "WET",
"Western European Summer Time", "WEST"};
String WIT[] = new String[] {"West Indonesia Time", "WIB",
"West Indonesia Summer Time", "WIST"};
- String WST_AUS[] = new String[] {"Western Standard Time (Australia)", "WST",
- "Western Summer Time (Australia)", "WST"};
- String WST_SAMOA[] = new String[] {"West Samoa Time", "WST",
+ String WST_AUS[] = new String[] {"Australian Western Standard Time", "AWST",
+ "Australian Western Daylight Time", "AWDT"};
+ String WST_SAMOA[] = new String[] {"West Samoa Standard Time", "WSST",
"West Samoa Daylight Time", "WSDT"};
+ String XJT[] = new String[] {"Xinjiang Standard Time", "XJT",
+ "Xinjiang Daylight Time", "XJDT"};
String YAKT[] = new String[] {"Yakutsk Time", "YAKT",
"Yakutsk Summer Time", "YAKST"};
@@ -262,7 +264,7 @@
{"Africa/Djibouti", EAT},
{"Africa/Douala", WAT},
{"Africa/El_Aaiun", WET},
- {"Africa/Freetown", SLST},
+ {"Africa/Freetown", GMT},
{"Africa/Gaborone", CAT},
{"Africa/Harare", CAT},
{"Africa/Johannesburg", SAST},
@@ -358,7 +360,7 @@
{"America/Godthab", new String[] {"Western Greenland Time", "WGT",
"Western Greenland Summer Time", "WGST"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", EST},
+ {"America/Grand_Turk", AST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
@@ -401,8 +403,7 @@
{"America/Mendoza", AGT},
{"America/Menominee", CST},
{"America/Merida", CST},
- {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
- "Metlakatla Daylight Time", "MeDT"}},
+ {"America/Metlakatla", PST},
{"America/Mexico_City", CST},
{"America/Miquelon", new String[] {"Pierre & Miquelon Standard Time", "PMST",
"Pierre & Miquelon Daylight Time", "PMDT"}},
@@ -466,8 +467,8 @@
"Davis Summer Time", "DAVST"}},
{"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville Time", "DDUT",
"Dumont-d'Urville Summer Time", "DDUST"}},
- {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
- "Macquarie Island Summer Time", "MIST"}},
+ {"Antarctica/Macquarie", new String[] {"Macquarie Island Standard Time", "MIST",
+ "Macquarie Island Daylight Time", "MIDT"}},
{"Antarctica/Mawson", new String[] {"Mawson Time", "MAWT",
"Mawson Summer Time", "MAWST"}},
{"Antarctica/McMurdo", NZST},
@@ -505,6 +506,7 @@
{"Asia/Brunei", new String[] {"Brunei Time", "BNT",
"Brunei Summer Time", "BNST"}},
{"Asia/Calcutta", IST},
+ {"Asia/Chita", IRKT},
{"Asia/Choibalsan", new String[] {"Choibalsan Time", "CHOT",
"Choibalsan Summer Time", "CHOST"}},
{"Asia/Chongqing", CTT},
@@ -525,8 +527,7 @@
{"Asia/Hong_Kong", HKT},
{"Asia/Hovd", new String[] {"Hovd Time", "HOVT",
"Hovd Summer Time", "HOVST"}},
- {"Asia/Irkutsk", new String[] {"Irkutsk Time", "IRKT",
- "Irkutsk Summer Time", "IRKST"}},
+ {"Asia/Irkutsk", IRKT},
{"Asia/Istanbul", EET},
{"Asia/Jakarta", WIT},
{"Asia/Jayapura", new String[] {"East Indonesia Time", "WIT",
@@ -536,14 +537,13 @@
{"Asia/Kamchatka", new String[] {"Petropavlovsk-Kamchatski Time", "PETT",
"Petropavlovsk-Kamchatski Summer Time", "PETST"}},
{"Asia/Karachi", PKT},
- {"Asia/Kashgar", CTT},
+ {"Asia/Kashgar", XJT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
{"Asia/Khandyga", new String[] {"Khandyga Time", "YAKT",
"Khandyga Summer Time", "YAKST"}},
{"Asia/Kolkata", IST},
- {"Asia/Krasnoyarsk", new String[] {"Krasnoyarsk Time", "KRAT",
- "Krasnoyarsk Summer Time", "KRAST"}},
+ {"Asia/Krasnoyarsk", KRAT},
{"Asia/Kuala_Lumpur", MYT},
{"Asia/Kuching", MYT},
{"Asia/Kuwait", ARAST},
@@ -556,7 +556,7 @@
"Philippines Summer Time", "PHST"}},
{"Asia/Muscat", GST},
{"Asia/Nicosia", EET},
- {"Asia/Novokuznetsk", NOVT},
+ {"Asia/Novokuznetsk", KRAT},
{"Asia/Novosibirsk", NOVT},
{"Asia/Oral", new String[] {"Oral Time", "ORAT",
"Oral Summer Time", "ORAST"}},
@@ -577,6 +577,8 @@
{"Asia/Samarkand", UZT},
{"Asia/Seoul", KST},
{"Asia/Singapore", SGT},
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
+ "Srednekolymsk Daylight Time", "SREDT"}},
{"Asia/Taipei", CTT},
{"Asia/Tel_Aviv", ISRAEL},
{"Asia/Tashkent", UZT},
@@ -588,7 +590,7 @@
{"Asia/Ujung_Pandang", CIT},
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
- {"Asia/Urumqi", CTT},
+ {"Asia/Urumqi", XJT},
{"Asia/Ust-Nera", new String[] {"Ust-Nera Time", "VLAT",
"Ust-Nera Summer Time", "VLAST"}},
{"Asia/Vientiane", ICT},
@@ -620,8 +622,8 @@
{"Australia/Canberra", EST_NSW},
{"Australia/Currie", EST_NSW},
{"Australia/Darwin", DARWIN},
- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST",
- "Central Western Summer Time (Australia)", "CWST"}},
+ {"Australia/Eucla", new String[] {"Australian Central Western Standard Time", "ACWST",
+ "Australian Central Western Daylight Time", "ACWDT"}},
{"Australia/Hobart", TASMANIA},
{"Australia/LHI", LORD_HOWE},
{"Australia/Lindeman", BRISBANE},
@@ -687,7 +689,7 @@
{"Europe/Isle_of_Man", GMTBST},
{"Europe/Istanbul", EET},
{"Europe/Jersey", GMTBST},
- {"Europe/Kaliningrad", FET},
+ {"Europe/Kaliningrad", EET},
{"Europe/Kiev", EET},
{"Europe/Lisbon", WET},
{"Europe/Ljubljana", CET},
@@ -696,7 +698,7 @@
{"Europe/Madrid", CET},
{"Europe/Malta", CET},
{"Europe/Mariehamn", EET},
- {"Europe/Minsk", FET},
+ {"Europe/Minsk", MSK},
{"Europe/Monaco", CET},
{"Europe/Moscow", MSK},
{"Europe/Nicosia", EET},
@@ -721,8 +723,7 @@
{"Europe/Vatican", CET},
{"Europe/Vienna", CET},
{"Europe/Vilnius", EET},
- {"Europe/Volgograd", new String[] {"Volgograd Time", "VOLT",
- "Volgograd Summer Time", "VOLST"}},
+ {"Europe/Volgograd", MSK},
{"Europe/Warsaw", CET},
{"Europe/Zagreb", CET},
{"Europe/Zaporozhye", EET},
@@ -775,6 +776,8 @@
{"PRT", AST},
{"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST},
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
+ "Bougainville Daylight Time", "BST"}},
{"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER},
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java Mon Jan 05 11:57:27 2015 -0800
@@ -45,8 +45,8 @@
protected final Object[][] getContents() {
String ACT[] = new String[] {"Acre Normalzeit", "ACT",
"Acre Sommerzeit", "ACST"};
- String ADELAIDE[] = new String[] {"Zentrale Normalzeit (S\u00FCdaustralien)", "CST",
- "Zentrale Sommerzeit (S\u00FCdaustralien)", "CST"};
+ String ADELAIDE[] = new String[] {"Zentrale Normalzeit (S\u00FCdaustralien)", "ACST",
+ "Zentrale Sommerzeit (S\u00FCdaustralien)", "ACDT"};
String AGT[] = new String[] {"Argentinische Zeit", "ART",
"Argentinische Sommerzeit", "ARST"};
String AKST[] = new String[] {"Alaska Normalzeit", "AKST",
@@ -61,10 +61,10 @@
"Atlantik Sommerzeit", "ADT"};
String BDT[] = new String[] {"Bangladesch Zeit", "BDT",
"Bangladesch Sommerzeit", "BDST"};
- String BRISBANE[] = new String[] {"\u00D6stliche Normalzeit (Queensland)", "EST",
- "\u00D6stliche Sommerzeit (Queensland)", "EST"};
- String BROKEN_HILL[] = new String[] {"Zentrale Normalzeit (S\u00FCdaustralien/New South Wales)", "CST",
- "Zentrale Sommerzeit (S\u00FCdaustralien/New South Wales)", "CST"};
+ String BRISBANE[] = new String[] {"\u00D6stliche Normalzeit (Queensland)", "AEST",
+ "\u00D6stliche Sommerzeit (Queensland)", "AEDT"};
+ String BROKEN_HILL[] = new String[] {"Zentrale Normalzeit (S\u00FCdaustralien/New South Wales)", "ACST",
+ "Zentrale Sommerzeit (S\u00FCdaustralien/New South Wales)", "ACDT"};
String BRT[] = new String[] {"Brasilianische Zeit", "BRT",
"Brasilianische Sommerzeit", "BRST"};
String BTT[] = new String[] {"Bhutanische Zeit", "BTT",
@@ -89,8 +89,8 @@
"Chinesische Sommerzeit", "CDT"};
String CUBA[] = new String[] {"Kubanische Normalzeit", "CST",
"Kubanische Sommerzeit", "CDT"};
- String DARWIN[] = new String[] {"Central Normalzeit (Northern Territory)", "CST",
- "Zentrale Sommerzeit (Northern Territory)", "CST"};
+ String DARWIN[] = new String[] {"Zentrale Normalzeit (Northern Territory)", "ACST",
+ "Zentrale Sommerzeit (Northern Territory)", "ACDT"};
String DUBLIN[] = new String[] {"Greenwich Zeit", "GMT",
"Irische Sommerzeit", "IST"};
String EAT[] = new String[] {"Ostafrikanische Zeit", "EAT",
@@ -103,8 +103,8 @@
"Ostgr\u00f6nl\u00e4ndische Sommerzeit", "EGST"};
String EST[] = new String[] {"\u00d6stliche Normalzeit", "EST",
"\u00d6stliche Sommerzeit", "EDT"};
- String EST_NSW[] = new String[] {"Eastern Normalzeit (Neus\u00FCdwales)", "EST",
- "\u00D6stliche Sommerzeit (New South Wales)", "EST"};
+ String EST_NSW[] = new String[] {"\u00D6stliche Normalzeit (New South Wales)", "AEST",
+ "\u00D6stliche Sommerzeit (New South Wales)", "AEDT"};
String FET[] = new String[] {"Kaliningrader Zeit", "FET",
"Kaliningrader Sommerzeit", "FEST"};
String GHMT[] = new String[] {"Ghanaische Normalzeit", "GMT",
@@ -133,10 +133,12 @@
"Indische Sommerzeit", "IDT"};
String JST[] = new String[] {"Japanische Normalzeit", "JST",
"Japanische Sommerzeit", "JDT"};
+ String KRAT[] = new String[] {"Krasnojarsker Zeit", "KRAT",
+ "Krasnojarsker Sommerzeit", "KRAST"};
String KST[] = new String[] {"Koreanische Normalzeit", "KST",
"Koreanische Sommerzeit", "KDT"};
String LORD_HOWE[] = new String[] {"Lord Howe Normalzeit", "LHST",
- "Lord Howe Sommerzeit", "LHST"};
+ "Lord Howe Sommerzeit", "LHDT"};
String MHT[] = new String[] {"Marshallinseln Zeit", "MHT",
"Marshallinseln Sommerzeit", "MHST"};
String MSK[] = new String[] {"Moskauer Normalzeit", "MSK",
@@ -165,16 +167,16 @@
"Pazifische Sommerzeit", "PDT"};
String SAMOA[] = new String[] {"Samoa Normalzeit", "SST",
"Samoa Sommerzeit", "SDT"};
+ String IRKT[] = new String[] {"Irkutsk Zeit", "IRKT",
+ "Irkutsk Sommerzeit", "IRKST"};
String SAST[] = new String[] {"S\u00fcdafrikanische Normalzeit", "SAST",
"S\u00fcdafrikanische Sommerzeit", "SAST"};
String SBT[] = new String[] {"Salomoninseln Zeit", "SBT",
"Salomoninseln Sommerzeit", "SBST"};
String SGT[] = new String[] {"Singapur Zeit", "SGT",
"Singapur Sommerzeit", "SGST"};
- String SLST[] = new String[] {"Greenwich Normalzeit", "GMT",
- "Sierra Leone Sommerzeit", "SLST"};
- String TASMANIA[] = new String[] {"\u00D6stliche Normalzeit (Tasmanien)", "EST",
- "\u00D6stliche Sommerzeit (Tasmanien)", "EST"};
+ String TASMANIA[] = new String[] {"\u00D6stliche Normalzeit (Tasmanien)", "AEST",
+ "\u00D6stliche Sommerzeit (Tasmanien)", "AEDT"};
String TMT[] = new String[] {"Turkmenische Zeit", "TMT",
"Turkmenische Sommerzeit", "TMST"};
String ULAT[]= new String[] {"Ulaanbaatar Zeit", "ULAT",
@@ -183,22 +185,22 @@
"Koordinierte Universalzeit", "UTC"};
String UZT[] = new String[] {"Usbekistan Zeit", "UZT",
"Usbekistan Sommerzeit", "UZST"};
- String VICTORIA[] = new String[] {"\u00D6stliche Normalzeit (Victoria)", "EST",
- "\u00D6stliche Sommerzeit (Victoria)", "EST"};
+ String VICTORIA[] = new String[] {"\u00D6stliche Normalzeit (Victoria)", "AEST",
+ "\u00D6stliche Sommerzeit (Victoria)", "AEDT"};
String VLAT[] = new String[] {"Wladiwostok Zeit", "VLAT",
"Wladiwostok Sommerzeit", "VLAST"};
- String WART[] = new String[] {"Westargentinische Zeit", "WART",
- "Westargentinische Sommerzeit", "WARST"};
String WAT[] = new String[] {"Westafrikanische Zeit", "WAT",
"Westafrikanische Sommerzeit", "WAST"};
String WET[] = new String[] {"Westeurop\u00e4ische Zeit", "WEZ",
"Westeurop\u00e4ische Sommerzeit", "WESZ"};
String WIT[] = new String[] {"Westindonesische Zeit", "WIB",
"Westindonesische Sommerzeit", "WIST"};
- String WST_AUS[] = new String[] {"Westliche Normalzeit (Australien)", "WST",
- "Westliche Sommerzeit (Australien)", "WST"};
- String WST_SAMOA[] = new String[] {"West Samoa Zeit", "WST",
+ String WST_AUS[] = new String[] {"Westliche Normalzeit (Australien)", "AWST",
+ "Westliche Sommerzeit (Australien)", "AWDT"};
+ String WST_SAMOA[] = new String[] {"West Samoa Zeit", "WSST",
"West Samoa Sommerzeit", "WSDT"};
+ String XJT[] = new String[] {"Chinesische Normalzeit", "XJT",
+ "Chinesische Sommerzeit", "XJDT"};
String YAKT[] = new String[] {"Jakutsk Zeit", "YAKT",
"Jakutsk Sommerzeit", "YAKST"};
@@ -262,7 +264,7 @@
{"Africa/Djibouti", EAT},
{"Africa/Douala", WAT},
{"Africa/El_Aaiun", WET},
- {"Africa/Freetown", SLST},
+ {"Africa/Freetown", GMT},
{"Africa/Gaborone", CAT},
{"Africa/Harare", CAT},
{"Africa/Johannesburg", SAST},
@@ -358,7 +360,7 @@
{"America/Godthab", new String[] {"Westgr\u00f6nl\u00e4ndische Zeit", "WGT",
"Westgr\u00f6nl\u00e4ndische Sommerzeit", "WGST"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", EST},
+ {"America/Grand_Turk", AST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
@@ -401,8 +403,7 @@
{"America/Mendoza", AGT},
{"America/Menominee", CST},
{"America/Merida", CST},
- {"America/Metlakatla", new String[] {"Metlakatla Normalzeit", "MeST",
- "Metlakatla Sommerzeit", "MeDT"}},
+ {"America/Metlakatla", PST},
{"America/Mexico_City", CST},
{"America/Miquelon", new String[] {"Pierre & Miquelon Normalzeit", "PMST",
"Pierre & Miquelon Sommerzeit", "PMDT"}},
@@ -467,7 +468,7 @@
{"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville Zeit", "DDUT",
"Dumont-d'Urville Sommerzeit", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"Macquarieinsel Zeit", "MIST",
- "Macquarieinsel Sommerzeit", "MIST"}},
+ "Macquarieinsel Sommerzeit", "MIDT"}},
{"Antarctica/Mawson", new String[] {"Mawson Zeit", "MAWT",
"Mawson Sommerzeit", "MAWST"}},
{"Antarctica/McMurdo", NZST},
@@ -505,6 +506,7 @@
{"Asia/Brunei", new String[] {"Brunei Zeit", "BNT",
"Brunei Sommerzeit", "BNST"}},
{"Asia/Calcutta", IST},
+ {"Asia/Chita", IRKT},
{"Asia/Choibalsan", new String[] {"Choibalsan Zeit", "CHOT",
"Choibalsan Sommerzeit", "CHOST"}},
{"Asia/Chongqing", CTT},
@@ -525,8 +527,7 @@
{"Asia/Hong_Kong", HKT},
{"Asia/Hovd", new String[] {"Hovd Zeit", "HOVT",
"Hovd Sommerzeit", "HOVST"}},
- {"Asia/Irkutsk", new String[] {"Irkutsk Zeit", "IRKT",
- "Irkutsk Sommerzeit", "IRKST"}},
+ {"Asia/Irkutsk", IRKT},
{"Asia/Istanbul", EET},
{"Asia/Jakarta", WIT},
{"Asia/Jayapura", new String[] {"Ostindonesische Zeit", "WIT",
@@ -536,14 +537,13 @@
{"Asia/Kamchatka", new String[] {"Petropawlowsk-Kamtschatkische Zeit", "PETT",
"Petropawlowsk-Kamtschatkische Sommerzeit", "PETST"}},
{"Asia/Karachi", PKT},
- {"Asia/Kashgar", CTT},
+ {"Asia/Kashgar", XJT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
{"Asia/Khandyga", new String[] {"Chandyga Zeit", "YAKT",
"Chandyga Sommerzeit", "YAKST"}},
{"Asia/Kolkata", IST},
- {"Asia/Krasnoyarsk", new String[] {"Krasnojarsker Zeit", "KRAT",
- "Krasnojarsker Sommerzeit", "KRAST"}},
+ {"Asia/Krasnoyarsk", KRAT},
{"Asia/Kuala_Lumpur", MYT},
{"Asia/Kuching", MYT},
{"Asia/Kuwait", ARAST},
@@ -556,7 +556,7 @@
"Philippinische Sommerzeit", "PHST"}},
{"Asia/Muscat", GST},
{"Asia/Nicosia", EET},
- {"Asia/Novokuznetsk", NOVT},
+ {"Asia/Novokuznetsk", KRAT},
{"Asia/Novosibirsk", NOVT},
{"Asia/Oral", new String[] {"Oral Zeit", "ORAT",
"Oral Sommerzeit", "ORAST"}},
@@ -577,6 +577,8 @@
{"Asia/Samarkand", UZT},
{"Asia/Seoul", KST},
{"Asia/Singapore", SGT},
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
+ "Srednekolymsk Daylight Time", "SREDT"}},
{"Asia/Taipei", CTT},
{"Asia/Tel_Aviv", ISRAEL},
{"Asia/Tashkent", UZT},
@@ -588,7 +590,7 @@
{"Asia/Ujung_Pandang", CIT},
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
- {"Asia/Urumqi", CTT},
+ {"Asia/Urumqi", XJT},
{"Asia/Ust-Nera", new String[] {"Ust-Nera Zeit", "VLAT",
"Ust-Nera Sommerzeit", "VLAST"}},
{"Asia/Vientiane", ICT},
@@ -620,8 +622,8 @@
{"Australia/Canberra", EST_NSW},
{"Australia/Currie", EST_NSW},
{"Australia/Darwin", DARWIN},
- {"Australia/Eucla", new String[] {"Zentral-Westliche Normalzeit (Australien)", "CWST",
- "Zentral-Westliche Sommerzeit (Australien)", "CWST"}},
+ {"Australia/Eucla", new String[] {"Zentral-Westliche Normalzeit (Australien)", "ACWST",
+ "Zentral-Westliche Sommerzeit (Australien)", "ACWDT"}},
{"Australia/Hobart", TASMANIA},
{"Australia/LHI", LORD_HOWE},
{"Australia/Lindeman", BRISBANE},
@@ -687,7 +689,7 @@
{"Europe/Isle_of_Man", GMTBST},
{"Europe/Istanbul", EET},
{"Europe/Jersey", GMTBST},
- {"Europe/Kaliningrad", FET},
+ {"Europe/Kaliningrad", EET},
{"Europe/Kiev", EET},
{"Europe/Lisbon", WET},
{"Europe/Ljubljana", CET},
@@ -696,7 +698,7 @@
{"Europe/Madrid", CET},
{"Europe/Malta", CET},
{"Europe/Mariehamn", EET},
- {"Europe/Minsk", FET},
+ {"Europe/Minsk", MSK},
{"Europe/Monaco", CET},
{"Europe/Moscow", MSK},
{"Europe/Nicosia", EET},
@@ -721,8 +723,7 @@
{"Europe/Vatican", CET},
{"Europe/Vienna", CET},
{"Europe/Vilnius", EET},
- {"Europe/Volgograd", new String[] {"Wolgograder Zeit", "VOLT",
- "Wolgograder Sommerzeit", "VOLST"}},
+ {"Europe/Volgograd", MSK},
{"Europe/Warsaw", CET},
{"Europe/Zagreb", CET},
{"Europe/Zaporozhye", EET},
@@ -775,6 +776,8 @@
{"PRT", AST},
{"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST},
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
+ "Bougainville Daylight Time", "BST"}},
{"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER},
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java Mon Jan 05 11:57:27 2015 -0800
@@ -45,8 +45,8 @@
protected final Object[][] getContents() {
String ACT[] = new String[] {"Hora de Acre", "ACT",
"Hora de verano de Acre", "ACST"};
- String ADELAIDE[] = new String[] {"Hora est\u00E1ndar Central (Sur de Australia)", "CST",
- "Hora de verano Central (Sur de Australia)", "CST"};
+ String ADELAIDE[] = new String[] {"Hora est\u00E1ndar Central (Sur de Australia)", "ACST",
+ "Hora de verano Central (Sur de Australia)", "ACDT"};
String AGT[] = new String[] {"Hora de Argentina", "ART",
"Hora de verano de Argentina", "ARST"};
String AKST[] = new String[] {"Hora est\u00e1ndar de Alaska", "AKST",
@@ -61,10 +61,10 @@
"Hora de verano Atl\u00e1ntico", "ADT"};
String BDT[] = new String[] {"Hora de Bangladesh", "BDT",
"Hora de verano de Bangladesh", "BDST"};
- String BRISBANE[] = new String[] {"Hora est\u00E1ndar del Este (Queensland)", "EST",
- "Hora est\u00E1ndar de verano del Este (Queensland)", "EST"};
- String BROKEN_HILL[] = new String[] {"Hora est\u00E1ndar Central (Sur de Australia/Nueva Gales del Sur)", "CST",
- "Hora de verano Central (Sur de Australia/Nueva Gales del Sur)", "CST"};
+ String BRISBANE[] = new String[] {"Hora est\u00E1ndar del Este (Queensland)", "AEST",
+ "Hora est\u00E1ndar de verano del Este (Queensland)", "AEDT"};
+ String BROKEN_HILL[] = new String[] {"Hora est\u00E1ndar Central (Sur de Australia/Nueva Gales del Sur)", "ACST",
+ "Hora de verano Central (Sur de Australia/Nueva Gales del Sur)", "ACDT"};
String BRT[] = new String[] {"Hora de Brasil", "BRT",
"Hora de verano de Brasil", "BRST"};
String BTT[] = new String[] {"Hora de But\u00e1n", "BTT",
@@ -77,8 +77,8 @@
"Hora de verano de Chatham", "CHADT"};
String ChST[] = new String[] {"Hora est\u00e1ndar de Chamorro", "ChST",
"Hora de verano de Chamorro", "ChDT"};
- String CHUT[] = new String[] {"Chuuk Time", "CHUT",
- "Chuuk Summer Time", "CHUST"};
+ String CHUT[] = new String[] {"Hora de Chuuk", "CHUT",
+ "Hora de verano de Chuuk", "CHUST"};
String CIT[] = new String[] {"Hora de Indonesia Central", "WITA",
"Hora de verano de Indonesia Central", "CIST"};
String CLT[] = new String[] {"Hora de Chile", "CLT",
@@ -89,8 +89,8 @@
"Hora de verano de China", "CDT"};
String CUBA[] = new String[] {"Hora est\u00e1ndar de Cuba", "CST",
"Hora de verano de Cuba", "CDT"};
- String DARWIN[] = new String[] {"Hora est\u00E1ndar Central (territorio del Norte)", "CST",
- "Hora de verano Central (territorio del Norte)", "CST"};
+ String DARWIN[] = new String[] {"Hora est\u00E1ndar Central (territorio del Norte)", "ACST",
+ "Hora de verano Central (territorio del Norte)", "ACDT"};
String DUBLIN[] = new String[] {"Hora del Meridiano de Greenwich", "GMT",
"Hora de verano de Irlanda", "IST"};
String EAT[] = new String[] {"Hora de \u00c1frica Oriental", "EAT",
@@ -103,8 +103,8 @@
"Hora de verano de Groenlandia Oriental", "EGST"};
String EST[] = new String[] {"Hora est\u00e1ndar Oriental", "EST",
"Hora de verano Oriental", "EDT"};
- String EST_NSW[] = new String[] {"Hora est\u00E1ndar Oriental (Nueva Gales del Sur)", "EST",
- "Hora de verano Oriental (Nueva Gales del Sur)", "EST"};
+ String EST_NSW[] = new String[] {"Hora est\u00E1ndar Oriental (Nueva Gales del Sur)", "AEST",
+ "Hora de verano Oriental (Nueva Gales del Sur)", "AEDT"};
String FET[] = new String[] {"Hora de Europa m\u00E1s Oriental", "FET",
"Hora de verano de Europa m\u00E1s Oriental", "FEST"};
String GHMT[] = new String[] {"Hora central de Ghana", "GMT",
@@ -133,10 +133,12 @@
"Hora de verano de India", "IDT"};
String JST[] = new String[] {"Hora est\u00e1ndar de Jap\u00f3n", "JST",
"Hora de verano de Jap\u00f3n", "JDT"};
+ String KRAT[] = new String[] {"Hora de Krasnoyarsk", "KRAT",
+ "Hora de verano de Krasnoyarsk", "KRAST"};
String KST[] = new String[] {"Hora est\u00e1ndar de Corea", "KST",
"Hora de verano de Corea", "KDT"};
String LORD_HOWE[] = new String[] {"Hora est\u00e1ndar de Lord Howe", "LHST",
- "Hora de verano de Lord Howe", "LHST"};
+ "Hora de verano de Lord Howe", "LHDT"};
String MHT[] = new String[] {"Hora de las Islas Marshall", "MHT",
"Hora de verano de las Islas Marshall", "MHST"};
String MSK[] = new String[] {"Hora est\u00e1ndar de Mosc\u00fa", "MSK",
@@ -159,22 +161,22 @@
"Hora de verano de Pitcairn", "PDT"};
String PKT[] = new String[] {"Hora de Pakist\u00e1n", "PKT",
"Hora de verano de Pakist\u00e1n", "PKST"};
- String PONT[] = new String[] {"Pohnpei Time", "PONT",
- "Pohnpei Summer Time", "PONST"};
+ String PONT[] = new String[] {"Hora de Pohnpei", "PONT",
+ "Hora de verano de Pohnpei", "PONST"};
String PST[] = new String[] {"Hora est\u00e1ndar del Pac\u00edfico", "PST",
"Hora de verano del Pac\u00edfico", "PDT"};
String SAMOA[] = new String[] {"Hora est\u00e1ndar de Samoa", "SST",
"Hora de verano de Samoa", "SDT"};
+ String IRKT[] = new String[] {"Hora de Irkutsk", "IRKT",
+ "Hora de verano de Irkutsk", "IRKST"};
String SAST[] = new String[] {"Hora est\u00e1ndar de Sud\u00e1frica", "SAST",
"Hora de verano de Sud\u00e1frica", "SAST"};
String SBT[] = new String[] {"Hora de las Islas Solomon", "SBT",
"Hora de verano de las Islas Solomon", "SBST"};
String SGT[] = new String[] {"Hora de Singapur", "SGT",
"Hora de verano de Singapur", "SGST"};
- String SLST[] = new String[] {"Hora del Meridiano de Greenwich", "GMT",
- "Hora de verano de Sierra Leona", "SLST"};
- String TASMANIA[] = new String[] {"Hora est\u00E1ndar del Este (Tasmania)", "EST",
- "Hora de verano del Este (Tasmania)", "EST"};
+ String TASMANIA[] = new String[] {"Hora est\u00E1ndar del Este (Tasmania)", "AEST",
+ "Hora de verano del Este (Tasmania)", "AEDT"};
String TMT[] = new String[] {"Hora de Turkmenist\u00e1n", "TMT",
"Hora de verano de Turkmenist\u00e1n", "TMST"};
String ULAT[]= new String[] {"Hora de Ulan Bator", "ULAT",
@@ -183,22 +185,22 @@
"Hora Universal Coordinada", "UTC"};
String UZT[] = new String[] {"Hora de Uzbekist\u00e1n", "UZT",
"Hora de verano de Uzbekist\u00e1n", "UZST"};
- String VICTORIA[] = new String[] {"Hora est\u00E1ndar del Este (Victoria)", "EST",
- "Hora de verano del Este (Victoria)", "EST"};
+ String VICTORIA[] = new String[] {"Hora est\u00E1ndar del Este (Victoria)", "AEST",
+ "Hora de verano del Este (Victoria)", "AEDT"};
String VLAT[] = new String[] {"Hora de Vladivostok", "VLAT",
"Hora de verano de Vladivostok", "VLAST"};
- String WART[] = new String[] {"Hora de Argentina Occidental", "WART",
- "Hora de verano de Argentina Occidental", "WARST"};
String WAT[] = new String[] {"Hora de \u00c1frica Occidental", "WAT",
"Hora de verano de \u00c1frica Occidental", "WAST"};
String WET[] = new String[] {"Hora de Europa Occidental", "WET",
"Hora de verano de Europa Occidental", "WEST"};
String WIT[] = new String[] {"Hora de Indonesia Occidental", "WIB",
"Indonesia Hora de verano de Indonesia Occidental", "WIST"};
- String WST_AUS[] = new String[] {"Hora est\u00E1ndar Occidental (Australia)", "WST",
- "Hora de verano Occidental (Australia)", "WST"};
- String WST_SAMOA[] = new String[] {"Hora de Samoa Occidental", "WST",
+ String WST_AUS[] = new String[] {"Hora est\u00E1ndar Occidental (Australia)", "AWST",
+ "Hora de verano Occidental (Australia)", "AWDT"};
+ String WST_SAMOA[] = new String[] {"Hora de Samoa Occidental", "WSST",
"Hora de verano de Samoa Occidental", "WSDT"};
+ String XJT[] = new String[] {"Hora est\u00e1ndar de China", "XJT",
+ "Hora de verano de China", "XJDT"};
String YAKT[] = new String[] {"Hora de Yakutsk", "YAKT",
"Hora de verano de Yakutsk", "YAKST"};
@@ -262,7 +264,7 @@
{"Africa/Djibouti", EAT},
{"Africa/Douala", WAT},
{"Africa/El_Aaiun", WET},
- {"Africa/Freetown", SLST},
+ {"Africa/Freetown", GMT},
{"Africa/Gaborone", CAT},
{"Africa/Harare", CAT},
{"Africa/Johannesburg", SAST},
@@ -358,7 +360,7 @@
{"America/Godthab", new String[] {"Hora de Groenlandia Occidental", "WGT",
"Hora de verano de Groenlandia Occidental", "WGST"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", EST},
+ {"America/Grand_Turk", AST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
@@ -401,8 +403,7 @@
{"America/Mendoza", AGT},
{"America/Menominee", CST},
{"America/Merida", CST},
- {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
- "Metlakatla Daylight Time", "MeDT"}},
+ {"America/Metlakatla", PST},
{"America/Mexico_City", CST},
{"America/Miquelon", new String[] {"Hora est\u00e1ndar de Pierre & Miquelon", "PMST",
"Hora de verano de Pierre & Miquelon", "PMDT"}},
@@ -466,8 +467,8 @@
"Hora de verano de Davis", "DAVST"}},
{"Antarctica/DumontDUrville", new String[] {"Hora de Dumont-d'Urville", "DDUT",
"Hora de verano de Dumont-d'Urville", "DDUST"}},
- {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
- "Macquarie Island Summer Time", "MIST"}},
+ {"Antarctica/Macquarie", new String[] {"Hora de Isla Macquarie", "MIST",
+ "Hora de verano de Isla Macquarie", "MIDT"}},
{"Antarctica/Mawson", new String[] {"Hora de Mawson", "MAWT",
"Hora de verano de Mawson", "MAWST"}},
{"Antarctica/McMurdo", NZST},
@@ -505,6 +506,7 @@
{"Asia/Brunei", new String[] {"Hora de Brunei", "BNT",
"Hora de verano de Brunei", "BNST"}},
{"Asia/Calcutta", IST},
+ {"Asia/Chita", IRKT},
{"Asia/Choibalsan", new String[] {"Hora de Choibalsan", "CHOT",
"Hora de verano de Choibalsan", "CHOST"}},
{"Asia/Chongqing", CTT},
@@ -525,8 +527,7 @@
{"Asia/Hong_Kong", HKT},
{"Asia/Hovd", new String[] {"Hora de Hovd", "HOVT",
"Hora de verano de Hovd", "HOVST"}},
- {"Asia/Irkutsk", new String[] {"Hora de Irkutsk", "IRKT",
- "Hora de verano de Irkutsk", "IRKST"}},
+ {"Asia/Irkutsk", IRKT},
{"Asia/Istanbul", EET},
{"Asia/Jakarta", WIT},
{"Asia/Jayapura", new String[] {"Hora de Indonesia Oriental", "WIT",
@@ -536,14 +537,13 @@
{"Asia/Kamchatka", new String[] {"Hora de Petropavlovsk-Kamchatski", "PETT",
"Hora de verano de Petropavlovsk-Kamchatski", "PETST"}},
{"Asia/Karachi", PKT},
- {"Asia/Kashgar", CTT},
+ {"Asia/Kashgar", XJT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
{"Asia/Khandyga", new String[] {"Hora de Khandyga", "YAKT",
"Hora de verano de Khandyga", "YAKST"}},
{"Asia/Kolkata", IST},
- {"Asia/Krasnoyarsk", new String[] {"Hora de Krasnoyarsk", "KRAT",
- "Hora de verano de Krasnoyarsk", "KRAST"}},
+ {"Asia/Krasnoyarsk", KRAT},
{"Asia/Kuala_Lumpur", MYT},
{"Asia/Kuching", MYT},
{"Asia/Kuwait", ARAST},
@@ -556,7 +556,7 @@
"Hora de verano de Filipinas", "PHST"}},
{"Asia/Muscat", GST},
{"Asia/Nicosia", EET},
- {"Asia/Novokuznetsk", NOVT},
+ {"Asia/Novokuznetsk", KRAT},
{"Asia/Novosibirsk", NOVT},
{"Asia/Oral", new String[] {"Hora de Uralsk", "ORAT",
"Hora de verano de Uralsk", "ORAST"}},
@@ -577,6 +577,8 @@
{"Asia/Samarkand", UZT},
{"Asia/Seoul", KST},
{"Asia/Singapore", SGT},
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
+ "Srednekolymsk Daylight Time", "SREDT"}},
{"Asia/Taipei", CTT},
{"Asia/Tel_Aviv", ISRAEL},
{"Asia/Tashkent", UZT},
@@ -588,7 +590,7 @@
{"Asia/Ujung_Pandang", CIT},
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
- {"Asia/Urumqi", CTT},
+ {"Asia/Urumqi", XJT},
{"Asia/Ust-Nera", new String[] {"Hora de Ust-Nera", "VLAT",
"Hora de verano de Ust-Nera", "VLAST"}},
{"Asia/Vientiane", ICT},
@@ -620,8 +622,8 @@
{"Australia/Canberra", EST_NSW},
{"Australia/Currie", EST_NSW},
{"Australia/Darwin", DARWIN},
- {"Australia/Eucla", new String[] {"Hora est\u00E1ndar de Australia Central y Occidental", "CWST",
- "Hora est\u00E1ndar de verano de Australia Central y Occidental", "CWST"}},
+ {"Australia/Eucla", new String[] {"Hora est\u00E1ndar de Australia Central y Occidental", "ACWST",
+ "Hora est\u00E1ndar de verano de Australia Central y Occidental", "ACWDT"}},
{"Australia/Hobart", TASMANIA},
{"Australia/LHI", LORD_HOWE},
{"Australia/Lindeman", BRISBANE},
@@ -687,7 +689,7 @@
{"Europe/Isle_of_Man", GMTBST},
{"Europe/Istanbul", EET},
{"Europe/Jersey", GMTBST},
- {"Europe/Kaliningrad", FET},
+ {"Europe/Kaliningrad", EET},
{"Europe/Kiev", EET},
{"Europe/Lisbon", WET},
{"Europe/Ljubljana", CET},
@@ -696,7 +698,7 @@
{"Europe/Madrid", CET},
{"Europe/Malta", CET},
{"Europe/Mariehamn", EET},
- {"Europe/Minsk", FET},
+ {"Europe/Minsk", MSK},
{"Europe/Monaco", CET},
{"Europe/Moscow", MSK},
{"Europe/Nicosia", EET},
@@ -721,8 +723,7 @@
{"Europe/Vatican", CET},
{"Europe/Vienna", CET},
{"Europe/Vilnius", EET},
- {"Europe/Volgograd", new String[] {"Hora de Volgogrado", "VOLT",
- "Hora de verano de Volgogrado", "VOLST"}},
+ {"Europe/Volgograd", MSK},
{"Europe/Warsaw", CET},
{"Europe/Zagreb", CET},
{"Europe/Zaporozhye", EET},
@@ -775,6 +776,8 @@
{"PRT", AST},
{"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST},
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
+ "Bougainville Daylight Time", "BST"}},
{"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER},
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java Mon Jan 05 11:57:27 2015 -0800
@@ -45,8 +45,8 @@
protected final Object[][] getContents() {
String ACT[] = new String[] {"Heure de l'Acre", "ACT",
"Heure d'\u00e9t\u00e9 de l'Acre", "ACST"};
- String ADELAIDE[] = new String[] {"Heure standard d'Australie centrale (Australie du sud)", "CST",
- "Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud)", "CST"};
+ String ADELAIDE[] = new String[] {"Heure standard d'Australie centrale (Australie du sud)", "ACST",
+ "Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud)", "ACDT"};
String AGT[] = new String[] {"Heure D'Argentine", "ART",
"Heure d'\u00e9t\u00e9 D'Argentine", "ARST"};
String AKST[] = new String[] {"Heure normale d'Alaska", "AKST",
@@ -61,10 +61,10 @@
"Heure avanc\u00e9e de l'Atlantique", "ADT"};
String BDT[] = new String[] {"Heure du Bangladesh", "BDT",
"Heure d'\u00e9t\u00e9 du Bangladesh", "BDST"};
- String BRISBANE[] = new String[] {"Heure standard d'Australie orientale (Queensland)", "EST",
- "Heure d'\u00E9t\u00E9 d'Australie orientale (Queensland)", "EST"};
- String BROKEN_HILL[] = new String[] {"Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "CST",
- "Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "CST"};
+ String BRISBANE[] = new String[] {"Heure standard d'Australie orientale (Queensland)", "AEST",
+ "Heure d'\u00E9t\u00E9 d'Australie orientale (Queensland)", "AEDT"};
+ String BROKEN_HILL[] = new String[] {"Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "ACST",
+ "Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "ACDT"};
String BRT[] = new String[] {"Heure du Br\u00e9sil", "BRT",
"Heure d'\u00e9t\u00e9 du Br\u00e9sil", "BRST"};
String BTT[] = new String[] {"Heure du Bhoutan", "BTT",
@@ -89,8 +89,8 @@
"Heure avanc\u00e9e de Chine", "CDT"};
String CUBA[] = new String[] {"Heure standard de Cuba", "CST",
"Heure d'\u00e9t\u00e9 de Cuba", "CDT"};
- String DARWIN[] = new String[] {"Heure standard d'Australie centrale (Territoire du Nord)", "CST",
- "Heure d'\u00E9t\u00E9 d'Australie centrale (Territoire du Nord)", "CST"};
+ String DARWIN[] = new String[] {"Heure standard d'Australie centrale (Territoire du Nord)", "ACST",
+ "Heure d'\u00E9t\u00E9 d'Australie centrale (Territoire du Nord)", "ACDT"};
String DUBLIN[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT",
"Heure d'\u00e9t\u00e9 irlandaise", "IST"};
String EAT[] = new String[] {"Heure d'Afrique de l'Est", "EAT",
@@ -103,8 +103,8 @@
"Heure d'\u00e9t\u00e9 du Groenland de l'Est", "EGST"};
String EST[] = new String[] {"Heure normale de l'Est", "EST",
"Heure avanc\u00e9e de l'Est", "EDT"};
- String EST_NSW[] = new String[] {"Heure normale de l'Est (Nouvelle-Galles du Sud)", "EST",
- "Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud)", "EST"};
+ String EST_NSW[] = new String[] {"Heure normale de l'Est (Nouvelle-Galles du Sud)", "AEST",
+ "Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud)", "AEDT"};
String FET[] = new String[] {"Heure d'Europe de l'Est UTC+3", "FET",
"Heure d'\u00E9t\u00E9 d'Europe de l'Est UTC+3", "FEST"};
String GHMT[] = new String[] {"Heure du Ghana", "GMT",
@@ -133,10 +133,12 @@
"Heure avanc\u00e9e d'Inde", "IDT"};
String JST[] = new String[] {"Heure normale du Japon", "JST",
"Heure avanc\u00e9e du Japon", "JDT"};
+ String KRAT[] = new String[] {"Heure de Krasno\u00efarsk", "KRAT",
+ "Heure d'\u00e9t\u00e9 de Krasno\u00efarsk", "KRAST"};
String KST[] = new String[] {"Heure normale de Cor\u00e9e", "KST",
"Heure avanc\u00e9e de Cor\u00e9e", "KDT"};
String LORD_HOWE[] = new String[] {"Heure standard de Lord Howe", "LHST",
- "Heure d'\u00e9t\u00e9 de Lord Howe", "LHST"};
+ "Heure d'\u00e9t\u00e9 de Lord Howe", "LHDT"};
String MHT[] = new String[] {"Heure des Iles Marshall", "MHT",
"Heure d'\u00e9t\u00e9 des Iles Marshall", "MHST"};
String MSK[] = new String[] {"Heure standard de Moscou", "MSK",
@@ -165,16 +167,16 @@
"Heure avanc\u00e9e du Pacifique", "PDT"};
String SAMOA[] = new String[] {"Heure standard de Samoa", "SST",
"Heure avanc\u00e9e de Samoa", "SDT"};
+ String IRKT[] = new String[] {"Heure d'Irkutsk", "IRKT",
+ "Heure d'\u00e9t\u00e9 d'Irkutsk", "IRKST"};
String SAST[] = new String[] {"Heure normale d'Afrique du Sud", "SAST",
"Heure d'\u00e9t\u00e9 d'Afrique du Sud", "SAST"};
String SBT[] = new String[] {"Heure des \u00celes Salomon", "SBT",
"Heure d'\u00e9t\u00e9 des \u00celes Salomon", "SBST"};
String SGT[] = new String[] {"Heure de Singapour", "SGT",
"Heure d'\u00e9t\u00e9 de Singapour", "SGST"};
- String SLST[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT",
- "Heure d'\u00e9t\u00e9 de Sierra Leone", "SLST"};
- String TASMANIA[] = new String[] {"Heure standard d'Australie orientale (Tasmanie)", "EST",
- "Heure d'\u00E9t\u00E9 d'Australie orientale (Tasmanie)", "EST"};
+ String TASMANIA[] = new String[] {"Heure standard d'Australie orientale (Tasmanie)", "AEST",
+ "Heure d'\u00E9t\u00E9 d'Australie orientale (Tasmanie)", "AEDT"};
String TMT[] = new String[] {"Heure du Turkm\u00e9nistan", "TMT",
"Heure d'\u00e9t\u00e9 du Turkm\u00e9nistan", "TMST"};
String ULAT[]= new String[] {"Heure de l'Ulaanbaatar", "ULAT",
@@ -183,22 +185,22 @@
"Temps universel coordonn\u00e9", "UTC"};
String UZT[] = new String[] {"Heure de l'Ouzb\u00e9kistan", "UZT",
"Heure d'\u00e9t\u00e9 de l'Ouzb\u00e9kistan", "UZST"};
- String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "EST",
- "Heure d'\u00E9t\u00E9 d'Australie orientale (Victoria)", "EST"};
+ String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "AEST",
+ "Heure d'\u00E9t\u00E9 d'Australie orientale (Victoria)", "AEDT"};
String VLAT[] = new String[] {"Heure de Vladivostok", "VLAT",
"Heure d'\u00e9t\u00e9 de Vladivostok", "VLAST"};
- String WART[] = new String[] {"Heure D'Argentine de l'Ouest", "WART",
- "Heure d'\u00e9t\u00e9 D'Argentine de l'Ouest", "WARST"};
String WAT[] = new String[] {"Heure d'Afrique de l'Ouest", "WAT",
"Heure d'\u00e9t\u00e9 d'Afrique de l'Ouest", "WAST"};
String WET[] = new String[] {"Heure d'Europe de l'Ouest", "WET",
"Heure d'\u00e9t\u00e9 d'Europe de l'Ouest", "WEST"};
String WIT[] = new String[] {"Heure de l'Indon\u00e9sie occidentale", "WIB",
"Heure d'\u00e9t\u00e9 de l'Indon\u00e9sie occidentale", "WIST"};
- String WST_AUS[] = new String[] {"Heure normale de l'Ouest (Australie)", "WST",
- "Heure d'\u00E9t\u00E9 de l'Ouest (Australie)", "WST"};
- String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WST",
+ String WST_AUS[] = new String[] {"Heure normale de l'Ouest (Australie)", "AWST",
+ "Heure d'\u00E9t\u00E9 de l'Ouest (Australie)", "AWDT"};
+ String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WSST",
"Heure d'\u00e9t\u00e9 des Samoas occidentales", "WSDT"};
+ String XJT[] = new String[] {"Heure normale de Chine", "XJT",
+ "Heure avanc\u00e9e de Chine", "XJDT"};
String YAKT[] = new String[] {"Heure du Iakoutsk", "YAKT",
"Heure d'\u00e9t\u00e9 du Iakoutsk", "YAKST"};
@@ -262,7 +264,7 @@
{"Africa/Djibouti", EAT},
{"Africa/Douala", WAT},
{"Africa/El_Aaiun", WET},
- {"Africa/Freetown", SLST},
+ {"Africa/Freetown", GMT},
{"Africa/Gaborone", CAT},
{"Africa/Harare", CAT},
{"Africa/Johannesburg", SAST},
@@ -358,7 +360,7 @@
{"America/Godthab", new String[] {"Heure du Groenland de l'Ouest", "WGT",
"Heure d'\u00e9t\u00e9 du Groenland de l'Ouest", "WGST"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", EST},
+ {"America/Grand_Turk", AST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
@@ -401,8 +403,7 @@
{"America/Mendoza", AGT},
{"America/Menominee", CST},
{"America/Merida", CST},
- {"America/Metlakatla", new String[] {"Heure normale de Metlakatla", "MeST",
- "Heure avanc\u00E9e de Metlakatla", "MeDT"}},
+ {"America/Metlakatla", PST},
{"America/Mexico_City", CST},
{"America/Miquelon", new String[] {"Heure normale de Saint-Pierre et Miquelon", "PMST",
"Heure avanc\u00e9e de Saint-Pierre et Miquelon", "PMDT"}},
@@ -467,7 +468,7 @@
{"Antarctica/DumontDUrville", new String[] {"Heure de Dumont-d'Urville", "DDUT",
"Heure d'\u00e9t\u00e9 de Dumont-d'Urville", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"Heure de l'Ile Macquarie", "MIST",
- "Heure d'\u00E9t\u00E9 de l'Ile Macquarie", "MIST"}},
+ "Heure d'\u00E9t\u00E9 de l'Ile Macquarie", "MIDT"}},
{"Antarctica/Mawson", new String[] {"Heure de Mawson", "MAWT",
"Heure d'\u00e9t\u00e9 de Mawson", "MAWST"}},
{"Antarctica/McMurdo", NZST},
@@ -505,6 +506,7 @@
{"Asia/Brunei", new String[] {"Heure du Brunei", "BNT",
"Heure d'\u00e9t\u00e9 du Brunei", "BNST"}},
{"Asia/Calcutta", IST},
+ {"Asia/Chita", IRKT},
{"Asia/Choibalsan", new String[] {"Heure de Choibalsan", "CHOT",
"Heure d'\u00e9t\u00e9 de Choibalsan", "CHOST"}},
{"Asia/Chongqing", CTT},
@@ -525,8 +527,7 @@
{"Asia/Hong_Kong", HKT},
{"Asia/Hovd", new String[] {"Heure de Hovd", "HOVT",
"Heure d'\u00e9t\u00e9 de Hovd", "HOVST"}},
- {"Asia/Irkutsk", new String[] {"Heure d'Irkutsk", "IRKT",
- "Heure d'\u00e9t\u00e9 d'Irkutsk", "IRKST"}},
+ {"Asia/Irkutsk", IRKT},
{"Asia/Istanbul", EET},
{"Asia/Jakarta", WIT},
{"Asia/Jayapura", new String[] {"Heure d'Indon\u00e9sie orientale", "WIT",
@@ -536,14 +537,13 @@
{"Asia/Kamchatka", new String[] {"Heure de Petropavlovsk-Kamchatski", "PETT",
"Heure d'\u00e9t\u00e9 de Petropavlovsk-Kamchatski", "PETST"}},
{"Asia/Karachi", PKT},
- {"Asia/Kashgar", CTT},
+ {"Asia/Kashgar", XJT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
{"Asia/Khandyga", new String[] {"Heure de Khandyga", "YAKT",
"Heure d'\u00E9t\u00E9 de Khandyga", "YAKST"}},
{"Asia/Kolkata", IST},
- {"Asia/Krasnoyarsk", new String[] {"Heure de Krasno\u00efarsk", "KRAT",
- "Heure d'\u00e9t\u00e9 de Krasno\u00efarsk", "KRAST"}},
+ {"Asia/Krasnoyarsk", KRAT},
{"Asia/Kuala_Lumpur", MYT},
{"Asia/Kuching", MYT},
{"Asia/Kuwait", ARAST},
@@ -556,7 +556,7 @@
"Heure d'\u00e9t\u00e9 des Philippines", "PHST"}},
{"Asia/Muscat", GST},
{"Asia/Nicosia", EET},
- {"Asia/Novokuznetsk", NOVT},
+ {"Asia/Novokuznetsk", KRAT},
{"Asia/Novosibirsk", NOVT},
{"Asia/Oral", new String[] {"Heure d'Oral", "ORAT",
"Heure d'\u00e9t\u00e9 d'Oral", "ORAST"}},
@@ -577,6 +577,8 @@
{"Asia/Samarkand", UZT},
{"Asia/Seoul", KST},
{"Asia/Singapore", SGT},
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
+ "Srednekolymsk Daylight Time", "SREDT"}},
{"Asia/Taipei", CTT},
{"Asia/Tel_Aviv", ISRAEL},
{"Asia/Tashkent", UZT},
@@ -588,7 +590,7 @@
{"Asia/Ujung_Pandang", CIT},
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
- {"Asia/Urumqi", CTT},
+ {"Asia/Urumqi", XJT},
{"Asia/Ust-Nera", new String[] {"Heure d'Ust-Nera", "VLAT",
"Heure d'\u00E9t\u00E9 d'Ust-Nera", "VLAST"}},
{"Asia/Vientiane", ICT},
@@ -620,8 +622,8 @@
{"Australia/Canberra", EST_NSW},
{"Australia/Currie", EST_NSW},
{"Australia/Darwin", DARWIN},
- {"Australia/Eucla", new String[] {"Heure standard de l'Australie occidentale (centre)", "CWST",
- "Heure d'\u00E9t\u00E9 de l'Australie occidentale (centre)", "CWST"}},
+ {"Australia/Eucla", new String[] {"Heure standard de l'Australie occidentale (centre)", "ACWST",
+ "Heure d'\u00E9t\u00E9 de l'Australie occidentale (centre)", "ACWDT"}},
{"Australia/Hobart", TASMANIA},
{"Australia/LHI", LORD_HOWE},
{"Australia/Lindeman", BRISBANE},
@@ -687,7 +689,7 @@
{"Europe/Isle_of_Man", GMTBST},
{"Europe/Istanbul", EET},
{"Europe/Jersey", GMTBST},
- {"Europe/Kaliningrad", FET},
+ {"Europe/Kaliningrad", EET},
{"Europe/Kiev", EET},
{"Europe/Lisbon", WET},
{"Europe/Ljubljana", CET},
@@ -696,7 +698,7 @@
{"Europe/Madrid", CET},
{"Europe/Malta", CET},
{"Europe/Mariehamn", EET},
- {"Europe/Minsk", FET},
+ {"Europe/Minsk", MSK},
{"Europe/Monaco", CET},
{"Europe/Moscow", MSK},
{"Europe/Nicosia", EET},
@@ -721,8 +723,7 @@
{"Europe/Vatican", CET},
{"Europe/Vienna", CET},
{"Europe/Vilnius", EET},
- {"Europe/Volgograd", new String[] {"Heure de Volgograd", "VOLT",
- "Heure d'\u00e9t\u00e9 de Volgograd", "VOLST"}},
+ {"Europe/Volgograd", MSK},
{"Europe/Warsaw", CET},
{"Europe/Zagreb", CET},
{"Europe/Zaporozhye", EET},
@@ -775,6 +776,8 @@
{"PRT", AST},
{"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST},
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
+ "Bougainville Daylight Time", "BST"}},
{"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER},
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java Mon Jan 05 11:57:27 2015 -0800
@@ -45,8 +45,8 @@
protected final Object[][] getContents() {
String ACT[] = new String[] {"Ora di Acre", "ACT",
"Ora estiva di Acre", "ACST"};
- String ADELAIDE[] = new String[] {"Ora standard centrale (Australia del Sud)", "CST",
- "Ora estiva centrale (Australia del Sud)", "CST"};
+ String ADELAIDE[] = new String[] {"Ora standard centrale (Australia del Sud)", "ACST",
+ "Ora estiva centrale (Australia del Sud)", "ACDT"};
String AGT[] = new String[] {"Ora dell'Argentina", "ART",
"Ora estiva dell'Argentina", "ARST"};
String AKST[] = new String[] {"Ora solare dell'Alaska", "AKST",
@@ -61,10 +61,10 @@
"Ora legale dell'Atlantico occidentale", "ADT"};
String BDT[] = new String[] {"Ora del Bangladesh", "BDT",
"Ora estiva del Bangladesh", "BDST"};
- String BRISBANE[] = new String[] {"Ora standard orientale (Queensland)", "EST",
- "Ora estiva orientale (Queensland)", "EST"};
- String BROKEN_HILL[] = new String[] {"Ora standard centrale (Australia del Sud/Nuovo Galles del Sud)", "CST",
- "Ora estiva centrale (Australia del Sud/Nuovo Galles del Sud)", "CST"};
+ String BRISBANE[] = new String[] {"Ora standard orientale (Queensland)", "AEST",
+ "Ora estiva orientale (Queensland)", "AEDT"};
+ String BROKEN_HILL[] = new String[] {"Ora standard centrale (Australia del Sud/Nuovo Galles del Sud)", "ACST",
+ "Ora estiva centrale (Australia del Sud/Nuovo Galles del Sud)", "ACDT"};
String BRT[] = new String[] {"Ora del Brasile", "BRT",
"Ora estiva del Brasile", "BRST"};
String BTT[] = new String[] {"Ora del Bhutan", "BTT",
@@ -89,8 +89,8 @@
"Ora legale della Cina", "CDT"};
String CUBA[] = new String[] {"Ora solare Cuba", "CST",
"Ora legale Cuba", "CDT"};
- String DARWIN[] = new String[] {"Ora standard centrale (Territori del Nord)", "CST",
- "Ora estiva centrale (Territori del Nord)", "CST"};
+ String DARWIN[] = new String[] {"Ora standard centrale (Territori del Nord)", "ACST",
+ "Ora estiva centrale (Territori del Nord)", "ACDT"};
String DUBLIN[] = new String[] {"Ora media di Greenwich", "GMT",
"Ora estiva irlandese", "IST"};
String EAT[] = new String[] {"Ora dell'Africa orientale", "EAT",
@@ -103,8 +103,8 @@
"Ora estiva della Groenlandia orientale", "EGST"};
String EST[] = new String[] {"Ora solare USA orientale", "EST",
"Ora legale USA orientale", "EDT"};
- String EST_NSW[] = new String[] {"Ora standard dell'Australia orientale (Nuovo Galles del Sud)", "EST",
- "Ora estiva dell'Australia orientale (Nuovo Galles del Sud)", "EST"};
+ String EST_NSW[] = new String[] {"Ora standard dell'Australia orientale (Nuovo Galles del Sud)", "AEST",
+ "Ora estiva dell'Australia orientale (Nuovo Galles del Sud)", "AEDT"};
String FET[] = new String[] {"Ora dei paesi europei pi\u00F9 orientali", "FET",
"Ora estiva dei paesi europei pi\u00F9 orientali", "FEST"};
String GHMT[] = new String[] {"Ora media del Ghana", "GMT",
@@ -133,10 +133,12 @@
"Ora legale dell'India", "IDT"};
String JST[] = new String[] {"Ora solare del Giappone", "JST",
"Ora legale del Giappone", "JDT"};
+ String KRAT[] = new String[] {"Ora di Krasnojarsk", "KRAT",
+ "Ora estiva di Krasnojarsk", "KRAST"};
String KST[] = new String[] {"Ora solare della Corea", "KST",
"Ora legale della Corea", "KDT"};
String LORD_HOWE[] = new String[] {"Ora standard di Lord Howe", "LHST",
- "Ora estiva di Lord Howe", "LHST"};
+ "Ora estiva di Lord Howe", "LHDT"};
String MHT[] = new String[] {"Ora delle Isole Marshall", "MHT",
"Ora estiva delle Isole Marshall", "MHST"};
String MSK[] = new String[] {"Ora standard di Mosca", "MSK",
@@ -165,16 +167,16 @@
"Ora legale della costa occidentale USA", "PDT"};
String SAMOA[] = new String[] {"Ora standard di Samoa", "SST",
"Ora legale di Samoa", "SDT"};
+ String IRKT[] = new String[] {"Ora di Irkutsk", "IRKT",
+ "Ora estiva di Irkutsk", "IRKST"};
String SAST[] = new String[] {"Ora solare del Sudafrica", "SAST",
"Ora estiva del Sudafrica", "SAST"};
String SBT[] = new String[] {"Ora delle Isole Salomone", "SBT",
"Ora estiva delle Isole Salomone", "SBST"};
String SGT[] = new String[] {"Ora di Singapore", "SGT",
"Ora estiva di Singapore", "SGST"};
- String SLST[] = new String[] {"Ora media di Greenwich", "GMT",
- "Ora legale della Sierra Leone", "SLST"};
- String TASMANIA[] = new String[] {"Ora standard orientale (Tasmania)", "EST",
- "Ora estiva orientale (Tasmania)", "EST"};
+ String TASMANIA[] = new String[] {"Ora standard orientale (Tasmania)", "AEST",
+ "Ora estiva orientale (Tasmania)", "AEDT"};
String TMT[] = new String[] {"Ora del Turkmenistan", "TMT",
"Ora estiva del Turkmenistan", "TMST"};
String ULAT[]= new String[] {"Ora di Ulaanbaatar", "ULAT",
@@ -183,22 +185,22 @@
"Tempo universale coordinato", "UTC"};
String UZT[] = new String[] {"Ora dell'Uzbekistan", "UZT",
"Ora estiva dell'Uzbekistan", "UZST"};
- String VICTORIA[] = new String[] {"Ora standard orientale (Victoria)", "EST",
- "Ora estiva orientale (Victoria)", "EST"};
+ String VICTORIA[] = new String[] {"Ora standard orientale (Victoria)", "AEST",
+ "Ora estiva orientale (Victoria)", "AEDT"};
String VLAT[] = new String[] {"Ora di Vladivostok", "VLAT",
"Ora estiva di Vladivostok", "VLAST"};
- String WART[] = new String[] {"Ora dell'Argentina occidentale", "WART",
- "Ora estiva dell'Argentina occidentale", "WARST"};
String WAT[] = new String[] {"Ora dell'Africa occidentale", "WAT",
"Ora estiva dell'Africa occidentale", "WAST"};
String WET[] = new String[] {"Ora dell'Europa occidentale", "WET",
"Ora estiva dell'Europa occidentale", "WEST"};
String WIT[] = new String[] {"Ora dell'Indonesia occidentale", "WIB",
"Ora estiva dell'Indonesia occidentale", "WIST"};
- String WST_AUS[] = new String[] {"Ora standard dell'Australia occidentale", "WST",
- "Ora estiva dell'Australia occidentale", "WST"};
- String WST_SAMOA[] = new String[] {"Ora di Samoa", "WST",
+ String WST_AUS[] = new String[] {"Ora standard dell'Australia occidentale", "AWST",
+ "Ora estiva dell'Australia occidentale", "AWDT"};
+ String WST_SAMOA[] = new String[] {"Ora di Samoa", "WSST",
"Ora estiva di Samoa", "WSDT"};
+ String XJT[] = new String[] {"Ora solare della Cina", "XJT",
+ "Ora legale della Cina", "XJDT"};
String YAKT[] = new String[] {"Ora di Jakutsk", "YAKT",
"Ora estiva di Jakutsk", "YAKST"};
@@ -262,7 +264,7 @@
{"Africa/Djibouti", EAT},
{"Africa/Douala", WAT},
{"Africa/El_Aaiun", WET},
- {"Africa/Freetown", SLST},
+ {"Africa/Freetown", GMT},
{"Africa/Gaborone", CAT},
{"Africa/Harare", CAT},
{"Africa/Johannesburg", SAST},
@@ -358,7 +360,7 @@
{"America/Godthab", new String[] {"Ora della Groenlandia occidentale", "WGT",
"Ora estiva della Groenlandia occidentale", "WGST"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", EST},
+ {"America/Grand_Turk", AST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
@@ -401,8 +403,7 @@
{"America/Mendoza", AGT},
{"America/Menominee", CST},
{"America/Merida", CST},
- {"America/Metlakatla", new String[] {"Ora standard di Metlakatla", "MeST",
- "Ora legale di Metlakatla", "MeDT"}},
+ {"America/Metlakatla", PST},
{"America/Mexico_City", CST},
{"America/Miquelon", new String[] {"Ora solare di Saint-Pierre e Miquelon", "PMST",
"Ora legale di Saint-Pierre e Miquelon", "PMDT"}},
@@ -467,7 +468,7 @@
{"Antarctica/DumontDUrville", new String[] {"Ora di Dumont-d'Urville", "DDUT",
"Ora estiva di Dumont-d'Urville", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"Ora dell'Isola Macquarie", "MIST",
- "Ora estiva dell'Isola Macquarie", "MIST"}},
+ "Ora estiva dell'Isola Macquarie", "MIDT"}},
{"Antarctica/Mawson", new String[] {"Ora di Mawson", "MAWT",
"Ora estiva di Mawson", "MAWST"}},
{"Antarctica/McMurdo", NZST},
@@ -505,6 +506,7 @@
{"Asia/Brunei", new String[] {"Ora del Brunei", "BNT",
"Ora estiva del Brunei", "BNST"}},
{"Asia/Calcutta", IST},
+ {"Asia/Chita", IRKT},
{"Asia/Choibalsan", new String[] {"Ora di Choibalsan", "CHOT",
"Ora estiva di Choibalsan", "CHOST"}},
{"Asia/Chongqing", CTT},
@@ -525,8 +527,7 @@
{"Asia/Hong_Kong", HKT},
{"Asia/Hovd", new String[] {"Ora di Hovd", "HOVT",
"Ora estiva di Hovd", "HOVST"}},
- {"Asia/Irkutsk", new String[] {"Ora di Irkutsk", "IRKT",
- "Ora estiva di Irkutsk", "IRKST"}},
+ {"Asia/Irkutsk", IRKT},
{"Asia/Istanbul", EET},
{"Asia/Jakarta", WIT},
{"Asia/Jayapura", new String[] {"Ora dell'Indonesia orientale", "WIT",
@@ -536,14 +537,13 @@
{"Asia/Kamchatka", new String[] {"Ora di Petropavlovsk-Kamchatski", "PETT",
"Ora estiva di Petropavlovsk-Kamchatski", "PETST"}},
{"Asia/Karachi", PKT},
- {"Asia/Kashgar", CTT},
+ {"Asia/Kashgar", XJT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
{"Asia/Khandyga", new String[] {"Ora di Khandyga", "YAKT",
"Ora estiva di Khandyga", "YAKST"}},
{"Asia/Kolkata", IST},
- {"Asia/Krasnoyarsk", new String[] {"Ora di Krasnojarsk", "KRAT",
- "Ora estiva di Krasnojarsk", "KRAST"}},
+ {"Asia/Krasnoyarsk", KRAT},
{"Asia/Kuala_Lumpur", MYT},
{"Asia/Kuching", MYT},
{"Asia/Kuwait", ARAST},
@@ -556,7 +556,7 @@
"Ora estiva delle Filippine", "PHST"}},
{"Asia/Muscat", GST},
{"Asia/Nicosia", EET},
- {"Asia/Novokuznetsk", NOVT},
+ {"Asia/Novokuznetsk", KRAT},
{"Asia/Novosibirsk", NOVT},
{"Asia/Oral", new String[] {"Ora di Oral", "ORAT",
"Ora estiva di Oral", "ORAST"}},
@@ -577,6 +577,8 @@
{"Asia/Samarkand", UZT},
{"Asia/Seoul", KST},
{"Asia/Singapore", SGT},
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
+ "Srednekolymsk Daylight Time", "SREDT"}},
{"Asia/Taipei", CTT},
{"Asia/Tel_Aviv", ISRAEL},
{"Asia/Tashkent", UZT},
@@ -588,7 +590,7 @@
{"Asia/Ujung_Pandang", CIT},
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
- {"Asia/Urumqi", CTT},
+ {"Asia/Urumqi", XJT},
{"Asia/Ust-Nera", new String[] {"Ora di Ust-Nera", "VLAT",
"Ora estiva di Ust-Nera", "VLAST"}},
{"Asia/Vientiane", ICT},
@@ -620,8 +622,8 @@
{"Australia/Canberra", EST_NSW},
{"Australia/Currie", EST_NSW},
{"Australia/Darwin", DARWIN},
- {"Australia/Eucla", new String[] {"Ora standard Australia centro-occidentale", "CWST",
- "Ora estiva Australia centro-occidentale", "CWST"}},
+ {"Australia/Eucla", new String[] {"Ora standard Australia centro-occidentale", "ACWST",
+ "Ora estiva Australia centro-occidentale", "ACWDT"}},
{"Australia/Hobart", TASMANIA},
{"Australia/LHI", LORD_HOWE},
{"Australia/Lindeman", BRISBANE},
@@ -687,7 +689,7 @@
{"Europe/Isle_of_Man", GMTBST},
{"Europe/Istanbul", EET},
{"Europe/Jersey", GMTBST},
- {"Europe/Kaliningrad", FET},
+ {"Europe/Kaliningrad", EET},
{"Europe/Kiev", EET},
{"Europe/Lisbon", WET},
{"Europe/Ljubljana", CET},
@@ -696,7 +698,7 @@
{"Europe/Madrid", CET},
{"Europe/Malta", CET},
{"Europe/Mariehamn", EET},
- {"Europe/Minsk", FET},
+ {"Europe/Minsk", MSK},
{"Europe/Monaco", CET},
{"Europe/Moscow", MSK},
{"Europe/Nicosia", EET},
@@ -721,8 +723,7 @@
{"Europe/Vatican", CET},
{"Europe/Vienna", CET},
{"Europe/Vilnius", EET},
- {"Europe/Volgograd", new String[] {"Ora di Volgograd", "VOLT",
- "Ora estiva di Volgograd", "VOLST"}},
+ {"Europe/Volgograd", MSK},
{"Europe/Warsaw", CET},
{"Europe/Zagreb", CET},
{"Europe/Zaporozhye", EET},
@@ -775,6 +776,8 @@
{"PRT", AST},
{"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST},
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
+ "Bougainville Daylight Time", "BST"}},
{"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER},
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java Mon Jan 05 11:57:27 2015 -0800
@@ -45,8 +45,8 @@
protected final Object[][] getContents() {
String ACT[] = new String[] {"\u30a2\u30af\u30ec\u6642\u9593", "ACT",
"\u30a2\u30af\u30ec\u590f\u6642\u9593", "ACST"};
- String ADELAIDE[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CST",
- "\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CST"};
+ String ADELAIDE[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACST",
+ "\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACDT"};
String AGT[] = new String[] {"\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "ART",
"\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "ARST"};
String AKST[] = new String[] {"\u30a2\u30e9\u30b9\u30ab\u6a19\u6e96\u6642", "AKST",
@@ -61,10 +61,10 @@
"\u5927\u897f\u6d0b\u590f\u6642\u9593", "ADT"};
String BDT[] = new String[] {"\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5\u6642\u9593", "BDT",
"\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5\u590f\u6642\u9593", "BDST"};
- String BRISBANE[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "EST",
- "\u6771\u90E8\u590F\u6642\u9593(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "EST"};
- String BROKEN_HILL[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "CST",
- "\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "CST"};
+ String BRISBANE[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "AEST",
+ "\u6771\u90E8\u590F\u6642\u9593(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "AEDT"};
+ String BROKEN_HILL[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "ACST",
+ "\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "ACDT"};
String BRT[] = new String[] {"\u30d6\u30e9\u30b8\u30eb\u6642\u9593", "BRT",
"\u30d6\u30e9\u30b8\u30eb\u590f\u6642\u9593", "BRST"};
String BTT[] = new String[] {"\u30d6\u30fc\u30bf\u30f3\u6642\u9593", "BTT",
@@ -89,8 +89,8 @@
"\u4e2d\u56fd\u590f\u6642\u9593", "CDT"};
String CUBA[] = new String[] {"\u30ad\u30e5\u30fc\u30d0\u6a19\u6e96\u6642", "CST",
"\u30ad\u30e5\u30fc\u30d0\u590f\u6642\u9593", "CDT"};
- String DARWIN[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "CST",
- "\u4E2D\u90E8\u590F\u6642\u9593(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "CST"};
+ String DARWIN[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "ACST",
+ "\u4E2D\u90E8\u590F\u6642\u9593(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "ACDT"};
String DUBLIN[] = new String[] {"\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642", "GMT",
"\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9\u590f\u6642\u9593", "IST"};
String EAT[] = new String[] {"\u6771\u30a2\u30d5\u30ea\u30ab\u6642\u9593", "EAT",
@@ -103,8 +103,8 @@
"\u6771\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u590f\u6642\u9593", "EGST"};
String EST[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642", "EST",
"\u6771\u90e8\u590f\u6642\u9593", "EDT"};
- String EST_NSW[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "EST",
- "\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "EST"};
+ String EST_NSW[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "AEST",
+ "\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "AEDT"};
String FET[] = new String[] {"\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593", "FET",
"\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u590F\u6642\u9593", "FEST"};
String GHMT[] = new String[] {"\u30ac\u30fc\u30ca\u6a19\u6e96\u6642", "GMT",
@@ -133,10 +133,12 @@
"\u30a4\u30f3\u30c9\u590f\u6642\u9593", "IDT"};
String JST[] = new String[] {"\u65e5\u672c\u6a19\u6e96\u6642", "JST",
"\u65e5\u672c\u590f\u6642\u9593", "JDT"};
+ String KRAT[] = new String[] {"\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u6642\u9593", "KRAT",
+ "\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u590f\u6642\u9593", "KRAST"};
String KST[] = new String[] {"\u97d3\u56fd\u6a19\u6e96\u6642", "KST",
"\u97d3\u56fd\u590f\u6642\u9593", "KDT"};
String LORD_HOWE[] = new String[] {"\u30ed\u30fc\u30c9\u30cf\u30a6\u5cf6\u6a19\u6e96\u6642", "LHST",
- "\u30ed\u30fc\u30c9\u30cf\u30a6\u5cf6\u590f\u6642\u9593", "LHST"};
+ "\u30ed\u30fc\u30c9\u30cf\u30a6\u5cf6\u590f\u6642\u9593", "LHDT"};
String MHT[] = new String[] {"\u30de\u30fc\u30b7\u30e3\u30eb\u5cf6\u6642\u9593", "MHT",
"\u30de\u30fc\u30b7\u30e3\u30eb\u5cf6\u590f\u6642\u9593", "MHST"};
String MSK[] = new String[] {"\u30e2\u30b9\u30af\u30ef\u6a19\u6e96\u6642", "MSK",
@@ -165,16 +167,16 @@
"\u592a\u5e73\u6d0b\u590f\u6642\u9593", "PDT"};
String SAMOA[] = new String[] {"\u30b5\u30e2\u30a2\u6a19\u6e96\u6642", "SST",
"\u30b5\u30e2\u30a2\u590f\u6642\u9593", "SDT"};
+ String IRKT[] = new String[] {"\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u6642\u9593", "IRKT",
+ "\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "IRKST"};
String SAST[] = new String[] {"\u5357\u30a2\u30d5\u30ea\u30ab\u6a19\u6e96\u6642", "SAST",
"\u5357\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "SAST"};
String SBT[] = new String[] {"\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6\u6642\u9593", "SBT",
"\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6\u590f\u6642\u9593", "SBST"};
String SGT[] = new String[] {"\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb\u6642\u9593", "SGT",
"\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb\u590f\u6642\u9593", "SGST"};
- String SLST[] = new String[] {"\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642", "GMT",
- "\u30b7\u30a8\u30e9\u30ec\u30aa\u30cd\u590f\u6642\u9593", "SLST"};
- String TASMANIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2)", "EST",
- "\u6771\u90E8\u590F\u6642\u9593(\u30BF\u30B9\u30DE\u30CB\u30A2)", "EST"};
+ String TASMANIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2)", "AEST",
+ "\u6771\u90E8\u590F\u6642\u9593(\u30BF\u30B9\u30DE\u30CB\u30A2)", "AEDT"};
String TMT[] = new String[] {"\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u6642\u9593", "TMT",
"\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u590f\u6642\u9593", "TMST"};
String ULAT[]= new String[] {"\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u6642\u9593", "ULAT",
@@ -183,22 +185,22 @@
"\u5354\u5b9a\u4e16\u754c\u6642", "UTC"};
String UZT[] = new String[] {"\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "UZT",
"\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "UZST"};
- String VICTORIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2)", "EST",
- "\u6771\u90E8\u590F\u6642\u9593(\u30D3\u30AF\u30C8\u30EA\u30A2)", "EST"};
+ String VICTORIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2)", "AEST",
+ "\u6771\u90E8\u590F\u6642\u9593(\u30D3\u30AF\u30C8\u30EA\u30A2)", "AEDT"};
String VLAT[] = new String[] {"\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u6642\u9593", "VLAT",
"\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u590f\u6642\u9593", "VLAST"};
- String WART[] = new String[] {"\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "WART",
- "\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "WARST"};
String WAT[] = new String[] {"\u897f\u30a2\u30d5\u30ea\u30ab\u6642\u9593", "WAT",
"\u897f\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "WAST"};
String WET[] = new String[] {"\u897f\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593", "WET",
"\u897f\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "WEST"};
String WIT[] = new String[] {"\u897f\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "WIB",
"\u897f\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "WIST"};
- String WST_AUS[] = new String[] {"\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "WST",
- "\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "WST"};
- String WST_SAMOA[] = new String[] {"\u897f\u30b5\u30e2\u30a2\u6642\u9593", "WST",
+ String WST_AUS[] = new String[] {"\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "AWST",
+ "\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "AWDT"};
+ String WST_SAMOA[] = new String[] {"\u897f\u30b5\u30e2\u30a2\u6642\u9593", "WSST",
"\u897f\u30b5\u30e2\u30a2\u590f\u6642\u9593", "WSDT"};
+ String XJT[] = new String[] {"\u4e2d\u56fd\u6a19\u6e96\u6642", "XJT",
+ "\u4e2d\u56fd\u590f\u6642\u9593", "XJDT"};
String YAKT[] = new String[] {"\u30e4\u30af\u30fc\u30c4\u30af\u6642\u9593", "YAKT",
"\u30e4\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "YAKST"};
@@ -262,7 +264,7 @@
{"Africa/Djibouti", EAT},
{"Africa/Douala", WAT},
{"Africa/El_Aaiun", WET},
- {"Africa/Freetown", SLST},
+ {"Africa/Freetown", GMT},
{"Africa/Gaborone", CAT},
{"Africa/Harare", CAT},
{"Africa/Johannesburg", SAST},
@@ -358,7 +360,7 @@
{"America/Godthab", new String[] {"\u897f\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u6642\u9593", "WGT",
"\u897f\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u590f\u6642\u9593", "WGST"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", EST},
+ {"America/Grand_Turk", AST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
@@ -401,8 +403,7 @@
{"America/Mendoza", AGT},
{"America/Menominee", CST},
{"America/Merida", CST},
- {"America/Metlakatla", new String[] {"\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u6A19\u6E96\u6642\u9593", "MeST",
- "\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u590F\u6642\u9593", "MeDT"}},
+ {"America/Metlakatla", PST},
{"America/Mexico_City", CST},
{"America/Miquelon", new String[] {"\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u6a19\u6e96\u6642", "PMST",
"\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u590f\u6642\u9593", "PMDT"}},
@@ -467,7 +468,7 @@
{"Antarctica/DumontDUrville", new String[] {"\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u6642\u9593", "DDUT",
"\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u590f\u6642\u9593", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u6642\u9593", "MIST",
- "\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u590F\u6642\u9593", "MIST"}},
+ "\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u590F\u6642\u9593", "MIDT"}},
{"Antarctica/Mawson", new String[] {"\u30e2\u30fc\u30bd\u30f3\u6642\u9593", "MAWT",
"\u30e2\u30fc\u30bd\u30f3\u590f\u6642\u9593", "MAWST"}},
{"Antarctica/McMurdo", NZST},
@@ -505,6 +506,7 @@
{"Asia/Brunei", new String[] {"\u30d6\u30eb\u30cd\u30a4\u6642\u9593", "BNT",
"\u30d6\u30eb\u30cd\u30a4\u590f\u6642\u9593", "BNST"}},
{"Asia/Calcutta", IST},
+ {"Asia/Chita", IRKT},
{"Asia/Choibalsan", new String[] {"\u30c1\u30e7\u30a4\u30d0\u30eb\u30b5\u30f3\u6642\u9593", "CHOT",
"\u30c1\u30e7\u30a4\u30d0\u30eb\u30b5\u30f3\u590f\u6642\u9593", "CHOST"}},
{"Asia/Chongqing", CTT},
@@ -525,8 +527,7 @@
{"Asia/Hong_Kong", HKT},
{"Asia/Hovd", new String[] {"\u30db\u30d6\u30c9\u6642\u9593", "HOVT",
"\u30db\u30d6\u30c9\u590f\u6642\u9593", "HOVST"}},
- {"Asia/Irkutsk", new String[] {"\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u6642\u9593", "IRKT",
- "\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "IRKST"}},
+ {"Asia/Irkutsk", IRKT},
{"Asia/Istanbul", EET},
{"Asia/Jakarta", WIT},
{"Asia/Jayapura", new String[] {"\u6771\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "WIT",
@@ -536,14 +537,13 @@
{"Asia/Kamchatka", new String[] {"\u30da\u30c8\u30ed\u30d1\u30d6\u30ed\u30d5\u30b9\u30af\u30ab\u30e0\u30c1\u30e3\u30c4\u30ad\u30fc\u6642\u9593", "PETT",
"\u30da\u30c8\u30ed\u30d1\u30d6\u30ed\u30d5\u30b9\u30af\u30ab\u30e0\u30c1\u30e3\u30c4\u30ad\u30fc\u590f\u6642\u9593", "PETST"}},
{"Asia/Karachi", PKT},
- {"Asia/Kashgar", CTT},
+ {"Asia/Kashgar", XJT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
{"Asia/Khandyga", new String[] {"\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u6642\u9593", "YAKT",
"\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u590F\u6642\u9593", "YAKST"}},
{"Asia/Kolkata", IST},
- {"Asia/Krasnoyarsk", new String[] {"\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u6642\u9593", "KRAT",
- "\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u590f\u6642\u9593", "KRAST"}},
+ {"Asia/Krasnoyarsk", KRAT},
{"Asia/Kuala_Lumpur", MYT},
{"Asia/Kuching", MYT},
{"Asia/Kuwait", ARAST},
@@ -556,7 +556,7 @@
"\u30d5\u30a3\u30ea\u30d4\u30f3\u590f\u6642\u9593", "PHST"}},
{"Asia/Muscat", GST},
{"Asia/Nicosia", EET},
- {"Asia/Novokuznetsk", NOVT},
+ {"Asia/Novokuznetsk", KRAT},
{"Asia/Novosibirsk", NOVT},
{"Asia/Oral", new String[] {"\u30aa\u30e9\u30eb\u6642\u9593", "ORAT",
"\u30aa\u30e9\u30eb\u590f\u6642\u9593", "ORAST"}},
@@ -577,6 +577,8 @@
{"Asia/Samarkand", UZT},
{"Asia/Seoul", KST},
{"Asia/Singapore", SGT},
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
+ "Srednekolymsk Daylight Time", "SREDT"}},
{"Asia/Taipei", CTT},
{"Asia/Tel_Aviv", ISRAEL},
{"Asia/Tashkent", UZT},
@@ -588,7 +590,7 @@
{"Asia/Ujung_Pandang", CIT},
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
- {"Asia/Urumqi", CTT},
+ {"Asia/Urumqi", XJT},
{"Asia/Ust-Nera", new String[] {"\u30A6\u30B9\u30C1\u30CD\u30E9\u6642\u9593", "VLAT",
"\u30A6\u30B9\u30C1\u30CD\u30E9\u590F\u6642\u9593", "VLAST"}},
{"Asia/Vientiane", ICT},
@@ -620,8 +622,8 @@
{"Australia/Canberra", EST_NSW},
{"Australia/Currie", EST_NSW},
{"Australia/Darwin", DARWIN},
- {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CWST",
- "\u4E2D\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CWST"}},
+ {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACWST",
+ "\u4E2D\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACWDT"}},
{"Australia/Hobart", TASMANIA},
{"Australia/LHI", LORD_HOWE},
{"Australia/Lindeman", BRISBANE},
@@ -687,7 +689,7 @@
{"Europe/Isle_of_Man", GMTBST},
{"Europe/Istanbul", EET},
{"Europe/Jersey", GMTBST},
- {"Europe/Kaliningrad", FET},
+ {"Europe/Kaliningrad", EET},
{"Europe/Kiev", EET},
{"Europe/Lisbon", WET},
{"Europe/Ljubljana", CET},
@@ -696,7 +698,7 @@
{"Europe/Madrid", CET},
{"Europe/Malta", CET},
{"Europe/Mariehamn", EET},
- {"Europe/Minsk", FET},
+ {"Europe/Minsk", MSK},
{"Europe/Monaco", CET},
{"Europe/Moscow", MSK},
{"Europe/Nicosia", EET},
@@ -721,8 +723,7 @@
{"Europe/Vatican", CET},
{"Europe/Vienna", CET},
{"Europe/Vilnius", EET},
- {"Europe/Volgograd", new String[] {"\u30dc\u30eb\u30b4\u30b0\u30e9\u30fc\u30c9\u6642\u9593", "VOLT",
- "\u30dc\u30eb\u30b4\u30b0\u30e9\u30fc\u30c9\u590f\u6642\u9593", "VOLST"}},
+ {"Europe/Volgograd", MSK},
{"Europe/Warsaw", CET},
{"Europe/Zagreb", CET},
{"Europe/Zaporozhye", EET},
@@ -775,6 +776,8 @@
{"PRT", AST},
{"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST},
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
+ "Bougainville Daylight Time", "BST"}},
{"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER},
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java Mon Jan 05 11:57:27 2015 -0800
@@ -45,8 +45,8 @@
protected final Object[][] getContents() {
String ACT[] = new String[] {"\uc5d0\uc774\ucee4 \uc2dc\uac04", "ACT",
"\uc5d0\uc774\ucee4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ACST"};
- String ADELAIDE[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CST",
- "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CST"};
+ String ADELAIDE[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACST",
+ "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACDT"};
String AGT[] = new String[] {"\uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "ART",
"\uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ARST"};
String AKST[] = new String[] {"\uc54c\ub798\uc2a4\uce74 \ud45c\uc900\uc2dc", "AKST",
@@ -61,10 +61,10 @@
"\ub300\uc11c\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ADT"};
String BDT[] = new String[] {"\ubc29\uae00\ub77c\ub370\uc2dc \uc2dc\uac04", "BDT",
"\ubc29\uae00\ub77c\ub370\uc2dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BDST"};
- String BRISBANE[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC)", "EST",
- "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD038\uC990\uB79C\uB4DC)", "EST"};
- String BROKEN_HILL[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "CST",
- "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "CST"};
+ String BRISBANE[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC)", "AEST",
+ "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD038\uC990\uB79C\uB4DC)", "AEDT"};
+ String BROKEN_HILL[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "ACST",
+ "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "ACDT"};
String BRT[] = new String[] {"\ube0c\ub77c\uc9c8\ub9ac\uc544 \uc2dc\uac04", "BRT",
"\ube0c\ub77c\uc9c8\ub9ac\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BRST"};
String BTT[] = new String[] {"\ubd80\ud0c4 \uc2dc\uac04", "BTT",
@@ -89,8 +89,8 @@
"\uc911\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"};
String CUBA[] = new String[] {"\ucfe0\ubc14 \ud45c\uc900\uc2dc", "CST",
"\ucfe0\ubc14 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"};
- String DARWIN[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED)", "CST",
- "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBD81\uBD80 \uC9C0\uC5ED)", "CST"};
+ String DARWIN[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED)", "ACST",
+ "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBD81\uBD80 \uC9C0\uC5ED)", "ACDT"};
String DUBLIN[] = new String[] {"\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc", "GMT",
"\uc544\uc77c\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IST"};
String EAT[] = new String[] {"\ub3d9\ubd80 \uc544\ud504\ub9ac\uce74 \uc2dc\uac04", "EAT",
@@ -103,8 +103,8 @@
"\ub3d9\ubd80 \uadf8\ub9b0\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EGST"};
String EST[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc", "EST",
"\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EDT"};
- String EST_NSW[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "EST",
- "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "EST"};
+ String EST_NSW[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "AEST",
+ "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "AEDT"};
String FET[] = new String[] {"\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC", "FET",
"\uADF9\uB3D9 \uC720\uB7FD \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "FEST"};
String GHMT[] = new String[] {"\uac00\ub098 \ud45c\uc900\uc2dc", "GMT",
@@ -133,10 +133,12 @@
"\uc778\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IDT"};
String JST[] = new String[] {"\uc77c\ubcf8 \ud45c\uc900\uc2dc", "JST",
"\uc77c\ubcf8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "JDT"};
+ String KRAT[] = new String[] {"\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc2dc\uac04", "KRAT",
+ "\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KRAST"};
String KST[] = new String[] {"\ud55c\uad6d \ud45c\uc900\uc2dc", "KST",
"\ud55c\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KDT"};
String LORD_HOWE[] = new String[] {"\ub85c\ub4dc \ud558\uc6b0 \ud45c\uc900\uc2dc", "LHST",
- "\ub85c\ub4dc \ud558\uc6b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "LHST"};
+ "\ub85c\ub4dc \ud558\uc6b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "LHDT"};
String MHT[] = new String[] {"\ub9c8\uc15c\uc81c\ub3c4 \uc2dc\uac04", "MHT",
"\ub9c8\uc15c\uc81c\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MHST"};
String MSK[] = new String[] {"\ubaa8\uc2a4\ud06c\ubc14 \ud45c\uc900\uc2dc", "MSK",
@@ -165,16 +167,16 @@
"\ud0dc\ud3c9\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"};
String SAMOA[] = new String[] {"\uc0ac\ubaa8\uc544 \ud45c\uc900\uc2dc", "SST",
"\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SDT"};
+ String IRKT[] = new String[] {"\uc774\ub974\ucfe0\uce20\ud06c \uc2dc\uac04", "IRKT",
+ "\uc774\ub974\ucfe0\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IRKST"};
String SAST[] = new String[] {"\ub0a8\uc544\ud504\ub9ac\uce74 \ud45c\uc900\uc2dc", "SAST",
"\ub0a8\uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SAST"};
String SBT[] = new String[] {"\uc194\ub85c\ubaac \uad70\ub3c4 \uc2dc\uac04", "SBT",
"\uc194\ub85c\ubaac \uad70\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SBST"};
String SGT[] = new String[] {"\uc2f1\uac00\ud3ec\ub974 \uc2dc\uac04", "SGT",
"\uc2f1\uac00\ud3ec\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SGST"};
- String SLST[] = new String[] {"\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc", "GMT",
- "\uc2dc\uc5d0\ub77c\ub9ac\uc628 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SLST"};
- String TASMANIA[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "EST",
- "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "EST"};
+ String TASMANIA[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "AEST",
+ "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "AEDT"};
String TMT[] = new String[] {"\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc2dc\uac04", "TMT",
"\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TMST"};
String ULAT[]= new String[] {"\uc6b8\ub780\ubc14\ud0c0\ub974 \uc2dc\uac04", "ULAT",
@@ -183,22 +185,22 @@
"\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC"};
String UZT[] = new String[] {"\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "UZT",
"\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "UZST"};
- String VICTORIA[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544)", "EST",
- "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBE45\uD1A0\uB9AC\uC544)", "EST"};
+ String VICTORIA[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544)", "AEST",
+ "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBE45\uD1A0\uB9AC\uC544)", "AEDT"};
String VLAT[] = new String[] {"\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc2dc\uac04", "VLAT",
"\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VLAST"};
- String WART[] = new String[] {"\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "WART",
- "\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WARST"};
String WAT[] = new String[] {"\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc2dc\uac04", "WAT",
"\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WAST"};
String WET[] = new String[] {"\uc11c\uc720\ub7fd \uc2dc\uac04", "WET",
"\uc11c\uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WEST"};
String WIT[] = new String[] {"\uc11c\uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "WIB",
"\uc11c\uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WIST"};
- String WST_AUS[] = new String[] {"\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "WST",
- "\uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "WST"};
- String WST_SAMOA[] = new String[] {"\uc11c\uc0ac\ubaa8\uc544 \uc2dc\uac04", "WST",
+ String WST_AUS[] = new String[] {"\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "AWST",
+ "\uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "AWDT"};
+ String WST_SAMOA[] = new String[] {"\uc11c\uc0ac\ubaa8\uc544 \uc2dc\uac04", "WSST",
"\uc11c\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WSDT"};
+ String XJT[] = new String[] {"\uc911\uad6d \ud45c\uc900\uc2dc", "XJT",
+ "\uc911\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "XJDT"};
String YAKT[] = new String[] {"\uc57c\uce20\ud06c \uc2dc\uac04", "YAKT",
"\uc57c\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YAKST"};
@@ -262,7 +264,7 @@
{"Africa/Djibouti", EAT},
{"Africa/Douala", WAT},
{"Africa/El_Aaiun", WET},
- {"Africa/Freetown", SLST},
+ {"Africa/Freetown", GMT},
{"Africa/Gaborone", CAT},
{"Africa/Harare", CAT},
{"Africa/Johannesburg", SAST},
@@ -358,7 +360,7 @@
{"America/Godthab", new String[] {"\uc11c\ubd80 \uadf8\ub9b0\ub79c\ub4dc \uc2dc\uac04", "WGT",
"\uc11c\ubd80 \uadf8\ub9b0\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WGST"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", EST},
+ {"America/Grand_Turk", AST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
@@ -401,8 +403,7 @@
{"America/Mendoza", AGT},
{"America/Menominee", CST},
{"America/Merida", CST},
- {"America/Metlakatla", new String[] {"\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uD45C\uC900\uC2DC", "MeST",
- "\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "MeDT"}},
+ {"America/Metlakatla", PST},
{"America/Mexico_City", CST},
{"America/Miquelon", new String[] {"\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \ud45c\uc900\uc2dc", "PMST",
"\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PMDT"}},
@@ -467,7 +468,7 @@
{"Antarctica/DumontDUrville", new String[] {"\ub4a4\ubabd \ub4a4\ub974\ube4c \uc2dc\uac04", "DDUT",
"\ub4a4\ubabd \ub4a4\ub974\ube4c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"\uB9E4\uCF70\uB9AC \uC12C \uD45C\uC900\uC2DC", "MIST",
- "\uB9E4\uCF70\uB9AC \uC12C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "MIST"}},
+ "\uB9E4\uCF70\uB9AC \uC12C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "MIDT"}},
{"Antarctica/Mawson", new String[] {"\ubaa8\uc2a8 \uc2dc\uac04", "MAWT",
"\ubaa8\uc2a8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MAWST"}},
{"Antarctica/McMurdo", NZST},
@@ -505,6 +506,7 @@
{"Asia/Brunei", new String[] {"\ube0c\ub8e8\ub098\uc774 \uc2dc\uac04", "BNT",
"\ube0c\ub8e8\ub098\uc774 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BNST"}},
{"Asia/Calcutta", IST},
+ {"Asia/Chita", IRKT},
{"Asia/Choibalsan", new String[] {"Choibalsan \uc2dc\uac04", "CHOT",
"Choibalsan \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CHOST"}},
{"Asia/Chongqing", CTT},
@@ -525,8 +527,7 @@
{"Asia/Hong_Kong", HKT},
{"Asia/Hovd", new String[] {"Hovd \uc2dc\uac04", "HOVT",
"Hovd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "HOVST"}},
- {"Asia/Irkutsk", new String[] {"\uc774\ub974\ucfe0\uce20\ud06c \uc2dc\uac04", "IRKT",
- "\uc774\ub974\ucfe0\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IRKST"}},
+ {"Asia/Irkutsk", IRKT},
{"Asia/Istanbul", EET},
{"Asia/Jakarta", WIT},
{"Asia/Jayapura", new String[] {"\ub3d9\ubd80 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "WIT",
@@ -536,14 +537,13 @@
{"Asia/Kamchatka", new String[] {"\ud398\ud2b8\ub85c\ud30c\ube14\ub85c\ud504\uc2a4\ud06c-\uce84\ucc28\uce20\ud0a4 \uc2dc\uac04", "PETT",
"\ud398\ud2b8\ub85c\ud30c\ube14\ub85c\ud504\uc2a4\ud06c-\uce84\ucc28\uce20\ud0a4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PETST"}},
{"Asia/Karachi", PKT},
- {"Asia/Kashgar", CTT},
+ {"Asia/Kashgar", XJT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
{"Asia/Khandyga", new String[] {"\uD55C\uB514\uAC00 \uD45C\uC900\uC2DC", "YAKT",
"\uD55C\uB514\uAC00 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "YAKST"}},
{"Asia/Kolkata", IST},
- {"Asia/Krasnoyarsk", new String[] {"\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc2dc\uac04", "KRAT",
- "\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KRAST"}},
+ {"Asia/Krasnoyarsk", KRAT},
{"Asia/Kuala_Lumpur", MYT},
{"Asia/Kuching", MYT},
{"Asia/Kuwait", ARAST},
@@ -556,7 +556,7 @@
"\ud544\ub9ac\ud540 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PHST"}},
{"Asia/Muscat", GST},
{"Asia/Nicosia", EET},
- {"Asia/Novokuznetsk", NOVT},
+ {"Asia/Novokuznetsk", KRAT},
{"Asia/Novosibirsk", NOVT},
{"Asia/Oral", new String[] {"Oral \ud45c\uc900\uc2dc", "ORAT",
"Oral \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ORAST"}},
@@ -577,6 +577,8 @@
{"Asia/Samarkand", UZT},
{"Asia/Seoul", KST},
{"Asia/Singapore", SGT},
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
+ "Srednekolymsk Daylight Time", "SREDT"}},
{"Asia/Taipei", CTT},
{"Asia/Tel_Aviv", ISRAEL},
{"Asia/Tashkent", UZT},
@@ -588,7 +590,7 @@
{"Asia/Ujung_Pandang", CIT},
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
- {"Asia/Urumqi", CTT},
+ {"Asia/Urumqi", XJT},
{"Asia/Ust-Nera", new String[] {"\uC6B0\uC2A4\uD2F0\uB124\uB77C \uD45C\uC900\uC2DC", "VLAT",
"\uC6B0\uC2A4\uD2F0\uB124\uB77C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "VLAST"}},
{"Asia/Vientiane", ICT},
@@ -620,8 +622,8 @@
{"Australia/Canberra", EST_NSW},
{"Australia/Currie", EST_NSW},
{"Australia/Darwin", DARWIN},
- {"Australia/Eucla", new String[] {"\uC911\uC559 \uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CWST",
- "\uC911\uC559 \uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CWST"}},
+ {"Australia/Eucla", new String[] {"\uC911\uC559 \uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACWST",
+ "\uC911\uC559 \uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACWDT"}},
{"Australia/Hobart", TASMANIA},
{"Australia/LHI", LORD_HOWE},
{"Australia/Lindeman", BRISBANE},
@@ -687,7 +689,7 @@
{"Europe/Isle_of_Man", GMTBST},
{"Europe/Istanbul", EET},
{"Europe/Jersey", GMTBST},
- {"Europe/Kaliningrad", FET},
+ {"Europe/Kaliningrad", EET},
{"Europe/Kiev", EET},
{"Europe/Lisbon", WET},
{"Europe/Ljubljana", CET},
@@ -696,7 +698,7 @@
{"Europe/Madrid", CET},
{"Europe/Malta", CET},
{"Europe/Mariehamn", EET},
- {"Europe/Minsk", FET},
+ {"Europe/Minsk", MSK},
{"Europe/Monaco", CET},
{"Europe/Moscow", MSK},
{"Europe/Nicosia", EET},
@@ -721,8 +723,7 @@
{"Europe/Vatican", CET},
{"Europe/Vienna", CET},
{"Europe/Vilnius", EET},
- {"Europe/Volgograd", new String[] {"\ubcfc\uace0\uadf8\ub77c\ub4dc \uc2dc\uac04", "VOLT",
- "\ubcfc\uace0\uadf8\ub77c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VOLST"}},
+ {"Europe/Volgograd", MSK},
{"Europe/Warsaw", CET},
{"Europe/Zagreb", CET},
{"Europe/Zaporozhye", EET},
@@ -775,6 +776,8 @@
{"PRT", AST},
{"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST},
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
+ "Bougainville Daylight Time", "BST"}},
{"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER},
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java Mon Jan 05 11:57:27 2015 -0800
@@ -45,8 +45,8 @@
protected final Object[][] getContents() {
String ACT[] = new String[] {"Fuso hor\u00e1rio do Acre", "ACT",
"Fuso hor\u00e1rio de ver\u00e3o do Acre", "ACST"};
- String ADELAIDE[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul)", "CST",
- "Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul)", "CST"};
+ String ADELAIDE[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul)", "ACST",
+ "Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul)", "ACDT"};
String AGT[] = new String[] {"Fuso hor\u00e1rio da Argentina", "ART",
"Fuso hor\u00e1rio de ver\u00e3o da Argentina", "ARST"};
String AKST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Alaska", "AKST",
@@ -61,10 +61,10 @@
"Hor\u00e1rio de luz natural do Atl\u00e2ntico", "ADT"};
String BDT[] = new String[] {"Fuso hor\u00e1rio de Bangladesh", "BDT",
"Fuso hor\u00e1rio de ver\u00e3o de Bangladesh", "BDST"};
- String BRISBANE[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Queensland)", "EST",
- "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Queensland)", "EST"};
- String BROKEN_HILL[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "CST",
- "Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "CST"};
+ String BRISBANE[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Queensland)", "AEST",
+ "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Queensland)", "AEDT"};
+ String BROKEN_HILL[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "ACST",
+ "Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "ACDT"};
String BRT[] = new String[] {"Fuso hor\u00e1rio de Bras\u00edlia", "BRT",
"Fuso hor\u00e1rio de ver\u00e3o de Bras\u00edlia", "BRST"};
String BTT[] = new String[] {"Fuso hor\u00e1rio de But\u00e3o", "BTT",
@@ -87,8 +87,8 @@
"Hor\u00e1rio de luz natural da China", "CDT"};
String CUBA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Cuba", "CST",
"Hor\u00e1rio de luz natural de Cuba", "CDT"};
- String DARWIN[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Territ\u00F3rio do Norte)", "CST",
- "Fuso Hor\u00E1rio de Ver\u00E3o Central (Territ\u00F3rio do Norte)", "CST"};
+ String DARWIN[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Territ\u00F3rio do Norte)", "ACST",
+ "Fuso Hor\u00E1rio de Ver\u00E3o Central (Territ\u00F3rio do Norte)", "ACDT"};
String DUBLIN[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT",
"Fuso hor\u00e1rio de ver\u00e3o da Irlanda", "IST"};
String EAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Oriental", "EAT",
@@ -101,8 +101,8 @@
"Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Oriental", "EGST"};
String EST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental", "EST",
"Hor\u00e1rio de luz natural oriental", "EDT"};
- String EST_NSW[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul)", "EST",
- "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul)", "EST"};
+ String EST_NSW[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul)", "AEST",
+ "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul)", "AEDT"};
String FET[] = new String[] {"Hor\u00E1rio do Extremo Leste Europeu (FET)", "FET",
"Fuso Hor\u00E1rio de Ver\u00E3o do Extremo Leste Europeu", "FEST"};
String GHMT[] = new String[] {"Fuso hor\u00e1rio do meridiano de Gana", "GMT",
@@ -131,10 +131,12 @@
"Hor\u00e1rio de luz natural da \u00cdndia", "IDT"};
String JST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Jap\u00e3o", "JST",
"Hor\u00e1rio de luz natural do Jap\u00e3o", "JDT"};
+ String KRAT[] = new String[] {"Fuso hor\u00e1rio de Krasnoyarsk", "KRAT",
+ "Fuso hor\u00e1rio de ver\u00e3o de Krasnoyarsk", "KRAST"};
String KST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Coreia", "KST",
"Hor\u00e1rio de luz natural da Coreia", "KDT"};
String LORD_HOWE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Lord Howe", "LHST",
- "Fuso hor\u00e1rio de ver\u00e3o de Lord Howe", "LHST"};
+ "Fuso hor\u00e1rio de ver\u00e3o de Lord Howe", "LHDT"};
String MHT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Marshall", "MHT",
"Fuso hor\u00e1rio de ver\u00e3o das Ilhas Marshall", "MHST"};
String MSK[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Moscou", "MSK",
@@ -163,16 +165,16 @@
"Hor\u00e1rio de luz natural do Pac\u00edfico", "PDT"};
String SAMOA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Samoa", "SST",
"Hor\u00e1rio de luz natural de Samoa", "SDT"};
+ String IRKT[] = new String[] {"Fuso hor\u00e1rio de Irkutsk", "IRKT",
+ "Fuso hor\u00e1rio de ver\u00e3o de Irkutsk", "IRKST"};
String SAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da \u00c1frica do Sul", "SAST",
"Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica do Sul", "SAST"};
String SBT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Salom\u00e3o", "SBT",
"Fuso hor\u00e1rio de ver\u00e3o das Ilhas Salom\u00e3o", "SBST"};
String SGT[] = new String[] {"Fuso hor\u00e1rio de Cingapura", "SGT",
"Fuso hor\u00e1rio de ver\u00e1 de Cingapura", "SGST"};
- String SLST[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT",
- "Fuso hor\u00e1rio de ver\u00e3o de Serra Leoa", "SLST"};
- String TASMANIA[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Tasm\u00E2nia)", "EST",
- "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Tasm\u00E2nia)", "EST"};
+ String TASMANIA[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Tasm\u00E2nia)", "AEST",
+ "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Tasm\u00E2nia)", "AEDT"};
String TMT[] = new String[] {"Fuso hor\u00e1rio do Turcomenist\u00e3o", "TMT",
"Fuso hor\u00e1rio de ver\u00e3o do Turcomenist\u00e3o", "TMST"};
String TRUT[] = new String[] {"Fuso Hor\u00E1rio de Chuuk", "CHUT",
@@ -183,22 +185,22 @@
"Tempo universal coordenado", "UTC"};
String UZT[] = new String[] {"Fuso hor\u00e1rio do Uzbequist\u00e3o", "UZT",
"Fuso hor\u00e1rio de ver\u00e3o do Uzbequist\u00e3o", "UZST"};
- String VICTORIA[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Victoria)", "EST",
- "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Victoria)", "EST"};
+ String VICTORIA[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Victoria)", "AEST",
+ "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Victoria)", "AEDT"};
String VLAT[] = new String[] {"Fuso hor\u00e1rio de Vladivostok", "VLAT",
"Fuso hor\u00e1rio de ver\u00e3o de Vladivostok", "VLAST"};
- String WART[] = new String[] {"Fuso hor\u00e1rio da Argentina Ocidental", "WART",
- "Fuso hor\u00e1rio de ver\u00e3o da Argentina Ocidental", "WARST"};
String WAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Ocidental", "WAT",
"Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica Ocidental", "WAST"};
String WET[] = new String[] {"Fuso hor\u00e1rio da Europa Ocidental", "WET",
"Fuso hor\u00e1rio de ver\u00e3o da Europa Ocidental", "WEST"};
String WIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Ocidental", "WIB",
"Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Ocidental", "WIST"};
- String WST_AUS[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Ocidental (Austr\u00E1lia)", "WST",
- "Fuso Hor\u00E1rio de Ver\u00E3o Ocidental (Austr\u00E1lia)", "WST"};
- String WST_SAMOA[] = new String[] {"Fuso hor\u00e1rio de Samoa Ocidental", "WST",
+ String WST_AUS[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Ocidental (Austr\u00E1lia)", "AWST",
+ "Fuso Hor\u00E1rio de Ver\u00E3o Ocidental (Austr\u00E1lia)", "AWDT"};
+ String WST_SAMOA[] = new String[] {"Fuso hor\u00e1rio de Samoa Ocidental", "WSST",
"Fuso hor\u00e1rio de ver\u00e3o de Samoa Ocidental", "WSDT"};
+ String XJT[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da China", "XJT",
+ "Hor\u00e1rio de luz natural da China", "XJDT"};
String YAKT[] = new String[] {"Fuso hor\u00e1rio de Yakutsk", "YAKT",
"Fuso hor\u00e1rio de ver\u00e3o de Yakutsk", "YAKST"};
@@ -262,7 +264,7 @@
{"Africa/Djibouti", EAT},
{"Africa/Douala", WAT},
{"Africa/El_Aaiun", WET},
- {"Africa/Freetown", SLST},
+ {"Africa/Freetown", GMT},
{"Africa/Gaborone", CAT},
{"Africa/Harare", CAT},
{"Africa/Johannesburg", SAST},
@@ -358,7 +360,7 @@
{"America/Godthab", new String[] {"Fuso hor\u00e1rio da Groenl\u00e2ndia Ocidental", "WGT",
"Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Ocidental", "WGST"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", EST},
+ {"America/Grand_Turk", AST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
@@ -401,8 +403,7 @@
{"America/Mendoza", AGT},
{"America/Menominee", CST},
{"America/Merida", CST},
- {"America/Metlakatla", new String[] {"Hor\u00E1rio Padr\u00E3o de Metlakatla", "MeST",
- "Hor\u00E1rio de Luz Natural de Metlakatla", "MeDT"}},
+ {"America/Metlakatla", PST},
{"America/Mexico_City", CST},
{"America/Miquelon", new String[] {"Fuso hor\u00e1rio padr\u00e3o de S\u00e3o Pedro e Miquelon", "PMST",
"Hor\u00e1rio de luz natural de S\u00e3o Pedro e Miquelon", "PMDT"}},
@@ -467,7 +468,7 @@
{"Antarctica/DumontDUrville", new String[] {"Fuso hor\u00e1rio de Dumont-d'Urville", "DDUT",
"Fuso hor\u00e1rio de ver\u00e3o de Dumont-d'Urville", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"Fuso Hor\u00E1rio da Ilha de Macquarie", "MIST",
- "Fuso Hor\u00E1rio de Ver\u00E3o da Ilha de Macquarie", "MIST"}},
+ "Fuso Hor\u00E1rio de Ver\u00E3o da Ilha de Macquarie", "MIDT"}},
{"Antarctica/Mawson", new String[] {"Fuso hor\u00e1rio de Mawson", "MAWT",
"Fuso hor\u00e1rio de ver\u00e3o de Mawson", "MAWST"}},
{"Antarctica/McMurdo", NZST},
@@ -505,6 +506,7 @@
{"Asia/Brunei", new String[] {"Fuso hor\u00e1rio de Brunei", "BNT",
"Fuso hor\u00e1rio de ver\u00e3o de Brunei", "BNST"}},
{"Asia/Calcutta", IST},
+ {"Asia/Chita", IRKT},
{"Asia/Choibalsan", new String[] {"Fuso hor\u00e1rio de Choibalsan", "CHOT",
"Fuso hor\u00e1rio de ver\u00e3o de Choibalsan", "CHOST"}},
{"Asia/Chongqing", CTT},
@@ -525,8 +527,7 @@
{"Asia/Hong_Kong", HKT},
{"Asia/Hovd", new String[] {"Fuso hor\u00e1rio de Hovd", "HOVT",
"Fuso hor\u00e1rio de ver\u00e3o de Hovd", "HOVST"}},
- {"Asia/Irkutsk", new String[] {"Fuso hor\u00e1rio de Irkutsk", "IRKT",
- "Fuso hor\u00e1rio de ver\u00e3o de Irkutsk", "IRKST"}},
+ {"Asia/Irkutsk", IRKT},
{"Asia/Istanbul", EET},
{"Asia/Jakarta", WIT},
{"Asia/Jayapura", new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Oriental", "WIT",
@@ -536,14 +537,13 @@
{"Asia/Kamchatka", new String[] {"Fuso hor\u00e1rio de Petropavlovsk-Kamchatski", "PETT",
"Fuso hor\u00e1rio de ver\u00e3o de Petropavlovsk-Kamchatski", "PETST"}},
{"Asia/Karachi", PKT},
- {"Asia/Kashgar", CTT},
+ {"Asia/Kashgar", XJT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
{"Asia/Khandyga", new String[] {"Hor\u00E1rio de Khandyga", "YAKT",
"Hor\u00E1rio de Ver\u00E3o de Khandyga", "YAKST"}},
{"Asia/Kolkata", IST},
- {"Asia/Krasnoyarsk", new String[] {"Fuso hor\u00e1rio de Krasnoyarsk", "KRAT",
- "Fuso hor\u00e1rio de ver\u00e3o de Krasnoyarsk", "KRAST"}},
+ {"Asia/Krasnoyarsk", KRAT},
{"Asia/Kuala_Lumpur", MYT},
{"Asia/Kuching", MYT},
{"Asia/Kuwait", ARAST},
@@ -556,7 +556,7 @@
"Fuso hor\u00e1rio de ver\u00e3o das Filipinas", "PHST"}},
{"Asia/Muscat", GST},
{"Asia/Nicosia", EET},
- {"Asia/Novokuznetsk", NOVT},
+ {"Asia/Novokuznetsk", KRAT},
{"Asia/Novosibirsk", NOVT},
{"Asia/Oral", new String[] {"Fuso hor\u00e1rio de Uralsk", "ORAT",
"Fuso hor\u00e1rio de ver\u00e3o de Uralsk", "ORAST"}},
@@ -577,6 +577,8 @@
{"Asia/Samarkand", UZT},
{"Asia/Seoul", KST},
{"Asia/Singapore", SGT},
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
+ "Srednekolymsk Daylight Time", "SREDT"}},
{"Asia/Taipei", CTT},
{"Asia/Tel_Aviv", ISRAEL},
{"Asia/Tashkent", UZT},
@@ -588,7 +590,7 @@
{"Asia/Ujung_Pandang", CIT},
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
- {"Asia/Urumqi", CTT},
+ {"Asia/Urumqi", XJT},
{"Asia/Ust-Nera", new String[] {"Hor\u00E1rio de Ust-Nera", "VLAT",
"Hor\u00E1rio de Ver\u00E3o de Ust-Nera", "VLAST"}},
{"Asia/Vientiane", ICT},
@@ -620,8 +622,8 @@
{"Australia/Canberra", EST_NSW},
{"Australia/Currie", EST_NSW},
{"Australia/Darwin", DARWIN},
- {"Australia/Eucla", new String[] {"Fuso Hor\u00E1rio Ocidental Central (Austr\u00E1lia)", "CWST",
- "Fuso Hor\u00E1rio de Ver\u00E3o Ocidental Central (Austr\u00E1lia)", "CWST"}},
+ {"Australia/Eucla", new String[] {"Fuso Hor\u00E1rio Ocidental Central (Austr\u00E1lia)", "ACWST",
+ "Fuso Hor\u00E1rio de Ver\u00E3o Ocidental Central (Austr\u00E1lia)", "ACWDT"}},
{"Australia/Hobart", TASMANIA},
{"Australia/LHI", LORD_HOWE},
{"Australia/Lindeman", BRISBANE},
@@ -687,7 +689,7 @@
{"Europe/Isle_of_Man", GMTBST},
{"Europe/Istanbul", EET},
{"Europe/Jersey", GMTBST},
- {"Europe/Kaliningrad", FET},
+ {"Europe/Kaliningrad", EET},
{"Europe/Kiev", EET},
{"Europe/Lisbon", WET},
{"Europe/Ljubljana", CET},
@@ -696,7 +698,7 @@
{"Europe/Madrid", CET},
{"Europe/Malta", CET},
{"Europe/Mariehamn", EET},
- {"Europe/Minsk", FET},
+ {"Europe/Minsk", MSK},
{"Europe/Monaco", CET},
{"Europe/Moscow", MSK},
{"Europe/Nicosia", EET},
@@ -721,8 +723,7 @@
{"Europe/Vatican", CET},
{"Europe/Vienna", CET},
{"Europe/Vilnius", EET},
- {"Europe/Volgograd", new String[] {"Fuso hor\u00e1rio de Volgogrado", "VOLT",
- "Fuso hor\u00e1rio de ver\u00e3o de Volgogrado", "VOLST"}},
+ {"Europe/Volgograd", MSK},
{"Europe/Warsaw", CET},
{"Europe/Zagreb", CET},
{"Europe/Zaporozhye", EET},
@@ -775,6 +776,8 @@
{"PRT", AST},
{"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST},
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
+ "Bougainville Daylight Time", "BST"}},
{"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", TRUT},
{"Pacific/Easter", EASTER},
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java Mon Jan 05 11:57:27 2015 -0800
@@ -45,8 +45,8 @@
protected final Object[][] getContents() {
String ACT[] = new String[] {"Acre, normaltid", "ACT",
"Acre, sommartid", "ACST"};
- String ADELAIDE[] = new String[] {"Central standardtid (Sydaustralien)", "CST",
- "Central sommartid (South Australia)", "CST"};
+ String ADELAIDE[] = new String[] {"Central standardtid (Sydaustralien)", "ACST",
+ "Central sommartid (South Australia)", "ACDT"};
String AGT[] = new String[] {"Argentina, normaltid", "ART",
"Argentina, sommartid", "ARST"};
String AKST[] = new String[] {"Alaska, normaltid", "AKST",
@@ -61,10 +61,10 @@
"Atlantisk sommartid", "ADT"};
String BDT[] = new String[] {"Bangladesh, normaltid", "BDT",
"Bangladesh, sommartid", "BDST"};
- String BRISBANE[] = new String[] {"\u00D6stlig standardtid (Queensland)", "EST",
- "\u00D6stlig sommartid (Queensland)", "EST"};
- String BROKEN_HILL[] = new String[] {"Central standardtid (Sydaustralien)/New South Wales)", "CST",
- "Central sommartid (South Australia/New South Wales)", "CST"};
+ String BRISBANE[] = new String[] {"\u00D6stlig standardtid (Queensland)", "AEST",
+ "\u00D6stlig sommartid (Queensland)", "AEDT"};
+ String BROKEN_HILL[] = new String[] {"Central standardtid (Sydaustralien/New South Wales)", "ACST",
+ "Central sommartid (South Australia/New South Wales)", "ACDT"};
String BRT[] = new String[] {"Brasilien, normaltid", "BRT",
"Brasilien, sommartid", "BRST"};
String BTT[] = new String[] {"Bhutan, normaltid", "BTT",
@@ -89,8 +89,8 @@
"Kina, sommartid", "CDT"};
String CUBA[] = new String[] {"Kuba, normaltid", "CST",
"Kuba, sommartid", "CDT"};
- String DARWIN[] = new String[] {"Central standardtid (Nordterritoriet)", "CST",
- "Central sommartid (Nordterritoriet)", "CST"};
+ String DARWIN[] = new String[] {"Central standardtid (Nordterritoriet)", "ACST",
+ "Central sommartid (Nordterritoriet)", "ACDT"};
String DUBLIN[] = new String[] {"Greenwichtid", "GMT",
"Irland, sommartid", "IST"};
String EAT[] = new String[] {"\u00d6stafrikansk tid", "EAT",
@@ -103,8 +103,8 @@
"\u00d6stgr\u00f6nl\u00e4ndsk sommartid", "EGST"};
String EST[] = new String[] {"Eastern, normaltid", "EST",
"Eastern, sommartid", "EDT"};
- String EST_NSW[] = new String[] {"\u00D6stlig standardtid (New South Wales)", "EST",
- "\u00D6stlig sommartid (New South Wales)", "EST"};
+ String EST_NSW[] = new String[] {"\u00D6stlig standardtid (New South Wales)", "AEST",
+ "\u00D6stlig sommartid (New South Wales)", "AEDT"};
String FET[] = new String[] {"Kaliningradtid", "FET",
"\u00D6steuropeisk sommartid", "FEST"};
String GHMT[] = new String[] {"Ghana, normaltid", "GMT",
@@ -133,10 +133,12 @@
"Indien, sommartid", "IDT"};
String JST[] = new String[] {"Japan, normaltid", "JST",
"Japan, sommartid", "JDT"};
+ String KRAT[] = new String[] {"Krasnojarsk, normaltid", "KRAT",
+ "Krasnojarsk, sommartid", "KRAST"};
String KST[] = new String[] {"Korea, normaltid", "KST",
"Korea, sommartid", "KDT"};
String LORD_HOWE[] = new String[] {"Lord Howe, normaltid", "LHST",
- "Lord Howe, sommartid", "LHST"};
+ "Lord Howe, sommartid", "LHDT"};
String MHT[] = new String[] {"Marshall\u00f6arna, normaltid", "MHT",
"Marshall\u00f6arna, sommartid", "MHST"};
String MSK[] = new String[] {"Moskva, normaltid", "MSK",
@@ -165,16 +167,16 @@
"Stilla havet, sommartid", "PDT"};
String SAMOA[] = new String[] {"Samoa, normaltid", "SST",
"Samoa, sommartid", "SDT"};
+ String IRKT[] = new String[] {"Irkutsk, normaltid", "IRKT",
+ "Irkutsk, sommartid", "IRKST"};
String SAST[] = new String[] {"Sydafrika, normaltid", "SAST",
"Sydafrika, sommartid", "SAST"};
String SBT[] = new String[] {"Salomon\u00f6arna, normaltid", "SBT",
"Salomon\u00f6arna, sommartid", "SBST"};
String SGT[] = new String[] {"Singapore, normaltid", "SGT",
"Singapore, sommartid", "SGST"};
- String SLST[] = new String[] {"Greenwichtid", "GMT",
- "Sierra Leone, sommartid", "SLST"};
- String TASMANIA[] = new String[] {"\u00D6stlig standardtid (Tasmania)", "EST",
- "\u00D6stlig sommartid (Tasmanien)", "EST"};
+ String TASMANIA[] = new String[] {"\u00D6stlig standardtid (Tasmania)", "AEST",
+ "\u00D6stlig sommartid (Tasmanien)", "AEDT"};
String TMT[] = new String[] {"Turkmenistan, normaltid", "TMT",
"Turkmenistan, sommartid", "TMST"};
String ULAT[]= new String[] {"Ulaanbaatar, normaltid", "ULAT",
@@ -183,22 +185,22 @@
"Koordinerad universell tid", "UTC"};
String UZT[] = new String[] {"Uzbekistan, normaltid", "UZT",
"Uzbekistan, sommartid", "UZST"};
- String VICTORIA[] = new String[] {"\u00D6stlig standardtid (Victoria)", "EST",
- "\u00D6stlig sommartid (Victoria)", "EST"};
+ String VICTORIA[] = new String[] {"\u00D6stlig standardtid (Victoria)", "AEST",
+ "\u00D6stlig sommartid (Victoria)", "AEDT"};
String VLAT[] = new String[] {"Vladivostok, normaltid", "VLAT",
"Vladivostok, sommartid", "VLAST"};
- String WART[] = new String[] {"V\u00e4stargentina, normaltid", "WART",
- "V\u00e4stargentina, sommartid", "WARST"};
String WAT[] = new String[] {"V\u00e4stafrikansk tid", "WAT",
"V\u00e4stafrikansk sommartid", "WAST"};
String WET[] = new String[] {"V\u00e4steuropeisk tid", "WET",
"V\u00e4steuropeisk sommartid", "WEST"};
String WIT[] = new String[] {"V\u00e4stindonesisk tid", "WIB",
"V\u00e4stindonesisk sommartid", "WIST"};
- String WST_AUS[] = new String[] {"Western Standard Time (Australien)", "WST",
- "V\u00E4stlig sommartid (Australien)", "WST"};
- String WST_SAMOA[] = new String[] {"V\u00e4stsamoansk tid", "WST",
+ String WST_AUS[] = new String[] {"Western Standard Time (Australien)", "AWST",
+ "V\u00E4stlig sommartid (Australien)", "AWDT"};
+ String WST_SAMOA[] = new String[] {"V\u00e4stsamoansk tid", "WSST",
"V\u00e4stsamoansk sommartid", "WSDT"};
+ String XJT[] = new String[] {"Kina, normaltid", "XJT",
+ "Kina, sommartid", "XJDT"};
String YAKT[] = new String[] {"Jakutsk, normaltid", "YAKT",
"Jakutsk, sommartid", "YAKST"};
@@ -262,7 +264,7 @@
{"Africa/Djibouti", EAT},
{"Africa/Douala", WAT},
{"Africa/El_Aaiun", WET},
- {"Africa/Freetown", SLST},
+ {"Africa/Freetown", GMT},
{"Africa/Gaborone", CAT},
{"Africa/Harare", CAT},
{"Africa/Johannesburg", SAST},
@@ -358,7 +360,7 @@
{"America/Godthab", new String[] {"V\u00e4stra Gr\u00f6nland, normaltid", "WGT",
"V\u00e4stra Gr\u00f6nland, sommartid", "WGST"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", EST},
+ {"America/Grand_Turk", AST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
@@ -401,8 +403,7 @@
{"America/Mendoza", AGT},
{"America/Menominee", CST},
{"America/Merida", CST},
- {"America/Metlakatla", new String[] {"Metlakatla, normaltid", "MeST",
- "Metlakatla, sommartid", "MeDT"}},
+ {"America/Metlakatla", PST},
{"America/Mexico_City", CST},
{"America/Miquelon", new String[] {"Saint-Pierre-et-Miquelon, normaltid", "PMST",
"Saint-Pierre-et-Miquelon, sommartid", "PMDT"}},
@@ -467,7 +468,7 @@
{"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville, normaltid", "DDUT",
"Dumont-d'Urville, sommartid", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"Macquarie\u00F6n, normaltid", "MIST",
- "Macquarie\u00F6n, sommartid", "MIST"}},
+ "Macquarie\u00F6n, sommartid", "MIDT"}},
{"Antarctica/Mawson", new String[] {"Mawson, normaltid", "MAWT",
"Mawson, sommartid", "MAWST"}},
{"Antarctica/McMurdo", NZST},
@@ -509,6 +510,7 @@
"Choibalsan, sommartid", "CHOST"}},
{"Asia/Chongqing", CTT},
{"Asia/Chungking", CTT},
+ {"Asia/Chita", IRKT},
{"Asia/Colombo", IST},
{"Asia/Dacca", BDT},
{"Asia/Dhaka", BDT},
@@ -525,8 +527,7 @@
{"Asia/Hong_Kong", HKT},
{"Asia/Hovd", new String[] {"Hovd, normaltid", "HOVT",
"Hovd, sommartid", "HOVST"}},
- {"Asia/Irkutsk", new String[] {"Irkutsk, normaltid", "IRKT",
- "Irkutsk, sommartid", "IRKST"}},
+ {"Asia/Irkutsk", IRKT},
{"Asia/Istanbul", EET},
{"Asia/Jakarta", WIT},
{"Asia/Jayapura", new String[] {"\u00d6stindonesisk tid", "WIT",
@@ -536,14 +537,13 @@
{"Asia/Kamchatka", new String[] {"Petropavlovsk-Kamtjatka, normaltid", "PETT",
"Petropavlovsk-Kamtjatka, sommartid", "PETST"}},
{"Asia/Karachi", PKT},
- {"Asia/Kashgar", CTT},
+ {"Asia/Kashgar", XJT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
{"Asia/Khandyga", new String[] {"Khandyga, normaltid", "YAKT",
"Khandyga, sommartid", "YAKST"}},
{"Asia/Kolkata", IST},
- {"Asia/Krasnoyarsk", new String[] {"Krasnojarsk, normaltid", "KRAT",
- "Krasnojarsk, sommartid", "KRAST"}},
+ {"Asia/Krasnoyarsk", KRAT},
{"Asia/Kuala_Lumpur", MYT},
{"Asia/Kuching", MYT},
{"Asia/Kuwait", ARAST},
@@ -556,7 +556,7 @@
"Filippinerna, sommartid", "PHST"}},
{"Asia/Muscat", GST},
{"Asia/Nicosia", EET},
- {"Asia/Novokuznetsk", NOVT},
+ {"Asia/Novokuznetsk", KRAT},
{"Asia/Novosibirsk", NOVT},
{"Asia/Oral", new String[] {"Oral, normaltid", "ORAT",
"Oral, sommartid", "ORAST"}},
@@ -577,6 +577,8 @@
{"Asia/Samarkand", UZT},
{"Asia/Seoul", KST},
{"Asia/Singapore", SGT},
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
+ "Srednekolymsk Daylight Time", "SREDT"}},
{"Asia/Taipei", CTT},
{"Asia/Tel_Aviv", ISRAEL},
{"Asia/Tashkent", UZT},
@@ -588,7 +590,7 @@
{"Asia/Ujung_Pandang", CIT},
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
- {"Asia/Urumqi", CTT},
+ {"Asia/Urumqi", XJT},
{"Asia/Ust-Nera", new String[] {"Ust-Nera, normaltid", "VLAT",
"Ust-Nera, sommartid", "VLAST"}},
{"Asia/Vientiane", ICT},
@@ -620,8 +622,8 @@
{"Australia/Canberra", EST_NSW},
{"Australia/Currie", EST_NSW},
{"Australia/Darwin", DARWIN},
- {"Australia/Eucla", new String[] {"Central v\u00E4stlig normaltid (Australien)", "CWST",
- "Central v\u00E4stlig sommartid (Australien)", "CWST"}},
+ {"Australia/Eucla", new String[] {"Central v\u00E4stlig normaltid (Australien)", "ACWST",
+ "Central v\u00E4stlig sommartid (Australien)", "ACWDT"}},
{"Australia/Hobart", TASMANIA},
{"Australia/LHI", LORD_HOWE},
{"Australia/Lindeman", BRISBANE},
@@ -687,7 +689,7 @@
{"Europe/Isle_of_Man", GMTBST},
{"Europe/Istanbul", EET},
{"Europe/Jersey", GMTBST},
- {"Europe/Kaliningrad", FET},
+ {"Europe/Kaliningrad", EET},
{"Europe/Kiev", EET},
{"Europe/Lisbon", WET},
{"Europe/Ljubljana", CET},
@@ -696,7 +698,7 @@
{"Europe/Madrid", CET},
{"Europe/Malta", CET},
{"Europe/Mariehamn", EET},
- {"Europe/Minsk", FET},
+ {"Europe/Minsk", MSK},
{"Europe/Monaco", CET},
{"Europe/Moscow", MSK},
{"Europe/Nicosia", EET},
@@ -721,8 +723,7 @@
{"Europe/Vatican", CET},
{"Europe/Vienna", CET},
{"Europe/Vilnius", EET},
- {"Europe/Volgograd", new String[] {"Volgograd-tid", "VOLT",
- "Volgograd, sommartid", "VOLST"}},
+ {"Europe/Volgograd", MSK},
{"Europe/Warsaw", CET},
{"Europe/Zagreb", CET},
{"Europe/Zaporozhye", EET},
@@ -775,6 +776,8 @@
{"PRT", AST},
{"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST},
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
+ "Bougainville Daylight Time", "BST"}},
{"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER},
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java Mon Jan 05 11:57:27 2015 -0800
@@ -45,8 +45,8 @@
protected final Object[][] getContents() {
String ACT[] = new String[] {"Acre \u65f6\u95f4", "ACT",
"Acre \u590f\u4ee4\u65f6", "ACST"};
- String ADELAIDE[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A)", "CST",
- "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A)", "CST"};
+ String ADELAIDE[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A)", "ACST",
+ "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A)", "ACDT"};
String AGT[] = new String[] {"\u963f\u6839\u5ef7\u65f6\u95f4", "ART",
"\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "ARST"};
String AKST[] = new String[] {"\u963f\u62c9\u65af\u52a0\u6807\u51c6\u65f6\u95f4", "AKST",
@@ -61,10 +61,10 @@
"\u5927\u897f\u6d0b\u590f\u4ee4\u65f6", "ADT"};
String BDT[] = new String[] {"\u5b5f\u52a0\u62c9\u65f6\u95f4", "BDT",
"\u5b5f\u52a0\u62c9\u590f\u4ee4\u65f6", "BDST"};
- String BRISBANE[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u6606\u58EB\u5170)", "EST",
- "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u6606\u58EB\u5170)", "EST"};
- String BROKEN_HILL[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "CST",
- "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "CST"};
+ String BRISBANE[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u6606\u58EB\u5170)", "AEST",
+ "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u6606\u58EB\u5170)", "AEDT"};
+ String BROKEN_HILL[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "ACST",
+ "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "ACDT"};
String BRT[] = new String[] {"\u5df4\u897f\u5229\u4e9a\u65f6\u95f4", "BRT",
"\u5df4\u897f\u5229\u4e9a\u590f\u4ee4\u65f6", "BRST"};
String BTT[] = new String[] {"\u4e0d\u4e39\u65f6\u95f4", "BTT",
@@ -89,8 +89,8 @@
"\u4e2d\u56fd\u590f\u4ee4\u65f6", "CDT"};
String CUBA[] = new String[] {"\u53e4\u5df4\u6807\u51c6\u65f6\u95f4", "CST",
"\u53e4\u5df4\u590f\u4ee4\u65f6", "CDT"};
- String DARWIN[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5317\u9886\u5730)", "CST",
- "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5317\u9886\u5730)", "CST"};
+ String DARWIN[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5317\u9886\u5730)", "ACST",
+ "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5317\u9886\u5730)", "ACDT"};
String DUBLIN[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u65f6\u95f4", "GMT",
"\u7231\u5c14\u5170\u590f\u4ee4\u65f6", "IST"};
String EAT[] = new String[] {"\u4e1c\u975e\u65f6\u95f4", "EAT",
@@ -103,8 +103,8 @@
"\u4e1c\u683c\u6797\u5c9b\u590f\u4ee4\u65f6", "EGST"};
String EST[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4", "EST",
"\u4e1c\u90e8\u590f\u4ee4\u65f6", "EDT"};
- String EST_NSW[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)", "EST",
- "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF)", "EST"};
+ String EST_NSW[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)", "AEST",
+ "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF)", "AEDT"};
String FET[] = new String[] {"\u8FDC\u4E1C\u6B27\u65F6\u95F4", "FET",
"\u8FDC\u4E1C\u6B27\u590F\u4EE4\u65F6", "FEST"};
String GHMT[] = new String[] {"\u52a0\u7eb3\u65f6\u95f4", "GMT",
@@ -133,10 +133,12 @@
"\u5370\u5ea6\u590f\u4ee4\u65f6", "IDT"};
String JST[] = new String[] {"\u65e5\u672c\u6807\u51c6\u65f6\u95f4", "JST",
"\u65e5\u672c\u590f\u4ee4\u65f6", "JDT"};
+ String KRAT[] = new String[] {"\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u65f6\u95f4", "KRAT",
+ "\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u590f\u4ee4\u65f6", "KRAST"};
String KST[] = new String[] {"\u97e9\u56fd\u6807\u51c6\u65f6\u95f4", "KST",
"\u97e9\u56fd\u590f\u4ee4\u65f6", "KDT"};
String LORD_HOWE[] = new String[] {"\u8c6a\u516c\u6807\u51c6\u65f6\u95f4", "LHST",
- "\u8c6a\u516c\u590f\u4ee4\u65f6", "LHST"};
+ "\u8c6a\u516c\u590f\u4ee4\u65f6", "LHDT"};
String MHT[] = new String[] {"\u9a6c\u7ecd\u5c14\u7fa4\u5c9b\u65f6\u95f4", "MHT",
"\u9a6c\u7ecd\u5c14\u7fa4\u5c9b\u590f\u4ee4\u65f6", "MHST"};
String MSK[] = new String[] {"\u83ab\u65af\u79d1\u6807\u51c6\u65f6\u95f4", "MSK",
@@ -165,16 +167,16 @@
"\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6", "PDT"};
String SAMOA[] = new String[] {"\u8428\u6469\u4e9a\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "SST",
"\u8428\u6469\u4e9a\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SDT"};
+ String IRKT[] = new String[] {"\u4f0a\u5c14\u5e93\u6b21\u514b\u65f6\u95f4", "IRKT",
+ "\u4f0a\u5c14\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "IRKST"};
String SAST[] = new String[] {"\u5357\u975e\u6807\u51c6\u65f6\u95f4", "SAST",
"\u5357\u975e\u590f\u4ee4\u65f6", "SAST"};
String SBT[] = new String[] {"\u6240\u7f57\u95e8\u7fa4\u5c9b\u65f6\u95f4", "SBT",
"\u6240\u7f57\u95e8\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SBST"};
String SGT[] = new String[] {"\u65b0\u52a0\u5761\u65f6\u95f4", "SGT",
"\u65b0\u52a0\u5761\u590f\u4ee4\u65f6", "SGST"};
- String SLST[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u65f6\u95f4", "GMT",
- "\u585e\u62c9\u5229\u6602\u590f\u4ee4\u65f6", "SLST"};
- String TASMANIA[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "EST",
- "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "EST"};
+ String TASMANIA[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "AEST",
+ "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "AEDT"};
String TMT[] = new String[] {"\u571f\u5e93\u66fc\u65f6\u95f4", "TMT",
"\u571f\u5e93\u66fc\u590f\u4ee4\u65f6", "TMST"};
String ULAT[]= new String[] {"\u5e93\u4f26\u65f6\u95f4", "ULAT",
@@ -183,22 +185,22 @@
"\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC"};
String UZT[] = new String[] {"\u4e4c\u5179\u522b\u514b\u65af\u5766\u65f6\u95f4", "UZT",
"\u4e4c\u5179\u522b\u514b\u65af\u5766\u590f\u4ee4\u65f6", "UZST"};
- String VICTORIA[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A)", "EST",
- "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u7EF4\u591A\u5229\u4E9A)", "EST"};
+ String VICTORIA[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A)", "AEST",
+ "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u7EF4\u591A\u5229\u4E9A)", "AEDT"};
String VLAT[] = new String[] {"\u6d77\u53c2\u5d34\u65f6\u95f4", "VLAT",
"\u6d77\u53c2\u5d34\u590f\u4ee4\u65f6", "VLAST"};
- String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u65f6\u95f4", "WART",
- "\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "WARST"};
String WAT[] = new String[] {"\u897f\u975e\u65f6\u95f4", "WAT",
"\u897f\u975e\u590f\u4ee4\u65f6", "WAST"};
String WET[] = new String[] {"\u897f\u6b27\u65f6\u95f4", "WET",
"\u897f\u6b27\u590f\u4ee4\u65f6", "WEST"};
String WIT[] = new String[] {"\u897f\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "WIB",
"\u897f\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "WIST"};
- String WST_AUS[] = new String[] {"\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "WST",
- "\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)", "WST"};
- String WST_SAMOA[] = new String[] {"\u897f\u8428\u6469\u4e9a\u65f6\u95f4", "WST",
+ String WST_AUS[] = new String[] {"\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "AWST",
+ "\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)", "AWDT"};
+ String WST_SAMOA[] = new String[] {"\u897f\u8428\u6469\u4e9a\u65f6\u95f4", "WSST",
"\u897f\u8428\u6469\u4e9a\u590f\u4ee4\u65f6", "WSDT"};
+ String XJT[] = new String[] {"\u4e2d\u56fd\u6807\u51c6\u65f6\u95f4", "XJT",
+ "\u4e2d\u56fd\u590f\u4ee4\u65f6", "XJDT"};
String YAKT[] = new String[] {"\u4e9a\u5e93\u6b21\u514b\u65f6\u95f4", "YAKT",
"\u4e9a\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "YAKST"};
@@ -262,7 +264,7 @@
{"Africa/Djibouti", EAT},
{"Africa/Douala", WAT},
{"Africa/El_Aaiun", WET},
- {"Africa/Freetown", SLST},
+ {"Africa/Freetown", GMT},
{"Africa/Gaborone", CAT},
{"Africa/Harare", CAT},
{"Africa/Johannesburg", SAST},
@@ -358,7 +360,7 @@
{"America/Godthab", new String[] {"\u897f\u683c\u6797\u5170\u5c9b\u65f6\u95f4", "WGT",
"\u897f\u683c\u6797\u5170\u5c9b\u590f\u4ee4\u65f6", "WGST"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", EST},
+ {"America/Grand_Turk", AST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
@@ -401,8 +403,7 @@
{"America/Mendoza", AGT},
{"America/Menominee", CST},
{"America/Merida", CST},
- {"America/Metlakatla", new String[] {"\u6885\u7279\u62C9\u5361\u7279\u62C9\u6807\u51C6\u65F6\u95F4", "MeST",
- "\u6885\u7279\u62C9\u5361\u7279\u62C9\u590F\u4EE4\u65F6", "MeDT"}},
+ {"America/Metlakatla", PST},
{"America/Mexico_City", CST},
{"America/Miquelon", new String[] {"\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u6807\u51c6\u65f6\u95f4", "PMST",
"\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u590f\u4ee4\u65f6", "PMDT"}},
@@ -467,7 +468,7 @@
{"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u65f6\u95f4", "DDUT",
"Dumont-d'Urville \u590f\u4ee4\u65f6", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"\u9EA6\u5938\u91CC\u5C9B\u65F6\u95F4", "MIST",
- "\u9EA6\u5938\u91CC\u5C9B\u590F\u4EE4\u65F6", "MIST"}},
+ "\u9EA6\u5938\u91CC\u5C9B\u590F\u4EE4\u65F6", "MIDT"}},
{"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u65f6\u95f4", "MAWT",
"\u83ab\u68ee\u590f\u4ee4\u65f6", "MAWST"}},
{"Antarctica/McMurdo", NZST},
@@ -505,6 +506,7 @@
{"Asia/Brunei", new String[] {"\u6587\u83b1\u65f6\u95f4", "BNT",
"\u6587\u83b1\u590f\u4ee4\u65f6", "BNST"}},
{"Asia/Calcutta", IST},
+ {"Asia/Chita", IRKT},
{"Asia/Choibalsan", new String[] {"Choibalsan \u65f6\u95f4", "CHOT",
"Choibalsan \u590f\u4ee4\u65f6", "CHOST"}},
{"Asia/Chongqing", CTT},
@@ -525,8 +527,7 @@
{"Asia/Hong_Kong", HKT},
{"Asia/Hovd", new String[] {"\u79d1\u5e03\u591a\u65f6\u95f4", "HOVT",
"\u79d1\u5e03\u591a\u590f\u4ee4\u65f6", "HOVST"}},
- {"Asia/Irkutsk", new String[] {"\u4f0a\u5c14\u5e93\u6b21\u514b\u65f6\u95f4", "IRKT",
- "\u4f0a\u5c14\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "IRKST"}},
+ {"Asia/Irkutsk", IRKT},
{"Asia/Istanbul", EET},
{"Asia/Jakarta", WIT},
{"Asia/Jayapura", new String[] {"\u4e1c\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "WIT",
@@ -536,14 +537,13 @@
{"Asia/Kamchatka", new String[] {"\u5f7c\u5f97\u7f57\u5df4\u752b\u6d1b\u592b\u65af\u514b\u65f6\u95f4", "PETT",
"\u5f7c\u5f97\u7f57\u5df4\u752b\u6d1b\u592b\u65af\u514b\u590f\u4ee4\u65f6", "PETST"}},
{"Asia/Karachi", PKT},
- {"Asia/Kashgar", CTT},
+ {"Asia/Kashgar", XJT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
{"Asia/Khandyga", new String[] {"\u6C49\u5FB7\u52A0\u65F6\u95F4", "YAKT",
"\u6C49\u5FB7\u52A0\u590F\u4EE4\u65F6", "YAKST"}},
{"Asia/Kolkata", IST},
- {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u65f6\u95f4", "KRAT",
- "\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u590f\u4ee4\u65f6", "KRAST"}},
+ {"Asia/Krasnoyarsk", KRAT},
{"Asia/Kuala_Lumpur", MYT},
{"Asia/Kuching", MYT},
{"Asia/Kuwait", ARAST},
@@ -556,7 +556,7 @@
"\u83f2\u5f8b\u5bbe\u590f\u4ee4\u65f6", "PHST"}},
{"Asia/Muscat", GST},
{"Asia/Nicosia", EET},
- {"Asia/Novokuznetsk", NOVT},
+ {"Asia/Novokuznetsk", KRAT},
{"Asia/Novosibirsk", NOVT},
{"Asia/Oral", new String[] {"Oral \u65f6\u95f4", "ORAT",
"Oral \u590f\u4ee4\u65f6", "ORAST"}},
@@ -577,6 +577,8 @@
{"Asia/Samarkand", UZT},
{"Asia/Seoul", KST},
{"Asia/Singapore", SGT},
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
+ "Srednekolymsk Daylight Time", "SREDT"}},
{"Asia/Taipei", CTT},
{"Asia/Tel_Aviv", ISRAEL},
{"Asia/Tashkent", UZT},
@@ -588,7 +590,7 @@
{"Asia/Ujung_Pandang", CIT},
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
- {"Asia/Urumqi", CTT},
+ {"Asia/Urumqi", XJT},
{"Asia/Ust-Nera", new String[] {"\u4E4C\u65AF\u5B63\u6D85\u62C9\u65F6\u95F4", "VLAT",
"\u4E4C\u65AF\u5B63\u6D85\u62C9\u590F\u4EE4\u65F6", "VLAST"}},
{"Asia/Vientiane", ICT},
@@ -620,8 +622,8 @@
{"Australia/Canberra", EST_NSW},
{"Australia/Currie", EST_NSW},
{"Australia/Darwin", DARWIN},
- {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "CWST",
- "\u4E2D\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)", "CWST"}},
+ {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "ACWST",
+ "\u4E2D\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)", "ACWDT"}},
{"Australia/Hobart", TASMANIA},
{"Australia/LHI", LORD_HOWE},
{"Australia/Lindeman", BRISBANE},
@@ -687,7 +689,7 @@
{"Europe/Isle_of_Man", GMTBST},
{"Europe/Istanbul", EET},
{"Europe/Jersey", GMTBST},
- {"Europe/Kaliningrad", FET},
+ {"Europe/Kaliningrad", EET},
{"Europe/Kiev", EET},
{"Europe/Lisbon", WET},
{"Europe/Ljubljana", CET},
@@ -696,7 +698,7 @@
{"Europe/Madrid", CET},
{"Europe/Malta", CET},
{"Europe/Mariehamn", EET},
- {"Europe/Minsk", FET},
+ {"Europe/Minsk", MSK},
{"Europe/Monaco", CET},
{"Europe/Moscow", MSK},
{"Europe/Nicosia", EET},
@@ -721,8 +723,7 @@
{"Europe/Vatican", CET},
{"Europe/Vienna", CET},
{"Europe/Vilnius", EET},
- {"Europe/Volgograd", new String[] {"\u4f0f\u5c14\u52a0\u683c\u52d2\u65f6\u95f4", "VOLT",
- "\u4f0f\u5c14\u52a0\u683c\u52d2\u590f\u4ee4\u65f6", "VOLST"}},
+ {"Europe/Volgograd", MSK},
{"Europe/Warsaw", CET},
{"Europe/Zagreb", CET},
{"Europe/Zaporozhye", EET},
@@ -775,6 +776,8 @@
{"PRT", AST},
{"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST},
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
+ "Bougainville Daylight Time", "BST"}},
{"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER},
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java Mon Jan 05 11:57:27 2015 -0800
@@ -45,8 +45,8 @@
protected final Object[][] getContents() {
String ACT[] = new String[] {"Acre \u6642\u9593", "ACT",
"Acre \u590f\u4ee4\u6642\u9593", "ACST"};
- String ADELAIDE[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8)", "CST",
- "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340)", "CST"};
+ String ADELAIDE[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8)", "ACST",
+ "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340)", "ACDT"};
String AGT[] = new String[] {"\u963f\u6839\u5ef7\u6642\u9593", "ART",
"\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "ARST"};
String AKST[] = new String[] {"\u963f\u62c9\u65af\u52a0\u6a19\u6e96\u6642\u9593", "AKST",
@@ -61,10 +61,10 @@
"\u5927\u897f\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ADT"};
String BDT[] = new String[] {"\u5b5f\u52a0\u62c9\u6642\u9593", "BDT",
"\u5b5f\u52a0\u62c9\u590f\u4ee4\u6642\u9593", "BDST"};
- String BRISBANE[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u6606\u58EB\u862D)", "EST",
- "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u6606\u58EB\u862D)", "EST"};
- String BROKEN_HILL[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)", "CST",
- "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)", "CST"};
+ String BRISBANE[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u6606\u58EB\u862D)", "AEST",
+ "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u6606\u58EB\u862D)", "AEDT"};
+ String BROKEN_HILL[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)", "ACST",
+ "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)", "ACDT"};
String BRT[] = new String[] {"\u5df4\u897f\u5229\u4e9e\u6642\u9593", "BRT",
"\u5df4\u897f\u5229\u4e9e\u590f\u4ee4\u6642\u9593", "BRST"};
String BTT[] = new String[] {"\u4e0d\u4e39\u6642\u9593", "BTT",
@@ -89,8 +89,8 @@
"\u4e2d\u570b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"};
String CUBA[] = new String[] {"\u53e4\u5df4\u6a19\u6e96\u6642\u9593", "CST",
"\u53e4\u5df4\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"};
- String DARWIN[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)", "CST",
- "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)", "CST"};
+ String DARWIN[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)", "ACST",
+ "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)", "ACDT"};
String DUBLIN[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u5e73\u5747\u6642\u9593", "GMT",
"\u611b\u723e\u862d\u590f\u4ee4\u6642\u9593", "IST"};
String EAT[] = new String[] {"\u6771\u975e\u6642\u9593", "EAT",
@@ -103,8 +103,8 @@
"\u6771\u683c\u6797\u5cf6\u590f\u4ee4\u6642\u9593", "EGST"};
String EST[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593", "EST",
"\u6771\u65b9\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "EDT"};
- String EST_NSW[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "EST",
- "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "EST"};
+ String EST_NSW[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "AEST",
+ "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "AEDT"};
String FET[] = new String[] {"\u6771\u6B50\u5167\u9678\u6642\u9593", "FET",
"\u6771\u6B50\u5167\u9678\u590F\u4EE4\u6642\u9593", "FEST"};
String GHMT[] = new String[] {"\u8fe6\u7d0d\u5e73\u5747\u6642\u9593", "GMT",
@@ -133,10 +133,12 @@
"\u5370\u5ea6\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "IDT"};
String JST[] = new String[] {"\u65e5\u672c\u6a19\u6e96\u6642\u9593", "JST",
"\u65e5\u672c\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "JDT"};
+ String KRAT[] = new String[] {"\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u6642\u9593", "KRAT",
+ "\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u590f\u4ee4\u6642\u9593", "KRAST"};
String KST[] = new String[] {"\u97d3\u570b\u6a19\u6e96\u6642\u9593", "KST",
"\u97d3\u570b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "KDT"};
String LORD_HOWE[] = new String[] {"\u8c6a\u52f3\u7235\u5cf6\u6a19\u6e96\u6642\u9593", "LHST",
- "\u8c6a\u52f3\u7235\u5cf6\u590f\u4ee4\u6642\u9593", "LHST"};
+ "\u8c6a\u52f3\u7235\u5cf6\u590f\u4ee4\u6642\u9593", "LHDT"};
String MHT[] = new String[] {"\u99ac\u7d39\u723e\u7fa4\u5cf6\u6642\u9593", "MHT",
"\u99ac\u7d39\u723e\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "MHST"};
String MSK[] = new String[] {"\u83ab\u65af\u79d1\u6a19\u6e96\u6642\u9593", "MSK",
@@ -165,16 +167,16 @@
"\u592a\u5e73\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"};
String SAMOA[] = new String[] {"\u85a9\u6469\u4e9e\u6a19\u6e96\u6642\u9593", "SST",
"\u85a9\u6469\u4e9e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "SDT"};
+ String IRKT[] = new String[] {"Irkutsk \u6642\u9593", "IRKT",
+ "Irkutsk \u590f\u4ee4\u6642\u9593", "IRKST"};
String SAST[] = new String[] {"\u5357\u975e\u6a19\u6e96\u6642\u9593", "SAST",
"\u5357\u975e\u590f\u4ee4\u6642\u9593", "SAST"};
String SBT[] = new String[] {"\u6240\u7f85\u9580\u7fa4\u5cf6\u6642\u9593", "SBT",
"\u6240\u7f85\u9580\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "SBST"};
String SGT[] = new String[] {"\u65b0\u52a0\u5761\u6642\u9593", "SGT",
"\u65b0\u52a0\u5761\u590f\u4ee4\u6642\u9593", "SGST"};
- String SLST[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u5e73\u5747\u6642\u9593", "GMT",
- "\u7345\u5b50\u5c71\u590f\u4ee4\u6642\u9593", "SLST"};
- String TASMANIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)", "EST",
- "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)", "EST"};
+ String TASMANIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)", "AEST",
+ "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)", "AEDT"};
String TMT[] = new String[] {"\u571f\u5eab\u66fc\u6642\u9593", "TMT",
"\u571f\u5eab\u66fc\u590f\u4ee4\u6642\u9593", "TMST"};
String ULAT[]= new String[] {"\u5eab\u502b\u6642\u9593", "ULAT",
@@ -183,22 +185,22 @@
"\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC"};
String UZT[] = new String[] {"\u70cf\u8332\u5225\u514b\u65af\u5766\u6642\u9593", "UZT",
"\u70cf\u8332\u5225\u514b\u65af\u5766\u590f\u4ee4\u6642\u9593", "UZST"};
- String VICTORIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)", "EST",
- "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)", "EST"};
+ String VICTORIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)", "AEST",
+ "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)", "AEDT"};
String VLAT[] = new String[] {"\u6d77\u53c3\u5d34\u6642\u9593", "VLAT",
"\u6d77\u53c3\u5d34\u590f\u4ee4\u6642\u9593", "VLAST"};
- String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u6642\u9593", "WART",
- "\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "WARST"};
String WAT[] = new String[] {"\u897f\u975e\u6642\u9593", "WAT",
"\u897f\u975e\u590f\u4ee4\u6642\u9593", "WAST"};
String WET[] = new String[] {"\u897f\u6b50\u6642\u9593", "WET",
"\u897f\u6b50\u590f\u4ee4\u6642\u9593", "WEST"};
String WIT[] = new String[] {"\u897f\u5370\u5c3c\u6642\u9593", "WIB",
"\u897f\u5370\u5c3c\u590f\u4ee4\u6642\u9593", "WIST"};
- String WST_AUS[] = new String[] {"\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "WST",
- "\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "WST"};
- String WST_SAMOA[] = new String[] {"\u897f\u85a9\u6469\u4e9e\u6642\u9593", "WST",
+ String WST_AUS[] = new String[] {"\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "AWST",
+ "\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "AWDT"};
+ String WST_SAMOA[] = new String[] {"\u897f\u85a9\u6469\u4e9e\u6642\u9593", "WSST",
"\u897f\u85a9\u6469\u4e9e\u590f\u4ee4\u6642\u9593", "WSDT"};
+ String XJT[] = new String[] {"\u4e2d\u570b\u6a19\u6e96\u6642\u9593", "XJT",
+ "\u4e2d\u570b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "XJDT"};
String YAKT[] = new String[] {"\u4e9e\u5eab\u6b21\u514b\u6642\u9593", "YAKT",
"\u4e9e\u5eab\u6b21\u514b\u590f\u4ee4\u6642\u9593", "YAKST"};
@@ -262,7 +264,7 @@
{"Africa/Djibouti", EAT},
{"Africa/Douala", WAT},
{"Africa/El_Aaiun", WET},
- {"Africa/Freetown", SLST},
+ {"Africa/Freetown", GMT},
{"Africa/Gaborone", CAT},
{"Africa/Harare", CAT},
{"Africa/Johannesburg", SAST},
@@ -358,7 +360,7 @@
{"America/Godthab", new String[] {"\u897f\u683c\u6797\u862d\u5cf6\u6642\u9593", "WGT",
"\u897f\u683c\u6797\u862d\u5cf6\u590f\u4ee4\u6642\u9593", "WGST"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", EST},
+ {"America/Grand_Turk", AST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
@@ -401,8 +403,7 @@
{"America/Mendoza", AGT},
{"America/Menominee", CST},
{"America/Merida", CST},
- {"America/Metlakatla", new String[] {"\u6885\u7279\u62C9\u5361\u7279\u62C9\u6A19\u6E96\u6642\u9593", "MeST",
- "\u6885\u7279\u62C9\u5361\u7279\u62C9\u65E5\u5149\u7BC0\u7D04\u6642\u9593", "MeDT"}},
+ {"America/Metlakatla", PST},
{"America/Mexico_City", CST},
{"America/Miquelon", new String[] {"\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u6a19\u6e96\u6642\u9593", "PMST",
"\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PMDT"}},
@@ -467,7 +468,7 @@
{"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u6642\u9593", "DDUT",
"Dumont-d'Urville \u590f\u4ee4\u6642\u9593", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"\u9EA5\u5938\u5229\u5CF6\u6642\u9593", "MIST",
- "\u9EA5\u5938\u5229\u5CF6\u590F\u4EE4\u6642\u9593", "MIST"}},
+ "\u9EA5\u5938\u5229\u5CF6\u590F\u4EE4\u6642\u9593", "MIDT"}},
{"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u6642\u9593", "MAWT",
"\u83ab\u68ee\u590f\u4ee4\u6642\u9593", "MAWST"}},
{"Antarctica/McMurdo", NZST},
@@ -505,6 +506,7 @@
{"Asia/Brunei", new String[] {"\u6c76\u840a\u6642\u9593", "BNT",
"\u6c76\u840a\u590f\u4ee4\u6642\u9593", "BNST"}},
{"Asia/Calcutta", IST},
+ {"Asia/Chita", IRKT},
{"Asia/Choibalsan", new String[] {"\u5de7\u5df4\u5c71 (Choibalsan) \u6642\u9593", "CHOT",
"\u5de7\u5df4\u5c71 (Choibalsan) \u590f\u4ee4\u6642\u9593", "CHOST"}},
{"Asia/Chongqing", CTT},
@@ -525,8 +527,7 @@
{"Asia/Hong_Kong", HKT},
{"Asia/Hovd", new String[] {"\u4faf\u5fb7 (Hovd) \u6642\u9593", "HOVT",
"\u4faf\u5fb7 (Hovd) \u590f\u4ee4\u6642\u9593", "HOVST"}},
- {"Asia/Irkutsk", new String[] {"Irkutsk \u6642\u9593", "IRKT",
- "Irkutsk \u590f\u4ee4\u6642\u9593", "IRKST"}},
+ {"Asia/Irkutsk", IRKT},
{"Asia/Istanbul", EET},
{"Asia/Jakarta", WIT},
{"Asia/Jayapura", new String[] {"\u6771\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "WIT",
@@ -536,14 +537,13 @@
{"Asia/Kamchatka", new String[] {"Petropavlovsk-Kamchatski \u6642\u9593", "PETT",
"Petropavlovsk-Kamchatski \u590f\u4ee4\u6642\u9593", "PETST"}},
{"Asia/Karachi", PKT},
- {"Asia/Kashgar", CTT},
+ {"Asia/Kashgar", XJT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
{"Asia/Khandyga", new String[] {"\u6F22\u5730\u52A0 (Khandyga) \u6642\u9593", "YAKT",
"\u6F22\u5730\u52A0 (Khandyga) \u590F\u4EE4\u6642\u9593", "YAKST"}},
{"Asia/Kolkata", IST},
- {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u6642\u9593", "KRAT",
- "\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u590f\u4ee4\u6642\u9593", "KRAST"}},
+ {"Asia/Krasnoyarsk", KRAT},
{"Asia/Kuala_Lumpur", MYT},
{"Asia/Kuching", MYT},
{"Asia/Kuwait", ARAST},
@@ -556,7 +556,7 @@
"\u83f2\u5f8b\u8cd3\u590f\u4ee4\u6642\u9593", "PHST"}},
{"Asia/Muscat", GST},
{"Asia/Nicosia", EET},
- {"Asia/Novokuznetsk", NOVT},
+ {"Asia/Novokuznetsk", KRAT},
{"Asia/Novosibirsk", NOVT},
{"Asia/Oral", new String[] {"\u6b50\u4f5b\u6642\u9593", "ORAT",
"\u6b50\u4f5b\u590f\u4ee4\u6642\u9593", "ORAST"}},
@@ -577,6 +577,8 @@
{"Asia/Samarkand", UZT},
{"Asia/Seoul", KST},
{"Asia/Singapore", SGT},
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
+ "Srednekolymsk Daylight Time", "SREDT"}},
{"Asia/Taipei", new String[] {"\u53f0\u7063\u6a19\u6e96\u6642\u9593", "TST",
"\u53f0\u7063\u590f\u4ee4\u6642\u9593", "TDT"}},
{"Asia/Tel_Aviv", ISRAEL},
@@ -589,7 +591,7 @@
{"Asia/Ujung_Pandang", CIT},
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
- {"Asia/Urumqi", CTT},
+ {"Asia/Urumqi", XJT},
{"Asia/Ust-Nera", new String[] {"\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u6642\u9593", "VLAT",
"\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u590F\u4EE4\u6642\u9593", "VLAST"}},
{"Asia/Vientiane", ICT},
@@ -621,8 +623,8 @@
{"Australia/Canberra", EST_NSW},
{"Australia/Currie", EST_NSW},
{"Australia/Darwin", DARWIN},
- {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "CWST",
- "\u4E2D\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "CWST"}},
+ {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "ACWST",
+ "\u4E2D\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "ACWDT"}},
{"Australia/Hobart", TASMANIA},
{"Australia/LHI", LORD_HOWE},
{"Australia/Lindeman", BRISBANE},
@@ -688,7 +690,7 @@
{"Europe/Isle_of_Man", GMTBST},
{"Europe/Istanbul", EET},
{"Europe/Jersey", GMTBST},
- {"Europe/Kaliningrad", FET},
+ {"Europe/Kaliningrad", EET},
{"Europe/Kiev", EET},
{"Europe/Lisbon", WET},
{"Europe/Ljubljana", CET},
@@ -697,7 +699,7 @@
{"Europe/Madrid", CET},
{"Europe/Malta", CET},
{"Europe/Mariehamn", EET},
- {"Europe/Minsk", FET},
+ {"Europe/Minsk", MSK},
{"Europe/Monaco", CET},
{"Europe/Moscow", MSK},
{"Europe/Nicosia", EET},
@@ -722,8 +724,7 @@
{"Europe/Vatican", CET},
{"Europe/Vienna", CET},
{"Europe/Vilnius", EET},
- {"Europe/Volgograd", new String[] {"\u4f0f\u723e\u52a0\u683c\u52d2\u6642\u9593", "VOLT",
- "\u4f0f\u723e\u52a0\u683c\u52d2\u590f\u4ee4\u6642\u9593", "VOLST"}},
+ {"Europe/Volgograd", MSK},
{"Europe/Warsaw", CET},
{"Europe/Zagreb", CET},
{"Europe/Zaporozhye", EET},
@@ -776,6 +777,8 @@
{"PRT", AST},
{"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST},
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
+ "Bougainville Daylight Time", "BST"}},
{"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER},
--- ./jdk/src/share/instrument/Reentrancy.c Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/instrument/Reentrancy.c Mon Jan 05 11:57:27 2015 -0800
@@ -130,6 +130,7 @@
error = confirmingTLSSet ( jvmtienv,
thread,
JPLIS_CURRENTLY_INSIDE_TOKEN);
+ check_phase_ret_false(error);
jplis_assert(error == JVMTI_ERROR_NONE);
if ( error != JVMTI_ERROR_NONE ) {
result = JNI_FALSE;
@@ -158,6 +159,7 @@
error = confirmingTLSSet( jvmtienv,
thread,
JPLIS_CURRENTLY_OUTSIDE_TOKEN);
+ check_phase_ret(error);
jplis_assert(error == JVMTI_ERROR_NONE);
}
--- ./jdk/src/share/javavm/export/jvm.h Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/javavm/export/jvm.h Mon Jan 05 11:57:27 2015 -0800
@@ -1320,6 +1320,9 @@
JNIEXPORT jobject JNICALL
JVM_InitAgentProperties(JNIEnv *env, jobject agent_props);
+JNIEXPORT jstring JNICALL
+JVM_GetTemporaryDirectory(JNIEnv *env);
+
/* Generics reflection support.
*
* Returns information about the given class's EnclosingMethod
--- ./jdk/src/share/lib/security/java.security-linux Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/lib/security/java.security-linux Mon Jan 05 11:57:27 2015 -0800
@@ -412,8 +412,12 @@
#
# In some environments, certain algorithms or key lengths may be undesirable
# when using SSL/TLS. This section describes the mechanism for disabling
-# algorithms during SSL/TLS security parameters negotiation, including cipher
-# suites selection, peer authentication and key exchange mechanisms.
+# algorithms during SSL/TLS security parameters negotiation, including
+# protocol version negotiation, cipher suites selection, peer authentication
+# and key exchange mechanisms.
+#
+# Disabled algorithms will not be negotiated for SSL/TLS connections, even
+# if they are enabled explicitly in an application.
#
# For PKI-based peer authentication and key exchange mechanisms, this list
# of disabled algorithms will also be checked during certification path
@@ -428,4 +432,5 @@
# It is not guaranteed to be examined and used by other implementations.
#
# Example:
-# jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048
+# jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
+jdk.tls.disabledAlgorithms=SSLv3
--- ./jdk/src/share/lib/security/java.security-macosx Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/lib/security/java.security-macosx Mon Jan 05 11:57:27 2015 -0800
@@ -417,8 +417,12 @@
#
# In some environments, certain algorithms or key lengths may be undesirable
# when using SSL/TLS. This section describes the mechanism for disabling
-# algorithms during SSL/TLS security parameters negotiation, including cipher
-# suites selection, peer authentication and key exchange mechanisms.
+# algorithms during SSL/TLS security parameters negotiation, including
+# protocol version negotiation, cipher suites selection, peer authentication
+# and key exchange mechanisms.
+#
+# Disabled algorithms will not be negotiated for SSL/TLS connections, even
+# if they are enabled explicitly in an application.
#
# For PKI-based peer authentication and key exchange mechanisms, this list
# of disabled algorithms will also be checked during certification path
@@ -433,4 +437,5 @@
# It is not guaranteed to be examined and used by other implementations.
#
# Example:
-# jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048
+# jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
+jdk.tls.disabledAlgorithms=SSLv3
--- ./jdk/src/share/lib/security/java.security-solaris Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/lib/security/java.security-solaris Mon Jan 05 11:57:27 2015 -0800
@@ -416,8 +416,12 @@
#
# In some environments, certain algorithms or key lengths may be undesirable
# when using SSL/TLS. This section describes the mechanism for disabling
-# algorithms during SSL/TLS security parameters negotiation, including cipher
-# suites selection, peer authentication and key exchange mechanisms.
+# algorithms during SSL/TLS security parameters negotiation, including
+# protocol version negotiation, cipher suites selection, peer authentication
+# and key exchange mechanisms.
+#
+# Disabled algorithms will not be negotiated for SSL/TLS connections, even
+# if they are enabled explicitly in an application.
#
# For PKI-based peer authentication and key exchange mechanisms, this list
# of disabled algorithms will also be checked during certification path
@@ -432,4 +436,5 @@
# It is not guaranteed to be examined and used by other implementations.
#
# Example:
-# jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048
+# jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
+jdk.tls.disabledAlgorithms=SSLv3
--- ./jdk/src/share/lib/security/java.security-windows Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/lib/security/java.security-windows Mon Jan 05 11:57:27 2015 -0800
@@ -417,8 +417,12 @@
#
# In some environments, certain algorithms or key lengths may be undesirable
# when using SSL/TLS. This section describes the mechanism for disabling
-# algorithms during SSL/TLS security parameters negotiation, including cipher
-# suites selection, peer authentication and key exchange mechanisms.
+# algorithms during SSL/TLS security parameters negotiation, including
+# protocol version negotiation, cipher suites selection, peer authentication
+# and key exchange mechanisms.
+#
+# Disabled algorithms will not be negotiated for SSL/TLS connections, even
+# if they are enabled explicitly in an application.
#
# For PKI-based peer authentication and key exchange mechanisms, this list
# of disabled algorithms will also be checked during certification path
@@ -433,4 +437,5 @@
# It is not guaranteed to be examined and used by other implementations.
#
# Example:
-# jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048
+# jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
+jdk.tls.disabledAlgorithms=SSLv3
--- ./jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp Mon Jan 05 11:57:27 2015 -0800
@@ -583,6 +583,8 @@
LEReferenceTo<ChainSubClassRuleTable>
chainSubClassRuleTable(chainSubClassSetTable, success, chainSubClassRuleTableOffset);
le_uint16 backtrackGlyphCount = SWAPW(chainSubClassRuleTable->backtrackGlyphCount);
+ LEReferenceToArrayOf<le_uint16> backtrackClassArray(base, success, chainSubClassRuleTable->backtrackClassArray, backtrackGlyphCount);
+ if( LE_FAILURE(success) ) { return 0; }
le_uint16 inputGlyphCount = SWAPW(chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount]) - 1;
LEReferenceToArrayOf<le_uint16> inputClassArray(base, success, &chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount + 1],inputGlyphCount+2); // +2 for the lookaheadGlyphCount count
le_uint16 lookaheadGlyphCount = SWAPW(inputClassArray.getObject(inputGlyphCount, success));
@@ -599,8 +601,6 @@
}
tempIterator.prev();
- LEReferenceToArrayOf<le_uint16> backtrackClassArray(base, success, chainSubClassRuleTable->backtrackClassArray, backtrackGlyphCount);
- if( LE_FAILURE(success) ) { return 0; }
if (! matchGlyphClasses(backtrackClassArray, backtrackGlyphCount,
&tempIterator, backtrackClassDefinitionTable, success, TRUE)) {
continue;
--- ./jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp Mon Jan 05 11:57:27 2015 -0800
@@ -45,6 +45,9 @@
le_int32 coverageIndex = getGlyphCoverage(base, glyphID, success);
le_uint16 eeCount = SWAPW(entryExitCount);
+ LEReferenceToArrayOf<EntryExitRecord>
+ entryExitRecordsArrayRef(base, success, entryExitRecords, coverageIndex);
+
if (coverageIndex < 0 || coverageIndex >= eeCount || LE_FAILURE(success)) {
glyphIterator->setCursiveGlyph();
return 0;
--- ./jdk/src/share/native/sun/font/layout/Features.cpp Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/native/sun/font/layout/Features.cpp Mon Jan 05 11:57:27 2015 -0800
@@ -40,6 +40,9 @@
LEReferenceTo<FeatureTable> FeatureListTable::getFeatureTable(const LETableReference &base, le_uint16 featureIndex, LETag *featureTag, LEErrorCode &success) const
{
+ LEReferenceToArrayOf<FeatureRecord>
+ featureRecordArrayRef(base, success, featureRecordArray, featureIndex);
+
if (featureIndex >= SWAPW(featureCount) || LE_FAILURE(success)) {
return LEReferenceTo<FeatureTable>();
}
--- ./jdk/src/share/native/sun/font/layout/LETableReference.h Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/native/sun/font/layout/LETableReference.h Mon Jan 05 11:57:27 2015 -0800
@@ -471,7 +471,12 @@
#endif
const T& getObject(le_uint32 i, LEErrorCode &success) const {
- return *getAlias(i,success);
+ const T *ret = getAlias(i, success);
+ if (LE_FAILURE(success) || ret==NULL) {
+ return *(new T(0));
+ } else {
+ return *ret;
+ }
}
/**
--- ./jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp Mon Jan 05 11:57:27 2015 -0800
@@ -64,6 +64,9 @@
LEReferenceTo<LigatureTable> ligTable(ligSetTable, success, ligTableOffset);
if(LE_FAILURE(success)) { return 0; }
le_uint16 compCount = SWAPW(ligTable->compCount) - 1;
+ LEReferenceToArrayOf<TTGlyphID>
+ componentArrayRef(base, success, ligTable->componentArray, compCount);
+ if (LE_FAILURE(success)) { return 0; }
le_int32 startPosition = glyphIterator->getCurrStreamPosition();
TTGlyphID ligGlyph = SWAPW(ligTable->ligGlyph);
le_uint16 comp;
--- ./jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp Mon Jan 05 11:57:27 2015 -0800
@@ -61,6 +61,8 @@
le_int32 coverageIndex = getGlyphCoverage(base, glyph, success);
le_uint16 seqCount = SWAPW(sequenceCount);
+ LEReferenceToArrayOf<Offset>
+ sequenceTableOffsetArrayRef(base, success, sequenceTableOffsetArray, seqCount);
if (LE_FAILURE(success)) {
return 0;
--- ./jdk/src/share/native/sun/misc/VMSupport.c Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/native/sun/misc/VMSupport.c Mon Jan 05 11:57:27 2015 -0800
@@ -53,3 +53,9 @@
}
return (*InitAgentProperties_fp)(env, props);
}
+
+JNIEXPORT jstring JNICALL
+Java_sun_misc_VMSupport_getVMTemporaryDirectory(JNIEnv *env, jclass cls)
+{
+ return JVM_GetTemporaryDirectory(env);
+}
--- ./jdk/src/share/native/sun/security/smartcardio/pcsc.c Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/native/sun/security/smartcardio/pcsc.c Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -64,17 +64,32 @@
#define J2PCSC_EXCEPTION_NAME "sun/security/smartcardio/PCSCException"
+void throwOutOfMemoryError(JNIEnv *env, const char *msg) {
+ jclass cls = (*env)->FindClass(env, "java/lang/OutOfMemoryError");
+
+ if (cls != NULL) /* Otherwise an exception has already been thrown */
+ (*env)->ThrowNew(env, cls, msg);
+
+}
+
void throwPCSCException(JNIEnv* env, LONG code) {
jclass pcscClass;
jmethodID constructor;
jthrowable pcscException;
pcscClass = (*env)->FindClass(env, J2PCSC_EXCEPTION_NAME);
- assert(pcscClass != NULL);
+ if (pcscClass == NULL) {
+ return;
+ }
constructor = (*env)->GetMethodID(env, pcscClass, "<init>", "(I)V");
- assert(constructor != NULL);
- pcscException = (jthrowable) (*env)->NewObject(env, pcscClass, constructor, (jint)code);
- (*env)->Throw(env, pcscException);
+ if (constructor == NULL) {
+ return;
+ }
+ pcscException = (jthrowable) (*env)->NewObject(env, pcscClass,
+ constructor, (jint)code);
+ if (pcscException != NULL) {
+ (*env)->Throw(env, pcscException);
+ }
}
jboolean handleRV(JNIEnv* env, LONG code) {
@@ -93,7 +108,7 @@
JNIEXPORT jlong JNICALL Java_sun_security_smartcardio_PCSC_SCardEstablishContext
(JNIEnv *env, jclass thisClass, jint dwScope)
{
- SCARDCONTEXT context;
+ SCARDCONTEXT context = 0;
LONG rv;
dprintf("-establishContext\n");
rv = CALL_SCardEstablishContext(dwScope, NULL, NULL, &context);
@@ -110,7 +125,7 @@
jobjectArray pcsc_multi2jstring(JNIEnv *env, char *spec) {
jobjectArray result;
jclass stringClass;
- char *cp, **tab;
+ char *cp, **tab = NULL;
jstring js;
int cnt = 0;
@@ -121,6 +136,10 @@
}
tab = (char **)malloc(cnt * sizeof(char *));
+ if (tab == NULL) {
+ throwOutOfMemoryError(env, NULL);
+ return NULL;
+ }
cnt = 0;
cp = spec;
@@ -130,12 +149,26 @@
}
stringClass = (*env)->FindClass(env, "java/lang/String");
- assert(stringClass != NULL);
+ if (stringClass == NULL) {
+ free(tab);
+ return NULL;
+ }
result = (*env)->NewObjectArray(env, cnt, stringClass, NULL);
- while (cnt-- > 0) {
- js = (*env)->NewStringUTF(env, tab[cnt]);
- (*env)->SetObjectArrayElement(env, result, cnt, js);
+ if (result != NULL) {
+ while (cnt-- > 0) {
+ js = (*env)->NewStringUTF(env, tab[cnt]);
+ if ((*env)->ExceptionCheck(env)) {
+ free(tab);
+ return NULL;
+ }
+ (*env)->SetObjectArrayElement(env, result, cnt, js);
+ if ((*env)->ExceptionCheck(env)) {
+ free(tab);
+ return NULL;
+ }
+ (*env)->DeleteLocalRef(env, js);
+ }
}
free(tab);
return result;
@@ -146,8 +179,8 @@
{
SCARDCONTEXT context = (SCARDCONTEXT)jContext;
LONG rv;
- LPTSTR mszReaders;
- DWORD size;
+ LPTSTR mszReaders = NULL;
+ DWORD size = 0;
jobjectArray result;
dprintf1("-context: %x\n", context);
@@ -157,13 +190,20 @@
}
dprintf1("-size: %d\n", size);
- mszReaders = malloc(size);
- rv = CALL_SCardListReaders(context, NULL, mszReaders, &size);
- if (handleRV(env, rv)) {
- free(mszReaders);
- return NULL;
+ if (size) {
+ mszReaders = malloc(size);
+ if (mszReaders == NULL) {
+ throwOutOfMemoryError(env, NULL);
+ return NULL;
+ }
+
+ rv = CALL_SCardListReaders(context, NULL, mszReaders, &size);
+ if (handleRV(env, rv)) {
+ free(mszReaders);
+ return NULL;
+ }
+ dprintf1("-String: %s\n", mszReaders);
}
- dprintf1("-String: %s\n", mszReaders);
result = pcsc_multi2jstring(env, mszReaders);
free(mszReaders);
@@ -177,10 +217,13 @@
SCARDCONTEXT context = (SCARDCONTEXT)jContext;
LONG rv;
LPCTSTR readerName;
- SCARDHANDLE card;
- DWORD proto;
+ SCARDHANDLE card = 0;
+ DWORD proto = 0;
readerName = (*env)->GetStringUTFChars(env, jReaderName, NULL);
+ if (readerName == NULL) {
+ return 0;
+ }
rv = CALL_SCardConnect(context, readerName, jShareMode, jPreferredProtocols, &card, &proto);
(*env)->ReleaseStringUTFChars(env, jReaderName, readerName);
dprintf1("-cardhandle: %x\n", card);
@@ -210,6 +253,9 @@
sendPci.cbPciLength = sizeof(SCARD_IO_REQUEST);
sbuf = (unsigned char *) ((*env)->GetByteArrayElements(env, jBuf, NULL));
+ if (sbuf == NULL) {
+ return NULL;
+ }
rv = CALL_SCardTransmit(card, &sendPci, sbuf + ofs, len, NULL, rbuf, &rlen);
(*env)->ReleaseByteArrayElements(env, jBuf, (jbyte *)sbuf, JNI_ABORT);
@@ -218,7 +264,12 @@
}
jOut = (*env)->NewByteArray(env, rlen);
- (*env)->SetByteArrayRegion(env, jOut, 0, rlen, (jbyte *)rbuf);
+ if (jOut != NULL) {
+ (*env)->SetByteArrayRegion(env, jOut, 0, rlen, (jbyte *)rbuf);
+ if ((*env)->ExceptionCheck(env)) {
+ return NULL;
+ }
+ }
return jOut;
}
@@ -231,10 +282,10 @@
DWORD readerLen = READERNAME_BUFFER_SIZE;
unsigned char atr[ATR_BUFFER_SIZE];
DWORD atrLen = ATR_BUFFER_SIZE;
- DWORD state;
- DWORD protocol;
+ DWORD state = 0;
+ DWORD protocol = 0;
jbyteArray jArray;
- jbyte tmp;
+ jbyte status[2];
rv = CALL_SCardStatus(card, readerName, &readerLen, &state, &protocol, atr, &atrLen);
if (handleRV(env, rv)) {
@@ -245,13 +296,19 @@
dprintf1("-protocol: %d\n", protocol);
jArray = (*env)->NewByteArray(env, atrLen);
+ if (jArray == NULL) {
+ return NULL;
+ }
(*env)->SetByteArrayRegion(env, jArray, 0, atrLen, (jbyte *)atr);
-
- tmp = (jbyte)state;
- (*env)->SetByteArrayRegion(env, jStatus, 0, 1, &tmp);
- tmp = (jbyte)protocol;
- (*env)->SetByteArrayRegion(env, jStatus, 1, 1, &tmp);
-
+ if ((*env)->ExceptionCheck(env)) {
+ return NULL;
+ }
+ status[0] = (jbyte) state;
+ status[1] = (jbyte) protocol;
+ (*env)->SetByteArrayRegion(env, jStatus, 0, 2, status);
+ if ((*env)->ExceptionCheck(env)) {
+ return NULL;
+ }
return jArray;
}
@@ -274,36 +331,78 @@
SCARDCONTEXT context = (SCARDCONTEXT)jContext;
LONG rv;
int readers = (*env)->GetArrayLength(env, jReaderNames);
- SCARD_READERSTATE *readerState = malloc(readers * sizeof(SCARD_READERSTATE));
+ SCARD_READERSTATE *readerState;
int i;
- jintArray jEventState;
- int *currentState = (*env)->GetIntArrayElements(env, jCurrentState, NULL);
+ jintArray jEventState = NULL;
+ int *currentState = NULL;
+ const char *readerName;
+
+ readerState = calloc(readers, sizeof(SCARD_READERSTATE));
+ if (readerState == NULL && readers > 0) {
+ throwOutOfMemoryError(env, NULL);
+ return NULL;
+ }
+
+ currentState = (*env)->GetIntArrayElements(env, jCurrentState, NULL);
+ if (currentState == NULL) {
+ free(readerState);
+ return NULL;
+ }
+
+ for (i = 0; i < readers; i++) {
+ readerState[i].szReader = NULL;
+ }
for (i = 0; i < readers; i++) {
jobject jReaderName = (*env)->GetObjectArrayElement(env, jReaderNames, i);
- readerState[i].szReader = (*env)->GetStringUTFChars(env, jReaderName, NULL);
+ if ((*env)->ExceptionCheck(env)) {
+ goto cleanup;
+ }
+ readerName = (*env)->GetStringUTFChars(env, jReaderName, NULL);
+ if (readerName == NULL) {
+ goto cleanup;
+ }
+ readerState[i].szReader = strdup(readerName);
+ (*env)->ReleaseStringUTFChars(env, jReaderName, readerName);
+ if (readerState[i].szReader == NULL) {
+ throwOutOfMemoryError(env, NULL);
+ goto cleanup;
+ }
readerState[i].pvUserData = NULL;
readerState[i].dwCurrentState = currentState[i];
readerState[i].dwEventState = SCARD_STATE_UNAWARE;
readerState[i].cbAtr = 0;
+ (*env)->DeleteLocalRef(env, jReaderName);
}
- (*env)->ReleaseIntArrayElements(env, jCurrentState, currentState, JNI_ABORT);
- rv = CALL_SCardGetStatusChange(context, (DWORD)jTimeout, readerState, readers);
+ if (readers > 0) {
+ rv = CALL_SCardGetStatusChange(context, (DWORD)jTimeout, readerState, readers);
+ if (handleRV(env, rv)) {
+ goto cleanup;
+ }
+ }
jEventState = (*env)->NewIntArray(env, readers);
+ if (jEventState == NULL) {
+ goto cleanup;
+ }
for (i = 0; i < readers; i++) {
jint eventStateTmp;
- jobject jReaderName = (*env)->GetObjectArrayElement(env, jReaderNames, i);
dprintf3("-reader status %s: 0x%X, 0x%X\n", readerState[i].szReader,
readerState[i].dwCurrentState, readerState[i].dwEventState);
- (*env)->ReleaseStringUTFChars(env, jReaderName, readerState[i].szReader);
eventStateTmp = (jint)readerState[i].dwEventState;
(*env)->SetIntArrayRegion(env, jEventState, i, 1, &eventStateTmp);
+ if ((*env)->ExceptionCheck(env)) {
+ jEventState = NULL;
+ goto cleanup;
+ }
+ }
+cleanup:
+ (*env)->ReleaseIntArrayElements(env, jCurrentState, currentState, JNI_ABORT);
+ for (i = 0; i < readers; i++) {
+ free((char *)readerState[i].szReader);
}
free(readerState);
-
- handleRV(env, rv);
return jEventState;
}
@@ -336,13 +435,18 @@
{
SCARDHANDLE card = (SCARDHANDLE)jCard;
LONG rv;
- jbyte* sendBuffer = (*env)->GetByteArrayElements(env, jSendBuffer, NULL);
+ jbyte* sendBuffer;
jint sendBufferLength = (*env)->GetArrayLength(env, jSendBuffer);
jbyte receiveBuffer[MAX_STACK_BUFFER_SIZE];
jint receiveBufferLength = MAX_STACK_BUFFER_SIZE;
ULONG returnedLength = 0;
jbyteArray jReceiveBuffer;
+ sendBuffer = (*env)->GetByteArrayElements(env, jSendBuffer, NULL);
+ if (sendBuffer == NULL) {
+ return NULL;
+ }
+
#ifdef J2PCSC_DEBUG
{
int k;
@@ -375,7 +479,12 @@
#endif
jReceiveBuffer = (*env)->NewByteArray(env, returnedLength);
+ if (jReceiveBuffer == NULL) {
+ return NULL;
+ }
(*env)->SetByteArrayRegion(env, jReceiveBuffer, 0, returnedLength, receiveBuffer);
-
+ if ((*env)->ExceptionCheck(env)) {
+ return NULL;
+ }
return jReceiveBuffer;
}
--- ./jdk/src/share/npt/utf.c Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/share/npt/utf.c Mon Jan 05 11:57:27 2015 -0800
@@ -390,7 +390,7 @@
/* ================================================================= */
-#if 1 /* Test program */
+#ifdef COMPILE_WITH_UTF_TEST /* Test program */
/*
* Convert any byte array into a printable string.
--- ./jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd Mon Jan 05 11:57:27 2015 -0800
@@ -308,47 +308,39 @@
ProcessPipeInputStream(int fd) {
super(new FileInputStream(newFileDescriptor(fd)));
}
-
- private InputStream drainInputStream(InputStream in)
+ private static byte[] drainInputStream(InputStream in)
throws IOException {
int n = 0;
int j;
byte[] a = null;
- synchronized (closeLock) {
- if (buf == null) // asynchronous close()?
- return null; // discard
- j = in.available();
+ while ((j = in.available()) > 0) {
+ a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j);
+ n += in.read(a, n, j);
}
- while (j > 0) {
- a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j);
- synchronized (closeLock) {
- if (buf == null) // asynchronous close()?
- return null; // discard
- n += in.read(a, n, j);
- j = in.available();
- }
- }
- return (a == null) ?
- ProcessBuilder.NullInputStream.INSTANCE :
- new ByteArrayInputStream(n == a.length ? a : Arrays.copyOf(a, n));
+ return (a == null || n == a.length) ? a : Arrays.copyOf(a, n);
}
/** Called by the process reaper thread when the process exits. */
synchronized void processExited() {
- try {
- InputStream in = this.in;
- if (in != null) {
- InputStream stragglers = drainInputStream(in);
- in.close();
- this.in = stragglers;
- }
- } catch (IOException ignored) { }
+ synchronized (closeLock) {
+ try {
+ InputStream in = this.in;
+ // this stream is closed if and only if: in == null
+ if (in != null) {
+ byte[] stragglers = drainInputStream(in);
+ in.close();
+ this.in = (stragglers == null) ?
+ ProcessBuilder.NullInputStream.INSTANCE :
+ new ByteArrayInputStream(stragglers);
+ }
+ } catch (IOException ignored) {}
+ }
}
@Override
public void close() throws IOException {
// BufferedInputStream#close() is not synchronized unlike most other methods.
- // Synchronizing helps avoid racing with drainInputStream().
+ // Synchronizing helps avoid race with processExited().
synchronized (closeLock) {
super.close();
}
--- ./jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux Mon Jan 05 11:57:27 2015 -0800
@@ -310,47 +310,39 @@
ProcessPipeInputStream(int fd) {
super(new FileInputStream(newFileDescriptor(fd)));
}
-
- private InputStream drainInputStream(InputStream in)
+ private static byte[] drainInputStream(InputStream in)
throws IOException {
int n = 0;
int j;
byte[] a = null;
- synchronized (closeLock) {
- if (buf == null) // asynchronous close()?
- return null; // discard
- j = in.available();
+ while ((j = in.available()) > 0) {
+ a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j);
+ n += in.read(a, n, j);
}
- while (j > 0) {
- a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j);
- synchronized (closeLock) {
- if (buf == null) // asynchronous close()?
- return null; // discard
- n += in.read(a, n, j);
- j = in.available();
- }
- }
- return (a == null) ?
- ProcessBuilder.NullInputStream.INSTANCE :
- new ByteArrayInputStream(n == a.length ? a : Arrays.copyOf(a, n));
+ return (a == null || n == a.length) ? a : Arrays.copyOf(a, n);
}
/** Called by the process reaper thread when the process exits. */
synchronized void processExited() {
- try {
- InputStream in = this.in;
- if (in != null) {
- InputStream stragglers = drainInputStream(in);
- in.close();
- this.in = stragglers;
- }
- } catch (IOException ignored) { }
+ synchronized (closeLock) {
+ try {
+ InputStream in = this.in;
+ // this stream is closed if and only if: in == null
+ if (in != null) {
+ byte[] stragglers = drainInputStream(in);
+ in.close();
+ this.in = (stragglers == null) ?
+ ProcessBuilder.NullInputStream.INSTANCE :
+ new ByteArrayInputStream(stragglers);
+ }
+ } catch (IOException ignored) {}
+ }
}
@Override
public void close() throws IOException {
// BufferedInputStream#close() is not synchronized unlike most other methods.
- // Synchronizing helps avoid racing with drainInputStream().
+ // Synchronizing helps avoid race with processExited().
synchronized (closeLock) {
super.close();
}
--- ./jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java Mon Jan 05 11:57:27 2015 -0800
@@ -1001,6 +1001,13 @@
switch (xev.get_type()) {
case XConstants.ButtonPress:
if (buttonState == 0) {
+ XWindowPeer parent = getToplevelXWindow();
+ // See 6385277, 6981400.
+ if (parent != null && parent.isFocusableWindow()) {
+ // A click in a client area drops the actual focused window retaining.
+ parent.setActualFocusedWindow(null);
+ parent.requestWindowFocus(xbe.get_time(), true);
+ }
XAwtState.setAutoGrabWindow(this);
}
break;
--- ./jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java Mon Jan 05 11:57:27 2015 -0800
@@ -605,33 +605,6 @@
}
- public void handleButtonPressRelease(XEvent xev) {
- /*
- * Fix for 6385277.
- * We request focus on simple Window by click in order
- * to make it behave like Frame/Dialog in this case and also to unify
- * the behaviour with what we have on MS Windows.
- * handleJavaMouseEvent() would be more suitable place to do this
- * but we want Swing to have this functionality also.
- */
- if (xev.get_type() == XConstants.ButtonPress) {
- final XWindowPeer parentXWindow = getParentTopLevel();
- Window parentWindow = (Window)parentXWindow.getTarget();
- if (parentXWindow.isFocusableWindow() && parentXWindow.isSimpleWindow() &&
- XKeyboardFocusManagerPeer.getInstance().getCurrentFocusedWindow() != parentWindow)
- {
- postEvent(new InvocationEvent(parentWindow, new Runnable() {
- public void run() {
- // Request focus on the EDT of 'parentWindow' because
- // XDecoratedPeer.requestWindowFocus() calls client code.
- parentXWindow.requestXFocus();
- }
- }));
- }
- }
- super.handleButtonPressRelease(xev);
- }
-
public Dimension getMinimumSize() {
return target.getSize();
}
--- ./jdk/src/solaris/classes/sun/awt/X11/XWindow.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/solaris/classes/sun/awt/X11/XWindow.java Mon Jan 05 11:57:27 2015 -0800
@@ -455,6 +455,7 @@
ColorModel cm = getColorModel();
int pixel = PixelConverter.instance.rgbToPixel(c.getRGB(), cm);
XlibWrapper.XSetWindowBackground(XToolkit.getDisplay(), getContentWindow(), pixel);
+ XlibWrapper.XClearWindow(XToolkit.getDisplay(), getContentWindow());
}
finally {
XToolkit.awtUnlock();
--- ./jdk/src/solaris/classes/sun/awt/windows/ThemeReader.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/solaris/classes/sun/awt/windows/ThemeReader.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 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
@@ -41,6 +41,10 @@
return false;
}
+ public static boolean isXPStyleEnabled() {
+ return false;
+ }
+
public static void paintBackground(int[] buffer, String widget,
int part, int state, int x, int y, int w, int h, int stride) {
}
--- ./jdk/src/solaris/classes/sun/nio/fs/UnixPath.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/solaris/classes/sun/nio/fs/UnixPath.java Mon Jan 05 11:57:27 2015 -0800
@@ -482,7 +482,7 @@
@Override
public Path normalize() {
final int count = getNameCount();
- if (count == 0)
+ if (count == 0 || isEmpty())
return this;
boolean[] ignore = new boolean[count]; // true => ignore name
--- ./jdk/src/solaris/native/java/lang/UNIXProcess_md.c Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/solaris/native/java/lang/UNIXProcess_md.c Mon Jan 05 11:57:27 2015 -0800
@@ -602,9 +602,9 @@
*/
assert(prog != NULL && argBlock != NULL);
if ((phelperpath = getBytes(env, helperpath)) == NULL) goto Catch;
- if ((pprog = getBytes(env, prog)) == NULL) goto Catch;
- if ((pargBlock = getBytes(env, argBlock)) == NULL) goto Catch;
- if ((c->argv = NEW(const char *, argc + 3)) == NULL) goto Catch;
+ if ((pprog = getBytes(env, prog)) == NULL) goto Catch;
+ if ((pargBlock = getBytes(env, argBlock)) == NULL) goto Catch;
+ if ((c->argv = NEW(const char *, argc + 3)) == NULL) goto Catch;
c->argv[0] = pprog;
c->argc = argc + 2;
initVectorFromBlock(c->argv+1, pargBlock, argc);
@@ -693,10 +693,11 @@
closeSafely(childenv[0]);
closeSafely(childenv[1]);
- releaseBytes(env, prog, pprog);
- releaseBytes(env, argBlock, pargBlock);
- releaseBytes(env, envBlock, penvBlock);
- releaseBytes(env, dir, c->pdir);
+ releaseBytes(env, helperpath, phelperpath);
+ releaseBytes(env, prog, pprog);
+ releaseBytes(env, argBlock, pargBlock);
+ releaseBytes(env, envBlock, penvBlock);
+ releaseBytes(env, dir, c->pdir);
free(c->argv);
free(c->envv);
--- ./jdk/src/solaris/native/java/net/NetworkInterface.c Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/solaris/native/java/net/NetworkInterface.c Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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
@@ -530,9 +530,14 @@
jboolean isCopy;
int ret = -1;
int sock;
- const char* name_utf;
+ const char* name_utf = NULL;
- name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
+ if (name != NULL) {
+ name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
+ } else {
+ JNU_ThrowNullPointerException(env, "network interface name is NULL");
+ return ret;
+ }
if ((sock =openSocketWithFallback(env, name_utf)) < 0) {
(*env)->ReleaseStringUTFChars(env, name, name_utf);
@@ -555,7 +560,12 @@
const char* name_utf;
int flags = 0;
- name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
+ if (name != NULL) {
+ name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
+ } else {
+ JNU_ThrowNullPointerException(env, "network interface name is NULL");
+ return -1;
+ }
if ((sock = openSocketWithFallback(env, name_utf)) < 0) {
(*env)->ReleaseStringUTFChars(env, name, name_utf);
@@ -1026,6 +1036,7 @@
*/
#ifdef AF_INET6
+// unused arg ifname and struct if2
static int openSocketWithFallback(JNIEnv *env, const char *ifname){
int sock;
struct ifreq if2;
@@ -1261,9 +1272,14 @@
static int getMTU(JNIEnv *env, int sock, const char *ifname) {
struct ifreq if2;
+ memset((char *) &if2, 0, sizeof(if2));
- memset((char *) &if2, 0, sizeof(if2));
- strcpy(if2.ifr_name, ifname);
+ if (ifname != NULL) {
+ strcpy(if2.ifr_name, ifname);
+ } else {
+ JNU_ThrowNullPointerException(env, "network interface name is NULL");
+ return -1;
+ }
if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFMTU failed");
--- ./jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c Mon Jan 05 11:57:27 2015 -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
@@ -1625,10 +1625,12 @@
static jmethodID ni_ctrID;
static jfieldID ni_indexID;
static jfieldID ni_addrsID;
+ static jfieldID ni_nameID;
jobjectArray addrArray;
jobject addr;
jobject ni;
+ jobject ni_name;
struct in_addr in;
struct in_addr *inP = &in;
@@ -1691,6 +1693,8 @@
ni_addrsID = (*env)->GetFieldID(env, c, "addrs",
"[Ljava/net/InetAddress;");
CHECK_NULL_RETURN(ni_addrsID, NULL);
+ ni_nameID = (*env)->GetFieldID(env, c,"name", "Ljava/lang/String;");
+ CHECK_NULL_RETURN(ni_nameID, NULL);
ni_class = (*env)->NewGlobalRef(env, c);
CHECK_NULL_RETURN(ni_class, NULL);
}
@@ -1712,6 +1716,9 @@
CHECK_NULL_RETURN(addrArray, NULL);
(*env)->SetObjectArrayElement(env, addrArray, 0, addr);
(*env)->SetObjectField(env, ni, ni_addrsID, addrArray);
+ if (ni_name != NULL) {
+ (*env)->SetObjectField(env, ni, ni_nameID, ni_name);
+ }
return ni;
}
@@ -1728,14 +1735,16 @@
static jfieldID ni_indexID;
static jfieldID ni_addrsID;
static jclass ia_class;
+ static jfieldID ni_nameID;
static jmethodID ia_anyLocalAddressID;
- int index;
+ int index = 0;
int len = sizeof(index);
jobjectArray addrArray;
jobject addr;
jobject ni;
+ jobject ni_name;
#ifdef __linux__
/*
@@ -1775,6 +1784,8 @@
"anyLocalAddress",
"()Ljava/net/InetAddress;");
CHECK_NULL_RETURN(ia_anyLocalAddressID, NULL);
+ ni_nameID = (*env)->GetFieldID(env, c,"name", "Ljava/lang/String;");
+ CHECK_NULL_RETURN(ni_nameID, NULL);
ni_class = (*env)->NewGlobalRef(env, c);
CHECK_NULL_RETURN(ni_class, NULL);
}
@@ -1835,6 +1846,10 @@
CHECK_NULL_RETURN(addrArray, NULL);
(*env)->SetObjectArrayElement(env, addrArray, 0, addr);
(*env)->SetObjectField(env, ni, ni_addrsID, addrArray);
+ ni_name = (*env)->NewStringUTF(env, "");
+ if (ni_name != NULL) {
+ (*env)->SetObjectField(env, ni, ni_nameID, ni_name);
+ }
return ni;
}
#endif
--- ./jdk/src/solaris/native/java/util/TimeZone_md.c Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/solaris/native/java/util/TimeZone_md.c Mon Jan 05 11:57:27 2015 -0800
@@ -172,7 +172,6 @@
break;
}
if ((fd = open(pathname, O_RDONLY)) == -1) {
- fd = 0;
break;
}
if (read(fd, dbuf, size) != (ssize_t) size) {
@@ -188,7 +187,7 @@
free((void *) dbuf);
dbuf = NULL;
(void) close(fd);
- fd = 0;
+ fd = -1;
}
free((void *) pathname);
pathname = NULL;
@@ -203,7 +202,7 @@
if (pathname != NULL) {
free((void *) pathname);
}
- if (fd != 0) {
+ if (fd != -1) {
(void) close(fd);
}
if (dbuf != NULL) {
--- ./jdk/src/solaris/native/sun/security/smartcardio/MUSCLE/pcsclite.h Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/solaris/native/sun/security/smartcardio/MUSCLE/pcsclite.h Mon Jan 05 11:57:27 2015 -0800
@@ -62,6 +62,8 @@
#define MAX_ATR_SIZE 33 /* Maximum ATR size */
+#ifndef __APPLE__
+
typedef struct
{
const char *szReader;
@@ -73,9 +75,6 @@
}
SCARD_READERSTATE_A;
-typedef SCARD_READERSTATE_A SCARD_READERSTATE, *PSCARD_READERSTATE_A,
- *LPSCARD_READERSTATE_A;
-
typedef struct _SCARD_IO_REQUEST
{
unsigned long dwProtocol; /* Protocol identifier */
@@ -83,6 +82,33 @@
}
SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
+#else // __APPLE__
+
+#pragma pack(1)
+typedef struct
+{
+ const char *szReader;
+ void *pvUserData;
+ uint32_t dwCurrentState;
+ uint32_t dwEventState;
+ uint32_t cbAtr;
+ unsigned char rgbAtr[MAX_ATR_SIZE];
+}
+SCARD_READERSTATE_A;
+
+typedef struct _SCARD_IO_REQUEST
+{
+ uint32_t dwProtocol; /* Protocol identifier */
+ uint32_t cbPciLength; /* Protocol Control Inf Length */
+}
+SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
+#pragma pack()
+
+#endif // __APPLE__
+
+typedef SCARD_READERSTATE_A SCARD_READERSTATE, *PSCARD_READERSTATE_A,
+ *LPSCARD_READERSTATE_A;
+
typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST;
extern SCARD_IO_REQUEST g_rgSCardT0Pci, g_rgSCardT1Pci,
--- ./jdk/src/solaris/native/sun/security/smartcardio/pcsc_md.c Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/solaris/native/sun/security/smartcardio/pcsc_md.c Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -32,8 +32,6 @@
#include <winscard.h>
-#include <jni_util.h>
-
#include "sun_security_smartcardio_PlatformPCSC.h"
#include "pcsc_md.h"
@@ -50,12 +48,40 @@
FPTR_SCardEndTransaction scardEndTransaction;
FPTR_SCardControl scardControl;
+/*
+ * Throws a Java Exception by name
+ */
+void throwByName(JNIEnv *env, const char *name, const char *msg)
+{
+ jclass cls = (*env)->FindClass(env, name);
+
+ if (cls != 0) /* Otherwise an exception has already been thrown */
+ (*env)->ThrowNew(env, cls, msg);
+}
+
+/*
+ * Throws java.lang.NullPointerException
+ */
+void throwNullPointerException(JNIEnv *env, const char *msg)
+{
+ throwByName(env, "java/lang/NullPointerException", msg);
+}
+
+/*
+ * Throws java.io.IOException
+ */
+void throwIOException(JNIEnv *env, const char *msg)
+{
+ throwByName(env, "java/io/IOException", msg);
+}
+
+
void *findFunction(JNIEnv *env, void *hModule, char *functionName) {
void *fAddress = dlsym(hModule, functionName);
if (fAddress == NULL) {
char errorMessage[256];
snprintf(errorMessage, sizeof(errorMessage), "Symbol not found: %s", functionName);
- JNU_ThrowNullPointerException(env, errorMessage);
+ throwNullPointerException(env, errorMessage);
return NULL;
}
return fAddress;
@@ -64,21 +90,56 @@
JNIEXPORT void JNICALL Java_sun_security_smartcardio_PlatformPCSC_initialize
(JNIEnv *env, jclass thisClass, jstring jLibName) {
const char *libName = (*env)->GetStringUTFChars(env, jLibName, NULL);
+ if (libName == NULL) {
+ throwNullPointerException(env, "PCSC library name is null");
+ return;
+ }
hModule = dlopen(libName, RTLD_LAZY);
(*env)->ReleaseStringUTFChars(env, jLibName, libName);
if (hModule == NULL) {
- JNU_ThrowIOException(env, dlerror());
+ throwIOException(env, dlerror());
return;
}
scardEstablishContext = (FPTR_SCardEstablishContext)findFunction(env, hModule, "SCardEstablishContext");
+ if ((*env)->ExceptionCheck(env)) {
+ return;
+ }
scardConnect = (FPTR_SCardConnect) findFunction(env, hModule, "SCardConnect");
+ if ((*env)->ExceptionCheck(env)) {
+ return;
+ }
scardDisconnect = (FPTR_SCardDisconnect) findFunction(env, hModule, "SCardDisconnect");
+ if ((*env)->ExceptionCheck(env)) {
+ return;
+ }
scardStatus = (FPTR_SCardStatus) findFunction(env, hModule, "SCardStatus");
+ if ((*env)->ExceptionCheck(env)) {
+ return;
+ }
scardGetStatusChange = (FPTR_SCardGetStatusChange) findFunction(env, hModule, "SCardGetStatusChange");
+ if ((*env)->ExceptionCheck(env)) {
+ return;
+ }
scardTransmit = (FPTR_SCardTransmit) findFunction(env, hModule, "SCardTransmit");
+ if ((*env)->ExceptionCheck(env)) {
+ return;
+ }
scardListReaders = (FPTR_SCardListReaders) findFunction(env, hModule, "SCardListReaders");
+ if ((*env)->ExceptionCheck(env)) {
+ return;
+ }
scardBeginTransaction = (FPTR_SCardBeginTransaction)findFunction(env, hModule, "SCardBeginTransaction");
+ if ((*env)->ExceptionCheck(env)) {
+ return;
+ }
scardEndTransaction = (FPTR_SCardEndTransaction) findFunction(env, hModule, "SCardEndTransaction");
+ if ((*env)->ExceptionCheck(env)) {
+ return;
+ }
+#ifndef __APPLE__
scardControl = (FPTR_SCardControl) findFunction(env, hModule, "SCardControl");
+#else
+ scardControl = (FPTR_SCardControl) findFunction(env, hModule, "SCardControl132");
+#endif // __APPLE__
}
--- ./jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java Mon Jan 05 11:57:27 2015 -0800
@@ -253,7 +253,7 @@
if (file == null) {
file = getDesktop();
}
- return file;
+ return checkFile(file);
} else if (key.equals("roots")) {
// Should be "History" and "Desktop" ?
if (roots == null) {
@@ -264,11 +264,11 @@
roots = (File[])super.get(key);
}
}
- return roots;
+ return checkFiles(roots);
} else if (key.equals("fileChooserComboBoxFolders")) {
Win32ShellFolder2 desktop = getDesktop();
- if (desktop != null) {
+ if (desktop != null && checkFile(desktop) != null) {
ArrayList<File> folders = new ArrayList<File>();
Win32ShellFolder2 drives = getDrives();
@@ -279,7 +279,7 @@
folders.add(desktop);
// Add all second level folders
- File[] secondLevelFolders = desktop.listFiles();
+ File[] secondLevelFolders = checkFiles(desktop.listFiles());
Arrays.sort(secondLevelFolders);
for (File secondLevelFolder : secondLevelFolders) {
Win32ShellFolder2 folder = (Win32ShellFolder2) secondLevelFolder;
@@ -287,7 +287,7 @@
folders.add(folder);
// Add third level for "My Computer"
if (folder.equals(drives)) {
- File[] thirdLevelFolders = folder.listFiles();
+ File[] thirdLevelFolders = checkFiles(folder.listFiles());
if (thirdLevelFolders != null && thirdLevelFolders.length > 0) {
List<File> thirdLevelFoldersList = Arrays.asList(thirdLevelFolders);
@@ -297,7 +297,7 @@
}
}
}
- return folders.toArray(new File[folders.size()]);
+ return checkFiles(folders);
} else {
return super.get(key);
}
@@ -334,7 +334,7 @@
}
}
}
- return folders.toArray(new File[folders.size()]);
+ return checkFiles(folders);
} else if (key.startsWith("fileChooserIcon ")) {
String name = key.substring(key.indexOf(" ") + 1);
@@ -380,6 +380,47 @@
return null;
}
+ private File checkFile(File file) {
+ SecurityManager sm = System.getSecurityManager();
+ return (sm == null || file == null) ? file : checkFile(file, sm);
+ }
+
+ private File checkFile(File file, SecurityManager sm) {
+ try {
+ sm.checkRead(file.getPath());
+ return file;
+ } catch (SecurityException se) {
+ return null;
+ }
+ }
+
+ private File[] checkFiles(File[] files) {
+ SecurityManager sm = System.getSecurityManager();
+ if (sm == null || files == null || files.length == 0) {
+ return files;
+ }
+ return checkFiles(Arrays.asList(files), sm);
+ }
+
+ private File[] checkFiles(List<File> files) {
+ SecurityManager sm = System.getSecurityManager();
+ if (sm == null || files.isEmpty()) {
+ return files.toArray(new File[files.size()]);
+ }
+ return checkFiles(files, sm);
+ }
+
+ private File[] checkFiles(List<File> files, SecurityManager sm) {
+ List<File> checkedFiles = new ArrayList<File>(files.size());
+ for (File file: files) {
+ if(checkFile(file, sm) != null){
+ checkedFiles.add(file);
+ }
+ }
+
+ return checkedFiles.toArray(new File[checkedFiles.size()]);
+ }
+
/**
* Does <code>dir</code> represent a "computer" such as a node on the network, or
* "My Computer" on the desktop.
--- ./jdk/src/windows/classes/sun/awt/windows/ThemeReader.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/windows/classes/sun/awt/windows/ThemeReader.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 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
@@ -58,6 +58,8 @@
private static final Lock writeLock = readWriteLock.writeLock();
private static volatile boolean valid = false;
+ static volatile boolean xpStyleEnabled;
+
static void flush() {
// Could be called on Toolkit thread, so do not try to aquire locks
// to avoid deadlock with theme initialization
@@ -66,6 +68,10 @@
public native static boolean isThemed();
+ public static boolean isXPStyleEnabled() {
+ return xpStyleEnabled;
+ }
+
// this should be called only with writeLock held
private static Long getThemeImpl(String widget) {
Long theme = widgetToTheme.get(widget);
--- ./jdk/src/windows/classes/sun/awt/windows/WToolkit.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/windows/classes/sun/awt/windows/WToolkit.java Mon Jan 05 11:57:27 2015 -0800
@@ -36,6 +36,7 @@
import java.beans.PropertyChangeListener;
import java.security.AccessController;
import java.security.PrivilegedAction;
+import sun.awt.AppContext;
import sun.awt.AWTAutoShutdown;
import sun.awt.AppContext;
import sun.awt.SunToolkit;
@@ -70,6 +71,9 @@
private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.windows.WToolkit");
+ // Desktop property which specifies whether XP visual styles are in effect
+ public static final String XPSTYLE_THEME_ACTIVE = "win.xpstyle.themeActive";
+
static GraphicsConfiguration config;
// System clipboard.
@@ -829,7 +833,7 @@
private synchronized void lazilyInitWProps() {
if (wprops == null) {
wprops = new WDesktopProperties(this);
- updateProperties();
+ updateProperties(wprops.getProperties());
}
}
@@ -864,27 +868,41 @@
* Windows doesn't always send WM_SETTINGCHANGE when it should.
*/
private void windowsSettingChange() {
+ // JDK-8039383: Have to update the value of XPSTYLE_THEME_ACTIVE property
+ // as soon as possible to prevent NPE and other errors because theme data
+ // has become unavailable.
+ final Map<String, Object> props = getWProps();
+ if (props == null) {
+ // props has not been initialized, so we have nothing to update
+ return;
+ }
+
+ updateXPStyleEnabled(props.get(XPSTYLE_THEME_ACTIVE));
+
if (AppContext.getAppContext() == null) {
// We cannot post the update to any EventQueue. Listeners will
// be called on EDTs by DesktopPropertyChangeSupport
- updateProperties();
+ updateProperties(props);
} else {
+ // Cannot update on Toolkit thread.
+ // DesktopPropertyChangeSupport will call listeners on Toolkit
+ // thread if it has AppContext (standalone mode)
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
- updateProperties();
+ updateProperties(props);
}
});
}
}
- private synchronized void updateProperties() {
- if (null == wprops) {
- // wprops has not been initialized, so we have nothing to update
+ private synchronized void updateProperties(final Map<String, Object> props) {
+ if (null == props) {
return;
}
- Map<String, Object> props = wprops.getProperties();
+ updateXPStyleEnabled(props.get(XPSTYLE_THEME_ACTIVE));
+
for (String propName : props.keySet()) {
Object val = props.get(propName);
if (log.isLoggable(PlatformLogger.FINER)) {
@@ -1013,6 +1031,14 @@
private native synchronized int getNumberOfButtonsImpl();
+ private synchronized Map<String, Object> getWProps() {
+ return (wprops != null) ? wprops.getProperties() : null;
+ }
+
+ private void updateXPStyleEnabled(final Object dskProp) {
+ ThemeReader.xpStyleEnabled = Boolean.TRUE.equals(dskProp);
+ }
+
@Override
public int getNumberOfButtons(){
if (numberOfButtons == 0) {
--- ./jdk/src/windows/native/java/net/NetworkInterface.c Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/windows/native/java/net/NetworkInterface.c Mon Jan 05 11:57:27 2015 -0800
@@ -175,7 +175,7 @@
int count;
netif *netifP;
DWORD i;
- int lo=0, eth=0, tr=0, fddi=0, ppp=0, sl=0, net=0, wlen=0;
+ int lo=0, eth=0, tr=0, fddi=0, ppp=0, sl=0, wlan=0, net=0, wlen=0;
/*
* Ask the IP Helper library to enumerate the adapters
@@ -215,15 +215,15 @@
*/
switch (ifrowP->dwType) {
case MIB_IF_TYPE_ETHERNET:
- sprintf(dev_name, "eth%d", eth++);
+ _snprintf_s(dev_name, 8, _TRUNCATE, "eth%d", eth++);
break;
case MIB_IF_TYPE_TOKENRING:
- sprintf(dev_name, "tr%d", tr++);
+ _snprintf_s(dev_name, 8, _TRUNCATE, "tr%d", tr++);
break;
case MIB_IF_TYPE_FDDI:
- sprintf(dev_name, "fddi%d", fddi++);
+ _snprintf_s(dev_name, 8, _TRUNCATE, "fddi%d", fddi++);
break;
case MIB_IF_TYPE_LOOPBACK:
@@ -231,20 +231,24 @@
if (lo > 0) {
continue;
}
- strcpy(dev_name, "lo");
+ strncpy_s(dev_name, 8, "lo", _TRUNCATE);
lo++;
break;
case MIB_IF_TYPE_PPP:
- sprintf(dev_name, "ppp%d", ppp++);
+ _snprintf_s(dev_name, 8, _TRUNCATE, "ppp%d", ppp++);
break;
case MIB_IF_TYPE_SLIP:
- sprintf(dev_name, "sl%d", sl++);
+ _snprintf_s(dev_name, 8, _TRUNCATE, "sl%d", sl++);
+ break;
+
+ case IF_TYPE_IEEE80211:
+ _snprintf_s(dev_name, 8, _TRUNCATE, "wlan%d", wlan++);
break;
default:
- sprintf(dev_name, "net%d", net++);
+ _snprintf_s(dev_name, 8, _TRUNCATE, "net%d", net++);
}
/*
@@ -409,6 +413,7 @@
case MIB_IF_TYPE_TOKENRING:
case MIB_IF_TYPE_FDDI:
case MIB_IF_TYPE_LOOPBACK:
+ case IF_TYPE_IEEE80211:
/**
* Contrary to what it seems to indicate, dwBCastAddr doesn't
* contain the broadcast address but 0 or 1 depending on whether
@@ -856,7 +861,7 @@
MIB_IFROW *ifRowP;
ifRowP = getIF(index);
if (ifRowP != NULL) {
- ret = ifRowP->dwAdminStatus == 1 &&
+ ret = ifRowP->dwAdminStatus == MIB_IF_ADMIN_STATUS_UP &&
(ifRowP->dwOperStatus == MIB_IF_OPER_STATUS_OPERATIONAL ||
ifRowP->dwOperStatus == MIB_IF_OPER_STATUS_CONNECTED);
free(ifRowP);
@@ -949,6 +954,7 @@
case MIB_IF_TYPE_ETHERNET:
case MIB_IF_TYPE_TOKENRING:
case MIB_IF_TYPE_FDDI:
+ case IF_TYPE_IEEE80211:
len = ifRowP->dwPhysAddrLen;
ret = (*env)->NewByteArray(env, len);
if (!IS_NULL(ret)) {
--- ./jdk/src/windows/native/java/net/NetworkInterface.h Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/windows/native/java/net/NetworkInterface.h Mon Jan 05 11:57:27 2015 -0800
@@ -88,4 +88,9 @@
int enumInterfaces(JNIEnv *env, netif **netifPP);
+// Windows Visa (and later) only.....
+#ifndef IF_TYPE_IEEE80211
+#define IF_TYPE_IEEE80211 71
#endif
+
+#endif
--- ./jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c Mon Jan 05 11:57:27 2015 -0800
@@ -43,6 +43,7 @@
#include "java_net_SocketOptions.h"
#include "java_net_NetworkInterface.h"
+#include "NetworkInterface.h"
#include "jvm.h"
#include "jni_util.h"
#include "net_util.h"
@@ -1638,6 +1639,33 @@
return (*env)->GetIntField(env, nif, ni_indexID);
}
+static int isAdapterIpv6Enabled(JNIEnv *env, int index) {
+ netif *ifList, *curr;
+ int ipv6Enabled = 0;
+ if (getAllInterfacesAndAddresses (env, &ifList) < 0) {
+ return ipv6Enabled;
+ }
+
+ /* search by index */
+ curr = ifList;
+ while (curr != NULL) {
+ if (index == curr->index) {
+ break;
+ }
+ curr = curr->next;
+ }
+
+ /* if found ipv6Index != 0 then interface is configured with IPV6 */
+ if ((curr != NULL) && (curr->ipv6Index !=0)) {
+ ipv6Enabled = 1;
+ }
+
+ /* release the interface list */
+ free_netif(ifList);
+
+ return ipv6Enabled;
+}
+
/*
* Sets the multicast interface.
*
@@ -1697,7 +1725,6 @@
struct in_addr in;
in.s_addr = htonl(getInetAddress_addr(env, value));
-
if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
(const char*)&in, sizeof(in)) < 0) {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
@@ -1728,19 +1755,20 @@
}
index = (*env)->GetIntField(env, value, ni_indexID);
- if (setsockopt(fd1, IPPROTO_IPV6, IPV6_MULTICAST_IF,
+ if ( isAdapterIpv6Enabled(env, index) != 0 ) {
+ if (setsockopt(fd1, IPPROTO_IPV6, IPV6_MULTICAST_IF,
(const char*)&index, sizeof(index)) < 0) {
- if (errno == EINVAL && index > 0) {
- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
- "IPV6_MULTICAST_IF failed (interface has IPv4 "
- "address only?)");
- } else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
+ if (errno == EINVAL && index > 0) {
+ JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
+ "IPV6_MULTICAST_IF failed (interface has IPv4 "
+ "address only?)");
+ } else {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
"Error setting socket option");
+ }
+ return;
}
- return;
}
-
/* If there are any IPv4 addresses on this interface then
* repeat the operation on the IPv4 fd */
@@ -1791,7 +1819,6 @@
char c;
} optval;
int ipv6_supported = ipv6_available();
-
fd = getFD(env, this);
if (ipv6_supported) {
@@ -1892,42 +1919,21 @@
}
/*
- * Return the multicast interface:
*
- * SocketOptions.IP_MULTICAST_IF
- * IPv4: Query IPPROTO_IP/IP_MULTICAST_IF
- * Create InetAddress
- * IP_MULTICAST_IF returns struct ip_mreqn on 2.2
- * kernel but struct in_addr on 2.4 kernel
- * IPv6: Query IPPROTO_IPV6 / IPV6_MULTICAST_IF or
- * obtain from impl is Linux 2.2 kernel
- * If index == 0 return InetAddress representing
- * anyLocalAddress.
- * If index > 0 query NetworkInterface by index
- * and returns addrs[0]
+ * called by getMulticastInterface to retrieve a NetworkInterface
+ * configured for IPv4.
+ * The ipv4Mode parameter, is a closet boolean, which allows for a NULL return,
+ * or forces the creation of a NetworkInterface object with null data.
+ * It relates to its calling context in getMulticastInterface.
+ * ipv4Mode == 1, the context is IPV4 processing only.
+ * ipv4Mode == 0, the context is IPV6 processing
*
- * SocketOptions.IP_MULTICAST_IF2
- * IPv4: Query IPPROTO_IP/IP_MULTICAST_IF
- * Query NetworkInterface by IP address and
- * return the NetworkInterface that the address
- * is bound too.
- * IPv6: Query IPPROTO_IPV6 / IPV6_MULTICAST_IF
- * (except Linux .2 kernel)
- * Query NetworkInterface by index and
- * return NetworkInterface.
*/
-jobject getMulticastInterface(JNIEnv *env, jobject this, int fd, int fd1, jint opt) {
- jboolean isIPV4 = !ipv6_available() || fd1 == -1;
-
- /*
- * IPv4 implementation
- */
- if (isIPV4) {
+static jobject getIPv4NetworkInterface (JNIEnv *env, jobject this, int fd, jint opt, int ipv4Mode) {
static jclass inet4_class;
static jmethodID inet4_ctrID;
- static jclass ni_class;
- static jmethodID ni_ctrID;
+ static jclass ni_class; static jmethodID ni_ctrID;
static jfieldID ni_indexID;
static jfieldID ni_addrsID;
@@ -1938,7 +1944,6 @@
struct in_addr in;
struct in_addr *inP = &in;
int len = sizeof(struct in_addr);
-
if (getsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
(char *)inP, &len) < 0) {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
@@ -1990,24 +1995,58 @@
if (ni) {
return ni;
}
+ if (ipv4Mode) {
+ ni = (*env)->NewObject(env, ni_class, ni_ctrID, 0);
+ CHECK_NULL_RETURN(ni, NULL);
- /*
- * The address doesn't appear to be bound at any known
- * NetworkInterface. Therefore we construct a NetworkInterface
- * with this address.
- */
- ni = (*env)->NewObject(env, ni_class, ni_ctrID, 0);
- CHECK_NULL_RETURN(ni, NULL);
+ (*env)->SetIntField(env, ni, ni_indexID, -1);
+ addrArray = (*env)->NewObjectArray(env, 1, inet4_class, NULL);
+ CHECK_NULL_RETURN(addrArray, NULL);
+ (*env)->SetObjectArrayElement(env, addrArray, 0, addr);
+ (*env)->SetObjectField(env, ni, ni_addrsID, addrArray);
+ } else {
+ ni = NULL;
+ }
+ return ni;
+}
- (*env)->SetIntField(env, ni, ni_indexID, -1);
- addrArray = (*env)->NewObjectArray(env, 1, inet4_class, NULL);
- CHECK_NULL_RETURN(addrArray, NULL);
- (*env)->SetObjectArrayElement(env, addrArray, 0, addr);
- (*env)->SetObjectField(env, ni, ni_addrsID, addrArray);
- return ni;
+/*
+ * Return the multicast interface:
+ *
+ * SocketOptions.IP_MULTICAST_IF
+ * IPv4: Query IPPROTO_IP/IP_MULTICAST_IF
+ * Create InetAddress
+ * IP_MULTICAST_IF returns struct ip_mreqn on 2.2
+ * kernel but struct in_addr on 2.4 kernel
+ * IPv6: Query IPPROTO_IPV6 / IPV6_MULTICAST_IF or
+ * obtain from impl is Linux 2.2 kernel
+ * If index == 0 return InetAddress representing
+ * anyLocalAddress.
+ * If index > 0 query NetworkInterface by index
+ * and returns addrs[0]
+ *
+ * SocketOptions.IP_MULTICAST_IF2
+ * IPv4: Query IPPROTO_IP/IP_MULTICAST_IF
+ * Query NetworkInterface by IP address and
+ * return the NetworkInterface that the address
+ * is bound too.
+ * IPv6: Query IPPROTO_IPV6 / IPV6_MULTICAST_IF
+ * (except Linux .2 kernel)
+ * Query NetworkInterface by index and
+ * return NetworkInterface.
+ */
+jobject getMulticastInterface(JNIEnv *env, jobject this, int fd, int fd1, jint opt) {
+ jboolean isIPV4 = !ipv6_available() || fd1 == -1;
+
+ /*
+ * IPv4 implementation
+ */
+ if (isIPV4) {
+ jobject netObject = NULL; // return is either an addr or a netif
+ netObject = getIPv4NetworkInterface(env, this, fd, opt, 1);
+ return netObject;
}
-
/*
* IPv6 implementation
*/
@@ -2097,6 +2136,13 @@
addr = (*env)->GetObjectArrayElement(env, addrArray, 0);
return addr;
+ } else if (index == 0) { // index == 0 typically means IPv6 not configured on the interfaces
+ // falling back to treat interface as configured for IPv4
+ jobject netObject = NULL;
+ netObject = getIPv4NetworkInterface(env, this, fd, opt, 0);
+ if (netObject != NULL) {
+ return netObject;
+ }
}
/*
@@ -2121,6 +2167,8 @@
}
return NULL;
}
+
+
/*
* Returns relevant info as a jint.
*
--- ./jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c Mon Jan 05 11:57:27 2015 -0800
@@ -576,6 +576,7 @@
{
/* fields on this */
jint port;
+ jint scope;
jint timeout = (*env)->GetIntField(env, this, psi_timeoutID);
jobject fdObj = (*env)->GetObjectField(env, this, psi_fdID);
jobject fd1Obj = (*env)->GetObjectField(env, this, psi_fd1ID);
@@ -751,9 +752,12 @@
return;
}
setInet6Address_ipaddress(env, socketAddressObj, (const char *)&him.him6.sin6_addr);
-
setInetAddress_family(env, socketAddressObj, IPv6);
- setInet6Address_scopeid(env, socketAddressObj, him.him6.sin6_scope_id);
+ scope = him.him6.sin6_scope_id;
+ (*env)->SetIntField(env, socketAddressObj, ia6_scopeidID, scope);
+ if(scope>0) {
+ (*env)->SetBooleanField(env, socketAddressObj, ia6_scopeidsetID, JNI_TRUE);
+ }
}
/* fields common to AF_INET and AF_INET6 */
--- ./jdk/src/windows/native/sun/security/krb5/NativeCreds.c Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/windows/native/sun/security/krb5/NativeCreds.c Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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
@@ -397,7 +397,7 @@
jobject ticketFlags, startTime, endTime, krbCreds = NULL;
jobject authTime, renewTillTime, hostAddresses = NULL;
KERB_EXTERNAL_TICKET *msticket;
- int found_in_cache = 0;
+ int found = 0;
FILETIME Now, EndTime, LocalEndTime;
int i, netypes;
@@ -485,7 +485,7 @@
if (CompareFileTime(&Now, &LocalEndTime) < 0) {
for (i=0; i<netypes; i++) {
if (etypes[i] == msticket->SessionKey.KeyType) {
- found_in_cache = 1;
+ found = 1;
if (native_debug) {
printf("LSA: Valid etype found: %d\n", etypes[i]);
}
@@ -495,7 +495,7 @@
}
}
- if (!found_in_cache) {
+ if (!found) {
if (native_debug) {
printf("LSA: MS TGT in cache is invalid/not supported; request new ticket\n");
}
@@ -538,6 +538,13 @@
// got the native MS Kerberos TGT
msticket = &(pTicketResponse->Ticket);
+ if (msticket->SessionKey.KeyType != etypes[i]) {
+ if (native_debug) {
+ printf("LSA: Response etype is %d for %d. Retry.\n", msticket->SessionKey.KeyType, etypes[i]);
+ }
+ continue;
+ }
+ found = 1;
break;
}
}
@@ -590,6 +597,10 @@
PUCHAR Value;
} KERB_CRYPTO_KEY, *PKERB_CRYPTO_KEY;
+ if (!found) {
+ break;
+ }
+
*/
// Build a com.sun.security.krb5.Ticket
ticket = BuildTicket(env, msticket->EncodedTicket,
--- ./jdk/src/windows/native/sun/windows/awt_Component.cpp Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/windows/native/sun/windows/awt_Component.cpp Mon Jan 05 11:57:27 2015 -0800
@@ -491,7 +491,12 @@
* member is referred in the GetClassName method of AwtLabel class.
* So m_peerObject member must be set here.
*/
- m_peerObject = env->NewGlobalRef(peer);
+ if (m_peerObject == NULL) {
+ m_peerObject = env->NewGlobalRef(peer);
+ } else {
+ assert(env->IsSameObject(m_peerObject, peer));
+ }
+
RegisterClass();
jobject target = env->GetObjectField(peer, AwtObject::targetID);
@@ -2126,19 +2131,7 @@
}
jlong getMessageTimeUTC() {
- return windowsToUTC(getMessageTimeWindows());
- }
-
- // If calling order of GetTickCount and JVM_CurrentTimeMillis
- // is swapped, it would sometimes give different result.
- // Anyway, we would not always have determinism
- // and sortedness of time conversion here (due to Windows's
- // timers peculiarities). Having some euristic algorithm might
- // help here.
- jlong windowsToUTC(DWORD windowsTime) {
- jlong offset = ::GetTickCount() - windowsTime;
- jlong jvm_time = ::JVM_CurrentTimeMillis(NULL, 0);
- return jvm_time - offset;
+ return ::JVM_CurrentTimeMillis(NULL, 0);
}
} //TimeHelper
@@ -3561,7 +3554,7 @@
SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_PRESSED,
- TimeHelper::windowsToUTC(msg.time), jkey, character,
+ TimeHelper::getMessageTimeUTC(), jkey, character,
modifiers, keyLocation, (jlong)wkey, &msg);
// bugid 4724007: Windows does not create a WM_CHAR for the Del key
@@ -3571,7 +3564,7 @@
// for Java - we don't want Windows trying to process it).
if (jkey == java_awt_event_KeyEvent_VK_DELETE) {
SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_TYPED,
- TimeHelper::windowsToUTC(msg.time),
+ TimeHelper::getMessageTimeUTC(),
java_awt_event_KeyEvent_VK_UNDEFINED,
character, modifiers,
java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0);
@@ -3603,7 +3596,7 @@
UpdateDynPrimaryKeymap(wkey, jkey, keyLocation, modifiers);
SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_RELEASED,
- TimeHelper::windowsToUTC(msg.time), jkey, character,
+ TimeHelper::getMessageTimeUTC(), jkey, character,
modifiers, keyLocation, (jlong)wkey, &msg);
return mrConsume;
}
@@ -3648,7 +3641,7 @@
jint modifiers = GetJavaModifiers();
SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_TYPED,
- TimeHelper::windowsToUTC(msg.time),
+ TimeHelper::getMessageTimeUTC(),
java_awt_event_KeyEvent_VK_UNDEFINED,
unicodeChar, modifiers,
java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0,
@@ -3717,7 +3710,7 @@
InitMessage(&msg, message, character,
MAKELPARAM(repCnt, flags));
SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_TYPED,
- TimeHelper::windowsToUTC(msg.time),
+ TimeHelper::getMessageTimeUTC(),
java_awt_event_KeyEvent_VK_UNDEFINED,
unicodeChar, modifiers,
java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0,
--- ./jdk/src/windows/native/sun/windows/awt_TrayIcon.cpp Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/windows/native/sun/windows/awt_TrayIcon.cpp Mon Jan 05 11:57:27 2015 -0800
@@ -325,7 +325,7 @@
MsgRouting AwtTrayIcon::WmMouseDown(UINT flags, int x, int y, int button)
{
- jlong now = TimeHelper::windowsToUTC(::GetTickCount());
+ jlong now = TimeHelper::getMessageTimeUTC();
jint javaModif = AwtComponent::GetJavaModifiers();
if (lastClickTrIc == this &&
@@ -361,14 +361,14 @@
MSG msg;
AwtComponent::InitMessage(&msg, lastMessage, flags, MAKELPARAM(x, y), x, y);
- SendMouseEvent(java_awt_event_MouseEvent_MOUSE_RELEASED, TimeHelper::windowsToUTC(::GetTickCount()),
+ SendMouseEvent(java_awt_event_MouseEvent_MOUSE_RELEASED, TimeHelper::getMessageTimeUTC(),
x, y, AwtComponent::GetJavaModifiers(), clickCount,
(AwtComponent::GetButton(button) == java_awt_event_MouseEvent_BUTTON3 ?
TRUE : FALSE), AwtComponent::GetButton(button), &msg);
if ((m_mouseButtonClickAllowed & AwtComponent::GetButtonMK(button)) != 0) { // No up-button in the drag-state
SendMouseEvent(java_awt_event_MouseEvent_MOUSE_CLICKED,
- TimeHelper::windowsToUTC(::GetTickCount()), x, y, AwtComponent::GetJavaModifiers(),
+ TimeHelper::getMessageTimeUTC(), x, y, AwtComponent::GetJavaModifiers(),
clickCount, JNI_FALSE, AwtComponent::GetButton(button));
}
m_mouseButtonClickAllowed &= ~AwtComponent::GetButtonMK(button); // Exclude the up-button from the drag-state
@@ -395,7 +395,7 @@
if ((flags & ALL_MK_BUTTONS) != 0) {
m_mouseButtonClickAllowed = 0;
} else {
- SendMouseEvent(java_awt_event_MouseEvent_MOUSE_MOVED, TimeHelper::windowsToUTC(::GetTickCount()), x, y,
+ SendMouseEvent(java_awt_event_MouseEvent_MOUSE_MOVED, TimeHelper::getMessageTimeUTC(), x, y,
AwtComponent::GetJavaModifiers(), 0, JNI_FALSE,
java_awt_event_MouseEvent_NOBUTTON, &msg);
}
@@ -408,7 +408,7 @@
if (AwtComponent::GetJavaModifiers() & java_awt_event_InputEvent_BUTTON1_DOWN_MASK) {
MSG msg;
AwtComponent::InitMessage(&msg, lastMessage, flags, MAKELPARAM(x, y), x, y);
- SendActionEvent(java_awt_event_ActionEvent_ACTION_PERFORMED, TimeHelper::windowsToUTC(::GetTickCount()),
+ SendActionEvent(java_awt_event_ActionEvent_ACTION_PERFORMED, TimeHelper::getMessageTimeUTC(),
AwtComponent::GetJavaModifiers(), &msg);
}
return mrConsume;
@@ -417,14 +417,14 @@
MsgRouting AwtTrayIcon::WmKeySelect(UINT flags, int x, int y)
{
static jlong lastKeySelectTime = 0;
- jlong now = TimeHelper::windowsToUTC(::GetTickCount());
+ jlong now = TimeHelper::getMessageTimeUTC();
// If a user selects a notify icon with the ENTER key,
// Shell 5.0 sends double NIN_KEYSELECT notification.
if (lastKeySelectTime != now) {
MSG msg;
AwtComponent::InitMessage(&msg, lastMessage, flags, MAKELPARAM(x, y), x, y);
- SendActionEvent(java_awt_event_ActionEvent_ACTION_PERFORMED, TimeHelper::windowsToUTC(::GetTickCount()),
+ SendActionEvent(java_awt_event_ActionEvent_ACTION_PERFORMED, TimeHelper::getMessageTimeUTC(),
AwtComponent::GetJavaModifiers(), &msg);
}
lastKeySelectTime = now;
@@ -441,7 +441,7 @@
if (clickCount == 2) {
MSG msg;
AwtComponent::InitMessage(&msg, lastMessage, flags, MAKELPARAM(x, y), x, y);
- SendActionEvent(java_awt_event_ActionEvent_ACTION_PERFORMED, TimeHelper::windowsToUTC(::GetTickCount()),
+ SendActionEvent(java_awt_event_ActionEvent_ACTION_PERFORMED, TimeHelper::getMessageTimeUTC(),
AwtComponent::GetJavaModifiers(), &msg);
}
return mrConsume;
--- ./jdk/src/windows/transport/shmem/shmem_md.c Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/src/windows/transport/shmem/shmem_md.c Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -30,6 +30,11 @@
#include "sysShmem.h"
#include "shmemBase.h" /* for exitTransportWithError */
+/* Use THIS_FILE when it is available. */
+#ifndef THIS_FILE
+ #define THIS_FILE __FILE__
+#endif
+
/*
* These functions are not completely universal. For now, they are used
* exclusively for Jbug's shared memory transport mechanism. They have
--- ./jdk/test/ProblemList.txt Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/ProblemList.txt Mon Jan 05 11:57:27 2015 -0800
@@ -384,9 +384,6 @@
# jdk_tools
-# 6461635
-com/sun/tools/attach/BasicTests.sh generic-all
-
# Filed 6986875
sun/tools/jps/jps-Vvml.sh generic-all
@@ -396,10 +393,6 @@
# 7132203
sun/jvmstat/monitor/MonitoredVm/CR6672135.java generic-all
-# 8001118
-sun/tools/jcmd/jcmd-f.sh generic-all
-sun/tools/jcmd/jcmd-help-help.sh generic-all
-
# 7175775
sun/tools/jinfo/Basic.sh macosx-all
@@ -444,9 +437,6 @@
# Problems on windows, jmap.exe hangs? (these run jmap), fails on Solaris 10 x86
java/util/concurrent/locks/Lock/TimedAcquireLeak.java generic-all
-# 7041639, Solaris DSA keypair generation bug
-java/util/TimeZone/TimeZoneDatePermissionCheck.sh solaris-all
-
# 8026772: test/sun/util/resources/TimeZone/Bug6317929.java failing
sun/util/resources/TimeZone/Bug6317929.java generic-all
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/com/sun/corba/5036554/JavaBug.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+
+package bug;
+
+public class JavaBug {
+ public static void main(String[] args) {
+ try {
+ org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);
+ org.omg.CORBA.Any any = orb.create_any();
+ myStringHelper.insert(any, "hello");
+ System.out.println("Any: " + myStringHelper.extract(any));
+ } catch( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/com/sun/corba/5036554/README Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,77 @@
+/*
+ * 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.
+ */
+
+Bug # 5036554 unmarshal error on CORBA alias type in CORBA any
+
+Platform : ALL
+
+Testcase directory : <.../corba>
+
+Test Procedure : <STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
+Step 1: create a file bug.idl with the following content:
+
+// IDL file bug.idl
+module bug {
+ typedef string myString;
+};
+
+Step 2: Translate bug.idl with the command: idlj bug.idl
+This will create the file bug/myStringHelper.java
+
+Step 3:
+Create the file JavaBug.java in directory bug with the following content:
+
+// Java file JavaBug.java
+package bug;
+
+public class JavaBug {
+ public static void main(String[] args) {
+ try {
+ org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);
+ org.omg.CORBA.Any any = orb.create_any();
+ myStringHelper.insert(any, "hello");
+ System.out.println("Any: " + myStringHelper.extract(any));
+ } catch( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+}
+
+Step 4:
+Compile all java files with the command: javac -d . bug\*.java
+
+Step 5:
+Execute the program with the command: java -cp . bug/JavaBug
+
+Step 6: Note the null pointer exception in the the output!
+
+
+Without Fix behaviour : <java.lang.NullPointerException
+ at com.sun.corba.se.internal.corba.TCUtility.unmarshalIn(TCUtility.java:290)
+ at com.sun.corba.se.internal.corba.AnyImpl.read_value(AnyImpl.java:561)
+ at bug.myStringHelper.insert(myStringHelper.java:20)
+ at bug.JavaBug.main(JavaBug.java:8)>
+
+With Fix behaviour : <The output message printed on the console: "Any: hello">
+
+Other Comments : <Test case is automated.>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/com/sun/corba/5036554/TestCorbaBug.sh Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,112 @@
+#!/bin/sh
+#
+# 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 5036554 6357706
+# @summary unmarshal error on CORBA alias type in CORBA any
+# @run shell TestCorbaBug.sh
+
+if [ "${TESTSRC}" = "" ]
+then TESTSRC=.
+fi
+
+if [ "${TESTJAVA}" = "" ]
+then
+ PARENT=`dirname \`which java\``
+ TESTJAVA=`dirname ${PARENT}`
+ echo "TESTJAVA not set, selecting " ${TESTJAVA}
+ echo "If this is incorrect, try setting the variable manually."
+fi
+
+if [ "${TESTCLASSES}" = "" ]
+then
+ echo "TESTCLASSES not set. Test cannot execute. Failed."
+ exit 1
+fi
+
+# set platform-dependent variables
+OS=`uname -s`
+case "$OS" in
+ SunOS | Linux | Darwin )
+ PS=":"
+ FS="/"
+ ;;
+ CYGWIN* )
+ PS=";"
+ FS="/"
+ ;;
+ Windows* )
+ PS=";"
+ FS="\\"
+ ;;
+ * )
+ echo "Unrecognized system!"
+ exit 1;
+ ;;
+esac
+
+CLASSPATH=.${PS}${TESTCLASSES}; export CLASSPATH
+
+THIS_DIR=`pwd`
+
+${TESTJAVA}${FS}bin${FS}java -version
+
+mkdir bug
+
+cp ${TESTSRC}${FS}bug.idl .
+${TESTJAVA}${FS}bin${FS}idlj bug.idl
+
+cp ${TESTSRC}${FS}JavaBug.java bug
+
+chmod -fR 777 bug
+
+${TESTJAVA}${FS}bin${FS}javac -d . bug${FS}*.java
+
+${TESTJAVA}${FS}bin${FS}java -cp . bug/JavaBug > test.out 2>&1
+
+grep "NullPointerException" test.out
+
+ERROR=$?
+
+cat test.out
+
+if [ $ERROR = 0 ]
+then
+ echo "Test Failed"
+ exit 1
+fi
+
+grep "Any: hello" test.out
+
+STATUS=$?
+
+if [ $STATUS = 0 ]
+then
+ echo "Test Passed"
+ exit 0
+else
+ echo "Invalid output"
+ cat test.out
+ exit 2
+fi
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/com/sun/corba/5036554/bug.idl Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,4 @@
+// IDL file bug.idl
+module bug {
+ typedef string myString;
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/com/sun/corba/se/impl/io/CustomOutputStream.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,192 @@
+/*
+ * 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.
+ */
+
+import java.io.Serializable;
+
+import org.omg.CORBA.Any;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.Principal;
+import org.omg.CORBA_2_3.portable.OutputStream;
+import org.omg.CORBA_2_3.portable.InputStream;
+
+public class CustomOutputStream extends OutputStream {
+
+ @Override
+ public void write_value(Serializable value, Class clz) {
+ }
+
+ @Override
+ public InputStream create_input_stream() {
+ return null;
+ }
+
+ @Override
+ public void write_boolean(boolean value) {
+ }
+
+ @Override
+ public void write_char(char value) {
+ }
+
+ @Override
+ public void write_wchar(char value) {
+ }
+
+ @Override
+ public void write_octet(byte value) {
+ }
+
+ @Override
+ public void write_short(short value) {
+ }
+
+ @Override
+ public void write_ushort(short value) {
+ }
+
+ @Override
+ public void write_long(int value) {
+ }
+
+ @Override
+ public void write_ulong(int value) {
+ }
+
+ @Override
+ public void write_longlong(long value) {
+ }
+
+ @Override
+ public void write_ulonglong(long value) {
+ }
+
+ @Override
+ public void write_float(float value) {
+ }
+
+ @Override
+ public void write_double(double value) {
+ }
+
+ @Override
+ public void write_string(String value) {
+ }
+
+ @Override
+ public void write_wstring(String value) {
+ }
+
+ @Override
+ public void write_boolean_array(boolean[] value, int offset,
+ int length) {
+ }
+
+ @Override
+ public void write_char_array(char[] value, int offset,
+ int length) {
+ }
+
+ @Override
+ public void write_wchar_array(char[] value, int offset,
+ int length) {
+ }
+
+ @Override
+ public void write_octet_array(byte[] value, int offset,
+ int length) {
+ }
+
+ @Override
+ public void write_short_array(short[] value, int offset,
+ int length) {
+ }
+
+ @Override
+ public void write_ushort_array(short[] value, int offset,
+ int length) {
+ }
+
+ @Override
+ public void write_long_array(int[] value, int offset,
+ int length) {
+ }
+
+ @Override
+ public void write_ulong_array(int[] value, int offset,
+ int length) {
+ }
+
+ @Override
+ public void write_longlong_array(long[] value, int offset,
+ int length) {
+ }
+
+ @Override
+ public void write_ulonglong_array(long[] value, int offset,
+ int length) {
+ }
+
+ @Override
+ public void write_float_array(float[] value, int offset,
+ int length) {
+ }
+
+ @Override
+ public void write_double_array(double[] value, int offset,
+ int length) {
+ }
+
+ @Override
+ public void write_Object(org.omg.CORBA.Object value) {
+ }
+
+ @Override
+ public void write_TypeCode(TypeCode value) {
+ }
+
+ @Override
+ public void write_any(Any value) {
+ }
+
+ @Override
+ public void write_Principal(Principal value) {
+ }
+
+ @Override
+ public void write(int b) throws java.io.IOException {
+ }
+
+ @Override
+ public void write_fixed(java.math.BigDecimal value) {
+ }
+
+ @Override
+ public void write_Context(org.omg.CORBA.Context ctx,
+ org.omg.CORBA.ContextList contexts) {
+ }
+
+ @Override
+ public org.omg.CORBA.ORB orb() {
+ return null;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/com/sun/corba/se/impl/io/HookPutFieldsTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,42 @@
+/*
+ * 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 7095856
+ * @summary OutputStreamHook doesn't handle null values
+ */
+
+import java.net.InetAddress;
+import javax.rmi.CORBA.Util;
+import javax.rmi.CORBA.ValueHandler;
+
+public class HookPutFieldsTest {
+
+ public static void main(String[] args ) throws Exception {
+ CustomOutputStream os = new CustomOutputStream();
+ InetAddress a = InetAddress.getByAddress(null, new byte[] {1,2,3,4});
+ ValueHandler vh = Util.createValueHandler();
+ vh.writeValue(os, a);
+ }
+}
--- ./jdk/test/com/sun/jndi/ldap/LdapTimeoutTest.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/com/sun/jndi/ldap/LdapTimeoutTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -64,11 +64,12 @@
env.put(Context.SECURITY_PRINCIPAL, "user");
env.put(Context.SECURITY_CREDENTIALS, "password");
- env.put("com.sun.jndi.ldap.connect.timeout", "10");
- env.put("com.sun.jndi.ldap.read.timeout", "3000");
-
InitialContext ctx = null;
try {
+ new LdapTimeoutTest().deadServerNoTimeout(env);
+
+ env.put("com.sun.jndi.ldap.connect.timeout", "10");
+ env.put("com.sun.jndi.ldap.read.timeout", "3000");
new LdapTimeoutTest().ldapReadTimeoutTest(env, false);
new LdapTimeoutTest().ldapReadTimeoutTest(env, true);
new LdapTimeoutTest().simpleAuthConnectTest(env);
@@ -84,7 +85,7 @@
void ldapReadTimeoutTest(Hashtable env, boolean ssl) {
InitialContext ctx = null;
if (ssl) env.put(Context.SECURITY_PROTOCOL, "ssl");
- ScheduledFuture killer = killSwitch();
+ ScheduledFuture killer = killSwitch(5000);
long start = System.nanoTime();
try {
ctx = new InitialDirContext(env);
@@ -112,7 +113,7 @@
void simpleAuthConnectTest(Hashtable env) {
InitialContext ctx = null;
- ScheduledFuture killer = killSwitch();
+ ScheduledFuture killer = killSwitch(5000);
long start = System.nanoTime();
try {
ctx = new InitialDirContext(env);
@@ -139,6 +140,32 @@
}
}
+ void deadServerNoTimeout(Hashtable env) {
+ InitialContext ctx = null;
+ ScheduledFuture killer = killSwitch(30000);
+ long start = System.nanoTime();
+ try {
+ ctx = new InitialDirContext(env);
+ SearchControls scl = new SearchControls();
+ scl.setSearchScope(SearchControls.SUBTREE_SCOPE);
+ NamingEnumeration<SearchResult> answer = ((InitialDirContext)ctx)
+ .search("ou=People,o=JNDITutorial", "(objectClass=*)", scl);
+ // shouldn't reach here
+ fail();
+ } catch (NamingException e) {
+ long end = System.nanoTime();
+ if (TimeUnit.NANOSECONDS.toMillis(end - start) < 14000) {
+ System.err.println("fail: timeout should be at least 15 seconds, actual time: "
+ + TimeUnit.NANOSECONDS.toMillis(end - start));
+ fail();
+ } else {
+ pass();
+ }
+ } finally {
+ if (!shutItDown(killer, ctx)) fail();
+ }
+ }
+
boolean shutItDown(ScheduledFuture killer, InitialContext ctx) {
killer.cancel(true);
try {
@@ -149,15 +176,15 @@
}
}
- ScheduledFuture killSwitch() {
+ ScheduledFuture killSwitch(int ms) {
final Thread current = Thread.currentThread();
return LdapTimeoutTest.pool.schedule(new Callable<Void>() {
public Void call() throws Exception {
System.err.println("Fail: killSwitch()");
- current.interrupt();
+ System.exit(0);
return null;
}
- }, 5000, TimeUnit.MILLISECONDS);
+ }, ms, TimeUnit.MILLISECONDS);
}
static class Server extends Thread {
--- ./jdk/test/com/sun/tools/attach/AgentSetup.sh Mon Sep 08 12:16:34 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2005, 2006, 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.
-#
-
-
-#
-#
-# Agent set - creates Agent.jar, BadAgent.jar and RedefineAgent.jar in ${TESTCLASSES}
-
-$JAVAC -d "${TESTCLASSES}" "${TESTSRC}"/Agent.java "${TESTSRC}"/BadAgent.java "${TESTSRC}"/RedefineAgent.java
-
-$JAR -cfm "${TESTCLASSES}"/Agent.jar "${TESTSRC}"/agent.mf \
- -C "${TESTCLASSES}" Agent.class
-
-$JAR -cfm "${TESTCLASSES}"/BadAgent.jar "${TESTSRC}"/badagent.mf \
- -C "${TESTCLASSES}" BadAgent.class
-
-$JAR -cfm "${TESTCLASSES}"/RedefineAgent.jar "${TESTSRC}"/redefineagent.mf \
- -C "${TESTCLASSES}" RedefineAgent.class
-
-agent="${TESTCLASSES}${FS}Agent.jar"
-badagent="${TESTCLASSES}${FS}BadAgent.jar"
-redefineagent="${TESTCLASSES}${FS}RedefineAgent.jar"
-
--- ./jdk/test/com/sun/tools/attach/Application.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/com/sun/tools/attach/Application.java Mon Jan 05 11:57:27 2015 -0800
@@ -22,25 +22,39 @@
*/
/*
- *
- *
* A simple "Application" used by the Attach API unit tests. This application is
* launched by the test. It binds to a random port and shuts down when somebody
* connects to that port.
+ * Used port and pid are written both to stdout and to a specified file.
*/
import java.net.Socket;
import java.net.ServerSocket;
+import java.io.PrintWriter;
+import jdk.testlibrary.ProcessTools;
public class Application {
public static void main(String args[]) throws Exception {
// bind to a random port
+ if (args.length < 1) {
+ System.err.println("First argument should be path to output file.");
+ }
+ String outFileName = args[0];
+
ServerSocket ss = new ServerSocket(0);
int port = ss.getLocalPort();
+ int pid = ProcessTools.getProcessId();
- // signal test that we are started - do not remove this line!!
- System.out.println(port);
+ System.out.println("shutdownPort=" + port);
+ System.out.println("pid=" + pid);
System.out.flush();
+ try (PrintWriter writer = new PrintWriter(outFileName)) {
+ writer.println("shutdownPort=" + port);
+ writer.println("pid=" + pid);
+ writer.println("done");
+ writer.flush();
+ }
+
// wait for test harness to connect
Socket s = ss.accept();
s.close();
--- ./jdk/test/com/sun/tools/attach/ApplicationSetup.sh Mon Sep 08 12:16:34 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2005, 2011, 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.
-#
-
-
-#
-#
-# Application Setup - creates ${TESTCLASSES}/Application.jar and the following
-# procedures:
-# startApplication - starts target application
-# stopApplication $1 - stops application via TCP shutdown port $1
-
-$JAVAC -d "${TESTCLASSES}" "${TESTSRC}"/Application.java "${TESTSRC}"/Shutdown.java
-$JAR -cfm "${TESTCLASSES}"/Application.jar "${TESTSRC}"/application.mf \
- -C "${TESTCLASSES}" Application.class
-
-OUTPUTFILE=${TESTCLASSES}/Application.out
-rm -f ${OUTPUTFILE}
-
-startApplication()
-{
- # put all output from the app into ${OUTPUTFILE}
- ${JAVA} $1 $2 $3 -jar "${TESTCLASSES}"/Application.jar > ${OUTPUTFILE} 2>&1 &
- pid="$!"
-
- # MKS creates an intermediate shell to launch ${JAVA} so
- # ${pid} is not the actual pid. We have put in a small sleep
- # to give the intermediate shell process time to launch the
- # "java" process.
- if [ "$OS" = "Windows" ]; then
- sleep 2
- if [ "${isCygwin}" = "true" ] ; then
- realpid=`ps -p ${pid} | tail -1 | awk '{print $4;}'`
- else
- realpid=`ps -o pid,ppid,comm|grep ${pid}|grep "java"|cut -c1-6`
- fi
- pid=${realpid}
- fi
-
- echo "Waiting for Application to initialize..."
- attempts=0
- while true; do
- sleep 1
- port=`tail -1 ${OUTPUTFILE} | sed -e 's@\\r@@g' `
- if [ ! -z "$port" ]; then
- # In case of errors wait time for output to be flushed
- sleep 1
- cat ${OUTPUTFILE}
- break
- fi
- attempts=`expr $attempts + 1`
- echo "Waiting $attempts second(s) ..."
- done
- echo "Application is process $pid, shutdown port is $port"
- return $port
-}
-
-stopApplication()
-{
- $JAVA -classpath "${TESTCLASSES}" Shutdown $1
-}
-
--- ./jdk/test/com/sun/tools/attach/BasicTests.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/com/sun/tools/attach/BasicTests.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2011, 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
@@ -21,127 +21,223 @@
* questions.
*/
-/*
- *
- *
- * Unit test for Attach API. Attaches to the given VM and performs a number
- * unit tests.
- */
import com.sun.tools.attach.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.IOException;
import java.util.Properties;
import java.util.List;
+import java.io.File;
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.JDKToolLauncher;
+import jdk.testlibrary.ProcessTools;
+import jdk.testlibrary.ProcessThread;
+/*
+ * @test
+ * @bug 6173612 6273707 6277253 6335921 6348630 6342019 6381757
+ * @summary Basic unit tests for the VM attach mechanism.
+ * @library /lib/testlibrary
+ * @run build Agent BadAgent RedefineAgent Application Shutdown RedefineDummy RunnerUtil
+ * @run main BasicTests
+ *
+ * This test will perform a number of basic attach tests.
+ */
public class BasicTests {
- public static void main(String args[]) throws Exception {
- String pid = args[0];
- String agent = args[1];
- String badagent = args[2];
- String redefineagent = args[3];
- System.out.println(" - Attaching to application ...");
- VirtualMachine vm = VirtualMachine.attach(pid);
+ /*
+ * The actual test is in the nested class TestMain.
+ * The responsibility of this class is to:
+ * 1. Build all needed jars.
+ * 2. Start the Application class in a separate process.
+ * 3. Find the pid and shutdown port of the running Application.
+ * 4. Launches the tests in nested class TestMain that will attach to the Application.
+ * 5. Shut down the Application.
+ */
+ public static void main(String args[]) throws Throwable {
+ final String pidFile = "TestsBasic.Application.pid";
+ ProcessThread processThread = null;
+ RunnerUtil.ProcessInfo info = null;
+ try {
+ buildJars();
+ processThread = RunnerUtil.startApplication(pidFile);
+ info = RunnerUtil.readProcessInfo(pidFile);
+ runTests(info.pid);
+ } catch (Throwable t) {
+ System.out.println("TestBasic got unexpected exception: " + t);
+ t.printStackTrace();
+ throw t;
+ } finally {
+ // Make sure the Application process is stopped.
+ RunnerUtil.stopApplication(info.shutdownPort, processThread);
+ }
+ }
- // Test 1 - read the system properties from the target VM and
- // check that property is set
- System.out.println(" - Test: system properties in target VM");
- Properties props = vm.getSystemProperties();
- String value = props.getProperty("attach.test");
- if (value == null || !value.equals("true")) {
- throw new RuntimeException("attach.test property not set");
+ /**
+ * Runs the actual tests in nested class TestMain.
+ * The reason for running the tests in a separate process
+ * is that we need to modify the class path.
+ */
+ private static void runTests(int pid) throws Throwable {
+ final String sep = File.separator;
+
+ // Need to add jdk/lib/tools.jar to classpath.
+ String classpath =
+ System.getProperty("test.class.path", "") + File.pathSeparator +
+ System.getProperty("test.jdk", ".") + sep + "lib" + sep + "tools.jar";
+ String testClassDir = System.getProperty("test.classes", "") + sep;
+
+ // Argumenta : -classpath cp BasicTests$TestMain pid agent badagent redefineagent
+ String[] args = {
+ "-classpath",
+ classpath,
+ "BasicTests$TestMain",
+ Integer.toString(pid),
+ testClassDir + "Agent.jar",
+ testClassDir + "BadAgent.jar",
+ testClassDir + "RedefineAgent.jar" };
+ OutputAnalyzer output = ProcessTools.executeTestJvm(args);
+ output.shouldHaveExitValue(0);
+ }
+
+ /**
+ * Will build all jars needed by the tests.
+ */
+ private static void buildJars() throws Throwable {
+ String[] jars = {"Agent", "BadAgent", "RedefineAgent", "Application" };
+ for (String jar : jars) {
+ buildJar(jar);
}
- System.out.println(" - attach.test property set as expected");
+ }
- // Test 1a - read the agent properties from the target VM.
- // By default, the agent property contains "sun.java.command",
- // "sun.jvm.flags", and "sun.jvm.args".
- // Just sanity check - make sure not empty.
- System.out.println(" - Test: agent properties in target VM");
- props = vm.getAgentProperties();
- if (props == null || props.size() == 0) {
- throw new RuntimeException("Agent properties is empty");
- }
- System.out.println(" - agent properties non-empty as expected");
+ /**
+ * Will build a jar with the given name.
+ * Class file and manifest must already exist.
+ * @param jarName Name of the jar.
+ */
+ private static void buildJar(String jarName) throws Throwable {
+ String testClasses = System.getProperty("test.classes", "?");
+ String testSrc = System.getProperty("test.src", "?");
+ String jar = String.format("%s/%s.jar", testClasses, jarName);
+ String manifest = String.format("%s/%s.mf", testSrc, jarName.toLowerCase());
+ String clazz = String.format("%s.class", jarName);
- // Test 2 - attempt to load an agent that does not exist
- System.out.println(" - Test: Load an agent that does not exist");
- try {
- vm.loadAgent("SilverBullet.jar");
- } catch (AgentLoadException x) {
- System.out.println(" - AgentLoadException thrown as expected!");
- }
+ // Arguments to the jar command has this format:
+ // "-cfm TESTCLASSES/Agent.jar TESTSRC/agent.mf -C TESTCLASSES Agent.class"
+ RunnerUtil.createJar("-cfm", jar, manifest, "-C", testClasses, clazz);
+ }
- // Test 3 - load an "bad" agent (agentmain throws an exception)
- System.out.println(" - Test: Load a bad agent");
- System.out.println("INFO: This test will cause error messages "
- + "to appear in the application log about SilverBullet.jar "
- + "not being found and an agent failing to start.");
- try {
- vm.loadAgent(badagent);
- throw new RuntimeException(
- "AgentInitializationException not thrown as expected!");
- } catch (AgentInitializationException x) {
- System.out.println(
- " - AgentInitializationException thrown as expected!");
- }
+ /**
+ * This is the actual test. It will attach to the running Application
+ * and perform a number of basic attach tests.
+ */
+ public static class TestMain {
+ public static void main(String args[]) throws Exception {
+ String pid = args[0];
+ String agent = args[1];
+ String badagent = args[2];
+ String redefineagent = args[3];
- // Test 4 - detach from the VM and attempt a load (should throw IOE)
- System.out.println(" - Test: Detach from VM");
- System.out.println("INFO: This test will cause error messages "
- + "to appear in the application log about a BadAgent including "
- + "a RuntimeException and an InvocationTargetException.");
- vm.detach();
- try {
- vm.loadAgent(agent);
- throw new RuntimeException("loadAgent did not throw an exception!!");
- } catch (IOException ioe) {
- System.out.println(" - IOException as expected");
- }
+ System.out.println(" - Attaching to application ...");
+ VirtualMachine vm = VirtualMachine.attach(pid);
- // Test 5 - functional "end-to-end" test.
- // Create a listener socket. Load Agent.jar into the target VM passing
- // it the port number of our listener. When agent loads it should connect
- // back to the tool.
+ // Test 1 - read the system properties from the target VM and
+ // check that property is set
+ System.out.println(" - Test: system properties in target VM");
+ Properties props = vm.getSystemProperties();
+ String value = props.getProperty("attach.test");
+ if (value == null || !value.equals("true")) {
+ throw new RuntimeException("attach.test property not set");
+ }
+ System.out.println(" - attach.test property set as expected");
- System.out.println(" - Re-attaching to application ...");
- vm = VirtualMachine.attach(pid);
+ // Test 1a - read the agent properties from the target VM.
+ // By default, the agent property contains "sun.java.command",
+ // "sun.jvm.flags", and "sun.jvm.args".
+ // Just sanity check - make sure not empty.
+ System.out.println(" - Test: agent properties in target VM");
+ props = vm.getAgentProperties();
+ if (props == null || props.size() == 0) {
+ throw new RuntimeException("Agent properties is empty");
+ }
+ System.out.println(" - agent properties non-empty as expected");
- System.out.println(" - Test: End-to-end connection with agent");
+ // Test 2 - attempt to load an agent that does not exist
+ System.out.println(" - Test: Load an agent that does not exist");
+ try {
+ vm.loadAgent("SilverBullet.jar");
+ } catch (AgentLoadException x) {
+ System.out.println(" - AgentLoadException thrown as expected!");
+ }
- ServerSocket ss = new ServerSocket(0);
- int port = ss.getLocalPort();
+ // Test 3 - load an "bad" agent (agentmain throws an exception)
+ System.out.println(" - Test: Load a bad agent");
+ System.out.println("INFO: This test will cause error messages "
+ + "to appear in the application log about SilverBullet.jar "
+ + "not being found and an agent failing to start.");
+ try {
+ vm.loadAgent(badagent);
+ throw new RuntimeException(
+ "AgentInitializationException not thrown as expected!");
+ } catch (AgentInitializationException x) {
+ System.out.println(
+ " - AgentInitializationException thrown as expected!");
+ }
- System.out.println(" - Loading Agent.jar into target VM ...");
- vm.loadAgent(agent, Integer.toString(port));
+ // Test 4 - detach from the VM and attempt a load (should throw IOE)
+ System.out.println(" - Test: Detach from VM");
+ System.out.println("INFO: This test will cause error messages "
+ + "to appear in the application log about a BadAgent including "
+ + "a RuntimeException and an InvocationTargetException.");
+ vm.detach();
+ try {
+ vm.loadAgent(agent);
+ throw new RuntimeException("loadAgent did not throw an exception!!");
+ } catch (IOException ioe) {
+ System.out.println(" - IOException as expected");
+ }
- System.out.println(" - Waiting for agent to connect back to tool ...");
- Socket s = ss.accept();
- System.out.println(" - Connected to agent.");
+ // Test 5 - functional "end-to-end" test.
+ // Create a listener socket. Load Agent.jar into the target VM passing
+ // it the port number of our listener. When agent loads it should connect
+ // back to the tool.
- // Test 5b - functional "end-to-end" test.
- // Now with an agent that does redefine.
+ System.out.println(" - Re-attaching to application ...");
+ vm = VirtualMachine.attach(pid);
- System.out.println(" - Re-attaching to application ...");
- vm = VirtualMachine.attach(pid);
+ System.out.println(" - Test: End-to-end connection with agent");
- System.out.println(" - Test: End-to-end connection with RedefineAgent");
+ ServerSocket ss = new ServerSocket(0);
+ int port = ss.getLocalPort();
- ServerSocket ss2 = new ServerSocket(0);
- int port2 = ss2.getLocalPort();
+ System.out.println(" - Loading Agent.jar into target VM ...");
+ vm.loadAgent(agent, Integer.toString(port));
- System.out.println(" - Loading RedefineAgent.jar into target VM ...");
- vm.loadAgent(redefineagent, Integer.toString(port2));
+ System.out.println(" - Waiting for agent to connect back to tool ...");
+ Socket s = ss.accept();
+ System.out.println(" - Connected to agent.");
- System.out.println(" - Waiting for RedefineAgent to connect back to tool ...");
- Socket s2 = ss2.accept();
- System.out.println(" - Connected to RedefineAgent.");
+ // Test 5b - functional "end-to-end" test.
+ // Now with an agent that does redefine.
- // Test 6 - list method should list the target VM
- System.out.println(" - Test: VirtualMachine.list");
- List<VirtualMachineDescriptor> l = VirtualMachine.list();
- if (!l.isEmpty()) {
+ System.out.println(" - Re-attaching to application ...");
+ vm = VirtualMachine.attach(pid);
+
+ System.out.println(" - Test: End-to-end connection with RedefineAgent");
+
+ ServerSocket ss2 = new ServerSocket(0);
+ int port2 = ss2.getLocalPort();
+
+ System.out.println(" - Loading RedefineAgent.jar into target VM ...");
+ vm.loadAgent(redefineagent, Integer.toString(port2));
+
+ System.out.println(" - Waiting for RedefineAgent to connect back to tool ...");
+ Socket s2 = ss2.accept();
+ System.out.println(" - Connected to RedefineAgent.");
+
+ // Test 6 - list method should list the target VM
+ System.out.println(" - Test: VirtualMachine.list");
+ List<VirtualMachineDescriptor> l = VirtualMachine.list();
boolean found = false;
for (VirtualMachineDescriptor vmd: l) {
if (vmd.id().equals(pid)) {
@@ -154,27 +250,26 @@
} else {
throw new RuntimeException(pid + " not found in VM list");
}
+
+ // test 7 - basic hashCode/equals tests
+ System.out.println(" - Test: hashCode/equals");
+
+ VirtualMachine vm1 = VirtualMachine.attach(pid);
+ VirtualMachine vm2 = VirtualMachine.attach(pid);
+ if (!vm1.equals(vm2)) {
+ throw new RuntimeException("virtual machines are not equal");
+ }
+ if (vm.hashCode() != vm.hashCode()) {
+ throw new RuntimeException("virtual machine hashCodes not equal");
+ }
+ System.out.println(" - hashCode/equals okay");
+
+ // ---
+ System.out.println(" - Cleaning up...");
+ s.close();
+ ss.close();
+ s2.close();
+ ss2.close();
}
-
- // test 7 - basic hashCode/equals tests
- System.out.println(" - Test: hashCode/equals");
-
- VirtualMachine vm1 = VirtualMachine.attach(pid);
- VirtualMachine vm2 = VirtualMachine.attach(pid);
- if (!vm1.equals(vm2)) {
- throw new RuntimeException("virtual machines are not equal");
- }
- if (vm.hashCode() != vm.hashCode()) {
- throw new RuntimeException("virtual machine hashCodes not equal");
- }
- System.out.println(" - hashCode/equals okay");
-
-
- // ---
- System.out.println(" - Cleaning up...");
- s.close();
- ss.close();
- s2.close();
- ss2.close();
}
}
--- ./jdk/test/com/sun/tools/attach/BasicTests.sh Mon Sep 08 12:16:34 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2005, 2011, 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 6173612 6273707 6277253 6335921 6348630 6342019 6381757
-# @summary Basic unit tests for the VM attach mechanism.
-#
-# @build BasicTests
-# @run shell BasicTests.sh
-
-if [ "${TESTSRC}" = "" ]
-then
- echo "TESTSRC not set. Test cannot execute. Failed."
- exit 1
-fi
-
-# Windows 2000 is a problem here, so we skip it, see 6962615
-osrev=`uname -a`
-if [ "`echo ${osrev} | grep 'CYGWIN[^ ]*-5\.0'`" != "" ] ; then
- echo "Treating as a pass, not testing Windows 2000"
- exit 0
-fi
-if [ "`echo ${osrev} | grep 'Windows'`" != "" ] ; then
- if [ "`echo ${osrev} | grep '5 00'`" != "" ] ; then
- echo "Treating as a pass, not testing Windows 2000"
- exit 0
- fi
-fi
-
-. ${TESTSRC}/CommonSetup.sh
-. ${TESTSRC}/ApplicationSetup.sh
-. ${TESTSRC}/AgentSetup.sh
-
-startApplication -Dattach.test=true
-# pid = process-id, port = shutdown port
-
-failures=0
-
-echo "Running tests ..."
-
-$JAVA -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \
- BasicTests $pid $agent $badagent $redefineagent 2>&1
-if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
-
-stopApplication $port
-
-# Add these info messages to $OUTPUTFILE just in case someone
-# looks at it and wonders about the failures. We have to do
-# this after the application is stopped because it is writing
-# to $OUTPUTFILE.
-(
-echo ""
-echo "INFO: Test 2 will cause error messages about SilverBullet.jar" \
- "and an agent failing to start."
-echo "INFO: Test 3 will cause error messages about BadAgent" \
- "including a RuntimeException and an InvocationTargetException."
-) >> ${OUTPUTFILE}
-
-if [ $failures = 0 ];
- then echo "All tests passed.";
- else echo "$failures test(s) failed:"; cat ${OUTPUTFILE};
-fi
-exit $failures
--- ./jdk/test/com/sun/tools/attach/CommonSetup.sh Mon Sep 08 12:16:34 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2005, 2010, 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.
-#
-
-
-#
-#
-# Common setup for the Attach API unit tests. Setups up the following variables:
-#
-# PS - path sep.
-# FS - file sep.
-# JAVA - java cmd.
-# JAVAC - javac cmd.
-# JAR - jar cmd.
-
-OS=`uname -s`
-case "$OS" in
- SunOS | Linux | Darwin )
- PS=":"
- FS="/"
- ;;
- Windows* )
- PS=";"
- OS="Windows"
- FS="\\"
- ;;
- CYGWIN* )
- PS=";"
- OS="Windows"
- FS="\\"
- isCygwin=true
- ;;
- * )
- echo "Unrecognized system!"
- exit 1;
- ;;
-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
-
-JAVA="${TESTJAVA}/bin/java"
-JAVAC="${TESTJAVA}/bin/javac"
-JAR="${TESTJAVA}/bin/jar"
-
--- ./jdk/test/com/sun/tools/attach/PermissionTest.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/com/sun/tools/attach/PermissionTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -21,39 +21,119 @@
* questions.
*/
-/*
- *
- *
- * Unit test for Attach API - this checks that a SecurityException is thrown as
- * expected.
- */
import com.sun.tools.attach.VirtualMachine;
import com.sun.tools.attach.AttachNotSupportedException;
import java.util.Properties;
+import java.io.File;
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.ProcessTools;
+import jdk.testlibrary.ProcessThread;
+/*
+ * @test
+ * @bug 6173612 6273707 6277253 6335921 6348630 6342019 6381757
+ * @summary Basic unit tests for the VM attach mechanism.
+ * @library /lib/testlibrary
+ * @run build Application Shutdown
+ * @run main PermissionTest
+ *
+ * Unit test for Attach API -
+ * this checks that a SecurityException is thrown as expected.
+ */
public class PermissionTest {
- public static void main(String args[]) throws Exception {
- SecurityManager sm = System.getSecurityManager();
- if (sm == null) {
- throw new RuntimeException("Test configuration error - no security manager set");
+
+ /*
+ * The actual test is in the nested class TestMain.
+ * The responsibility of this class is to:
+ * 1. Start the Application class in a separate process.
+ * 2. Find the pid and shutdown port of the running Application.
+ * 3. Run the tests in TstMain that will attach to the Application.
+ * 4. Shut down the Application.
+ */
+ public static void main(String args[]) throws Throwable {
+ final String pidFile ="TestPermission.Application.pid";
+ ProcessThread processThread = null;
+ RunnerUtil.ProcessInfo info = null;
+ try {
+ processThread = RunnerUtil.startApplication(pidFile);
+ info = RunnerUtil.readProcessInfo(pidFile);
+ runTests(info.pid);
+ } catch (Throwable t) {
+ System.out.println("TestPermission got unexpected exception: " + t);
+ t.printStackTrace();
+ throw t;
+ } finally {
+ // Make sure the Application process is stopped.
+ RunnerUtil.stopApplication(info.shutdownPort, processThread);
}
+ }
- String pid = args[0];
- boolean shouldFail = Boolean.parseBoolean(args[1]);
+ /**
+ * Runs the actual test the nested class TestMain.
+ * The test is run in a separate process because we need to add to the classpath.
+ */
+ private static void runTests(int pid) throws Throwable {
+ final String sep = File.separator;
- try {
- VirtualMachine.attach(pid).detach();
- if (shouldFail) {
- throw new RuntimeException("SecurityException should be thrown");
+ // Need to add jdk/lib/tools.jar to classpath.
+ String classpath =
+ System.getProperty("test.class.path", "") + File.pathSeparator +
+ System.getProperty("test.jdk", ".") + sep + "lib" + sep + "tools.jar";
+ String testSrc = System.getProperty("test.src", "") + sep;
+
+ // Use a policy that will NOT allow attach. Test will verify exception.
+ String[] args = {
+ "-classpath",
+ classpath,
+ "-Djava.security.manager",
+ String.format("-Djava.security.policy=%sjava.policy.deny", testSrc),
+ "PermissionTest$TestMain",
+ Integer.toString(pid),
+ "true" };
+ OutputAnalyzer output = ProcessTools.executeTestJvm(args);
+ output.shouldHaveExitValue(0);
+
+ // Use a policy that will allow attach.
+ args = new String[] {
+ "-classpath",
+ classpath,
+ "-Djava.security.manager",
+ String.format("-Djava.security.policy=%sjava.policy.allow", testSrc),
+ "PermissionTest$TestMain",
+ Integer.toString(pid),
+ "false" };
+ output = ProcessTools.executeTestJvm(args);
+ output.shouldHaveExitValue(0);
+ }
+
+ /**
+ * This is the actual test code. It will attach to the Application and verify
+ * that we get a SecurityException when that is expected.
+ */
+ public static class TestMain {
+ public static void main(String args[]) throws Exception {
+ SecurityManager sm = System.getSecurityManager();
+ if (sm == null) {
+ throw new RuntimeException("Test configuration error - no security manager set");
}
- System.out.println(" - attached to target VM as expected.");
- } catch (Exception x) {
- // AttachNotSupportedException thrown when no providers can be loaded
- if (shouldFail && ((x instanceof AttachNotSupportedException) ||
- (x instanceof SecurityException))) {
- System.out.println(" - exception thrown as expected.");
- } else {
- throw x;
+
+ String pid = args[0];
+ boolean shouldFail = Boolean.parseBoolean(args[1]);
+
+ try {
+ VirtualMachine.attach(pid).detach();
+ if (shouldFail) {
+ throw new RuntimeException("SecurityException should be thrown");
+ }
+ System.out.println(" - attached to target VM as expected.");
+ } catch (Exception x) {
+ // AttachNotSupportedException thrown when no providers can be loaded
+ if (shouldFail && ((x instanceof AttachNotSupportedException) ||
+ (x instanceof SecurityException))) {
+ System.out.println(" - exception thrown as expected.");
+ } else {
+ throw x;
+ }
}
}
}
--- ./jdk/test/com/sun/tools/attach/PermissionTests.sh Mon Sep 08 12:16:34 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2005, 2010, 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 6173612
-# @summary Security manager and permission tests for Attach API
-#
-# @build PermissionTest
-# @run shell PermissionTests.sh
-
-if [ "${TESTSRC}" = "" ]
-then
- echo "TESTSRC not set. Test cannot execute. Failed."
- exit 1
-fi
-
-. ${TESTSRC}/CommonSetup.sh
-. ${TESTSRC}/ApplicationSetup.sh
-
-failures=0
-
-# Start target VM
-startApplication
-# pid = process-id, port = shutdown port
-
-echo "Deny test"
-# deny
-$JAVA -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \
- -Djava.security.manager \
- -Djava.security.policy=${TESTSRC}/java.policy.deny \
- PermissionTest $pid true 2>&1
-if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
-
-# allow
-echo "Allow test"
-$JAVA -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \
- -Djava.security.manager \
- -Djava.security.policy=${TESTSRC}/java.policy.allow \
- PermissionTest $pid false 2>&1
-if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
-
-# Stop target VM
-stopApplication $port
-
-if [ $failures = 0 ];
- then echo "All tests passed.";
- else echo "$failures test(s) failed:"; cat ${OUTPUTFILE};
-fi
-exit $failures
--- ./jdk/test/com/sun/tools/attach/ProviderTest.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/com/sun/tools/attach/ProviderTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -21,24 +21,98 @@
* questions.
*/
-/*
- *
- *
- * Unit test for Attach API. Attaches to the given VM and performs a number
- * unit tests.
- */
+import java.io.File;
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.JDKToolLauncher;
+import jdk.testlibrary.ProcessTools;
import com.sun.tools.attach.VirtualMachine;
import com.sun.tools.attach.spi.AttachProvider;
+/*
+ * @test
+ * @bug 6173612 6273707 6277253 6335921 6348630 6342019 6381757
+ * @summary Basic unit tests for the VM attach mechanism.
+ * @library /lib/testlibrary
+ * @run build SimpleProvider
+ * @run main ProviderTest
+ *
+ * The test will attach and detach to/from the running Application.
+ */
public class ProviderTest {
- public static void main(String args[]) throws Exception {
- // deal with internal builds where classes are loaded from the
- // 'classes' directory rather than rt.jar
- ClassLoader cl = AttachProvider.class.getClassLoader();
- if (cl != ClassLoader.getSystemClassLoader()) {
- System.out.println("Attach API not loaded by system class loader - test skipped");
- return;
+
+ /*
+ * The actual tests are in the nested class TestMain below.
+ * The responsibility of this class is to:
+ * 1. Build the needed jar.
+ * 2. Run tests in ProviderTest.TestMain.
+ */
+ public static void main(String args[]) throws Throwable {
+ try {
+ buildJar();
+ runTests();
+ } catch (Throwable t) {
+ System.out.println("TestProvider got unexpected exception: " + t);
+ t.printStackTrace();
+ throw t;
}
- VirtualMachine.attach("simple:1234").detach();
+ }
+
+ /**
+ * Runs the actual tests in the nested class TestMain.
+ * We need to run the tests in a separate process,
+ * because we need to add to the classpath.
+ */
+ private static void runTests() throws Throwable {
+ final String sep = File.separator;
+ String testClassPath = System.getProperty("test.class.path", "");
+ String testClasses = System.getProperty("test.classes", "") + sep;
+ String jdkLib = System.getProperty("test.jdk", ".") + sep + "lib" + sep;
+
+ // Need to add SimpleProvider.jar and tools.jar to classpath.
+ String classpath =
+ testClassPath + File.pathSeparator +
+ testClasses + "SimpleProvider.jar" + File.pathSeparator +
+ jdkLib + "tools.jar";
+
+ String[] args = {
+ "-classpath",
+ classpath,
+ "ProviderTest$TestMain" };
+ OutputAnalyzer output = ProcessTools.executeTestJvm(args);
+ output.shouldHaveExitValue(0);
+ }
+
+ /**
+ * Will build the SimpleProvider.jar.
+ */
+ private static void buildJar() throws Throwable {
+ final String sep = File.separator;
+ String testClasses = System.getProperty("test.classes", "?") + sep;
+ String testSrc = System.getProperty("test.src", "?") + sep;
+ String serviceDir = "META-INF" + sep + "services" + sep;
+
+ RunnerUtil.createJar(
+ "-cf", testClasses + "SimpleProvider.jar",
+ "-C", testClasses, "SimpleProvider.class",
+ "-C", testClasses, "SimpleVirtualMachine.class",
+ "-C", testSrc,
+ serviceDir + "com.sun.tools.attach.spi.AttachProvider");
+ }
+
+ /**
+ * This is the actual test code that attaches to the running Application.
+ * This class is run in a separate process.
+ */
+ public static class TestMain {
+ public static void main(String args[]) throws Exception {
+ // deal with internal builds where classes are loaded from the
+ // 'classes' directory rather than rt.jar
+ ClassLoader cl = AttachProvider.class.getClassLoader();
+ if (cl != ClassLoader.getSystemClassLoader()) {
+ System.out.println("Attach API not loaded by system class loader - test skipped");
+ return;
+ }
+ VirtualMachine.attach("simple:1234").detach();
+ }
}
}
--- ./jdk/test/com/sun/tools/attach/ProviderTests.sh Mon Sep 08 12:16:34 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-#
-# Copyright (c) 2005, 2010, 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 6173612
-# @summary AttachProvider unit tests
-#
-# @build ProviderTest SimpleProvider
-# @run shell ProviderTests.sh
-
-if [ "${TESTSRC}" = "" ]
-then
- echo "TESTSRC not set. Test cannot execute. Failed."
- exit 1
-fi
-
-. ${TESTSRC}/CommonSetup.sh
-
-echo "Creating JAR file ..."
-
-$JAR -cf ${TESTCLASSES}/SimpleProvider.jar \
- -C ${TESTCLASSES} SimpleProvider.class \
- -C ${TESTCLASSES} SimpleVirtualMachine.class \
- -C "${TESTSRC}" META-INF/services/com.sun.tools.attach.spi.AttachProvider
-
-echo "Running test ..."
-
-$JAVA -classpath \
- "${TESTCLASSES}${PS}${TESTCLASSES}/SimpleProvider.jar${PS}${TESTJAVA}/lib/tools.jar" \
- ProviderTest
-
--- ./jdk/test/com/sun/tools/attach/RedefineAgent.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/com/sun/tools/attach/RedefineAgent.java Mon Jan 05 11:57:27 2015 -0800
@@ -43,15 +43,15 @@
public class RedefineAgent implements ClassFileTransformer {
static byte[] classfilebytes;
- static final String targetName = "java.math.BigInteger";
- static final String targetNameSlashes = "java/math/BigInteger";
+ static final String targetName = "RedefineDummy";
+ static final String targetNameSlashes = "RedefineDummy";
static boolean gotRedefineTransform = false;
// test transform and capture class bytes for redefine
public byte[] transform(ClassLoader loader,
String className,
Class<?> classBeingRedefined,
- ProtectionDomain protectionDomain,
+ ProtectionDomain protectionDomain,
byte[] classfileBuffer) {
if (className.equals(targetNameSlashes)) {
if (classBeingRedefined == null) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/com/sun/tools/attach/RedefineDummy.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,31 @@
+/*
+ * 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.
+ */
+
+/*
+ * Simple dummy class used to test class retransform.
+ */
+public class RedefineDummy {
+ public String toString() {
+ return "RedefineDummy";
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/com/sun/tools/attach/RunnerUtil.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,195 @@
+/*
+ * 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.io.IOException;
+import java.io.File;
+import java.nio.file.Files;
+import java.util.Arrays;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.ProcessTools;
+import jdk.testlibrary.Utils;
+import jdk.testlibrary.ProcessThread;
+
+/*
+ * Utility functions for test runners.
+ * (Test runner = class that launch a test)
+ */
+public class RunnerUtil {
+
+ /**
+ * The Application process must be run concurrently with our tests since
+ * the tests will attach to the Application.
+ * We will run the Application process in a separate thread.
+ *
+ * The Application must be started with flag "-Xshare:off" for the Retransform
+ * test in TestBasics to pass on all platforms.
+ *
+ * The Application will write its pid and shutdownPort in the given outFile.
+ */
+ public static ProcessThread startApplication(String outFile, String... additionalOpts) throws Throwable {
+ String classpath = System.getProperty("test.class.path", ".");
+ String[] myArgs = concat(additionalOpts, new String [] { "-Dattach.test=true", "-classpath", classpath, "Application", outFile });
+ String[] args = Utils.addTestJavaOpts(myArgs);
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(args);
+ ProcessThread pt = new ProcessThread("runApplication", pb);
+ pt.start();
+ return pt;
+ }
+
+ public static String[] concat(String[] a, String[] b) {
+ if (a == null) {
+ return b;
+ }
+ if (b == null) {
+ return a;
+ }
+ int aLen = a.length;
+ int bLen = b.length;
+ String[] c = new String[aLen + bLen];
+ System.arraycopy(a, 0, c, 0, aLen);
+ System.arraycopy(b, 0, c, aLen, bLen);
+ return c;
+ }
+
+ /**
+ * Will stop the running Application.
+ * First tries to shutdown nicely by connecting to the shut down port.
+ * If that fails, the process will be killed hard with stopProcess().
+ *
+ * If the nice shutdown fails, then an Exception is thrown and the test should fail.
+ *
+ * @param port The shut down port.
+ * @param processThread The process to stop.
+ */
+ public static void stopApplication(int port, ProcessThread processThread) throws Throwable {
+ if (processThread == null) {
+ System.out.println("RunnerUtil.stopApplication ignored since proc is null");
+ return;
+ }
+ try {
+ System.out.println("RunnerUtil.stopApplication waiting to for shutdown");
+ OutputAnalyzer output = ProcessTools.executeTestJvm(
+ "-classpath",
+ System.getProperty("test.class.path", "."),
+ "Shutdown",
+ Integer.toString(port));
+ // Verify that both the Shutdown command and the Application finished ok.
+ output.shouldHaveExitValue(0);
+ processThread.joinAndThrow();
+ processThread.getOutput().shouldHaveExitValue(0);
+ } catch (Throwable t) {
+ System.out.println("RunnerUtil.stopApplication failed. Will kill it hard: " + t);
+ processThread.stopProcess();
+ throw t;
+ }
+ }
+
+ /**
+ * Creates a jar file.
+ * @param args Command to the jar tool.
+ */
+ public static void createJar(String... args) {
+ System.out.println("Running: jar " + Arrays.toString(args));
+ sun.tools.jar.Main jar = new sun.tools.jar.Main(System.out, System.err, "jar");
+ if (!jar.run(args)) {
+ throw new RuntimeException("jar failed: args=" + Arrays.toString(args));
+ }
+ }
+
+ /**
+ * Read process info for the running Application.
+ * The Application writes its info to a file with this format:
+ * shutdownPort=42994
+ * pid=19597
+ * done
+ *
+ * The final "done" is used to make sure the complete file has been written
+ * before we try to read it.
+ * This function will wait until the file is available.
+ *
+ * @param filename Path to file to read.
+ * @return The ProcessInfo containing pid and shutdownPort.
+ */
+ public static ProcessInfo readProcessInfo(String filename) throws Throwable {
+ System.out.println("Reading port and pid from file: " + filename);
+ File file = new File(filename);
+ String content = null;
+
+ // Read file or wait for it to be created.
+ while (true) {
+ content = readFile(file);
+ if (content != null && content.indexOf("done") >= 0) {
+ break;
+ }
+ Thread.sleep(100);
+ }
+
+ ProcessInfo info = new ProcessInfo();
+ // search for a line with format: key=nnn
+ Pattern pattern = Pattern.compile("(\\w*)=([0-9]+)\\r?\\n");
+ Matcher matcher = pattern.matcher(content);
+ while (matcher.find()) {
+ String key = matcher.group(1);
+ int value = Integer.parseInt(matcher.group(2));
+ if ("pid".equals(key)) {
+ info.pid = value;
+ } else if ("shutdownPort".equals(key)) {
+ info.shutdownPort = value;
+ }
+ }
+ System.out.println("processInfo.pid:" + info.pid);
+ System.out.println("processInfo.shutdownPort:" + info.shutdownPort);
+ return info;
+ }
+
+ /**
+ * Read the content of a file.
+ * @param file The file to read.
+ * @return The file content or null if file does not exists.
+ */
+ public static String readFile(File file) throws IOException {
+ if (!file.exists()) {
+ return null;
+ }
+ try {
+ byte[] bytes = Files.readAllBytes(file.toPath());
+ String content = new String(bytes);
+ return content;
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw e;
+ }
+ }
+
+ /**
+ * Helper class with info of the running Application.
+ */
+ public static class ProcessInfo {
+ public int pid = -1;
+ public int shutdownPort = -1;
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/com/sun/tools/attach/TempDirTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,169 @@
+/*
+ * 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.
+ */
+
+import com.sun.tools.attach.*;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Properties;
+import java.util.List;
+import java.io.File;
+
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.ProcessTools;
+import jdk.testlibrary.ProcessThread;
+
+/*
+ * @test
+ * @bug 8033104
+ * @summary Test to make sure attach and jvmstat works correctly when java.io.tmpdir is set
+ * @library /lib/testlibrary
+ * @run build Application Shutdown RunnerUtil
+ * @run main/timeout=10 TempDirTest
+ */
+
+public class TempDirTest {
+
+ public static void main(String args[]) throws Throwable {
+
+ Path clientTmpDir = Files.createTempDirectory("TempDirTest-client");
+ clientTmpDir.toFile().deleteOnExit();
+ Path targetTmpDir = Files.createTempDirectory("TempDirTest-target");
+ targetTmpDir.toFile().deleteOnExit();
+
+ // run the test with all possible combinations of setting java.io.tmpdir
+ runExperiment(null, null);
+ runExperiment(clientTmpDir, null);
+ runExperiment(clientTmpDir, targetTmpDir);
+ runExperiment(null, targetTmpDir);
+
+ }
+
+ private static int counter = 0;
+
+ /*
+ * The actual test is in the nested class TestMain.
+ * The responsibility of this class is to:
+ * 1. Start the Application class in a separate process.
+ * 2. Find the pid and shutdown port of the running Application.
+ * 3. Launches the tests in nested class TestMain that will attach to the Application.
+ * 4. Shut down the Application.
+ */
+ public static void runExperiment(Path clientTmpDir, Path targetTmpDir) throws Throwable {
+
+ System.out.print("### Running tests with overridden tmpdir for");
+ System.out.print(" client: " + (clientTmpDir == null ? "no" : "yes"));
+ System.out.print(" target: " + (targetTmpDir == null ? "no" : "yes"));
+ System.out.println(" ###");
+
+ final String pidFile = "TempDirTest.Application.pid-" + counter++;
+ ProcessThread processThread = null;
+ RunnerUtil.ProcessInfo info = null;
+ try {
+ String[] tmpDirArg = null;
+ if (targetTmpDir != null) {
+ tmpDirArg = new String[] {"-Djava.io.tmpdir=" + targetTmpDir};
+ }
+ processThread = RunnerUtil.startApplication(pidFile, tmpDirArg);
+ info = RunnerUtil.readProcessInfo(pidFile);
+ launchTests(info.pid, clientTmpDir);
+ } catch (Throwable t) {
+ System.out.println("TempDirTest got unexpected exception: " + t);
+ t.printStackTrace();
+ throw t;
+ } finally {
+ // Make sure the Application process is stopped.
+ RunnerUtil.stopApplication(info.shutdownPort, processThread);
+ }
+ }
+
+ /**
+ * Runs the actual tests in nested class TestMain.
+ * The reason for running the tests in a separate process
+ * is that we need to modify the class path and
+ * the -Djava.io.tmpdir property.
+ */
+ private static void launchTests(int pid, Path clientTmpDir) throws Throwable {
+ final String sep = File.separator;
+
+ // Need to add jdk/lib/tools.jar to classpath.
+ String classpath =
+ System.getProperty("test.class.path", "") + File.pathSeparator +
+ System.getProperty("test.jdk", ".") + sep + "lib" + sep + "tools.jar";
+
+ String[] tmpDirArg = null;
+ if (clientTmpDir != null) {
+ tmpDirArg = new String [] {"-Djava.io.tmpdir=" + clientTmpDir};
+ }
+
+ // Arguments : [-Djava.io.tmpdir=] -classpath cp TempDirTest$TestMain pid
+ String[] args = RunnerUtil.concat(
+ tmpDirArg,
+ new String[] {
+ "-classpath",
+ classpath,
+ "TempDirTest$TestMain",
+ Integer.toString(pid) });
+ OutputAnalyzer output = ProcessTools.executeTestJvm(args);
+ output.shouldHaveExitValue(0);
+ }
+
+ /**
+ * This is the actual test. It will attach to the running Application
+ * and perform a number of basic attach tests.
+ */
+ public static class TestMain {
+ public static void main(String args[]) throws Exception {
+ String pid = args[0];
+
+ // Test 1 - list method should list the target VM
+ System.out.println(" - Test: VirtualMachine.list");
+ List<VirtualMachineDescriptor> l = VirtualMachine.list();
+ boolean found = false;
+ for (VirtualMachineDescriptor vmd: l) {
+ if (vmd.id().equals(pid)) {
+ found = true;
+ break;
+ }
+ }
+ if (found) {
+ System.out.println(" - " + pid + " found.");
+ } else {
+ throw new RuntimeException(pid + " not found in VM list");
+ }
+
+ // Test 2 - try to attach and verify connection
+
+ System.out.println(" - Attaching to application ...");
+ VirtualMachine vm = VirtualMachine.attach(pid);
+
+ System.out.println(" - Test: system properties in target VM");
+ Properties props = vm.getSystemProperties();
+ String value = props.getProperty("attach.test");
+ if (value == null || !value.equals("true")) {
+ throw new RuntimeException("attach.test property not set");
+ }
+ System.out.println(" - attach.test property set as expected");
+ }
+ }
+}
--- ./jdk/test/com/sun/tools/attach/java.policy.allow Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/com/sun/tools/attach/java.policy.allow Mon Jan 05 11:57:27 2015 -0800
@@ -13,7 +13,6 @@
permission java.lang.RuntimePermission "accessClassInPackage.sun.jvmstat.monitor";
permission java.lang.RuntimePermission "loadLibrary.attach";
permission java.util.PropertyPermission "sun.jvmstat.*", "read";
- permission java.util.PropertyPermission "java.io.tmpdir", "read";
/* to read configuration file in META-INF/services, and write/delete .attach_pid<pid> */
permission java.io.FilePermission "<<ALL FILES>>", "read,write,delete";
--- ./jdk/test/com/sun/tools/attach/java.policy.deny Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/com/sun/tools/attach/java.policy.deny Mon Jan 05 11:57:27 2015 -0800
@@ -11,7 +11,6 @@
permission java.lang.RuntimePermission "accessClassInPackage.sun.tools.attach";
permission java.lang.RuntimePermission "loadLibrary.attach";
permission java.util.PropertyPermission "sun.jvmstat.*", "read";
- permission java.util.PropertyPermission "java.io.tmpdir", "read";
/* to read configuration file in META-INF/services, and write/delete .attach_pid<pid> */
permission java.io.FilePermission "<<ALL FILES>>", "read,write,delete";
--- ./jdk/test/demo/zipfs/basic.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/demo/zipfs/basic.sh Mon Jan 05 11:57:27 2015 -0800
@@ -40,7 +40,7 @@
OS=`uname -s`
case "$OS" in
- Windows_* )
+ Windows_* | CYGWIN* )
CLASSPATH="${TESTCLASSES};${ZIPFS}"
;;
* )
--- ./jdk/test/java/awt/FileDialog/SaveFileNameOverrideTest/SaveFileNameOverrideTest.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/awt/FileDialog/SaveFileNameOverrideTest/SaveFileNameOverrideTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,6 +1,29 @@
+/*
+ * 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 6998877
+ @bug 6998877 8022531
@summary After double-click on the folder names, FileNameOverrideTest FAILED
@author Sergey.Bylokhov@oracle.com area=awt.filedialog
@library ../../regtesthelpers
@@ -36,7 +59,8 @@
String[] instructions = {
"1) Click on 'Show File Dialog' button. A file dialog will come up.",
- "2) Double-click on '" + clickDirName + "' and click OK.",
+ "2) Double-click on '" + clickDirName + "' and click a confirmation",
+ " button, it can be 'OK', 'Save' or any other platform-dependent name.",
"3) See result of the test below"
};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/awt/Focus/8044614/TestApplet.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ */
+
+import java.applet.Applet;
+import java.awt.TextField;
+
+public class TestApplet extends Applet {
+ TextField textField = null;
+
+ public void init() {
+ textField = new TextField(25);
+ add(textField);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/awt/Focus/8044614/applet1.html Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,37 @@
+<!--
+ 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.
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <title>First Applet</title>
+</head>
+ <body>
+ <applet
+ code="TestApplet.class"
+ width="400"
+ height="200"/>
+ </applet>
+ </body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/awt/Focus/8044614/applet2.html Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,37 @@
+<!--
+ 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.
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <title>Second Applet</title>
+</head>
+ <body>
+ <applet
+ code="TestApplet.class"
+ width="400"
+ height="200"/>
+ </applet>
+ </body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/awt/Focus/8044614/bug8044614.html Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,36 @@
+<!--
+ 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.
+-->
+
+<html>
+<head>
+<title>bug8044614</title>
+</head>
+<body>
+
+<h1>bug8044614</h1>
+
+<p> See the dialog box (usually in upper left corner) for instructions</p>
+
+<APPLET CODE="bug8044614.class" WIDTH=200 HEIGHT=200></APPLET>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/awt/Focus/8044614/bug8044614.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,56 @@
+/*
+ * 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 8044614
+ * @summary Tests focus transfer between applets in different browser windows
+ * @author Dmitry Markov
+ * @library ../../regtesthelpers
+ * @build Sysout
+ * @run applet/manual=yesno bug8044614.html
+ */
+
+import javax.swing.JApplet;
+
+import test.java.awt.regtesthelpers.Sysout;
+
+public class bug8044614 extends JApplet {
+ public void init() {
+ String[] instructions = {
+ "(1) Go to the test directory test/java/awt/Focus/8044614",
+ "(2) Compile source file: javac TestApplet.java",
+ "(3) Open the \"main.html\" file in the browser",
+ "(4) Click the \"Start First Applet\" link to open the first applet window",
+ "(5) Wait for the applet to start (press \"Run\" to any security alerts that appears)",
+ "(6) Enter \"Hello\" to the text field",
+ "(7) Click the \"Start Second Applet)\" link to open the second applet window",
+ "(8) Wait for the applet to start (press \"Run\" to any security alerts that appears)",
+ "(9) Enter \"World\" to the text field",
+ "(10) Go back to the first applet and make sure you can enter some text to the text field"
+ };
+
+ Sysout.createDialogWithInstructions(instructions);
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/awt/Focus/8044614/main.html Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,46 @@
+<!--
+ 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.
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <title>Applet Focus Bug main window</title>
+ <script language="JavaScript">
+ function openWindow(strURL, strWindowName, strWindowFeatures) {
+ var win = window.open(strURL, strWindowName, strWindowFeatures);
+ }
+ </script>
+
+</head>
+ <body>
+ <table>
+ <tr>
+ <td><a href="javascript:openWindow('applet1.html', '', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=400, height=400, top=0, left=0, hide=no')">Start First Applet</a></td>
+ </tr>
+ <tr>
+ <td><a href="javascript:openWindow('applet2.html', '', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=400, height=400, top=0, left=350, hide=no')">Start Second Applet</a></td>
+ </tr>
+ </table>
+ </body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/awt/Focus/NPEInKFMOnButtonClickInDialogTest/NPEInKFMOnButtonClickInDialogTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,135 @@
+/*
+ * 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 8061954
+ @summary Button does not get the focus on a mouse click, and NPE is thrown in KFM
+ @author Anton Litvinov
+*/
+
+import java.awt.Container;
+import java.awt.FlowLayout;
+import java.awt.Frame;
+import java.awt.Point;
+import java.awt.Robot;
+import java.awt.Toolkit;
+import java.awt.event.InputEvent;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.SwingUtilities;
+
+import sun.awt.OSInfo;
+import sun.awt.SunToolkit;
+
+public class NPEInKFMOnButtonClickInDialogTest {
+ private static Frame frame = null;
+ private static JDialog dialog = null;
+ private static JButton cancelBtn = null;
+ private static Point clickPoint = null;
+ private static volatile Boolean cancelBtnIsFocused = null;
+
+ public static void main(String[] args) {
+ OSInfo.OSType osType = OSInfo.getOSType();
+ if ((osType != OSInfo.OSType.LINUX) && (osType != OSInfo.OSType.SOLARIS)) {
+ System.out.println("This test is only for Linux OS and Solaris OS.");
+ return;
+ }
+
+ ThreadGroup mainThreadGroup = Thread.currentThread().getThreadGroup();
+ Thread t = new Thread(new ThreadGroup(mainThreadGroup, "TestThreadGroup"), new Runnable() {
+ public void run() {
+ try {
+ SunToolkit.createNewAppContext();
+ doTest();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ });
+ t.start();
+
+ try {
+ t.join();
+ } catch (InterruptedException ie) {
+ ie.printStackTrace();
+ }
+
+ if (cancelBtnIsFocused == null) {
+ throw new RuntimeException("Test failed for an unknown reason, look at error log.");
+ } else if (cancelBtnIsFocused.booleanValue() == false) {
+ throw new RuntimeException("'Cancel' button did not become a focus owner.");
+ }
+ }
+
+ private static void doTest() throws Exception {
+ final SunToolkit toolkit = (SunToolkit)Toolkit.getDefaultToolkit();
+ final Robot robot = new Robot();
+ robot.setAutoDelay(50);
+
+ try {
+ frame = new Frame("Frame of NPEInKFMOnButtonClickInDialogTest");
+ frame.setSize(100, 100);
+ frame.setVisible(true);
+ toolkit.realSync();
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ dialog = new JDialog(frame,
+ "Dialog of NPEInKFMOnButtonClickInDialogTest", false);
+ Container content = dialog.getContentPane();
+ content.setLayout(new FlowLayout());
+ content.add(new JButton("Run"));
+ content.add(cancelBtn = new JButton("Cancel"));
+ dialog.pack();
+ dialog.setVisible(true);
+ }
+ });
+ toolkit.realSync();
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ Point p = cancelBtn.getLocationOnScreen();
+ clickPoint = new Point(p.x + cancelBtn.getWidth() / 2,
+ p.y + cancelBtn.getHeight() / 2);
+ }
+ });
+ robot.mouseMove(clickPoint.x, clickPoint.y);
+ robot.mousePress(InputEvent.BUTTON1_MASK);
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
+ toolkit.realSync();
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ cancelBtnIsFocused = cancelBtn.isFocusOwner();
+ }
+ });
+ } finally {
+ if (dialog != null) {
+ dialog.dispose();
+ }
+ if (frame != null) {
+ frame.dispose();
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/awt/Focus/SortingFPT/JDK8048887.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,132 @@
+/*
+ * 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 8048887
+ @summary Tests SortingFTP for an exception caused by the tim-sort algo.
+ @author anton.tarasov: area=awt.focus
+ @run main JDK8040632
+*/
+
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import java.awt.Dimension;
+import java.awt.Color;
+import java.awt.GridBagLayout;
+import java.awt.GridBagConstraints;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+public class JDK8048887 {
+
+ static volatile boolean passed = true;
+
+ public static void main(String[] args) {
+ JDK8048887 app = new JDK8048887();
+ app.start();
+ }
+
+ public void start() {
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ SwingUtilities.invokeLater(() -> {
+ // Catch the original exception which sounds like:
+ // java.lang.IllegalArgumentException: Comparison method violates its general contract!
+ Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+ public void uncaughtException(Thread t, Throwable e) {
+ e.printStackTrace();
+ if (e instanceof IllegalArgumentException) {
+ passed = false;
+ latch.countDown();
+ }
+ }
+ });
+
+ TestDialog d = new TestDialog();
+ // It's expected that the dialog is focused on start.
+ // The listener is called after the FTP completes processing and the bug is reproduced or not.
+ d.addWindowFocusListener(new WindowAdapter() {
+ public void windowGainedFocus(WindowEvent e) {
+ latch.countDown();
+ }
+ });
+ d.setVisible(true);
+ });
+
+ try {
+ latch.await(5, TimeUnit.SECONDS);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+
+ if (passed)
+ System.out.println("Test passed.");
+ else
+ throw new RuntimeException("Test failed!");
+ }
+}
+
+class TestDialog extends JFrame {
+
+ // The layout of the components reproduces the transitivity issue
+ // with SortingFocusTraversalPolicy relying on the tim-sort algo.
+
+ private static int[] Xs = new int[] {71, 23, 62, 4, 79, 39, 34, 9, 84, 58, 30, 34, 38, 15, 69, 10, 44, 95, 70, 54,
+ 44, 62, 77, 64, 70, 83, 31, 48, 96, 54, 40, 3, 60, 58, 3, 20, 94, 54, 26, 19, 48, 47, 12, 70, 86, 43, 71, 97, 19,
+ 69, 90, 22, 43, 76, 10, 60, 29, 49, 9, 9, 15, 73, 85, 80, 81, 35, 87, 43, 17, 57, 38, 44, 29, 86, 96, 15, 57, 26,
+ 27, 78, 26, 87, 43, 6, 4, 16, 57, 99, 32, 86, 96, 5, 50, 69, 12, 4, 36, 84, 71, 60, 22, 46, 11, 44, 87, 3, 23, 14,
+ 43, 25, 32, 44, 11, 18, 77, 2, 51, 87, 88, 53, 69, 37, 14, 10, 25, 73, 39, 33, 91, 51, 96, 9, 74, 66, 70, 42, 72,
+ 7, 82, 40, 91, 33, 83, 54, 33, 50, 83, 1, 81, 32, 66, 11, 75, 56, 53, 45, 1, 69, 46, 31, 79, 58, 12, 20, 92, 49,
+ 50, 90, 33, 8, 43, 93, 72, 78, 9, 56, 84, 60, 30, 39, 33, 88, 84, 56, 49, 47, 4, 90, 57, 6, 23, 96, 37, 88, 22, 79,
+ 35, 80, 45, 55};
+
+ public TestDialog() {
+ JPanel panel = new JPanel(new GridBagLayout());
+ GridBagConstraints gbc = new GridBagConstraints();
+ for (int i=0; i < Xs.length; i++) {
+ gbc.gridx = Xs[i];
+ gbc.gridy = 100 - gbc.gridx;
+ panel.add(new MyComponent(), gbc);
+ }
+ getRootPane().getContentPane().add(panel);
+ pack();
+ }
+
+ public static class MyComponent extends JPanel {
+ private final static Dimension SIZE = new Dimension(1,1);
+
+ public MyComponent() {
+ setBackground(Color.BLACK);
+ setOpaque(true);
+ }
+
+ @Override
+ public Dimension getPreferredSize() {
+ return SIZE;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/awt/List/ListGarbageCollectionTest/AwtListGarbageCollectionTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,72 @@
+/*
+ * 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 8040076
+ * @summary AwtList not garbage collected
+ * @run main/othervm -Xmx100m AwtListGarbageCollectionTest
+ */
+
+import java.awt.*;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.lang.ref.WeakReference;
+
+public class AwtListGarbageCollectionTest {
+ public static void main(String[] args) {
+ Frame frame = new Frame("List leak test");
+ try {
+ test(frame);
+ } finally {
+ frame.dispose();
+ }
+ }
+
+ private static void test(Frame frame) {
+ WeakReference<List> weakListRef = null;
+ try {
+ frame.setSize(300, 200);
+ frame.setVisible(true);
+
+ List strongListRef = new List();
+ frame.add(strongListRef);
+ strongListRef.setMultipleMode(true);
+ frame.remove(strongListRef);
+ weakListRef = new WeakReference<List>(strongListRef);
+ strongListRef = null;
+
+ //make out of memory to force gc
+ String veryLongString = new String(new char[100]);
+ while (true) {
+ veryLongString += veryLongString;
+ }
+ } catch (OutOfMemoryError e) {
+ if (weakListRef == null) {
+ throw new RuntimeException("Weak list ref wasn't created");
+ } else if (weakListRef.get() != null) {
+ throw new RuntimeException("List wasn't garbage collected");
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/awt/Mouse/MouseComboBoxTest/MouseComboBoxTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,138 @@
+/*
+ * 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 8032872
+ * @summary Tests JComboBox selection via the mouse
+ * @author Dmitry Markov
+ */
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import javax.swing.plaf.basic.BasicComboPopup;
+import javax.swing.plaf.basic.ComboPopup;
+import javax.swing.plaf.metal.MetalComboBoxUI;
+import javax.swing.plaf.metal.MetalLookAndFeel;
+import java.awt.*;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+
+public class MouseComboBoxTest {
+ private static final String[] items = {"One", "Two", "Three", "Four", "Five"};
+
+ private static SunToolkit toolkit = null;
+ private static Robot robot = null;
+ private static JFrame frame = null;
+ private static JComboBox comboBox = null;
+ private static MyComboBoxUI comboBoxUI = null;
+
+ public static void main(String[] args) throws Exception {
+ toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ robot = new Robot();
+ robot.setAutoDelay(50);
+
+ UIManager.setLookAndFeel(new MetalLookAndFeel());
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ createAndShowGUI();
+ }
+ });
+ toolkit.realSync();
+
+ for (int i = 0; i < items.length; i++) {
+ // Open popup
+ robot.keyPress(KeyEvent.VK_DOWN);
+ robot.keyRelease(KeyEvent.VK_DOWN);
+ toolkit.realSync();
+
+ Point point = getItemPointToClick(i);
+ robot.mouseMove(point.x, point.y);
+ robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
+ robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
+ toolkit.realSync();
+
+ if (i != getSelectedIndex()) {
+ throw new RuntimeException("Test Failed! Incorrect value of selected index = " + getSelectedIndex() +
+ ", expected value = " + i);
+ }
+ }
+ }
+
+ private static Point getItemPointToClick(final int item) throws Exception {
+ final Point[] result = new Point[1];
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ BasicComboPopup popup = (BasicComboPopup)comboBoxUI.getComboPopup();
+ Point point = popup.getLocationOnScreen();
+ Dimension size = popup.getSize();
+
+ int step = size.height / items.length;
+ point.x += size.width / 2;
+ point.y += step / 2 + step * item;
+ result[0] = point;
+ }
+ });
+ return result[0];
+ }
+
+ private static int getSelectedIndex() throws Exception {
+ final int[] result = new int[1];
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ result[0] = comboBox.getSelectedIndex();
+ }
+ });
+ return result[0];
+ }
+
+ private static void createAndShowGUI() {
+ frame = new JFrame("MouseComboBoxTest");
+
+ comboBox = new JComboBox(items);
+ comboBox.setEditable(true);
+ comboBoxUI = new MyComboBoxUI();
+ comboBox.setUI(comboBoxUI);
+
+ frame.pack();
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.setVisible(true);
+
+ JWindow window = new JWindow(frame);
+ window.add(comboBox);
+ window.pack();
+ window.setVisible(true);
+ }
+
+ private static class MyComboBoxUI extends MetalComboBoxUI {
+ public ComboPopup getComboPopup() {
+ return popup;
+ }
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,84 @@
+/*
+ * 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.awt.AWTException;
+import java.awt.Color;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.Point;
+import java.awt.Robot;
+import java.awt.Toolkit;
+import java.awt.Window;
+
+import sun.awt.SunToolkit;
+
+/**
+ * @test
+ * @bug 8001472
+ * @summary Background of the window should not depend from the paint()/update()
+ * @author Sergey Bylokhov
+ */
+public final class BackgroundIsNotUpdated extends Window {
+
+ public BackgroundIsNotUpdated(final Frame owner) {
+ super(owner);
+ }
+
+ @Override
+ public void paint(final Graphics ignored) {
+ // Intentionally left blank
+ }
+
+ @Override
+ public void update(final Graphics ignored) {
+ // Intentionally left blank
+ }
+
+ public static void main(final String[] args) throws AWTException {
+ final Window window = new BackgroundIsNotUpdated(null);
+ window.setSize(300, 300);
+ window.setLocationRelativeTo(null);
+ window.setVisible(true);
+ sleep();
+ window.setBackground(Color.GREEN);
+ sleep();
+ final Robot robot = new Robot();
+ robot.setAutoDelay(200);
+ Point point = window.getLocationOnScreen();
+ Color color = robot.getPixelColor(point.x + window.getWidth() / 2,
+ point.y + window.getHeight() / 2);
+ window.dispose();
+ if (!color.equals(Color.GREEN)) {
+ throw new RuntimeException(
+ "Expected: " + Color.GREEN + " , Actual: " + color);
+ }
+ }
+
+ private static void sleep() {
+ try {
+ ((SunToolkit) Toolkit.getDefaultToolkit()).realSync();
+ Thread.sleep(1000);
+ } catch (InterruptedException ignored) {
+ }
+ }
+}
--- ./jdk/test/java/awt/Window/Grab/GrabTest.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/awt/Window/Grab/GrabTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -40,7 +40,10 @@
public class GrabTest {
private static Frame f;
private static Frame f1;
+ private static Frame frame;
private static Window w;
+ private static Window window1;
+ private static Window window2;
private static Button b;
private static Robot robot;
@@ -98,6 +101,15 @@
f.setVisible(true);
w.setVisible(true);
+ frame = new Frame();
+ window1 = new Window(frame);
+ window1.setBounds(0, 0, 100, 100);
+ window1.setBackground(Color.blue);
+
+ window2 = new Window(window1);
+ window2.setBounds(0, 0, 50, 50);
+ window2.setBackground(Color.green);
+
tk = (sun.awt.SunToolkit)Toolkit.getDefaultToolkit();
try {
@@ -175,7 +187,7 @@
// 6. Check that press on the outside area causes ungrab
Point loc = f.getLocationOnScreen();
- robot.mouseMove(loc.x + 100, loc.y + f.getSize().height + 1);
+ robot.mouseMove(loc.x + 100, loc.y + f.getSize().height + 10);
Util.waitForIdle(robot);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.delay(50);
@@ -196,6 +208,24 @@
passed = false;
System.err.println("Failure: [7] Window disposal didn't cause ungrab");
}
+ ungrabbed = false;
+
+
+ // 8. Check that mouse click on subwindow does not cause ungrab
+ frame.setVisible(true);
+ window1.setVisible(true);
+ window2.setVisible(true);
+ Util.waitForIdle(robot);
+
+ tk.grab(window1);
+
+ Util.clickOnComp(window2, robot);
+ Util.waitForIdle(robot);
+
+ if (ungrabbed) {
+ passed = false;
+ System.err.println("Failure: [8] Press on the subwindow caused ungrab");
+ }
if (passed) {
System.out.println("Test passed.");
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/awt/event/InputEvent/EventWhenTest/EventWhenTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,132 @@
+/*
+ * 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.
+ */
+
+import sun.awt.SunToolkit;
+
+import java.awt.*;
+import java.awt.event.AWTEventListener;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+
+/*
+ * @test
+ * @bug 8046495
+ * @summary Verifies that mouse/key events has always increasing 'when' timestamps
+ * @author Anton Nashatyrev
+ * @run main EventWhenTest
+ */
+public class EventWhenTest {
+
+ private static volatile int eventsCount = 0;
+ private static volatile boolean failed = false;
+
+ static {
+ Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
+ long lastWhen = 0;
+
+ @Override
+ public void eventDispatched(AWTEvent event) {
+ long curWhen;
+ if (event instanceof KeyEvent) {
+ curWhen = ((KeyEvent) event).getWhen();
+ } else if (event instanceof MouseEvent) {
+ curWhen = ((MouseEvent) event).getWhen();
+ } else {
+ return;
+ }
+
+ eventsCount++;
+
+ if (curWhen < lastWhen) {
+ System.err.println("FAILED: " + curWhen + " < " + lastWhen +
+ " for " + event);
+ failed = true;
+ } else {
+ lastWhen = curWhen;
+ }
+ }
+ }, AWTEvent.KEY_EVENT_MASK | AWTEvent.MOUSE_EVENT_MASK);
+ }
+
+ public static void main(String[] args) throws Exception {
+
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ Frame frame = new Frame();
+
+ try {
+ Button b = new Button("Button");
+ frame.setBounds(300, 300, 300, 300);
+ frame.add(b);
+ frame.setVisible(true);
+ toolkit.realSync();
+
+ Robot robot = new Robot();
+ robot.mouseMove((int)frame.getLocationOnScreen().getX() + 150,
+ (int)frame.getLocationOnScreen().getY() + 150);
+
+ eventsCount = 0;
+ System.out.println("Clicking mouse...");
+ for (int i = 0; i < 300 && !failed; i++) {
+ robot.mousePress(InputEvent.BUTTON1_MASK);
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
+ Thread.sleep(10);
+ b.setLabel("Click: " + i);
+ }
+
+ if (eventsCount == 0) {
+ throw new RuntimeException("No events were received");
+ }
+
+ if (failed) {
+ throw new RuntimeException("Test failed.");
+ }
+ System.out.println("Clicking mouse done: " + eventsCount + " events.");
+
+ b.requestFocusInWindow();
+ toolkit.realSync();
+
+ eventsCount = 0;
+ System.out.println("Typing a key...");
+ for (int i = 0; i < 300 && !failed; i++) {
+ robot.keyPress(KeyEvent.VK_A);
+ robot.keyRelease(KeyEvent.VK_A);
+ Thread.sleep(10);
+ b.setLabel("Type: " + i);
+ }
+ System.out.println("Key typing done: " + eventsCount + " events.");
+
+ if (eventsCount == 0) {
+ throw new RuntimeException("No events were received");
+ }
+
+ if (failed) {
+ throw new RuntimeException("Test failed.");
+ }
+
+ System.out.println("Success!");
+ } finally {
+ frame.dispose();
+ }
+ }
+}
--- ./jdk/test/java/awt/event/KeyEvent/SwallowKeyEvents/SwallowKeyEvents.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/awt/event/KeyEvent/SwallowKeyEvents/SwallowKeyEvents.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -23,7 +23,7 @@
/*
@test
- @bug 7154072
+ @bug 7154072 7161320
@summary Tests that key events with modifiers are not swallowed.
@author anton.tarasov: area=awt.focus
@library ../../../regtesthelpers
@@ -49,6 +49,11 @@
static Robot r;
public static void main(String[] args) {
+ if (sun.awt.OSInfo.getOSType() == sun.awt.OSInfo.OSType.WINDOWS) {
+ System.out.println("Skipped. Test not for MS Windows.");
+ return;
+ }
+
f.add(t);
f.pack();
f.setVisible(true);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/awt/im/8041990/bug8041990.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,120 @@
+/*
+ * 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 8041990
+ @summary Language specific keys does not work in applets when opened outside the browser
+ @author Petr Pchelko
+*/
+
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.InputMethodEvent;
+import java.awt.font.TextHitInfo;
+import java.text.AttributedString;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicReference;
+
+public class bug8041990 {
+ private static JFrame frame;
+ private static JComponent component;
+
+ public static void main(String[] args) throws Exception {
+ ThreadGroup stubTG = new ThreadGroup(getRootThreadGroup(), "Stub Thread Group");
+ ThreadGroup swingTG = new ThreadGroup(getRootThreadGroup(), "SwingTG");
+ try {
+ Thread stubThread = new Thread(stubTG, new Runnable() {
+ public void run() {
+ SunToolkit.createNewAppContext();
+ }
+ });
+ stubThread.start();
+ stubThread.join();
+
+ final CountDownLatch startSwingLatch = new CountDownLatch(1);
+ new Thread(swingTG, new Runnable() {
+ public void run() {
+ SunToolkit.createNewAppContext();
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame = new JFrame();
+ component = new JLabel("Test Text");
+ frame.add(component);
+ frame.setBounds(100, 100, 100, 100);
+ frame.setVisible(true);
+ startSwingLatch.countDown();
+ }
+ });
+ }
+ }).start();
+ startSwingLatch.await();
+
+ final AtomicReference<Exception> caughtException = new AtomicReference<>();
+ Thread checkThread = new Thread(getRootThreadGroup(), new Runnable() {
+ public void run() {
+ try {
+ // If the bug is present this will throw exception
+ new InputMethodEvent(component,
+ InputMethodEvent.CARET_POSITION_CHANGED,
+ TextHitInfo.leading(0),
+ TextHitInfo.trailing(0));
+ } catch (Exception e) {
+ caughtException.set(e);
+ }
+ }
+ });
+ checkThread.start();
+ checkThread.join();
+
+ if (caughtException.get() != null) {
+ throw new RuntimeException("Failed. Caught exception!", caughtException.get());
+ }
+ } finally {
+ new Thread(swingTG, new Runnable() {
+ public void run() {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ if (frame != null) {
+ frame.dispose();
+ }
+ }
+ });
+ }
+ }).start();
+ }
+ }
+
+ private static ThreadGroup getRootThreadGroup() {
+ ThreadGroup currentTG = Thread.currentThread().getThreadGroup();
+ ThreadGroup parentTG = currentTG.getParent();
+ while (parentTG != null) {
+ currentTG = parentTG;
+ parentTG = currentTG.getParent();
+ }
+ return currentTG;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/beans/Introspector/Test7172865.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,162 @@
+/*
+ * 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.beans.IndexedPropertyDescriptor;
+import java.beans.MethodDescriptor;
+import java.beans.PropertyDescriptor;
+
+/*
+ * @test
+ * @bug 7172854 7172865
+ * @summary Tests that cached methods are not lost
+ * @author Sergey Malenkov
+ */
+
+public class Test7172865 {
+ public static void main(String[] args) throws Exception {
+ int errors = 0;
+
+ MethodDescriptor md = new MethodDescriptor(Test7172865.class.getMethod("getGood"));
+
+ errors += test(PropertyDescriptor.class, "good", true);
+ PropertyDescriptor pdGoodString = new PropertyDescriptor("good", Test7172865.class, "getGood", "setGood");
+ PropertyDescriptor pdGoodMethod = new PropertyDescriptor("good",
+ Test7172865.class.getMethod("getGood"),
+ Test7172865.class.getMethod("setGood", args.getClass()));
+
+ errors += test(PropertyDescriptor.class, "bad", false);
+ PropertyDescriptor pdBadString = new PropertyDescriptor("bad", Test7172865.class, "getBad", null);
+ PropertyDescriptor pdBadMethod = new PropertyDescriptor("bad",
+ Test7172865.class.getMethod("getBad"),
+ Test7172865.class.getMethod("setBad", args.getClass()));
+
+ errors += test(IndexedPropertyDescriptor.class, "good", true);
+ IndexedPropertyDescriptor ipdGoodString = new IndexedPropertyDescriptor("good", Test7172865.class, "getGood", "setGood", "getGood", "setGood");
+ IndexedPropertyDescriptor ipdGoodMethod = new IndexedPropertyDescriptor("good",
+ Test7172865.class.getMethod("getGood"),
+ Test7172865.class.getMethod("setGood", args.getClass()),
+ Test7172865.class.getMethod("getGood", Integer.TYPE),
+ Test7172865.class.getMethod("setGood", Integer.TYPE, String.class));
+
+ errors += test(IndexedPropertyDescriptor.class, "bad", false);
+ IndexedPropertyDescriptor ipdBadString = new IndexedPropertyDescriptor("bad", Test7172865.class, "getBad", null, "getBad", null);
+ IndexedPropertyDescriptor ipdBadMethod = new IndexedPropertyDescriptor("bad",
+ Test7172865.class.getMethod("getBad"),
+ Test7172865.class.getMethod("setBad", args.getClass()),
+ Test7172865.class.getMethod("getBad", Integer.TYPE),
+ Test7172865.class.getMethod("setBad", Integer.TYPE, String.class));
+
+ for (int i = 1; i <= 2; i++) {
+ System.out.println("STEP: " + i);
+ errors += test("md", null != md.getMethod());
+
+ errors += test("pdGoodString", pdGoodString, true, true);
+ errors += test("pdGoodMethod", pdGoodMethod, true, true);
+
+ errors += test("pdBadString", pdBadString, true, false);
+ errors += test("pdBadMethod", pdBadMethod, true, true);
+
+ errors += test("ipdGoodString", ipdGoodString, true, true, true, true);
+ errors += test("ipdGoodMethod", ipdGoodMethod, true, true, true, true);
+
+ errors += test("ipdBadString", ipdBadString, true, false, true, false);
+ errors += test("ipdBadMethod", ipdBadMethod, true, true, true, true);
+
+ try {
+ int[] array = new int[1024];
+ while (true) {
+ array = new int[array.length << 1];
+ }
+ }
+ catch (OutOfMemoryError error) {
+ System.gc();
+ }
+ }
+ if (errors > 0) {
+ throw new Error("found " + errors + " errors");
+ }
+ }
+
+ private static int test(Class<?> type, String property, boolean value) {
+ String message = type.getSimpleName() + "(" + property + ") ";
+ try {
+ type.getConstructor(String.class, Class.class).newInstance(property, Test7172865.class);
+ message += "passed";
+ }
+ catch (Exception exception) {
+ message += "failed";
+ value = !value;
+ }
+ if (value) {
+ message += " as expected";
+ }
+ System.out.println(message);
+ return value ? 0 : 1;
+ }
+
+ private static int test(String message, boolean value) {
+ System.out.println(message + ": " + (value ? "passed" : "failed"));
+ return value ? 0 : 1;
+ }
+
+ private static int test(String message, PropertyDescriptor pd, boolean rm, boolean wm) {
+ return test(message + ".Read", rm == (null != pd.getReadMethod()))
+ + test(message + ".Write", wm == (null != pd.getWriteMethod()));
+ }
+
+ private static int test(String message, IndexedPropertyDescriptor ipd, boolean rm, boolean wm, boolean irm, boolean iwm) {
+ return test(message, ipd, rm, wm)
+ + test(message + ".IndexedRead", irm == (null != ipd.getIndexedReadMethod()))
+ + test(message + ".IndexedWrite", iwm == (null != ipd.getIndexedWriteMethod()));
+ }
+
+ public String[] getGood() {
+ return null;
+ }
+
+ public String getGood(int index) {
+ return null;
+ }
+
+ public void setGood(String[] good) {
+ }
+
+ public void setGood(int index, String value) {
+ }
+
+ public String[] getBad() {
+ return null;
+ }
+
+ public String getBad(int index) {
+ return null;
+ }
+
+ public Test7172865 setBad(String[] bad) {
+ return null;
+ }
+
+ public Test7172865 setBad(int index, String value) {
+ return null;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/beans/XMLEncoder/Test8016545.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,106 @@
+/*
+ * 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 8016545
+ * @summary Tests beans with predefined fields
+ * @author Sergey Malenkov
+ */
+
+public class Test8016545 extends AbstractTest {
+ public static void main(String[] args) {
+ new Test8016545().test(true);
+ }
+
+ @Override
+ protected Object getObject() {
+ Bean bean = new Bean();
+ bean.setUndefined(Boolean.FALSE);
+ Info info = new Info();
+ info.setEnabled(Boolean.TRUE);
+ info.setID(1);
+ bean.setInfo(info);
+ return bean;
+ }
+
+ @Override
+ protected Object getAnotherObject() {
+ Bean bean = new Bean();
+ bean.setUndefined(Boolean.TRUE);
+ bean.getInfo().setEnabled(Boolean.FALSE);
+ bean.getInfo().setID(2);
+ return bean;
+ }
+
+ public static class Bean {
+ private Info info = new Info(); // predefined
+ private Boolean defined = Boolean.TRUE;
+ private Boolean undefined;
+
+ public Info getInfo() {
+ return this.info;
+ }
+
+ public void setInfo(Info info) {
+ this.info = info;
+ }
+
+ public Boolean getDefined() {
+ return this.defined;
+ }
+
+ public void setDefined(Boolean defined) {
+ this.defined = defined;
+ }
+
+ public Boolean getUndefined() {
+ return this.undefined;
+ }
+
+ public void setUndefined(Boolean undefined) {
+ this.undefined = undefined;
+ }
+ }
+
+ public static class Info {
+ private Integer id;
+ private Boolean enabled;
+
+ public Integer getID() {
+ return this.id;
+ }
+
+ public void setID(Integer id) {
+ this.id = id;
+ }
+
+ public Boolean getEnabled() {
+ return this.enabled;
+ }
+
+ public void setEnabled(Boolean enabled) {
+ this.enabled = enabled;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/io/ByteArrayOutputStream/MaxCapacity.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2014 Google Inc. 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
+ * @ignore This test has huge memory requirements
+ * @run main/timeout=1800/othervm -Xmx8g MaxCapacity
+ * @bug 8055949
+ * @summary Check that we can write (almost) Integer.MAX_VALUE bytes
+ * to a ByteArrayOutputStream.
+ * @author Martin Buchholz
+ */
+import java.io.ByteArrayOutputStream;
+
+public class MaxCapacity {
+ public static void main(String[] args) {
+ long maxHeap = Runtime.getRuntime().maxMemory();
+ if (maxHeap < 3L * Integer.MAX_VALUE) {
+ System.out.printf("Skipping test; max memory %sM too small%n",
+ maxHeap/(1024*1024));
+ return;
+ }
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ for (long n = 0; ; n++) {
+ try {
+ baos.write((byte)'x');
+ } catch (Throwable t) {
+ // check data integrity while we're here
+ byte[] bytes = baos.toByteArray();
+ if (bytes.length != n)
+ throw new AssertionError("wrong length");
+ if (bytes[0] != 'x' ||
+ bytes[bytes.length - 1] != 'x')
+ throw new AssertionError("wrong contents");
+
+ long gap = Integer.MAX_VALUE - n;
+ System.out.printf("gap=%dM %d%n", gap/(1024*1024), gap);
+ if (gap > 1024)
+ throw t;
+ // t.printStackTrace();
+ break;
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/io/File/CheckPermission.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,379 @@
+/*
+ * 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 8017212
+ * @summary Examine methods in File.java that access the file system do the
+ * right permission check when a security manager exists.
+ * @author Dan Xu
+ */
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.FileFilter;
+import java.io.IOException;
+import java.security.Permission;
+import java.util.ArrayList;
+import java.util.EnumMap;
+import java.util.EnumSet;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class CheckPermission {
+
+ private static final String CHECK_PERMISSION_TEST = "CheckPermissionTest";
+
+ public enum FileOperation {
+ READ, WRITE, DELETE, EXEC
+ }
+
+ static class Checks {
+ private List<Permission> permissionsChecked = new ArrayList<>();
+ private Set<String> propertiesChecked = new HashSet<>();
+
+ private Map<FileOperation, List<String>> fileOperationChecked =
+ new EnumMap<>(FileOperation.class);
+
+ List<Permission> permissionsChecked() {
+ return permissionsChecked;
+ }
+
+ Set<String> propertiesChecked() {
+ return propertiesChecked;
+ }
+
+ List<String> fileOperationChecked(FileOperation op) {
+ return fileOperationChecked.get(op);
+ }
+
+ void addFileOperation(FileOperation op, String file) {
+ List<String> opList = fileOperationChecked.get(op);
+ if (opList == null) {
+ opList = new ArrayList<>();
+ fileOperationChecked.put(op, opList);
+ }
+ opList.add(file);
+ }
+ }
+
+ static ThreadLocal<Checks> myChecks = new ThreadLocal<>();
+
+ static void prepare() {
+ myChecks.set(new Checks());
+ }
+
+ static class LoggingSecurityManager extends SecurityManager {
+ static void install() {
+ System.setSecurityManager(new LoggingSecurityManager());
+ }
+
+ private void checkFileOperation(FileOperation op, String file) {
+ Checks checks = myChecks.get();
+ if (checks != null)
+ checks.addFileOperation(op, file);
+ }
+
+ @Override
+ public void checkRead(String file) {
+ checkFileOperation(FileOperation.READ, file);
+ }
+
+ @Override
+ public void checkWrite(String file) {
+ checkFileOperation(FileOperation.WRITE, file);
+ }
+
+ @Override
+ public void checkDelete(String file) {
+ checkFileOperation(FileOperation.DELETE, file);
+ }
+
+ @Override
+ public void checkExec(String file) {
+ checkFileOperation(FileOperation.EXEC, file);
+ }
+
+ @Override
+ public void checkPermission(Permission perm) {
+ Checks checks = myChecks.get();
+ if (checks != null)
+ checks.permissionsChecked().add(perm);
+ }
+
+ @Override
+ public void checkPropertyAccess(String key) {
+ Checks checks = myChecks.get();
+ if (checks != null)
+ checks.propertiesChecked().add(key);
+ }
+ }
+
+ static void assertCheckPermission(Class<? extends Permission> type,
+ String name)
+ {
+ for (Permission perm : myChecks.get().permissionsChecked()) {
+ if (type.isInstance(perm) && perm.getName().equals(name))
+ return;
+ }
+ throw new RuntimeException(type.getName() + "(\"" + name
+ + "\") not checked");
+ }
+
+ static void assertCheckPropertyAccess(String key) {
+ if (!myChecks.get().propertiesChecked().contains(key))
+ throw new RuntimeException("Property " + key + " not checked");
+ }
+
+ static void assertChecked(File file, List<String> list) {
+ if (list != null && !list.isEmpty()) {
+ for (String path : list) {
+ if (path.equals(file.getPath()))
+ return;
+ }
+ }
+ throw new RuntimeException("Access not checked");
+ }
+
+ static void assertNotChecked(File file, List<String> list) {
+ if (list != null && !list.isEmpty()) {
+ for (String path : list) {
+ if (path.equals(file.getPath()))
+ throw new RuntimeException("Access checked");
+ }
+ }
+ }
+
+ static void assertCheckOperation(File file, Set<FileOperation> ops) {
+ for (FileOperation op : ops)
+ assertChecked(file, myChecks.get().fileOperationChecked(op));
+ }
+
+ static void assertNotCheckOperation(File file, Set<FileOperation> ops) {
+ for (FileOperation op : ops)
+ assertNotChecked(file, myChecks.get().fileOperationChecked(op));
+ }
+
+ static void assertOnlyCheckOperation(File file,
+ EnumSet<FileOperation> ops)
+ {
+ assertCheckOperation(file, ops);
+ assertNotCheckOperation(file, EnumSet.complementOf(ops));
+ }
+
+ static File testFile, another;
+
+ static void setup() {
+ testFile = new File(CHECK_PERMISSION_TEST + System.currentTimeMillis());
+ if (testFile.exists()) {
+ testFile.delete();
+ }
+
+ another = new File(CHECK_PERMISSION_TEST + "Another"
+ + System.currentTimeMillis());
+ if (another.exists()) {
+ another.delete();
+ }
+
+ LoggingSecurityManager.install();
+ }
+
+ public static void main(String[] args) throws IOException {
+ setup();
+
+ prepare();
+ testFile.canRead();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
+
+ prepare();
+ testFile.canWrite();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
+
+ prepare();
+ testFile.exists();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
+
+ prepare();
+ testFile.isDirectory();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
+
+ prepare();
+ testFile.isFile();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
+
+ prepare();
+ testFile.isHidden();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
+
+ prepare();
+ testFile.lastModified();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
+
+ prepare();
+ testFile.length();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
+
+ prepare();
+ testFile.createNewFile();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
+
+ prepare();
+ testFile.list();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
+
+ prepare();
+ testFile.list(new FilenameFilter() {
+ @Override
+ public boolean accept(File dir, String name) {
+ return false;
+ }
+ });
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
+
+ prepare();
+ testFile.listFiles();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
+
+ prepare();
+ testFile.listFiles(new FilenameFilter() {
+ @Override
+ public boolean accept(File dir, String name) {
+ return false;
+ }
+ });
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
+
+ prepare();
+ testFile.listFiles(new FileFilter() {
+ @Override
+ public boolean accept(File file) {
+ return false;
+ }
+ });
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
+
+ prepare();
+ testFile.mkdir();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
+
+ if (testFile.exists()) {
+ prepare();
+ testFile.mkdirs();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
+ }
+
+ if (!another.exists()) {
+ prepare();
+ another.mkdirs();
+ assertOnlyCheckOperation(another,
+ EnumSet.of(FileOperation.READ, FileOperation.WRITE));
+ }
+
+ prepare();
+ another.delete();
+ assertOnlyCheckOperation(another, EnumSet.of(FileOperation.DELETE));
+
+ prepare();
+ boolean renRst = testFile.renameTo(another);
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
+ assertOnlyCheckOperation(another, EnumSet.of(FileOperation.WRITE));
+
+ if (renRst) {
+ if (testFile.exists())
+ throw new RuntimeException(testFile + " is already renamed to "
+ + another);
+ testFile = another;
+ }
+
+ prepare();
+ testFile.setLastModified(0);
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
+
+ prepare();
+ testFile.setReadOnly();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
+
+ prepare();
+ testFile.setWritable(true, true);
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
+
+ prepare();
+ testFile.setWritable(true);
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
+
+ prepare();
+ testFile.setReadable(true, true);
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
+
+ prepare();
+ testFile.setReadable(true);
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
+
+ prepare();
+ testFile.setExecutable(true, true);
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
+
+ prepare();
+ testFile.setExecutable(true);
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
+
+ prepare();
+ testFile.canExecute();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.EXEC));
+
+ prepare();
+ testFile.getTotalSpace();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
+ assertCheckPermission(RuntimePermission.class,
+ "getFileSystemAttributes");
+
+ prepare();
+ testFile.getFreeSpace();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
+ assertCheckPermission(RuntimePermission.class,
+ "getFileSystemAttributes");
+
+ prepare();
+ testFile.getUsableSpace();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
+ assertCheckPermission(RuntimePermission.class,
+ "getFileSystemAttributes");
+
+ prepare();
+ File tmpFile = File.createTempFile(CHECK_PERMISSION_TEST, null);
+ assertOnlyCheckOperation(tmpFile, EnumSet.of(FileOperation.WRITE));
+ tmpFile.delete();
+ assertCheckOperation(tmpFile, EnumSet.of(FileOperation.DELETE));
+
+ prepare();
+ tmpFile = File.createTempFile(CHECK_PERMISSION_TEST, null, null);
+ assertOnlyCheckOperation(tmpFile, EnumSet.of(FileOperation.WRITE));
+ tmpFile.delete();
+ assertCheckOperation(tmpFile, EnumSet.of(FileOperation.DELETE));
+
+ prepare();
+ testFile.deleteOnExit();
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.DELETE));
+ }
+}
--- ./jdk/test/java/io/File/NulFile.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/io/File/NulFile.java Mon Jan 05 11:57:27 2015 -0800
@@ -612,8 +612,13 @@
try {
File.createTempFile(prefix, suffix, directory);
} catch (IOException ex) {
- if (ExceptionMsg.equals(ex.getMessage()))
+ String err = "Unable to create temporary file";
+ if (err.equals(ex.getMessage()))
exceptionThrown = true;
+ else {
+ throw new RuntimeException("Get IOException with message, "
+ + ex.getMessage() + ", expect message, "+ err);
+ }
}
}
if (!exceptionThrown) {
--- ./jdk/test/java/io/File/createTempFile/SpecialTempFile.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/io/File/createTempFile/SpecialTempFile.java Mon Jan 05 11:57:27 2015 -0800
@@ -23,9 +23,8 @@
/*
* @test
- * @bug 8013827 8011950 8025128
+ * @bug 8013827 8011950 8017212 8025128
* @summary Check whether File.createTempFile can handle special parameters
- * on Windows platforms
* @author Dan Xu
*/
@@ -35,7 +34,7 @@
public class SpecialTempFile {
private static void test(String name, String[] prefix, String[] suffix,
- boolean expectedException) throws IOException
+ boolean exceptionExpected) throws IOException
{
if (prefix == null || suffix == null
|| prefix.length != suffix.length)
@@ -44,14 +43,13 @@
}
final String exceptionMsg = "Unable to create temporary file";
+ String[] dirs = { null, "." };
for (int i = 0; i < prefix.length; i++) {
boolean exceptionThrown = false;
File f = null;
- String[] dirs = { null, "." };
-
- for (String dir : dirs ) {
+ for (String dir: dirs) {
System.out.println("In test " + name +
", creating temp file with prefix, " +
prefix[i] + ", suffix, " + suffix[i] +
@@ -63,7 +61,7 @@
else
f = File.createTempFile(prefix[i], suffix[i], new File(dir));
} catch (IOException e) {
- if (expectedException) {
+ if (exceptionExpected) {
if (e.getMessage().startsWith(exceptionMsg))
exceptionThrown = true;
else
@@ -74,13 +72,23 @@
}
}
- if (expectedException && (!exceptionThrown || f != null))
+ if (exceptionExpected && (!exceptionThrown || f != null))
throw new RuntimeException("IOException is expected");
}
}
}
public static void main(String[] args) throws Exception {
+ // Common test
+ final String name = "SpecialTempFile";
+ File f = new File(System.getProperty("java.io.tmpdir"), name);
+ if (!f.exists()) {
+ f.createNewFile();
+ }
+ String[] nulPre = { name + "\u0000" };
+ String[] nulSuf = { ".test" };
+ test("NulName", nulPre, nulSuf, true);
+
// Test JDK-8025128
String[] goodPre = { "///..///", "/foo" };
String[] goodSuf = { ".temp", ".tmp" };
@@ -91,6 +99,7 @@
String[] slashSuf = { "///..///..", "///..///..", "///..///.." };
test("SlashedName", slashPre, slashSuf, true);
+ // Windows tests
if (!System.getProperty("os.name").startsWith("Windows"))
return;
--- ./jdk/test/java/lang/ClassLoader/Assert.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/lang/ClassLoader/Assert.sh Mon Jan 05 11:57:27 2015 -0800
@@ -23,6 +23,21 @@
#
+OS=`uname -s`
+case "$OS" in
+ SunOS | Linux | Darwin )
+ FS="/"
+ CHMOD="${FS}bin${FS}chmod"
+ ;;
+ Windows* | CYGWIN* )
+ CHMOD="chmod"
+ ;;
+ * )
+ echo "Unrecognized system!"
+ exit 1;
+ ;;
+esac
+
if [ "${TESTSRC}" = "" ]
then
echo "TESTSRC not set. Test cannot execute. Failed."
@@ -46,6 +61,7 @@
cp ${TESTSRC}/Assert.java .
cp -R ${TESTSRC}/package1 .
cp -R ${TESTSRC}/package2 .
+${CHMOD} -R u+w *
${TESTJAVA}/bin/javac Assert.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/lang/ProcessBuilder/CloseRace.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2013, 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 8024521
+ * @summary Closing ProcessPipeInputStream at the time the process exits is racy
+ * and leads to data corruption. Run this test manually (as
+ * an ordinary java program) with -Xmx8M to repro bug 8024521.
+ * @run main/othervm -Xmx8M -Dtest.duration=2 CloseRace
+ */
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CountDownLatch;
+
+public class CloseRace {
+ private static final String BIG_FILE = "bigfile";
+
+ private static final int[] procFDs = new int[6];
+
+ /** default value sufficient to repro bug 8024521. */
+ private static final int testDurationSeconds
+ = Integer.getInteger("test.duration", 600);
+
+ private static final CountDownLatch threadsStarted
+ = new CountDownLatch(2);
+
+ static boolean fdInUse(int i) {
+ return new File("/proc/self/fd/" + i).exists();
+ }
+
+ static boolean[] procFDsInUse() {
+ boolean[] inUse = new boolean[procFDs.length];
+ for (int i = 0; i < procFDs.length; i++)
+ inUse[i] = fdInUse(procFDs[i]);
+ return inUse;
+ }
+
+ static int count(boolean[] bits) {
+ int count = 0;
+ for (int i = 0; i < bits.length; i++)
+ count += bits[i] ? 1 : 0;
+ return count;
+ }
+
+ static void dumpAllStacks() {
+ System.err.println("Start of dump");
+ final Map<Thread, StackTraceElement[]> allStackTraces
+ = Thread.getAllStackTraces();
+ for (Thread thread : allStackTraces.keySet()) {
+ System.err.println("Thread " + thread.getName());
+ for (StackTraceElement element : allStackTraces.get(thread))
+ System.err.println("\t" + element);
+ }
+ System.err.println("End of dump");
+ }
+
+ public static void main(String args[]) throws Exception {
+ if (!(new File("/proc/self/fd").isDirectory()))
+ return;
+
+ // Catch Errors from process reaper
+ Thread.setDefaultUncaughtExceptionHandler(
+ new Thread.UncaughtExceptionHandler() {
+ @Override
+ public void uncaughtException(Thread t, Throwable e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+ });
+
+ try (RandomAccessFile f = new RandomAccessFile(BIG_FILE, "rw")) {
+ f.setLength(Runtime.getRuntime().maxMemory()); // provoke OOME
+ }
+
+ for (int i = 0, j = 0; j < procFDs.length; i++)
+ if (!fdInUse(i))
+ procFDs[j++] = i;
+
+ Thread[] threads = {
+ new Thread(new OpenLoop()),
+ new Thread(new ExecLoop()),
+ };
+ for (Thread thread : threads)
+ thread.start();
+
+ threadsStarted.await();
+ Thread.sleep(testDurationSeconds * 1000);
+
+ for (Thread thread : threads)
+ thread.interrupt();
+ for (Thread thread : threads) {
+ thread.join(10_000);
+ if (thread.isAlive()) {
+ dumpAllStacks();
+ throw new Error("At least one child thread ("
+ + thread.getName()
+ + ") failed to finish gracefully");
+ }
+ }
+ }
+
+ static class OpenLoop implements Runnable {
+ public void run() {
+ threadsStarted.countDown();
+ while (!Thread.interrupted()) {
+ try {
+ // wait for ExecLoop to finish creating process
+ do {
+ if (Thread.interrupted())
+ return;
+ } while (count(procFDsInUse()) != 3);
+ List<InputStream> iss = new ArrayList<>(4);
+
+ // eat up three "holes" (closed ends of pipe fd pairs)
+ for (int i = 0; i < 3; i++)
+ iss.add(new FileInputStream(BIG_FILE));
+ do {
+ if (Thread.interrupted())
+ return;
+ } while (count(procFDsInUse()) == procFDs.length);
+ // hopefully this will racily occupy empty fd slot
+ iss.add(new FileInputStream(BIG_FILE));
+ Thread.sleep(1); // Widen race window
+ for (InputStream is : iss)
+ is.close();
+ } catch (InterruptedException e) {
+ break;
+ } catch (Exception e) {
+ throw new Error(e);
+ }
+ }
+ }
+ }
+
+ static class ExecLoop implements Runnable {
+ public void run() {
+ threadsStarted.countDown();
+ ProcessBuilder builder = new ProcessBuilder("/bin/true");
+ while (!Thread.interrupted()) {
+ try {
+ // wait for OpenLoop to finish
+ do {
+ if (Thread.interrupted())
+ return;
+ } while (count(procFDsInUse()) > 0);
+ Process process = builder.start();
+ InputStream is = process.getInputStream();
+ process.waitFor();
+ is.close();
+ } catch (InterruptedException e) {
+ break;
+ } catch (Exception e) {
+ throw new Error(e);
+ }
+ }
+ }
+ }
+}
--- ./jdk/test/java/lang/Runtime/exec/CloseRace.java Mon Sep 08 12:16:34 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,146 +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 8024521
- * @summary Closing ProcessPipeInputStream at the time the process exits is racy
- * and leads to the data corruption.
- * @library /lib/testlibrary
- * @run main/othervm/timeout=80 CloseRace
- */
-
-/**
- * This test has a little chance to catch the race during the given default
- * time gap of 20 seconds. To increase the time gap, set the system property
- * CloseRaceTimeGap=N to the number of seconds.
- * Jtreg's timeoutFactor should also be set appropriately.
- *
- * For example, to run the test for 10 minutes:
- * > jtreg \
- * -testjdk:$(PATH_TO_TESTED_JDK) \
- * -timeoutFactor:10 \
- * -DCloseRaceTimeGap=600 \
- * $(PATH_TO_TESTED_JDK_SOURCE)/test/java/lang/Runtime/exec/CloseRace.java
- */
-
-import java.io.*;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-import jdk.testlibrary.OutputAnalyzer;
-import static jdk.testlibrary.ProcessTools.*;
-
-public class CloseRace {
-
- public static void main(String args[]) throws Exception {
- ProcessBuilder pb = createJavaProcessBuilder("-Xmx64M", "CloseRace$Child",
- System.getProperty("CloseRaceTimeGap", "20"));
- OutputAnalyzer oa = new OutputAnalyzer(pb.start());
- oa.stderrShouldNotContain("java.lang.OutOfMemoryError");
- }
-
- public static class Child {
- private static final String BIG_FILE = "bigfile";
- private static final String SMALL_FILE = "smallfile";
- private static int timeGap = 20; // seconds
-
- public static void main(String args[]) throws Exception {
- if (args.length > 0) {
- try {
- timeGap = Integer.parseInt(args[0]);
- timeGap = Math.max(timeGap, 10);
- timeGap = Math.min(timeGap, 10 * 60 * 60); // no more than 10 hours
- } catch (NumberFormatException ignore) {}
- }
- try (RandomAccessFile f = new RandomAccessFile(BIG_FILE, "rw")) {
- f.setLength(1024 * 1024 * 1024); // 1 Gb, greater than max heap size
- }
- try (FileOutputStream fs = new FileOutputStream(SMALL_FILE);
- PrintStream ps = new PrintStream(fs)) {
- for (int i = 0; i < 128; ++i)
- ps.println("line of text");
- }
-
- List<Thread> threads = new LinkedList<>();
- for (int i = 0; i < 99; ++i) {
- Thread t = new Thread (new OpenLoop());
- t.start();
- threads.add(t);
- }
- Thread t2 = new Thread (new ExecLoop());
- t2.start();
- threads.add(t2);
-
- Thread.sleep(timeGap);
-
- for (Thread t : threads) {
- t.interrupt();
- t.join();
- }
- }
-
- private static class OpenLoop implements Runnable {
- public void run() {
- final Path bigFilePath = Paths.get(BIG_FILE);
- while (!Thread.interrupted()) {
- try (InputStream in = Files.newInputStream(bigFilePath)) {
- // Widen the race window by sleeping 1ms
- Thread.sleep(1);
- } catch (InterruptedException e) {
- break;
- } catch (Exception e) {
- System.err.println(e);
- }
- }
- }
- }
-
- private static class ExecLoop implements Runnable {
- public void run() {
- List<String> command = new ArrayList<>(
- Arrays.asList("/bin/cat", SMALL_FILE));
- while (!Thread.interrupted()) {
- try {
- ProcessBuilder builder = new ProcessBuilder(command);
- final Process process = builder.start();
- InputStream is = process.getInputStream();
- InputStreamReader isr = new InputStreamReader(is);
- BufferedReader br = new BufferedReader(isr);
- while (br.readLine() != null) {}
- process.waitFor();
- isr.close();
- } catch (InterruptedException e) {
- break;
- } catch (Exception e) {
- System.err.println(e);
- }
- }
- }
- }
- }
-}
--- ./jdk/test/java/lang/String/ToLowerCase.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/lang/String/ToLowerCase.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -23,7 +23,7 @@
/*
@test
- @bug 4217441 4533872 4900935 8020037
+ @bug 4217441 4533872 4900935 8020037 8041791
@summary toLowerCase should lower-case Greek Sigma correctly depending
on the context (final/non-final). Also it should handle
Locale specific (lt, tr, and az) lowercasings and supplementary
@@ -72,8 +72,10 @@
// I-dot tests
test("\u0130", turkish, "i");
test("\u0130", az, "i");
- test("\u0130", lt, "i");
- test("\u0130", Locale.US, "i");
+ test("\u0130", lt, "\u0069\u0307");
+ test("\u0130", Locale.US, "\u0069\u0307");
+ test("\u0130", Locale.JAPAN, "\u0069\u0307");
+ test("\u0130", Locale.ROOT, "\u0069\u0307");
// Remove dot_above in the sequence I + dot_above (Turkish and Azeri)
test("I\u0307", turkish, "i");
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/lang/instrument/DaemonThread/DummyAgent.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2014 Goldman Sachs.
+ * 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.
+ */
+
+import java.lang.instrument.ClassFileTransformer;
+import java.lang.instrument.IllegalClassFormatException;
+import java.lang.instrument.Instrumentation;
+import java.security.ProtectionDomain;
+
+public class DummyAgent implements ClassFileTransformer {
+ @Override
+ public byte[] transform(ClassLoader loader, String className,
+ Class<?> classBeingRedefined, ProtectionDomain protectionDomain,
+ byte[] classfileBuffer) throws IllegalClassFormatException {
+
+ /* The Daemon Thread bug is timing dependent and you want the transform method
+ * to return ASAP - so just return the buffer will be fine
+ */
+ return classfileBuffer;
+ }
+
+ public static void premain(String agentArgs, Instrumentation inst) {
+ inst.addTransformer(new DummyAgent(), false);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/lang/instrument/DaemonThread/DummyClass.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2014 Goldman Sachs.
+ * 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.
+ */
+
+/* Just a dummy class for loading */
+public class DummyClass {
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/lang/instrument/DaemonThread/TestDaemonThread.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2014 Goldman Sachs.
+ * 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 7142035
+ * @summary Assert in java.lang.instrument agents during shutdown when classloading occurs after shutdown
+ * @library /lib/testlibrary
+ *
+ * @build DummyAgent DummyClass TestDaemonThreadLauncher TestDaemonThread
+ * @run shell ../MakeJAR3.sh DummyAgent
+ * @run main TestDaemonThreadLauncher /timeout=240
+ *
+ */
+import java.io.File;
+import java.net.URL;
+import java.net.URLClassLoader;
+
+public class TestDaemonThread implements Runnable{
+ File classpath;
+
+ public TestDaemonThread(File classpath) {
+ this.classpath = classpath;
+ }
+
+ @Override
+ public void run() {
+
+
+ try {
+ URL u = this.getClass().getClassLoader().getResource("DummyClass.class");
+ String path = u.getPath();
+ String parent = u.getPath().substring(0, path.lastIndexOf('/')+1);
+ URL parentURL = new URL(u, parent);
+ System.out.println(parentURL);
+ /* Load lots of class by creating multiple classloaders */
+ for(;;) {
+ ClassLoader cl = new URLClassLoader(new URL[] {parentURL}, null);
+ cl.loadClass("DummyClass");
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ Thread t = new Thread(new TestDaemonThread(new File(args[0])));
+ /* The important part of the bug is that a Daemon thread can continue to load classes after shutdown */
+ t.setDaemon(true);
+ t.start();
+ Thread.sleep(200);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/lang/instrument/DaemonThread/TestDaemonThreadLauncher.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2014 Goldman Sachs.
+ * 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.
+ */
+
+
+import jdk.testlibrary.JDKToolLauncher;
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.ProcessTools;
+
+import java.io.IOException;
+import java.nio.file.Path;
+
+public class TestDaemonThreadLauncher {
+
+ private static ProcessBuilder processBuilder = new ProcessBuilder();
+
+ public static void main(String args[]) throws Exception {
+ for(int i=0; i<50; i++) {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-javaagent:DummyAgent.jar", "TestDaemonThread", ".");
+ OutputAnalyzer analyzer = new OutputAnalyzer(pb.start());
+ analyzer.shouldNotContain("ASSERTION FAILED");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/java/net/MulticastSocket/SetGetNetworkInterfaceTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,125 @@
+/*
+ * 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 6458027
+ * @summary Disabling IPv6 on a specific network interface causes problems.
+ *
+ */
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.MulticastSocket;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.Arrays;
+import java.util.Enumeration;
+
+
+public class SetGetNetworkInterfaceTest {
+
+ public static void main(String[] args) throws Exception {
+
+ boolean passed = true;
+ try {
+ MulticastSocket ms = new MulticastSocket();
+ Enumeration<NetworkInterface> networkInterfaces = NetworkInterface
+ .getNetworkInterfaces();
+ while (networkInterfaces.hasMoreElements()) {
+ NetworkInterface netIf = networkInterfaces.nextElement();
+ if (isNetworkInterfaceTestable(netIf)) {
+ printNetIfDetails(netIf);
+ ms.setNetworkInterface(netIf);
+ NetworkInterface msNetIf = ms.getNetworkInterface();
+ if (netIf.equals(msNetIf)) {
+ System.out.println(" OK");
+ } else {
+ System.out.println("FAILED!!!");
+ printNetIfDetails(msNetIf);
+ passed = false;
+ }
+ System.out.println("------------------");
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ passed = false;
+ }
+ if (!passed) {
+ throw new RuntimeException("Test Fail");
+ }
+ System.out.println("Test passed ");
+ }
+
+ private static boolean isNetworkInterfaceTestable(NetworkInterface netIf) throws Exception {
+ System.out.println("checking netif == " + netIf.getName());
+ return (netIf.isUp() && netIf.supportsMulticast() && isIpAddrAvailable(netIf));
+ }
+
+ private static boolean isIpAddrAvailable (NetworkInterface netIf) {
+ boolean ipAddrAvailable = false;
+ byte[] nullIpAddr = {'0', '0', '0', '0'};
+ byte[] testIpAddr = null;
+
+ Enumeration<InetAddress> ipAddresses = netIf.getInetAddresses();
+ while (ipAddresses.hasMoreElements()) {
+ InetAddress testAddr = ipAddresses.nextElement();
+ testIpAddr = testAddr.getAddress();
+ if ((testIpAddr != null) && (!Arrays.equals(testIpAddr, nullIpAddr))) {
+ ipAddrAvailable = true;
+ break;
+ } else {
+ System.out.println("ignore netif " + netIf.getName());
+ }
+ }
+ return ipAddrAvailable;
+ }
+
+ private static void printNetIfDetails(NetworkInterface ni)
+ throws SocketException {
+ System.out.println("Name " + ni.getName() + " index " + ni.getIndex());
+ Enumeration<InetAddress> en = ni.getInetAddresses();
+ while (en.hasMoreElements()) {
+ System.out.println(" InetAdress: " + en.nextElement());
+ }
+ System.out.println("HardwareAddress: " + createMacAddrString(ni));
+ System.out.println("loopback: " + ni.isLoopback() + "; pointToPoint: "
+ + ni.isPointToPoint() + "; virtual: " + ni.isVirtual()
+ + "; MTU: " + ni.getMTU());
+ }
+
+ private static String createMacAddrString(NetworkInterface netIf)
+ throws SocketException {
+ byte[] macAddr = netIf.getHardwareAddress();
+ StringBuilder sb = new StringBuilder();
+ if (macAddr != null) {
+ for (int i = 0; i < macAddr.length; i++) {
+ sb.append(String.format("%02X%s", macAddr[i],
+ (i < macAddr.length - 1) ? "-" : ""));
+ }
+ }
+ return sb.toString();
+ }
+}
--- ./jdk/test/java/net/NetworkInterface/UniqueMacAddressesTest.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/net/NetworkInterface/UniqueMacAddressesTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -118,11 +118,14 @@
NetworkInterface netIf = null;
while (nis.hasMoreElements()) {
netIf = (NetworkInterface) nis.nextElement();
- macAddr = netIf.getHardwareAddress();
- if (macAddr != null) {
- System.out
- .println("Adding NetworkInterface " + netIf.getName());
- networkInterfaceList.add(netIf);
+ if (netIf.isUp()) {
+ macAddr = netIf.getHardwareAddress();
+ if (macAddr != null) {
+ System.out.println("Adding NetworkInterface "
+ + netIf.getName() + " with mac address "
+ + createMacAddressString(netIf));
+ networkInterfaceList.add(netIf);
+ }
}
}
}
--- ./jdk/test/java/net/ipv6tests/BadIPv6Addresses.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/net/ipv6tests/BadIPv6Addresses.java Mon Jan 05 11:57:27 2015 -0800
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 4742177
+ * @bug 4742177 8019834
* @summary Re-test IPv6 (and specifically MulticastSocket) with latest Linux & USAGI code
*/
import java.net.*;
--- ./jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh Mon Jan 05 11:57:27 2015 -0800
@@ -36,7 +36,7 @@
case "$OS" in
SunOS | Linux | Darwin ) ;;
# Skip locale test for Windows
- Windows* )
+ Windows* | CYGWIN* )
echo "Passed"; exit 0 ;;
* ) echo "Unrecognized system!" ; exit 1 ;;
esac
--- ./jdk/test/java/nio/file/Path/PathOps.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/nio/file/Path/PathOps.java Mon Jan 05 11:57:27 2015 -0800
@@ -22,7 +22,7 @@
*/
/* @test
- * @bug 4313887 6838333 6925932 7006126
+ * @bug 4313887 6838333 6925932 7006126 8037945
* @summary Unit test for java.nio.file.Path path operations
*/
@@ -899,6 +899,8 @@
.normalize("foo");
test("/foo")
.normalize("/foo");
+ test("")
+ .normalize("");
test(".")
.normalize("");
test("..")
--- ./jdk/test/java/rmi/registry/readTest/readTest.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/rmi/registry/readTest/readTest.sh Mon Jan 05 11:57:27 2015 -0800
@@ -37,11 +37,13 @@
SunOS | Linux | Darwin )
PS=":"
FS="/"
+ CHMOD="${FS}bin${FS}chmod"
FILEURL="file:"
;;
Windows* )
PS=";"
FS="\\"
+ CHMOD="chmod"
FILEURL="file:/"
if [ "$VER" -eq "5" ]; then
ARGS="-Djdk.net.ephemeralPortRange.low=1024 -Djdk.net.ephemeralPortRange.high=65000"
@@ -51,6 +53,7 @@
CYGWIN* )
PS=";"
FS="/"
+ CHMOD="chmod"
FILEURL="file:/"
if [ "${VER}" -eq "5" ]; then
ARGS="-Djdk.net.ephemeralPortRange.low=1024 -Djdk.net.ephemeralPortRange.high=65000"
@@ -65,6 +68,7 @@
TEST_CLASSPATH=.$PS${TESTCLASSPATH:-$TESTCLASSES}
cp -r ${TESTSRC}${FS}* .
+${CHMOD} -R u+w *
${TESTJAVA}${FS}bin${FS}javac testPkg${FS}*java
${TESTJAVA}${FS}bin${FS}javac -cp $TEST_CLASSPATH readTest.java
--- ./jdk/test/java/util/Currency/ValidateISO4217.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/util/Currency/ValidateISO4217.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 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
@@ -22,7 +22,7 @@
*/
/*
* @test
- * @bug 4691089 4819436 4942982 5104960 6544471 6627549 7066203
+ * @bug 4691089 4819436 4942982 5104960 6544471 6627549 7066203 7195759
* @summary Validate ISO 4217 data for Currency class.
*/
@@ -92,7 +92,7 @@
/* Codes that are obsolete, do not have related country */
static final String otherCodes =
- "ADP-AFA-ATS-AYM-BEF-BGL-BOV-BYB-CLF-CUC-CYP-DEM-EEK-ESP-FIM-FRF-GRD-GWP-IEP-ITL-LUF-MGF-MTL-MXV-NLG-PTE-RUR-SDD-SIT-SKK-SRG-TMM-TPE-TRL-VEF-USN-USS-XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XSU-XTS-XUA-XXX-YUM-ZWD-ZWN-ZWR";
+ "ADP-AFA-ATS-AYM-AZM-BEF-BGL-BOV-BYB-CLF-CUC-CYP-DEM-EEK-ESP-FIM-FRF-GHC-GRD-GWP-IEP-ITL-LUF-MGF-MTL-MXV-MZM-NLG-PTE-ROL-RUR-SDD-SIT-SKK-SRG-TMM-TPE-TRL-VEF-USN-USS-VEB-XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XSU-XTS-XUA-XXX-YUM-ZMK-ZWD-ZWN-ZWR";
static boolean err = false;
--- ./jdk/test/java/util/Currency/tablea1.txt Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/util/Currency/tablea1.txt Mon Jan 05 11:57:27 2015 -0800
@@ -1,12 +1,12 @@
#
#
-# Based on BSi's ISO4217 data - "TABLE A1.doc" + amendments up until MA151.doc
-# (As of 7 April 2011)
+# Amendments up until ISO 4217 AMENDMENT NUMBER 159
+# (As of 15 August 2014)
#
# Version
FILEVERSION=1
-DATAVERSION=151
+DATAVERSION=159
# ISO 4217 currency data
AF AFN 971 2
@@ -23,7 +23,7 @@
AU AUD 36 2
AT EUR 978 2
# MA 129
-AZ AZM 31 2 2005-12-31-20-00-00 AZN 944 2
+AZ AZN 944 2
BS BSD 44 2
BH BHD 48 3
BD BDT 50 2
@@ -96,7 +96,7 @@
GM GMD 270 2
GE GEL 981 2
DE EUR 978 2
-GH GHC 288 2 2007-07-01-00-00-00 GHS 936 2
+GH GHS 936 2
GI GIP 292 2
GR EUR 978 2
GL DKK 208 2
@@ -135,14 +135,14 @@
KW KWD 414 3
KG KGS 417 2
LA LAK 418 2
-LV LVL 428 2
+LV LVL 428 2 2013-12-31-22-00-00 EUR 978 2
LB LBP 422 2
#LS ZAR 710 2
LS LSL 426 2
LR LRD 430 2
LY LYD 434 3
LI CHF 756 2
-LT LTL 440 2
+LT LTL 440 2 2014-12-31-22-00-00 EUR 978 2
LU EUR 978 2
MO MOP 446 2
MK MKD 807 2
@@ -166,7 +166,7 @@
MS XCD 951 2
MA MAD 504 2
# MA 130
-MZ MZM 508 2 2006-06-30-22-00-00 MZN 943 2
+MZ MZN 943 2
MM MMK 104 2
# MA 134
ME EUR 978 2
@@ -200,7 +200,7 @@
PR USD 840 2
QA QAR 634 2
RE EUR 978 2
-RO ROL 946 2 2005-06-30-21-00-00 RON 946 2
+RO RON 946 2
RU RUB 643 2
RW RWF 646 0
SH SHP 654 2
@@ -227,6 +227,7 @@
SB SBD 90 2
SO SOS 706 2
ZA ZAR 710 2
+SS SSP 728 2
ES EUR 978 2
LK LKR 144 2
SD SDG 938 2
@@ -255,7 +256,7 @@
TM TMT 934 2
TC USD 840 2
TV AUD 36 2
-UG UGX 800 2
+UG UGX 800 0
UA UAH 980 2
AE AED 784 2
GB GBP 826 2
@@ -266,14 +267,14 @@
UY UYU 858 2
UZ UZS 860 2
VU VUV 548 0
-VE VEB 862 2 2008-01-01-04-00-00 VEF 937 2
-VN VND 704 2
+VE VEF 937 2
+VN VND 704 0
VG USD 840 2
VI USD 840 2
WF XPF 953 0
EH MAD 504 2
YE YER 886 2
-ZM ZMK 894 2
+ZM ZMW 967 2
ZW ZWL 932 2
#XAU XAU 959
#XBA XBA 955
--- ./jdk/test/java/util/Locale/LocaleTest.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/util/Locale/LocaleTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -25,7 +25,7 @@
* @bug 4052404 4052440 4084688 4092475 4101316 4105828 4107014 4107953 4110613
* 4118587 4118595 4122371 4126371 4126880 4135316 4135752 4139504 4139940 4143951
* 4147315 4147317 4147552 4335196 4778440 4940539 5010672 6475525 6544471 6627549
- * 6786276 7066203
+ * 6786276 7066203 7085757
* @summary test Locales
*/
/*
@@ -440,8 +440,8 @@
String[] spotCheck2 = { "US", "CA", "GB", "FR", "DE", "IT", "JP", "KR", "CN", "TW", "TH" };
- if (test.length != 249)
- errln("Expected getISOCountries to return 249 countries; it returned " + test.length);
+ if (test.length != 250)
+ errln("Expected getISOCountries to return 250 countries; it returned " + test.length);
else {
for (int i = 0; i < spotCheck2.length; i++) {
int j;
--- ./jdk/test/java/util/TimeZone/TimeZoneDatePermissionCheck.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/util/TimeZone/TimeZoneDatePermissionCheck.sh Mon Jan 05 11:57:27 2015 -0800
@@ -36,6 +36,7 @@
${TESTJAVA}/bin/keytool -genkeypair -alias testcert \
-keystore ${TESTCLASSES}/timezonedatetest.store \
-storepass testpass -validity 360 \
+ -keyalg rsa \
-dname "cn=Mark Wildebeest, ou=FreeSoft, o=Red Hat, c=NL" \
-keypass testpass
--- ./jdk/test/java/util/jar/JarInputStream/ExtraFileInMetaInf.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/util/jar/JarInputStream/ExtraFileInMetaInf.java Mon Jan 05 11:57:27 2015 -0800
@@ -49,7 +49,7 @@
new File("ks").delete();
sun.security.tools.KeyTool.main(
("-keystore ks -storepass changeit -keypass changeit " +
- "-alias a -dname CN=A -genkeypair").split(" "));
+ "-keyalg rsa -alias a -dname CN=A -genkeypair").split(" "));
sun.security.tools.JarSigner.main(
"-keystore ks -storepass changeit x.jar a".split(" "));
--- ./jdk/test/java/util/logging/ParentLoggersTest.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/util/logging/ParentLoggersTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -40,7 +40,9 @@
static final String LOGGER_NAME_1 = PARENT_NAME_1 + ".myLogger";
static final String LOGGER_NAME_2 = PARENT_NAME_2 + ".myBar.myLogger";
- static final List<String> initialLoggerNames = new ArrayList<String>();
+ static final List<String> initialLoggerNames = new ArrayList<>();
+ static final List<Logger> createdLoggers = new ArrayList<>();
+
public static void main(String args[]) throws Exception {
// cache the initial set of loggers before this test begins
// to add any loggers
@@ -51,7 +53,7 @@
if (!defaultLoggers.contains(logger)) {
initialLoggerNames.add(logger);
}
- };
+ }
String tstSrc = System.getProperty(TST_SRC_PROP);
File fname = new File(tstSrc, LM_PROP_FNAME);
@@ -69,7 +71,7 @@
}
public static List<String> getDefaultLoggerNames() {
- List<String> expectedLoggerNames = new ArrayList<String>();
+ List<String> expectedLoggerNames = new ArrayList<>();
// LogManager always creates two loggers:
expectedLoggerNames.add(""); // root logger: ""
@@ -83,56 +85,41 @@
*/
public static boolean checkLoggers() {
String failMsg = "# checkLoggers: getLoggerNames() returned unexpected loggers";
- Vector<String> expectedLoggerNames = new Vector<String>(getDefaultLoggerNames());
+ List<String> expectedLoggerNames = new ArrayList<>(getDefaultLoggerNames());
// Create the logger LOGGER_NAME_1
- Logger logger1 = Logger.getLogger(LOGGER_NAME_1);
- expectedLoggerNames.addElement(PARENT_NAME_1);
- expectedLoggerNames.addElement(LOGGER_NAME_1);
+ createdLoggers.add(Logger.getLogger(LOGGER_NAME_1));
+ expectedLoggerNames.add(PARENT_NAME_1);
+ expectedLoggerNames.add(LOGGER_NAME_1);
// Create the logger LOGGER_NAME_2
- Logger logger2 = Logger.getLogger(LOGGER_NAME_2);
- expectedLoggerNames.addElement(PARENT_NAME_2);
- expectedLoggerNames.addElement(LOGGER_NAME_2);
+ createdLoggers.add(Logger.getLogger(LOGGER_NAME_2));
+ expectedLoggerNames.add(PARENT_NAME_2);
+ expectedLoggerNames.add(LOGGER_NAME_2);
Enumeration<String> returnedLoggersEnum = logMgr.getLoggerNames();
- Vector<String> returnedLoggerNames = new Vector<String>(0);
+ List<String> returnedLoggerNames = new ArrayList<>(0);
while (returnedLoggersEnum.hasMoreElements()) {
String logger = returnedLoggersEnum.nextElement();
if (!initialLoggerNames.contains(logger)) {
// filter out the loggers that have been added before this test runs
- returnedLoggerNames.addElement(logger);
+ returnedLoggerNames.add(logger);
}
-
- };
-
+ }
+ System.out.println(returnedLoggerNames);
return checkNames(expectedLoggerNames, returnedLoggerNames, failMsg);
}
// Returns boolean values: PASSED or FAILED
- private static boolean checkNames(Vector<String> expNames,
- Vector<String> retNames,
+ private static boolean checkNames(List<String> expNames,
+ List<String> retNames,
String failMsg) {
boolean status = PASSED;
if (expNames.size() != retNames.size()) {
status = FAILED;
- } else {
- boolean checked[] = new boolean[retNames.size()];
- for (int i = 0; i < expNames.size(); i++) {
- int j = 0;
- for (; j < retNames.size(); j++) {
- if (!checked[j] &&
- expNames.elementAt(i).equals(retNames.elementAt(j))) {
- checked[j] = true;
- break;
- }
- }
- if (j >= retNames.size()) {
- status = FAILED;
- break;
- }
- }
+ } else if (!new HashSet<>(expNames).equals(new HashSet<>(retNames))) {
+ status = FAILED;
}
if (!status) {
printFailMsg(expNames, retNames, failMsg);
@@ -140,25 +127,25 @@
return status;
}
- private static void printFailMsg(Vector<String> expNames,
- Vector<String> retNames,
+ private static void printFailMsg(List<String> expNames,
+ List<String> retNames,
String failMsg) {
out.println();
out.println(failMsg);
- if (expNames.size() == 0) {
+ if (expNames.isEmpty()) {
out.println("# there are NO expected logger names");
} else {
out.println("# expected logger names (" + expNames.size() + "):");
for (int i = 0; i < expNames.size(); i++) {
- out.println(" expNames[" + i + "] = " + expNames.elementAt(i));
+ out.println(" expNames[" + i + "] = " + expNames.get(i));
}
}
- if (retNames.size() == 0) {
+ if (retNames.isEmpty()) {
out.println("# there are NO returned logger names");
} else {
out.println("# returned logger names (" + retNames.size() + "):");
for (int i = 0; i < retNames.size(); i++) {
- out.println(" retNames[" + i + "] = " + retNames.elementAt(i));
+ out.println(" retNames[" + i + "] = " + retNames.get(i));
}
}
}
--- ./jdk/test/java/util/logging/TestLoggerBundleSync.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/util/logging/TestLoggerBundleSync.java Mon Jan 05 11:57:27 2015 -0800
@@ -190,8 +190,10 @@
final static class MyHandler extends Handler {
volatile ResourceBundle rb;
volatile String rbName;
+ volatile int count = 0;
@Override
public synchronized void publish(LogRecord record) {
+ count++;
rb = record.getResourceBundle();
rbName = record.getResourceBundleName();
}
@@ -227,23 +229,51 @@
Logger ll = Logger.getLogger(l.getName()+".bie.bye");
ResourceBundle hrb;
String hrbName;
+ if (handler.getLevel() != Level.FINEST) {
+ throw new RuntimeException("Handler level is not finest: "
+ + handler.getLevel());
+ }
+ final int countBefore = handler.count;
ll.setLevel(Level.FINEST);
ll.addHandler(handler);
ll.fine("dummy");
ll.removeHandler(handler);
+ final int countAfter = handler.count;
+ if (countBefore == countAfter) {
+ throw new RuntimeException("Handler not called for "
+ + ll.getName() + "("+ countAfter +")");
+ }
hrb = handler.rb;
hrbName = handler.rbName;
if (name != null) {
+ // if name is not null, then it implies that it
+ // won't change, since setResourceBundle() cannot
+ // replace a non null name.
+ // Since we never set the resource bundle on 'll',
+ // then ll must inherit its resource bundle [name]
+ // from l - and therefor we should find it in
+ // handler.rb/handler.rbName
if (!name.equals(hrbName)) {
throw new RuntimeException("Unexpected bundle name: "
- +hrb.getClass().getName());
+ +hrbName);
}
+ // here we know that hrbName is not null so hrb
+ // should not be null either.
if (!name.equals(hrb.getClass().getName())) {
throw new RuntimeException("Unexpected bundle name: "
+hrb.getClass().getName());
}
}
+ // Make sure to refer to 'l' explicitly in order to
+ // prevent eager garbage collecting before the end of
+ // the test (JDK-8030192)
+ if (!ll.getName().startsWith(l.getName())) {
+ throw new RuntimeException("Logger " + ll.getName()
+ + "does not start with expected prefix "
+ + l.getName());
+ }
+
getRBcount.incrementAndGet();
if (!goOn) break;
Thread.sleep(1);
--- ./jdk/test/java/util/zip/ZipFile/ReadZip.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/java/util/zip/ZipFile/ReadZip.java Mon Jan 05 11:57:27 2015 -0800
@@ -63,6 +63,8 @@
Files.copy(Paths.get(System.getProperty("test.src", ""), "input.zip"),
newZip.toPath(), StandardCopyOption.REPLACE_EXISTING);
+ newZip.setWritable(true);
+
// pad some bytes
try (OutputStream os = Files.newOutputStream(newZip.toPath(),
StandardOpenOption.APPEND)) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/imageio/plugins/png/PngDitDepthTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,74 @@
+/*
+ * 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 4991647
+* @summary PNGMetadata.getAsTree() sets bitDepth to invalid value
+* @run main PngDitDepthTest
+*/
+
+import org.w3c.dom.Node;
+
+import javax.imageio.ImageIO;
+import javax.imageio.ImageTypeSpecifier;
+import javax.imageio.ImageWriter;
+import javax.imageio.metadata.IIOInvalidTreeException;
+import javax.imageio.metadata.IIOMetadata;
+import java.awt.image.ColorModel;
+import java.awt.image.SampleModel;
+import java.util.Iterator;
+
+public class PngDitDepthTest {
+
+ public static void main(String[] args) throws IIOInvalidTreeException {
+
+ // getting the writer for the png format
+ Iterator iter = ImageIO.getImageWritersByFormatName("png");
+ ImageWriter writer = (ImageWriter) iter.next();
+
+ // creating a color model
+ ColorModel colorModel = ColorModel.getRGBdefault();
+
+ // creating a sample model
+ SampleModel sampleModel = colorModel.createCompatibleSampleModel(640, 480);
+
+ // creating a default metadata object
+ IIOMetadata metaData = writer.getDefaultImageMetadata(new ImageTypeSpecifier(colorModel, sampleModel), null);
+ String formatName = metaData.getNativeMetadataFormatName();
+
+ // first call
+ Node metaDataNode = metaData.getAsTree(formatName);
+ try {
+ metaData.setFromTree(formatName, metaDataNode);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+
+ // second call (bitdepht is already set to an invalid value)
+ metaDataNode = metaData.getAsTree(formatName);
+
+ metaData.setFromTree(formatName, metaDataNode);
+
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/swing/JComboBox/8032878/bug8032878.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,136 @@
+/*
+ * 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 8032878
+ * @summary Checks that JComboBox as JTable cell editor processes key events
+ * even where setSurrendersFocusOnKeystroke flag in JTable is false and
+ * that it does not lose the first key press where the flag is true.
+ * @library ../../regtesthelpers
+ * @build Util
+ * @author Alexey Ivanov
+ */
+
+import java.awt.*;
+import java.awt.event.KeyEvent;
+import javax.swing.*;
+import javax.swing.text.JTextComponent;
+
+import sun.awt.SunToolkit;
+
+public class bug8032878 implements Runnable {
+ private static final String ONE = "one";
+ private static final String TWO = "two";
+ private static final String THREE = "three";
+
+ private static final String EXPECTED = "one123";
+
+ private final Robot robot;
+
+ private JFrame frame;
+ private JComboBox cb;
+
+ private volatile boolean surrender;
+ private volatile String text;
+
+ public static void main(String[] args) throws Exception {
+ final bug8032878 test = new bug8032878();
+
+ test.test(false);
+ test.test(true);
+ }
+
+ public bug8032878() throws AWTException {
+ robot = new Robot();
+ robot.setAutoDelay(100);
+ }
+
+ private void setupUI() {
+ frame = new JFrame();
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+ JTable table = new JTable(new String[][] {{ONE}, {TWO}, {THREE}},
+ new String[] { "#"});
+ table.setSurrendersFocusOnKeystroke(surrender);
+
+ cb = new JComboBox(new String[]{ONE, TWO, THREE});
+ cb.setEditable(true);
+ DefaultCellEditor comboEditor = new DefaultCellEditor(cb);
+ comboEditor.setClickCountToStart(1);
+ table.getColumnModel().getColumn(0).setCellEditor(comboEditor);
+ frame.add(table);
+
+ frame.pack();
+ frame.setVisible(true);
+ }
+
+ private void test(final boolean flag) throws Exception {
+ try {
+ surrender = flag;
+ SwingUtilities.invokeAndWait(this);
+
+ runTest();
+ checkResult();
+ } finally {
+ if (frame != null) {
+ frame.dispose();
+ }
+ }
+ }
+
+ private void runTest() throws Exception {
+ realSync();
+ // Select 'one'
+ Util.hitKeys(robot, KeyEvent.VK_TAB);
+ realSync();
+ Util.hitKeys(robot, KeyEvent.VK_1);
+ Util.hitKeys(robot, KeyEvent.VK_2);
+ Util.hitKeys(robot, KeyEvent.VK_3);
+ Util.hitKeys(robot, KeyEvent.VK_ENTER);
+ realSync();
+ }
+
+ private void checkResult() throws Exception {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ text = ((JTextComponent) cb.getEditor().getEditorComponent()).getText();
+ }
+ });
+ if (text.equals(EXPECTED)) {
+ System.out.println("Test with surrender = " + surrender + " passed");
+ } else {
+ System.out.println("Test with surrender = " + surrender + " failed");
+ throw new RuntimeException("Expected value in JComboBox editor '" +
+ EXPECTED + "' but found '" + text + "'.");
+ }
+ }
+
+ private static void realSync() {
+ ((SunToolkit) (Toolkit.getDefaultToolkit())).realSync();
+ }
+
+ @Override
+ public void run() {
+ setupUI();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/swing/JComponent/8043610/bug8043610.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,122 @@
+/*
+ * 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 8043610
+ @summary Tests that JComponent invalidate, revalidate and repaint methods could
+ be called from any thread
+ @author Petr Pchelko
+*/
+
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicReference;
+
+public class bug8043610 {
+ private static volatile JFrame frame;
+ private static volatile JComponent component;
+
+ public static void main(String[] args) throws Exception {
+ ThreadGroup stubTG = new ThreadGroup(getRootThreadGroup(), "Stub Thread Group");
+ ThreadGroup swingTG = new ThreadGroup(getRootThreadGroup(), "SwingTG");
+ try {
+ Thread stubThread = new Thread(stubTG, new Runnable() {
+ @Override
+ public void run() {
+ SunToolkit.createNewAppContext();
+ }
+ });
+ stubThread.start();
+ stubThread.join();
+
+ final CountDownLatch startSwingLatch = new CountDownLatch(1);
+ new Thread(swingTG, new Runnable() {
+ @Override
+ public void run() {
+ SunToolkit.createNewAppContext();
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ frame = new JFrame();
+ component = new JLabel("Test Text");
+ frame.add(component);
+ frame.setBounds(100, 100, 100, 100);
+ frame.setVisible(true);
+ startSwingLatch.countDown();
+ }
+ });
+ }
+ }).start();
+ startSwingLatch.await();
+
+ final AtomicReference<Exception> caughtException = new AtomicReference<>();
+ Thread checkThread = new Thread(getRootThreadGroup(), new Runnable() {
+ @Override
+ public void run() {
+ try {
+ component.invalidate();
+ component.revalidate();
+ component.repaint(new Rectangle(0, 0, 0, 0));
+ } catch (Exception e) {
+ caughtException.set(e);
+ }
+ }
+ });
+ checkThread.start();
+ checkThread.join();
+
+ if (caughtException.get() != null) {
+ throw new RuntimeException("Failed. Caught exception!", caughtException.get());
+ }
+ } finally {
+ new Thread(swingTG, new Runnable() {
+ @Override
+ public void run() {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ if (frame != null) {
+ frame.dispose();
+ }
+ }
+ });
+ }
+ }).start();
+ }
+ }
+
+ private static ThreadGroup getRootThreadGroup() {
+ ThreadGroup currentTG = Thread.currentThread().getThreadGroup();
+ ThreadGroup parentTG = currentTG.getParent();
+ while (parentTG != null) {
+ currentTG = parentTG;
+ parentTG = currentTG.getParent();
+ }
+ return currentTG;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/swing/JFileChooser/8046391/bug8046391.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,63 @@
+/*
+ * 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 8046391
+ * @summary JFileChooser hangs if displayed in Windows L&F
+ * @author Alexey Ivanov
+ * @run main/othervm/timeout=10 bug8046391
+*/
+
+import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
+import sun.awt.OSInfo;
+import sun.awt.OSInfo.OSType;
+
+import javax.swing.JFileChooser;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.UnsupportedLookAndFeelException;
+
+public class bug8046391 {
+
+ public static void main(String[] args) throws Exception {
+ OSType type = OSInfo.getOSType();
+ if (type != OSType.WINDOWS) {
+ System.out.println("This test is for Windows only... skipping!");
+ return;
+ }
+
+ SwingUtilities.invokeAndWait(() -> {
+ try {
+ UIManager.setLookAndFeel(new WindowsLookAndFeel());
+ } catch (UnsupportedLookAndFeelException e) {
+ e.printStackTrace();
+ }
+ System.out.println("Creating JFileChooser...");
+ JFileChooser fileChooser = new JFileChooser();
+ System.out.println("Test passed: chooser = " + fileChooser);
+ });
+ // Test fails if creating JFileChooser hangs
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/swing/JFileChooser/8062561/bug8062561.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,213 @@
+/*
+ * 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.
+ */
+
+import java.awt.Robot;
+import java.awt.event.KeyEvent;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.util.concurrent.TimeUnit;
+import javax.swing.JFileChooser;
+import javax.swing.SwingUtilities;
+import javax.swing.filechooser.FileSystemView;
+
+/**
+ * @test
+ * @bug 8062561
+ * @summary File system view returns null default directory
+ * @run main/othervm bug8062561 GENERATE_POLICY
+ * @run main/othervm/policy=security.policy bug8062561 CHECK_DEFAULT_DIR run
+ */
+public class bug8062561 {
+
+ private static final String POLICY_FILE = "security2.policy";
+ private static volatile boolean fileChooserIsShown = false;
+
+ public static void main(String[] args) throws Exception {
+
+ String test = args[0];
+
+ if ("GENERATE_POLICY".equals(test)) {
+ generatePolicyFile();
+ } else if ("CHECK_DEFAULT_DIR".equals(test)) {
+ checkDefaultDirectory();
+ } else if ("CHECK_FILE_CHOOSER".equals(test)) {
+ checkFileChooser();
+ } else {
+ throw new RuntimeException("Wrong argument!");
+ }
+ }
+
+ private static void checkDefaultDirectory() {
+ if (System.getSecurityManager() == null) {
+ throw new RuntimeException("Security manager is not set!");
+ }
+
+ File defaultDirectory = FileSystemView.getFileSystemView().
+ getDefaultDirectory();
+ if (defaultDirectory != null) {
+ throw new RuntimeException("File system default directory is null!");
+ }
+ }
+ private static volatile JFileChooser fileChooser;
+
+ private static void checkFileChooser() throws Exception {
+ if (System.getSecurityManager() == null) {
+ throw new RuntimeException("Security manager is not set!");
+ }
+
+ Robot robot = new Robot();
+ robot.setAutoDelay(50);
+
+ SwingUtilities.invokeLater(new Runnable() {
+
+ public void run() {
+ fileChooser = new JFileChooser();
+ fileChooser.showOpenDialog(null);
+ fileChooserIsShown = true;
+ System.out.println("Start file chooser: " + fileChooserIsShown);
+ }
+ });
+
+ long time = System.currentTimeMillis();
+ while (fileChooser == null) {
+ if (System.currentTimeMillis() - time >= 5000) {
+ System.exit(1);
+ }
+ Thread.sleep(500);
+ }
+
+ Thread.sleep(500);
+ robot.keyPress(KeyEvent.VK_ESCAPE);
+ robot.keyRelease(KeyEvent.VK_ESCAPE);
+ System.exit(0);
+ }
+
+ private static void generatePolicyFile() throws Exception {
+ if (System.getSecurityManager() != null) {
+ throw new RuntimeException("Security manager should be null!");
+ }
+
+ String osName = System.getProperty("os.name");
+ System.out.println("os name: " + osName);
+ if (!osName.startsWith("Windows")) {
+ return;
+ }
+ System.out.println("after OS Check!");
+
+ File defaultDirectory = FileSystemView.getFileSystemView().
+ getDefaultDirectory();
+
+ if (defaultDirectory == null) {
+ throw new RuntimeException("Default directory is null!");
+ }
+
+ File policyFile = new File(POLICY_FILE);
+ if (!policyFile.exists()) {
+ policyFile.createNewFile();
+ }
+
+ PrintWriter writer = new PrintWriter(policyFile, "UTF-8");
+ writer.println("grant {");
+ String documents = defaultDirectory.getCanonicalPath();
+ documents = documents.replace('\\', '/');
+ // user.dir permission
+ writer.print(" permission java.util.PropertyPermission");
+ writer.print(" \"user.dir\",");
+ writer.println(" \"read\";");
+ // Documents permission
+ writer.print(" permission java.io.FilePermission");
+ writer.print(" \"" + documents + "\",");
+ writer.println(" \"read\";");
+ // Desktop permission
+ writer.print(" permission java.io.FilePermission");
+ writer.print(" \"" + documents.replace("Documents", "Desktop") + "\",");
+ writer.println(" \"read\";");
+ // robot permission // "java.awt.AWTPermission" "createRobot"
+ writer.print(" permission java.awt.AWTPermission");
+ writer.println(" \"createRobot\";");
+ writer.println("};");
+ writer.close();
+
+ performTest();
+ }
+
+ private static void performTest() throws Exception {
+ String javaPath = System.getProperty("java.home", "");
+ String command = javaPath + File.separator + "bin" + File.separator + "java"
+ + " -Djava.security.manager -Djava.security.policy=" + POLICY_FILE
+ + " bug8062561 CHECK_FILE_CHOOSER";
+ System.out.println(command);
+ int processExit = 0;
+
+ Process process = Runtime.getRuntime().exec(command);
+
+ try {
+ processExit = process.waitFor();
+ } catch (IllegalThreadStateException e) {
+ throw new RuntimeException(e);
+ }
+ System.out.println("[RESULT] : "
+ + "The sub process has cleanly exited : PASS");
+
+ InputStream errorStream = process.getErrorStream();
+ System.out.println("========= Child process stderr ========");
+ boolean exception = dumpStream(errorStream);
+ if (exception) {
+ throw new RuntimeException("[RESULT] :"
+ + " Exception in child process : FAIL");
+ }
+ System.out.println("=======================================");
+
+ InputStream processInputStream = process.getInputStream();
+ System.out.println("========= Child process output ========");
+ dumpStream(processInputStream);
+ System.out.println("=======================================");
+
+ if (processExit != 0) {
+ System.out.println("process exit: " + processExit);
+ process.destroy();
+ throw new RuntimeException("[RESULT] : "
+ + "The sub process has not exited : FAIL");
+ }
+ }
+
+ public static boolean dumpStream(InputStream in) throws IOException {
+ String tempString;
+ int count = in.available();
+ boolean exception = false;
+ while (count > 0) {
+ byte[] b = new byte[count];
+ in.read(b);
+ tempString = new String(b);
+ if (!exception) {
+ exception = tempString.indexOf("Exception") != -1;
+ }
+ System.out.println(tempString);
+ count = in.available();
+ }
+
+ return exception;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/swing/JFileChooser/8062561/security.policy Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,5 @@
+grant {
+
+ permission java.util.PropertyPermission "user.home", "read";
+ permission java.util.PropertyPermission "user.dir", "read";
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/swing/JFileChooser/8062561/security2.policy Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,1 @@
+// Autogenerated file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/swing/JPopupMenu/7160604/bug7160604.html Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,30 @@
+<!--
+ 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.
+-->
+
+<html>
+<body>
+<applet code="bug7160604.class" width=400 height=100></applet>
+Click on the top-bar and combo-box more than once.
+Make sure popup menu and drop-down list have a border and their items are drawn properly.
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/swing/JPopupMenu/7160604/bug7160604.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,90 @@
+/*
+ * 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 7160604
+ @summary Using non-opaque windows - popups are initially not painted correctly
+ @author Oleg Pekhovskiy
+ @run applet/manual=yesno bug7160604.html
+*/
+
+import javax.swing.AbstractAction;
+import javax.swing.BorderFactory;
+import javax.swing.JApplet;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JWindow;
+import javax.swing.SwingUtilities;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+public class bug7160604 extends JApplet {
+
+ public void init() {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ final JWindow window = new JWindow();
+ window.setLocation(200, 200);
+ window.setSize(300, 300);
+
+ final JLabel label = new JLabel("...click to invoke JPopupMenu");
+ label.setOpaque(true);
+ final JPanel contentPane = new JPanel(new BorderLayout());
+ contentPane.setBorder(BorderFactory.createLineBorder(Color.RED));
+ window.setContentPane(contentPane);
+ contentPane.add(label, BorderLayout.NORTH);
+
+ final JComboBox comboBox = new JComboBox(new Object[]{"1", "2", "3", "4"});
+ contentPane.add(comboBox, BorderLayout.SOUTH);
+
+ final JPopupMenu jPopupMenu = new JPopupMenu();
+
+ jPopupMenu.add("string");
+ jPopupMenu.add(new AbstractAction("action") {
+ @Override
+ public void actionPerformed(final ActionEvent e) {
+ }
+ });
+ jPopupMenu.add(new JLabel("label"));
+ jPopupMenu.add(new JMenuItem("MenuItem"));
+ label.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseReleased(final MouseEvent e) {
+ jPopupMenu.show(label, 0, 0);
+ }
+ });
+
+ window.setBackground(new Color(0, 0, 0, 0));
+
+ window.setVisible(true);
+ }
+ });
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/swing/JTable/8032874/bug8032874.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,145 @@
+/*
+ * 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 8032874
+ * @summary Test whether ArrayIndexOutOfBoundsException is thrown or not,
+ * once selected row is removed from JTable with Sorter and Filter
+ * @author Dmitry Markov
+ * @run main bug8032874
+ */
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.*;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableRowSorter;
+
+import sun.awt.SunToolkit;
+
+public class bug8032874 {
+ private static final int ROW_COUNT = 5;
+ private static JTable table;
+ private static TestTableModel tableModel;
+
+ public static void main(String args[]) throws Exception {
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ createAndShowUI();
+ }
+ });
+ toolkit.realSync();
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ table.getRowSorter().toggleSortOrder(0);
+ table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
+ table.setRowSelectionInterval(1, 2);
+ }
+ });
+ toolkit.realSync();
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ for (int i = 0; i < ROW_COUNT; i++) {
+ tableModel.remove(0);
+ table.getRowSorter().toggleSortOrder(0);
+ }
+ }
+ });
+ }
+
+ public static void createAndShowUI() {
+ try {
+ UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ JFrame frame = new JFrame("bug8032874");
+ frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+
+ JPanel panel = new JPanel();
+ panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
+
+ tableModel = new TestTableModel();
+ table = new JTable(tableModel);
+ table.setSurrendersFocusOnKeystroke(true);
+
+ final TableRowSorter<TestTableModel> rowSorter = new TableRowSorter<TestTableModel>(tableModel);
+ rowSorter.setRowFilter(new RowFilter<TestTableModel, Integer>() {
+ @Override
+ public boolean include(Entry<? extends TestTableModel, ? extends Integer> entry) {
+ return entry.getIdentifier() % 2 == 0;
+ }
+ });
+ table.setRowSorter(rowSorter);
+
+ JScrollPane jScrollPane = new JScrollPane(table);
+ panel.add(jScrollPane);
+
+ frame.setContentPane(panel);
+ frame.setSize(new Dimension(800, 600));
+ frame.setVisible(true);
+ }
+
+ private static class TestTableModel extends AbstractTableModel {
+ private final List<Integer> data;
+
+ public TestTableModel() {
+ data = new ArrayList<Integer>();
+
+ for (int i = 0; i < ROW_COUNT; i++) {
+ data.add(i);
+ }
+ }
+
+ @Override
+ public int getRowCount() {
+ return data.size();
+ }
+
+ @Override
+ public int getColumnCount() {
+ return 1;
+ }
+
+ @Override
+ public Object getValueAt(int rowIndex, int columnIndex) {
+ return data.get(rowIndex);
+ }
+
+ public void remove(int row) {
+ data.remove(row);
+ fireTableRowsDeleted(row, row);
+ }
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/swing/JTextField/8036819/bug8036819.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,132 @@
+/*
+ * 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
+ * @library ../../regtesthelpers
+ * @build Util
+ * @bug 8036819
+ * @summary JAB: mnemonics not read for textboxes
+ * @author Vivi An
+ * @run main bug8036819
+ */
+
+import javax.swing.*;
+import javax.swing.event.*;
+import java.awt.event.*;
+import java.awt.*;
+import sun.awt.SunToolkit;
+import javax.accessibility.*;
+
+public class bug8036819 {
+
+ public static volatile Boolean passed = false;
+
+ public static void main(String args[]) throws Throwable {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ createAndShowGUI();
+ }
+ });
+
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ toolkit.realSync();
+
+ Robot robo = new Robot();
+ robo.setAutoDelay(300);
+
+ // Using mnemonic key to focus on the textfield
+ Util.hitMnemonics(robo, KeyEvent.VK_P);
+ toolkit.realSync();
+
+ if (!passed){
+ throw new RuntimeException("Test failed.");
+ }
+ }
+
+ private static void createAndShowGUI() {
+ JFrame mainFrame = new JFrame("bug 8036819");
+
+ JLabel usernameLabel = new JLabel("Username: ");
+ JTextField usernameField = new JTextField(20);
+ usernameLabel.setDisplayedMnemonic(KeyEvent.VK_U);
+ usernameLabel.setLabelFor(usernameField);
+
+ JLabel pwdLabel = new JLabel("Password: ");
+ final JTextField pwdField = new JTextField(20);
+ pwdLabel.setDisplayedMnemonic(KeyEvent.VK_P);
+ pwdLabel.setLabelFor(pwdField);
+
+ pwdField.addKeyListener(
+ new KeyListener(){
+ @Override
+ public void keyPressed(KeyEvent keyEvent) {
+ }
+
+ @Override
+ public void keyTyped(KeyEvent keyEvent) {
+ }
+
+ @Override
+ public void keyReleased(KeyEvent keyEvent){
+ JComponent comp = (JComponent) pwdField;
+ AccessibleContext ac = comp.getAccessibleContext();
+ AccessibleExtendedComponent aec = (AccessibleExtendedComponent)ac.getAccessibleComponent();
+ AccessibleKeyBinding akb = aec.getAccessibleKeyBinding();
+ if (akb != null){
+ int count = akb.getAccessibleKeyBindingCount();
+ if (count != 1){
+ passed = false;
+ return;
+ }
+
+ // there is 1 accessible key for the text field
+ System.out.println("Retrieved AccessibleKeyBinding for textfield " + count);
+
+ // the key code is KeyEvent.VK_P
+ Object o = akb.getAccessibleKeyBinding(0);
+ if (o instanceof KeyStroke){
+ javax.swing.KeyStroke key = (javax.swing.KeyStroke)o;
+ System.out.println("keystroke is " + key.getKeyCode());
+ if (key.getKeyCode() == KeyEvent.VK_P)
+ passed = true;
+ }
+ }
+ }
+ }
+ );
+
+ mainFrame.getContentPane().add(usernameLabel);
+ mainFrame.getContentPane().add(usernameField);
+ mainFrame.getContentPane().add(pwdLabel);
+ mainFrame.getContentPane().add(pwdField);
+
+ mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ mainFrame.setLayout(new FlowLayout(FlowLayout.LEFT));
+
+ mainFrame.setSize(200, 200);
+ mainFrame.setLocation(200, 200);
+ mainFrame.setVisible(true);
+ mainFrame.toFront();
+ }
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/swing/PopupFactory/8048506/bug8048506.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,65 @@
+/*
+ * 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 8048506
+ * @summary Tests that popup with null-owner does not throw NPE
+ * @author Dmitry Markov
+ */
+
+import javax.swing.*;
+import javax.swing.plaf.metal.MetalLookAndFeel;
+
+public class bug8048506 {
+
+ public static void main(String[] args) throws Exception {
+ UIManager.setLookAndFeel(new MetalLookAndFeel());
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ createAndShowGUI();
+ }
+ });
+ System.out.println("The test passed");
+ }
+
+ private static void createAndShowGUI() {
+ JFrame frame = new JFrame("bug8048506");
+ frame.setSize(400, 400);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.setVisible(true);
+
+ PopupFactory factory = PopupFactory.getSharedInstance();
+
+ // Create and show popup with owner
+ Popup popup1 = factory.getPopup(frame, new JLabel("Popup with owner"), 100, 100);
+ popup1.show();
+
+ //Create and show popup without owner
+ Popup popup2 = factory.getPopup(null, new JLabel("Popup without owner"), 200, 200);
+ popup2.show();
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/swing/plaf/nimbus/8041725/bug8041725.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,82 @@
+/*
+ * 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 8041725
+ @summary JList selection colors are not UIResource instances in Nimbus L&F
+ @author Anton Litvinov
+*/
+
+import java.awt.*;
+import javax.swing.*;
+import javax.swing.plaf.*;
+import javax.swing.plaf.nimbus.*;
+
+public class bug8041725 {
+ public static void main(String[] args) throws Exception {
+ UIManager.setLookAndFeel(new NimbusLookAndFeel());
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ JFrame frame = new JFrame("bug8041725");
+ frame.setSize(200, 200);
+ JList list = new JList(new String[]{"Item1", "Item2", "Item3"});
+ frame.getContentPane().add(list);
+ frame.pack();
+ frame.setVisible(true);
+
+ System.err.println("Test #1: No items are selected, list is enabled.");
+ testSelectionColors(list);
+
+ System.err.println("Test #2: No items are selected, list is disabled.");
+ list.setEnabled(false);
+ testSelectionColors(list);
+
+ System.err.println("Test #3: One item is selected, list is disabled.");
+ list.setSelectedIndex(0);
+ testSelectionColors(list);
+
+ System.err.println("Test #4: One item is selected, list is enabled.");
+ list.setEnabled(true);
+ testSelectionColors(list);
+
+ frame.dispose();
+ }
+ });
+ }
+
+ private static void testSelectionColors(JList list) {
+ Color selBackColor = list.getSelectionBackground();
+ if (!(selBackColor instanceof UIResource)) {
+ throw new RuntimeException(String.format(
+ "JList.getSelectionBackground() returned instance of '%s' instead of UIResource.",
+ selBackColor.getClass()));
+ }
+ Color selForeColor = list.getSelectionForeground();
+ if (!(selForeColor instanceof UIResource)) {
+ throw new RuntimeException(String.format(
+ "JList.getSelectionForeground() returned instance of '%s' instead of UIResource.",
+ selForeColor.getClass()));
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/swing/text/GlyphView/4984669/bug4984669.html Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,30 @@
+<html>
+<!--
+ 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.
+-->
+<body>
+<applet code="bug4984669.class" width=300 height=300></applet>
+The four lines printed above in a bold typeface should all be underlined.
+It is a bug if any of these lines is underlined only partially.
+The very first line should not be underlined at all.
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/swing/text/GlyphView/4984669/bug4984669.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,55 @@
+/*
+ * 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 4984669 8002148
+ @summary Tests HTML underlining
+ @author Peter Zhelezniakov
+ @run applet/manual=yesno bug4984669.html
+*/
+import javax.swing.*;
+import javax.swing.text.*;
+
+public class bug4984669 extends JApplet
+{
+ public void init() {
+ JEditorPane pane = new JEditorPane();
+ this.getContentPane().add(new JScrollPane(pane));
+ pane.setEditorKit(new StyledEditorKit());
+
+ try {
+ pane.getDocument().insertString(0,"12 \n",null);
+ MutableAttributeSet attrs = new SimpleAttributeSet();
+
+ StyleConstants.setFontSize(attrs, 36);
+ StyleConstants.setBold(attrs, true);
+ StyleConstants.setUnderline(attrs, true);
+ pane.getDocument().insertString(6, "aa\n", attrs);
+ pane.getDocument().insertString(9, "bbb\n", attrs);
+ pane.getDocument().insertString(13, "cccc\n", attrs);
+ pane.getDocument().insertString(18, "ddddd\n", attrs);
+ } catch (Exception e) {
+ throw new Error("Failed: Unexpected Exception", e);
+ }
+ }
+}
--- ./jdk/test/javax/swing/text/StyledEditorKit/8016833/bug8016833.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/javax/swing/text/StyledEditorKit/8016833/bug8016833.java Mon Jan 05 11:57:27 2015 -0800
@@ -190,9 +190,9 @@
// not too wide
assertTrue(out3.getWidth() * 0.8 < out2.getWidth());
// not too low
- assertTrue(out3.getY() - (out1.getY() + out2.getHeight()) < 3);
+ assertTrue(out3.getY() - (out1.getY() + out2.getHeight() - 1) < 4);
// not too high
- assertTrue(out3.getY() - (out1.getY() + out2.getHeight()) > 0);
+ assertTrue(out3.getY() - (out1.getY() + out2.getHeight() - 1) > 0);
}
void testStrikthrough() {
@@ -217,7 +217,7 @@
// not too wide
assertTrue(out3.getWidth() * 0.8 < out2.getWidth());
// not too low
- assertTrue(out3.getY() - (out1.getY() + out2.getHeight()) < 0);
+ assertTrue(out3.getY() - (out1.getY() + out2.getHeight() - 1) < 0);
// not too high
assertTrue(out3.getY() - out1.getY() > 1);
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/swing/text/html/parser/Parser/8028616/bug8028616.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,77 @@
+/*
+ * 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 8028616
+ * @summary Tests correct parsing of the text with leading slash (/)
+ * @author Dmitry Markov
+ */
+
+import javax.swing.text.html.HTMLDocument;
+import javax.swing.text.html.HTMLEditorKit;
+import java.io.StringReader;
+
+public class bug8028616 {
+ private static final String text = "/ at start is bad";
+ private static Object lock = new Object();
+ private static boolean isCallbackInvoked = false;
+ private static Exception exception = null;
+
+ public static void main(String[] args) throws Exception {
+ ParserCB cb = new ParserCB();
+ HTMLEditorKit htmlKit = new HTMLEditorKit();
+ HTMLDocument htmlDoc = (HTMLDocument) htmlKit.createDefaultDocument();
+
+ htmlDoc.getParser().parse(new StringReader(text), cb, true);
+
+ synchronized (lock) {
+ if (!isCallbackInvoked) {
+ lock.wait(5000);
+ }
+ }
+
+ if (!isCallbackInvoked) {
+ throw new RuntimeException("Test Failed: ParserCallback.handleText() is not invoked for text - " + text);
+ }
+
+ if (exception != null) {
+ throw exception;
+ }
+ }
+
+ private static class ParserCB extends HTMLEditorKit.ParserCallback {
+ @Override
+ public void handleText(char[] data, int pos) {
+ synchronized (lock) {
+ if (!text.equals(new String(data)) || pos != 0) {
+ exception = new RuntimeException(
+ "Test Failed: the data passed to ParserCallback.handleText() does not meet the expectation");
+ }
+ isCallbackInvoked = true;
+ lock.notifyAll();
+ }
+ }
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/bind/marshal/8036981/Good.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,94 @@
+/*
+ * 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.
+ */
+
+package testjaxbcontext;
+
+import org.w3c.dom.Element;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * Java class for Good complex type.
+ *
+ * <p>
+ * The following schema fragment specifies the expected content contained within
+ * this class.
+ *
+ * <pre>
+ * &lt;complexType name="Good">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;any processContents='skip' maxOccurs="70"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "Good", propOrder = {
+ "any"
+})
+public class Good {
+
+ @XmlAnyElement
+ protected List<Element> any;
+
+ /**
+ * Gets the value of the any property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list, not a
+ * snapshot. Therefore any modification you make to the returned list will
+ * be present inside the JAXB object. This is why there is not a
+ * <CODE>set</CODE> method for the any property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getAny().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link org.w3c.dom.Element }
+ *
+ *
+ */
+ public List<Element> getAny() {
+ if (any == null) {
+ any = new ArrayList<Element>();
+ }
+ return this.any;
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/bind/marshal/8036981/Main.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,104 @@
+/*
+ * 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.
+ */
+
+package testjaxbcontext;
+
+import javax.xml.bind.annotation.*;
+
+/**
+ * <p>
+ * Java class for main complex type.
+ *
+ * <p>
+ * The following schema fragment specifies the expected content contained within
+ * this class.
+ *
+ * <pre>
+ * &lt;complexType name="main">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="Root" type="{}Root"/>
+ * &lt;element name="Good" type="{}Good"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "main", propOrder = {
+ "root",
+ "good"
+})
+@XmlRootElement
+public class Main {
+
+ @XmlElement(name = "Root", required = true)
+ protected Root root;
+ @XmlElement(name = "Good", required = true)
+ protected Good good;
+
+ /**
+ * Gets the value of the root property.
+ *
+ * @return possible object is {@link Root }
+ *
+ */
+ public Root getRoot() {
+ return root;
+ }
+
+ /**
+ * Sets the value of the root property.
+ *
+ * @param value allowed object is {@link Root }
+ *
+ */
+ public void setRoot(Root value) {
+ this.root = value;
+ }
+
+ /**
+ * Gets the value of the good property.
+ *
+ * @return possible object is {@link Good }
+ *
+ */
+ public Good getGood() {
+ return good;
+ }
+
+ /**
+ * Sets the value of the good property.
+ *
+ * @param value allowed object is {@link Good }
+ *
+ */
+ public void setGood(Good value) {
+ this.good = value;
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/bind/marshal/8036981/ObjectFactory.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ */
+
+package testjaxbcontext;
+
+import javax.xml.bind.annotation.XmlRegistry;
+
+/**
+ * This object contains factory methods for each Java content interface and Java
+ * element interface generated in the generated package.
+ * <p>
+ * An ObjectFactory allows you to programatically construct new instances of the
+ * Java representation for XML content. The Java representation of XML content
+ * can consist of schema derived interfaces and classes representing the binding
+ * of schema type definitions, element declarations and model groups. Factory
+ * methods for each of these are provided in this class.
+ *
+ */
+@XmlRegistry
+public class ObjectFactory {
+
+ /**
+ * Create a new ObjectFactory that can be used to create new instances of
+ * schema derived classes for package: generated
+ *
+ */
+ public ObjectFactory() {
+ }
+
+ /**
+ * Create an instance of {@link Root }
+ *
+ */
+ public Root createRoot() {
+ return new Root();
+ }
+
+ /**
+ * Create an instance of {@link Good }
+ *
+ */
+ public Good createGood() {
+ return new Good();
+ }
+
+ /**
+ * Create an instance of {@link Main }
+ *
+ */
+ public Main createMain() {
+ return new Main();
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/bind/marshal/8036981/Root.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,91 @@
+/*
+ * 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.
+ */
+
+package testjaxbcontext;
+
+import javax.xml.bind.annotation.*;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * Java class for Root complex type.
+ *
+ * <p>
+ * The following schema fragment specifies the expected content contained within
+ * this class.
+ *
+ * <pre>
+ * &lt;complexType name="Root">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;any processContents='skip' maxOccurs="70"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "Root", propOrder = {
+ "content"
+})
+public class Root {
+
+ @XmlMixed
+ @XmlAnyElement
+ protected List<Object> content;
+
+ /**
+ * Gets the value of the content property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list, not a
+ * snapshot. Therefore any modification you make to the returned list will
+ * be present inside the JAXB object. This is why there is not a
+ * <CODE>set</CODE> method for the content property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getContent().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list {@link org.w3c.dom.Element }
+ * {@link String }
+ *
+ *
+ */
+ public List<Object> getContent() {
+ if (content == null) {
+ content = new ArrayList<Object>();
+ }
+ return this.content;
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/bind/marshal/8036981/Test.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,67 @@
+/*
+ * 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 Test.java
+ * @bug 8036981
+ * @summary JAXB not preserving formatting during unmarshalling/marshalling
+ * @compile Good.java Main.java ObjectFactory.java Root.java
+ * @run main/othervm Test
+ */
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import java.io.File;
+import java.io.StringWriter;
+
+/**
+ * Test for marshalling and unmarshalling mixed and unmixed content
+ */
+public class Test {
+
+ private static final String EXPECTED = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><main><Root>\n" +
+ " <SomeTag>\n" +
+ " <AChildTag>\n" +
+ " <AnotherChildTag/>\n" +
+ " <AnotherChildTag/>\n" +
+ " </AChildTag>\n" +
+ " </SomeTag>\n" +
+ " </Root><Good><VeryGood><TheBest><MegaSuper/><MegaSuper/>\n" +
+ " </TheBest>\n" +
+ " </VeryGood></Good></main>";
+
+ public static void main(String[] args) throws Exception {
+ JAXBContext jc = JAXBContext.newInstance("testjaxbcontext");
+ Unmarshaller u = jc.createUnmarshaller();
+ Object result = u.unmarshal(new File(System.getProperty("test.src", ".") + "/test.xml"));
+ StringWriter sw = new StringWriter();
+ Marshaller m = jc.createMarshaller();
+ m.marshal(result, sw);
+ System.out.println("Expected:" + EXPECTED);
+ System.out.println("Observed:" + sw.toString());
+ if (!EXPECTED.equals(sw.toString())) {
+ throw new Exception("Unmarshal/Marshal generates different content");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/bind/marshal/8036981/test.xml Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<main>
+ <Root>
+ <SomeTag>
+ <AChildTag>
+ <AnotherChildTag/>
+ <AnotherChildTag/>
+ </AChildTag>
+ </SomeTag>
+ </Root>
+ <Good>
+ <VeryGood>
+ <TheBest>
+ <MegaSuper/>
+ <MegaSuper/>
+ </TheBest>
+ </VeryGood>
+ </Good>
+</main>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/bind/xjc/8029837/PreParseGrammarTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,58 @@
+/*
+ * 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 8029837
+ * @summary Test simulates the partial call to xjc ant task that fails with
+ * NullPointer exception
+ * @run main/othervm PreParseGrammarTest
+ */
+
+import com.sun.org.apache.xerces.internal.parsers.XMLGrammarPreparser;
+import com.sun.org.apache.xerces.internal.xni.XNIException;
+import com.sun.org.apache.xerces.internal.xni.grammars.Grammar;
+import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarDescription;
+import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+
+public class PreParseGrammarTest {
+
+ public static void main(String[] args) throws FileNotFoundException, XNIException, IOException {
+ File xsdf = new File(System.getProperty("test.src", ".") + "/test.xsd");
+ InputStream is = new BufferedInputStream(new FileInputStream(xsdf));
+ XMLInputSource xis = new XMLInputSource(null, null, null, is, null);
+ XMLGrammarPreparser gp = new XMLGrammarPreparser();
+ gp.registerPreparser(XMLGrammarDescription.XML_SCHEMA, null);
+ //The NullPointerException is observed on next call during ant task
+ // execution
+ Grammar res = gp.preparseGrammar(XMLGrammarDescription.XML_SCHEMA, xis);
+ System.out.println("Grammar preparsed successfully:" + res);
+ return;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/bind/xjc/8029837/test.xsd Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,4 @@
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:element name="root">
+ </xsd:element>
+</xsd:schema>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/jaxp/common/8032908/TestFunc.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ */
+
+import org.w3c.dom.Node;
+
+public class TestFunc {
+
+ public static String test(Node node) {
+ String s = node.getTextContent();
+ return s;
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/jaxp/common/8032908/XSLT.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,55 @@
+/*
+ * 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 8032908
+ * @summary Test if Node.getTextContent() function correctly returns children
+ * content
+ * @compile TestFunc.java XSLT.java
+ * @run main/othervm XSLT
+ */
+import java.io.ByteArrayOutputStream;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+public class XSLT {
+
+ static final String XMLTOTRANSFORM = "/in.xml";
+ static final String XSLTRANSFORMER = "/test.xsl";
+ static final String EXPECTEDRESULT = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>ABCDEFG";
+
+ public static void main(String[] args) throws TransformerException {
+ ByteArrayOutputStream resStream = new ByteArrayOutputStream();
+ TransformerFactory trf = TransformerFactory.newInstance();
+ Transformer tr = trf.newTransformer(new StreamSource(System.getProperty("test.src", ".") + XSLTRANSFORMER));
+ tr.transform(new StreamSource(System.getProperty("test.src", ".") + XMLTOTRANSFORM), new StreamResult(resStream));
+ System.out.println("Transformation completed. Result:" + resStream.toString());
+ if (!resStream.toString().equals(EXPECTEDRESULT)) {
+ throw new RuntimeException("Incorrect transformation result");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/jaxp/common/8032908/in.xml Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root><elem><level2_0>ABCD</level2_0><level2_1>EFG</level2_1></elem></root>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/jaxp/common/8032908/test.xsl Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:transform exclude-result-prefixes="cscdt_ufunc" version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:cscdt_ufunc="http://xml.apache.org/xalan/java">
+ <xsl:template match="elem">
+ <xsl:value-of select="cscdt_ufunc:TestFunc.test(.)" />
+ </xsl:template>
+</xsl:transform>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/jaxp/testng/TEST.properties Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,3 @@
+# This file identifies root(s) of the test-ng hierarchy.
+
+TestNG.dirs = .
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/jaxp/testng/parse/XMLEntityScannerLoad.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,75 @@
+/*
+ * 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.
+ */
+
+package parse;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import static org.testng.Assert.assertEquals;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+/**
+ * JDK-8059327: XML parser returns corrupt attribute value
+ * https://bugs.openjdk.java.net/browse/JDK-8059327
+ *
+ * Also:
+ * JDK-8061550: XMLEntityScanner can corrupt corrupt content during parsing
+ * https://bugs.openjdk.java.net/browse/JDK-8061550
+ *
+ * @Summary: verify that the character cache in XMLEntityScanner is reset properly
+ */
+
+public class XMLEntityScannerLoad {
+
+ @Test(dataProvider = "xmls")
+ public void test(String xml) throws SAXException, IOException, ParserConfigurationException {
+ Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ChunkInputStream(xml));
+ String value = d.getDocumentElement().getAttribute("a1");
+ assertEquals(value, "w");
+ }
+
+ static class ChunkInputStream extends ByteArrayInputStream {
+ ChunkInputStream(String xml) {
+ super(xml.getBytes());
+ }
+
+ @Override
+ public synchronized int read(byte[] b, int off, int len) {
+ return super.read(b, off, 7);
+ }
+ }
+
+ @DataProvider(name = "xmls")
+ private Object[][] xmls() {
+ return new Object[][] {
+ {"<?xml version=\"1.0\"?><element a1=\"w\" a2=\"&quot;&quot;\"/>"},
+ {"<?xml version=\"1.1\"?><element a1=\"w\" a2=\"&quot;&quot;\"/>"}
+ };
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/jaxp/validation/8049514/FeaturePropagationTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,71 @@
+/*
+ * 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 8049514
+ * @summary verifies that feature set on the factory is propagated properly
+ * to the validator
+ * @run main/othervm FeaturePropagationTest
+ */
+
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStreamReader;
+import javax.xml.XMLConstants;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.validation.*;
+
+/**
+ * JDK-8049514
+ *
+ * FEATURE_SECURE_PROCESSING can not be turned off on a validator through
+ * SchemaFactory
+ */
+public class FeaturePropagationTest {
+
+ static String xsd = "<?xml version='1.0'?>\n" + "<schema xmlns='http://www.w3.org/2001/XMLSchema'\n"
+ + " xmlns:test='jaxp13_test'\n"
+ + " targetNamespace='jaxp13_test'\n"
+ + " elementFormDefault='qualified'>\n"
+ + " <element name='test' type='string'/>\n"
+ + "</schema>\n";
+
+ public static void main(String[] args) throws Exception {
+ InputStreamReader reader = new InputStreamReader(new ByteArrayInputStream(xsd.getBytes()));
+ StreamSource xsdSource = new StreamSource(reader);
+
+ SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
+ schemaFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, false);
+ Schema schema = null;
+ schema = schemaFactory.newSchema(xsdSource);
+
+ Validator validator = schema.newValidator();
+
+ if (validator.getFeature(XMLConstants.FEATURE_SECURE_PROCESSING)) {
+ throw new RuntimeException("Feature set on the factory is not inherited!");
+ }
+
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/ws/8033113/Organization_List.wsdl Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<wsdl:definitions targetNamespace="urn:Organization_List" xmlns:s0="urn:Organization_List" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <wsdl:types>
+ <xsd:schema elementFormDefault="qualified" targetNamespace="urn:Organization_List">
+ <xsd:element name="OpGetList" type="s0:GetListInputMap"/>
+ <xsd:complexType name="GetListInputMap">
+ <xsd:sequence>
+ <xsd:element name="Qualification" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:element name="OpGetListResponse" type="s0:GetListOutputMap"/>
+ <xsd:complexType name="GetListOutputMap">
+ <xsd:sequence>
+ <xsd:element maxOccurs="unbounded" name="getListValues">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Organization_Name" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:element name="AuthenticationInfo" type="s0:AuthenticationInfo"/>
+ <xsd:complexType name="AuthenticationInfo">
+ <xsd:sequence>
+ <xsd:element name="userName" type="xsd:string"/>
+ <xsd:element name="password" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="authentication" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="locale" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="timeZone" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:schema>
+ </wsdl:types>
+
+ <wsdl:message name="ARAuthenticate">
+ <wsdl:part element="s0:AuthenticationInfo" name="param"/>
+ </wsdl:message>
+
+ <wsdl:message name="OpGetListSoapIn">
+ <wsdl:part element="s0:OpGetList" name="param"/>
+ </wsdl:message>
+
+ <wsdl:message name="OpGetListSoapOut">
+ <wsdl:part element="s0:OpGetListResponse" name="param"/>
+ </wsdl:message>
+
+ <wsdl:portType name="Organization_ListPortType">
+ <wsdl:operation name="OpGetList">
+ <wsdl:input message="s0:OpGetListSoapIn"/>
+ <wsdl:output message="s0:OpGetListSoapOut"/>
+ </wsdl:operation>
+ </wsdl:portType>
+
+ <wsdl:binding name="Organization_ListSoapBinding" type="s0:Organization_ListPortType">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="OpGetList">
+ <soap:operation soapAction="urn:Organization_List/OpGetList" style="document"/>
+ <wsdl:input>
+ <soap:header message="s0:ARAuthenticate" part="param" use="literal">
+ </soap:header>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+
+ <wsdl:service name="Organization_ListService">
+ <wsdl:port binding="s0:Organization_ListSoapBinding" name="Organization_ListSoap">
+ <soap:address location="http://bogus:9080/URL"/>
+ </wsdl:port>
+ </wsdl:service>
+
+</wsdl:definitions>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/ws/8033113/WsImportTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,152 @@
+/*
+ * 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 8033113
+ * @summary wsimport fails on WSDL:header parameter name customization
+ * @run main/othervm WsImportTest
+ */
+
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.BufferedReader;
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+
+import static java.nio.file.FileVisitResult.*;
+
+public class WsImportTest {
+
+ public static void main(String[] args) throws IOException {
+
+ String wsimport = getWsImport();
+ String customization = getWSDLFilePath("customization.xml");
+ String wsdl = getWSDLFilePath("Organization_List.wsdl");
+
+ try {
+ log("Importing wsdl: " + wsdl);
+ String[] wsargs = {
+ wsimport,
+ "-keep",
+ "-verbose",
+ "-extension",
+ "-XadditionalHeaders",
+ "-Xdebug",
+ "-b",
+ customization,
+ wsdl
+ };
+
+ ProcessBuilder pb = new ProcessBuilder(wsargs);
+ pb.redirectErrorStream(true);
+ Process p = pb.start();
+ logOutput(p);
+ int result = p.waitFor();
+ p.destroy();
+
+ if (result != 0) {
+ fail("WsImport failed. TEST FAILED.");
+ } else {
+ log("Test PASSED.");
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ } finally {
+ deleteGeneratedFiles();
+ }
+ }
+
+ private static void fail(String message) {
+ throw new RuntimeException(message);
+ }
+
+ private static void log(String msg) {
+ System.out.println(msg);
+ }
+
+ private static void logOutput(Process p) throws IOException {
+ BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ String s = r.readLine();
+ while (s != null) {
+ log(s.trim());
+ s = r.readLine();
+ }
+ }
+
+ private static void deleteGeneratedFiles() {
+ Path p = Paths.get("generated");
+ if (Files.exists(p)) {
+ try {
+ Files.walkFileTree(p, new SimpleFileVisitor<Path>() {
+ @Override
+ public FileVisitResult visitFile(Path file,
+ BasicFileAttributes attrs) throws IOException {
+
+ Files.delete(file);
+ return CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult postVisitDirectory(Path dir,
+ IOException exc) throws IOException {
+
+ if (exc == null) {
+ Files.delete(dir);
+ return CONTINUE;
+ } else {
+ throw exc;
+ }
+ }
+ });
+ } catch (IOException ioe) {
+ ioe.printStackTrace();
+ }
+ }
+ }
+
+ private static String getWSDLFilePath(String filename) {
+ String testSrc = System.getProperty("test.src");
+ if (testSrc == null) testSrc = ".";
+ return Paths.get(testSrc).resolve(filename).toString();
+ }
+
+ private static String getWsImport() {
+ String javaHome = System.getProperty("java.home");
+ if (javaHome.endsWith("jre")) {
+ javaHome = new File(javaHome).getParent();
+ }
+ String wsimport = javaHome + File.separator + "bin" + File.separator + "wsimport";
+ if (System.getProperty("os.name").startsWith("Windows")) {
+ wsimport = wsimport.concat(".exe");
+ }
+ return wsimport;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/ws/8033113/customization.xml Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,45 @@
+<!--
+ 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.
+-->
+<jaxws:bindings wsdlLocation="./Organization_List.wsdl" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
+ <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
+ <jaxws:bindings node="wsdl:definitions/wsdl:binding[@name='Organization_ListSoapBinding']/wsdl:operation[@name='OpGetList']">
+ <jaxws:parameter part="wsdl:definitions/wsdl:message[@name='ARAuthenticate']/wsdl:part[@name='param']" name="authParam"/>
+ <jaxws:parameter part="wsdl:definitions/wsdl:message[@name='OpGetListSoapIn']/wsdl:part[@name='param']" name="inParam"/>
+ <jaxws:parameter part="wsdl:definitions/wsdl:message[@name='OpGetListSoapOut']/wsdl:part[@name='param']" name="outParam"/>
+ </jaxws:bindings>
+</jaxws:bindings>
+
+<!--wsdl:message definitions from WSDL whose part names we are trying to override...
+
+ <wsdl:message name="ARAuthenticate">
+ <wsdl:part element="s0:AuthenticationInfo" name="param"/>
+ </wsdl:message>
+
+ <wsdl:message name="OpGetListSoapIn">
+ <wsdl:part element="s0:OpGetList" name="param"/>
+ </wsdl:message>
+
+ <wsdl:message name="OpGetListSoapOut">
+ <wsdl:part element="s0:OpGetListResponse" name="param"/>
+ </wsdl:message>
+-->
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/ws/8043129/MailTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,148 @@
+/*
+ * 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 8043129
+ * @summary JAF initialisation in SAAJ clashing with the one in javax.mail
+ * @author mkos
+ * @library javax.mail.jar
+ * @build MailTest
+ * @run main MailTest
+ */
+
+import javax.activation.CommandMap;
+import javax.activation.MailcapCommandMap;
+import javax.mail.BodyPart;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Multipart;
+import javax.mail.Session;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+import javax.xml.soap.AttachmentPart;
+import javax.xml.soap.MessageFactory;
+import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPMessage;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+public class MailTest {
+
+ String host = null;
+ String user = "";
+ String password = null;
+ String from = null;
+ String to = null;
+
+ public static void main(String[] args) {
+ MailTest t = new MailTest();
+
+ t.user = "somebody@somewhere.com";
+ t.from = "somebody@somewhere.com";
+ t.to = "somebody@somewhere.com";
+
+ t.user = "somebody@somewhere.com";
+ t.password = "somepassword";
+ t.host = "somehost";
+
+ t.sendMail(); //this works
+
+ t.addSoapAttachement();
+ t.sendMail(); //after addAttachmentPart to soapmessage it do not work
+
+ // workaroundJAFSetup();
+ // t.sendMail(); //after workaround works again
+ }
+
+ void addSoapAttachement() {
+ try {
+ MessageFactory messageFactory = MessageFactory.newInstance();
+ SOAPMessage message = messageFactory.createMessage();
+ AttachmentPart a = message.createAttachmentPart();
+ a.setContentType("binary/octet-stream");
+ message.addAttachmentPart(a);
+ } catch (SOAPException e) {
+ e.printStackTrace();
+ }
+ }
+
+ void sendMail() {
+
+ try {
+ Properties props = new Properties();
+ props.put("mail.smtp.host", host);
+ props.put("mail.smtp.auth", "true");
+
+ Session session = Session.getInstance(props);
+ session.setDebug(true);
+
+ // Define message
+ MimeMessage message = new MimeMessage(session);
+ message.setFrom(new InternetAddress(from));
+ message.addRecipients(Message.RecipientType.TO, to);
+ message.setSubject("this is a multipart test");
+
+ Multipart multipart = new MimeMultipart();
+
+ BodyPart messageBodyPart1 = new MimeBodyPart();
+ messageBodyPart1.setText("please send also this Content\n ciao!");
+ multipart.addBodyPart(messageBodyPart1);
+
+ BodyPart messageBodyPart2 = new MimeBodyPart();
+ messageBodyPart2.setContent("<b>please</b> send also this Content <br>ciao!", "text/html; charset=UTF-8");
+ multipart.addBodyPart(messageBodyPart2);
+
+ message.setContent(multipart);
+
+ /*
+ Transport tr = session.getTransport("smtp");
+ tr.connect(host,user, password);
+ tr.sendMessage(message,InternetAddress.parse(to));
+ tr.close();
+ */
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ message.writeTo(baos);
+ String output = baos.toString();
+ System.out.println("output = " + output);
+ if (output.contains("also this Content")) {
+ System.out.println("Test PASSED.");
+ } else {
+ System.out.println("Test FAILED, missing content.");
+ throw new IllegalStateException("Test FAILED, missing content.");
+ }
+ } catch (MessagingException ignored) {
+ } catch (IOException ignored) {
+ }
+ }
+
+ // this is how the error can be worked around ...
+ static void workaroundJAFSetup() {
+ MailcapCommandMap mailMap = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
+ mailMap.addMailcap("multipart/mixed;;x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
+ }
+}
Binary file test/javax/xml/ws/8043129/javax.mail.jar has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/ws/xsanymixed/CopyingResponse.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ */
+
+
+import org.somewhere.ws.EchoRequest;
+import org.somewhere.ws.EchoResponse;
+
+public class CopyingResponse extends EchoResponse {
+
+ public CopyingResponse() {}
+
+ public CopyingResponse(EchoRequest request) {
+ content = request.getContent();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/ws/xsanymixed/ServiceImpl.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ */
+
+import org.somewhere.ws.EchoRequest;
+import org.somewhere.ws.EchoResponse;
+import org.somewhere.ws.TestPort;
+
+import java.util.ArrayList;
+
+import javax.jws.WebService;
+import javax.xml.namespace.QName;
+
+
+/**
+ * Simple Webservice implementation just copying xml part as is
+ * from incoming request into outgoing response
+ */
+@WebService(
+ endpointInterface = "org.somewhere.ws.TestPort",
+ targetNamespace = "http://ws.somewhere.org/",
+ serviceName = "TestService",
+ portName = "TestPort")
+public class ServiceImpl implements TestPort {
+
+ public static final QName PORT_NAME = new QName("http://ws.somewhere.org/", "TestPort");
+ public static final QName SERVICE_NAME = new QName("http://ws.somewhere.org/", "TestService");
+
+ @Override
+ public EchoResponse echo(EchoRequest request) {
+ System.err.println( "request.getContent="+(ArrayList)(request.getContent()));
+ return new CopyingResponse(request);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/ws/xsanymixed/Test.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,197 @@
+/*
+ * 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 8036981 8038966 8051441
+ * @summary the content of xs:any content:mixed should remain as is,
+ * no white space changes and no changes to namespace prefixes
+ * @run shell compile-wsdl.sh
+ * @run main/othervm Test
+ */
+
+import com.sun.net.httpserver.HttpServer;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.net.InetSocketAddress;
+import java.net.URL;
+import java.nio.file.FileVisitResult;
+import static java.nio.file.FileVisitResult.CONTINUE;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.ws.Dispatch;
+import javax.xml.ws.Endpoint;
+import javax.xml.ws.Service;
+
+public class Test {
+
+ private static HttpServer httpServer;
+ private static Endpoint endpoint;
+ private static final String NL = System.getProperty("line.separator");
+
+ private static final String XS_ANY_MIXED_PART =
+ "<AppHdr xmlns=\"urn:head.001\">" + NL +
+ " <Fr>" + NL + NL +
+ "<FIId xmlns=\"urn:head.009\">" + NL + NL +
+ " any" + NL +
+ " white" + NL +
+ " space" + NL + NL +
+ " <FinInstnId>... and" + NL + NL +
+ " NO namespace prefixes!!!" + NL + NL +
+ " </FinInstnId>" + NL + NL +
+ " </FIId>" + NL +
+ "</Fr>" + NL +
+ "</AppHdr>";
+
+ private static final String XML_REQUEST = "<soap:Envelope " +
+ "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
+ "xmlns:ws=\"http://ws.somewhere.org/\">" +
+ "<soap:Header/><soap:Body>" +
+ "<ws:echoRequest>" + NL +
+ XS_ANY_MIXED_PART + NL +
+ "</ws:echoRequest>" +
+ "</soap:Body></soap:Envelope>";
+
+ private static String deployWebservice() throws IOException {
+ // Manually create HttpServer here using ephemeral address for port
+ // so as to not end up with attempt to bind to an in-use port
+ httpServer = HttpServer.create(new InetSocketAddress(0), 0);
+ httpServer.start();
+
+ endpoint = Endpoint.create(new ServiceImpl());
+ endpoint.publish(httpServer.createContext("/wservice"));
+
+ String wsdlAddress = "http://localhost:" + httpServer.getAddress().getPort() + "/wservice?wsdl";
+ log("address = " + wsdlAddress);
+ return wsdlAddress;
+ }
+
+ private static void stopWebservice() {
+ if (endpoint != null && endpoint.isPublished()) {
+ endpoint.stop();
+ }
+ if (httpServer != null) {
+ httpServer.stop(0);
+ }
+ }
+
+ public static void main(String[] args) throws IOException, TransformerException {
+
+ try {
+ String address = deployWebservice();
+ Service service = Service.create(new URL(address), ServiceImpl.SERVICE_NAME);
+
+ log( "PORT="+ServiceImpl.PORT_NAME+" service="+service);
+ Dispatch<Source> d = service.createDispatch(ServiceImpl.PORT_NAME, Source.class, Service.Mode.MESSAGE);
+ Source response = d.invoke(new StreamSource(new StringReader(XML_REQUEST)));
+
+ log( "reponse="+response );
+ String resultXml = toString(response);
+
+ log("= request ======== \n");
+ log(XML_REQUEST);
+ log("= result ========= \n");
+ log(resultXml);
+ log("\n==================");
+
+ boolean xsAnyMixedPartSame = resultXml.contains(XS_ANY_MIXED_PART);
+ log("resultXml.contains(XS_ANY_PART) = " + xsAnyMixedPartSame);
+ if (!xsAnyMixedPartSame) {
+ fail("The xs:any content=mixed part is supposed to be same in request and response.");
+ throw new RuntimeException();
+ }
+
+ log("TEST PASSED");
+ } finally {
+ stopWebservice();
+
+ // if you need to debug or explore wsdl generation result
+ // comment this line out:
+ deleteGeneratedFiles();
+ }
+ }
+
+ private static String toString(Source response) throws TransformerException, IOException {
+ TransformerFactory transformerFactory = TransformerFactory.newInstance();
+ Transformer transformer = transformerFactory.newTransformer();
+ StreamResult xmlOutput = new StreamResult(new StringWriter());
+ transformer.transform(response, xmlOutput);
+ return xmlOutput.getWriter().toString();
+ }
+
+ private static void fail(String message) {
+ log("TEST FAILED.");
+ throw new RuntimeException(message);
+ }
+
+ private static void log(String msg) {
+ System.out.println(msg);
+ }
+
+ private static void deleteGeneratedFiles() {
+ Path p = Paths.get("..", "classes", "javax", "xml", "ws", "xsanymixed", "org");
+ System.out.println("performing cleanup, deleting wsdl compilation result: " + p.toFile().getAbsolutePath());
+ if (Files.exists(p)) {
+ try {
+ Files.walkFileTree(p, new SimpleFileVisitor<Path>() {
+ @Override
+ public FileVisitResult visitFile(
+ Path file,
+ BasicFileAttributes attrs) throws IOException {
+
+ System.out.println("deleting file [" + file.toFile().getAbsoluteFile() + "]");
+ Files.delete(file);
+ return CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult postVisitDirectory(
+ Path dir,
+ IOException exc) throws IOException {
+
+ System.out.println("deleting dir [" + dir.toFile().getAbsoluteFile() + "]");
+ if (exc == null) {
+ Files.delete(dir);
+ return CONTINUE;
+ } else {
+ throw exc;
+ }
+ }
+ });
+ } catch (IOException ioe) {
+ ioe.printStackTrace();
+ }
+ }
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/ws/xsanymixed/compile-wsdl.sh Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,36 @@
+#! /bin/sh
+
+#
+# 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.
+#
+
+#
+
+if [ "x$TESTJAVA" = x ]; then
+ TESTJAVA=$1; shift
+ TESTCLASSES=.
+fi
+
+echo "compiling [test-service.wsdl] wsdl ..."
+$TESTJAVA/bin/wsimport -keep -d ${TESTCLASSES} ${TESTSRC}/service.wsdl
+
+echo "WSDL compiled. Main test class Test.java can be compiled now."
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/javax/xml/ws/xsanymixed/service.wsdl Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+ 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.
+-->
+<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:tns="http://ws.somewhere.org/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
+ name="TestService"
+ targetNamespace="http://ws.somewhere.org/">
+
+ <types>
+ <xsd:schema targetNamespace="http://ws.somewhere.org/" version="1.0"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ws.somewhere.org/">
+
+ <xsd:element type="tns:echoRequest" name="echoRequest"/>
+ <xsd:element type="tns:echoResponse" name="echoResponse"/>
+
+ <xsd:complexType name="echoRequest" mixed="true">
+ <xsd:sequence>
+ <xsd:any namespace="##any" processContents="skip" minOccurs="1" maxOccurs="10"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="echoResponse" mixed="true">
+ <xsd:sequence>
+ <xsd:any namespace="##any" processContents="skip" minOccurs="1" maxOccurs="10"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:schema>
+ </types>
+
+ <message name="echoRequest">
+ <part element="tns:echoRequest" name="parameters"/>
+ </message>
+ <message name="echoResponse">
+ <part element="tns:echoResponse" name="parameters"/>
+ </message>
+
+ <portType name="TestPort">
+ <operation name="echo">
+ <input message="tns:echoRequest" wsam:Action="http://ws.somewhere.org/tester/echoRequest"/>
+ <output message="tns:echoResponse" wsam:Action="http://ws.somewhere.org/tester/echoResponse"/>
+ </operation>
+ </portType>
+
+ <binding name="TestServicePortBinding" type="tns:TestPort">
+ <soap:binding style="document"
+ transport="http://schemas.xmlsoap.org/soap/http"/>
+
+ <operation name="echo">
+ <soap:operation soapAction=""/>
+ <input>
+ <soap:body use="literal"/>
+ </input>
+ <output>
+ <soap:body use="literal"/>
+ </output>
+ </operation>
+ </binding>
+
+ <service name="TestService">
+ <port binding="tns:TestServicePortBinding" name="TestPort">
+ <soap:address location="http://localhost/ws/tester"/>
+ </port>
+ </service>
+</definitions>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/sun/awt/AppContext/MultiThread/MultiThreadTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,100 @@
+/*
+ * 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 8019623
+ * @summary Tests that AppContext.getAppContext() works correctly in multi-threads scenario.
+ * @author Leonid Romanov
+ */
+
+import sun.awt.AppContext;
+
+public class MultiThreadTest {
+ private static final int NUM_THREADS = 2;
+
+ private static AppContextGetter[] getters = new AppContextGetter[NUM_THREADS];
+
+ public static void main(String[] args) {
+ createAndStartThreads();
+ compareAppContexts();
+ }
+
+ private static void createAndStartThreads() {
+ ThreadGroup systemGroup = getSystemThreadGroup();
+ for (int i = 0; i < NUM_THREADS; ++i) {
+ ThreadGroup tg = new ThreadGroup(systemGroup, "AppContextGetter" + i);
+ getters[i] = new AppContextGetter(tg);
+ }
+
+ for (int i = 0; i < NUM_THREADS; ++i) {
+ getters[i].start();
+ }
+
+ for (int i = 0; i < NUM_THREADS; ++i) {
+ try {
+ getters[i].join();
+ } catch (InterruptedException e) {
+ // ignore
+ }
+ }
+ }
+
+ private static ThreadGroup getSystemThreadGroup() {
+ ThreadGroup currentThreadGroup =
+ Thread.currentThread().getThreadGroup();
+ ThreadGroup parentThreadGroup = currentThreadGroup.getParent();
+ while (parentThreadGroup != null) {
+ currentThreadGroup = parentThreadGroup;
+ parentThreadGroup = currentThreadGroup.getParent();
+ }
+
+ return currentThreadGroup;
+ }
+
+ private static void compareAppContexts() {
+ AppContext ctx = getters[0].getAppContext();
+ for (int i = 1; i < NUM_THREADS; ++i) {
+ if (!ctx.equals(getters[i].getAppContext())) {
+ throw new RuntimeException("Unexpected AppContexts difference, could be a race condition");
+ }
+ }
+ }
+
+ private static class AppContextGetter extends Thread {
+ private AppContext appContext;
+
+ public AppContextGetter(ThreadGroup tg) {
+ super(tg, tg.getName());
+ }
+
+ AppContext getAppContext() {
+ return appContext;
+ }
+
+ @Override
+ public void run() {
+ appContext = AppContext.getAppContext();
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/sun/awt/dnd/8024061/bug8024061.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,357 @@
+/*
+ * 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 8024061
+ * @summary Checks that no exception is thrown if dragGestureRecognized
+ * takes a while to complete.
+ */
+import sun.awt.OSInfo;
+import sun.awt.OSInfo.OSType;
+import sun.awt.SunToolkit;
+
+import java.awt.*;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DragGestureEvent;
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DragSource;
+import java.awt.dnd.DragSourceDragEvent;
+import java.awt.dnd.DragSourceDropEvent;
+import java.awt.dnd.DragSourceEvent;
+import java.awt.dnd.DragSourceListener;
+import java.awt.dnd.DropTarget;
+import java.awt.dnd.DropTargetDragEvent;
+import java.awt.dnd.DropTargetDropEvent;
+import java.awt.dnd.DropTargetEvent;
+import java.awt.dnd.DropTargetListener;
+import java.awt.event.InputEvent;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import javax.swing.*;
+
+/**
+ * If dragGestureRecognized() takes a while to complete and if user performs a drag quickly,
+ * an exception is thrown from DropTargetListener.dragEnter when it calls
+ * DropTargetDragEvent.getTransferable().
+ * <p>
+ * This class introduces a delay in dragGestureRecognized() to cause the exception.
+ */
+public class bug8024061 {
+ private static final DataFlavor DropObjectFlavor;
+ private static final int DELAY = 1000;
+
+ private final DnDPanel panel1 = new DnDPanel(Color.yellow);
+ private final DnDPanel panel2 = new DnDPanel(Color.pink);
+ private final JFrame frame;
+
+ private static final CountDownLatch lock = new CountDownLatch(1);
+ private static volatile Exception dragEnterException = null;
+
+ static {
+ DataFlavor flavor = null;
+ try {
+ flavor = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType);
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ DropObjectFlavor = flavor;
+ }
+
+ bug8024061() {
+ frame = new JFrame("DnDWithRobot");
+ frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+
+ Dimension d = new Dimension(100, 100);
+
+ panel1.setPreferredSize(d);
+ panel2.setPreferredSize(d);
+
+ Container content = frame.getContentPane();
+ content.setLayout(new GridLayout(1, 2, 5, 5));
+ content.add(panel1);
+ content.add(panel2);
+
+ frame.pack();
+
+ DropObject drop = new DropObject();
+ drop.place(panel1, new Point(10, 10));
+ frame.setVisible(true);
+ }
+
+ public static void main(String[] args) throws AWTException, InvocationTargetException, InterruptedException {
+ OSType type = OSInfo.getOSType();
+ if (type != OSType.LINUX && type != OSType.SOLARIS) {
+ System.out.println("This test is for Linux and Solaris only... " +
+ "skipping!");
+ return;
+ }
+
+ final bug8024061[] dnd = {null};
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ dnd[0] = new bug8024061();
+ }
+ });
+ final Robot robot = new Robot();
+ robot.setAutoDelay(10);
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ toolkit.realSync();
+
+ JFrame frame = dnd[0].frame;
+ Point point = frame.getLocationOnScreen();
+ Point here = new Point(point.x + 35, point.y + 45);
+ Point there = new Point(point.x + 120, point.y + 45);
+ here.x += 25;
+ robot.mouseMove(here.x, here.y);
+ robot.mousePress(InputEvent.BUTTON1_MASK);
+ while (here.x < there.x) {
+ here.x += 20;
+ robot.mouseMove(here.x, here.y);
+ System.out.println("x = " + here.x);
+ }
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
+ toolkit.realSync();
+ robot.mousePress(InputEvent.BUTTON1_MASK);
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
+ System.out.println("finished");
+
+ try {
+ if (lock.await(5, TimeUnit.SECONDS)) {
+ if (dragEnterException == null) {
+ System.out.println("Test passed.");
+ } else {
+ System.out.println("Test failed.");
+ dragEnterException.printStackTrace();
+ throw new RuntimeException(dragEnterException);
+ }
+ } else {
+ System.out.println("Test failed. Timeout reached");
+ throw new RuntimeException("Timed out waiting for dragEnter()");
+ }
+ } finally {
+ frame.dispose();
+ }
+ }
+
+ class DropObject implements Transferable {
+ DnDPanel panel;
+ Color color = Color.CYAN;
+ int width = 50;
+ int height = 50;
+ int x;
+ int y;
+
+ void draw(Graphics2D g) {
+ Color savedColor = g.getColor();
+ g.setColor(color);
+ g.fillRect(x, y, width, height);
+ g.setColor(Color.lightGray);
+ g.drawRect(x, y, width, height);
+ g.setColor(savedColor);
+ }
+
+ boolean contains(int x, int y) {
+ return (x > this.x && x < this.x + width)
+ && (y > this.y && y < this.y + height);
+ }
+
+ @Override
+ public DataFlavor[] getTransferDataFlavors() {
+ return new DataFlavor[]{DropObjectFlavor};
+ }
+
+ void place(DnDPanel panel, Point location) {
+ if (panel != this.panel) {
+ x = location.x;
+ y = location.y;
+ if (this.panel != null) {
+ this.panel.setDropObject(null);
+ this.panel.repaint();
+ }
+ this.panel = panel;
+ this.panel.setDropObject(this);
+ this.panel.repaint();
+ }
+ }
+
+ @Override
+ public boolean isDataFlavorSupported(DataFlavor flavor) {
+ return DropObjectFlavor.equals(flavor);
+ }
+
+ @Override
+ public Object getTransferData(DataFlavor flavor)
+ throws UnsupportedFlavorException, IOException {
+ if (isDataFlavorSupported(flavor)) {
+ return this;
+ } else {
+ throw new UnsupportedFlavorException(flavor);
+ }
+ }
+ }
+
+ class DnDPanel extends JPanel {
+ DropObject dropObject;
+ final DragSource dragSource;
+ final DropTarget dropTarget;
+ final Color color;
+ final DragGestureListener dgListener;
+ final DragSourceListener dsListener;
+ final DropTargetListener dtListener;
+
+ DnDPanel(Color color) {
+ this.color = color;
+ this.dragSource = DragSource.getDefaultDragSource();
+ dgListener = new DragGestureListener() {
+ @Override
+ public void dragGestureRecognized(DragGestureEvent dge) {
+ Point location = dge.getDragOrigin();
+ if (dropObject != null && dropObject.contains(location.x, location.y)) {
+ dragSource.startDrag(dge, DragSource.DefaultCopyNoDrop, dropObject, dsListener);
+ try {
+ Thread.sleep(DELAY);
+ } catch (InterruptedException e) {
+ }
+ }
+ }
+ };
+
+ dsListener = new DragSourceListener() {
+ @Override
+ public void dragEnter(DragSourceDragEvent dsde) {
+ }
+
+ @Override
+ public void dragOver(DragSourceDragEvent dsde) {
+ }
+
+ @Override
+ public void dropActionChanged(DragSourceDragEvent dsde) {
+ }
+
+ @Override
+ public void dragExit(DragSourceEvent dse) {
+ }
+
+ @Override
+ public void dragDropEnd(DragSourceDropEvent dsde) {
+ }
+ };
+
+ dtListener = new DropTargetListener() {
+ @Override
+ public void dragEnter(DropTargetDragEvent dtde) {
+ if (dropObject != null) {
+ dtde.rejectDrag();
+ return;
+ }
+ dtde.acceptDrag(DnDConstants.ACTION_MOVE);
+ try {
+ Transferable t = dtde.getTransferable();
+ Object data = t.getTransferData(DropObjectFlavor);
+ if (data != null) {
+ throw new Exception("getTransferData returned non-null");
+ }
+ } catch (Exception e) {
+ dragEnterException = e;
+ e.printStackTrace();
+ } finally {
+ lock.countDown();
+ }
+ }
+
+ @Override
+ public void dragOver(DropTargetDragEvent dtde) {
+ if (dropObject != null) {
+ dtde.rejectDrag();
+ return;
+ }
+ dtde.acceptDrag(DnDConstants.ACTION_MOVE);
+ }
+
+ @Override
+ public void dropActionChanged(DropTargetDragEvent dtde) {
+ }
+
+ @Override
+ public void dragExit(DropTargetEvent dte) {
+ }
+
+ @Override
+ public void drop(DropTargetDropEvent dtde) {
+ if (dropObject != null) {
+ dtde.rejectDrop();
+ return;
+ }
+ try {
+ dtde.acceptDrop(DnDConstants.ACTION_MOVE);
+ Transferable t = dtde.getTransferable();
+ DropObject dropObject = (DropObject) t.getTransferData(DropObjectFlavor);
+ Point location = dtde.getLocation();
+ dropObject.place(DnDPanel.this, location);
+ dtde.dropComplete(true);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+ };
+
+ dragSource.createDefaultDragGestureRecognizer(this,
+ DnDConstants.ACTION_MOVE, dgListener);
+
+ dropTarget = new DropTarget(this, DnDConstants.ACTION_MOVE, dtListener, true);
+
+ }
+
+ public void paintComponent(Graphics g) {
+ super.paintComponent(g);
+ Color savedColor = g.getColor();
+ g.setColor(color);
+ g.fillRect(0, 0, getWidth(), getHeight());
+ g.setColor(savedColor);
+ if (dropObject != null) {
+ dropObject.draw((Graphics2D) g);
+ }
+ }
+
+ void setDropObject(DropObject dropObject) {
+ this.dropObject = dropObject;
+ }
+
+ DropObject findDropObject(int x, int y) {
+ if (dropObject != null && dropObject.contains(x, y)) {
+ return dropObject;
+ }
+ return null;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/sun/java2d/DrawXORModeTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,110 @@
+/*
+ * 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 8036022
+ * @summary Test verifies that drawing shapes with XOR composite
+ * does not trigger an InternalError in GDI surface data.
+ * @run main/othervm -Dsun.java2d.d3d=True DrawXORModeTest
+ */
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Stroke;
+import java.awt.geom.Line2D;
+import java.util.concurrent.CountDownLatch;
+
+public class DrawXORModeTest extends Component {
+
+ public static void main(String[] args) {
+ final DrawXORModeTest c = new DrawXORModeTest();
+
+ final Frame f = new Frame("XOR mode test");
+ f.add(c);
+ f.pack();
+
+ f.setVisible(true);
+
+ try {
+ c.checkResult();
+ } finally {
+ f.dispose();
+ }
+ }
+
+ @Override
+ public void paint(Graphics g) {
+ if (g == null || !(g instanceof Graphics2D)) {
+ return;
+ }
+ g.setColor(Color.white);
+ g.setXORMode(Color.black);
+ Graphics2D dg = (Graphics2D) g;
+ Stroke stroke = new BasicStroke(1, BasicStroke.CAP_BUTT,
+ BasicStroke.JOIN_MITER,
+ 10.0f,
+ new float[]{1.0f, 1.0f},
+ 0.0f);
+ dg.setStroke(stroke);
+ try {
+ dg.draw(new Line2D.Float(10, 10, 20, 20));
+ } catch (Throwable e) {
+ synchronized (this) {
+ theError = e;
+ }
+ } finally {
+ didDraw.countDown();
+ }
+ }
+
+ @Override
+ public Dimension getPreferredSize() {
+ return new Dimension(400, 100);
+ }
+
+ public void checkResult() {
+ try {
+ didDraw.await();
+ } catch (InterruptedException e) {
+ }
+
+ synchronized (this) {
+ if (theError != null) {
+ System.out.println("Error: " + theError);
+
+ throw new RuntimeException("Test FAILED.");
+ }
+ }
+ System.out.println("Test PASSED.");
+
+ }
+
+ private Throwable theError = null;
+
+ private final CountDownLatch didDraw = new CountDownLatch(1);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/sun/java2d/OpenGL/DrawHugeImageTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,108 @@
+/*
+ * 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 8040617
+ * @summary Test verifies that an attempt to get an accelerated copy of
+ * a huge buffered image does not result in an OOME.
+ *
+ * @run main DrawHugeImageTest
+ */
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsEnvironment;
+import java.awt.image.BufferedImage;
+import java.awt.image.VolatileImage;
+
+public class DrawHugeImageTest {
+ // we have to render the BI source several times in order
+ // to get an accelerated copy to be used.
+ static {
+ System.setProperty("sun.java2d.accthreshold", "1");
+ }
+ private static final int max_rendering_count = 5;
+
+ private static final Color srcColor = Color.red;
+ private static final Color dstColor = Color.blue;
+
+ public static void main(String[] args) {
+ BufferedImage src = createSrc();
+
+ VolatileImage dst = createDst();
+ System.out.println("Dst: " + dst);
+ boolean status;
+ int count = max_rendering_count;
+
+ do {
+ System.out.println("render image: " + (max_rendering_count - count));
+ status = render(src, dst);
+
+ } while (status && count-- > 0);
+
+ if (!status || count > 0) {
+ throw new RuntimeException("Test failed: " + count);
+ }
+ }
+
+ private static boolean render(BufferedImage src, VolatileImage dst) {
+ int cnt = 5;
+ do {
+ Graphics2D g = dst.createGraphics();
+ g.setColor(dstColor);
+ g.fillRect(0, 0, dst.getWidth(), dst.getHeight());
+ g.drawImage(src, 0, 0, null);
+ g.dispose();
+ } while (dst.contentsLost() && (--cnt > 0));
+
+ if (cnt == 0) {
+ System.err.println("Test failed: unable to render to volatile destination");
+ return false;
+ }
+
+ BufferedImage s = dst.getSnapshot();
+
+ return s.getRGB(1,1) == srcColor.getRGB();
+ }
+
+ private static BufferedImage createSrc() {
+ final int w = 20000;
+ final int h = 5;
+
+ BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_3BYTE_BGR);
+ Graphics2D g = img.createGraphics();
+ g.setColor(srcColor);
+ g.fillRect(0, 0, w, h);
+ g.dispose();
+
+ return img;
+ }
+
+ private static VolatileImage createDst() {
+ GraphicsConfiguration gc =
+ GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
+
+ return gc.createCompatibleVolatileImage(200, 200);
+ }
+}
--- ./jdk/test/sun/net/ftp/FtpURL.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/net/ftp/FtpURL.java Mon Jan 05 11:57:27 2015 -0800
@@ -483,7 +483,7 @@
// Now let's check the URL handler
- url = new URL("ftp://user2:@localhost:" + port + "/%2Fusr/bin;type=d");
+ url = new URL("ftp://user2@localhost:" + port + "/%2Fusr/bin;type=d");
con = url.openConnection();
in = new BufferedReader(new InputStreamReader(con.getInputStream()));
do {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/sun/net/www/http/HttpClient/B8025710.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,409 @@
+/*
+ * 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.
+ */
+
+import java.io.*;
+import java.net.*;
+import java.security.*;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.net.ServerSocketFactory;
+import javax.net.SocketFactory;
+import javax.net.ssl.*;
+
+/**
+ * @test
+ * @bug 8025710
+ * @summary Proxied https connection reuse by HttpClient can send CONNECT to the server
+ */
+public class B8025710 {
+
+ private final static AtomicBoolean connectInServer = new AtomicBoolean();
+ private static final String keystorefile =
+ System.getProperty("test.src", "./")
+ + "/../../../../../sun/security/ssl/etc/keystore";
+ private static final String passphrase = "passphrase";
+
+ public static void main(String[] args) throws Exception {
+ new B8025710().runTest();
+
+ if (connectInServer.get())
+ throw new RuntimeException("TEST FAILED: server got proxy header");
+ else
+ System.out.println("TEST PASSED");
+ }
+
+ private void runTest() throws Exception {
+ ProxyServer proxyServer = new ProxyServer();
+ HttpServer httpServer = new HttpServer();
+ httpServer.start();
+ proxyServer.start();
+
+ URL url = new URL("https", InetAddress.getLocalHost().getHostName(),
+ httpServer.getPort(), "/");
+
+ Proxy proxy = new Proxy(Proxy.Type.HTTP, proxyServer.getAddress());
+
+ HttpsURLConnection.setDefaultSSLSocketFactory(createTestSSLSocketFactory());
+
+ // Make two connections. The bug occurs when the second request is made
+ for (int i = 0; i < 2; i++) {
+ System.out.println("Client: Requesting " + url.toExternalForm()
+ + " via " + proxy.toString()
+ + " (attempt " + (i + 1) + " of 2)");
+
+ HttpsURLConnection connection =
+ (HttpsURLConnection) url.openConnection(proxy);
+
+ connection.setRequestMethod("POST");
+ connection.setDoInput(true);
+ connection.setDoOutput(true);
+ connection.setRequestProperty("User-Agent", "Test/1.0");
+ connection.getOutputStream().write("Hello, world!".getBytes("UTF-8"));
+
+ if (connection.getResponseCode() != 200) {
+ System.err.println("Client: Unexpected response code "
+ + connection.getResponseCode());
+ break;
+ }
+
+ String response = readLine(connection.getInputStream());
+ if (!"Hi!".equals(response)) {
+ System.err.println("Client: Unexpected response body: "
+ + response);
+ }
+ }
+ httpServer.close();
+ proxyServer.close();
+ httpServer.join();
+ proxyServer.join();
+ }
+
+ class ProxyServer extends Thread implements Closeable {
+
+ private final ServerSocket proxySocket;
+ private final Pattern connectLinePattern =
+ Pattern.compile("^CONNECT ([^: ]+):([0-9]+) HTTP/[0-9.]+$");
+ private final String PROXY_RESPONSE =
+ "HTTP/1.0 200 Connection Established\r\n"
+ + "Proxy-Agent: TestProxy/1.0\r\n"
+ + "\r\n";
+
+ ProxyServer() throws Exception {
+ super("ProxyServer Thread");
+
+ // Create the http proxy server socket
+ proxySocket = ServerSocketFactory.getDefault().createServerSocket();
+ proxySocket.bind(new InetSocketAddress(InetAddress.getLocalHost(), 0));
+ }
+
+ public SocketAddress getAddress() { return proxySocket.getLocalSocketAddress(); }
+
+ @Override
+ public void close() throws IOException {
+ proxySocket.close();
+ }
+
+ @Override
+ public void run() {
+ ArrayList<Thread> threads = new ArrayList<>();
+ int connectionCount = 0;
+ try {
+ while (connectionCount++ < 2) {
+ final Socket clientSocket = proxySocket.accept();
+ final int proxyConnectionCount = connectionCount;
+ System.out.println("Proxy: NEW CONNECTION "
+ + proxyConnectionCount);
+
+ Thread t = new Thread("ProxySocket" + proxyConnectionCount) {
+ @Override
+ public void run() {
+ try {
+ String firstLine =
+ readHeader(clientSocket.getInputStream());
+
+ Matcher connectLineMatcher =
+ connectLinePattern.matcher(firstLine);
+ if (!connectLineMatcher.matches()) {
+ System.out.println("Proxy: Unexpected"
+ + " request to the proxy: "
+ + firstLine);
+ return;
+ }
+
+ String host = connectLineMatcher.group(1);
+ String portStr = connectLineMatcher.group(2);
+ int port = Integer.parseInt(portStr);
+
+ Socket serverSocket = SocketFactory.getDefault()
+ .createSocket(host, port);
+
+ clientSocket.getOutputStream()
+ .write(PROXY_RESPONSE.getBytes("UTF-8"));
+
+ ProxyTunnel copyToClient =
+ new ProxyTunnel(serverSocket, clientSocket);
+ ProxyTunnel copyToServer =
+ new ProxyTunnel(clientSocket, serverSocket);
+
+ copyToClient.start();
+ copyToServer.start();
+
+ copyToClient.join();
+ // here copyToClient.close() would not provoke the
+ // bug ( since it would trigger the retry logic in
+ // HttpURLConnction.writeRequests ), so close only
+ // the output to get the connection in this state.
+ clientSocket.shutdownOutput();
+
+ try {
+ Thread.sleep(3000);
+ } catch (InterruptedException ignored) { }
+
+ // now close all connections to finish the test
+ copyToServer.close();
+ copyToClient.close();
+ } catch (IOException | NumberFormatException
+ | InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ };
+ threads.add(t);
+ t.start();
+ }
+ for (Thread t: threads)
+ t.join();
+ } catch (IOException | InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ /**
+ * This inner class provides unidirectional data flow through the sockets
+ * by continuously copying bytes from the input socket onto the output
+ * socket, until both sockets are open and EOF has not been received.
+ */
+ class ProxyTunnel extends Thread {
+ private final Socket sockIn;
+ private final Socket sockOut;
+ private final InputStream input;
+ private final OutputStream output;
+
+ public ProxyTunnel(Socket sockIn, Socket sockOut) throws IOException {
+ super("ProxyTunnel");
+ this.sockIn = sockIn;
+ this.sockOut = sockOut;
+ input = sockIn.getInputStream();
+ output = sockOut.getOutputStream();
+ }
+
+ public void run() {
+ byte[] buf = new byte[8192];
+ int bytesRead;
+
+ try {
+ while ((bytesRead = input.read(buf)) >= 0) {
+ output.write(buf, 0, bytesRead);
+ output.flush();
+ }
+ } catch (IOException ignored) {
+ close();
+ }
+ }
+
+ public void close() {
+ try {
+ if (!sockIn.isClosed())
+ sockIn.close();
+ if (!sockOut.isClosed())
+ sockOut.close();
+ } catch (IOException ignored) { }
+ }
+ }
+
+ /**
+ * the server thread
+ */
+ class HttpServer extends Thread implements Closeable {
+
+ private final ServerSocket serverSocket;
+ private final SSLSocketFactory sslSocketFactory;
+ private final String serverResponse =
+ "HTTP/1.1 200 OK\r\n"
+ + "Content-Type: text/plain\r\n"
+ + "Content-Length: 3\r\n"
+ + "\r\n"
+ + "Hi!";
+ private int connectionCount = 0;
+
+ HttpServer() throws Exception {
+ super("HttpServer Thread");
+
+ KeyStore ks = KeyStore.getInstance("JKS");
+ ks.load(new FileInputStream(keystorefile), passphrase.toCharArray());
+ KeyManagerFactory factory = KeyManagerFactory.getInstance("SunX509");
+ factory.init(ks, passphrase.toCharArray());
+ SSLContext ctx = SSLContext.getInstance("TLS");
+ ctx.init(factory.getKeyManagers(), null, null);
+
+ sslSocketFactory = ctx.getSocketFactory();
+
+ // Create the server that the test wants to connect to via the proxy
+ serverSocket = ServerSocketFactory.getDefault().createServerSocket();
+ serverSocket.bind(new InetSocketAddress(InetAddress.getLocalHost(), 0));
+ }
+
+ public int getPort() { return serverSocket.getLocalPort(); }
+
+ @Override
+ public void close() throws IOException { serverSocket.close(); }
+
+ @Override
+ public void run() {
+ try {
+ while (connectionCount++ < 2) {
+ Socket socket = serverSocket.accept();
+ System.out.println("Server: NEW CONNECTION "
+ + connectionCount);
+
+ SSLSocket sslSocket = (SSLSocket) sslSocketFactory
+ .createSocket(socket,null, getPort(), false);
+ sslSocket.setUseClientMode(false);
+ sslSocket.startHandshake();
+
+ String firstLine = readHeader(sslSocket.getInputStream());
+ if (firstLine != null && firstLine.contains("CONNECT")) {
+ System.out.println("Server: BUG! HTTP CONNECT"
+ + " encountered: " + firstLine);
+ connectInServer.set(true);
+ }
+
+ // write the success response, the request body is not read.
+ // close only output and keep input open.
+ OutputStream out = sslSocket.getOutputStream();
+ out.write(serverResponse.getBytes("UTF-8"));
+ socket.shutdownOutput();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ /**
+ * read the header and return only the first line.
+ *
+ * @param inputStream the stream to read from
+ * @return the first line of the stream
+ * @throws IOException if reading failed
+ */
+ private static String readHeader(InputStream inputStream)
+ throws IOException {
+ String line;
+ String firstLine = null;
+ while ((line = readLine(inputStream)) != null && line.length() > 0) {
+ if (firstLine == null) {
+ firstLine = line;
+ }
+ }
+
+ return firstLine;
+ }
+
+ /**
+ * read a line from stream.
+ *
+ * @param inputStream the stream to read from
+ * @return the line
+ * @throws IOException if reading failed
+ */
+ private static String readLine(InputStream inputStream)
+ throws IOException {
+ final StringBuilder line = new StringBuilder();
+ int ch;
+ while ((ch = inputStream.read()) != -1) {
+ if (ch == '\r') {
+ continue;
+ }
+
+ if (ch == '\n') {
+ break;
+ }
+
+ line.append((char) ch);
+ }
+
+ return line.toString();
+ }
+
+ private SSLSocketFactory createTestSSLSocketFactory() {
+
+ HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
+ @Override
+ public boolean verify(String hostname, SSLSession sslSession) {
+ // ignore the cert's CN; it's not important to this test
+ return true;
+ }
+ });
+
+ // Set up the socket factory to use a trust manager that trusts all
+ // certs, since trust validation isn't important to this test
+ final TrustManager[] trustAllCertChains = new TrustManager[] {
+ new X509TrustManager() {
+ @Override
+ public X509Certificate[] getAcceptedIssuers() {
+ return null;
+ }
+
+ @Override
+ public void checkClientTrusted(X509Certificate[] certs,
+ String authType) {
+ }
+
+ @Override
+ public void checkServerTrusted(X509Certificate[] certs,
+ String authType) {
+ }
+ }
+ };
+
+ final SSLContext sc;
+ try {
+ sc = SSLContext.getInstance("TLS");
+ } catch (NoSuchAlgorithmException e) {
+ throw new RuntimeException(e);
+ }
+
+ try {
+ sc.init(null, trustAllCertChains, new java.security.SecureRandom());
+ } catch (KeyManagementException e) {
+ throw new RuntimeException(e);
+ }
+
+ return sc.getSocketFactory();
+ }
+}
--- ./jdk/test/sun/net/www/protocol/jar/jarbug/run.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/net/www/protocol/jar/jarbug/run.sh Mon Jan 05 11:57:27 2015 -0800
@@ -34,14 +34,17 @@
SunOS | Linux | Darwin )
PS=":"
FS="/"
+ CHMOD="${FS}bin${FS}chmod"
;;
Windows* )
PS=";"
FS="\\"
+ CHMOD="chmod"
;;
CYGWIN* )
PS=";"
FS="/"
+ CHMOD="chmod"
#
# javac does not like /cygdrive produced by `pwd`.
#
@@ -59,6 +62,7 @@
mkdir -p ${DEST}${FS}jar1
cd ${TESTSRC}${FS}etc${FS}jar1
cp -r . ${DEST}${FS}jar1
+${CHMOD} -R u+w ${DEST}${FS}jar1
${TESTJAVA}${FS}bin${FS}javac -d ${DEST}${FS}jar1 \
${TESTSRC}${FS}src${FS}jar1${FS}LoadResourceBundle.java
${TESTJAVA}${FS}bin${FS}javac -d ${DEST}${FS}jar1 \
--- ./jdk/test/sun/security/ec/TestEC.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/ec/TestEC.java Mon Jan 05 11:57:27 2015 -0800
@@ -30,7 +30,7 @@
* @library ../pkcs11/sslecc
* @library ../../../java/security/testlibrary
* @compile -XDignore.symbol.file TestEC.java
- * @run main TestEC
+ * @run main/othervm TestEC
*/
import java.security.Provider;
@@ -53,6 +53,10 @@
public class TestEC {
public static void main(String[] args) throws Exception {
+ // reset the security property to make sure that the algorithms
+ // and keys used in this test are not disabled.
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
+
ProvidersSnapshot snapshot = ProvidersSnapshot.create();
try {
main0(args);
--- ./jdk/test/sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java Mon Jan 05 11:57:27 2015 -0800
@@ -28,6 +28,7 @@
* @author Andreas Sterbenz
* @library ..
* @library ../../../../java/security/testlibrary
+ * @run main/othervm ClientJSSEServerJSSE
*/
import java.security.*;
@@ -37,6 +38,10 @@
private static String[] cmdArgs;
public static void main(String[] args) throws Exception {
+ // reset the security property to make sure that the algorithms
+ // and keys used in this test are not disabled.
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
+
cmdArgs = args;
main(new ClientJSSEServerJSSE());
}
--- ./jdk/test/sun/security/pkcs12/PKCS12SameKeyId.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/pkcs12/PKCS12SameKeyId.java Mon Jan 05 11:57:27 2015 -0800
@@ -59,7 +59,7 @@
for (int i=0; i<SIZE; i++) {
System.err.print(".");
String cmd = "-keystore " + JKSFILE
- + " -storepass changeit -keypass changeit "
+ + " -storepass changeit -keypass changeit -keyalg rsa "
+ "-genkeypair -alias p" + i + " -dname CN=" + i;
KeyTool.main(cmd.split(" "));
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/sun/security/provider/certpath/PKIXCertPathValidator/Validity.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,134 @@
+/*
+ * 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 8021804
+ * @summary CertPath should validate even if the validity period of the
+ * root cert does not include the validity period of a subordinate
+ * cert.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.security.cert.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
+
+public class Validity {
+
+ /*
+ * Subject: OU=TestOrg, CN=TestCA
+ * Issuer: OU=TestOrg, CN=TestCA
+ * Validity
+ * Not Before: Feb 26 21:33:55 2014 GMT
+ Not After : Feb 26 21:33:55 2024 GMT
+ * Version 1
+ */
+ static String CACertStr =
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIBvTCCASYCCQCQRiTo4lBCFjANBgkqhkiG9w0BAQUFADAjMRAwDgYDVQQLDAdU\n" +
+ "ZXN0T3JnMQ8wDQYDVQQDDAZUZXN0Q0EwHhcNMTQwMjI2MjEzMzU1WhcNMjQwMjI2\n" +
+ "MjEzMzU1WjAjMRAwDgYDVQQLDAdUZXN0T3JnMQ8wDQYDVQQDDAZUZXN0Q0EwgZ8w\n" +
+ "DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOtKS4ZrsM3ansd61ZxitcrN0w184I+A\n" +
+ "z0kyrSP1eMtlam+cC2U91NpTz11FYV4XUfBhqqxaXW043AWTUer8pS90Pt4sCrUX\n" +
+ "COx1+QA1M3ZhbZ4sTM7XQ90JbGaBJ/sEza9mlQP7hQ2yQO/hATKbP6J5qvgG2sT2\n" +
+ "S2WYjEgwNwmFAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAQ/CXEpnx2WY4LJtv4jwE\n" +
+ "4jIVirur3pdzV5oBhPyqqHMsyhQBkukCfX7uD7L5wN1+xuM81DfANpIxlnUfybp5\n" +
+ "CpjcmktLpmyK4kJ6XnSd2blbLOIpsr9x6FqxPxpVDlyw/ySHYrIG/GZdsLHgmzGn\n" +
+ "B06jeYzH8OLf879VxAxSsPc=\n" +
+ "-----END CERTIFICATE-----";
+
+ /*
+ * Subject: OU=TestOrg, CN=TestEE0
+ * Issuer: OU=TestOrg, CN=TestCA
+ * Validity
+ * Not Before: Feb 26 22:55:12 2014 GMT
+ * Not After : Feb 25 22:55:12 2025 GMT
+ * Version 1
+ */
+ static String EECertStr =
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIBtjCCAR8CAQQwDQYJKoZIhvcNAQEFBQAwIzEQMA4GA1UECwwHVGVzdE9yZzEP\n" +
+ "MA0GA1UEAwwGVGVzdENBMB4XDTE0MDIyNjIyNTUxMloXDTI1MDIyNTIyNTUxMlow\n" +
+ "JDEQMA4GA1UECwwHVGVzdE9yZzEQMA4GA1UEAwwHVGVzdEVFMDCBnzANBgkqhkiG\n" +
+ "9w0BAQEFAAOBjQAwgYkCgYEAt8xz9W3ruCTHjSOtTX6cxsUZ0nRP6EavEfzgcOYh\n" +
+ "CXGA0gr+viSHq3c2vQBxiRny2hm5rLcqpPo+2OxZtw/ajxfyrV6d/r8YyQLBvyl3\n" +
+ "xdCZdOkG1DCM1oFAQDaSRt9wN5Zm5kyg7uMig5Y4L45fP9Yee4x6Xyh36qYbsR89\n" +
+ "rFMCAwEAATANBgkqhkiG9w0BAQUFAAOBgQDZrPqSo08va1m9TOWOztTuWilGdjK/\n" +
+ "2Ed2WXg8utIpy6uAV+NaOYtHQ7ULQBVRNmwg9nKghbVbh+E/xpoihjl1x7OXass4\n" +
+ "TbwXA5GKFIFpNtDvATQ/QQZoCuCzw1FW/mH0Q7UEQ/9/iJdDad6ebkapeMwtj/8B\n" +
+ "s2IZV7s85CEOXw==\n" +
+ "-----END CERTIFICATE-----";
+
+ public static void main(String[] args) throws Exception {
+
+ String[] certStrs = {EECertStr};
+ String[] trustedCertStrs = {CACertStr};
+ runTest(certStrs, trustedCertStrs);
+
+ System.out.println("Test passed.");
+ }
+
+ private static void runTest(String[] certStrs,
+ String[] trustedCertStrs)
+ throws Exception {
+
+ CertificateFactory cf = CertificateFactory.getInstance("X509");
+
+ // Generate the CertPath from the certs named in certStrs
+ ArrayList<X509Certificate> certs = new ArrayList<>();
+ for (String certStr : certStrs) {
+ certs.add(generateCert(certStr, cf));
+ }
+ CertPath cp = cf.generateCertPath(certs);
+
+ // Generate the set of Trust Anchors from the certs named in
+ // trustedCertStrs
+ Set<TrustAnchor> trustAnchors = new HashSet<>();
+ for (String trustedCertStr : trustedCertStrs) {
+ TrustAnchor ta = new TrustAnchor(generateCert(trustedCertStr, cf),
+ null);
+ trustAnchors.add(ta);
+ }
+ PKIXParameters params = new PKIXParameters(trustAnchors);
+ params.setDate(new Date(114, 3, 1)); // 2014-03-01
+ params.setRevocationEnabled(false);
+
+ // Attempt to validate the CertPath. If no exception thrown, successful.
+ CertPathValidator cpv = CertPathValidator.getInstance("PKIX");
+ cpv.validate(cp, params);
+ System.out.println("CertPath validation successful.");
+ }
+
+ private static X509Certificate generateCert(String certStr,
+ CertificateFactory cf)
+ throws Exception {
+ ByteArrayInputStream stream
+ = new ByteArrayInputStream(certStr.getBytes());
+ return (X509Certificate) cf.generateCertificate(stream);
+
+ }
+}
--- ./jdk/test/sun/security/smartcardio/TestAll.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/smartcardio/TestAll.java Mon Jan 05 11:57:27 2015 -0800
@@ -40,6 +40,7 @@
TestMultiplePresent.class,
TestPresent.class,
TestTransmit.class,
+ TestDirect.class,
};
public static void main(String[] args) throws Exception {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/sun/security/smartcardio/TestDirect.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,48 @@
+/*
+ * 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 8046343
+ * @summary Make sure that direct protocol is available
+ * @run main/manual TestDirect
+ */
+
+// This test requires special hardware.
+
+import javax.smartcardio.Card;
+import javax.smartcardio.CardTerminal;
+import javax.smartcardio.CardTerminals;
+import javax.smartcardio.TerminalFactory;
+
+public class TestDirect {
+ public static void main(String[] args) throws Exception {
+ TerminalFactory terminalFactory = TerminalFactory.getDefault();
+ CardTerminals cardTerminals = terminalFactory.terminals();
+ CardTerminal cardTerminal = cardTerminals.list().get(0);
+ Card card = cardTerminal.connect("DIRECT");
+ card.disconnect(true);
+
+ System.out.println("OK.");
+ }
+}
--- ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ProtocolVersion/HttpsProtocols.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ProtocolVersion/HttpsProtocols.java Mon Jan 05 11:57:27 2015 -0800
@@ -32,6 +32,7 @@
import java.io.*;
import java.net.*;
import javax.net.ssl.*;
+import java.security.Security;
public class HttpsProtocols implements HostnameVerifier {
@@ -177,6 +178,10 @@
volatile Exception clientException = null;
public static void main(String[] args) throws Exception {
+ // reset the security property to make sure that the algorithms
+ // and keys used in this test are not disabled.
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
+
String keyFilename =
System.getProperty("test.src", "./") + "/" + pathToStores +
"/" + keyStoreFile;
--- ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/DelegatedTaskWrongException.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/DelegatedTaskWrongException.java Mon Jan 05 11:57:27 2015 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 4969459
* @summary Delegated tasks are not reflecting the subclasses of SSLException
- *
+ * @run main/othervm DelegatedTaskWrongException
*/
import javax.net.ssl.*;
@@ -110,6 +110,9 @@
}
public static void main(String args[]) throws Exception {
+ // reset the security property to make sure that the algorithms
+ // and keys used in this test are not disabled.
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
DelegatedTaskWrongException test;
--- ./jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/testEnabledProtocols.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/testEnabledProtocols.java Mon Jan 05 11:57:27 2015 -0800
@@ -122,6 +122,10 @@
volatile Exception clientException = null;
public static void main(String[] args) throws Exception {
+ // reset the security property to make sure that the algorithms
+ // and keys used in this test are not disabled.
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
+
String keyFilename =
System.getProperty("test.src", "./") + "/" + pathToStores +
"/" + keyStoreFile;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/sun/security/ssl/sanity/ciphersuites/CipherSuitesInOldOrder.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,236 @@
+/*
+ * Copyright (c) 2012, 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 7174244 8043200 8050158
+ * @summary NPE in Krb5ProxyImpl.getServerKeys()
+ *
+ * SunJSSE does not support dynamic system properties, no way to re-use
+ * system properties in samevm/agentvm mode.
+ * @run main/othervm -Djdk.tls.preserveRC4CipherSuites=true CipherSuitesInOldOrder
+ */
+
+import java.util.*;
+import javax.net.ssl.*;
+
+public class CipherSuitesInOldOrder {
+
+ // supported ciphersuites
+ private final static List<String> supportedCipherSuites =
+ Arrays.<String>asList(
+ "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384",
+ "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
+ "TLS_RSA_WITH_AES_256_CBC_SHA256",
+ "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384",
+ "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384",
+ "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256",
+ "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256",
+ "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
+ "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
+ "TLS_RSA_WITH_AES_256_CBC_SHA",
+ "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA",
+ "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA",
+ "TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
+ "TLS_DHE_DSS_WITH_AES_256_CBC_SHA",
+ "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
+ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
+ "TLS_RSA_WITH_AES_128_CBC_SHA256",
+ "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256",
+ "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256",
+ "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",
+ "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256",
+ "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
+ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
+ "TLS_RSA_WITH_AES_128_CBC_SHA",
+ "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA",
+ "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA",
+ "TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
+ "TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
+ "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
+ "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
+ "SSL_RSA_WITH_RC4_128_SHA",
+ "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
+ "TLS_ECDH_RSA_WITH_RC4_128_SHA",
+ "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA",
+ "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
+ "SSL_RSA_WITH_3DES_EDE_CBC_SHA",
+ "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA",
+ "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA",
+ "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA",
+ "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA",
+ "SSL_RSA_WITH_RC4_128_MD5",
+
+ "TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
+
+ "TLS_DH_anon_WITH_AES_256_CBC_SHA256",
+ "TLS_ECDH_anon_WITH_AES_256_CBC_SHA",
+ "TLS_DH_anon_WITH_AES_256_CBC_SHA",
+ "TLS_DH_anon_WITH_AES_128_CBC_SHA256",
+ "TLS_ECDH_anon_WITH_AES_128_CBC_SHA",
+ "TLS_DH_anon_WITH_AES_128_CBC_SHA",
+ "TLS_ECDH_anon_WITH_RC4_128_SHA",
+ "SSL_DH_anon_WITH_RC4_128_MD5",
+ "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
+ "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
+ "TLS_RSA_WITH_NULL_SHA256",
+ "TLS_ECDHE_ECDSA_WITH_NULL_SHA",
+ "TLS_ECDHE_RSA_WITH_NULL_SHA",
+ "SSL_RSA_WITH_NULL_SHA",
+ "TLS_ECDH_ECDSA_WITH_NULL_SHA",
+ "TLS_ECDH_RSA_WITH_NULL_SHA",
+ "TLS_ECDH_anon_WITH_NULL_SHA",
+ "SSL_RSA_WITH_NULL_MD5",
+ "SSL_RSA_WITH_DES_CBC_SHA",
+ "SSL_DHE_RSA_WITH_DES_CBC_SHA",
+ "SSL_DHE_DSS_WITH_DES_CBC_SHA",
+ "SSL_DH_anon_WITH_DES_CBC_SHA",
+ "SSL_RSA_EXPORT_WITH_RC4_40_MD5",
+ "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
+ "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
+ "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
+ "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
+ "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
+ "TLS_KRB5_WITH_RC4_128_SHA",
+ "TLS_KRB5_WITH_RC4_128_MD5",
+ "TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
+ "TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
+ "TLS_KRB5_WITH_DES_CBC_SHA",
+ "TLS_KRB5_WITH_DES_CBC_MD5",
+ "TLS_KRB5_EXPORT_WITH_RC4_40_SHA",
+ "TLS_KRB5_EXPORT_WITH_RC4_40_MD5",
+ "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
+ "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5"
+ );
+
+ private final static String[] protocols = {
+ "", "SSL", "TLS", "SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2"
+ };
+
+
+ public static void main(String[] args) throws Exception {
+ // show all of the supported cipher suites
+ showSuites(supportedCipherSuites.toArray(new String[0]),
+ "All supported cipher suites");
+
+ for (String protocol : protocols) {
+ System.out.println("//");
+ System.out.println("// " +
+ "Testing for SSLContext of " + protocol);
+ System.out.println("//");
+ checkForProtocols(protocol);
+ }
+ }
+
+ public static void checkForProtocols(String protocol) throws Exception {
+ SSLContext context;
+ if (protocol.isEmpty()) {
+ context = SSLContext.getDefault();
+ } else {
+ context = SSLContext.getInstance(protocol);
+ context.init(null, null, null);
+ }
+
+ // check the order of default cipher suites of SSLContext
+ SSLParameters parameters = context.getDefaultSSLParameters();
+ checkSuites(parameters.getCipherSuites(),
+ "Default cipher suites in SSLContext");
+
+ // check the order of supported cipher suites of SSLContext
+ parameters = context.getSupportedSSLParameters();
+ checkSuites(parameters.getCipherSuites(),
+ "Supported cipher suites in SSLContext");
+
+
+ //
+ // Check the cipher suites order of SSLEngine
+ //
+ SSLEngine engine = context.createSSLEngine();
+
+ // check the order of endabled cipher suites
+ String[] ciphers = engine.getEnabledCipherSuites();
+ checkSuites(ciphers,
+ "Enabled cipher suites in SSLEngine");
+
+ // check the order of supported cipher suites
+ ciphers = engine.getSupportedCipherSuites();
+ checkSuites(ciphers,
+ "Supported cipher suites in SSLEngine");
+
+ //
+ // Check the cipher suites order of SSLSocket
+ //
+ SSLSocketFactory factory = context.getSocketFactory();
+ try (SSLSocket socket = (SSLSocket)factory.createSocket()) {
+
+ // check the order of endabled cipher suites
+ ciphers = socket.getEnabledCipherSuites();
+ checkSuites(ciphers,
+ "Enabled cipher suites in SSLSocket");
+
+ // check the order of supported cipher suites
+ ciphers = socket.getSupportedCipherSuites();
+ checkSuites(ciphers,
+ "Supported cipher suites in SSLSocket");
+ }
+
+ //
+ // Check the cipher suites order of SSLServerSocket
+ //
+ SSLServerSocketFactory serverFactory = context.getServerSocketFactory();
+ try (SSLServerSocket serverSocket =
+ (SSLServerSocket)serverFactory.createServerSocket()) {
+ // check the order of endabled cipher suites
+ ciphers = serverSocket.getEnabledCipherSuites();
+ checkSuites(ciphers,
+ "Enabled cipher suites in SSLServerSocket");
+
+ // check the order of supported cipher suites
+ ciphers = serverSocket.getSupportedCipherSuites();
+ checkSuites(ciphers,
+ "Supported cipher suites in SSLServerSocket");
+ }
+ }
+
+ private static void checkSuites(String[] suites, String title) {
+ showSuites(suites, title);
+
+ int loc = -1;
+ int index = 0;
+ for (String suite : suites) {
+ index = supportedCipherSuites.indexOf(suite);
+ if (index <= loc) {
+ throw new RuntimeException(suite + " is not in order");
+ }
+
+ loc = index;
+ }
+ }
+
+ private static void showSuites(String[] suites, String title) {
+ System.out.println(title + "[" + suites.length + "]:");
+ for (String suite : suites) {
+ System.out.println(" " + suite);
+ }
+ }
+}
--- ./jdk/test/sun/security/ssl/sanity/ciphersuites/CipherSuitesInOrder.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/ssl/sanity/ciphersuites/CipherSuitesInOrder.java Mon Jan 05 11:57:27 2015 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 7174244
+ * @bug 7174244 8043200
* @summary NPE in Krb5ProxyImpl.getServerKeys()
*
* SunJSSE does not support dynamic system properties, no way to re-use
@@ -67,11 +67,6 @@
"TLS_ECDH_RSA_WITH_AES_128_CBC_SHA",
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
"TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
- "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
- "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
- "SSL_RSA_WITH_RC4_128_SHA",
- "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
- "TLS_ECDH_RSA_WITH_RC4_128_SHA",
"TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA",
"TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
"SSL_RSA_WITH_3DES_EDE_CBC_SHA",
@@ -79,6 +74,11 @@
"TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA",
"SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA",
"SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA",
+ "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
+ "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
+ "SSL_RSA_WITH_RC4_128_SHA",
+ "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
+ "TLS_ECDH_RSA_WITH_RC4_128_SHA",
"SSL_RSA_WITH_RC4_128_MD5",
"TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
@@ -89,18 +89,10 @@
"TLS_DH_anon_WITH_AES_128_CBC_SHA256",
"TLS_ECDH_anon_WITH_AES_128_CBC_SHA",
"TLS_DH_anon_WITH_AES_128_CBC_SHA",
+ "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
+ "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
"TLS_ECDH_anon_WITH_RC4_128_SHA",
"SSL_DH_anon_WITH_RC4_128_MD5",
- "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
- "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
- "TLS_RSA_WITH_NULL_SHA256",
- "TLS_ECDHE_ECDSA_WITH_NULL_SHA",
- "TLS_ECDHE_RSA_WITH_NULL_SHA",
- "SSL_RSA_WITH_NULL_SHA",
- "TLS_ECDH_ECDSA_WITH_NULL_SHA",
- "TLS_ECDH_RSA_WITH_NULL_SHA",
- "TLS_ECDH_anon_WITH_NULL_SHA",
- "SSL_RSA_WITH_NULL_MD5",
"SSL_RSA_WITH_DES_CBC_SHA",
"SSL_DHE_RSA_WITH_DES_CBC_SHA",
"SSL_DHE_DSS_WITH_DES_CBC_SHA",
@@ -111,16 +103,24 @@
"SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
"SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
"SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
+ "TLS_RSA_WITH_NULL_SHA256",
+ "TLS_ECDHE_ECDSA_WITH_NULL_SHA",
+ "TLS_ECDHE_RSA_WITH_NULL_SHA",
+ "SSL_RSA_WITH_NULL_SHA",
+ "TLS_ECDH_ECDSA_WITH_NULL_SHA",
+ "TLS_ECDH_RSA_WITH_NULL_SHA",
+ "TLS_ECDH_anon_WITH_NULL_SHA",
+ "SSL_RSA_WITH_NULL_MD5",
+ "TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
+ "TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
"TLS_KRB5_WITH_RC4_128_SHA",
"TLS_KRB5_WITH_RC4_128_MD5",
- "TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
- "TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
"TLS_KRB5_WITH_DES_CBC_SHA",
"TLS_KRB5_WITH_DES_CBC_MD5",
+ "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
+ "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5",
"TLS_KRB5_EXPORT_WITH_RC4_40_SHA",
- "TLS_KRB5_EXPORT_WITH_RC4_40_MD5",
- "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
- "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5"
+ "TLS_KRB5_EXPORT_WITH_RC4_40_MD5"
);
private final static String[] protocols = {
--- ./jdk/test/sun/security/ssl/sanity/interop/CipherTest.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/ssl/sanity/interop/CipherTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -394,6 +394,10 @@
public static void main(PeerFactory peerFactory, String[] args)
throws Exception {
+ // reset the security property to make sure that the algorithms
+ // and keys used in this test are not disabled.
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
+
long time = System.currentTimeMillis();
String relPath;
if ((args != null) && (args.length > 0) && args[0].equals("sh")) {
--- ./jdk/test/sun/security/ssl/sanity/interop/ClientJSSEServerJSSE.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/ssl/sanity/interop/ClientJSSEServerJSSE.java Mon Jan 05 11:57:27 2015 -0800
@@ -29,9 +29,15 @@
* @run main/othervm/timeout=300 ClientJSSEServerJSSE
*/
+import java.security.Security;
+
public class ClientJSSEServerJSSE {
public static void main(String[] args) throws Exception {
+ // reset the security property to make sure that the algorithms
+ // and keys used in this test are not disabled.
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
+
CipherTest.main(new JSSEFactory(), args);
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/sun/security/tools/jarsigner/TimestampAlg.java Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,156 @@
+/*
+ * 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 8049480
+ * @summary Current versions of Java can't verify jars signed and timestamped with Java 9
+ */
+
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+public class TimestampAlg {
+
+ public static void main(String[] args) throws Exception {
+ // This is a very simple jar file signed by JDK 9 with a timestamp
+ // using the SHA-256 message digest algorithm.
+ String var =
+ "504b0304140008080800c28ee844000000000000000000000000140000004d45" +
+ "54412d494e462f4d414e49464553542e4d4615cd4d0b82301c80f1fb60df61c7" +
+ "42666a9928749846f4aa8924745cf9d716b6c59c48df3ebd3e87df73e152d4d0" +
+ "195a82ee849211716d07a344033750d1f83785d076e830b8be1fb80e15d28096" +
+ "bca535ef4c058fbe21b34cf3670b2451faab3437a333c708a3947f20220ca362" +
+ "cfa8e7afe95634e32b22af821df2d6786d5ff637cf3abfe3f05e4190a42779b5" +
+ "76470532cbd56a798105db4cd01f504b07082c3740c69c000000a6000000504b" +
+ "0304140008080800c28ee8440000000000000000000000000f0000004d455441" +
+ "2d494e462f4f4c442e534675cf416f823018c6f13b09dfa1c7ed50575014493c" +
+ "80bae8a6a091383db6f082955a595b86ecd34fb3db92dd9ed32fff67c74b494d" +
+ "a300ef41697e9501727ac4b6768b10bbde10cf7809dae03595bcf81d5ce2d018" +
+ "c5596340072872bdecd02554f17c70f16fc730cfb4a8c6b0ad934fdfb6d0e854" +
+ "fbb794ecd52eeecbe5e45f394071bd9ef30c34131f87a3e956c561efb0938e56" +
+ "b7573d5c6cd3599bbe2ddd28acfafe9d992aa006721c758fe2718fe0b6753c6f" +
+ "e410cca50125a9c005d52607d694e82951341380a657555f1535f7a3cfb6655b" +
+ "31bd4080c2bf55016a98a8f2512948f7e5968dfbbe495fcca6383bdfe753a467" +
+ "90ca41a297861544cd270fe807504b0708521a35550201000048010000504b03" +
+ "04140008080800c28ee844000000000000000000000000100000004d4554412d" +
+ "494e462f4f4c442e52534185947b38d37d1fc7fdb61923530eb39e688622a77e" +
+ "5b666ab9939c9544c831ee39d42c9511e576d8c8b9876745b5743b5414268718" +
+ "b969548e95d61c2224b47423a648393d73dd5d4fe5b9afe7f9f3f3b9deefeff5" +
+ "bd3e9ff7e7053210ba708476bc55fc6719400292c340a8800cc4460800e06441" +
+ "1938c23bde0af083c22080b81828fd5d08e430200f4006a41664003772a01000" +
+ "028145a66e3cba6af9a601a44516246e1d2805873ac1a0f2d093545f70b3920c" +
+ "ce00248246e04ec20e02e8262a09200e6ff0adfc2f3d0350fbf149d12fa00c40" +
+ "564cd497823000406cb4ef6571fdec06c95a370fde860e89425861e16e0b19a1" +
+ "4c6c4f52d6102dd3a6bf45e740d9a0bed342ee5e832885fa1a979dc7e6161253" +
+ "4c2cda0362e5ec02ae440e44e80c56bffc4ab4f349f3b1f6bddae8c2979fca4b" +
+ "5e7e46ac2fa529481dd8d750a26dcd7d74deb8dde7fc70c072465af0a1e359af" +
+ "4cf4b1aaa14fc4238cee096ca3133575d52179a7e7da8990f6ed5da71ca84c37" +
+ "2d3117c356b1ac2cdde3c8600ead44f8878b2f8f10831f4d5d590a28d95b316c" +
+ "cf456277a83533e12ea42a14c8fc05da6b2483b74ab7c4e70a2dd60f417d2f97" +
+ "3359bb233e3d6b5ab60202e7bd7b4fd7f228febd1f0403b0c62f4190b69264bf" +
+ "72426589ab516d00040a880137b0200654114d4d050943c11490e82d88b38ecd" +
+ "26a42c027cd749ffe67955e7d9357b81aece4e877d49ee62b8afeed7a755fa9e" +
+ "786d6edc5d7e5ae3603e5d6e39d0cbc74300c35eb354282842a183159763c67a" +
+ "35b0b1ac1929e7b8ad510da5aa454d5eb3034cf11d27f594326384873f7c8949" +
+ "1a7f4a3cfccb892faf873c621292bd597072cdcd732d1ee7490e611ec28c90f9" +
+ "81bbd71ef0e4b50c4e93869c9af8c9d3d154169bbf8dff7aa706ebac1f6d2589" +
+ "8078532a9867e31d7f576365bc0c6c132fb7719b58d88ebcf438715768aea361" +
+ "f7017f614acfaf465e6d794b84e317b2937d66a8f5cea13666d541cce02705a8" +
+ "cef2d6d2f69b96ac88fec9998228a7c1d96d09c315b29797ecda02250dc7383a" +
+ "6f2bf75b0f17d48c07afa48c640d3478dd3ad18963c0712003ae27ca3a885a9b" +
+ "bcef71fef1027e8e228c01885dede0446717674996f8f413f59a5c3f91a001c0" +
+ "b632f78891424ce58a58df39727a6cc492ea4c94d5f23f6ad1276561d6eb057f" +
+ "befab3e5baff5dec50224a891fb49c29ab6cd6cab3f7731d097fc3d65e949b33" +
+ "b7a578f0b379e47a98c0a91b5fb0ce685952a78afc5cfa0e373df4a035c15132" +
+ "bb62a6387ad8caaadab680b8a169805e49b69e5ad8409de9b7079b6def2af45a" +
+ "dada5e7cdee4b5359892d1803dfc765dd18849fd0bf44b64866ed654fc117ea6" +
+ "5e6b1922eff99b73f0c77257e994d307defc9a29cedd1ac7be68a626d6edf96e" +
+ "c692bdf22ee792369dd535a0dfa7d711396996f692895df223eaaa5f47414f45" +
+ "b2c3b39d65772575c5cf4a437319b00990011b834b7f1b0c623d048963c07a44" +
+ "4dfe4f60813d12b5b87f0b16ea0f6e0096e30973075d454238d411260ee2d6a8" +
+ "61aa68a6bb3119ab837aaa39abd612eab39f9da4665c977e0cff019201a19384" +
+ "d3222b5a160ffe07340620c10d220998e65d3431411e13916b4e44ae191143fa" +
+ "be91cb1605ff6d2db96470d220e2af3c40f6ed5d032ee2cfe022bafd240fa1fd" +
+ "5f6e3567dd9071543e381b57bdd80cb1575a376abcc947495167e61e6e32a1ae" +
+ "93d416c8bc197b6bda347e6bcc6553839ed0a78d7ac28d57f2f7f8cd857d14e4" +
+ "497caa1cd34e1829aa7574aa3984ad39934e765598bdf0356c31a8f5c4a316d6" +
+ "c6beedf3add584c5769a6901a7836d3b32e3a03c58c739a6969e0260a002f463" +
+ "2773e84174c7faa41086e0d5d0ceaefc4df5a443d4e8af8a462dd67181ce11be" +
+ "a6ef64ce907252a0d0e6f03ef467e6763c244c48574856017d294607d3f87d5b" +
+ "0eb9eba2c60dc6c70dddfb837914babf172574ef99a4bb1e361353de4d95c576" +
+ "c494e1e9bce62d4fd08ad5e731691d1895636525bb79d76b2f1ce07d1604aa95" +
+ "8d9dfc8b5b6ee01110b3ca2d75181a44c528300ede3c612715c04d7baf786a18" +
+ "87b5f95861180fa256055b006005b67aa0923a70405c5c022af903f0187b3458" +
+ "748cc0bdfeac15adcb7029a17883d0f5ef80573caa61574bb66747bc61aae3ca" +
+ "0c3fe8bcd223d54fd7f5a2270843f9559a99f76aff45d965ba91374fa05a706f" +
+ "479416999389d4e29eb74a1984a30face935fd2118a580a3cd5a6567c2e21e92" +
+ "bb358c54822aaa049a8f47712889ee4507ae4ffd150ba50f444f99701c49fa97" +
+ "72edc44e69cfcda9cffc9f75c49fdb6b28b9699a2567289979dfd42664626232" +
+ "75b682be2baf3856623e37bb47c15e3e8e084771e4f3e7b53265efbc48e616cd" +
+ "ed18c4a546de3f5bd793857c9c7a99615161b7cdcca53fa1d4c119a33bb150a4" +
+ "6e4996450724eed76ae3d2dbc02f147228353241beba27e585a3dd556b8e5c2e" +
+ "5f4a3328fd214663223ec27d4fb134873a85630026a204ee5e059ee29a807f3f" +
+ "82ffcd3b2437cc1bf95a6813dec5195b38cd227002c6f5f53dcd1212f7182038" +
+ "9877b7ddf1ff2c0c65993b9524d3b41eca82ded2b951471c871b741fddd9fdc7" +
+ "70a79bb91c3d91f3a9aa8f880ec22099418c65654a7e3a25c4d8925e98e1e390" +
+ "1437e8767c9debf521e5c93ad5026ab8e5ef9696983ba6d0335e17de6ba65747" +
+ "91a0fb6ecdf20bde55874082a7f19b4332ddbba24d4eb98a9b0e55e4294f37be" +
+ "edd62a3e3ebccf8ded49f3a029fa76becf3389a386d2d62faca4f85cbb643489" +
+ "2e2abfd66dbe727f4fe28d8f8d551e0f8f4c8eda346c66d1bc6fa7a68eabdfb7" +
+ "0d0a34e65910bba73413ad8680dfaa473753ae9e2fd032d8f6cc66d19c57e679" +
+ "7fcc33cce8df504b0708267c480f1b08000030090000504b0304140008080800" +
+ "b78ee844000000000000000000000000090004004d4554412d494e462ffeca00" +
+ "000300504b0708000000000200000000000000504b0304140008080800b78ee8" +
+ "440000000000000000000000000100000041f3cb2fc9c8cc4be70200504b0708" +
+ "3c0a34d30a00000008000000504b01021400140008080800c28ee8442c3740c6" +
+ "9c000000a60000001400000000000000000000000000000000004d4554412d49" +
+ "4e462f4d414e49464553542e4d46504b01021400140008080800c28ee844521a" +
+ "355502010000480100000f00000000000000000000000000de0000004d455441" +
+ "2d494e462f4f4c442e5346504b01021400140008080800c28ee844267c480f1b" +
+ "0800003009000010000000000000000000000000001d0200004d4554412d494e" +
+ "462f4f4c442e525341504b01021400140008080800b78ee84400000000020000" +
+ "00000000000900040000000000000000000000760a00004d4554412d494e462f" +
+ "feca0000504b01021400140008080800b78ee8443c0a34d30a00000008000000" +
+ "0100000000000000000000000000b30a000041504b0506000000000500050027" +
+ "010000ec0a00000000";
+ byte[] data = new byte[var.length()/2];
+ for (int i=0; i<data.length; i++) {
+ data[i] = Integer.valueOf(var.substring(2*i,2*i+2), 16).byteValue();
+ }
+ Files.write(Paths.get("x.jar"), data);
+
+ try (JarFile jf = new JarFile("x.jar")) {
+ JarEntry je = jf.getJarEntry("A");
+ try (InputStream is = jf.getInputStream(je)) {
+ is.read(new byte[10]);
+ }
+ if (je.getCertificates().length != 1) {
+ throw new Exception();
+ }
+ }
+ }
+}
--- ./jdk/test/sun/security/tools/jarsigner/TimestampCheck.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/tools/jarsigner/TimestampCheck.java Mon Jan 05 11:57:27 2015 -0800
@@ -188,7 +188,7 @@
DerOutputStream tstInfo2 = new DerOutputStream();
tstInfo2.putOctetString(tstInfo.toByteArray());
- Signature sig = Signature.getInstance("SHA1withDSA");
+ Signature sig = Signature.getInstance("SHA1withRSA");
sig.initSign((PrivateKey)(ks.getKey(
alias, "changeit".toCharArray())));
sig.update(tstInfo.toByteArray());
@@ -205,7 +205,7 @@
SignerInfo signerInfo = new SignerInfo(
new X500Name(signer.getIssuerX500Principal().getName()),
signer.getSerialNumber(),
- aid, AlgorithmId.get("DSA"), sig.sign());
+ aid, AlgorithmId.get("RSA"), sig.sign());
SignerInfo[] signerInfos = {signerInfo};
PKCS7 p7 =
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./jdk/test/sun/security/tools/jarsigner/certpolicy.sh Mon Jan 05 11:57:27 2015 -0800
@@ -0,0 +1,79 @@
+#
+# 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 8036709
+# @summary Java 7 jarsigner displays warning about cert policy tree
+#
+# @run shell certpolicy.sh
+#
+
+if [ "${TESTJAVA}" = "" ] ; then
+ JAVAC_CMD=`which javac`
+ TESTJAVA=`dirname $JAVAC_CMD`/..
+fi
+
+KT="$TESTJAVA/bin/keytool $TESTTOOLVMOPTS \
+ -keypass changeit -storepass changeit -keystore ks -keyalg rsa"
+JS="$TESTJAVA/bin/jarsigner $TESTTOOLVMOPTS -storepass changeit -keystore ks"
+JAR="$TESTJAVA/bin/jar $TESTTOOLVMOPTS"
+
+rm ks 2> /dev/null
+$KT -genkeypair -alias ca -dname CN=CA -ext bc
+$KT -genkeypair -alias int -dname CN=Int
+$KT -genkeypair -alias ee -dname CN=EE
+
+# CertificatePolicies [[PolicyId: [1.2.3]], [PolicyId: [1.2.4]]]
+# PolicyConstraints: [Require: 0; Inhibit: unspecified]
+$KT -certreq -alias int | \
+ $KT -gencert -rfc -alias ca \
+ -ext 2.5.29.32="30 0C 30 04 06 02 2A 03 30 04 06 02 2A 04" \
+ -ext "2.5.29.36=30 03 80 01 00" -ext bc | \
+ $KT -import -alias int
+
+# CertificatePolicies [[PolicyId: [1.2.3]]]
+$KT -certreq -alias ee | \
+ $KT -gencert -rfc -alias int \
+ -ext 2.5.29.32="30 06 30 04 06 02 2A 03" | \
+ $KT -import -alias ee
+
+$KT -export -alias ee -rfc > cc
+$KT -export -alias int -rfc >> cc
+$KT -export -alias ca -rfc >> cc
+
+$KT -delete -alias int
+
+ERR=''
+$JAR cvf a.jar cc
+
+# Make sure the certchain in the signed jar contains all 3 certs
+$JS -strict -certchain cc a.jar ee -debug || ERR="sign"
+$JS -strict -verify a.jar -debug || ERR="$ERR verify"
+
+if [ "$ERR" = "" ]; then
+ echo "Success"
+ exit 0
+else
+ echo "Failed: $ERR"
+ exit 1
+fi
--- ./jdk/test/sun/security/tools/jarsigner/checkusage.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/tools/jarsigner/checkusage.sh Mon Jan 05 11:57:27 2015 -0800
@@ -45,7 +45,7 @@
;;
esac
-KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit"
+KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keyalg rsa"
JAR=$TESTJAVA${FS}bin${FS}jar
JARSIGNER="$TESTJAVA${FS}bin${FS}jarsigner"
--- ./jdk/test/sun/security/tools/jarsigner/crl.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/tools/jarsigner/crl.sh Mon Jan 05 11:57:27 2015 -0800
@@ -45,7 +45,7 @@
KS=crl.jks
-KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS"
+KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS -keyalg rsa"
rm $KS 2> /dev/null
--- ./jdk/test/sun/security/tools/jarsigner/jvindex.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/tools/jarsigner/jvindex.sh Mon Jan 05 11:57:27 2015 -0800
@@ -47,7 +47,7 @@
JFILE=jvindex.jar
KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit \
- -keystore $KS"
+ -keystore $KS -keyalg rsa"
JAR=$TESTJAVA${FS}bin${FS}jar
JARSIGNER="$TESTJAVA${FS}bin${FS}jarsigner -keystore $KS -storepass changeit"
--- ./jdk/test/sun/security/tools/jarsigner/newsize7.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/tools/jarsigner/newsize7.sh Mon Jan 05 11:57:27 2015 -0800
@@ -51,7 +51,7 @@
KSFILE=ns7.jks
-KT="${TESTJAVA}${FS}bin${FS}keytool -keystore ns7.jks -storepass changeit -keypass changeit"
+KT="${TESTJAVA}${FS}bin${FS}keytool -keystore ns7.jks -storepass changeit -keypass changeit -keyalg rsa"
JAR="${TESTJAVA}${FS}bin${FS}jar"
JS="${TESTJAVA}${FS}bin${FS}jarsigner -keystore ns7.jks -storepass changeit"
--- ./jdk/test/sun/security/tools/jarsigner/onlymanifest.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/tools/jarsigner/onlymanifest.sh Mon Jan 05 11:57:27 2015 -0800
@@ -46,7 +46,7 @@
JFILE=onlymanifest.jar
KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit \
- -keystore $KS"
+ -keystore $KS -keyalg rsa"
JAR=$TESTJAVA${FS}bin${FS}jar
JARSIGNER=$TESTJAVA${FS}bin${FS}jarsigner
--- ./jdk/test/sun/security/tools/jarsigner/passtype.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/tools/jarsigner/passtype.sh Mon Jan 05 11:57:27 2015 -0800
@@ -45,7 +45,7 @@
KS=pt.jks
JFILE=pt.jar
-KT="$TESTJAVA${FS}bin${FS}keytool -keystore $KS -validity 300"
+KT="$TESTJAVA${FS}bin${FS}keytool -keystore $KS -validity 300 -keyalg rsa"
JAR=$TESTJAVA${FS}bin${FS}jar
JARSIGNER=$TESTJAVA${FS}bin${FS}jarsigner
--- ./jdk/test/sun/security/tools/jarsigner/samename.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/tools/jarsigner/samename.sh Mon Jan 05 11:57:27 2015 -0800
@@ -47,7 +47,7 @@
KS=samename.jks
JFILE=em.jar
-KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS"
+KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS -keyalg rsa"
JAR=$TESTJAVA${FS}bin${FS}jar
JARSIGNER=$TESTJAVA${FS}bin${FS}jarsigner
--- ./jdk/test/sun/security/tools/jarsigner/ts.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/tools/jarsigner/ts.sh Mon Jan 05 11:57:27 2015 -0800
@@ -53,7 +53,7 @@
JAR="${TESTJAVA}${FS}bin${FS}jar"
JAVA="${TESTJAVA}${FS}bin${FS}java"
JAVAC="${TESTJAVA}${FS}bin${FS}javac"
-KT="${TESTJAVA}${FS}bin${FS}keytool -keystore tsks -storepass changeit -keypass changeit -validity 200"
+KT="${TESTJAVA}${FS}bin${FS}keytool -keystore tsks -storepass changeit -keypass changeit -keyalg rsa -validity 200"
rm tsks
echo Nothing > A
--- ./jdk/test/sun/security/tools/keytool/CloseFile.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/tools/keytool/CloseFile.java Mon Jan 05 11:57:27 2015 -0800
@@ -58,7 +58,7 @@
}
static void run(String s) throws Exception {
- KeyTool.main((s+" -debug").split(" "));
+ KeyTool.main((s+" -debug -keyalg rsa").split(" "));
}
static void remove(String filename, boolean check) {
new File(filename).delete();
--- ./jdk/test/sun/security/tools/keytool/ListKeychainStore.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/tools/keytool/ListKeychainStore.sh Mon Jan 05 11:57:27 2015 -0800
@@ -71,6 +71,7 @@
-storetype PKCS12 \
-keystore $TEMPORARY_P12 \
-storepass $PWD \
+ -keyalg rsa \
-dname "CN=$i,OU=$i,O=$i,ST=$i,C=US" \
-alias 7133495-$i
--- ./jdk/test/sun/security/tools/keytool/StartDateTest.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/tools/keytool/StartDateTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -48,7 +48,7 @@
new File("jks").delete();
run("-keystore jks -storetype jks -storepass changeit -keypass changeit -alias me " +
- "-genkeypair -dname CN=Haha -startdate +1y");
+ "-keyalg rsa -genkeypair -dname CN=Haha -startdate +1y");
cal.setTime(getIssueDate());
System.out.println(cal);
if (cal.get(Calendar.YEAR) != year + 1) {
--- ./jdk/test/sun/security/tools/keytool/emptysubject.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/tools/keytool/emptysubject.sh Mon Jan 05 11:57:27 2015 -0800
@@ -45,7 +45,7 @@
esac
KS=emptysubject.jks
-KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS"
+KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS -keyalg rsa"
rm $KS
--- ./jdk/test/sun/security/tools/keytool/importreadall.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/tools/keytool/importreadall.sh Mon Jan 05 11:57:27 2015 -0800
@@ -49,7 +49,7 @@
;;
esac
-KEYTOOL="${TESTJAVA}${FS}bin${FS}keytool -keystore importreadall.jks -storepass changeit -keypass changeit"
+KEYTOOL="${TESTJAVA}${FS}bin${FS}keytool -keystore importreadall.jks -storepass changeit -keypass changeit -keyalg rsa"
# In case the test is run twice in the same directory
--- ./jdk/test/sun/security/tools/keytool/readjar.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/tools/keytool/readjar.sh Mon Jan 05 11:57:27 2015 -0800
@@ -45,7 +45,7 @@
KS=readjar.jks
rm $KS
$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS \
- -alias x -dname CN=X -genkeypair
+ -keyalg rsa -alias x -dname CN=X -genkeypair
$TESTJAVA${FS}bin${FS}jar cvf readjar.jar $KS
$TESTJAVA${FS}bin${FS}jarsigner -storepass changeit -keystore $KS readjar.jar x
--- ./jdk/test/sun/security/tools/keytool/selfissued.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/tools/keytool/selfissued.sh Mon Jan 05 11:57:27 2015 -0800
@@ -45,7 +45,7 @@
esac
KS=selfsigned.jks
-KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS"
+KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS -keyalg rsa"
rm $KS
--- ./jdk/test/sun/security/tools/keytool/trystore.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/tools/keytool/trystore.sh Mon Jan 05 11:57:27 2015 -0800
@@ -43,7 +43,7 @@
rm trystore.jks 2> /dev/null
-KEYTOOL="${TESTJAVA}${FS}bin${FS}keytool -storetype jks -keystore trystore.jks"
+KEYTOOL="${TESTJAVA}${FS}bin${FS}keytool -storetype jks -keystore trystore.jks -keyalg rsa"
$KEYTOOL -genkeypair -alias a -dname CN=A -storepass changeit -keypass changeit
$KEYTOOL -genkeypair -alias b -dname CN=B -storepass changeit -keypass changeit
--- ./jdk/test/sun/security/validator/samedn.sh Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/security/validator/samedn.sh Mon Jan 05 11:57:27 2015 -0800
@@ -47,7 +47,7 @@
esac
KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit \
- -keypass changeit -keystore samedn.jks"
+ -keypass changeit -keystore samedn.jks -keyalg rsa"
JAVAC=$TESTJAVA${FS}bin${FS}javac
JAVA=$TESTJAVA${FS}bin${FS}java
--- ./jdk/test/sun/text/resources/LocaleData Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/text/resources/LocaleData Mon Jan 05 11:57:27 2015 -0800
@@ -574,7 +574,6 @@
FormatData/es_PA/NumberElements/0=.
FormatData/es_PA/NumberElements/1=,
FormatData/es_PA/NumberElements/2=;
-CurrencyNames/es_PE/PEN=S/
FormatData/es_PE/NumberPatterns/0=#,##0.###;-#,##0.###
# FormatData/es_PE/NumberPatterns/1=S/#,##0.00;S/-#,##0.00 # Changed; see bug 4122840
FormatData/es_PE/NumberPatterns/2=#,##0%
@@ -7012,3 +7011,19 @@
FormatData/sl/DateTimePatterns/4=EEEE, dd. MMMM y
FormatData/sl/DateTimePatterns/5=dd. MMMM y
+# bug 7085757
+CurrencyNames//SSP=SSP
+CurrencyNames//ssp=South Sudanese Pound
+CurrencyNames//xsu=Sucre
+CurrencyNames//xua=ADB Unit of Account
+LocaleNames//SS=South Sudan
+LocaleNames/en/SS=South Sudan
+
+# bug 7028073
+CurrencyNames/es_PE/PEN=S/.
+
+# bug 7195759
+CurrencyNames//ZMW=ZMW
+
+# bug 8021121
+CurrencyNames/lv_LV/EUR=\u20AC
--- ./jdk/test/sun/text/resources/LocaleDataTest.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/text/resources/LocaleDataTest.java Mon Jan 05 11:57:27 2015 -0800
@@ -34,7 +34,7 @@
* 6509039 6609737 6610748 6645271 6507067 6873931 6450945 6645268 6646611
* 6645405 6650730 6910489 6573250 6870908 6585666 6716626 6914413 6916787
* 6919624 6998391 7019267 7020960 7025837 7020583 7036905 7066203 7189611
- * 7171028 8013836
+ * 7171028 8013836 7028073 7195759 7085757
* @summary Verify locale data
*
*/
--- ./jdk/test/sun/tools/jcmd/help_help.out Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/tools/jcmd/help_help.out Mon Jan 05 11:57:27 2015 -0800
@@ -1,7 +1,7 @@
help
For more information about a specific command use 'help <command>'. With no argument this will show a list of available commands. 'help all' will show help for all commands.
-Impact: Low:
+Impact: Low
Syntax : help [options] [<command name>]
--- ./jdk/test/sun/util/resources/TimeZone/Bug6317929.java Mon Sep 08 12:16:34 2014 -0700
+++ ./jdk/test/sun/util/resources/TimeZone/Bug6317929.java Mon Jan 05 11:57:27 2015 -0800
@@ -122,20 +122,20 @@
TimeZone Currie = TimeZone.getTimeZone("Australia/Currie");
tzLocale = locales2Test[0];
if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals
- ("Eastern Standard Time (New South Wales)"))
+ ("Australian Eastern Standard Time (New South Wales)"))
throw new RuntimeException("\n" + tzLocale + ": LONG, " +
"non-daylight saving name for " +
"Australia/Currie should be " +
- "\"Eastern Standard Time " +
+ "\"Australian Eastern Standard Time " +
"(New South Wales)\"");
tzLocale = locales2Test[1];
if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals
- ("Eastern Normalzeit (Neus\u00fcdwales)"))
+ ("\u00D6stliche Normalzeit (New South Wales)"))
throw new RuntimeException("\n" + tzLocale + ": LONG, " +
"non-daylight saving name for " +
"Australia/Currie should be " +
- "\"Eastern Normalzeit " +
- "(Neus\u00fcdwales)\"");
+ "\"\u00D6stliche Normalzeit " +
+ "(New South Wales)\"");
tzLocale = locales2Test[2];
if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals
("Hora est\u00e1ndar Oriental (Nueva Gales del Sur)"))
--- ./langtools/.hgtags Mon Sep 08 12:17:52 2014 -0700
+++ ./langtools/.hgtags Mon Jan 05 12:00:55 2015 -0800
@@ -472,11 +472,19 @@
0f809f893588548a3b5c8441e28c9e0a62bc13ef jdk7u65-b18
eae289997f58ef6396dc323c3d5b93a56fb43573 jdk7u65-b19
afc940d62b49059f565f87c83343fa3d28df883b jdk7u65-b32
+772aad4e9681828b8ee193b9ed971cbfe6c7f347 jdk7u80-b00
+6c307a0b7a94e002d8a2532ffd8146d6c53f42d3 jdk7u80-b01
+5bd6f3adf690dc2de8881b6f9f48336db4af7865 jdk7u80-b02
114c4fc53777e4067a26f6510fe72fa770a9253c jdk7u65-b20
8a09cca8f12027ba59df4bb18d49e855c4db4811 jdk7u67-b01
eae289997f58ef6396dc323c3d5b93a56fb43573 jdk7u65-b40
5e4cc118e2d1f7a8eefca5dd7146d46a1b0ca911 jdk7u65-b31
59575d1928f98d1e26ea548ff4d5e2415dfe9b57 jdk7u65-b33
+8a09cca8f12027ba59df4bb18d49e855c4db4811 jdk7u67-b01
+e3b604d29f9177ac0c1344cdb7af8f5ccdc1db42 jdk7u67-b31
+e6bf55d457016764b4dd785b61ae79a125ba869b jdk7u67-b32
+624c54795faaf1a92bc1eb8c369dc18c1704c812 jdk7u67-b33
+18077957a8b802d9ce8724856e8b5f3fcde38b9e jdk7u67-b34
684f0285b699d304d1efff487b550ff2e1679e98 jdk7u66-b00
a927daae851fa81d0470d2b67f52e8156e4d423c jdk7u66-b01
6f229fda19bdabf7a3d1caad9d809dd713cce65d jdk7u66-b09
@@ -502,3 +510,51 @@
df957022bc94fc84c3d9e6f1f23af29b6afeb63d jdk7u71-b11
a8fd0637a601ee2747e785bd5e9e2a0262acf280 jdk7u71-b12
1cefc4b498a60ebc86b76eb2e9e861dbb072bd85 jdk7u71-b13
+6fe93bd5d4ac9d65a3f97cc16286ed2278150d7c jdk7u71-b14
+5b207c2ea9d20c5de58a7a7e618cc9b86ac7fe76 jdk7u72-b01
+1f1c94334f194aa980b7787fd5f2286405991e23 jdk7u72-b02
+6e5faa9ed5f317369eacfedbf57fc0745c1e940b jdk7u72-b03
+960f87b4d55681f19880385f9d11e227ea36f2df jdk7u72-b04
+adf88de8b627ede9e8819d94b00ad9ec7eed3077 jdk7u72-b05
+7efda07275d14dbd0fd96d304b7d682579cb6410 jdk7u72-b06
+bfaa78bab4784c6bb494393dad0c330616cb7256 jdk7u72-b07
+073486551f0c07f44c93e8dcdb31785a3f4526eb jdk7u72-b08
+0e25c3ae773a27dba34ec05ea28dbcd44ea6f933 jdk7u72-b09
+b63b6992ddd27688e276100be436bcf52e0525bc jdk7u72-b10
+65c68241236ab792fe72119a0b4c29effd048904 jdk7u72-b11
+cc58d9704b4017efe9ebe4391d73d82c0caf6d1c jdk7u72-b12
+cade57461d3b90a59ec62c06d77068b1b73f05b2 jdk7u72-b13
+6106b56a874e19e603660a09d506fe8afcde9e14 jdk7u72-b14
+7a09f7596c8bb17d3b25b4506dd76425f6efb15e jdk7u72-b30
+de0088aaf97fa861be8c17e97b57139287068c86 jdk7u72-b31
+0138c5f55af0c700882deeac4411fbd9118b4d6e jdk7u75-b00
+7ecfdbf693cfc14d648ebdf2cc87716068569e8d jdk7u75-b01
+688a304d3215af8104336ecce50b7f4edfb88d36 jdk7u75-b02
+105ad2d2417515b2b595c151e2a5d8ae0fe729eb jdk7u75-b03
+bdbe862f8846558c83f8bc15518446ab0495a173 jdk7u75-b04
+1895dc97d832950fe13a16428b797c952c9e4f4a jdk7u75-b05
+5fcea7a0e4f1e3fa52bd6010e685098731966933 jdk7u75-b06
+2e1c7e887c37dd702b2d09a00dacbafd79604e8c jdk7u75-b07
+fe8e75540f0990c6ad9d060c2343ef896cb5bc19 jdk7u75-b08
+512d77cd143798615266314c72c00ee32500661c jdk7u75-b09
+d77d44ecfb980610de2c90446fab13910ed2c8d7 jdk7u75-b10
+b5554ad39fa33c17033931a4ef5564a9b9d88f05 jdk7u75-b11
+6f369f5322618b48225eebcde52ab9dfa552e286 jdk7u75-b12
+7eb2663b7feb537ca765747e7bd0128245812c64 jdk7u75-b13
+059a87205fda11b19d25ace75698a854aa8edbf3 jdk7u75-b30
+591a7e4cabb5c5efc3ec65128181b38b1fa44a96 jdk7u75-b31
+e77dbc24fcdb5c55f414459798e4c65ed75bf570 jdk7u76-b00
+17aaafb2d1ecb6e2dac5e05cb3198703737e623a jdk7u76-b01
+da47e39ce6680458be011936b89f0946b9587042 jdk7u76-b02
+19a2140056ce1bfa3b6b332d168ad1208bfed1ae jdk7u76-b03
+76969bec514e11903a321f556f38c3be4c2320cf jdk7u76-b04
+ae19a85e5b3864b49b123f54b72de93d13722439 jdk7u76-b05
+b981c087098c8c18f5d2632c02a680ef036217c4 jdk7u76-b06
+b09339e2ca2ac75e5ca29e980eac2e7866e463aa jdk7u76-b07
+23a0bb20d74919861201d0d73cd612cabfd8f1f2 jdk7u76-b08
+853bb5d480cab85c9f9f67ff86f8cb95c31e4885 jdk7u76-b09
+11ca0f4b0c56817f6ad302022e6414aa52582f16 jdk7u76-b10
+63c1f23bddcfc45835f224376525ec621ac73a96 jdk7u76-b11
+f0a6f4f62959a43e21d377436e3e60f6431ee5b4 jdk7u76-b12
+d9e79541170f453dda964319f268fdad80dce9d7 jdk7u76-b13
+24f0420bb212b05d572689bae8ec2d232b9ac5a0 jdk7u76-b30
--- ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java Mon Sep 08 12:17:52 2014 -0700
+++ ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java Mon Jan 05 12:00:55 2015 -0800
@@ -426,7 +426,7 @@
head.addContent(headComment);
}
if (configuration.charset.length() > 0) {
- Content meta = HtmlTree.META("Content-Type", "text/html",
+ Content meta = HtmlTree.META("Content-Type", CONTENT_TYPE,
configuration.charset);
head.addContent(meta);
}
--- ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlAttr.java Mon Sep 08 12:17:52 2014 -0700
+++ ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlAttr.java Mon Jan 05 12:00:55 2015 -0800
@@ -35,7 +35,6 @@
BORDER,
CELLPADDING,
CELLSPACING,
- CHARSET,
CLASS,
CLEAR,
COLS,
--- ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java Mon Sep 08 12:17:52 2014 -0700
+++ ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java Mon Jan 05 12:00:55 2015 -0800
@@ -44,6 +44,8 @@
*/
public abstract class HtmlDocWriter extends HtmlWriter {
+ public static final String CONTENT_TYPE = "text/html";
+
/**
* Constructor. Initializes the destination file name through the super
* class HtmlWriter.
@@ -330,7 +332,7 @@
head.addContent(headComment);
}
if (configuration.charset.length() > 0) {
- Content meta = HtmlTree.META("Content-Type", "text/html",
+ Content meta = HtmlTree.META("Content-Type", CONTENT_TYPE,
configuration.charset);
head.addContent(meta);
}
--- ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java Mon Sep 08 12:17:52 2014 -0700
+++ ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java Mon Jan 05 12:00:55 2015 -0800
@@ -471,9 +471,9 @@
*/
public static HtmlTree META(String httpEquiv, String content, String charSet) {
HtmlTree htmltree = new HtmlTree(HtmlTag.META);
+ String contentCharset = content + "; charset=" + charSet;
htmltree.addAttr(HtmlAttr.HTTP_EQUIV, nullCheck(httpEquiv));
- htmltree.addAttr(HtmlAttr.CONTENT, nullCheck(content));
- htmltree.addAttr(HtmlAttr.CHARSET, nullCheck(charSet));
+ htmltree.addAttr(HtmlAttr.CONTENT, contentCharset);
return htmltree;
}
--- ./langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java Mon Sep 08 12:17:52 2014 -0700
+++ ./langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java Mon Jan 05 12:00:55 2015 -0800
@@ -1067,7 +1067,7 @@
boolean testFirst) {
Env<GenContext> loopEnv = env.dup(loop, new GenContext());
int startpc = code.entryPoint();
- if (testFirst) {
+ if (testFirst) { //while or for loop
CondItem c;
if (cond != null) {
code.statBegin(cond.pos);
@@ -1097,6 +1097,9 @@
code.resolve(c.falseJumps);
}
code.resolve(loopEnv.info.exit);
+ if (loopEnv.info.exit != null) {
+ loopEnv.info.exit.state.defined.excludeFrom(code.nextreg);
+ }
}
public void visitForeachLoop(JCEnhancedForLoop tree) {
--- ./langtools/src/share/classes/com/sun/tools/javac/resources/javac_ja.properties Mon Sep 08 12:17:52 2014 -0700
+++ ./langtools/src/share/classes/com/sun/tools/javac/resources/javac_ja.properties Mon Jan 05 12:00:55 2015 -0800
@@ -37,7 +37,7 @@
javac.opt.Xbootclasspath.p=\u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D1\u30B9\u306B\u4ED8\u52A0\u3059\u308B
javac.opt.Xbootclasspath.a=\u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D1\u30B9\u306B\u8FFD\u52A0\u3059\u308B
javac.opt.endorseddirs=\u63A8\u5968\u898F\u683C\u30D1\u30B9\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B
-javac.opt.extdirs=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E08\u307F\u62E1\u5F35\u6A5F\u80FD\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B
+javac.opt.extdirs=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E08\u62E1\u5F35\u6A5F\u80FD\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B
javac.opt.processorpath=\u6CE8\u91C8\u30D7\u30ED\u30BB\u30C3\u30B5\u3092\u691C\u7D22\u3059\u308B\u4F4D\u7F6E\u3092\u6307\u5B9A\u3059\u308B
javac.opt.processor=\u5B9F\u884C\u3059\u308B\u6CE8\u91C8\u30D7\u30ED\u30BB\u30C3\u30B5\u306E\u540D\u524D\u3002\u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u691C\u51FA\u51E6\u7406\u3092\u30D0\u30A4\u30D1\u30B9
javac.opt.proc.none.only=\u6CE8\u91C8\u51E6\u7406\u3084\u30B3\u30F3\u30D1\u30A4\u30EB\u3092\u5B9F\u884C\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./langtools/test/com/sun/javadoc/testCharset/TestCharset.java Mon Jan 05 12:00:55 2015 -0800
@@ -0,0 +1,82 @@
+/*
+ * 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 7052170
+ * @summary Run a test on -charset to make sure the charset gets generated as a
+ * part of the meta tag.
+ * @author Bhavesh Patel
+ * @library ../lib/
+ * @build JavadocTester TestCharset
+ * @run main TestCharset
+ */
+
+public class TestCharset extends JavadocTester {
+
+ //Test information.
+ private static final String BUG_ID = "7052170";
+
+ //Javadoc arguments.
+ private static final String[] ARGS = new String[] {
+ "-d", BUG_ID, "-charset", "UTF-8", "-sourcepath", SRC_DIR, "pkg"
+ };
+
+ private static final String[][] TEST = {
+ {BUG_ID + FS + "index.html",
+ "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"},
+ {BUG_ID + FS + "pkg" + FS + "Foo.html",
+ "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"}
+ };
+
+ private static final String[][] NEGATED_TEST = {
+ {BUG_ID + FS + "index.html",
+ "<meta http-equiv=\"Content-Type\" content=\"text/html\" charset=\"UTF-8\">"},
+ {BUG_ID + FS + "pkg" + FS + "Foo.html",
+ "<meta http-equiv=\"Content-Type\" content=\"text/html\" charset=\"UTF-8\">"}
+ };
+
+ /**
+ * The entry point of the test.
+ * @param args the array of command line arguments.
+ */
+ public static void main(String[] args) {
+ TestCharset tester = new TestCharset();
+ run(tester, ARGS, TEST, NEGATED_TEST);
+ tester.printSummary();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getBugId() {
+ return BUG_ID;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getBugName() {
+ return getClass().getName();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./langtools/test/com/sun/javadoc/testCharset/pkg/Foo.java Mon Jan 05 12:00:55 2015 -0800
@@ -0,0 +1,26 @@
+/*
+ * 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.
+ */
+
+package pkg;
+
+public class Foo {}
--- ./langtools/test/tools/javac/ClassPathTest/ClassPathTest.sh Mon Sep 08 12:17:52 2014 -0700
+++ ./langtools/test/tools/javac/ClassPathTest/ClassPathTest.sh Mon Jan 05 12:00:55 2015 -0800
@@ -56,11 +56,17 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin | CYGWIN* )
+ SunOS | Linux | Darwin )
FS="/"
+ CHMOD="${FS}bin${FS}chmod"
;;
Windows* )
FS="\\"
+ CHMOD="chmod"
+ ;;
+ CYGWIN* )
+ FS="/"
+ CHMOD="chmod"
;;
* )
echo "Unrecognized system!"
@@ -73,6 +79,7 @@
cleanup() {
rm -f *.class pkg${FS}*.class foo${FS}pkg${FS}*.class bar${FS}pkg${FS}*.class
cp -rf $TESTSRC${FS}* .
+ ${CHMOD} -R u+w *
}
fail() {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./langtools/test/tools/javac/T8050386/WrongStackframeGenerationTest1.java Mon Jan 05 12:00:55 2015 -0800
@@ -0,0 +1,47 @@
+/*
+ * 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 8050386
+ * @summary Verification error due to a bad stackmap frame generated by javac
+ */
+
+public class WrongStackframeGenerationTest1 {
+ public static void main(String[] args) {}
+
+ static void foo(){
+ while (true) {
+ int i = 0;
+ break;
+ }
+ switch (1) {
+ case 1:
+ int j = 0;
+ case 2:
+ bar();
+ }
+ }
+
+ static void bar() {}
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ ./langtools/test/tools/javac/T8050386/WrongStackframeGenerationTest2.java Mon Jan 05 12:00:55 2015 -0800
@@ -0,0 +1,50 @@
+/*
+ * 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 8050386
+ * @summary Verification error due to a bad stackmap frame generated by javac
+ */
+
+public class WrongStackframeGenerationTest2 {
+ public static void main(String[] args) {}
+
+ static void foo() {
+ int len;
+ for (;;) {
+ try {
+ len = 1;
+ break;
+ } catch (Exception e) {
+ }
+ }
+
+ try {
+ if (len == -1) {
+ len = 0;
+ }
+ } finally {
+ }
+ }
+}
--- ./langtools/test/tools/javac/innerClassFile/Driver.sh Mon Sep 08 12:17:52 2014 -0700
+++ ./langtools/test/tools/javac/innerClassFile/Driver.sh Mon Jan 05 12:00:55 2015 -0800
@@ -71,3 +71,4 @@
"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} -d . -classpath . -sourcepath src src/x/B.java src/x/C.java src/y/Main.java
rm y/R3.class
"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} -d . -classpath . -sourcepath src src/y/Main.java
+rm -fr src