summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeigh <leight@gmail.com>2014-10-07 14:25:44 +0100
committerLeigh <leight@gmail.com>2014-10-07 14:25:44 +0100
commitaa679295e4a9f96e565349c198a9421207bb08b9 (patch)
tree225df23f4df946c090313496d400a84f1a79cb71
parentadf8f0f284fa3e88d12498f8ad1f2ba71434b565 (diff)
parent79ca53b62b512f478bf482548def4a812eed25b3 (diff)
downloadphp-git-aa679295e4a9f96e565349c198a9421207bb08b9.tar.gz
Merge branch 'PHP-5.6' of https://github.com/php/php-src into gmp-random
-rw-r--r--.gitignore1
-rw-r--r--EXTENSIONS6
-rw-r--r--NEWS22
-rw-r--r--Zend/tests/bug68118.phpt21
-rw-r--r--Zend/zend_object_handlers.c9
-rw-r--r--ext/date/lib/timezonedb.h1218
-rw-r--r--ext/date/php_date.c8
-rw-r--r--ext/date/tests/68062.phpt13
-rw-r--r--ext/date/tests/DateTimeZone_getOffset_variation1.phpt56
-rw-r--r--ext/date/tests/timezone_offset_get_error.phpt6
-rw-r--r--ext/date/tests/timezone_offset_get_variation2.phpt56
-rwxr-xr-xext/ext_skel4
-rw-r--r--ext/ldap/ldap.c23
-rw-r--r--ext/openssl/config0.m46
-rw-r--r--ext/openssl/tests/bug65729.pem42
-rw-r--r--ext/openssl/xp_ssl.c9
-rw-r--r--ext/reflection/php_reflection.c27
-rw-r--r--ext/standard/tests/streams/proc_open_bug51800.phpt95
-rw-r--r--ext/standard/tests/streams/proc_open_bug51800_right.phpt78
-rw-r--r--ext/standard/tests/streams/proc_open_bug51800_right2.phpt84
-rw-r--r--ext/standard/tests/streams/proc_open_bug60120.phpt71
-rw-r--r--ext/standard/tests/streams/proc_open_bug64438.phpt70
-rw-r--r--ext/standard/tests/strings/setlocale_variation2.phpt7
-rw-r--r--main/streams/plain_wrapper.c28
-rw-r--r--sapi/cli/tests/016.phpt2
-rw-r--r--sapi/fpm/fpm/fpm_sockets.c85
-rw-r--r--sapi/fpm/fpm/fpm_sockets.h6
-rw-r--r--sapi/fpm/php-fpm.conf.in2
-rw-r--r--sapi/fpm/tests/003.phpt53
-rw-r--r--sapi/litespeed/lsapi_main.c3
30 files changed, 1347 insertions, 764 deletions
diff --git a/.gitignore b/.gitignore
index b9dd252267..7f4f814050 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,6 +19,7 @@
*.tgz
*.tar.gz
*.tar.bz2
+*.tar.xz
.FBCIndex
.FBCLockFolder
.deps
diff --git a/EXTENSIONS b/EXTENSIONS
index 61a1688b3c..af9007732b 100644
--- a/EXTENSIONS
+++ b/EXTENSIONS
@@ -385,6 +385,12 @@ MAINTENANCE: Maintained
STATUS: Working
SINCE: 4.0.4
-------------------------------------------------------------------------------
+EXTENSION: hash
+PRIMARY MAINTAINER: Sara Golemon <pollita@php.net>, Mike Wallner <mike@php.net>, Anatol Belski <ab@php.net>
+MAINTENANCE: Maintained
+STATUS: Working
+SINCE: 5.1.2
+-------------------------------------------------------------------------------
EXTENSION: iconv
PRIMARY MAINTAINER: Moriyoshi Koizumi <moriyoshi@php.net>
MAINTENANCE: Maintained
diff --git a/NEWS b/NEWS
index a4b0da49a0..4ae2e28e8b 100644
--- a/NEWS
+++ b/NEWS
@@ -7,13 +7,24 @@ PHP NEWS
as 6.2 (instead of 6.3)). (Christian Wenz)
. Fixed bug #67633 (A foreach on an array returned from a function not doing
copy-on-write). (Nikita)
+ . Fixed bug #51800 (proc_open on Windows hangs forever). (Anatol)
+ . Fixed bug #68118 ($a->foo .= 'test'; can leave $a->foo undefined). (Nikita)
- FPM:
. Fixed bug #65641 (PHP-FPM incorrectly defines the SCRIPT_NAME variable
when using Apache, mod_proxy-fcgi and ProxyPass). (Remi)
+ . Implemented FR #55508 (listen and listen.allowed_clients should take IPv6
+ addresses). (Robin Gloster)
+- Reflection:
+ . Fixed bug #68103 (Duplicate entry in Reflection for class alias). (Remi)
+
+- OpenSSL:
+ . Fixed bug #68074 (Allow to use system cipher list instead of hardcoded
+ value). (Remi)
-25 Sep 2014, PHP 5.6.1
+
+02 Oct 2014, PHP 5.6.1
- Core:
. Implemented FR #38409 (parse_ini_file() looses the type of booleans). (Tjerk)
@@ -24,6 +35,11 @@ PHP NEWS
(Nikita)
. Fixed bug #67985 (Incorrect last used array index copied to new array after
unset). (Tjerk)
+ . Fixed bug #68088 (New Posthandler Potential Illegal efree() vulnerability).
+ (Mike) (CVE-2014-3622)
+
+- DOM:
+ . Made DOMNode::textContent writeable. (Tjerk)
- Fileinfo:
. Fixed bug #67731 (finfo::file() returns invalid mime type
@@ -48,8 +64,8 @@ PHP NEWS
. Fixed bug #67850 (extension won't build if openssl compiled without SSLv3).
(Daniel Lowrey)
-- DOM:
- . Made DOMNode::textContent writeable. (Tjerk)
+- phpdbg:
+ . Fixed issue krakjoe/phpdbg#111 (compile error without ZEND_SIGNALS). (Bob)
- SOAP:
. Fixed bug #67955 (SoapClient prepends 0-byte to cookie names). (Philip Hofstetter)
diff --git a/Zend/tests/bug68118.phpt b/Zend/tests/bug68118.phpt
new file mode 100644
index 0000000000..c56e70a112
--- /dev/null
+++ b/Zend/tests/bug68118.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Bug #68118: $a->foo .= 'test'; can leave $a->foo undefined
+--FILE--
+<?php
+
+set_error_handler(function() {
+ $obj = new stdClass;
+ $obj->test = 'meow';
+ return true;
+});
+
+$a = new stdClass;
+$a->undefined .= 'test';
+var_dump($a);
+
+?>
+--EXPECT--
+object(stdClass)#2 (1) {
+ ["undefined"]=>
+ string(4) "test"
+}
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c
index c7adf38f3b..a5577d0b45 100644
--- a/Zend/zend_object_handlers.c
+++ b/Zend/zend_object_handlers.c
@@ -786,9 +786,6 @@ static zval **zend_std_get_property_ptr_ptr(zval *object, zval *member, int type
/* we don't have access controls - will just add it */
new_zval = &EG(uninitialized_zval);
- if(UNEXPECTED(type == BP_VAR_RW || type == BP_VAR_R)) {
- zend_error(E_NOTICE, "Undefined property: %s::$%s", zobj->ce->name, Z_STRVAL_P(member));
- }
Z_ADDREF_P(new_zval);
if (EXPECTED((property_info->flags & ZEND_ACC_STATIC) == 0) &&
property_info->offset >= 0) {
@@ -808,6 +805,12 @@ static zval **zend_std_get_property_ptr_ptr(zval *object, zval *member, int type
}
zend_hash_quick_update(zobj->properties, property_info->name, property_info->name_length+1, property_info->h, &new_zval, sizeof(zval *), (void **) &retval);
}
+
+ /* Notice is thrown after creation of the property, to avoid EG(std_property_info)
+ * being overwritten in an error handler. */
+ if (UNEXPECTED(type == BP_VAR_RW || type == BP_VAR_R)) {
+ zend_error(E_NOTICE, "Undefined property: %s::$%s", zobj->ce->name, Z_STRVAL_P(member));
+ }
} else {
/* we do have getter - fail and let it try again with usual get/set */
retval = NULL;
diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h
index a23104f68c..98e7b2292c 100644
--- a/ext/date/lib/timezonedb.h
+++ b/ext/date/lib/timezonedb.h
@@ -12,578 +12,578 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[582] = {
{ "Africa/Blantyre" , 0x00052F },
{ "Africa/Brazzaville" , 0x000584 },
{ "Africa/Bujumbura" , 0x0005D9 },
- { "Africa/Cairo" , 0x00061D },
- { "Africa/Casablanca" , 0x000A04 },
- { "Africa/Ceuta" , 0x000C66 },
- { "Africa/Conakry" , 0x000F6D },
- { "Africa/Dakar" , 0x000FC2 },
- { "Africa/Dar_es_Salaam" , 0x001017 },
- { "Africa/Djibouti" , 0x001084 },
- { "Africa/Douala" , 0x0010D9 },
- { "Africa/El_Aaiun" , 0x00112E },
- { "Africa/Freetown" , 0x001359 },
- { "Africa/Gaborone" , 0x0013AE },
- { "Africa/Harare" , 0x00141B },
- { "Africa/Johannesburg" , 0x001470 },
- { "Africa/Juba" , 0x0014DE },
- { "Africa/Kampala" , 0x0015F1 },
- { "Africa/Khartoum" , 0x001670 },
- { "Africa/Kigali" , 0x001783 },
- { "Africa/Kinshasa" , 0x0017D8 },
- { "Africa/Lagos" , 0x001844 },
- { "Africa/Libreville" , 0x001899 },
- { "Africa/Lome" , 0x0018EE },
- { "Africa/Luanda" , 0x001943 },
- { "Africa/Lubumbashi" , 0x001998 },
- { "Africa/Lusaka" , 0x0019F3 },
- { "Africa/Malabo" , 0x001A48 },
- { "Africa/Maputo" , 0x001A9D },
- { "Africa/Maseru" , 0x001AF2 },
- { "Africa/Mbabane" , 0x001B5A },
- { "Africa/Mogadishu" , 0x001BB0 },
- { "Africa/Monrovia" , 0x001C0B },
- { "Africa/Nairobi" , 0x001C71 },
- { "Africa/Ndjamena" , 0x001CF0 },
- { "Africa/Niamey" , 0x001D5C },
- { "Africa/Nouakchott" , 0x001DB1 },
- { "Africa/Ouagadougou" , 0x001E06 },
- { "Africa/Porto-Novo" , 0x001E5B },
- { "Africa/Sao_Tome" , 0x001EB0 },
- { "Africa/Timbuktu" , 0x001F05 },
- { "Africa/Tripoli" , 0x001F5A },
- { "Africa/Tunis" , 0x002063 },
- { "Africa/Windhoek" , 0x002175 },
- { "America/Adak" , 0x0023BC },
- { "America/Anchorage" , 0x002732 },
- { "America/Anguilla" , 0x002AA6 },
- { "America/Antigua" , 0x002AFB },
- { "America/Araguaina" , 0x002B61 },
- { "America/Argentina/Buenos_Aires" , 0x002CC6 },
- { "America/Argentina/Catamarca" , 0x002E74 },
- { "America/Argentina/ComodRivadavia" , 0x003035 },
- { "America/Argentina/Cordoba" , 0x0031DB },
- { "America/Argentina/Jujuy" , 0x0033B0 },
- { "America/Argentina/La_Rioja" , 0x003564 },
- { "America/Argentina/Mendoza" , 0x00371C },
- { "America/Argentina/Rio_Gallegos" , 0x0038DC },
- { "America/Argentina/Salta" , 0x003A91 },
- { "America/Argentina/San_Juan" , 0x003C3D },
- { "America/Argentina/San_Luis" , 0x003DF5 },
- { "America/Argentina/Tucuman" , 0x003FBB },
- { "America/Argentina/Ushuaia" , 0x004177 },
- { "America/Aruba" , 0x004332 },
- { "America/Asuncion" , 0x004398 },
- { "America/Atikokan" , 0x00467D },
- { "America/Atka" , 0x004753 },
- { "America/Bahia" , 0x004AB9 },
- { "America/Bahia_Banderas" , 0x004C4C },
- { "America/Barbados" , 0x004EC5 },
- { "America/Belem" , 0x004F5F },
- { "America/Belize" , 0x00505A },
- { "America/Blanc-Sablon" , 0x0051D6 },
- { "America/Boa_Vista" , 0x00528A },
- { "America/Bogota" , 0x005393 },
- { "America/Boise" , 0x0053FF },
- { "America/Buenos_Aires" , 0x005796 },
- { "America/Cambridge_Bay" , 0x00592F },
- { "America/Campo_Grande" , 0x005C57 },
- { "America/Cancun" , 0x005F46 },
- { "America/Caracas" , 0x006188 },
- { "America/Catamarca" , 0x0061EF },
- { "America/Cayenne" , 0x006395 },
- { "America/Cayman" , 0x0063F7 },
- { "America/Chicago" , 0x00644C },
- { "America/Chihuahua" , 0x006963 },
- { "America/Coral_Harbour" , 0x006BCE },
- { "America/Cordoba" , 0x006C60 },
- { "America/Costa_Rica" , 0x006E06 },
- { "America/Creston" , 0x006E90 },
- { "America/Cuiaba" , 0x006F1C },
- { "America/Curacao" , 0x0071FA },
- { "America/Danmarkshavn" , 0x007260 },
- { "America/Dawson" , 0x0073A4 },
- { "America/Dawson_Creek" , 0x0076C1 },
- { "America/Denver" , 0x00789B },
- { "America/Detroit" , 0x007C21 },
- { "America/Dominica" , 0x007F80 },
- { "America/Edmonton" , 0x007FD5 },
- { "America/Eirunepe" , 0x00838D },
- { "America/El_Salvador" , 0x0084A5 },
- { "America/Ensenada" , 0x00851A },
- { "America/Fort_Wayne" , 0x0089C1 },
- { "America/Fortaleza" , 0x008883 },
- { "America/Glace_Bay" , 0x008C2B },
- { "America/Godthab" , 0x008FA2 },
- { "America/Goose_Bay" , 0x009266 },
- { "America/Grand_Turk" , 0x009723 },
- { "America/Grenada" , 0x0098F8 },
- { "America/Guadeloupe" , 0x00994D },
- { "America/Guatemala" , 0x0099A2 },
- { "America/Guayaquil" , 0x009A2B },
- { "America/Guyana" , 0x009A88 },
- { "America/Halifax" , 0x009B09 },
- { "America/Havana" , 0x00A01F },
- { "America/Hermosillo" , 0x00A392 },
- { "America/Indiana/Indianapolis" , 0x00A470 },
- { "America/Indiana/Knox" , 0x00A701 },
- { "America/Indiana/Marengo" , 0x00AA98 },
- { "America/Indiana/Petersburg" , 0x00AD3E },
- { "America/Indiana/Tell_City" , 0x00B28B },
- { "America/Indiana/Vevay" , 0x00B524 },
- { "America/Indiana/Vincennes" , 0x00B75F },
- { "America/Indiana/Winamac" , 0x00BA13 },
- { "America/Indianapolis" , 0x00B021 },
- { "America/Inuvik" , 0x00BCCC },
- { "America/Iqaluit" , 0x00BFC3 },
- { "America/Jamaica" , 0x00C2E5 },
- { "America/Jujuy" , 0x00C3AA },
- { "America/Juneau" , 0x00C554 },
- { "America/Kentucky/Louisville" , 0x00C8D2 },
- { "America/Kentucky/Monticello" , 0x00CCF0 },
- { "America/Knox_IN" , 0x00D075 },
- { "America/Kralendijk" , 0x00D3E6 },
- { "America/La_Paz" , 0x00D44C },
- { "America/Lima" , 0x00D4B3 },
- { "America/Los_Angeles" , 0x00D55B },
- { "America/Louisville" , 0x00D96C },
- { "America/Lower_Princes" , 0x00DD61 },
- { "America/Maceio" , 0x00DDC7 },
- { "America/Managua" , 0x00DF01 },
- { "America/Manaus" , 0x00DFB4 },
- { "America/Marigot" , 0x00E0B6 },
- { "America/Martinique" , 0x00E10B },
- { "America/Matamoros" , 0x00E177 },
- { "America/Mazatlan" , 0x00E3D0 },
- { "America/Mendoza" , 0x00E63D },
- { "America/Menominee" , 0x00E7F1 },
- { "America/Merida" , 0x00EB72 },
- { "America/Metlakatla" , 0x00EDAD },
- { "America/Mexico_City" , 0x00EEE8 },
- { "America/Miquelon" , 0x00F163 },
- { "America/Moncton" , 0x00F3D5 },
- { "America/Monterrey" , 0x00F86C },
- { "America/Montevideo" , 0x00FACF },
- { "America/Montreal" , 0x00FDE1 },
- { "America/Montserrat" , 0x0102D1 },
- { "America/Nassau" , 0x010326 },
- { "America/New_York" , 0x01066B },
- { "America/Nipigon" , 0x010B76 },
- { "America/Nome" , 0x010EC7 },
- { "America/Noronha" , 0x011245 },
- { "America/North_Dakota/Beulah" , 0x011375 },
- { "America/North_Dakota/Center" , 0x011709 },
- { "America/North_Dakota/New_Salem" , 0x011A9D },
- { "America/Ojinaga" , 0x011E46 },
- { "America/Panama" , 0x0120A7 },
- { "America/Pangnirtung" , 0x0120FC },
- { "America/Paramaribo" , 0x012432 },
- { "America/Phoenix" , 0x0124C4 },
- { "America/Port-au-Prince" , 0x012582 },
- { "America/Port_of_Spain" , 0x0128A6 },
- { "America/Porto_Acre" , 0x0127A2 },
- { "America/Porto_Velho" , 0x0128FB },
- { "America/Puerto_Rico" , 0x0129F1 },
- { "America/Rainy_River" , 0x012A5C },
- { "America/Rankin_Inlet" , 0x012D94 },
- { "America/Recife" , 0x01307A },
- { "America/Regina" , 0x0131A4 },
- { "America/Resolute" , 0x013362 },
- { "America/Rio_Branco" , 0x01364A },
- { "America/Rosario" , 0x013752 },
- { "America/Santa_Isabel" , 0x0138F8 },
- { "America/Santarem" , 0x013C9B },
- { "America/Santiago" , 0x013DA0 },
- { "America/Santo_Domingo" , 0x014149 },
- { "America/Sao_Paulo" , 0x01420F },
- { "America/Scoresbysund" , 0x01451E },
- { "America/Shiprock" , 0x01480C },
- { "America/Sitka" , 0x014B85 },
- { "America/St_Barthelemy" , 0x014F0D },
- { "America/St_Johns" , 0x014F62 },
- { "America/St_Kitts" , 0x0154B5 },
- { "America/St_Lucia" , 0x01550A },
- { "America/St_Thomas" , 0x01555F },
- { "America/St_Vincent" , 0x0155B4 },
- { "America/Swift_Current" , 0x015609 },
- { "America/Tegucigalpa" , 0x01572A },
- { "America/Thule" , 0x0157A9 },
- { "America/Thunder_Bay" , 0x0159F0 },
- { "America/Tijuana" , 0x015D39 },
- { "America/Toronto" , 0x0160D2 },
- { "America/Tortola" , 0x0165F2 },
- { "America/Vancouver" , 0x016647 },
- { "America/Virgin" , 0x016A84 },
- { "America/Whitehorse" , 0x016AD9 },
- { "America/Winnipeg" , 0x016DF6 },
- { "America/Yakutat" , 0x017236 },
- { "America/Yellowknife" , 0x0175A1 },
- { "Antarctica/Casey" , 0x0178B1 },
- { "Antarctica/Davis" , 0x01794F },
- { "Antarctica/DumontDUrville" , 0x0179F0 },
- { "Antarctica/Macquarie" , 0x017A81 },
- { "Antarctica/Mawson" , 0x017CCE },
- { "Antarctica/McMurdo" , 0x017D4A },
- { "Antarctica/Palmer" , 0x0180F5 },
- { "Antarctica/Rothera" , 0x018411 },
- { "Antarctica/South_Pole" , 0x018487 },
- { "Antarctica/Syowa" , 0x018805 },
- { "Antarctica/Troll" , 0x018873 },
- { "Antarctica/Vostok" , 0x018A45 },
- { "Arctic/Longyearbyen" , 0x018AB6 },
- { "Asia/Aden" , 0x018DE8 },
- { "Asia/Almaty" , 0x018E3D },
- { "Asia/Amman" , 0x018FBC },
- { "Asia/Anadyr" , 0x019272 },
- { "Asia/Aqtau" , 0x019474 },
- { "Asia/Aqtobe" , 0x019673 },
- { "Asia/Ashgabat" , 0x01982B },
- { "Asia/Ashkhabad" , 0x019948 },
- { "Asia/Baghdad" , 0x019A65 },
- { "Asia/Bahrain" , 0x019BDA },
- { "Asia/Baku" , 0x019C40 },
- { "Asia/Bangkok" , 0x019F28 },
- { "Asia/Beirut" , 0x019F7D },
- { "Asia/Bishkek" , 0x01A28A },
- { "Asia/Brunei" , 0x01A436 },
- { "Asia/Calcutta" , 0x01A498 },
- { "Asia/Chita" , 0x01A511 },
- { "Asia/Choibalsan" , 0x01A726 },
- { "Asia/Chongqing" , 0x01A89F },
- { "Asia/Chungking" , 0x01A93F },
- { "Asia/Colombo" , 0x01A9DF },
- { "Asia/Dacca" , 0x01AA7B },
- { "Asia/Damascus" , 0x01AB21 },
- { "Asia/Dhaka" , 0x01AE71 },
- { "Asia/Dili" , 0x01AF17 },
- { "Asia/Dubai" , 0x01AFA1 },
- { "Asia/Dushanbe" , 0x01AFF6 },
- { "Asia/Gaza" , 0x01B0F9 },
- { "Asia/Harbin" , 0x01B44C },
- { "Asia/Hebron" , 0x01B4EC },
- { "Asia/Ho_Chi_Minh" , 0x01B848 },
- { "Asia/Hong_Kong" , 0x01B8C0 },
- { "Asia/Hovd" , 0x01BA82 },
- { "Asia/Irkutsk" , 0x01BBFA },
- { "Asia/Istanbul" , 0x01BDE5 },
- { "Asia/Jakarta" , 0x01C1D2 },
- { "Asia/Jayapura" , 0x01C27C },
- { "Asia/Jerusalem" , 0x01C319 },
- { "Asia/Kabul" , 0x01C648 },
- { "Asia/Kamchatka" , 0x01C699 },
- { "Asia/Karachi" , 0x01C892 },
- { "Asia/Kashgar" , 0x01C947 },
- { "Asia/Kathmandu" , 0x01C99C },
- { "Asia/Katmandu" , 0x01CA02 },
- { "Asia/Khandyga" , 0x01CA68 },
- { "Asia/Kolkata" , 0x01CC92 },
- { "Asia/Krasnoyarsk" , 0x01CD0B },
- { "Asia/Kuala_Lumpur" , 0x01CEF8 },
- { "Asia/Kuching" , 0x01CFB5 },
- { "Asia/Kuwait" , 0x01D0A3 },
- { "Asia/Macao" , 0x01D0F8 },
- { "Asia/Macau" , 0x01D233 },
- { "Asia/Magadan" , 0x01D36E },
- { "Asia/Makassar" , 0x01D572 },
- { "Asia/Manila" , 0x01D637 },
- { "Asia/Muscat" , 0x01D6BC },
- { "Asia/Nicosia" , 0x01D711 },
- { "Asia/Novokuznetsk" , 0x01D9F9 },
- { "Asia/Novosibirsk" , 0x01DC19 },
- { "Asia/Omsk" , 0x01DE09 },
- { "Asia/Oral" , 0x01DFF5 },
- { "Asia/Phnom_Penh" , 0x01E1C5 },
- { "Asia/Pontianak" , 0x01E23D },
- { "Asia/Pyongyang" , 0x01E2FF },
- { "Asia/Qatar" , 0x01E38F },
- { "Asia/Qyzylorda" , 0x01E3F5 },
- { "Asia/Rangoon" , 0x01E5CB },
- { "Asia/Riyadh" , 0x01E643 },
- { "Asia/Saigon" , 0x01E698 },
- { "Asia/Sakhalin" , 0x01E710 },
- { "Asia/Samarkand" , 0x01E90D },
- { "Asia/Seoul" , 0x01EA43 },
- { "Asia/Shanghai" , 0x01EB0A },
- { "Asia/Singapore" , 0x01EBB6 },
- { "Asia/Srednekolymsk" , 0x01EC6D },
- { "Asia/Taipei" , 0x01EE6D },
- { "Asia/Tashkent" , 0x01EF9E },
- { "Asia/Tbilisi" , 0x01F0CF },
- { "Asia/Tehran" , 0x01F289 },
- { "Asia/Tel_Aviv" , 0x01F4F7 },
- { "Asia/Thimbu" , 0x01F826 },
- { "Asia/Thimphu" , 0x01F88C },
- { "Asia/Tokyo" , 0x01F8F2 },
- { "Asia/Ujung_Pandang" , 0x01F97C },
- { "Asia/Ulaanbaatar" , 0x01F9F9 },
- { "Asia/Ulan_Bator" , 0x01FB54 },
- { "Asia/Urumqi" , 0x01FCA1 },
- { "Asia/Ust-Nera" , 0x01FD03 },
- { "Asia/Vientiane" , 0x01FF15 },
- { "Asia/Vladivostok" , 0x01FF8D },
- { "Asia/Yakutsk" , 0x020177 },
- { "Asia/Yekaterinburg" , 0x020361 },
- { "Asia/Yerevan" , 0x020582 },
- { "Atlantic/Azores" , 0x020782 },
- { "Atlantic/Bermuda" , 0x020C85 },
- { "Atlantic/Canary" , 0x020F66 },
- { "Atlantic/Cape_Verde" , 0x02123C },
- { "Atlantic/Faeroe" , 0x0212B5 },
- { "Atlantic/Faroe" , 0x021559 },
- { "Atlantic/Jan_Mayen" , 0x0217FD },
- { "Atlantic/Madeira" , 0x021B2F },
- { "Atlantic/Reykjavik" , 0x022038 },
- { "Atlantic/South_Georgia" , 0x0221F1 },
- { "Atlantic/St_Helena" , 0x022403 },
- { "Atlantic/Stanley" , 0x022235 },
- { "Australia/ACT" , 0x022458 },
- { "Australia/Adelaide" , 0x02277B },
- { "Australia/Brisbane" , 0x022AAD },
- { "Australia/Broken_Hill" , 0x022B7A },
- { "Australia/Canberra" , 0x022EBE },
- { "Australia/Currie" , 0x0231E1 },
- { "Australia/Darwin" , 0x02351A },
- { "Australia/Eucla" , 0x0235A6 },
- { "Australia/Hobart" , 0x023682 },
- { "Australia/LHI" , 0x0239E6 },
- { "Australia/Lindeman" , 0x023C87 },
- { "Australia/Lord_Howe" , 0x023D6E },
- { "Australia/Melbourne" , 0x02401F },
- { "Australia/North" , 0x02434A },
- { "Australia/NSW" , 0x0243C4 },
- { "Australia/Perth" , 0x0246E7 },
- { "Australia/Queensland" , 0x0247C5 },
- { "Australia/South" , 0x024877 },
- { "Australia/Sydney" , 0x024B9A },
- { "Australia/Tasmania" , 0x024EDD },
- { "Australia/Victoria" , 0x025228 },
- { "Australia/West" , 0x02554B },
- { "Australia/Yancowinna" , 0x025607 },
- { "Brazil/Acre" , 0x02592F },
- { "Brazil/DeNoronha" , 0x025A33 },
- { "Brazil/East" , 0x025B53 },
- { "Brazil/West" , 0x025E30 },
- { "Canada/Atlantic" , 0x025F28 },
- { "Canada/Central" , 0x026410 },
- { "Canada/East-Saskatchewan" , 0x026D1A },
- { "Canada/Eastern" , 0x02682A },
- { "Canada/Mountain" , 0x026EA3 },
- { "Canada/Newfoundland" , 0x027219 },
- { "Canada/Pacific" , 0x027744 },
- { "Canada/Saskatchewan" , 0x027B5D },
- { "Canada/Yukon" , 0x027CE6 },
- { "CET" , 0x027FE9 },
- { "Chile/Continental" , 0x0282F2 },
- { "Chile/EasterIsland" , 0x02868D },
- { "CST6CDT" , 0x0289CF },
- { "Cuba" , 0x028D20 },
- { "EET" , 0x029093 },
- { "Egypt" , 0x029346 },
- { "Eire" , 0x02972D },
- { "EST" , 0x029C3E },
- { "EST5EDT" , 0x029C82 },
- { "Etc/GMT" , 0x029FD3 },
- { "Etc/GMT+0" , 0x02A09F },
- { "Etc/GMT+1" , 0x02A129 },
- { "Etc/GMT+10" , 0x02A1B6 },
- { "Etc/GMT+11" , 0x02A244 },
- { "Etc/GMT+12" , 0x02A2D2 },
- { "Etc/GMT+2" , 0x02A3ED },
- { "Etc/GMT+3" , 0x02A479 },
- { "Etc/GMT+4" , 0x02A505 },
- { "Etc/GMT+5" , 0x02A591 },
- { "Etc/GMT+6" , 0x02A61D },
- { "Etc/GMT+7" , 0x02A6A9 },
- { "Etc/GMT+8" , 0x02A735 },
- { "Etc/GMT+9" , 0x02A7C1 },
- { "Etc/GMT-0" , 0x02A05B },
- { "Etc/GMT-1" , 0x02A0E3 },
- { "Etc/GMT-10" , 0x02A16F },
- { "Etc/GMT-11" , 0x02A1FD },
- { "Etc/GMT-12" , 0x02A28B },
- { "Etc/GMT-13" , 0x02A319 },
- { "Etc/GMT-14" , 0x02A360 },
- { "Etc/GMT-2" , 0x02A3A7 },
- { "Etc/GMT-3" , 0x02A433 },
- { "Etc/GMT-4" , 0x02A4BF },
- { "Etc/GMT-5" , 0x02A54B },
- { "Etc/GMT-6" , 0x02A5D7 },
- { "Etc/GMT-7" , 0x02A663 },
- { "Etc/GMT-8" , 0x02A6EF },
- { "Etc/GMT-9" , 0x02A77B },
- { "Etc/GMT0" , 0x02A017 },
- { "Etc/Greenwich" , 0x02A807 },
- { "Etc/UCT" , 0x02A84B },
- { "Etc/Universal" , 0x02A88F },
- { "Etc/UTC" , 0x02A8D3 },
- { "Etc/Zulu" , 0x02A917 },
- { "Europe/Amsterdam" , 0x02A95B },
- { "Europe/Andorra" , 0x02AD99 },
- { "Europe/Athens" , 0x02B015 },
- { "Europe/Belfast" , 0x02B358 },
- { "Europe/Belgrade" , 0x02B88F },
- { "Europe/Berlin" , 0x02BB58 },
- { "Europe/Bratislava" , 0x02BEBC },
- { "Europe/Brussels" , 0x02C1EE },
- { "Europe/Bucharest" , 0x02C625 },
- { "Europe/Budapest" , 0x02C94F },
- { "Europe/Busingen" , 0x02CCB8 },
- { "Europe/Chisinau" , 0x02CF6F },
- { "Europe/Copenhagen" , 0x02D2FD },
- { "Europe/Dublin" , 0x02D607 },
- { "Europe/Gibraltar" , 0x02DB18 },
- { "Europe/Guernsey" , 0x02DF6F },
- { "Europe/Helsinki" , 0x02E4A6 },
- { "Europe/Isle_of_Man" , 0x02E75C },
- { "Europe/Istanbul" , 0x02EC93 },
- { "Europe/Jersey" , 0x02F080 },
- { "Europe/Kaliningrad" , 0x02F5B7 },
- { "Europe/Kiev" , 0x02F822 },
- { "Europe/Lisbon" , 0x02FB3E },
- { "Europe/Ljubljana" , 0x030042 },
- { "Europe/London" , 0x03030B },
- { "Europe/Luxembourg" , 0x030842 },
- { "Europe/Madrid" , 0x030C98 },
- { "Europe/Malta" , 0x03105E },
- { "Europe/Mariehamn" , 0x031417 },
- { "Europe/Minsk" , 0x0316CD },
- { "Europe/Monaco" , 0x0318DB },
- { "Europe/Moscow" , 0x031D16 },
- { "Europe/Nicosia" , 0x031F70 },
- { "Europe/Oslo" , 0x032258 },
- { "Europe/Paris" , 0x03258A },
- { "Europe/Podgorica" , 0x0329D0 },
- { "Europe/Prague" , 0x032C99 },
- { "Europe/Riga" , 0x032FCB },
- { "Europe/Rome" , 0x033310 },
- { "Europe/Samara" , 0x0336D3 },
- { "Europe/San_Marino" , 0x03393C },
- { "Europe/Sarajevo" , 0x033CFF },
- { "Europe/Simferopol" , 0x033FC8 },
- { "Europe/Skopje" , 0x034219 },
- { "Europe/Sofia" , 0x0344E2 },
- { "Europe/Stockholm" , 0x0347EA },
- { "Europe/Tallinn" , 0x034A99 },
- { "Europe/Tirane" , 0x034DD3 },
- { "Europe/Tiraspol" , 0x0350D9 },
- { "Europe/Uzhgorod" , 0x035467 },
- { "Europe/Vaduz" , 0x03577E },
- { "Europe/Vatican" , 0x035A2D },
- { "Europe/Vienna" , 0x035DF0 },
- { "Europe/Vilnius" , 0x03611D },
- { "Europe/Volgograd" , 0x03645C },
- { "Europe/Warsaw" , 0x03667D },
- { "Europe/Zagreb" , 0x036A5E },
- { "Europe/Zaporozhye" , 0x036D27 },
- { "Europe/Zurich" , 0x037068 },
- { "Factory" , 0x037317 },
- { "GB" , 0x037388 },
- { "GB-Eire" , 0x0378BF },
- { "GMT" , 0x037DF6 },
- { "GMT+0" , 0x037EC2 },
- { "GMT-0" , 0x037E7E },
- { "GMT0" , 0x037E3A },
- { "Greenwich" , 0x037F06 },
- { "Hongkong" , 0x037F4A },
- { "HST" , 0x03810C },
- { "Iceland" , 0x038150 },
- { "Indian/Antananarivo" , 0x038309 },
- { "Indian/Chagos" , 0x03837D },
- { "Indian/Christmas" , 0x0383DF },
- { "Indian/Cocos" , 0x038423 },
- { "Indian/Comoro" , 0x038467 },
- { "Indian/Kerguelen" , 0x0384BC },
- { "Indian/Mahe" , 0x038511 },
- { "Indian/Maldives" , 0x038566 },
- { "Indian/Mauritius" , 0x0385BB },
- { "Indian/Mayotte" , 0x038631 },
- { "Indian/Reunion" , 0x038686 },
- { "Iran" , 0x0386DB },
- { "Israel" , 0x038949 },
- { "Jamaica" , 0x038C78 },
- { "Japan" , 0x038D3D },
- { "Kwajalein" , 0x038DC7 },
- { "Libya" , 0x038E2A },
- { "MET" , 0x038F33 },
- { "Mexico/BajaNorte" , 0x03923C },
- { "Mexico/BajaSur" , 0x0395A5 },
- { "Mexico/General" , 0x0397EA },
- { "MST" , 0x039A48 },
- { "MST7MDT" , 0x039A8C },
- { "Navajo" , 0x039DDD },
- { "NZ" , 0x03A156 },
- { "NZ-CHAT" , 0x03A4D4 },
- { "Pacific/Apia" , 0x03A7B8 },
- { "Pacific/Auckland" , 0x03A954 },
- { "Pacific/Chatham" , 0x03ACE0 },
- { "Pacific/Chuuk" , 0x03AFD3 },
- { "Pacific/Easter" , 0x03B02C },
- { "Pacific/Efate" , 0x03B37B },
- { "Pacific/Enderbury" , 0x03B441 },
- { "Pacific/Fakaofo" , 0x03B4AF },
- { "Pacific/Fiji" , 0x03B500 },
- { "Pacific/Funafuti" , 0x03B693 },
- { "Pacific/Galapagos" , 0x03B6D7 },
- { "Pacific/Gambier" , 0x03B74F },
- { "Pacific/Guadalcanal" , 0x03B7B4 },
- { "Pacific/Guam" , 0x03B809 },
- { "Pacific/Honolulu" , 0x03B85F },
- { "Pacific/Johnston" , 0x03B8D6 },
- { "Pacific/Kiritimati" , 0x03B955 },
- { "Pacific/Kosrae" , 0x03B9C0 },
- { "Pacific/Kwajalein" , 0x03BA1D },
- { "Pacific/Majuro" , 0x03BA89 },
- { "Pacific/Marquesas" , 0x03BAE8 },
- { "Pacific/Midway" , 0x03BB4F },
- { "Pacific/Nauru" , 0x03BBD9 },
- { "Pacific/Niue" , 0x03BC51 },
- { "Pacific/Norfolk" , 0x03BCAF },
- { "Pacific/Noumea" , 0x03BD04 },
- { "Pacific/Pago_Pago" , 0x03BD94 },
- { "Pacific/Palau" , 0x03BE0B },
- { "Pacific/Pitcairn" , 0x03BE4F },
- { "Pacific/Pohnpei" , 0x03BEA4 },
- { "Pacific/Ponape" , 0x03BEF9 },
- { "Pacific/Port_Moresby" , 0x03BF3E },
- { "Pacific/Rarotonga" , 0x03BF82 },
- { "Pacific/Saipan" , 0x03C05E },
- { "Pacific/Samoa" , 0x03C0C1 },
- { "Pacific/Tahiti" , 0x03C138 },
- { "Pacific/Tarawa" , 0x03C19D },
- { "Pacific/Tongatapu" , 0x03C1F1 },
- { "Pacific/Truk" , 0x03C27D },
- { "Pacific/Wake" , 0x03C2C2 },
- { "Pacific/Wallis" , 0x03C312 },
- { "Pacific/Yap" , 0x03C356 },
- { "Poland" , 0x03C39B },
- { "Portugal" , 0x03C77C },
- { "PRC" , 0x03CC78 },
- { "PST8PDT" , 0x03CD18 },
- { "ROC" , 0x03D069 },
- { "ROK" , 0x03D19A },
- { "Singapore" , 0x03D261 },
- { "Turkey" , 0x03D318 },
- { "UCT" , 0x03D705 },
- { "Universal" , 0x03D749 },
- { "US/Alaska" , 0x03D78D },
- { "US/Aleutian" , 0x03DAF6 },
- { "US/Arizona" , 0x03DE5C },
- { "US/Central" , 0x03DEEA },
- { "US/East-Indiana" , 0x03E8F4 },
- { "US/Eastern" , 0x03E3F5 },
- { "US/Hawaii" , 0x03EB5E },
- { "US/Indiana-Starke" , 0x03EBCF },
- { "US/Michigan" , 0x03EF40 },
- { "US/Mountain" , 0x03F277 },
- { "US/Pacific" , 0x03F5F0 },
- { "US/Pacific-New" , 0x03F9F5 },
- { "US/Samoa" , 0x03FDFA },
- { "UTC" , 0x03FE71 },
- { "W-SU" , 0x040168 },
- { "WET" , 0x03FEB5 },
- { "Zulu" , 0x0403AB },
+ { "Africa/Cairo" , 0x00062E },
+ { "Africa/Casablanca" , 0x000A15 },
+ { "Africa/Ceuta" , 0x000C77 },
+ { "Africa/Conakry" , 0x000F7E },
+ { "Africa/Dakar" , 0x000FD3 },
+ { "Africa/Dar_es_Salaam" , 0x001028 },
+ { "Africa/Djibouti" , 0x001095 },
+ { "Africa/Douala" , 0x0010EA },
+ { "Africa/El_Aaiun" , 0x00113F },
+ { "Africa/Freetown" , 0x00136A },
+ { "Africa/Gaborone" , 0x0013BF },
+ { "Africa/Harare" , 0x001414 },
+ { "Africa/Johannesburg" , 0x001469 },
+ { "Africa/Juba" , 0x0014D7 },
+ { "Africa/Kampala" , 0x0015EA },
+ { "Africa/Khartoum" , 0x001669 },
+ { "Africa/Kigali" , 0x00177C },
+ { "Africa/Kinshasa" , 0x0017D1 },
+ { "Africa/Lagos" , 0x00183D },
+ { "Africa/Libreville" , 0x001892 },
+ { "Africa/Lome" , 0x0018E7 },
+ { "Africa/Luanda" , 0x00193C },
+ { "Africa/Lubumbashi" , 0x001991 },
+ { "Africa/Lusaka" , 0x0019FD },
+ { "Africa/Malabo" , 0x001A52 },
+ { "Africa/Maputo" , 0x001AA7 },
+ { "Africa/Maseru" , 0x001AFC },
+ { "Africa/Mbabane" , 0x001B6A },
+ { "Africa/Mogadishu" , 0x001BD8 },
+ { "Africa/Monrovia" , 0x001C33 },
+ { "Africa/Nairobi" , 0x001C99 },
+ { "Africa/Ndjamena" , 0x001D18 },
+ { "Africa/Niamey" , 0x001D84 },
+ { "Africa/Nouakchott" , 0x001DD9 },
+ { "Africa/Ouagadougou" , 0x001E2E },
+ { "Africa/Porto-Novo" , 0x001E83 },
+ { "Africa/Sao_Tome" , 0x001ED8 },
+ { "Africa/Timbuktu" , 0x001F2D },
+ { "Africa/Tripoli" , 0x001F82 },
+ { "Africa/Tunis" , 0x00208B },
+ { "Africa/Windhoek" , 0x00219D },
+ { "America/Adak" , 0x0023E4 },
+ { "America/Anchorage" , 0x00275A },
+ { "America/Anguilla" , 0x002ACE },
+ { "America/Antigua" , 0x002B23 },
+ { "America/Araguaina" , 0x002B89 },
+ { "America/Argentina/Buenos_Aires" , 0x002CEE },
+ { "America/Argentina/Catamarca" , 0x002E9C },
+ { "America/Argentina/ComodRivadavia" , 0x00305D },
+ { "America/Argentina/Cordoba" , 0x003203 },
+ { "America/Argentina/Jujuy" , 0x0033D8 },
+ { "America/Argentina/La_Rioja" , 0x00358C },
+ { "America/Argentina/Mendoza" , 0x003744 },
+ { "America/Argentina/Rio_Gallegos" , 0x003904 },
+ { "America/Argentina/Salta" , 0x003AB9 },
+ { "America/Argentina/San_Juan" , 0x003C65 },
+ { "America/Argentina/San_Luis" , 0x003E1D },
+ { "America/Argentina/Tucuman" , 0x003FE3 },
+ { "America/Argentina/Ushuaia" , 0x00419F },
+ { "America/Aruba" , 0x00435A },
+ { "America/Asuncion" , 0x0043C0 },
+ { "America/Atikokan" , 0x0046A5 },
+ { "America/Atka" , 0x00477B },
+ { "America/Bahia" , 0x004AE1 },
+ { "America/Bahia_Banderas" , 0x004C74 },
+ { "America/Barbados" , 0x004EED },
+ { "America/Belem" , 0x004F87 },
+ { "America/Belize" , 0x005082 },
+ { "America/Blanc-Sablon" , 0x0051FE },
+ { "America/Boa_Vista" , 0x0052B2 },
+ { "America/Bogota" , 0x0053BB },
+ { "America/Boise" , 0x005427 },
+ { "America/Buenos_Aires" , 0x0057BE },
+ { "America/Cambridge_Bay" , 0x005957 },
+ { "America/Campo_Grande" , 0x005C7F },
+ { "America/Cancun" , 0x005F6E },
+ { "America/Caracas" , 0x0061B0 },
+ { "America/Catamarca" , 0x006217 },
+ { "America/Cayenne" , 0x0063BD },
+ { "America/Cayman" , 0x00641F },
+ { "America/Chicago" , 0x006474 },
+ { "America/Chihuahua" , 0x00698B },
+ { "America/Coral_Harbour" , 0x006BF6 },
+ { "America/Cordoba" , 0x006C88 },
+ { "America/Costa_Rica" , 0x006E2E },
+ { "America/Creston" , 0x006EB8 },
+ { "America/Cuiaba" , 0x006F44 },
+ { "America/Curacao" , 0x007222 },
+ { "America/Danmarkshavn" , 0x007288 },
+ { "America/Dawson" , 0x0073CC },
+ { "America/Dawson_Creek" , 0x0076E9 },
+ { "America/Denver" , 0x0078C3 },
+ { "America/Detroit" , 0x007C49 },
+ { "America/Dominica" , 0x007FA8 },
+ { "America/Edmonton" , 0x007FFD },
+ { "America/Eirunepe" , 0x0083B5 },
+ { "America/El_Salvador" , 0x0084CD },
+ { "America/Ensenada" , 0x008542 },
+ { "America/Fort_Wayne" , 0x0089E9 },
+ { "America/Fortaleza" , 0x0088AB },
+ { "America/Glace_Bay" , 0x008C53 },
+ { "America/Godthab" , 0x008FCA },
+ { "America/Goose_Bay" , 0x00928E },
+ { "America/Grand_Turk" , 0x00974B },
+ { "America/Grenada" , 0x009920 },
+ { "America/Guadeloupe" , 0x009975 },
+ { "America/Guatemala" , 0x0099CA },
+ { "America/Guayaquil" , 0x009A53 },
+ { "America/Guyana" , 0x009AB0 },
+ { "America/Halifax" , 0x009B31 },
+ { "America/Havana" , 0x00A047 },
+ { "America/Hermosillo" , 0x00A3BA },
+ { "America/Indiana/Indianapolis" , 0x00A498 },
+ { "America/Indiana/Knox" , 0x00A729 },
+ { "America/Indiana/Marengo" , 0x00AAC0 },
+ { "America/Indiana/Petersburg" , 0x00AD66 },
+ { "America/Indiana/Tell_City" , 0x00B2B3 },
+ { "America/Indiana/Vevay" , 0x00B54C },
+ { "America/Indiana/Vincennes" , 0x00B787 },
+ { "America/Indiana/Winamac" , 0x00BA3B },
+ { "America/Indianapolis" , 0x00B049 },
+ { "America/Inuvik" , 0x00BCF4 },
+ { "America/Iqaluit" , 0x00BFEB },
+ { "America/Jamaica" , 0x00C30D },
+ { "America/Jujuy" , 0x00C3D2 },
+ { "America/Juneau" , 0x00C57C },
+ { "America/Kentucky/Louisville" , 0x00C8FA },
+ { "America/Kentucky/Monticello" , 0x00CD18 },
+ { "America/Knox_IN" , 0x00D09D },
+ { "America/Kralendijk" , 0x00D40E },
+ { "America/La_Paz" , 0x00D474 },
+ { "America/Lima" , 0x00D4DB },
+ { "America/Los_Angeles" , 0x00D583 },
+ { "America/Louisville" , 0x00D994 },
+ { "America/Lower_Princes" , 0x00DD89 },
+ { "America/Maceio" , 0x00DDEF },
+ { "America/Managua" , 0x00DF29 },
+ { "America/Manaus" , 0x00DFDC },
+ { "America/Marigot" , 0x00E0DE },
+ { "America/Martinique" , 0x00E133 },
+ { "America/Matamoros" , 0x00E19F },
+ { "America/Mazatlan" , 0x00E3F8 },
+ { "America/Mendoza" , 0x00E665 },
+ { "America/Menominee" , 0x00E819 },
+ { "America/Merida" , 0x00EB9A },
+ { "America/Metlakatla" , 0x00EDD5 },
+ { "America/Mexico_City" , 0x00EF10 },
+ { "America/Miquelon" , 0x00F18B },
+ { "America/Moncton" , 0x00F3FD },
+ { "America/Monterrey" , 0x00F894 },
+ { "America/Montevideo" , 0x00FAF7 },
+ { "America/Montreal" , 0x00FE09 },
+ { "America/Montserrat" , 0x0102F9 },
+ { "America/Nassau" , 0x01034E },
+ { "America/New_York" , 0x010693 },
+ { "America/Nipigon" , 0x010B9E },
+ { "America/Nome" , 0x010EEF },
+ { "America/Noronha" , 0x01126D },
+ { "America/North_Dakota/Beulah" , 0x01139D },
+ { "America/North_Dakota/Center" , 0x011731 },
+ { "America/North_Dakota/New_Salem" , 0x011AC5 },
+ { "America/Ojinaga" , 0x011E6E },
+ { "America/Panama" , 0x0120CF },
+ { "America/Pangnirtung" , 0x012124 },
+ { "America/Paramaribo" , 0x01245A },
+ { "America/Phoenix" , 0x0124EC },
+ { "America/Port-au-Prince" , 0x0125AA },
+ { "America/Port_of_Spain" , 0x0128CE },
+ { "America/Porto_Acre" , 0x0127CA },
+ { "America/Porto_Velho" , 0x012923 },
+ { "America/Puerto_Rico" , 0x012A19 },
+ { "America/Rainy_River" , 0x012A84 },
+ { "America/Rankin_Inlet" , 0x012DBC },
+ { "America/Recife" , 0x0130A2 },
+ { "America/Regina" , 0x0131CC },
+ { "America/Resolute" , 0x01338A },
+ { "America/Rio_Branco" , 0x013672 },
+ { "America/Rosario" , 0x01377A },
+ { "America/Santa_Isabel" , 0x013920 },
+ { "America/Santarem" , 0x013CC3 },
+ { "America/Santiago" , 0x013DC8 },
+ { "America/Santo_Domingo" , 0x014171 },
+ { "America/Sao_Paulo" , 0x014237 },
+ { "America/Scoresbysund" , 0x014546 },
+ { "America/Shiprock" , 0x014834 },
+ { "America/Sitka" , 0x014BAD },
+ { "America/St_Barthelemy" , 0x014F35 },
+ { "America/St_Johns" , 0x014F8A },
+ { "America/St_Kitts" , 0x0154DD },
+ { "America/St_Lucia" , 0x015532 },
+ { "America/St_Thomas" , 0x015587 },
+ { "America/St_Vincent" , 0x0155DC },
+ { "America/Swift_Current" , 0x015631 },
+ { "America/Tegucigalpa" , 0x015752 },
+ { "America/Thule" , 0x0157D1 },
+ { "America/Thunder_Bay" , 0x015A18 },
+ { "America/Tijuana" , 0x015D61 },
+ { "America/Toronto" , 0x0160FA },
+ { "America/Tortola" , 0x01661A },
+ { "America/Vancouver" , 0x01666F },
+ { "America/Virgin" , 0x016AAC },
+ { "America/Whitehorse" , 0x016B01 },
+ { "America/Winnipeg" , 0x016E1E },
+ { "America/Yakutat" , 0x01725E },
+ { "America/Yellowknife" , 0x0175C9 },
+ { "Antarctica/Casey" , 0x0178D9 },
+ { "Antarctica/Davis" , 0x017977 },
+ { "Antarctica/DumontDUrville" , 0x017A18 },
+ { "Antarctica/Macquarie" , 0x017AA9 },
+ { "Antarctica/Mawson" , 0x017CF6 },
+ { "Antarctica/McMurdo" , 0x017D72 },
+ { "Antarctica/Palmer" , 0x01811D },
+ { "Antarctica/Rothera" , 0x018439 },
+ { "Antarctica/South_Pole" , 0x0184AF },
+ { "Antarctica/Syowa" , 0x01882D },
+ { "Antarctica/Troll" , 0x01889B },
+ { "Antarctica/Vostok" , 0x018A6D },
+ { "Arctic/Longyearbyen" , 0x018ADE },
+ { "Asia/Aden" , 0x018E10 },
+ { "Asia/Almaty" , 0x018E65 },
+ { "Asia/Amman" , 0x018FE4 },
+ { "Asia/Anadyr" , 0x01929A },
+ { "Asia/Aqtau" , 0x01949C },
+ { "Asia/Aqtobe" , 0x01969B },
+ { "Asia/Ashgabat" , 0x019853 },
+ { "Asia/Ashkhabad" , 0x019970 },
+ { "Asia/Baghdad" , 0x019A8D },
+ { "Asia/Bahrain" , 0x019C02 },
+ { "Asia/Baku" , 0x019C68 },
+ { "Asia/Bangkok" , 0x019F50 },
+ { "Asia/Beirut" , 0x019FA5 },
+ { "Asia/Bishkek" , 0x01A2B2 },
+ { "Asia/Brunei" , 0x01A45E },
+ { "Asia/Calcutta" , 0x01A4C0 },
+ { "Asia/Chita" , 0x01A539 },
+ { "Asia/Choibalsan" , 0x01A74E },
+ { "Asia/Chongqing" , 0x01A8C7 },
+ { "Asia/Chungking" , 0x01A967 },
+ { "Asia/Colombo" , 0x01AA07 },
+ { "Asia/Dacca" , 0x01AAA3 },
+ { "Asia/Damascus" , 0x01AB49 },
+ { "Asia/Dhaka" , 0x01AE99 },
+ { "Asia/Dili" , 0x01AF3F },
+ { "Asia/Dubai" , 0x01AFC9 },
+ { "Asia/Dushanbe" , 0x01B01E },
+ { "Asia/Gaza" , 0x01B121 },
+ { "Asia/Harbin" , 0x01B474 },
+ { "Asia/Hebron" , 0x01B514 },
+ { "Asia/Ho_Chi_Minh" , 0x01B870 },
+ { "Asia/Hong_Kong" , 0x01B8E8 },
+ { "Asia/Hovd" , 0x01BAAA },
+ { "Asia/Irkutsk" , 0x01BC22 },
+ { "Asia/Istanbul" , 0x01BE0D },
+ { "Asia/Jakarta" , 0x01C1FA },
+ { "Asia/Jayapura" , 0x01C2A4 },
+ { "Asia/Jerusalem" , 0x01C341 },
+ { "Asia/Kabul" , 0x01C670 },
+ { "Asia/Kamchatka" , 0x01C6C1 },
+ { "Asia/Karachi" , 0x01C8BA },
+ { "Asia/Kashgar" , 0x01C96F },
+ { "Asia/Kathmandu" , 0x01C9C4 },
+ { "Asia/Katmandu" , 0x01CA2A },
+ { "Asia/Khandyga" , 0x01CA90 },
+ { "Asia/Kolkata" , 0x01CCBA },
+ { "Asia/Krasnoyarsk" , 0x01CD33 },
+ { "Asia/Kuala_Lumpur" , 0x01CF20 },
+ { "Asia/Kuching" , 0x01CFDD },
+ { "Asia/Kuwait" , 0x01D0CB },
+ { "Asia/Macao" , 0x01D120 },
+ { "Asia/Macau" , 0x01D25B },
+ { "Asia/Magadan" , 0x01D396 },
+ { "Asia/Makassar" , 0x01D59A },
+ { "Asia/Manila" , 0x01D65F },
+ { "Asia/Muscat" , 0x01D6E4 },
+ { "Asia/Nicosia" , 0x01D739 },
+ { "Asia/Novokuznetsk" , 0x01DA21 },
+ { "Asia/Novosibirsk" , 0x01DC41 },
+ { "Asia/Omsk" , 0x01DE31 },
+ { "Asia/Oral" , 0x01E01D },
+ { "Asia/Phnom_Penh" , 0x01E1ED },
+ { "Asia/Pontianak" , 0x01E265 },
+ { "Asia/Pyongyang" , 0x01E327 },
+ { "Asia/Qatar" , 0x01E3B7 },
+ { "Asia/Qyzylorda" , 0x01E41D },
+ { "Asia/Rangoon" , 0x01E5F3 },
+ { "Asia/Riyadh" , 0x01E66B },
+ { "Asia/Saigon" , 0x01E6C0 },
+ { "Asia/Sakhalin" , 0x01E738 },
+ { "Asia/Samarkand" , 0x01E935 },
+ { "Asia/Seoul" , 0x01EA6B },
+ { "Asia/Shanghai" , 0x01EB32 },
+ { "Asia/Singapore" , 0x01EBDE },
+ { "Asia/Srednekolymsk" , 0x01EC95 },
+ { "Asia/Taipei" , 0x01EE95 },
+ { "Asia/Tashkent" , 0x01EFC6 },
+ { "Asia/Tbilisi" , 0x01F0F7 },
+ { "Asia/Tehran" , 0x01F2B1 },
+ { "Asia/Tel_Aviv" , 0x01F51F },
+ { "Asia/Thimbu" , 0x01F84E },
+ { "Asia/Thimphu" , 0x01F8B4 },
+ { "Asia/Tokyo" , 0x01F91A },
+ { "Asia/Ujung_Pandang" , 0x01F9A4 },
+ { "Asia/Ulaanbaatar" , 0x01FA21 },
+ { "Asia/Ulan_Bator" , 0x01FB7C },
+ { "Asia/Urumqi" , 0x01FCC9 },
+ { "Asia/Ust-Nera" , 0x01FD2B },
+ { "Asia/Vientiane" , 0x01FF3D },
+ { "Asia/Vladivostok" , 0x01FFB5 },
+ { "Asia/Yakutsk" , 0x02019F },
+ { "Asia/Yekaterinburg" , 0x020389 },
+ { "Asia/Yerevan" , 0x0205AA },
+ { "Atlantic/Azores" , 0x0207AA },
+ { "Atlantic/Bermuda" , 0x020CAD },
+ { "Atlantic/Canary" , 0x020F8E },
+ { "Atlantic/Cape_Verde" , 0x021264 },
+ { "Atlantic/Faeroe" , 0x0212DD },
+ { "Atlantic/Faroe" , 0x021581 },
+ { "Atlantic/Jan_Mayen" , 0x021825 },
+ { "Atlantic/Madeira" , 0x021B57 },
+ { "Atlantic/Reykjavik" , 0x022060 },
+ { "Atlantic/South_Georgia" , 0x022219 },
+ { "Atlantic/St_Helena" , 0x02242B },
+ { "Atlantic/Stanley" , 0x02225D },
+ { "Australia/ACT" , 0x022480 },
+ { "Australia/Adelaide" , 0x0227A3 },
+ { "Australia/Brisbane" , 0x022AD5 },
+ { "Australia/Broken_Hill" , 0x022BA2 },
+ { "Australia/Canberra" , 0x022EE6 },
+ { "Australia/Currie" , 0x023209 },
+ { "Australia/Darwin" , 0x023542 },
+ { "Australia/Eucla" , 0x0235CE },
+ { "Australia/Hobart" , 0x0236AA },
+ { "Australia/LHI" , 0x023A0E },
+ { "Australia/Lindeman" , 0x023CAF },
+ { "Australia/Lord_Howe" , 0x023D96 },
+ { "Australia/Melbourne" , 0x024047 },
+ { "Australia/North" , 0x024372 },
+ { "Australia/NSW" , 0x0243EC },
+ { "Australia/Perth" , 0x02470F },
+ { "Australia/Queensland" , 0x0247ED },
+ { "Australia/South" , 0x02489F },
+ { "Australia/Sydney" , 0x024BC2 },
+ { "Australia/Tasmania" , 0x024F05 },
+ { "Australia/Victoria" , 0x025250 },
+ { "Australia/West" , 0x025573 },
+ { "Australia/Yancowinna" , 0x02562F },
+ { "Brazil/Acre" , 0x025957 },
+ { "Brazil/DeNoronha" , 0x025A5B },
+ { "Brazil/East" , 0x025B7B },
+ { "Brazil/West" , 0x025E58 },
+ { "Canada/Atlantic" , 0x025F50 },
+ { "Canada/Central" , 0x026438 },
+ { "Canada/East-Saskatchewan" , 0x026D42 },
+ { "Canada/Eastern" , 0x026852 },
+ { "Canada/Mountain" , 0x026ECB },
+ { "Canada/Newfoundland" , 0x027241 },
+ { "Canada/Pacific" , 0x02776C },
+ { "Canada/Saskatchewan" , 0x027B85 },
+ { "Canada/Yukon" , 0x027D0E },
+ { "CET" , 0x028011 },
+ { "Chile/Continental" , 0x02831A },
+ { "Chile/EasterIsland" , 0x0286B5 },
+ { "CST6CDT" , 0x0289F7 },
+ { "Cuba" , 0x028D48 },
+ { "EET" , 0x0290BB },
+ { "Egypt" , 0x02936E },
+ { "Eire" , 0x029755 },
+ { "EST" , 0x029C66 },
+ { "EST5EDT" , 0x029CAA },
+ { "Etc/GMT" , 0x029FFB },
+ { "Etc/GMT+0" , 0x02A0C7 },
+ { "Etc/GMT+1" , 0x02A151 },
+ { "Etc/GMT+10" , 0x02A1DE },
+ { "Etc/GMT+11" , 0x02A26C },
+ { "Etc/GMT+12" , 0x02A2FA },
+ { "Etc/GMT+2" , 0x02A415 },
+ { "Etc/GMT+3" , 0x02A4A1 },
+ { "Etc/GMT+4" , 0x02A52D },
+ { "Etc/GMT+5" , 0x02A5B9 },
+ { "Etc/GMT+6" , 0x02A645 },
+ { "Etc/GMT+7" , 0x02A6D1 },
+ { "Etc/GMT+8" , 0x02A75D },
+ { "Etc/GMT+9" , 0x02A7E9 },
+ { "Etc/GMT-0" , 0x02A083 },
+ { "Etc/GMT-1" , 0x02A10B },
+ { "Etc/GMT-10" , 0x02A197 },
+ { "Etc/GMT-11" , 0x02A225 },
+ { "Etc/GMT-12" , 0x02A2B3 },
+ { "Etc/GMT-13" , 0x02A341 },
+ { "Etc/GMT-14" , 0x02A388 },
+ { "Etc/GMT-2" , 0x02A3CF },
+ { "Etc/GMT-3" , 0x02A45B },
+ { "Etc/GMT-4" , 0x02A4E7 },
+ { "Etc/GMT-5" , 0x02A573 },
+ { "Etc/GMT-6" , 0x02A5FF },
+ { "Etc/GMT-7" , 0x02A68B },
+ { "Etc/GMT-8" , 0x02A717 },
+ { "Etc/GMT-9" , 0x02A7A3 },
+ { "Etc/GMT0" , 0x02A03F },
+ { "Etc/Greenwich" , 0x02A82F },
+ { "Etc/UCT" , 0x02A873 },
+ { "Etc/Universal" , 0x02A8B7 },
+ { "Etc/UTC" , 0x02A8FB },
+ { "Etc/Zulu" , 0x02A93F },
+ { "Europe/Amsterdam" , 0x02A983 },
+ { "Europe/Andorra" , 0x02ADC1 },
+ { "Europe/Athens" , 0x02B03D },
+ { "Europe/Belfast" , 0x02B380 },
+ { "Europe/Belgrade" , 0x02B8B7 },
+ { "Europe/Berlin" , 0x02BB80 },
+ { "Europe/Bratislava" , 0x02BEE4 },
+ { "Europe/Brussels" , 0x02C216 },
+ { "Europe/Bucharest" , 0x02C64D },
+ { "Europe/Budapest" , 0x02C977 },
+ { "Europe/Busingen" , 0x02CCE0 },
+ { "Europe/Chisinau" , 0x02CF97 },
+ { "Europe/Copenhagen" , 0x02D325 },
+ { "Europe/Dublin" , 0x02D62F },
+ { "Europe/Gibraltar" , 0x02DB40 },
+ { "Europe/Guernsey" , 0x02DF97 },
+ { "Europe/Helsinki" , 0x02E4CE },
+ { "Europe/Isle_of_Man" , 0x02E784 },
+ { "Europe/Istanbul" , 0x02ECBB },
+ { "Europe/Jersey" , 0x02F0A8 },
+ { "Europe/Kaliningrad" , 0x02F5DF },
+ { "Europe/Kiev" , 0x02F84A },
+ { "Europe/Lisbon" , 0x02FB66 },
+ { "Europe/Ljubljana" , 0x03006A },
+ { "Europe/London" , 0x030333 },
+ { "Europe/Luxembourg" , 0x03086A },
+ { "Europe/Madrid" , 0x030CC0 },
+ { "Europe/Malta" , 0x031086 },
+ { "Europe/Mariehamn" , 0x03143F },
+ { "Europe/Minsk" , 0x0316F5 },
+ { "Europe/Monaco" , 0x031903 },
+ { "Europe/Moscow" , 0x031D3E },
+ { "Europe/Nicosia" , 0x031F98 },
+ { "Europe/Oslo" , 0x032280 },
+ { "Europe/Paris" , 0x0325B2 },
+ { "Europe/Podgorica" , 0x0329F8 },
+ { "Europe/Prague" , 0x032CC1 },
+ { "Europe/Riga" , 0x032FF3 },
+ { "Europe/Rome" , 0x033338 },
+ { "Europe/Samara" , 0x0336FB },
+ { "Europe/San_Marino" , 0x033964 },
+ { "Europe/Sarajevo" , 0x033D27 },
+ { "Europe/Simferopol" , 0x033FF0 },
+ { "Europe/Skopje" , 0x034241 },
+ { "Europe/Sofia" , 0x03450A },
+ { "Europe/Stockholm" , 0x034812 },
+ { "Europe/Tallinn" , 0x034AC1 },
+ { "Europe/Tirane" , 0x034DFB },
+ { "Europe/Tiraspol" , 0x035101 },
+ { "Europe/Uzhgorod" , 0x03548F },
+ { "Europe/Vaduz" , 0x0357A6 },
+ { "Europe/Vatican" , 0x035A55 },
+ { "Europe/Vienna" , 0x035E18 },
+ { "Europe/Vilnius" , 0x036145 },
+ { "Europe/Volgograd" , 0x036484 },
+ { "Europe/Warsaw" , 0x0366A5 },
+ { "Europe/Zagreb" , 0x036A86 },
+ { "Europe/Zaporozhye" , 0x036D4F },
+ { "Europe/Zurich" , 0x037090 },
+ { "Factory" , 0x03733F },
+ { "GB" , 0x0373B0 },
+ { "GB-Eire" , 0x0378E7 },
+ { "GMT" , 0x037E1E },
+ { "GMT+0" , 0x037EEA },
+ { "GMT-0" , 0x037EA6 },
+ { "GMT0" , 0x037E62 },
+ { "Greenwich" , 0x037F2E },
+ { "Hongkong" , 0x037F72 },
+ { "HST" , 0x038134 },
+ { "Iceland" , 0x038178 },
+ { "Indian/Antananarivo" , 0x038331 },
+ { "Indian/Chagos" , 0x0383A5 },
+ { "Indian/Christmas" , 0x038407 },
+ { "Indian/Cocos" , 0x03844B },
+ { "Indian/Comoro" , 0x03848F },
+ { "Indian/Kerguelen" , 0x0384E4 },
+ { "Indian/Mahe" , 0x038539 },
+ { "Indian/Maldives" , 0x03858E },
+ { "Indian/Mauritius" , 0x0385E3 },
+ { "Indian/Mayotte" , 0x038659 },
+ { "Indian/Reunion" , 0x0386AE },
+ { "Iran" , 0x038703 },
+ { "Israel" , 0x038971 },
+ { "Jamaica" , 0x038CA0 },
+ { "Japan" , 0x038D65 },
+ { "Kwajalein" , 0x038DEF },
+ { "Libya" , 0x038E52 },
+ { "MET" , 0x038F5B },
+ { "Mexico/BajaNorte" , 0x039264 },
+ { "Mexico/BajaSur" , 0x0395CD },
+ { "Mexico/General" , 0x039812 },
+ { "MST" , 0x039A70 },
+ { "MST7MDT" , 0x039AB4 },
+ { "Navajo" , 0x039E05 },
+ { "NZ" , 0x03A17E },
+ { "NZ-CHAT" , 0x03A4FC },
+ { "Pacific/Apia" , 0x03A7E0 },
+ { "Pacific/Auckland" , 0x03A97C },
+ { "Pacific/Chatham" , 0x03AD08 },
+ { "Pacific/Chuuk" , 0x03AFFB },
+ { "Pacific/Easter" , 0x03B054 },
+ { "Pacific/Efate" , 0x03B3A3 },
+ { "Pacific/Enderbury" , 0x03B469 },
+ { "Pacific/Fakaofo" , 0x03B4D7 },
+ { "Pacific/Fiji" , 0x03B528 },
+ { "Pacific/Funafuti" , 0x03B6BB },
+ { "Pacific/Galapagos" , 0x03B6FF },
+ { "Pacific/Gambier" , 0x03B777 },
+ { "Pacific/Guadalcanal" , 0x03B7DC },
+ { "Pacific/Guam" , 0x03B831 },
+ { "Pacific/Honolulu" , 0x03B887 },
+ { "Pacific/Johnston" , 0x03B8FE },
+ { "Pacific/Kiritimati" , 0x03B97D },
+ { "Pacific/Kosrae" , 0x03B9E8 },
+ { "Pacific/Kwajalein" , 0x03BA45 },
+ { "Pacific/Majuro" , 0x03BAB1 },
+ { "Pacific/Marquesas" , 0x03BB10 },
+ { "Pacific/Midway" , 0x03BB77 },
+ { "Pacific/Nauru" , 0x03BC01 },
+ { "Pacific/Niue" , 0x03BC79 },
+ { "Pacific/Norfolk" , 0x03BCD7 },
+ { "Pacific/Noumea" , 0x03BD2C },
+ { "Pacific/Pago_Pago" , 0x03BDBC },
+ { "Pacific/Palau" , 0x03BE33 },
+ { "Pacific/Pitcairn" , 0x03BE77 },
+ { "Pacific/Pohnpei" , 0x03BECC },
+ { "Pacific/Ponape" , 0x03BF21 },
+ { "Pacific/Port_Moresby" , 0x03BF66 },
+ { "Pacific/Rarotonga" , 0x03BFAA },
+ { "Pacific/Saipan" , 0x03C086 },
+ { "Pacific/Samoa" , 0x03C0E9 },
+ { "Pacific/Tahiti" , 0x03C160 },
+ { "Pacific/Tarawa" , 0x03C1C5 },
+ { "Pacific/Tongatapu" , 0x03C219 },
+ { "Pacific/Truk" , 0x03C2A5 },
+ { "Pacific/Wake" , 0x03C2EA },
+ { "Pacific/Wallis" , 0x03C33A },
+ { "Pacific/Yap" , 0x03C37E },
+ { "Poland" , 0x03C3C3 },
+ { "Portugal" , 0x03C7A4 },
+ { "PRC" , 0x03CCA0 },
+ { "PST8PDT" , 0x03CD40 },
+ { "ROC" , 0x03D091 },
+ { "ROK" , 0x03D1C2 },
+ { "Singapore" , 0x03D289 },
+ { "Turkey" , 0x03D340 },
+ { "UCT" , 0x03D72D },
+ { "Universal" , 0x03D771 },
+ { "US/Alaska" , 0x03D7B5 },
+ { "US/Aleutian" , 0x03DB1E },
+ { "US/Arizona" , 0x03DE84 },
+ { "US/Central" , 0x03DF12 },
+ { "US/East-Indiana" , 0x03E91C },
+ { "US/Eastern" , 0x03E41D },
+ { "US/Hawaii" , 0x03EB86 },
+ { "US/Indiana-Starke" , 0x03EBF7 },
+ { "US/Michigan" , 0x03EF68 },
+ { "US/Mountain" , 0x03F29F },
+ { "US/Pacific" , 0x03F618 },
+ { "US/Pacific-New" , 0x03FA1D },
+ { "US/Samoa" , 0x03FE22 },
+ { "UTC" , 0x03FE99 },
+ { "W-SU" , 0x040190 },
+ { "WET" , 0x03FEDD },
+ { "Zulu" , 0x0403D3 },
};
/* This is a generated file, do not modify */
-const unsigned char timelib_timezone_db_data_builtin[263151] = {
+const unsigned char timelib_timezone_db_data_builtin[263191] = {
/* Africa/Abidjan */
@@ -698,8 +698,8 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = {
/* Africa/Blantyre */
0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC3, 0xB0,
-0x01, 0x00, 0x00, 0x20, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC5, 0xF4,
+0x01, 0x00, 0x00, 0x1E, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x3E, 0xE2, 0x01, 0x48, 0x10,
0x60, 0x00, 0x00, 0x00, 0x00,
@@ -713,10 +713,11 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = {
/* Africa/Bujumbura */
0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20,
-0x00, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x84, 0x2A, 0xA2, 0x01, 0x3F, 0x77, 0xDA,
-0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC5, 0xF4,
+0x01, 0x00, 0x00, 0x1E, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
+0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x2A, 0xA2, 0x01, 0x3F, 0x77,
+0xDA, 0x00, 0x00, 0x00, 0x00,
/* Africa/Cairo */
0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -963,18 +964,17 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = {
/* Africa/Gaborone */
0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0E, 0x82, 0x46, 0xCF, 0x68,
-0xCE, 0x8E, 0x6E, 0x80, 0xCF, 0x7E, 0x51, 0x70, 0x01, 0x02, 0x01, 0x00, 0x00, 0x15, 0x18, 0x00,
-0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x09, 0x53, 0x41, 0x53,
-0x54, 0x00, 0x43, 0x41, 0x54, 0x00, 0x43, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x63, 0xB7, 0x57, 0x01, 0x3A, 0x34, 0x32, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC5, 0xF4,
+0x01, 0x00, 0x00, 0x1E, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
+0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0xB7, 0x57, 0x01, 0x3A, 0x34,
+0x32, 0x00, 0x00, 0x00, 0x00,
/* Africa/Harare */
0x50, 0x48, 0x50, 0x31, 0x01, 0x5A, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC7, 0x64,
-0x01, 0x00, 0x00, 0x1D, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC5, 0xF4,
+0x01, 0x00, 0x00, 0x1E, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x1E, 0x1A, 0x01, 0x42, 0x09,
0x68, 0x00, 0x00, 0x00, 0x00,
@@ -1040,8 +1040,8 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = {
/* Africa/Kigali */
0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xBE, 0xF1, 0x0E, 0x50,
-0x01, 0x00, 0x00, 0x1C, 0x30, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC5, 0xF4,
+0x01, 0x00, 0x00, 0x1E, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x5A, 0x88, 0x01, 0x40, 0x89,
0x4A, 0x00, 0x00, 0x00, 0x00,
@@ -1088,17 +1088,18 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = {
/* Africa/Lubumbashi */
0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20,
-0x00, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x77, 0x86, 0xF5, 0x01, 0x3C, 0x91, 0xAA,
-0x00, 0x00, 0x00, 0x17, 0x65, 0x61, 0x73, 0x74, 0x20, 0x44, 0x65, 0x6D, 0x2E, 0x20, 0x52, 0x65,
-0x70, 0x2E, 0x20, 0x6F, 0x66, 0x20, 0x43, 0x6F, 0x6E, 0x67, 0x6F,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC5, 0xF4,
+0x01, 0x00, 0x00, 0x1E, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
+0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x86, 0xF5, 0x01, 0x3C, 0x91,
+0xAA, 0x00, 0x00, 0x00, 0x17, 0x65, 0x61, 0x73, 0x74, 0x20, 0x44, 0x65, 0x6D, 0x2E, 0x20, 0x52,
+0x65, 0x70, 0x2E, 0x20, 0x6F, 0x66, 0x20, 0x43, 0x6F, 0x6E, 0x67, 0x6F,
/* Africa/Lusaka */
0x50, 0x48, 0x50, 0x31, 0x01, 0x5A, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC9, 0xFC,
-0x01, 0x00, 0x00, 0x1A, 0x84, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC5, 0xF4,
+0x01, 0x00, 0x00, 0x1E, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xCE, 0x1D, 0x01, 0x3D, 0xD0,
0xAD, 0x00, 0x00, 0x00, 0x00,
@@ -1121,19 +1122,20 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = {
/* Africa/Maseru */
0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x82, 0x46, 0xCA, 0xB8,
-0xCE, 0x8E, 0x6E, 0x80, 0xCF, 0x7E, 0x51, 0x70, 0x01, 0x02, 0x01, 0x00, 0x00, 0x19, 0xC8, 0x00,
-0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x5D, 0xD5,
-0x01, 0x3C, 0x9E, 0xB0, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x82, 0x46, 0xCF, 0x68,
+0xCC, 0xAE, 0x8C, 0x80, 0xCD, 0x9E, 0x6F, 0x70, 0xCE, 0x8E, 0x6E, 0x80, 0xCF, 0x7E, 0x51, 0x70,
+0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x15, 0x18, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01,
+0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x5C, 0x5D, 0xD5, 0x01, 0x3C, 0x9E, 0xB0, 0x00, 0x00, 0x00, 0x00,
/* Africa/Mbabane */
0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x82, 0x46, 0xC7, 0x58,
-0x01, 0x00, 0x00, 0x1D, 0x28, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x32, 0xD0, 0x01, 0x42,
-0x1C, 0xF0, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x82, 0x46, 0xCF, 0x68,
+0xCC, 0xAE, 0x8C, 0x80, 0xCD, 0x9E, 0x6F, 0x70, 0xCE, 0x8E, 0x6E, 0x80, 0xCF, 0x7E, 0x51, 0x70,
+0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x15, 0x18, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01,
+0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x61, 0x32, 0xD0, 0x01, 0x42, 0x1C, 0xF0, 0x00, 0x00, 0x00, 0x00,
/* Africa/Mogadishu */
0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -4056,7 +4058,7 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = {
0x50, 0x48, 0x50, 0x31, 0x01, 0x4A, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x0F, 0xB4, 0xFF,
-0x08, 0x20, 0xC1, 0x70, 0x09, 0x10, 0xA4, 0x60, 0x09, 0xAD, 0x94, 0xF0, 0x0A, 0xF0, 0x86, 0x60,
+0x07, 0x8D, 0x19, 0x70, 0x09, 0x10, 0xA4, 0x60, 0x09, 0xAD, 0x94, 0xF0, 0x0A, 0xF0, 0x86, 0x60,
0x0B, 0xE0, 0x85, 0x70, 0x0C, 0xD9, 0xA2, 0xE0, 0x0D, 0xC0, 0x67, 0x70, 0x0E, 0xB9, 0x84, 0xE0,
0x0F, 0xA9, 0x83, 0xF0, 0x10, 0x99, 0x66, 0xE0, 0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0,
0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0, 0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0,
@@ -8909,7 +8911,7 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = {
/* Asia/Novokuznetsk */
0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x1A, 0xA1, 0xF9, 0x13, 0x40,
+0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x1A, 0xAA, 0x18, 0x20, 0xC0,
0xB5, 0xA3, 0xE1, 0x20, 0x15, 0x27, 0x6F, 0x90, 0x16, 0x18, 0xA4, 0x00, 0x17, 0x08, 0xA3, 0x10,
0x17, 0xF9, 0xD7, 0x80, 0x18, 0xE9, 0xD6, 0x90, 0x19, 0xDB, 0x0B, 0x00, 0x1A, 0xCC, 0x5B, 0x90,
0x1B, 0xBC, 0x68, 0xB0, 0x1C, 0xAC, 0x59, 0xB0, 0x1D, 0x9C, 0x4A, 0xB0, 0x1E, 0x8C, 0x3B, 0xB0,
@@ -8934,7 +8936,7 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = {
0x80, 0x01, 0x09, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00,
0x00, 0x70, 0x80, 0x01, 0x09, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00,
0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x0F, 0x00, 0x00, 0x54, 0x60, 0x00, 0x15, 0x00, 0x00, 0x62,
-0x70, 0x00, 0x15, 0x4E, 0x4D, 0x54, 0x00, 0x4B, 0x52, 0x41, 0x54, 0x00, 0x4B, 0x52, 0x41, 0x53,
+0x70, 0x00, 0x15, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x52, 0x41, 0x54, 0x00, 0x4B, 0x52, 0x41, 0x53,
0x54, 0x00, 0x4E, 0x4F, 0x56, 0x53, 0x54, 0x00, 0x4E, 0x4F, 0x56, 0x54, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xDB, 0x58, 0x58, 0x01, 0x97, 0x96, 0x72, 0x00, 0x00, 0x00, 0x31, 0x4D,
@@ -16412,7 +16414,7 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = {
0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x0F, 0xB4, 0xFF,
-0x08, 0x20, 0xC1, 0x70, 0x09, 0x10, 0xA4, 0x60, 0x09, 0xAD, 0x94, 0xF0, 0x0A, 0xF0, 0x86, 0x60,
+0x07, 0x8D, 0x19, 0x70, 0x09, 0x10, 0xA4, 0x60, 0x09, 0xAD, 0x94, 0xF0, 0x0A, 0xF0, 0x86, 0x60,
0x0B, 0xE0, 0x85, 0x70, 0x0C, 0xD9, 0xA2, 0xE0, 0x0D, 0xC0, 0x67, 0x70, 0x0E, 0xB9, 0x84, 0xE0,
0x0F, 0xA9, 0x83, 0xF0, 0x10, 0x99, 0x66, 0xE0, 0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0,
0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0, 0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0,
@@ -18530,4 +18532,4 @@ const unsigned char timelib_timezone_db_data_builtin[263151] = {
0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
0x00, 0x00, 0x00, 0x00, };
-const timelib_tzdb timezonedb_builtin = { "2014.7", 582, timezonedb_idx_builtin, timelib_timezone_db_data_builtin };
+const timelib_tzdb timezonedb_builtin = { "2014.8", 582, timezonedb_idx_builtin, timelib_timezone_db_data_builtin };
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 64a40a21e4..bf29a56068 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -330,7 +330,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_offset_get, 0, 0, 2)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_method_offset_get, 0, 0, 1)
- ZEND_ARG_INFO(0, datetime)
+ ZEND_ARG_INFO(0, object)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_transitions_get, 0, 0, 1)
@@ -3848,7 +3848,7 @@ PHP_FUNCTION(timezone_name_from_abbr)
}
/* }}} */
-/* {{{ proto long timezone_offset_get(DateTimeZone object, DateTime object)
+/* {{{ proto long timezone_offset_get(DateTimeZone object, DateTimeInterface object)
Returns the timezone offset.
*/
PHP_FUNCTION(timezone_offset_get)
@@ -3858,13 +3858,13 @@ PHP_FUNCTION(timezone_offset_get)
php_date_obj *dateobj;
timelib_time_offset *offset;
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_timezone, &dateobject, date_ce_date) == FAILURE) {
+ if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_timezone, &dateobject, date_ce_interface) == FAILURE) {
RETURN_FALSE;
}
tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC);
DATE_CHECK_INITIALIZED(tzobj->initialized, DateTimeZone);
dateobj = (php_date_obj *) zend_object_store_get_object(dateobject TSRMLS_CC);
- DATE_CHECK_INITIALIZED(dateobj->time, DateTime);
+ DATE_CHECK_INITIALIZED(dateobj->time, DateTimeInterface);
switch (tzobj->type) {
case TIMELIB_ZONETYPE_ID:
diff --git a/ext/date/tests/68062.phpt b/ext/date/tests/68062.phpt
new file mode 100644
index 0000000000..ce2105abae
--- /dev/null
+++ b/ext/date/tests/68062.phpt
@@ -0,0 +1,13 @@
+--TEST--
+DateTimeZone::getOffset() accepts a DateTimeInterface object
+--FILE--
+<?php
+
+$tz = new DateTimeZone('Europe/London');
+$dt = new DateTimeImmutable('2014-09-20', $tz);
+
+echo $tz->getOffset($dt);
+echo $tz->getOffset(1);
+--EXPECTF--
+3600
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, integer given in %s
diff --git a/ext/date/tests/DateTimeZone_getOffset_variation1.phpt b/ext/date/tests/DateTimeZone_getOffset_variation1.phpt
index a86d5e10bb..ecd99d5bc3 100644
--- a/ext/date/tests/DateTimeZone_getOffset_variation1.phpt
+++ b/ext/date/tests/DateTimeZone_getOffset_variation1.phpt
@@ -112,141 +112,141 @@ fclose( $file_handle );
-- int 0 --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, integer given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, integer given in %s on line %d
bool(false)
-- int 1 --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, integer given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, integer given in %s on line %d
bool(false)
-- int 12345 --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, integer given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, integer given in %s on line %d
bool(false)
-- int -12345 --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, integer given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, integer given in %s on line %d
bool(false)
-- float 10.5 --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, double given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, double given in %s on line %d
bool(false)
-- float -10.5 --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, double given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, double given in %s on line %d
bool(false)
-- float .5 --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, double given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, double given in %s on line %d
bool(false)
-- empty array --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, array given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, array given in %s on line %d
bool(false)
-- int indexed array --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, array given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, array given in %s on line %d
bool(false)
-- associative array --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, array given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, array given in %s on line %d
bool(false)
-- nested arrays --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, array given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, array given in %s on line %d
bool(false)
-- uppercase NULL --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, null given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, null given in %s on line %d
bool(false)
-- lowercase null --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, null given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, null given in %s on line %d
bool(false)
-- lowercase true --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, boolean given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, boolean given in %s on line %d
bool(false)
-- lowercase false --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, boolean given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, boolean given in %s on line %d
bool(false)
-- uppercase TRUE --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, boolean given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, boolean given in %s on line %d
bool(false)
-- uppercase FALSE --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, boolean given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, boolean given in %s on line %d
bool(false)
-- empty string DQ --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, string given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, string given in %s on line %d
bool(false)
-- empty string SQ --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, string given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, string given in %s on line %d
bool(false)
-- string DQ --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, string given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, string given in %s on line %d
bool(false)
-- string SQ --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, string given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, string given in %s on line %d
bool(false)
-- mixed case string --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, string given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, string given in %s on line %d
bool(false)
-- heredoc --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, string given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, string given in %s on line %d
bool(false)
-- instance of classWithToString --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, object given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, object given in %s on line %d
bool(false)
-- instance of classWithoutToString --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, object given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, object given in %s on line %d
bool(false)
-- undefined var --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, null given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, null given in %s on line %d
bool(false)
-- unset var --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, null given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, null given in %s on line %d
bool(false)
-- resource --
-Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, resource given in %s on line %d
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTimeInterface, resource given in %s on line %d
bool(false)
===DONE===
diff --git a/ext/date/tests/timezone_offset_get_error.phpt b/ext/date/tests/timezone_offset_get_error.phpt
index b8ca2c1c15..c9fa25ce97 100644
--- a/ext/date/tests/timezone_offset_get_error.phpt
+++ b/ext/date/tests/timezone_offset_get_error.phpt
@@ -73,12 +73,12 @@ bool(false)
-- Testing timezone_offset_get() function with an invalid values for $datetime argument --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, object given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, object given in %s on line %d
bool(false)
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, integer given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, integer given in %s on line %d
bool(false)
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, null given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, null given in %s on line %d
bool(false)
===DONE===
diff --git a/ext/date/tests/timezone_offset_get_variation2.phpt b/ext/date/tests/timezone_offset_get_variation2.phpt
index 93311f3a6b..c83b697498 100644
--- a/ext/date/tests/timezone_offset_get_variation2.phpt
+++ b/ext/date/tests/timezone_offset_get_variation2.phpt
@@ -112,141 +112,141 @@ fclose( $file_handle );
-- int 0 --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, integer given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, integer given in %s on line %d
bool(false)
-- int 1 --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, integer given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, integer given in %s on line %d
bool(false)
-- int 12345 --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, integer given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, integer given in %s on line %d
bool(false)
-- int -12345 --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, integer given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, integer given in %s on line %d
bool(false)
-- float 10.5 --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, double given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, double given in %s on line %d
bool(false)
-- float -10.5 --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, double given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, double given in %s on line %d
bool(false)
-- float .5 --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, double given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, double given in %s on line %d
bool(false)
-- empty array --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, array given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, array given in %s on line %d
bool(false)
-- int indexed array --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, array given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, array given in %s on line %d
bool(false)
-- associative array --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, array given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, array given in %s on line %d
bool(false)
-- nested arrays --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, array given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, array given in %s on line %d
bool(false)
-- uppercase NULL --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, null given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, null given in %s on line %d
bool(false)
-- lowercase null --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, null given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, null given in %s on line %d
bool(false)
-- lowercase true --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, boolean given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, boolean given in %s on line %d
bool(false)
-- lowercase false --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, boolean given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, boolean given in %s on line %d
bool(false)
-- uppercase TRUE --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, boolean given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, boolean given in %s on line %d
bool(false)
-- uppercase FALSE --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, boolean given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, boolean given in %s on line %d
bool(false)
-- empty string DQ --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, string given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, string given in %s on line %d
bool(false)
-- empty string SQ --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, string given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, string given in %s on line %d
bool(false)
-- string DQ --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, string given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, string given in %s on line %d
bool(false)
-- string SQ --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, string given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, string given in %s on line %d
bool(false)
-- mixed case string --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, string given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, string given in %s on line %d
bool(false)
-- heredoc --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, string given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, string given in %s on line %d
bool(false)
-- instance of classWithToString --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, object given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, object given in %s on line %d
bool(false)
-- instance of classWithoutToString --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, object given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, object given in %s on line %d
bool(false)
-- undefined var --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, null given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, null given in %s on line %d
bool(false)
-- unset var --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, null given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, null given in %s on line %d
bool(false)
-- resource --
-Warning: timezone_offset_get() expects parameter 2 to be DateTime, resource given in %s on line %d
+Warning: timezone_offset_get() expects parameter 2 to be DateTimeInterface, resource given in %s on line %d
bool(false)
===DONE===
diff --git a/ext/ext_skel b/ext/ext_skel
index e6b01fd4fc..c0c398d15e 100755
--- a/ext/ext_skel
+++ b/ext/ext_skel
@@ -156,12 +156,12 @@ if test "\$PHP_$EXTNAME" != "no"; then
dnl PHP_CHECK_LIBRARY(\$LIBNAME,\$LIBSYMBOL,
dnl [
- dnl PHP_ADD_LIBRARY_WITH_PATH(\$LIBNAME, \$${EXTNAME}_DIR/lib, ${EXTNAME}_SHARED_LIBADD)
+ dnl PHP_ADD_LIBRARY_WITH_PATH(\$LIBNAME, \$${EXTNAME}_DIR/\$PHP_LIBDIR, ${EXTNAME}_SHARED_LIBADD)
dnl AC_DEFINE(HAVE_${EXTNAME}LIB,1,[ ])
dnl ],[
dnl AC_MSG_ERROR([wrong $extname lib version or lib not found])
dnl ],[
- dnl -L\$${EXTNAME}_DIR/lib -lm
+ dnl -L\$${EXTNAME}_DIR/\$PHP_LIBDIR -lm
dnl ])
dnl
dnl PHP_SUBST(${EXTNAME}_SHARED_LIBADD)
diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c
index 50055a25a7..8a141c0066 100644
--- a/ext/ldap/ldap.c
+++ b/ext/ldap/ldap.c
@@ -391,6 +391,23 @@ static int _get_lderrno(LDAP *ldap)
}
/* }}} */
+/* {{{ _set_lderrno
+ */
+static void _set_lderrno(LDAP *ldap, int lderr)
+{
+#if !HAVE_NSLDAP
+#if LDAP_API_VERSION > 2000 || HAVE_ORALDAP
+ /* New versions of OpenLDAP do it this way */
+ ldap_set_option(ldap, LDAP_OPT_ERROR_NUMBER, &lderr);
+#else
+ ldap->ld_errno = lderr;
+#endif
+#else
+ ldap_set_lderrno(ldap, lderr, NULL, NULL);
+#endif
+}
+/* }}} */
+
/* {{{ proto bool ldap_bind(resource link [, string dn [, string password]])
Bind to LDAP directory */
PHP_FUNCTION(ldap_bind)
@@ -405,18 +422,20 @@ PHP_FUNCTION(ldap_bind)
RETURN_FALSE;
}
+ ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, &link, -1, "ldap link", le_link);
+
if (ldap_bind_dn != NULL && memchr(ldap_bind_dn, '\0', ldap_bind_dnlen) != NULL) {
+ _set_lderrno(ld->link, LDAP_INVALID_CREDENTIALS);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "DN contains a null byte");
RETURN_FALSE;
}
if (ldap_bind_pw != NULL && memchr(ldap_bind_pw, '\0', ldap_bind_pwlen) != NULL) {
+ _set_lderrno(ld->link, LDAP_INVALID_CREDENTIALS);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Password contains a null byte");
RETURN_FALSE;
}
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, &link, -1, "ldap link", le_link);
-
if ((rc = ldap_bind_s(ld->link, ldap_bind_dn, ldap_bind_pw, LDAP_AUTH_SIMPLE)) != LDAP_SUCCESS) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to bind to server: %s", ldap_err2string(rc));
RETURN_FALSE;
diff --git a/ext/openssl/config0.m4 b/ext/openssl/config0.m4
index a97114f808..701e488385 100644
--- a/ext/openssl/config0.m4
+++ b/ext/openssl/config0.m4
@@ -8,6 +8,9 @@ PHP_ARG_WITH(openssl, for OpenSSL support,
PHP_ARG_WITH(kerberos, for Kerberos support,
[ --with-kerberos[=DIR] OPENSSL: Include Kerberos support], no, no)
+PHP_ARG_WITH(system-ciphers, whether to use system default cipher list instead of hardcoded value,
+[ --with-system-ciphers OPENSSL: Use system default cipher list instead of hardcoded value], no, no)
+
if test "$PHP_OPENSSL" != "no"; then
PHP_NEW_EXTENSION(openssl, openssl.c xp_ssl.c, $ext_shared)
PHP_SUBST(OPENSSL_SHARED_LIBADD)
@@ -25,4 +28,7 @@ if test "$PHP_OPENSSL" != "no"; then
], [
AC_MSG_ERROR([OpenSSL check failed. Please check config.log for more information.])
])
+ if test "$PHP_SYSTEM_CIPHERS" != "no"; then
+ AC_DEFINE(USE_OPENSSL_SYSTEM_CIPHERS,1,[ Use system default cipher list instead of hardcoded value ])
+ fi
fi
diff --git a/ext/openssl/tests/bug65729.pem b/ext/openssl/tests/bug65729.pem
index dbeed6efd3..f0d44a4c78 100644
--- a/ext/openssl/tests/bug65729.pem
+++ b/ext/openssl/tests/bug65729.pem
@@ -1,28 +1,28 @@
-----BEGIN CERTIFICATE-----
-MIICCTCCAXICCQDNMI29sowT7TANBgkqhkiG9w0BAQUFADBJMQswCQYDVQQGEwJT
+MIICCTCCAXICCQCx2JwIhbRefzANBgkqhkiG9w0BAQUFADBJMQswCQYDVQQGEwJT
RzESMBAGA1UECBMJVGVzdHZpbGxlMREwDwYDVQQKEwhkYXRpYmJhdzETMBEGA1UE
-AxQKKi50ZXN0LmNvbTAeFw0xMzA5MjEwNzUyMjRaFw0xNDA5MjEwNzUyMjRaMEkx
+AxQKKi50ZXN0LmNvbTAeFw0xNDA5MjQxMTMzNTRaFw0yNDA5MjExMTMzNTRaMEkx
CzAJBgNVBAYTAlNHMRIwEAYDVQQIEwlUZXN0dmlsbGUxETAPBgNVBAoTCGRhdGli
YmF3MRMwEQYDVQQDFAoqLnRlc3QuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
-iQKBgQCdzVnic8K5W4SVbwVuqezcTjeqVLoQ91vVNZB0Jnsuz6q3DoK03oAd1jTe
-Vd0k+MQDbXpHoc37lA4+8z/g5Bs0UXxNx+nkbFTE7Ba2/G24caI9/cOXZPG3UViD
-rtqXKL6h5/umqRG9Dt5liF2MVP9XFAesVC7B8+Ca+PbPlQoYzwIDAQABMA0GCSqG
-SIb3DQEBBQUAA4GBAAS07u/Ke+EhEHidz6CG3Qcr+zg483JKRgZFyGz+YUKyyKKy
-fmLs7JieGJxYQjOmIpj/6X9Gnb2HjIPDnI6A+MV1emXDTnnmsgf2/lZGcthhpZn2
-rMbj9bI0iH6HwOVGtp4ZJA5fB7nj3J+gWNTCQzDDOxwX36d2LL9ua+UMnk/g
+iQKBgQDBnR8DYzsN90kISI87kBvw40TQknS7/fuymWCmSrtRQLED8p2QL8PiYCZ8
+UdcFVsv+di7MJvUOzW6dRo2DCu8Rojx3ML8dAtPsQkDdaCXDnOvCTQCAqFmxa1A9
+c5kp0hbzCrucKGckb355A4NumFgX1fjQ705MfjGPgQef1ZtozQIDAQABMA0GCSqG
+SIb3DQEBBQUAA4GBAGP07nJo0pI4FdsXuAHWr97XxV4EhHopFMw6svOZ3UtsRzmW
+ScmmMdgd3c8ciVxOsztgnzvFq/nrUkw/3n/Xz/gtE7kZt9aS18SnCyyHPJcXmmUE
+NsbyZ/7srIqCSrxUkP+N//nToqHxg1pqA/A8RzOOQUAp+UIVF6Zl/kkFNgt8
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQCdzVnic8K5W4SVbwVuqezcTjeqVLoQ91vVNZB0Jnsuz6q3DoK0
-3oAd1jTeVd0k+MQDbXpHoc37lA4+8z/g5Bs0UXxNx+nkbFTE7Ba2/G24caI9/cOX
-ZPG3UViDrtqXKL6h5/umqRG9Dt5liF2MVP9XFAesVC7B8+Ca+PbPlQoYzwIDAQAB
-AoGAeyzTwKPDl5QMRejHQL57GOwlH1vLcXrjv+VzwHZZKQ0IoKM++5fCQYf29KXp
-XPahaluGW2u9sWa8R/7wGcd0Q4RtquGzsgT3+AQsIc5KfIamyOyDaRVM/ymX3fWg
-gHIU7OOzB+ihOU8sHyRIwfbk01/kmrBXLRj8E31sy3i3PIECQQDQQYE+aN7Acrdt
-yN5CaqvbkiCGjRvASlemiTzPosgOtndyp21w1gakJwKYhYDk1N6A6Qb8REMZqM/U
-wFypldV/AkEAwfq6NFuhpGL6hDA7MvlyY1KiZ0cHetPUX+PgdNqy2DA+1Sv4i7gm
-Wd/uA651K7aPXuUaf9dKtPCmZwI4M6SEsQJBALW89HTqP7niYoDEEnITdPaghxHk
-gptERUln6lGo1L1CLus3gSI/JHyMLo+7scgAnEwTD62GRKhX0Ubwt+ymfTECQAY5
-fHYnppU20+EgBxZIqOIFCc8UmWnYmE0Ha/Fz/x8u1SVUBuK84wYpSGL32yyu7ATY
-hzQo/W229zABAzqtAdECQQCUdB7IBFpPnsfv/EUBFX7X/7zAc9JpACmu9It5ju8C
-KIsMuz/02D+TQoJNjdAngBM+4AJDIaGFgTMIfaDMh5L7
+MIICXgIBAAKBgQDBnR8DYzsN90kISI87kBvw40TQknS7/fuymWCmSrtRQLED8p2Q
+L8PiYCZ8UdcFVsv+di7MJvUOzW6dRo2DCu8Rojx3ML8dAtPsQkDdaCXDnOvCTQCA
+qFmxa1A9c5kp0hbzCrucKGckb355A4NumFgX1fjQ705MfjGPgQef1ZtozQIDAQAB
+AoGADAnkAsbpxh2JKf2xAkgcpKbNAZcJsSLCwsEstEpTSWMXXqJ4T53YtTu7SOGh
+2BAkkQbyM/l8JVZ6uUbIx8wnPzqAuB2hEDQHKZVyftDyJh+54Uyz0xV0JdWGWrFh
+A+uDt/Zncx2g+qlkQG5J5nHnrd9OAns89wJXpBWA6twlsuECQQD/HC4wxOJzh1XI
+YSWHWQulOnlNgZ2zERfmJeRfJ0ncmDOV2ofxOFQ+dMJ36XghPaH52KdxqWI1yQaE
+yesx8ygFAkEAwkoF4lBuYdsXucJNDYf8o9MlBvazoriH0y26B/YozJ7iAEFqVvcC
+TN+iKDIyiRALwR6a3nzhyFYJ4xyzgSIAKQJBAMnw3seQMsnM6aTS8cgwPr2uifNG
+lTT4ZPi0KhEAosFSYhNPh6j1NAq0lnQhhgyaIywJypJ4yNtWpChdRiamGpkCQQDB
+iUExPpOmMLwCk7VzrCmS+6pftHIevpi2WU99zMy5f+969665MFb/QqniRpamh/Bd
+kGIPDPFQQbyZmqaJFNh5AkEAzy0YVbUT3C/QvstPr5i7ztj7WiW/1zJMamFwY/ZS
+1J7e7lqHgRICie5uv1Yvh3w/qmV/7lTLhmlQZd9SJMpXhg==
-----END RSA PRIVATE KEY-----
diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c
index de9e9911c1..2f81dc7e47 100644
--- a/ext/openssl/xp_ssl.c
+++ b/ext/openssl/xp_ssl.c
@@ -1476,13 +1476,16 @@ int php_openssl_setup_crypto(php_stream *stream,
}
GET_VER_OPT_STRING("ciphers", cipherlist);
+#ifndef USE_OPENSSL_SYSTEM_CIPHERS
if (!cipherlist) {
cipherlist = OPENSSL_DEFAULT_STREAM_CIPHERS;
}
- if (SSL_CTX_set_cipher_list(sslsock->ctx, cipherlist) != 1) {
- return FAILURE;
+#endif
+ if (cipherlist) {
+ if (SSL_CTX_set_cipher_list(sslsock->ctx, cipherlist) != 1) {
+ return FAILURE;
+ }
}
-
if (FAILURE == set_local_cert(sslsock->ctx, stream TSRMLS_CC)) {
return FAILURE;
}
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 8e5fcadef4..b2a3005868 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -1015,9 +1015,12 @@ static int _extension_class_string(zend_class_entry **pce TSRMLS_DC, int num_arg
int *num_classes = va_arg(args, int*);
if (((*pce)->type == ZEND_INTERNAL_CLASS) && (*pce)->info.internal.module && !strcasecmp((*pce)->info.internal.module->name, module->name)) {
- string_printf(str, "\n");
- _class_string(str, *pce, NULL, indent TSRMLS_CC);
- (*num_classes)++;
+ /* dump class if it is not an alias */
+ if (!zend_binary_strcasecmp((*pce)->name, (*pce)->name_length, hash_key->arKey, hash_key->nKeyLength-1)) {
+ string_printf(str, "\n");
+ _class_string(str, *pce, NULL, indent TSRMLS_CC);
+ (*num_classes)++;
+ }
}
return ZEND_HASH_APPLY_KEEP;
}
@@ -5395,12 +5398,24 @@ static int add_extension_class(zend_class_entry **pce TSRMLS_DC, int num_args, v
int add_reflection_class = va_arg(args, int);
if (((*pce)->type == ZEND_INTERNAL_CLASS) && (*pce)->info.internal.module && !strcasecmp((*pce)->info.internal.module->name, module->name)) {
+ const char *name;
+ int nlen;
+
+ if (zend_binary_strcasecmp((*pce)->name, (*pce)->name_length, hash_key->arKey, hash_key->nKeyLength-1)) {
+ /* This is an class alias, use alias name */
+ name = hash_key->arKey;
+ nlen = hash_key->nKeyLength-1;
+ } else {
+ /* Use class name */
+ name = (*pce)->name;
+ nlen = (*pce)->name_length;
+ }
if (add_reflection_class) {
ALLOC_ZVAL(zclass);
zend_reflection_class_factory(*pce, zclass TSRMLS_CC);
- add_assoc_zval_ex(class_array, (*pce)->name, (*pce)->name_length + 1, zclass);
+ add_assoc_zval_ex(class_array, name, nlen+1, zclass);
} else {
- add_next_index_stringl(class_array, (*pce)->name, (*pce)->name_length, 1);
+ add_next_index_stringl(class_array, name, nlen, 1);
}
}
return ZEND_HASH_APPLY_KEEP;
@@ -6083,7 +6098,7 @@ ZEND_END_ARG_INFO()
static const zend_function_entry reflection_zend_extension_functions[] = {
ZEND_ME(reflection, __clone, arginfo_reflection__void, ZEND_ACC_PRIVATE|ZEND_ACC_FINAL)
ZEND_ME(reflection_zend_extension, export, arginfo_reflection_extension_export, ZEND_ACC_STATIC|ZEND_ACC_PUBLIC)
- ZEND_ME(reflection_zend_extension, __construct, arginfo_reflection_extension___construct, 0)
+ ZEND_ME(reflection_zend_extension, __construct, arginfo_reflection_zend_extension___construct, 0)
ZEND_ME(reflection_zend_extension, __toString, arginfo_reflection__void, 0)
ZEND_ME(reflection_zend_extension, getName, arginfo_reflection__void, 0)
ZEND_ME(reflection_zend_extension, getVersion, arginfo_reflection__void, 0)
diff --git a/ext/standard/tests/streams/proc_open_bug51800.phpt b/ext/standard/tests/streams/proc_open_bug51800.phpt
new file mode 100644
index 0000000000..53cafd8555
--- /dev/null
+++ b/ext/standard/tests/streams/proc_open_bug51800.phpt
@@ -0,0 +1,95 @@
+--TEST--
+Bug #51800 proc_open on Windows hangs forever
+--SKIPIF--
+<?php
+ echo 'skip expected to fail or take too long';
+ if (getenv("SKIP_SLOW_TESTS")) {
+ die("skip slow test");
+ }
+?>
+--XFAIL--
+pipes have to be read/written simultaneously
+--FILE--
+<?php
+/* This is the wrong way to do it. The parent will block till it has read all the STDIN.
+The smaller the pipe buffer is, the longer it will take. It might even pass at the end,
+after taking inappropriately long. Pipes have to be read simultaneously in smaller chunks,
+so then the pipe buffer is emptied more often and the child has chance to continue its
+write. The behaviour might look some better if write/read in a separate thread, however
+this is much more resource greedy and complexer to integrate into the user script. */
+
+$callee = dirname(__FILE__) . "/process_proc_open_bug51800.php";
+$php = PHP_BINARY;
+$cmd = "$php $callee";
+
+$status;
+$stdout = "";
+$stderr = "";
+$pipes = array();
+
+$descriptors = array(
+ 0 => array("pipe", "rb"), // stdin
+ 1 => array("pipe", "wb"), // stdout
+ 2 => array("pipe", "wb") // stderr
+ );
+
+/* create the proc file */
+$r = file_put_contents($callee, '<?php
+
+$how_much = 10000;
+
+$data0 = str_repeat("a", $how_much);
+$data1 = str_repeat("b", $how_much);
+fwrite(STDOUT, $data0);
+fwrite(STDERR, $data1);
+
+exit(0);
+');
+
+if (!$r) {
+ die("couldn't create helper script '$callee'");
+}
+
+$process = proc_open($cmd, $descriptors, $pipes);
+
+if (is_resource($process))
+{
+ fclose($pipes[0]);
+
+ while (!feof($pipes[1]))
+ $stdout .= fread($pipes[1], 1024);
+ fclose($pipes[1]);
+
+ while (!feof($pipes[2]))
+ $stderr .= fread($pipes[2], 1024);
+ fclose($pipes[2]);
+
+ $status = proc_close($process);
+}
+
+var_dump(array(
+ "status" => $status,
+ "stdout" => $stdout,
+ "stderr" => $stderr,
+), strlen($stdout), strlen($stderr));
+
+?>
+===DONE===
+--CLEAN--
+<?php
+$callee = dirname(__FILE__) . "/process_proc_open_bug51800.php";
+unlink($callee);
+?>
+--EXPECTF--
+array(3) {
+ ["status"]=>
+ int(0)
+ ["stdout"]=>
+ string(10000) "a%s"
+ ["stderr"]=>
+ string(10000) "b%s"
+}
+int(10000)
+int(10000)
+===DONE===
+
diff --git a/ext/standard/tests/streams/proc_open_bug51800_right.phpt b/ext/standard/tests/streams/proc_open_bug51800_right.phpt
new file mode 100644
index 0000000000..b14fed2e5d
--- /dev/null
+++ b/ext/standard/tests/streams/proc_open_bug51800_right.phpt
@@ -0,0 +1,78 @@
+--TEST--
+Bug #51800 proc_open on Windows hangs forever, the right way to do it
+--FILE--
+<?php
+$callee = dirname(__FILE__) . "/process_proc_open_bug51800_right.php";
+$php = PHP_BINARY;
+$cmd = "$php $callee";
+
+$status;
+$stdout = "";
+$stderr = "";
+$pipes = array();
+
+$descriptors = array(
+ 0 => array("pipe", "rb"), // stdin
+ 1 => array("pipe", "wb"), // stdout
+ 2 => array("pipe", "wb") // stderr
+ );
+
+/* create the proc file */
+$r = file_put_contents($callee, '<?php
+
+$how_much = 10000;
+
+$data0 = str_repeat("a", $how_much);
+$data1 = str_repeat("b", $how_much);
+fwrite(STDOUT, $data0);
+fwrite(STDERR, $data1);
+
+exit(0);
+');
+
+if (!$r) {
+ die("couldn't create helper script '$callee'");
+}
+
+$process = proc_open($cmd, $descriptors, $pipes);
+
+if (is_resource($process))
+{
+ fclose($pipes[0]);
+
+ while (!feof($pipes[1]) || !feof($pipes[2])) {
+ $stdout .= fread($pipes[1], 1024);
+ $stderr .= fread($pipes[2], 1024);
+ }
+ fclose($pipes[1]);
+ fclose($pipes[2]);
+
+ $status = proc_close($process);
+}
+
+var_dump(array(
+ "status" => $status,
+ "stdout" => $stdout,
+ "stderr" => $stderr,
+), strlen($stdout), strlen($stderr));
+
+?>
+===DONE===
+--CLEAN--
+<?php
+$callee = dirname(__FILE__) . "/process_proc_open_bug51800_right.php";
+unlink($callee);
+?>
+--EXPECTF--
+array(3) {
+ ["status"]=>
+ int(0)
+ ["stdout"]=>
+ string(10000) "a%s"
+ ["stderr"]=>
+ string(10000) "b%s"
+}
+int(10000)
+int(10000)
+===DONE===
+
diff --git a/ext/standard/tests/streams/proc_open_bug51800_right2.phpt b/ext/standard/tests/streams/proc_open_bug51800_right2.phpt
new file mode 100644
index 0000000000..1e742745c1
--- /dev/null
+++ b/ext/standard/tests/streams/proc_open_bug51800_right2.phpt
@@ -0,0 +1,84 @@
+--TEST--
+Bug #51800 proc_open on Windows hangs forever, the right way to do it with more data
+--FILE--
+<?php
+$callee = dirname(__FILE__) . "/process_proc_open_bug51800_right2.php";
+$php = PHP_BINARY;
+$cmd = "$php $callee";
+
+$status;
+$stdout = "";
+$stderr = "";
+$pipes = array();
+
+$descriptors = array(
+ 0 => array("pipe", "rb"), // stdin
+ 1 => array("pipe", "wb"), // stdout
+ 2 => array("pipe", "wb") // stderr
+ );
+
+/* create the proc file */
+$r = file_put_contents($callee, '<?php
+$how_much = 1000000;
+
+$data0 = str_repeat("a", $how_much);
+$data1 = str_repeat("b", $how_much);
+$i0 = $i1 = 0;
+$step = 1024;
+
+while ($i0 < strlen($data0) && $i1 < strlen($data1)) {
+ fwrite(STDOUT, substr($data0, $i0, $step));
+ fwrite(STDERR, substr($data1, $i1, $step));
+ $i0 += $step;
+ $i1 += $step;
+}
+
+exit(0);
+');
+
+if (!$r) {
+ die("couldn't create helper script '$callee'");
+}
+
+$process = proc_open($cmd, $descriptors, $pipes);
+
+if (is_resource($process))
+{
+ fclose($pipes[0]);
+
+ while (!feof($pipes[1]) || !feof($pipes[2])) {
+ $stdout .= fread($pipes[1], 1024);
+ $stderr .= fread($pipes[2], 1024);
+ }
+ fclose($pipes[1]);
+ fclose($pipes[2]);
+
+ $status = proc_close($process);
+}
+
+var_dump(array(
+ "status" => $status,
+ "stdout" => $stdout,
+ "stderr" => $stderr,
+), strlen($stdout), strlen($stderr));
+
+?>
+===DONE===
+--CLEAN--
+<?php
+$callee = dirname(__FILE__) . "/process_proc_open_bug51800_right2.php";
+unlink($callee);
+?>
+--EXPECTF--
+array(3) {
+ ["status"]=>
+ int(0)
+ ["stdout"]=>
+ string(1000000) "a%s"
+ ["stderr"]=>
+ string(1000000) "b%s"
+}
+int(1000000)
+int(1000000)
+===DONE===
+
diff --git a/ext/standard/tests/streams/proc_open_bug60120.phpt b/ext/standard/tests/streams/proc_open_bug60120.phpt
new file mode 100644
index 0000000000..8768257a2e
--- /dev/null
+++ b/ext/standard/tests/streams/proc_open_bug60120.phpt
@@ -0,0 +1,71 @@
+--TEST--
+Bug #60120 proc_open hangs with stdin/out with 2048+ bytes
+--FILE--
+<?php
+error_reporting(E_ALL);
+
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ $cmd = PHP_BINARY . ' -n -r "fwrite(STDOUT, $in = file_get_contents(\'php://stdin\')); fwrite(STDERR, $in);"';
+} else {
+ $cmd = PHP_BINARY . ' -n -r \'fwrite(STDOUT, $in = file_get_contents("php://stdin")); fwrite(STDERR, $in);\'';
+}
+$descriptors = array(array('pipe', 'r'), array('pipe', 'w'), array('pipe', 'w'));
+$stdin = str_repeat('*', 1024 * 16) . '!';
+$stdin = str_repeat('*', 2049 );
+
+$options = array_merge(array('suppress_errors' => true, 'binary_pipes' => true, 'bypass_shell' => false));
+$process = proc_open($cmd, $descriptors, $pipes, getcwd(), array(), $options);
+
+foreach ($pipes as $pipe) {
+ stream_set_blocking($pipe, false);
+}
+$writePipes = array($pipes[0]);
+$stdinLen = strlen($stdin);
+$stdinOffset = 0;
+
+unset($pipes[0]);
+
+while ($pipes || $writePipes) {
+ $r = $pipes;
+ $w = $writePipes;
+ $e = null;
+ $n = stream_select($r, $w, $e, 60);
+
+ if (false === $n) {
+ break;
+ } elseif ($n === 0) {
+ proc_terminate($process);
+
+ }
+ if ($w) {
+ $written = fwrite($writePipes[0], (binary)substr($stdin, $stdinOffset), 8192);
+ if (false !== $written) {
+ $stdinOffset += $written;
+ }
+ if ($stdinOffset >= $stdinLen) {
+ fclose($writePipes[0]);
+ $writePipes = null;
+ }
+ }
+
+ foreach ($r as $pipe) {
+ $type = array_search($pipe, $pipes);
+ $data = fread($pipe, 8192);
+ var_dump($data);
+ if (false === $data || feof($pipe)) {
+ fclose($pipe);
+ unset($pipes[$type]);
+ }
+ }
+}
+
+
+?>
+===DONE===
+--EXPECTF--
+string(2049) "%s"
+string(2049) "%s"
+string(0) ""
+string(0) ""
+===DONE===
+
diff --git a/ext/standard/tests/streams/proc_open_bug64438.phpt b/ext/standard/tests/streams/proc_open_bug64438.phpt
new file mode 100644
index 0000000000..b3857d09d4
--- /dev/null
+++ b/ext/standard/tests/streams/proc_open_bug64438.phpt
@@ -0,0 +1,70 @@
+--TEST--
+Bug #64438 proc_open hangs with stdin/out with 4097+ bytes
+--FILE--
+<?php
+
+error_reporting(E_ALL);
+
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ $cmd = PHP_BINARY . ' -n -r "fwrite(STDOUT, $in = file_get_contents(\'php://stdin\')); fwrite(STDERR, $in);"';
+} else {
+ $cmd = PHP_BINARY . ' -n -r \'fwrite(STDOUT, $in = file_get_contents("php://stdin")); fwrite(STDERR, $in);\'';
+}
+$descriptors = array(array('pipe', 'r'), array('pipe', 'w'), array('pipe', 'w'));
+$stdin = str_repeat('*', 4097);
+
+$options = array_merge(array('suppress_errors' => true, 'binary_pipes' => true, 'bypass_shell' => false));
+$process = proc_open($cmd, $descriptors, $pipes, getcwd(), array(), $options);
+
+foreach ($pipes as $pipe) {
+ stream_set_blocking($pipe, false);
+}
+$writePipes = array($pipes[0]);
+$stdinLen = strlen($stdin);
+$stdinOffset = 0;
+
+unset($pipes[0]);
+
+while ($pipes || $writePipes) {
+ $r = $pipes;
+ $w = $writePipes;
+ $e = null;
+ $n = stream_select($r, $w, $e, 60);
+
+ if (false === $n) {
+ break;
+ } elseif ($n === 0) {
+ proc_terminate($process);
+
+ }
+ if ($w) {
+ $written = fwrite($writePipes[0], (binary)substr($stdin, $stdinOffset), 8192);
+ if (false !== $written) {
+ $stdinOffset += $written;
+ }
+ if ($stdinOffset >= $stdinLen) {
+ fclose($writePipes[0]);
+ $writePipes = null;
+ }
+ }
+
+ foreach ($r as $pipe) {
+ $type = array_search($pipe, $pipes);
+ $data = fread($pipe, 8192);
+ var_dump($data);
+ if (false === $data || feof($pipe)) {
+ fclose($pipe);
+ unset($pipes[$type]);
+ }
+ }
+}
+
+?>
+===DONE===
+--EXPECTF--
+string(4097) "%s"
+string(4097) "%s"
+string(0) ""
+string(0) ""
+===DONE===
+
diff --git a/ext/standard/tests/strings/setlocale_variation2.phpt b/ext/standard/tests/strings/setlocale_variation2.phpt
index 038ba58c5e..5ebdfe8d50 100644
--- a/ext/standard/tests/strings/setlocale_variation2.phpt
+++ b/ext/standard/tests/strings/setlocale_variation2.phpt
@@ -18,8 +18,11 @@ if (substr(PHP_OS, 0, 3) == 'WIN') {
/* setlocale() to set all available locales in the system and check the success count */
echo "*** Testing setlocale() : usage variations ***\n";
-function good_locale($locale) {
- return $locale !== 'tt_RU@iqtelif.UTF-8';
+function good_locale($locale) {
+ /**
+ * Note: no_NO is a bogus locale and should not be used, see https://bugzilla.redhat.com/971416
+ **/
+ return $locale !== 'tt_RU@iqtelif.UTF-8' && $locale !== 'no_NO.ISO-8859-1';
}
/* Prototype : array list_system_locales( void )
diff --git a/main/streams/plain_wrapper.c b/main/streams/plain_wrapper.c
index 87312b9ef8..69c6a3ce26 100644
--- a/main/streams/plain_wrapper.c
+++ b/main/streams/plain_wrapper.c
@@ -342,6 +342,34 @@ static size_t php_stdiop_read(php_stream *stream, char *buf, size_t count TSRMLS
assert(data != NULL);
if (data->fd >= 0) {
+#ifdef PHP_WIN32
+ php_stdio_stream_data *self = (php_stdio_stream_data*)stream->abstract;
+
+ if (self->is_pipe || self->is_process_pipe) {
+ HANDLE ph = (HANDLE)_get_osfhandle(data->fd);
+ int retry = 0;
+ DWORD avail_read = 0;
+
+ do {
+ /* Look ahead to get the available data amount to read. Do the same
+ as read() does, however not blocking forever. In case it failed,
+ no data will be read (better than block). */
+ if (!PeekNamedPipe(ph, NULL, 0, NULL, &avail_read, NULL)) {
+ break;
+ }
+ /* If there's nothing to read, wait in 100ms periods. */
+ if (0 == avail_read) {
+ usleep(100000);
+ }
+ } while (0 == avail_read && retry++ < 320);
+
+ /* Reduce the required data amount to what is available, otherwise read()
+ will block.*/
+ if (avail_read < count) {
+ count = avail_read;
+ }
+ }
+#endif
ret = read(data->fd, buf, count);
if (ret == (size_t)-1 && errno == EINTR) {
diff --git a/sapi/cli/tests/016.phpt b/sapi/cli/tests/016.phpt
index 31c1a40e4a..9c28d15a30 100644
--- a/sapi/cli/tests/016.phpt
+++ b/sapi/cli/tests/016.phpt
@@ -59,8 +59,6 @@ foreach ($codes as $key => $code) {
echo "\nDone\n";
?>
---XFAIL--
-https://bugs.php.net/bug.php?id=55496
--EXPECTF--
--------------
Snippet no. 1:
diff --git a/sapi/fpm/fpm/fpm_sockets.c b/sapi/fpm/fpm/fpm_sockets.c
index e056565ea4..da14d63d8c 100644
--- a/sapi/fpm/fpm/fpm_sockets.c
+++ b/sapi/fpm/fpm/fpm_sockets.c
@@ -39,29 +39,6 @@ struct listening_socket_s {
static struct fpm_array_s sockets_list;
-static int fpm_sockets_resolve_af_inet(char *node, char *service, struct sockaddr_in *addr) /* {{{ */
-{
- struct addrinfo *res;
- struct addrinfo hints;
- int ret;
-
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = AF_INET;
- ret = getaddrinfo(node, service, &hints, &res);
-
- if (ret != 0) {
- zlog(ZLOG_ERROR, "can't resolve hostname '%s%s%s': getaddrinfo said: %s%s%s\n",
- node, service ? ":" : "", service ? service : "",
- gai_strerror(ret), ret == EAI_SYSTEM ? ", system error: " : "", ret == EAI_SYSTEM ? strerror(errno) : "");
- return -1;
- }
-
- *addr = *(struct sockaddr_in *) res->ai_addr;
- freeaddrinfo(res);
- return 0;
-}
-/* }}} */
-
enum { FPM_GET_USE_SOCKET = 1, FPM_STORE_SOCKET = 2, FPM_STORE_USE_SOCKET = 3 };
static void fpm_sockets_cleanup(int which, void *arg) /* {{{ */
@@ -98,14 +75,23 @@ static void fpm_sockets_cleanup(int which, void *arg) /* {{{ */
}
/* }}} */
+static void *fpm_get_in_addr(struct sockaddr *sa) /* {{{ */
+{
+ if (sa->sa_family == AF_INET) {
+ return &(((struct sockaddr_in*)sa)->sin_addr);
+ }
+
+ return &(((struct sockaddr_in6*)sa)->sin6_addr);
+}
+/* }}} */
+
static int fpm_sockets_hash_op(int sock, struct sockaddr *sa, char *key, int type, int op) /* {{{ */
{
if (key == NULL) {
switch (type) {
case FPM_AF_INET : {
- struct sockaddr_in *sa_in = (struct sockaddr_in *) sa;
- key = alloca(sizeof("xxx.xxx.xxx.xxx:ppppp"));
- sprintf(key, "%u.%u.%u.%u:%u", IPQUAD(&sa_in->sin_addr), (unsigned int) ntohs(sa_in->sin_port));
+ key = alloca(INET6_ADDRSTRLEN);
+ inet_ntop(sa->sa_family, fpm_get_in_addr(sa), key, sizeof key);
break;
}
@@ -254,11 +240,14 @@ enum fpm_address_domain fpm_sockets_domain_from_address(char *address) /* {{{ */
static int fpm_socket_af_inet_listening_socket(struct fpm_worker_pool_s *wp) /* {{{ */
{
- struct sockaddr_in sa_in;
+ struct addrinfo hints, *servinfo, *p;
char *dup_address = strdup(wp->config->listen_address);
- char *port_str = strchr(dup_address, ':');
+ char *port_str = strrchr(dup_address, ':');
char *addr = NULL;
+ int addr_len;
int port = 0;
+ int sock;
+ int status;
if (port_str) { /* this is host:port pair */
*port_str++ = '\0';
@@ -274,23 +263,35 @@ static int fpm_socket_af_inet_listening_socket(struct fpm_worker_pool_s *wp) /*
return -1;
}
- memset(&sa_in, 0, sizeof(sa_in));
-
- if (addr) {
- sa_in.sin_addr.s_addr = inet_addr(addr);
- if (sa_in.sin_addr.s_addr == INADDR_NONE) { /* do resolve */
- if (0 > fpm_sockets_resolve_af_inet(addr, NULL, &sa_in)) {
- return -1;
- }
- zlog(ZLOG_NOTICE, "address '%s' resolved as %u.%u.%u.%u", addr, IPQUAD(&sa_in.sin_addr));
+ // strip brackets from address for getaddrinfo
+ if (addr != NULL) {
+ addr_len = strlen(addr);
+ if (addr[0] == '[' && addr[addr_len - 1] == ']') {
+ addr[addr_len - 1] = '\0';
+ addr++;
}
- } else {
- sa_in.sin_addr.s_addr = htonl(INADDR_ANY);
}
- sa_in.sin_family = AF_INET;
- sa_in.sin_port = htons(port);
+
+ memset(&hints, 0, sizeof hints);
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+
+ if ((status = getaddrinfo(addr, port_str, &hints, &servinfo)) != 0) {
+ zlog(ZLOG_ERROR, "getaddrinfo: %s\n", gai_strerror(status));
+ return -1;
+ }
+
free(dup_address);
- return fpm_sockets_get_listening_socket(wp, (struct sockaddr *) &sa_in, sizeof(struct sockaddr_in));
+
+ for (p = servinfo; p != NULL; p = p->ai_next) {
+ if ((sock = fpm_sockets_get_listening_socket(wp, p->ai_addr, p->ai_addrlen)) != -1) {
+ break;
+ }
+ }
+
+ freeaddrinfo(servinfo);
+
+ return sock;
}
/* }}} */
diff --git a/sapi/fpm/fpm/fpm_sockets.h b/sapi/fpm/fpm/fpm_sockets.h
index 121c016a7b..446c78e410 100644
--- a/sapi/fpm/fpm/fpm_sockets.h
+++ b/sapi/fpm/fpm/fpm_sockets.h
@@ -45,10 +45,4 @@ static inline int fd_set_blocked(int fd, int blocked) /* {{{ */
}
/* }}} */
-#define IPQUAD(sin_addr) \
- (unsigned int) ((unsigned char *) &(sin_addr)->s_addr)[0], \
- (unsigned int) ((unsigned char *) &(sin_addr)->s_addr)[1], \
- (unsigned int) ((unsigned char *) &(sin_addr)->s_addr)[2], \
- (unsigned int) ((unsigned char *) &(sin_addr)->s_addr)[3]
-
#endif
diff --git a/sapi/fpm/php-fpm.conf.in b/sapi/fpm/php-fpm.conf.in
index c5f4abc59c..631bc46f42 100644
--- a/sapi/fpm/php-fpm.conf.in
+++ b/sapi/fpm/php-fpm.conf.in
@@ -152,6 +152,8 @@ group = @php_fpm_group@
; Valid syntaxes are:
; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on
; a specific port;
+; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
+; a specific port;
; 'port' - to listen on a TCP socket to all addresses on a
; specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
diff --git a/sapi/fpm/tests/003.phpt b/sapi/fpm/tests/003.phpt
new file mode 100644
index 0000000000..389cb2401e
--- /dev/null
+++ b/sapi/fpm/tests/003.phpt
@@ -0,0 +1,53 @@
+--TEST--
+FPM: Test IPv6 support
+--SKIPIF--
+<?php include "skipif.inc"; ?>
+--FILE--
+<?php
+
+include "include.inc";
+
+$logfile = dirname(__FILE__).'/php-fpm.log.tmp';
+
+$cfg = <<<EOT
+[global]
+error_log = $logfile
+[unconfined]
+listen = [::1]:9000
+pm = dynamic
+pm.max_children = 5
+pm.start_servers = 2
+pm.min_spare_servers = 1
+pm.max_spare_servers = 3
+EOT;
+
+$fpm = run_fpm($cfg, $tail);
+if (is_resource($fpm)) {
+ var_dump(fgets($tail));
+ var_dump(fgets($tail));
+ $i = 0;
+ while (($i++ < 30) && !($fp = fsockopen('[::1]', 9000))) {
+ usleep(10000);
+ }
+ if ($fp) {
+ echo "Done\n";
+ fclose($fp);
+ }
+ proc_terminate($fpm);
+ stream_get_contents($tail);
+ fclose($tail);
+ proc_close($fpm);
+}
+
+?>
+--EXPECTF--
+string(%d) "[%d-%s-%d %d:%d:%d] NOTICE: fpm is running, pid %d
+"
+string(%d) "[%d-%s-%d %d:%d:%d] NOTICE: ready to handle connections
+"
+Done
+--CLEAN--
+<?php
+ $logfile = dirname(__FILE__).'/php-fpm.log.tmp';
+ @unlink($logfile);
+?>
diff --git a/sapi/litespeed/lsapi_main.c b/sapi/litespeed/lsapi_main.c
index 789ebf2460..425d638f9e 100644
--- a/sapi/litespeed/lsapi_main.c
+++ b/sapi/litespeed/lsapi_main.c
@@ -69,7 +69,7 @@
#define SAPI_LSAPI_MAX_HEADER_LENGTH 2048
-static int lsapi_mode = 1;
+static int lsapi_mode = 0;
static char *php_self = "";
static char *script_filename = "";
static int source_highlight = 0;
@@ -1053,6 +1053,7 @@ int main( int argc, char * argv[] )
LSAPI_Init();
LSAPI_Init_Env_Parameters( NULL );
+ lsapi_mode = 1;
slow_script_msec = LSAPI_Get_Slow_Req_Msecs();