diff --git a/.gitignore b/.gitignore index b9dd252267f..7f4f814050c 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 61a1688b3c9..af9007732bc 100644 --- a/EXTENSIONS +++ b/EXTENSIONS @@ -385,6 +385,12 @@ MAINTENANCE: Maintained STATUS: Working SINCE: 4.0.4 ------------------------------------------------------------------------------- +EXTENSION: hash +PRIMARY MAINTAINER: Sara Golemon , Mike Wallner , Anatol Belski +MAINTENANCE: Maintained +STATUS: Working +SINCE: 5.1.2 +------------------------------------------------------------------------------- EXTENSION: iconv PRIMARY MAINTAINER: Moriyoshi Koizumi MAINTENANCE: Maintained diff --git a/NEWS b/NEWS index a4b0da49a0d..4ae2e28e8be 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 00000000000..c56e70a112d --- /dev/null +++ b/Zend/tests/bug68118.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #68118: $a->foo .= 'test'; can leave $a->foo undefined +--FILE-- +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 c7adf38f3b7..a5577d0b453 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 a23104f68c0..98e7b2292cb 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 64a40a21e44..bf29a560687 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 00000000000..ce2105abae5 --- /dev/null +++ b/ext/date/tests/68062.phpt @@ -0,0 +1,13 @@ +--TEST-- +DateTimeZone::getOffset() accepts a DateTimeInterface object +--FILE-- +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 a86d5e10bbd..ecd99d5bc36 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 b8ca2c1c15b..c9fa25ce97e 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 93311f3a6b9..c83b697498c 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 e6b01fd4fc6..c0c398d15ec 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 50055a25a75..8a141c00666 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 a97114f8085..701e4883854 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 dbeed6efd30..f0d44a4c780 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 de9e9911c1c..2f81dc7e47b 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 8e5fcadef43..b2a30058688 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 00000000000..53cafd85551 --- /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-- + +--XFAIL-- +pipes have to be read/written simultaneously +--FILE-- + array("pipe", "rb"), // stdin + 1 => array("pipe", "wb"), // stdout + 2 => array("pipe", "wb") // stderr + ); + +/* create the proc file */ +$r = file_put_contents($callee, ' $status, + "stdout" => $stdout, + "stderr" => $stderr, +), strlen($stdout), strlen($stderr)); + +?> +===DONE=== +--CLEAN-- + +--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 00000000000..b14fed2e5df --- /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-- + array("pipe", "rb"), // stdin + 1 => array("pipe", "wb"), // stdout + 2 => array("pipe", "wb") // stderr + ); + +/* create the proc file */ +$r = file_put_contents($callee, ' $status, + "stdout" => $stdout, + "stderr" => $stderr, +), strlen($stdout), strlen($stderr)); + +?> +===DONE=== +--CLEAN-- + +--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 00000000000..1e742745c1e --- /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-- + array("pipe", "rb"), // stdin + 1 => array("pipe", "wb"), // stdout + 2 => array("pipe", "wb") // stderr + ); + +/* create the proc file */ +$r = file_put_contents($callee, ' $status, + "stdout" => $stdout, + "stderr" => $stderr, +), strlen($stdout), strlen($stderr)); + +?> +===DONE=== +--CLEAN-- + +--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 00000000000..8768257a2ea --- /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-- + 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 00000000000..b3857d09d42 --- /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-- + 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 038ba58c5ec..5ebdfe8d507 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 87312b9ef82..69c6a3ce266 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 31c1a40e4af..9c28d15a300 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 e056565ea41..da14d63d8c3 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 121c016a7b8..446c78e410a 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 c5f4abc59ca..631bc46f42a 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 00000000000..389cb2401ef --- /dev/null +++ b/sapi/fpm/tests/003.phpt @@ -0,0 +1,53 @@ +--TEST-- +FPM: Test IPv6 support +--SKIPIF-- + +--FILE-- + +--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-- + diff --git a/sapi/litespeed/lsapi_main.c b/sapi/litespeed/lsapi_main.c index 789ebf24607..425d638f9ef 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();