diff options
Diffstat (limited to 'ext')
84 files changed, 1285 insertions, 1025 deletions
diff --git a/ext/curl/interface.c b/ext/curl/interface.c index a51c03f47f..bf8d2f00eb 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -1345,6 +1345,7 @@ static size_t curl_write(char *data, size_t size, size_t nmemb, void *ctx) php_error_docref(NULL, E_WARNING, "Could not call the CURLOPT_WRITEFUNCTION"); length = -1; } else if (!Z_ISUNDEF(retval)) { + _php_curl_verify_handlers(ch, 1); if (Z_TYPE(retval) != IS_LONG) { convert_to_long_ex(&retval); } @@ -1397,6 +1398,7 @@ static int curl_fnmatch(void *ctx, const char *pattern, const char *string) if (error == FAILURE) { php_error_docref(NULL, E_WARNING, "Cannot call the CURLOPT_FNMATCH_FUNCTION"); } else if (!Z_ISUNDEF(retval)) { + _php_curl_verify_handlers(ch, 1); if (Z_TYPE(retval) != IS_LONG) { convert_to_long_ex(&retval); } @@ -1456,6 +1458,7 @@ static size_t curl_progress(void *clientp, double dltotal, double dlnow, double if (error == FAILURE) { php_error_docref(NULL, E_WARNING, "Cannot call the CURLOPT_PROGRESSFUNCTION"); } else if (!Z_ISUNDEF(retval)) { + _php_curl_verify_handlers(ch, 1); if (Z_TYPE(retval) != IS_LONG) { convert_to_long_ex(&retval); } @@ -1524,6 +1527,7 @@ static size_t curl_read(char *data, size_t size, size_t nmemb, void *ctx) length = CURL_READFUNC_ABORT; #endif } else if (!Z_ISUNDEF(retval)) { + _php_curl_verify_handlers(ch, 1); if (Z_TYPE(retval) == IS_STRING) { length = MIN((int) (size * nmemb), Z_STRLEN(retval)); memcpy(data, Z_STRVAL(retval), length); @@ -1589,6 +1593,7 @@ static size_t curl_write_header(char *data, size_t size, size_t nmemb, void *ctx php_error_docref(NULL, E_WARNING, "Could not call the CURLOPT_HEADERFUNCTION"); length = -1; } else if (!Z_ISUNDEF(retval)) { + _php_curl_verify_handlers(ch, 1); if (Z_TYPE(retval) != IS_LONG) { convert_to_long_ex(&retval); } diff --git a/ext/curl/tests/bug69316.phpt b/ext/curl/tests/bug69316.phpt new file mode 100644 index 0000000000..16a655eef8 --- /dev/null +++ b/ext/curl/tests/bug69316.phpt @@ -0,0 +1,45 @@ +--TEST-- +Bug #69316: Use-after-free in php_curl related to CURLOPT_FILE/_INFILE/_WRITEHEADER +--SKIPIF-- +<?php include 'skipif.inc'; ?> +--FILE-- +<?php + function hdr_callback($ch, $data) { + // close the stream, causing the FILE structure to be free()'d + if($GLOBALS['f_file']) { + fclose($GLOBALS['f_file']); $GLOBALS['f_file'] = 0; + + // cause an allocation of approx the same size as a FILE structure, size varies a bit depending on platform/libc + $FILE_size = (PHP_INT_SIZE == 4 ? 0x160 : 0x238); + curl_setopt($ch, CURLOPT_COOKIE, str_repeat("a", $FILE_size - 1)); + } + return strlen($data); + } + + include 'server.inc'; + $host = curl_cli_server_start(); + $temp_file = dirname(__FILE__) . '/body.tmp'; + $url = "{$host}/get.php?test=getpost"; + $ch = curl_init(); + $f_file = fopen($temp_file, "w") or die("failed to open file\n"); + curl_setopt($ch, CURLOPT_BUFFERSIZE, 10); + curl_setopt($ch, CURLOPT_HEADERFUNCTION, "hdr_callback"); + curl_setopt($ch, CURLOPT_FILE, $f_file); + curl_setopt($ch, CURLOPT_URL, $url); + curl_exec($ch); + curl_close($ch); +?> +===DONE=== +--CLEAN-- +<?php +unlink(dirname(__FILE__) . '/body.tmp'); +?> +--EXPECTF-- +Warning: curl_exec(): CURLOPT_FILE resource has gone away, resetting to default in %s on line %d +array(1) { + ["test"]=> + string(7) "getpost" +} +array(0) { +} +===DONE=== diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h index 4efb251910..be13c3c750 100644 --- a/ext/date/lib/timezonedb.h +++ b/ext/date/lib/timezonedb.h @@ -193,398 +193,398 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[583] = { { "America/Santa_Isabel" , 0x01391C }, { "America/Santarem" , 0x013CBF }, { "America/Santiago" , 0x013DC4 }, - { "America/Santo_Domingo" , 0x014094 }, - { "America/Sao_Paulo" , 0x01415A }, - { "America/Scoresbysund" , 0x014469 }, - { "America/Shiprock" , 0x014757 }, - { "America/Sitka" , 0x014AD0 }, - { "America/St_Barthelemy" , 0x014E58 }, - { "America/St_Johns" , 0x014EAD }, - { "America/St_Kitts" , 0x015400 }, - { "America/St_Lucia" , 0x015455 }, - { "America/St_Thomas" , 0x0154AA }, - { "America/St_Vincent" , 0x0154FF }, - { "America/Swift_Current" , 0x015554 }, - { "America/Tegucigalpa" , 0x015675 }, - { "America/Thule" , 0x0156F4 }, - { "America/Thunder_Bay" , 0x01593B }, - { "America/Tijuana" , 0x015C84 }, - { "America/Toronto" , 0x01601D }, - { "America/Tortola" , 0x01653D }, - { "America/Vancouver" , 0x016592 }, - { "America/Virgin" , 0x0169CF }, - { "America/Whitehorse" , 0x016A24 }, - { "America/Winnipeg" , 0x016D41 }, - { "America/Yakutat" , 0x017181 }, - { "America/Yellowknife" , 0x0174EC }, - { "Antarctica/Casey" , 0x0177FC }, - { "Antarctica/Davis" , 0x01789A }, - { "Antarctica/DumontDUrville" , 0x01793B }, - { "Antarctica/Macquarie" , 0x0179CC }, - { "Antarctica/Mawson" , 0x017C19 }, - { "Antarctica/McMurdo" , 0x017C95 }, - { "Antarctica/Palmer" , 0x018040 }, - { "Antarctica/Rothera" , 0x018283 }, - { "Antarctica/South_Pole" , 0x0182F9 }, - { "Antarctica/Syowa" , 0x018677 }, - { "Antarctica/Troll" , 0x0186E5 }, - { "Antarctica/Vostok" , 0x0188B7 }, - { "Arctic/Longyearbyen" , 0x018928 }, - { "Asia/Aden" , 0x018C5A }, - { "Asia/Almaty" , 0x018CAF }, - { "Asia/Amman" , 0x018E2E }, - { "Asia/Anadyr" , 0x0190E4 }, - { "Asia/Aqtau" , 0x0192E6 }, - { "Asia/Aqtobe" , 0x0194E5 }, - { "Asia/Ashgabat" , 0x01969D }, - { "Asia/Ashkhabad" , 0x0197BA }, - { "Asia/Baghdad" , 0x0198D7 }, - { "Asia/Bahrain" , 0x019A4C }, - { "Asia/Baku" , 0x019AB2 }, - { "Asia/Bangkok" , 0x019D9A }, - { "Asia/Beirut" , 0x019DEF }, - { "Asia/Bishkek" , 0x01A0FC }, - { "Asia/Brunei" , 0x01A2A8 }, - { "Asia/Calcutta" , 0x01A30A }, - { "Asia/Chita" , 0x01A383 }, - { "Asia/Choibalsan" , 0x01A598 }, - { "Asia/Chongqing" , 0x01A7FF }, - { "Asia/Chungking" , 0x01A89F }, - { "Asia/Colombo" , 0x01A93F }, - { "Asia/Dacca" , 0x01A9DB }, - { "Asia/Damascus" , 0x01AA81 }, - { "Asia/Dhaka" , 0x01ADD1 }, - { "Asia/Dili" , 0x01AE77 }, - { "Asia/Dubai" , 0x01AF01 }, - { "Asia/Dushanbe" , 0x01AF56 }, - { "Asia/Gaza" , 0x01B059 }, - { "Asia/Harbin" , 0x01B3AC }, - { "Asia/Hebron" , 0x01B44C }, - { "Asia/Ho_Chi_Minh" , 0x01B7A8 }, - { "Asia/Hong_Kong" , 0x01B84A }, - { "Asia/Hovd" , 0x01BA0C }, - { "Asia/Irkutsk" , 0x01BC6A }, - { "Asia/Istanbul" , 0x01BE55 }, - { "Asia/Jakarta" , 0x01C242 }, - { "Asia/Jayapura" , 0x01C2EC }, - { "Asia/Jerusalem" , 0x01C389 }, - { "Asia/Kabul" , 0x01C6B8 }, - { "Asia/Kamchatka" , 0x01C709 }, - { "Asia/Karachi" , 0x01C902 }, - { "Asia/Kashgar" , 0x01C9B7 }, - { "Asia/Kathmandu" , 0x01CA0C }, - { "Asia/Katmandu" , 0x01CA72 }, - { "Asia/Khandyga" , 0x01CAD8 }, - { "Asia/Kolkata" , 0x01CD02 }, - { "Asia/Krasnoyarsk" , 0x01CD7B }, - { "Asia/Kuala_Lumpur" , 0x01CF68 }, - { "Asia/Kuching" , 0x01D025 }, - { "Asia/Kuwait" , 0x01D113 }, - { "Asia/Macao" , 0x01D168 }, - { "Asia/Macau" , 0x01D2A3 }, - { "Asia/Magadan" , 0x01D3DE }, - { "Asia/Makassar" , 0x01D5E2 }, - { "Asia/Manila" , 0x01D6A7 }, - { "Asia/Muscat" , 0x01D72C }, - { "Asia/Nicosia" , 0x01D781 }, - { "Asia/Novokuznetsk" , 0x01DA69 }, - { "Asia/Novosibirsk" , 0x01DC89 }, - { "Asia/Omsk" , 0x01DE79 }, - { "Asia/Oral" , 0x01E065 }, - { "Asia/Phnom_Penh" , 0x01E235 }, - { "Asia/Pontianak" , 0x01E28A }, - { "Asia/Pyongyang" , 0x01E34C }, - { "Asia/Qatar" , 0x01E3D1 }, - { "Asia/Qyzylorda" , 0x01E437 }, - { "Asia/Rangoon" , 0x01E60D }, - { "Asia/Riyadh" , 0x01E685 }, - { "Asia/Saigon" , 0x01E6DA }, - { "Asia/Sakhalin" , 0x01E77C }, - { "Asia/Samarkand" , 0x01E979 }, - { "Asia/Seoul" , 0x01EAAF }, - { "Asia/Shanghai" , 0x01EBA2 }, - { "Asia/Singapore" , 0x01EC4E }, - { "Asia/Srednekolymsk" , 0x01ED05 }, - { "Asia/Taipei" , 0x01EF05 }, - { "Asia/Tashkent" , 0x01F036 }, - { "Asia/Tbilisi" , 0x01F167 }, - { "Asia/Tehran" , 0x01F321 }, - { "Asia/Tel_Aviv" , 0x01F58F }, - { "Asia/Thimbu" , 0x01F8BE }, - { "Asia/Thimphu" , 0x01F924 }, - { "Asia/Tokyo" , 0x01F98A }, - { "Asia/Ujung_Pandang" , 0x01FA14 }, - { "Asia/Ulaanbaatar" , 0x01FA91 }, - { "Asia/Ulan_Bator" , 0x01FCD2 }, - { "Asia/Urumqi" , 0x01FF05 }, - { "Asia/Ust-Nera" , 0x01FF67 }, - { "Asia/Vientiane" , 0x020179 }, - { "Asia/Vladivostok" , 0x0201CE }, - { "Asia/Yakutsk" , 0x0203B8 }, - { "Asia/Yekaterinburg" , 0x0205A2 }, - { "Asia/Yerevan" , 0x0207C3 }, - { "Atlantic/Azores" , 0x0209C3 }, - { "Atlantic/Bermuda" , 0x020EC6 }, - { "Atlantic/Canary" , 0x0211A7 }, - { "Atlantic/Cape_Verde" , 0x02147D }, - { "Atlantic/Faeroe" , 0x0214F6 }, - { "Atlantic/Faroe" , 0x02179A }, - { "Atlantic/Jan_Mayen" , 0x021A3E }, - { "Atlantic/Madeira" , 0x021D70 }, - { "Atlantic/Reykjavik" , 0x022279 }, - { "Atlantic/South_Georgia" , 0x022446 }, - { "Atlantic/St_Helena" , 0x022658 }, - { "Atlantic/Stanley" , 0x02248A }, - { "Australia/ACT" , 0x0226AD }, - { "Australia/Adelaide" , 0x0229D0 }, - { "Australia/Brisbane" , 0x022D02 }, - { "Australia/Broken_Hill" , 0x022DCF }, - { "Australia/Canberra" , 0x023113 }, - { "Australia/Currie" , 0x023436 }, - { "Australia/Darwin" , 0x02376F }, - { "Australia/Eucla" , 0x0237FB }, - { "Australia/Hobart" , 0x0238D7 }, - { "Australia/LHI" , 0x023C3B }, - { "Australia/Lindeman" , 0x023EDC }, - { "Australia/Lord_Howe" , 0x023FC3 }, - { "Australia/Melbourne" , 0x024274 }, - { "Australia/North" , 0x02459F }, - { "Australia/NSW" , 0x024619 }, - { "Australia/Perth" , 0x02493C }, - { "Australia/Queensland" , 0x024A1A }, - { "Australia/South" , 0x024ACC }, - { "Australia/Sydney" , 0x024DEF }, - { "Australia/Tasmania" , 0x025132 }, - { "Australia/Victoria" , 0x02547D }, - { "Australia/West" , 0x0257A0 }, - { "Australia/Yancowinna" , 0x02585C }, - { "Brazil/Acre" , 0x025B84 }, - { "Brazil/DeNoronha" , 0x025C88 }, - { "Brazil/East" , 0x025DA8 }, - { "Brazil/West" , 0x026085 }, - { "Canada/Atlantic" , 0x02617D }, - { "Canada/Central" , 0x026665 }, - { "Canada/East-Saskatchewan" , 0x026F6F }, - { "Canada/Eastern" , 0x026A7F }, - { "Canada/Mountain" , 0x0270F8 }, - { "Canada/Newfoundland" , 0x02746E }, - { "Canada/Pacific" , 0x027999 }, - { "Canada/Saskatchewan" , 0x027DB2 }, - { "Canada/Yukon" , 0x027F3B }, - { "CET" , 0x02823E }, - { "Chile/Continental" , 0x028547 }, - { "Chile/EasterIsland" , 0x028809 }, - { "CST6CDT" , 0x028A72 }, - { "Cuba" , 0x028DC3 }, - { "EET" , 0x029136 }, - { "Egypt" , 0x0293E9 }, - { "Eire" , 0x0297D0 }, - { "EST" , 0x029CE1 }, - { "EST5EDT" , 0x029D25 }, - { "Etc/GMT" , 0x02A076 }, - { "Etc/GMT+0" , 0x02A142 }, - { "Etc/GMT+1" , 0x02A1CC }, - { "Etc/GMT+10" , 0x02A259 }, - { "Etc/GMT+11" , 0x02A2E7 }, - { "Etc/GMT+12" , 0x02A375 }, - { "Etc/GMT+2" , 0x02A490 }, - { "Etc/GMT+3" , 0x02A51C }, - { "Etc/GMT+4" , 0x02A5A8 }, - { "Etc/GMT+5" , 0x02A634 }, - { "Etc/GMT+6" , 0x02A6C0 }, - { "Etc/GMT+7" , 0x02A74C }, - { "Etc/GMT+8" , 0x02A7D8 }, - { "Etc/GMT+9" , 0x02A864 }, - { "Etc/GMT-0" , 0x02A0FE }, - { "Etc/GMT-1" , 0x02A186 }, - { "Etc/GMT-10" , 0x02A212 }, - { "Etc/GMT-11" , 0x02A2A0 }, - { "Etc/GMT-12" , 0x02A32E }, - { "Etc/GMT-13" , 0x02A3BC }, - { "Etc/GMT-14" , 0x02A403 }, - { "Etc/GMT-2" , 0x02A44A }, - { "Etc/GMT-3" , 0x02A4D6 }, - { "Etc/GMT-4" , 0x02A562 }, - { "Etc/GMT-5" , 0x02A5EE }, - { "Etc/GMT-6" , 0x02A67A }, - { "Etc/GMT-7" , 0x02A706 }, - { "Etc/GMT-8" , 0x02A792 }, - { "Etc/GMT-9" , 0x02A81E }, - { "Etc/GMT0" , 0x02A0BA }, - { "Etc/Greenwich" , 0x02A8AA }, - { "Etc/UCT" , 0x02A8EE }, - { "Etc/Universal" , 0x02A932 }, - { "Etc/UTC" , 0x02A976 }, - { "Etc/Zulu" , 0x02A9BA }, - { "Europe/Amsterdam" , 0x02A9FE }, - { "Europe/Andorra" , 0x02AE3C }, - { "Europe/Athens" , 0x02B0B8 }, - { "Europe/Belfast" , 0x02B3FB }, - { "Europe/Belgrade" , 0x02B932 }, - { "Europe/Berlin" , 0x02BBFB }, - { "Europe/Bratislava" , 0x02BF5F }, - { "Europe/Brussels" , 0x02C291 }, - { "Europe/Bucharest" , 0x02C6C8 }, - { "Europe/Budapest" , 0x02C9F2 }, - { "Europe/Busingen" , 0x02CD5B }, - { "Europe/Chisinau" , 0x02D012 }, - { "Europe/Copenhagen" , 0x02D3A0 }, - { "Europe/Dublin" , 0x02D6AA }, - { "Europe/Gibraltar" , 0x02DBBB }, - { "Europe/Guernsey" , 0x02E012 }, - { "Europe/Helsinki" , 0x02E549 }, - { "Europe/Isle_of_Man" , 0x02E7FF }, - { "Europe/Istanbul" , 0x02ED36 }, - { "Europe/Jersey" , 0x02F123 }, - { "Europe/Kaliningrad" , 0x02F65A }, - { "Europe/Kiev" , 0x02F8C5 }, - { "Europe/Lisbon" , 0x02FBE1 }, - { "Europe/Ljubljana" , 0x0300E5 }, - { "Europe/London" , 0x0303AE }, - { "Europe/Luxembourg" , 0x0308E5 }, - { "Europe/Madrid" , 0x030D3B }, - { "Europe/Malta" , 0x031101 }, - { "Europe/Mariehamn" , 0x0314BA }, - { "Europe/Minsk" , 0x031770 }, - { "Europe/Monaco" , 0x031983 }, - { "Europe/Moscow" , 0x031DBE }, - { "Europe/Nicosia" , 0x032018 }, - { "Europe/Oslo" , 0x032300 }, - { "Europe/Paris" , 0x032632 }, - { "Europe/Podgorica" , 0x032A78 }, - { "Europe/Prague" , 0x032D41 }, - { "Europe/Riga" , 0x033073 }, - { "Europe/Rome" , 0x0333B8 }, - { "Europe/Samara" , 0x03377B }, - { "Europe/San_Marino" , 0x0339E4 }, - { "Europe/Sarajevo" , 0x033DA7 }, - { "Europe/Simferopol" , 0x034070 }, - { "Europe/Skopje" , 0x0342C1 }, - { "Europe/Sofia" , 0x03458A }, - { "Europe/Stockholm" , 0x034892 }, - { "Europe/Tallinn" , 0x034B41 }, - { "Europe/Tirane" , 0x034E7B }, - { "Europe/Tiraspol" , 0x035181 }, - { "Europe/Uzhgorod" , 0x03550F }, - { "Europe/Vaduz" , 0x035826 }, - { "Europe/Vatican" , 0x035AD5 }, - { "Europe/Vienna" , 0x035E98 }, - { "Europe/Vilnius" , 0x0361C5 }, - { "Europe/Volgograd" , 0x036504 }, - { "Europe/Warsaw" , 0x036729 }, - { "Europe/Zagreb" , 0x036B0A }, - { "Europe/Zaporozhye" , 0x036DD3 }, - { "Europe/Zurich" , 0x037114 }, - { "Factory" , 0x0373C3 }, - { "GB" , 0x037434 }, - { "GB-Eire" , 0x03796B }, - { "GMT" , 0x037EA2 }, - { "GMT+0" , 0x037F6E }, - { "GMT-0" , 0x037F2A }, - { "GMT0" , 0x037EE6 }, - { "Greenwich" , 0x037FB2 }, - { "Hongkong" , 0x037FF6 }, - { "HST" , 0x0381B8 }, - { "Iceland" , 0x0381FC }, - { "Indian/Antananarivo" , 0x0383C9 }, - { "Indian/Chagos" , 0x038448 }, - { "Indian/Christmas" , 0x0384AA }, - { "Indian/Cocos" , 0x0384EE }, - { "Indian/Comoro" , 0x038532 }, - { "Indian/Kerguelen" , 0x0385B1 }, - { "Indian/Mahe" , 0x038606 }, - { "Indian/Maldives" , 0x03865B }, - { "Indian/Mauritius" , 0x0386B0 }, - { "Indian/Mayotte" , 0x038726 }, - { "Indian/Reunion" , 0x0387A5 }, - { "Iran" , 0x0387FA }, - { "Israel" , 0x038A68 }, - { "Jamaica" , 0x038D97 }, - { "Japan" , 0x038E5C }, - { "Kwajalein" , 0x038EE6 }, - { "Libya" , 0x038F49 }, - { "MET" , 0x039052 }, - { "Mexico/BajaNorte" , 0x03935B }, - { "Mexico/BajaSur" , 0x0396C4 }, - { "Mexico/General" , 0x039909 }, - { "MST" , 0x039B67 }, - { "MST7MDT" , 0x039BAB }, - { "Navajo" , 0x039EFC }, - { "NZ" , 0x03A275 }, - { "NZ-CHAT" , 0x03A5F3 }, - { "Pacific/Apia" , 0x03A8D7 }, - { "Pacific/Auckland" , 0x03AA73 }, - { "Pacific/Bougainville" , 0x03ADFF }, - { "Pacific/Chatham" , 0x03AE76 }, - { "Pacific/Chuuk" , 0x03B169 }, - { "Pacific/Easter" , 0x03B1C2 }, - { "Pacific/Efate" , 0x03B438 }, - { "Pacific/Enderbury" , 0x03B4FE }, - { "Pacific/Fakaofo" , 0x03B56C }, - { "Pacific/Fiji" , 0x03B5BD }, - { "Pacific/Funafuti" , 0x03B750 }, - { "Pacific/Galapagos" , 0x03B794 }, - { "Pacific/Gambier" , 0x03B80C }, - { "Pacific/Guadalcanal" , 0x03B871 }, - { "Pacific/Guam" , 0x03B8C6 }, - { "Pacific/Honolulu" , 0x03B91C }, - { "Pacific/Johnston" , 0x03B993 }, - { "Pacific/Kiritimati" , 0x03BA12 }, - { "Pacific/Kosrae" , 0x03BA7D }, - { "Pacific/Kwajalein" , 0x03BADA }, - { "Pacific/Majuro" , 0x03BB46 }, - { "Pacific/Marquesas" , 0x03BBA5 }, - { "Pacific/Midway" , 0x03BC0C }, - { "Pacific/Nauru" , 0x03BC91 }, - { "Pacific/Niue" , 0x03BD09 }, - { "Pacific/Norfolk" , 0x03BD67 }, - { "Pacific/Noumea" , 0x03BDBC }, - { "Pacific/Pago_Pago" , 0x03BE4C }, - { "Pacific/Palau" , 0x03BEC3 }, - { "Pacific/Pitcairn" , 0x03BF07 }, - { "Pacific/Pohnpei" , 0x03BF5C }, - { "Pacific/Ponape" , 0x03BFB1 }, - { "Pacific/Port_Moresby" , 0x03BFF6 }, - { "Pacific/Rarotonga" , 0x03C048 }, - { "Pacific/Saipan" , 0x03C124 }, - { "Pacific/Samoa" , 0x03C17A }, - { "Pacific/Tahiti" , 0x03C1F1 }, - { "Pacific/Tarawa" , 0x03C256 }, - { "Pacific/Tongatapu" , 0x03C2AA }, - { "Pacific/Truk" , 0x03C336 }, - { "Pacific/Wake" , 0x03C37B }, - { "Pacific/Wallis" , 0x03C3CB }, - { "Pacific/Yap" , 0x03C40F }, - { "Poland" , 0x03C454 }, - { "Portugal" , 0x03C835 }, - { "PRC" , 0x03CD31 }, - { "PST8PDT" , 0x03CDD1 }, - { "ROC" , 0x03D122 }, - { "ROK" , 0x03D253 }, - { "Singapore" , 0x03D346 }, - { "Turkey" , 0x03D3FD }, - { "UCT" , 0x03D7EA }, - { "Universal" , 0x03D82E }, - { "US/Alaska" , 0x03D872 }, - { "US/Aleutian" , 0x03DBDB }, - { "US/Arizona" , 0x03DF41 }, - { "US/Central" , 0x03DFCF }, - { "US/East-Indiana" , 0x03E9D9 }, - { "US/Eastern" , 0x03E4DA }, - { "US/Hawaii" , 0x03EC43 }, - { "US/Indiana-Starke" , 0x03ECB4 }, - { "US/Michigan" , 0x03F025 }, - { "US/Mountain" , 0x03F35C }, - { "US/Pacific" , 0x03F6D5 }, - { "US/Pacific-New" , 0x03FADA }, - { "US/Samoa" , 0x03FEDF }, - { "UTC" , 0x03FF56 }, - { "W-SU" , 0x04024D }, - { "WET" , 0x03FF9A }, - { "Zulu" , 0x040490 }, + { "America/Santo_Domingo" , 0x014096 }, + { "America/Sao_Paulo" , 0x01415C }, + { "America/Scoresbysund" , 0x01446B }, + { "America/Shiprock" , 0x014759 }, + { "America/Sitka" , 0x014AD2 }, + { "America/St_Barthelemy" , 0x014E5A }, + { "America/St_Johns" , 0x014EAF }, + { "America/St_Kitts" , 0x015402 }, + { "America/St_Lucia" , 0x015457 }, + { "America/St_Thomas" , 0x0154AC }, + { "America/St_Vincent" , 0x015501 }, + { "America/Swift_Current" , 0x015556 }, + { "America/Tegucigalpa" , 0x015677 }, + { "America/Thule" , 0x0156F6 }, + { "America/Thunder_Bay" , 0x01593D }, + { "America/Tijuana" , 0x015C86 }, + { "America/Toronto" , 0x01601F }, + { "America/Tortola" , 0x01653F }, + { "America/Vancouver" , 0x016594 }, + { "America/Virgin" , 0x0169D1 }, + { "America/Whitehorse" , 0x016A26 }, + { "America/Winnipeg" , 0x016D43 }, + { "America/Yakutat" , 0x017183 }, + { "America/Yellowknife" , 0x0174EE }, + { "Antarctica/Casey" , 0x0177FE }, + { "Antarctica/Davis" , 0x01789C }, + { "Antarctica/DumontDUrville" , 0x01793D }, + { "Antarctica/Macquarie" , 0x0179CE }, + { "Antarctica/Mawson" , 0x017C1B }, + { "Antarctica/McMurdo" , 0x017C97 }, + { "Antarctica/Palmer" , 0x018042 }, + { "Antarctica/Rothera" , 0x018285 }, + { "Antarctica/South_Pole" , 0x0182FB }, + { "Antarctica/Syowa" , 0x018679 }, + { "Antarctica/Troll" , 0x0186E7 }, + { "Antarctica/Vostok" , 0x0188B9 }, + { "Arctic/Longyearbyen" , 0x01892A }, + { "Asia/Aden" , 0x018C5C }, + { "Asia/Almaty" , 0x018CB1 }, + { "Asia/Amman" , 0x018E30 }, + { "Asia/Anadyr" , 0x0190E6 }, + { "Asia/Aqtau" , 0x0192E8 }, + { "Asia/Aqtobe" , 0x0194E7 }, + { "Asia/Ashgabat" , 0x01969F }, + { "Asia/Ashkhabad" , 0x0197BC }, + { "Asia/Baghdad" , 0x0198D9 }, + { "Asia/Bahrain" , 0x019A4E }, + { "Asia/Baku" , 0x019AB4 }, + { "Asia/Bangkok" , 0x019D9C }, + { "Asia/Beirut" , 0x019DF1 }, + { "Asia/Bishkek" , 0x01A0FE }, + { "Asia/Brunei" , 0x01A2AA }, + { "Asia/Calcutta" , 0x01A30C }, + { "Asia/Chita" , 0x01A385 }, + { "Asia/Choibalsan" , 0x01A59A }, + { "Asia/Chongqing" , 0x01A801 }, + { "Asia/Chungking" , 0x01A8A1 }, + { "Asia/Colombo" , 0x01A941 }, + { "Asia/Dacca" , 0x01A9DD }, + { "Asia/Damascus" , 0x01AA83 }, + { "Asia/Dhaka" , 0x01ADD3 }, + { "Asia/Dili" , 0x01AE79 }, + { "Asia/Dubai" , 0x01AF03 }, + { "Asia/Dushanbe" , 0x01AF58 }, + { "Asia/Gaza" , 0x01B05B }, + { "Asia/Harbin" , 0x01B3AE }, + { "Asia/Hebron" , 0x01B44E }, + { "Asia/Ho_Chi_Minh" , 0x01B7AA }, + { "Asia/Hong_Kong" , 0x01B84C }, + { "Asia/Hovd" , 0x01BA0E }, + { "Asia/Irkutsk" , 0x01BC6C }, + { "Asia/Istanbul" , 0x01BE57 }, + { "Asia/Jakarta" , 0x01C244 }, + { "Asia/Jayapura" , 0x01C2EE }, + { "Asia/Jerusalem" , 0x01C38B }, + { "Asia/Kabul" , 0x01C6BA }, + { "Asia/Kamchatka" , 0x01C70B }, + { "Asia/Karachi" , 0x01C904 }, + { "Asia/Kashgar" , 0x01C9B9 }, + { "Asia/Kathmandu" , 0x01CA0E }, + { "Asia/Katmandu" , 0x01CA74 }, + { "Asia/Khandyga" , 0x01CADA }, + { "Asia/Kolkata" , 0x01CD04 }, + { "Asia/Krasnoyarsk" , 0x01CD7D }, + { "Asia/Kuala_Lumpur" , 0x01CF6A }, + { "Asia/Kuching" , 0x01D027 }, + { "Asia/Kuwait" , 0x01D115 }, + { "Asia/Macao" , 0x01D16A }, + { "Asia/Macau" , 0x01D2A5 }, + { "Asia/Magadan" , 0x01D3E0 }, + { "Asia/Makassar" , 0x01D5E4 }, + { "Asia/Manila" , 0x01D6A9 }, + { "Asia/Muscat" , 0x01D72E }, + { "Asia/Nicosia" , 0x01D783 }, + { "Asia/Novokuznetsk" , 0x01DA6B }, + { "Asia/Novosibirsk" , 0x01DC8B }, + { "Asia/Omsk" , 0x01DE7B }, + { "Asia/Oral" , 0x01E067 }, + { "Asia/Phnom_Penh" , 0x01E237 }, + { "Asia/Pontianak" , 0x01E28C }, + { "Asia/Pyongyang" , 0x01E34E }, + { "Asia/Qatar" , 0x01E3D3 }, + { "Asia/Qyzylorda" , 0x01E439 }, + { "Asia/Rangoon" , 0x01E60F }, + { "Asia/Riyadh" , 0x01E687 }, + { "Asia/Saigon" , 0x01E6DC }, + { "Asia/Sakhalin" , 0x01E77E }, + { "Asia/Samarkand" , 0x01E97B }, + { "Asia/Seoul" , 0x01EAB1 }, + { "Asia/Shanghai" , 0x01EBA4 }, + { "Asia/Singapore" , 0x01EC50 }, + { "Asia/Srednekolymsk" , 0x01ED07 }, + { "Asia/Taipei" , 0x01EF07 }, + { "Asia/Tashkent" , 0x01F038 }, + { "Asia/Tbilisi" , 0x01F169 }, + { "Asia/Tehran" , 0x01F323 }, + { "Asia/Tel_Aviv" , 0x01F591 }, + { "Asia/Thimbu" , 0x01F8C0 }, + { "Asia/Thimphu" , 0x01F926 }, + { "Asia/Tokyo" , 0x01F98C }, + { "Asia/Ujung_Pandang" , 0x01FA16 }, + { "Asia/Ulaanbaatar" , 0x01FA93 }, + { "Asia/Ulan_Bator" , 0x01FCD4 }, + { "Asia/Urumqi" , 0x01FF07 }, + { "Asia/Ust-Nera" , 0x01FF69 }, + { "Asia/Vientiane" , 0x02017B }, + { "Asia/Vladivostok" , 0x0201D0 }, + { "Asia/Yakutsk" , 0x0203BA }, + { "Asia/Yekaterinburg" , 0x0205A4 }, + { "Asia/Yerevan" , 0x0207C5 }, + { "Atlantic/Azores" , 0x0209C5 }, + { "Atlantic/Bermuda" , 0x020EC8 }, + { "Atlantic/Canary" , 0x0211A9 }, + { "Atlantic/Cape_Verde" , 0x02147F }, + { "Atlantic/Faeroe" , 0x0214F8 }, + { "Atlantic/Faroe" , 0x02179C }, + { "Atlantic/Jan_Mayen" , 0x021A40 }, + { "Atlantic/Madeira" , 0x021D72 }, + { "Atlantic/Reykjavik" , 0x02227B }, + { "Atlantic/South_Georgia" , 0x022448 }, + { "Atlantic/St_Helena" , 0x02265A }, + { "Atlantic/Stanley" , 0x02248C }, + { "Australia/ACT" , 0x0226AF }, + { "Australia/Adelaide" , 0x0229D2 }, + { "Australia/Brisbane" , 0x022D04 }, + { "Australia/Broken_Hill" , 0x022DD1 }, + { "Australia/Canberra" , 0x023115 }, + { "Australia/Currie" , 0x023438 }, + { "Australia/Darwin" , 0x023771 }, + { "Australia/Eucla" , 0x0237FD }, + { "Australia/Hobart" , 0x0238D9 }, + { "Australia/LHI" , 0x023C3D }, + { "Australia/Lindeman" , 0x023EDE }, + { "Australia/Lord_Howe" , 0x023FC5 }, + { "Australia/Melbourne" , 0x024276 }, + { "Australia/North" , 0x0245A1 }, + { "Australia/NSW" , 0x02461B }, + { "Australia/Perth" , 0x02493E }, + { "Australia/Queensland" , 0x024A1C }, + { "Australia/South" , 0x024ACE }, + { "Australia/Sydney" , 0x024DF1 }, + { "Australia/Tasmania" , 0x025134 }, + { "Australia/Victoria" , 0x02547F }, + { "Australia/West" , 0x0257A2 }, + { "Australia/Yancowinna" , 0x02585E }, + { "Brazil/Acre" , 0x025B86 }, + { "Brazil/DeNoronha" , 0x025C8A }, + { "Brazil/East" , 0x025DAA }, + { "Brazil/West" , 0x026087 }, + { "Canada/Atlantic" , 0x02617F }, + { "Canada/Central" , 0x026667 }, + { "Canada/East-Saskatchewan" , 0x026F71 }, + { "Canada/Eastern" , 0x026A81 }, + { "Canada/Mountain" , 0x0270FA }, + { "Canada/Newfoundland" , 0x027470 }, + { "Canada/Pacific" , 0x02799B }, + { "Canada/Saskatchewan" , 0x027DB4 }, + { "Canada/Yukon" , 0x027F3D }, + { "CET" , 0x028240 }, + { "Chile/Continental" , 0x028549 }, + { "Chile/EasterIsland" , 0x02880D }, + { "CST6CDT" , 0x028A67 }, + { "Cuba" , 0x028DB8 }, + { "EET" , 0x02912B }, + { "Egypt" , 0x0293DE }, + { "Eire" , 0x0297C5 }, + { "EST" , 0x029CD6 }, + { "EST5EDT" , 0x029D1A }, + { "Etc/GMT" , 0x02A06B }, + { "Etc/GMT+0" , 0x02A137 }, + { "Etc/GMT+1" , 0x02A1C1 }, + { "Etc/GMT+10" , 0x02A24E }, + { "Etc/GMT+11" , 0x02A2DC }, + { "Etc/GMT+12" , 0x02A36A }, + { "Etc/GMT+2" , 0x02A485 }, + { "Etc/GMT+3" , 0x02A511 }, + { "Etc/GMT+4" , 0x02A59D }, + { "Etc/GMT+5" , 0x02A629 }, + { "Etc/GMT+6" , 0x02A6B5 }, + { "Etc/GMT+7" , 0x02A741 }, + { "Etc/GMT+8" , 0x02A7CD }, + { "Etc/GMT+9" , 0x02A859 }, + { "Etc/GMT-0" , 0x02A0F3 }, + { "Etc/GMT-1" , 0x02A17B }, + { "Etc/GMT-10" , 0x02A207 }, + { "Etc/GMT-11" , 0x02A295 }, + { "Etc/GMT-12" , 0x02A323 }, + { "Etc/GMT-13" , 0x02A3B1 }, + { "Etc/GMT-14" , 0x02A3F8 }, + { "Etc/GMT-2" , 0x02A43F }, + { "Etc/GMT-3" , 0x02A4CB }, + { "Etc/GMT-4" , 0x02A557 }, + { "Etc/GMT-5" , 0x02A5E3 }, + { "Etc/GMT-6" , 0x02A66F }, + { "Etc/GMT-7" , 0x02A6FB }, + { "Etc/GMT-8" , 0x02A787 }, + { "Etc/GMT-9" , 0x02A813 }, + { "Etc/GMT0" , 0x02A0AF }, + { "Etc/Greenwich" , 0x02A89F }, + { "Etc/UCT" , 0x02A8E3 }, + { "Etc/Universal" , 0x02A927 }, + { "Etc/UTC" , 0x02A96B }, + { "Etc/Zulu" , 0x02A9AF }, + { "Europe/Amsterdam" , 0x02A9F3 }, + { "Europe/Andorra" , 0x02AE31 }, + { "Europe/Athens" , 0x02B0AD }, + { "Europe/Belfast" , 0x02B3F0 }, + { "Europe/Belgrade" , 0x02B927 }, + { "Europe/Berlin" , 0x02BBF0 }, + { "Europe/Bratislava" , 0x02BF54 }, + { "Europe/Brussels" , 0x02C286 }, + { "Europe/Bucharest" , 0x02C6BD }, + { "Europe/Budapest" , 0x02C9E7 }, + { "Europe/Busingen" , 0x02CD50 }, + { "Europe/Chisinau" , 0x02D007 }, + { "Europe/Copenhagen" , 0x02D395 }, + { "Europe/Dublin" , 0x02D69F }, + { "Europe/Gibraltar" , 0x02DBB0 }, + { "Europe/Guernsey" , 0x02E007 }, + { "Europe/Helsinki" , 0x02E53E }, + { "Europe/Isle_of_Man" , 0x02E7F4 }, + { "Europe/Istanbul" , 0x02ED2B }, + { "Europe/Jersey" , 0x02F118 }, + { "Europe/Kaliningrad" , 0x02F64F }, + { "Europe/Kiev" , 0x02F8BA }, + { "Europe/Lisbon" , 0x02FBD6 }, + { "Europe/Ljubljana" , 0x0300DA }, + { "Europe/London" , 0x0303A3 }, + { "Europe/Luxembourg" , 0x0308DA }, + { "Europe/Madrid" , 0x030D30 }, + { "Europe/Malta" , 0x0310F6 }, + { "Europe/Mariehamn" , 0x0314AF }, + { "Europe/Minsk" , 0x031765 }, + { "Europe/Monaco" , 0x031978 }, + { "Europe/Moscow" , 0x031DB3 }, + { "Europe/Nicosia" , 0x03200D }, + { "Europe/Oslo" , 0x0322F5 }, + { "Europe/Paris" , 0x032627 }, + { "Europe/Podgorica" , 0x032A6D }, + { "Europe/Prague" , 0x032D36 }, + { "Europe/Riga" , 0x033068 }, + { "Europe/Rome" , 0x0333AD }, + { "Europe/Samara" , 0x033770 }, + { "Europe/San_Marino" , 0x0339D9 }, + { "Europe/Sarajevo" , 0x033D9C }, + { "Europe/Simferopol" , 0x034065 }, + { "Europe/Skopje" , 0x0342B6 }, + { "Europe/Sofia" , 0x03457F }, + { "Europe/Stockholm" , 0x034887 }, + { "Europe/Tallinn" , 0x034B36 }, + { "Europe/Tirane" , 0x034E70 }, + { "Europe/Tiraspol" , 0x035176 }, + { "Europe/Uzhgorod" , 0x035504 }, + { "Europe/Vaduz" , 0x03581B }, + { "Europe/Vatican" , 0x035ACA }, + { "Europe/Vienna" , 0x035E8D }, + { "Europe/Vilnius" , 0x0361BA }, + { "Europe/Volgograd" , 0x0364F9 }, + { "Europe/Warsaw" , 0x03671E }, + { "Europe/Zagreb" , 0x036AFF }, + { "Europe/Zaporozhye" , 0x036DC8 }, + { "Europe/Zurich" , 0x037109 }, + { "Factory" , 0x0373B8 }, + { "GB" , 0x037429 }, + { "GB-Eire" , 0x037960 }, + { "GMT" , 0x037E97 }, + { "GMT+0" , 0x037F63 }, + { "GMT-0" , 0x037F1F }, + { "GMT0" , 0x037EDB }, + { "Greenwich" , 0x037FA7 }, + { "Hongkong" , 0x037FEB }, + { "HST" , 0x0381AD }, + { "Iceland" , 0x0381F1 }, + { "Indian/Antananarivo" , 0x0383BE }, + { "Indian/Chagos" , 0x03843D }, + { "Indian/Christmas" , 0x03849F }, + { "Indian/Cocos" , 0x0384E3 }, + { "Indian/Comoro" , 0x038527 }, + { "Indian/Kerguelen" , 0x0385A6 }, + { "Indian/Mahe" , 0x0385FB }, + { "Indian/Maldives" , 0x038650 }, + { "Indian/Mauritius" , 0x0386A5 }, + { "Indian/Mayotte" , 0x03871B }, + { "Indian/Reunion" , 0x03879A }, + { "Iran" , 0x0387EF }, + { "Israel" , 0x038A5D }, + { "Jamaica" , 0x038D8C }, + { "Japan" , 0x038E51 }, + { "Kwajalein" , 0x038EDB }, + { "Libya" , 0x038F3E }, + { "MET" , 0x039047 }, + { "Mexico/BajaNorte" , 0x039350 }, + { "Mexico/BajaSur" , 0x0396B9 }, + { "Mexico/General" , 0x0398FE }, + { "MST" , 0x039B5C }, + { "MST7MDT" , 0x039BA0 }, + { "Navajo" , 0x039EF1 }, + { "NZ" , 0x03A26A }, + { "NZ-CHAT" , 0x03A5E8 }, + { "Pacific/Apia" , 0x03A8CC }, + { "Pacific/Auckland" , 0x03AA68 }, + { "Pacific/Bougainville" , 0x03ADF4 }, + { "Pacific/Chatham" , 0x03AE6B }, + { "Pacific/Chuuk" , 0x03B15E }, + { "Pacific/Easter" , 0x03B1B7 }, + { "Pacific/Efate" , 0x03B41E }, + { "Pacific/Enderbury" , 0x03B4E4 }, + { "Pacific/Fakaofo" , 0x03B552 }, + { "Pacific/Fiji" , 0x03B5A3 }, + { "Pacific/Funafuti" , 0x03B736 }, + { "Pacific/Galapagos" , 0x03B77A }, + { "Pacific/Gambier" , 0x03B7F2 }, + { "Pacific/Guadalcanal" , 0x03B857 }, + { "Pacific/Guam" , 0x03B8AC }, + { "Pacific/Honolulu" , 0x03B902 }, + { "Pacific/Johnston" , 0x03B979 }, + { "Pacific/Kiritimati" , 0x03B9F8 }, + { "Pacific/Kosrae" , 0x03BA63 }, + { "Pacific/Kwajalein" , 0x03BAC0 }, + { "Pacific/Majuro" , 0x03BB2C }, + { "Pacific/Marquesas" , 0x03BB8B }, + { "Pacific/Midway" , 0x03BBF2 }, + { "Pacific/Nauru" , 0x03BC77 }, + { "Pacific/Niue" , 0x03BCEF }, + { "Pacific/Norfolk" , 0x03BD4D }, + { "Pacific/Noumea" , 0x03BDA2 }, + { "Pacific/Pago_Pago" , 0x03BE32 }, + { "Pacific/Palau" , 0x03BEA9 }, + { "Pacific/Pitcairn" , 0x03BEED }, + { "Pacific/Pohnpei" , 0x03BF42 }, + { "Pacific/Ponape" , 0x03BF97 }, + { "Pacific/Port_Moresby" , 0x03BFDC }, + { "Pacific/Rarotonga" , 0x03C02E }, + { "Pacific/Saipan" , 0x03C10A }, + { "Pacific/Samoa" , 0x03C160 }, + { "Pacific/Tahiti" , 0x03C1D7 }, + { "Pacific/Tarawa" , 0x03C23C }, + { "Pacific/Tongatapu" , 0x03C290 }, + { "Pacific/Truk" , 0x03C31C }, + { "Pacific/Wake" , 0x03C361 }, + { "Pacific/Wallis" , 0x03C3B1 }, + { "Pacific/Yap" , 0x03C3F5 }, + { "Poland" , 0x03C43A }, + { "Portugal" , 0x03C81B }, + { "PRC" , 0x03CD17 }, + { "PST8PDT" , 0x03CDB7 }, + { "ROC" , 0x03D108 }, + { "ROK" , 0x03D239 }, + { "Singapore" , 0x03D32C }, + { "Turkey" , 0x03D3E3 }, + { "UCT" , 0x03D7D0 }, + { "Universal" , 0x03D814 }, + { "US/Alaska" , 0x03D858 }, + { "US/Aleutian" , 0x03DBC1 }, + { "US/Arizona" , 0x03DF27 }, + { "US/Central" , 0x03DFB5 }, + { "US/East-Indiana" , 0x03E9BF }, + { "US/Eastern" , 0x03E4C0 }, + { "US/Hawaii" , 0x03EC29 }, + { "US/Indiana-Starke" , 0x03EC9A }, + { "US/Michigan" , 0x03F00B }, + { "US/Mountain" , 0x03F342 }, + { "US/Pacific" , 0x03F6BB }, + { "US/Pacific-New" , 0x03FAC0 }, + { "US/Samoa" , 0x03FEC5 }, + { "UTC" , 0x03FF3C }, + { "W-SU" , 0x040233 }, + { "WET" , 0x03FF80 }, + { "Zulu" , 0x040476 }, }; /* This is a generated file, do not modify */ -const unsigned char timelib_timezone_db_data_builtin[263380] = { +const unsigned char timelib_timezone_db_data_builtin[263354] = { /* Africa/Abidjan */ @@ -761,7 +761,7 @@ const unsigned char timelib_timezone_db_data_builtin[263380] = { 0x46, 0xE0, 0x6A, 0x50, 0x48, 0x11, 0x02, 0xE0, 0x48, 0xB7, 0x11, 0xD0, 0x49, 0xF0, 0xE4, 0xE0, 0x4A, 0x8D, 0xB9, 0x50, 0x4B, 0xDA, 0x01, 0x60, 0x4C, 0x61, 0xBD, 0xD0, 0x4C, 0x89, 0x58, 0xE0, 0x4C, 0xA4, 0xFA, 0x50, 0x53, 0x75, 0x38, 0xE0, 0x53, 0xAC, 0x89, 0xD0, 0x53, 0xDA, 0xBC, 0x60, -0x54, 0x24, 0x82, 0x50, 0x55, 0x39, 0x6B, 0x60, 0x55, 0x79, 0xF6, 0xD0, 0x55, 0xB1, 0x63, 0xE0, +0x54, 0x24, 0x82, 0x50, 0x55, 0x42, 0xA5, 0xE0, 0x55, 0x79, 0xF6, 0xD0, 0x55, 0xB1, 0x63, 0xE0, 0x56, 0x04, 0x64, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0x50, 0x9E, 0x50, 0x57, 0x7E, 0xD0, 0xE0, 0x57, 0xED, 0x80, 0xD0, 0x59, 0x02, 0x69, 0xE0, 0x59, 0x27, 0x45, 0xD0, 0x59, 0x55, 0x78, 0x60, 0x59, 0xCD, 0x62, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5A, 0xF4, 0xB2, 0xD0, 0x5B, 0x22, 0xE5, 0x60, @@ -769,12 +769,12 @@ const unsigned char timelib_timezone_db_data_builtin[263380] = { 0x5D, 0x8D, 0x26, 0xD0, 0x5E, 0xD0, 0x34, 0x60, 0x5F, 0x6D, 0x08, 0xD0, 0x60, 0x9D, 0xA1, 0x60, 0x61, 0x56, 0x25, 0x50, 0x62, 0x74, 0x48, 0xE0, 0x63, 0x36, 0x07, 0x50, 0x64, 0x4A, 0xF0, 0x60, 0x65, 0x15, 0xE9, 0x50, 0x66, 0x2A, 0xD2, 0x60, 0x66, 0xF5, 0xCB, 0x50, 0x68, 0x0A, 0xB4, 0x60, -0x68, 0xD5, 0xAD, 0x50, 0x69, 0xEA, 0x96, 0x60, 0x6A, 0xB5, 0x8F, 0x50, 0x6B, 0xD3, 0xB2, 0xE0, +0x68, 0xD5, 0xAD, 0x50, 0x69, 0xF3, 0xD0, 0xE0, 0x6A, 0xB5, 0x8F, 0x50, 0x6B, 0xD3, 0xB2, 0xE0, 0x6C, 0x9E, 0xAB, 0xD0, 0x6D, 0xB3, 0x94, 0xE0, 0x6E, 0x7E, 0x8D, 0xD0, 0x6F, 0x93, 0x76, 0xE0, 0x70, 0x5E, 0x6F, 0xD0, 0x71, 0x73, 0x58, 0xE0, 0x72, 0x3E, 0x51, 0xD0, 0x73, 0x53, 0x3A, 0xE0, 0x74, 0x1E, 0x33, 0xD0, 0x75, 0x3C, 0x57, 0x60, 0x76, 0x07, 0x50, 0x50, 0x77, 0x1C, 0x39, 0x60, 0x77, 0xE7, 0x32, 0x50, 0x78, 0xFC, 0x1B, 0x60, 0x79, 0xC7, 0x14, 0x50, 0x7A, 0xDB, 0xFD, 0x60, -0x7B, 0xA6, 0xF6, 0x50, 0x7C, 0xBB, 0xDF, 0x60, 0x7D, 0x86, 0xD8, 0x50, 0x7E, 0x9B, 0xC1, 0x60, +0x7B, 0xA6, 0xF6, 0x50, 0x7C, 0xBB, 0xDF, 0x60, 0x7D, 0x86, 0xD8, 0x50, 0x7E, 0xA4, 0xFB, 0xE0, 0x7F, 0x66, 0xBA, 0x50, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, @@ -783,10 +783,10 @@ const unsigned char timelib_timezone_db_data_builtin[263380] = { 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, -0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, -0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, +0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, +0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, +0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, +0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xB7, 0x2E, 0x88, 0x01, 0x42, 0x57, 0x88, 0x00, 0x00, 0x00, 0x00, @@ -5070,22 +5070,22 @@ const unsigned char timelib_timezone_db_data_builtin[263380] = { /* America/Montreal */ 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xE8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9C, 0xBD, 0x01, 0xF0, -0x9C, 0xE4, 0x64, 0xC0, 0x9E, 0xB8, 0x93, 0x70, 0x9F, 0xBA, 0xEB, 0x60, 0xA0, 0x87, 0x58, 0xF8, -0xA1, 0x99, 0x82, 0xE8, 0xA2, 0x94, 0x0D, 0xF8, 0xA3, 0x5F, 0x06, 0xE8, 0xA4, 0x73, 0xE8, 0xF0, -0xA5, 0x3E, 0xE8, 0xE8, 0xA6, 0x53, 0xCA, 0xF0, 0xA7, 0x1E, 0xCA, 0xE8, 0xAA, 0x2D, 0xEC, 0xF0, -0xAA, 0xDE, 0x8E, 0xE8, 0xAB, 0xFC, 0xAB, 0x70, 0xAC, 0xBE, 0x70, 0xE8, 0xAD, 0xDC, 0x8D, 0x70, -0xAE, 0x9E, 0x52, 0xE8, 0xAF, 0xBC, 0x53, 0x50, 0xB0, 0x7E, 0x11, 0xC0, 0xB1, 0x9C, 0x35, 0x50, -0xB2, 0x67, 0x2E, 0x40, 0xB3, 0x7C, 0x17, 0x50, 0xB4, 0x47, 0x10, 0x40, 0xB5, 0x5B, 0xF9, 0x50, -0xB6, 0x26, 0xF2, 0x40, 0xB7, 0x3B, 0xDB, 0x50, 0xB8, 0x06, 0xD4, 0x40, 0xB9, 0x24, 0xF7, 0xD0, -0xB9, 0xE6, 0xB6, 0x40, 0xBB, 0x04, 0xD9, 0xD0, 0xBB, 0xCF, 0xD2, 0xC0, 0xBC, 0xE4, 0xBB, 0xD0, -0xBD, 0xAF, 0xB4, 0xC0, 0xBE, 0xC4, 0x9D, 0xD0, 0xBF, 0x8F, 0x96, 0xC0, 0xC0, 0xA4, 0x7F, 0xD0, -0xC1, 0x6F, 0x78, 0xC0, 0xC2, 0x84, 0x61, 0xD0, 0xC3, 0x4F, 0x5A, 0xC0, 0xC4, 0x64, 0x43, 0xD0, -0xC5, 0x2F, 0x3C, 0xC0, 0xC6, 0x4D, 0x60, 0x50, 0xC7, 0x0F, 0x1E, 0xC0, 0xC8, 0x2D, 0x42, 0x50, +0x00, 0x00, 0x00, 0xE8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xB8, 0x93, 0x70, +0x9F, 0xBA, 0xEB, 0x60, 0xA0, 0x87, 0x2E, 0xC8, 0xA1, 0x9A, 0xB1, 0x40, 0xA2, 0x94, 0x06, 0xF0, +0xA3, 0x55, 0xA9, 0x40, 0xA4, 0x86, 0x5D, 0xF0, 0xA5, 0x28, 0x78, 0x60, 0xA6, 0x66, 0x3F, 0xF0, +0xA7, 0x0C, 0x4E, 0xE0, 0xA8, 0x46, 0x21, 0xF0, 0xA8, 0xEC, 0x30, 0xE0, 0xAA, 0x1C, 0xC9, 0x70, +0xAA, 0xD5, 0x4D, 0x60, 0xAB, 0xFC, 0xAB, 0x70, 0xAC, 0xB5, 0x2F, 0x60, 0xAD, 0xDC, 0x8D, 0x70, +0xAE, 0x95, 0x11, 0x60, 0xAF, 0xBC, 0x6F, 0x70, 0xB0, 0x7E, 0x2D, 0xE0, 0xB1, 0x9C, 0x51, 0x70, +0xB2, 0x67, 0x4A, 0x60, 0xB3, 0x7C, 0x33, 0x70, 0xB4, 0x47, 0x2C, 0x60, 0xB5, 0x5C, 0x15, 0x70, +0xB6, 0x27, 0x0E, 0x60, 0xB7, 0x3B, 0xF7, 0x70, 0xB8, 0x06, 0xF0, 0x60, 0xB9, 0x25, 0x13, 0xF0, +0xB9, 0xE6, 0xD2, 0x60, 0xBB, 0x04, 0xF5, 0xF0, 0xBB, 0xCF, 0xEE, 0xE0, 0xBC, 0xE4, 0xD7, 0xF0, +0xBD, 0xAF, 0xD0, 0xE0, 0xBE, 0xC4, 0xB9, 0xF0, 0xBF, 0x8F, 0xB2, 0xE0, 0xC0, 0xA4, 0x9B, 0xF0, +0xC1, 0x6F, 0x94, 0xE0, 0xC2, 0x84, 0x7D, 0xF0, 0xC3, 0x4F, 0x76, 0xE0, 0xC4, 0x64, 0x5F, 0xF0, +0xC5, 0x2F, 0x58, 0xE0, 0xC6, 0x4D, 0x7C, 0x70, 0xC7, 0x0F, 0x3A, 0xE0, 0xC8, 0x2D, 0x5E, 0x70, 0xCB, 0x88, 0xF0, 0x70, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xFB, 0xE0, 0xD3, 0x75, 0xE4, 0xF0, -0xD4, 0x40, 0xDD, 0xE0, 0xD5, 0x55, 0xC6, 0xF0, 0xD6, 0x20, 0xBF, 0xE0, 0xD7, 0x35, 0xA8, 0xF0, -0xD8, 0x00, 0xA1, 0xE0, 0xD9, 0x15, 0x8A, 0xF0, 0xDA, 0x0E, 0xA8, 0x60, 0xDA, 0xFE, 0xA7, 0x70, -0xDB, 0xEE, 0x8A, 0x60, 0xDC, 0xDE, 0x89, 0x70, 0xDD, 0xA9, 0x82, 0x60, 0xDE, 0xBE, 0x6B, 0x70, +0xD4, 0x40, 0xDD, 0xE0, 0xD5, 0x55, 0xAA, 0xD0, 0xD6, 0x20, 0xA3, 0xC0, 0xD7, 0x35, 0x8C, 0xD0, +0xD8, 0x00, 0x85, 0xC0, 0xD9, 0x15, 0x6E, 0xD0, 0xDA, 0x33, 0x76, 0x40, 0xDA, 0xFE, 0xA7, 0x70, +0xDC, 0x13, 0x74, 0x60, 0xDC, 0xDE, 0x89, 0x70, 0xDD, 0xA9, 0x82, 0x60, 0xDE, 0xBE, 0x6B, 0x70, 0xDF, 0x89, 0x64, 0x60, 0xE0, 0x9E, 0x4D, 0x70, 0xE1, 0x69, 0x46, 0x60, 0xE2, 0x7E, 0x2F, 0x70, 0xE3, 0x49, 0x28, 0x60, 0xE4, 0x5E, 0x11, 0x70, 0xE5, 0x29, 0x0A, 0x60, 0xE6, 0x47, 0x2D, 0xF0, 0xE7, 0x12, 0x26, 0xE0, 0xE8, 0x27, 0x0F, 0xF0, 0xE9, 0x16, 0xF2, 0xE0, 0xEA, 0x06, 0xF1, 0xF0, @@ -6165,51 +6165,51 @@ const unsigned char timelib_timezone_db_data_builtin[263380] = { /* America/Santiago */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0D, 0x8F, 0x24, 0x69, 0xC6, -0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x71, 0x05, 0x46, 0xA1, 0x00, 0x71, 0xC0, 0xB0, 0x5E, 0x77, 0xC6, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0D, 0x8F, 0x30, 0x47, 0x46, +0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC6, 0xA1, 0x00, 0x71, 0xC0, 0xB0, 0x5E, 0x77, 0xC6, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, 0xB4, 0x22, 0x34, 0x50, 0xB5, 0x39, 0xA4, 0x40, 0xB6, 0x03, 0x67, 0xD0, 0xB7, 0x1A, 0xD7, 0xC0, 0xB7, 0xE4, 0x9B, 0x50, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xC7, 0x20, 0x50, 0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, -0xD4, 0x1B, 0xC9, 0xB0, 0xD5, 0x76, 0xA0, 0x50, 0xFD, 0xD1, 0x3C, 0x40, 0xFE, 0x92, 0xFA, 0xB0, -0xFF, 0xCC, 0xCD, 0xC0, 0x00, 0x72, 0xDC, 0xB0, 0x01, 0x75, 0x50, 0xC0, 0x02, 0x40, 0x49, 0xB0, -0x03, 0x55, 0x32, 0xC0, 0x04, 0x20, 0x2B, 0xB0, 0x05, 0x3E, 0x4F, 0x40, 0x06, 0x00, 0x0D, 0xB0, -0x07, 0x0B, 0xBC, 0x40, 0x07, 0xDF, 0xEF, 0xB0, 0x08, 0xFE, 0x13, 0x40, 0x09, 0xBF, 0xD1, 0xB0, -0x0A, 0xDD, 0xF5, 0x40, 0x0B, 0xA8, 0xEE, 0x30, 0x0C, 0xBD, 0xD7, 0x40, 0x0D, 0x88, 0xD0, 0x30, -0x0E, 0x9D, 0xB9, 0x40, 0x0F, 0x68, 0xB2, 0x30, 0x10, 0x86, 0xD5, 0xC0, 0x11, 0x48, 0x94, 0x30, -0x12, 0x66, 0xB7, 0xC0, 0x13, 0x28, 0x76, 0x30, 0x14, 0x46, 0x99, 0xC0, 0x15, 0x11, 0x92, 0xB0, -0x16, 0x26, 0x7B, 0xC0, 0x16, 0xF1, 0x74, 0xB0, 0x18, 0x06, 0x5D, 0xC0, 0x18, 0xD1, 0x56, 0xB0, -0x19, 0xE6, 0x3F, 0xC0, 0x1A, 0xB1, 0x38, 0xB0, 0x1B, 0xCF, 0x5C, 0x40, 0x1C, 0x91, 0x1A, 0xB0, -0x1D, 0xAF, 0x3E, 0x40, 0x1E, 0x70, 0xFC, 0xB0, 0x1F, 0x8F, 0x20, 0x40, 0x20, 0x7F, 0x03, 0x30, -0x21, 0x6F, 0x02, 0x40, 0x22, 0x39, 0xFB, 0x30, 0x23, 0x45, 0xA9, 0xC0, 0x24, 0x19, 0xDD, 0x30, -0x25, 0x38, 0x00, 0xC0, 0x26, 0x02, 0xF9, 0xB0, 0x26, 0xF2, 0xF8, 0xC0, 0x27, 0xD9, 0xA1, 0x30, -0x28, 0xF7, 0xC4, 0xC0, 0x29, 0xC2, 0xBD, 0xB0, 0x2A, 0xD7, 0xA6, 0xC0, 0x2B, 0xA2, 0x9F, 0xB0, -0x2C, 0xB7, 0x88, 0xC0, 0x2D, 0x82, 0x81, 0xB0, 0x2E, 0x97, 0x6A, 0xC0, 0x2F, 0x62, 0x63, 0xB0, -0x30, 0x80, 0x87, 0x40, 0x31, 0x42, 0x45, 0xB0, 0x32, 0x60, 0x69, 0x40, 0x33, 0x3D, 0xD7, 0x30, -0x34, 0x40, 0x4B, 0x40, 0x35, 0x0B, 0x44, 0x30, 0x36, 0x0D, 0xB8, 0x40, 0x37, 0x06, 0xD5, 0xB0, -0x38, 0x00, 0x0F, 0x40, 0x38, 0xCB, 0x08, 0x30, 0x39, 0xE9, 0x2B, 0xC0, 0x3A, 0xAA, 0xEA, 0x30, -0x3B, 0xC9, 0x0D, 0xC0, 0x3C, 0x8A, 0xCC, 0x30, 0x3D, 0xA8, 0xEF, 0xC0, 0x3E, 0x6A, 0xAE, 0x30, -0x3F, 0x88, 0xD1, 0xC0, 0x40, 0x53, 0xCA, 0xB0, 0x41, 0x68, 0xB3, 0xC0, 0x42, 0x33, 0xAC, 0xB0, -0x43, 0x48, 0x95, 0xC0, 0x44, 0x13, 0x8E, 0xB0, 0x45, 0x31, 0xB2, 0x40, 0x45, 0xF3, 0x70, 0xB0, -0x47, 0x11, 0x94, 0x40, 0x47, 0xEF, 0x02, 0x30, 0x48, 0xF1, 0x76, 0x40, 0x49, 0xBC, 0x6F, 0x30, -0x4A, 0xD1, 0x58, 0x40, 0x4B, 0xB8, 0x00, 0xB0, 0x4C, 0xB1, 0x3A, 0x40, 0x4D, 0xC6, 0x07, 0x30, -0x4E, 0x50, 0x82, 0xC0, 0x4F, 0x9C, 0xAE, 0xB0, 0x50, 0x42, 0xD9, 0xC0, 0x51, 0x7C, 0x90, 0xB0, -0x52, 0x2B, 0xF6, 0x40, 0x53, 0x5C, 0x72, 0xB0, 0x54, 0x0B, 0xD8, 0x40, 0x55, 0x3C, 0x54, 0xB0, -0x01, 0x00, 0x02, 0x00, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x04, -0x05, 0x04, 0x02, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x08, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, -0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, -0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, -0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0x53, 0x4D, 0x54, 0x00, 0x43, 0x4C, 0x54, 0x00, 0x43, -0x4C, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, -0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x56, 0x49, 0xD8, 0x00, 0xA6, 0xD4, 0x55, 0x00, 0x00, -0x00, 0x0E, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, - +0xD3, 0xDC, 0x8F, 0xC0, 0xD4, 0x1B, 0xC9, 0xB0, 0xD5, 0x33, 0x55, 0xC0, 0xD5, 0x76, 0x92, 0x40, +0xFD, 0xD1, 0x3C, 0x40, 0xFE, 0x92, 0xFA, 0xB0, 0xFF, 0xCC, 0xCD, 0xC0, 0x00, 0x72, 0xDC, 0xB0, +0x01, 0x75, 0x50, 0xC0, 0x02, 0x40, 0x49, 0xB0, 0x03, 0x55, 0x32, 0xC0, 0x04, 0x20, 0x2B, 0xB0, +0x05, 0x3E, 0x4F, 0x40, 0x06, 0x00, 0x0D, 0xB0, 0x07, 0x0B, 0xBC, 0x40, 0x07, 0xDF, 0xEF, 0xB0, +0x08, 0xFE, 0x13, 0x40, 0x09, 0xBF, 0xD1, 0xB0, 0x0A, 0xDD, 0xF5, 0x40, 0x0B, 0xA8, 0xEE, 0x30, +0x0C, 0xBD, 0xD7, 0x40, 0x0D, 0x88, 0xD0, 0x30, 0x0E, 0x9D, 0xB9, 0x40, 0x0F, 0x68, 0xB2, 0x30, +0x10, 0x86, 0xD5, 0xC0, 0x11, 0x48, 0x94, 0x30, 0x12, 0x66, 0xB7, 0xC0, 0x13, 0x28, 0x76, 0x30, +0x14, 0x46, 0x99, 0xC0, 0x15, 0x11, 0x92, 0xB0, 0x16, 0x26, 0x7B, 0xC0, 0x16, 0xF1, 0x74, 0xB0, +0x18, 0x06, 0x5D, 0xC0, 0x18, 0xD1, 0x56, 0xB0, 0x19, 0xE6, 0x3F, 0xC0, 0x1A, 0xB1, 0x38, 0xB0, +0x1B, 0xCF, 0x5C, 0x40, 0x1C, 0x91, 0x1A, 0xB0, 0x1D, 0xAF, 0x3E, 0x40, 0x1E, 0x70, 0xFC, 0xB0, +0x1F, 0x8F, 0x20, 0x40, 0x20, 0x7F, 0x03, 0x30, 0x21, 0x6F, 0x02, 0x40, 0x22, 0x39, 0xFB, 0x30, +0x23, 0x4E, 0xE4, 0x40, 0x24, 0x19, 0xDD, 0x30, 0x25, 0x38, 0x00, 0xC0, 0x25, 0xF9, 0xBF, 0x30, +0x26, 0xF2, 0xF8, 0xC0, 0x27, 0xD9, 0xA1, 0x30, 0x28, 0xF7, 0xC4, 0xC0, 0x29, 0xC2, 0xBD, 0xB0, +0x2A, 0xD7, 0xA6, 0xC0, 0x2B, 0xA2, 0x9F, 0xB0, 0x2C, 0xB7, 0x88, 0xC0, 0x2D, 0x82, 0x81, 0xB0, +0x2E, 0x97, 0x6A, 0xC0, 0x2F, 0x62, 0x63, 0xB0, 0x30, 0x80, 0x87, 0x40, 0x31, 0x42, 0x45, 0xB0, +0x32, 0x60, 0x69, 0x40, 0x33, 0x3D, 0xD7, 0x30, 0x34, 0x40, 0x4B, 0x40, 0x35, 0x0B, 0x44, 0x30, +0x36, 0x0D, 0xB8, 0x40, 0x37, 0x06, 0xD5, 0xB0, 0x38, 0x00, 0x0F, 0x40, 0x38, 0xCB, 0x08, 0x30, +0x39, 0xE9, 0x2B, 0xC0, 0x3A, 0xAA, 0xEA, 0x30, 0x3B, 0xC9, 0x0D, 0xC0, 0x3C, 0x8A, 0xCC, 0x30, +0x3D, 0xA8, 0xEF, 0xC0, 0x3E, 0x6A, 0xAE, 0x30, 0x3F, 0x88, 0xD1, 0xC0, 0x40, 0x53, 0xCA, 0xB0, +0x41, 0x68, 0xB3, 0xC0, 0x42, 0x33, 0xAC, 0xB0, 0x43, 0x48, 0x95, 0xC0, 0x44, 0x13, 0x8E, 0xB0, +0x45, 0x31, 0xB2, 0x40, 0x45, 0xF3, 0x70, 0xB0, 0x47, 0x11, 0x94, 0x40, 0x47, 0xEF, 0x02, 0x30, +0x48, 0xF1, 0x76, 0x40, 0x49, 0xBC, 0x6F, 0x30, 0x4A, 0xD1, 0x58, 0x40, 0x4B, 0xB8, 0x00, 0xB0, +0x4C, 0xB1, 0x3A, 0x40, 0x4D, 0xC6, 0x07, 0x30, 0x4E, 0x50, 0x82, 0xC0, 0x4F, 0x9C, 0xAE, 0xB0, +0x50, 0x42, 0xD9, 0xC0, 0x51, 0x7C, 0x90, 0xB0, 0x52, 0x2B, 0xF6, 0x40, 0x53, 0x5C, 0x72, 0xB0, +0x54, 0x0B, 0xD8, 0x40, 0x55, 0x3C, 0x54, 0xB0, 0x01, 0x00, 0x02, 0x00, 0x03, 0x01, 0x03, 0x01, +0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x02, 0x01, 0x02, 0x04, 0x02, 0x01, 0x02, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x07, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, +0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, +0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, +0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0x53, 0x4D, 0x54, 0x00, 0x43, +0x4C, 0x54, 0x00, 0x43, 0x4C, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x56, 0x49, 0xD8, 0x00, 0xA6, 0xD4, 0x55, +0x00, 0x00, 0x00, 0x0E, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, +0x6E, 0x73, /* America/Santo_Domingo */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x44, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -7316,8 +7316,8 @@ const unsigned char timelib_timezone_db_data_builtin[263380] = { 0x17, 0x30, 0xBC, 0xB0, 0x18, 0x06, 0x5D, 0xC0, 0x18, 0xD1, 0x56, 0xB0, 0x19, 0xE6, 0x3F, 0xC0, 0x1A, 0xB1, 0x38, 0xB0, 0x1B, 0xCF, 0x5C, 0x40, 0x1C, 0x91, 0x1A, 0xB0, 0x1D, 0xAF, 0x3E, 0x40, 0x1E, 0x70, 0xFC, 0xB0, 0x1F, 0x8F, 0x20, 0x40, 0x20, 0x7F, 0x03, 0x30, 0x21, 0x6F, 0x02, 0x40, -0x22, 0x39, 0xFB, 0x30, 0x23, 0x45, 0xA9, 0xC0, 0x24, 0x19, 0xDD, 0x30, 0x25, 0x38, 0x00, 0xC0, -0x26, 0x02, 0xF9, 0xB0, 0x26, 0xF2, 0xF8, 0xC0, 0x27, 0xD9, 0xA1, 0x30, 0x28, 0xF7, 0xC4, 0xC0, +0x22, 0x39, 0xFB, 0x30, 0x23, 0x4E, 0xE4, 0x40, 0x24, 0x19, 0xDD, 0x30, 0x25, 0x38, 0x00, 0xC0, +0x25, 0xF9, 0xBF, 0x30, 0x26, 0xF2, 0xF8, 0xC0, 0x27, 0xD9, 0xA1, 0x30, 0x28, 0xF7, 0xC4, 0xC0, 0x29, 0xC2, 0xBD, 0xB0, 0x2A, 0xD7, 0xA6, 0xC0, 0x2B, 0xA2, 0x9F, 0xB0, 0x2C, 0xB7, 0x88, 0xC0, 0x2D, 0x82, 0x81, 0xB0, 0x2E, 0x97, 0x6A, 0xC0, 0x2F, 0x62, 0x63, 0xB0, 0x30, 0x80, 0x87, 0x40, 0x31, 0x42, 0x45, 0xB0, 0x32, 0x60, 0x69, 0x40, 0x33, 0x3D, 0xD7, 0x30, 0x34, 0x40, 0x4B, 0x40, @@ -11869,91 +11869,90 @@ const unsigned char timelib_timezone_db_data_builtin[263380] = { /* Chile/Continental */ 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0D, 0x8F, 0x24, 0x69, 0xC6, -0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x71, 0x05, 0x46, 0xA1, 0x00, 0x71, 0xC0, 0xB0, 0x5E, 0x77, 0xC6, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0D, 0x8F, 0x30, 0x47, 0x46, +0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC6, 0xA1, 0x00, 0x71, 0xC0, 0xB0, 0x5E, 0x77, 0xC6, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, 0xB4, 0x22, 0x34, 0x50, 0xB5, 0x39, 0xA4, 0x40, 0xB6, 0x03, 0x67, 0xD0, 0xB7, 0x1A, 0xD7, 0xC0, 0xB7, 0xE4, 0x9B, 0x50, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xC7, 0x20, 0x50, 0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, -0xD4, 0x1B, 0xC9, 0xB0, 0xD5, 0x76, 0xA0, 0x50, 0xFD, 0xD1, 0x3C, 0x40, 0xFE, 0x92, 0xFA, 0xB0, -0xFF, 0xCC, 0xCD, 0xC0, 0x00, 0x72, 0xDC, 0xB0, 0x01, 0x75, 0x50, 0xC0, 0x02, 0x40, 0x49, 0xB0, -0x03, 0x55, 0x32, 0xC0, 0x04, 0x20, 0x2B, 0xB0, 0x05, 0x3E, 0x4F, 0x40, 0x06, 0x00, 0x0D, 0xB0, -0x07, 0x0B, 0xBC, 0x40, 0x07, 0xDF, 0xEF, 0xB0, 0x08, 0xFE, 0x13, 0x40, 0x09, 0xBF, 0xD1, 0xB0, -0x0A, 0xDD, 0xF5, 0x40, 0x0B, 0xA8, 0xEE, 0x30, 0x0C, 0xBD, 0xD7, 0x40, 0x0D, 0x88, 0xD0, 0x30, -0x0E, 0x9D, 0xB9, 0x40, 0x0F, 0x68, 0xB2, 0x30, 0x10, 0x86, 0xD5, 0xC0, 0x11, 0x48, 0x94, 0x30, -0x12, 0x66, 0xB7, 0xC0, 0x13, 0x28, 0x76, 0x30, 0x14, 0x46, 0x99, 0xC0, 0x15, 0x11, 0x92, 0xB0, -0x16, 0x26, 0x7B, 0xC0, 0x16, 0xF1, 0x74, 0xB0, 0x18, 0x06, 0x5D, 0xC0, 0x18, 0xD1, 0x56, 0xB0, -0x19, 0xE6, 0x3F, 0xC0, 0x1A, 0xB1, 0x38, 0xB0, 0x1B, 0xCF, 0x5C, 0x40, 0x1C, 0x91, 0x1A, 0xB0, -0x1D, 0xAF, 0x3E, 0x40, 0x1E, 0x70, 0xFC, 0xB0, 0x1F, 0x8F, 0x20, 0x40, 0x20, 0x7F, 0x03, 0x30, -0x21, 0x6F, 0x02, 0x40, 0x22, 0x39, 0xFB, 0x30, 0x23, 0x45, 0xA9, 0xC0, 0x24, 0x19, 0xDD, 0x30, -0x25, 0x38, 0x00, 0xC0, 0x26, 0x02, 0xF9, 0xB0, 0x26, 0xF2, 0xF8, 0xC0, 0x27, 0xD9, 0xA1, 0x30, -0x28, 0xF7, 0xC4, 0xC0, 0x29, 0xC2, 0xBD, 0xB0, 0x2A, 0xD7, 0xA6, 0xC0, 0x2B, 0xA2, 0x9F, 0xB0, -0x2C, 0xB7, 0x88, 0xC0, 0x2D, 0x82, 0x81, 0xB0, 0x2E, 0x97, 0x6A, 0xC0, 0x2F, 0x62, 0x63, 0xB0, -0x30, 0x80, 0x87, 0x40, 0x31, 0x42, 0x45, 0xB0, 0x32, 0x60, 0x69, 0x40, 0x33, 0x3D, 0xD7, 0x30, -0x34, 0x40, 0x4B, 0x40, 0x35, 0x0B, 0x44, 0x30, 0x36, 0x0D, 0xB8, 0x40, 0x37, 0x06, 0xD5, 0xB0, -0x38, 0x00, 0x0F, 0x40, 0x38, 0xCB, 0x08, 0x30, 0x39, 0xE9, 0x2B, 0xC0, 0x3A, 0xAA, 0xEA, 0x30, -0x3B, 0xC9, 0x0D, 0xC0, 0x3C, 0x8A, 0xCC, 0x30, 0x3D, 0xA8, 0xEF, 0xC0, 0x3E, 0x6A, 0xAE, 0x30, -0x3F, 0x88, 0xD1, 0xC0, 0x40, 0x53, 0xCA, 0xB0, 0x41, 0x68, 0xB3, 0xC0, 0x42, 0x33, 0xAC, 0xB0, -0x43, 0x48, 0x95, 0xC0, 0x44, 0x13, 0x8E, 0xB0, 0x45, 0x31, 0xB2, 0x40, 0x45, 0xF3, 0x70, 0xB0, -0x47, 0x11, 0x94, 0x40, 0x47, 0xEF, 0x02, 0x30, 0x48, 0xF1, 0x76, 0x40, 0x49, 0xBC, 0x6F, 0x30, -0x4A, 0xD1, 0x58, 0x40, 0x4B, 0xB8, 0x00, 0xB0, 0x4C, 0xB1, 0x3A, 0x40, 0x4D, 0xC6, 0x07, 0x30, -0x4E, 0x50, 0x82, 0xC0, 0x4F, 0x9C, 0xAE, 0xB0, 0x50, 0x42, 0xD9, 0xC0, 0x51, 0x7C, 0x90, 0xB0, -0x52, 0x2B, 0xF6, 0x40, 0x53, 0x5C, 0x72, 0xB0, 0x54, 0x0B, 0xD8, 0x40, 0x55, 0x3C, 0x54, 0xB0, -0x01, 0x00, 0x02, 0x00, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x04, -0x05, 0x04, 0x02, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x08, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, -0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, -0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, -0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0x53, 0x4D, 0x54, 0x00, 0x43, 0x4C, 0x54, 0x00, 0x43, -0x4C, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, -0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, -0x00, 0x00, +0xD3, 0xDC, 0x8F, 0xC0, 0xD4, 0x1B, 0xC9, 0xB0, 0xD5, 0x33, 0x55, 0xC0, 0xD5, 0x76, 0x92, 0x40, +0xFD, 0xD1, 0x3C, 0x40, 0xFE, 0x92, 0xFA, 0xB0, 0xFF, 0xCC, 0xCD, 0xC0, 0x00, 0x72, 0xDC, 0xB0, +0x01, 0x75, 0x50, 0xC0, 0x02, 0x40, 0x49, 0xB0, 0x03, 0x55, 0x32, 0xC0, 0x04, 0x20, 0x2B, 0xB0, +0x05, 0x3E, 0x4F, 0x40, 0x06, 0x00, 0x0D, 0xB0, 0x07, 0x0B, 0xBC, 0x40, 0x07, 0xDF, 0xEF, 0xB0, +0x08, 0xFE, 0x13, 0x40, 0x09, 0xBF, 0xD1, 0xB0, 0x0A, 0xDD, 0xF5, 0x40, 0x0B, 0xA8, 0xEE, 0x30, +0x0C, 0xBD, 0xD7, 0x40, 0x0D, 0x88, 0xD0, 0x30, 0x0E, 0x9D, 0xB9, 0x40, 0x0F, 0x68, 0xB2, 0x30, +0x10, 0x86, 0xD5, 0xC0, 0x11, 0x48, 0x94, 0x30, 0x12, 0x66, 0xB7, 0xC0, 0x13, 0x28, 0x76, 0x30, +0x14, 0x46, 0x99, 0xC0, 0x15, 0x11, 0x92, 0xB0, 0x16, 0x26, 0x7B, 0xC0, 0x16, 0xF1, 0x74, 0xB0, +0x18, 0x06, 0x5D, 0xC0, 0x18, 0xD1, 0x56, 0xB0, 0x19, 0xE6, 0x3F, 0xC0, 0x1A, 0xB1, 0x38, 0xB0, +0x1B, 0xCF, 0x5C, 0x40, 0x1C, 0x91, 0x1A, 0xB0, 0x1D, 0xAF, 0x3E, 0x40, 0x1E, 0x70, 0xFC, 0xB0, +0x1F, 0x8F, 0x20, 0x40, 0x20, 0x7F, 0x03, 0x30, 0x21, 0x6F, 0x02, 0x40, 0x22, 0x39, 0xFB, 0x30, +0x23, 0x4E, 0xE4, 0x40, 0x24, 0x19, 0xDD, 0x30, 0x25, 0x38, 0x00, 0xC0, 0x25, 0xF9, 0xBF, 0x30, +0x26, 0xF2, 0xF8, 0xC0, 0x27, 0xD9, 0xA1, 0x30, 0x28, 0xF7, 0xC4, 0xC0, 0x29, 0xC2, 0xBD, 0xB0, +0x2A, 0xD7, 0xA6, 0xC0, 0x2B, 0xA2, 0x9F, 0xB0, 0x2C, 0xB7, 0x88, 0xC0, 0x2D, 0x82, 0x81, 0xB0, +0x2E, 0x97, 0x6A, 0xC0, 0x2F, 0x62, 0x63, 0xB0, 0x30, 0x80, 0x87, 0x40, 0x31, 0x42, 0x45, 0xB0, +0x32, 0x60, 0x69, 0x40, 0x33, 0x3D, 0xD7, 0x30, 0x34, 0x40, 0x4B, 0x40, 0x35, 0x0B, 0x44, 0x30, +0x36, 0x0D, 0xB8, 0x40, 0x37, 0x06, 0xD5, 0xB0, 0x38, 0x00, 0x0F, 0x40, 0x38, 0xCB, 0x08, 0x30, +0x39, 0xE9, 0x2B, 0xC0, 0x3A, 0xAA, 0xEA, 0x30, 0x3B, 0xC9, 0x0D, 0xC0, 0x3C, 0x8A, 0xCC, 0x30, +0x3D, 0xA8, 0xEF, 0xC0, 0x3E, 0x6A, 0xAE, 0x30, 0x3F, 0x88, 0xD1, 0xC0, 0x40, 0x53, 0xCA, 0xB0, +0x41, 0x68, 0xB3, 0xC0, 0x42, 0x33, 0xAC, 0xB0, 0x43, 0x48, 0x95, 0xC0, 0x44, 0x13, 0x8E, 0xB0, +0x45, 0x31, 0xB2, 0x40, 0x45, 0xF3, 0x70, 0xB0, 0x47, 0x11, 0x94, 0x40, 0x47, 0xEF, 0x02, 0x30, +0x48, 0xF1, 0x76, 0x40, 0x49, 0xBC, 0x6F, 0x30, 0x4A, 0xD1, 0x58, 0x40, 0x4B, 0xB8, 0x00, 0xB0, +0x4C, 0xB1, 0x3A, 0x40, 0x4D, 0xC6, 0x07, 0x30, 0x4E, 0x50, 0x82, 0xC0, 0x4F, 0x9C, 0xAE, 0xB0, +0x50, 0x42, 0xD9, 0xC0, 0x51, 0x7C, 0x90, 0xB0, 0x52, 0x2B, 0xF6, 0x40, 0x53, 0x5C, 0x72, 0xB0, +0x54, 0x0B, 0xD8, 0x40, 0x55, 0x3C, 0x54, 0xB0, 0x01, 0x00, 0x02, 0x00, 0x03, 0x01, 0x03, 0x01, +0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x02, 0x01, 0x02, 0x04, 0x02, 0x01, 0x02, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x07, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, +0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, +0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, +0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0x53, 0x4D, 0x54, 0x00, 0x43, +0x4C, 0x54, 0x00, 0x43, 0x4C, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, +0x00, 0x00, 0x00, 0x00, /* Chile/EasterIsland */ 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0F, 0xB9, 0xC7, 0x40, 0x88, -0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, 0xD4, 0x1B, 0xC9, 0xB0, 0xFD, 0xD1, 0x3C, 0x40, -0xFE, 0x92, 0xFA, 0xB0, 0xFF, 0xCC, 0xCD, 0xC0, 0x00, 0x72, 0xDC, 0xB0, 0x01, 0x75, 0x50, 0xC0, -0x02, 0x40, 0x49, 0xB0, 0x03, 0x55, 0x32, 0xC0, 0x04, 0x20, 0x2B, 0xB0, 0x05, 0x3E, 0x4F, 0x40, -0x06, 0x00, 0x0D, 0xB0, 0x07, 0x0B, 0xBC, 0x40, 0x07, 0xDF, 0xEF, 0xB0, 0x08, 0xFE, 0x13, 0x40, -0x09, 0xBF, 0xD1, 0xB0, 0x0A, 0xDD, 0xF5, 0x40, 0x0B, 0xA8, 0xEE, 0x30, 0x0C, 0xBD, 0xD7, 0x40, -0x0D, 0x88, 0xD0, 0x30, 0x0E, 0x9D, 0xB9, 0x40, 0x0F, 0x68, 0xB2, 0x30, 0x10, 0x86, 0xD5, 0xC0, -0x11, 0x48, 0x94, 0x30, 0x12, 0x66, 0xB7, 0xC0, 0x13, 0x28, 0x76, 0x30, 0x14, 0x46, 0x99, 0xC0, -0x15, 0x11, 0x92, 0xB0, 0x16, 0x26, 0x7B, 0xC0, 0x16, 0xF1, 0x74, 0xB0, 0x18, 0x06, 0x5D, 0xC0, -0x18, 0xD1, 0x56, 0xB0, 0x19, 0xE6, 0x3F, 0xC0, 0x1A, 0xB1, 0x38, 0xB0, 0x1B, 0xCF, 0x5C, 0x40, -0x1C, 0x91, 0x1A, 0xB0, 0x1D, 0xAF, 0x3E, 0x40, 0x1E, 0x70, 0xFC, 0xB0, 0x1F, 0x8F, 0x20, 0x40, -0x20, 0x7F, 0x03, 0x30, 0x21, 0x6F, 0x02, 0x40, 0x22, 0x39, 0xFB, 0x30, 0x23, 0x45, 0xA9, 0xC0, -0x24, 0x19, 0xDD, 0x30, 0x25, 0x38, 0x00, 0xC0, 0x26, 0x02, 0xF9, 0xB0, 0x26, 0xF2, 0xF8, 0xC0, -0x27, 0xD9, 0xA1, 0x30, 0x28, 0xF7, 0xC4, 0xC0, 0x29, 0xC2, 0xBD, 0xB0, 0x2A, 0xD7, 0xA6, 0xC0, -0x2B, 0xA2, 0x9F, 0xB0, 0x2C, 0xB7, 0x88, 0xC0, 0x2D, 0x82, 0x81, 0xB0, 0x2E, 0x97, 0x6A, 0xC0, -0x2F, 0x62, 0x63, 0xB0, 0x30, 0x80, 0x87, 0x40, 0x31, 0x42, 0x45, 0xB0, 0x32, 0x60, 0x69, 0x40, -0x33, 0x3D, 0xD7, 0x30, 0x34, 0x40, 0x4B, 0x40, 0x35, 0x0B, 0x44, 0x30, 0x36, 0x0D, 0xB8, 0x40, -0x37, 0x06, 0xD5, 0xB0, 0x38, 0x00, 0x0F, 0x40, 0x38, 0xCB, 0x08, 0x30, 0x39, 0xE9, 0x2B, 0xC0, -0x3A, 0xAA, 0xEA, 0x30, 0x3B, 0xC9, 0x0D, 0xC0, 0x3C, 0x8A, 0xCC, 0x30, 0x3D, 0xA8, 0xEF, 0xC0, -0x3E, 0x6A, 0xAE, 0x30, 0x3F, 0x88, 0xD1, 0xC0, 0x40, 0x53, 0xCA, 0xB0, 0x41, 0x68, 0xB3, 0xC0, -0x42, 0x33, 0xAC, 0xB0, 0x43, 0x48, 0x95, 0xC0, 0x44, 0x13, 0x8E, 0xB0, 0x45, 0x31, 0xB2, 0x40, -0x45, 0xF3, 0x70, 0xB0, 0x47, 0x11, 0x94, 0x40, 0x47, 0xEF, 0x02, 0x30, 0x48, 0xF1, 0x76, 0x40, -0x49, 0xBC, 0x6F, 0x30, 0x4A, 0xD1, 0x58, 0x40, 0x4B, 0xB8, 0x00, 0xB0, 0x4C, 0xB1, 0x3A, 0x40, -0x4D, 0xC6, 0x07, 0x30, 0x4E, 0x50, 0x82, 0xC0, 0x4F, 0x9C, 0xAE, 0xB0, 0x50, 0x42, 0xD9, 0xC0, -0x51, 0x7C, 0x90, 0xB0, 0x52, 0x2B, 0xF6, 0x40, 0x53, 0x5C, 0x72, 0xB0, 0x54, 0x0B, 0xD8, 0x40, -0x55, 0x3C, 0x54, 0xB0, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0F, 0xB9, 0xC7, 0x40, 0x88, +0xFD, 0xD1, 0x3C, 0x40, 0xFE, 0x92, 0xFA, 0xB0, 0xFF, 0xCC, 0xCD, 0xC0, 0x00, 0x72, 0xDC, 0xB0, +0x01, 0x75, 0x50, 0xC0, 0x02, 0x40, 0x49, 0xB0, 0x03, 0x55, 0x32, 0xC0, 0x04, 0x20, 0x2B, 0xB0, +0x05, 0x3E, 0x4F, 0x40, 0x06, 0x00, 0x0D, 0xB0, 0x07, 0x0B, 0xBC, 0x40, 0x07, 0xDF, 0xEF, 0xB0, +0x08, 0xFE, 0x13, 0x40, 0x09, 0xBF, 0xD1, 0xB0, 0x0A, 0xDD, 0xF5, 0x40, 0x0B, 0xA8, 0xEE, 0x30, +0x0C, 0xBD, 0xD7, 0x40, 0x0D, 0x88, 0xD0, 0x30, 0x0E, 0x9D, 0xB9, 0x40, 0x0F, 0x68, 0xB2, 0x30, +0x10, 0x86, 0xD5, 0xC0, 0x11, 0x48, 0x94, 0x30, 0x12, 0x66, 0xB7, 0xC0, 0x13, 0x28, 0x76, 0x30, +0x14, 0x46, 0x99, 0xC0, 0x15, 0x11, 0x92, 0xB0, 0x16, 0x26, 0x7B, 0xC0, 0x16, 0xF1, 0x74, 0xB0, +0x18, 0x06, 0x5D, 0xC0, 0x18, 0xD1, 0x56, 0xB0, 0x19, 0xE6, 0x3F, 0xC0, 0x1A, 0xB1, 0x38, 0xB0, +0x1B, 0xCF, 0x5C, 0x40, 0x1C, 0x91, 0x1A, 0xB0, 0x1D, 0xAF, 0x3E, 0x40, 0x1E, 0x70, 0xFC, 0xB0, +0x1F, 0x8F, 0x20, 0x40, 0x20, 0x7F, 0x03, 0x30, 0x21, 0x6F, 0x02, 0x40, 0x22, 0x39, 0xFB, 0x30, +0x23, 0x4E, 0xE4, 0x40, 0x24, 0x19, 0xDD, 0x30, 0x25, 0x38, 0x00, 0xC0, 0x25, 0xF9, 0xBF, 0x30, +0x26, 0xF2, 0xF8, 0xC0, 0x27, 0xD9, 0xA1, 0x30, 0x28, 0xF7, 0xC4, 0xC0, 0x29, 0xC2, 0xBD, 0xB0, +0x2A, 0xD7, 0xA6, 0xC0, 0x2B, 0xA2, 0x9F, 0xB0, 0x2C, 0xB7, 0x88, 0xC0, 0x2D, 0x82, 0x81, 0xB0, +0x2E, 0x97, 0x6A, 0xC0, 0x2F, 0x62, 0x63, 0xB0, 0x30, 0x80, 0x87, 0x40, 0x31, 0x42, 0x45, 0xB0, +0x32, 0x60, 0x69, 0x40, 0x33, 0x3D, 0xD7, 0x30, 0x34, 0x40, 0x4B, 0x40, 0x35, 0x0B, 0x44, 0x30, +0x36, 0x0D, 0xB8, 0x40, 0x37, 0x06, 0xD5, 0xB0, 0x38, 0x00, 0x0F, 0x40, 0x38, 0xCB, 0x08, 0x30, +0x39, 0xE9, 0x2B, 0xC0, 0x3A, 0xAA, 0xEA, 0x30, 0x3B, 0xC9, 0x0D, 0xC0, 0x3C, 0x8A, 0xCC, 0x30, +0x3D, 0xA8, 0xEF, 0xC0, 0x3E, 0x6A, 0xAE, 0x30, 0x3F, 0x88, 0xD1, 0xC0, 0x40, 0x53, 0xCA, 0xB0, +0x41, 0x68, 0xB3, 0xC0, 0x42, 0x33, 0xAC, 0xB0, 0x43, 0x48, 0x95, 0xC0, 0x44, 0x13, 0x8E, 0xB0, +0x45, 0x31, 0xB2, 0x40, 0x45, 0xF3, 0x70, 0xB0, 0x47, 0x11, 0x94, 0x40, 0x47, 0xEF, 0x02, 0x30, +0x48, 0xF1, 0x76, 0x40, 0x49, 0xBC, 0x6F, 0x30, 0x4A, 0xD1, 0x58, 0x40, 0x4B, 0xB8, 0x00, 0xB0, +0x4C, 0xB1, 0x3A, 0x40, 0x4D, 0xC6, 0x07, 0x30, 0x4E, 0x50, 0x82, 0xC0, 0x4F, 0x9C, 0xAE, 0xB0, +0x50, 0x42, 0xD9, 0xC0, 0x51, 0x7C, 0x90, 0xB0, 0x52, 0x2B, 0xF6, 0x40, 0x53, 0x5C, 0x72, 0xB0, +0x54, 0x0B, 0xD8, 0x40, 0x55, 0x3C, 0x54, 0xB0, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0xFF, 0xFF, 0x99, 0x78, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, -0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x09, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x09, 0xFF, 0xFF, -0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x09, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, -0x45, 0x4D, 0x54, 0x00, 0x45, 0x41, 0x53, 0x54, 0x00, 0x45, 0x41, 0x53, 0x53, 0x54, 0x00, 0x00, -0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x89, 0x54, -0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, +0x02, 0x01, 0x02, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, +0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, +0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, +0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, +0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0xFF, 0xFF, 0x99, 0x78, 0x00, 0x00, 0xFF, 0xFF, 0xAB, +0xA0, 0x01, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x0A, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x0A, 0xFF, +0xFF, 0xAB, 0xA0, 0x00, 0x0A, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, +0x0A, 0x45, 0x4D, 0x54, 0x00, 0x45, 0x41, 0x53, 0x53, 0x54, 0x00, 0x45, 0x41, 0x53, 0x54, 0x00, +0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x89, +0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, /* CST6CDT */ 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -12150,7 +12149,7 @@ const unsigned char timelib_timezone_db_data_builtin[263380] = { 0x46, 0xE0, 0x6A, 0x50, 0x48, 0x11, 0x02, 0xE0, 0x48, 0xB7, 0x11, 0xD0, 0x49, 0xF0, 0xE4, 0xE0, 0x4A, 0x8D, 0xB9, 0x50, 0x4B, 0xDA, 0x01, 0x60, 0x4C, 0x61, 0xBD, 0xD0, 0x4C, 0x89, 0x58, 0xE0, 0x4C, 0xA4, 0xFA, 0x50, 0x53, 0x75, 0x38, 0xE0, 0x53, 0xAC, 0x89, 0xD0, 0x53, 0xDA, 0xBC, 0x60, -0x54, 0x24, 0x82, 0x50, 0x55, 0x39, 0x6B, 0x60, 0x55, 0x79, 0xF6, 0xD0, 0x55, 0xB1, 0x63, 0xE0, +0x54, 0x24, 0x82, 0x50, 0x55, 0x42, 0xA5, 0xE0, 0x55, 0x79, 0xF6, 0xD0, 0x55, 0xB1, 0x63, 0xE0, 0x56, 0x04, 0x64, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0x50, 0x9E, 0x50, 0x57, 0x7E, 0xD0, 0xE0, 0x57, 0xED, 0x80, 0xD0, 0x59, 0x02, 0x69, 0xE0, 0x59, 0x27, 0x45, 0xD0, 0x59, 0x55, 0x78, 0x60, 0x59, 0xCD, 0x62, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5A, 0xF4, 0xB2, 0xD0, 0x5B, 0x22, 0xE5, 0x60, @@ -12158,12 +12157,12 @@ const unsigned char timelib_timezone_db_data_builtin[263380] = { 0x5D, 0x8D, 0x26, 0xD0, 0x5E, 0xD0, 0x34, 0x60, 0x5F, 0x6D, 0x08, 0xD0, 0x60, 0x9D, 0xA1, 0x60, 0x61, 0x56, 0x25, 0x50, 0x62, 0x74, 0x48, 0xE0, 0x63, 0x36, 0x07, 0x50, 0x64, 0x4A, 0xF0, 0x60, 0x65, 0x15, 0xE9, 0x50, 0x66, 0x2A, 0xD2, 0x60, 0x66, 0xF5, 0xCB, 0x50, 0x68, 0x0A, 0xB4, 0x60, -0x68, 0xD5, 0xAD, 0x50, 0x69, 0xEA, 0x96, 0x60, 0x6A, 0xB5, 0x8F, 0x50, 0x6B, 0xD3, 0xB2, 0xE0, +0x68, 0xD5, 0xAD, 0x50, 0x69, 0xF3, 0xD0, 0xE0, 0x6A, 0xB5, 0x8F, 0x50, 0x6B, 0xD3, 0xB2, 0xE0, 0x6C, 0x9E, 0xAB, 0xD0, 0x6D, 0xB3, 0x94, 0xE0, 0x6E, 0x7E, 0x8D, 0xD0, 0x6F, 0x93, 0x76, 0xE0, 0x70, 0x5E, 0x6F, 0xD0, 0x71, 0x73, 0x58, 0xE0, 0x72, 0x3E, 0x51, 0xD0, 0x73, 0x53, 0x3A, 0xE0, 0x74, 0x1E, 0x33, 0xD0, 0x75, 0x3C, 0x57, 0x60, 0x76, 0x07, 0x50, 0x50, 0x77, 0x1C, 0x39, 0x60, 0x77, 0xE7, 0x32, 0x50, 0x78, 0xFC, 0x1B, 0x60, 0x79, 0xC7, 0x14, 0x50, 0x7A, 0xDB, 0xFD, 0x60, -0x7B, 0xA6, 0xF6, 0x50, 0x7C, 0xBB, 0xDF, 0x60, 0x7D, 0x86, 0xD8, 0x50, 0x7E, 0x9B, 0xC1, 0x60, +0x7B, 0xA6, 0xF6, 0x50, 0x7C, 0xBB, 0xDF, 0x60, 0x7D, 0x86, 0xD8, 0x50, 0x7E, 0xA4, 0xFB, 0xE0, 0x7F, 0x66, 0xBA, 0x50, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, @@ -12172,10 +12171,10 @@ const unsigned char timelib_timezone_db_data_builtin[263380] = { 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, -0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, -0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, +0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, +0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, +0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, +0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, @@ -17051,44 +17050,43 @@ const unsigned char timelib_timezone_db_data_builtin[263380] = { /* Pacific/Easter */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0F, 0xB9, 0xC7, 0x40, 0x88, -0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, 0xD4, 0x1B, 0xC9, 0xB0, 0xFD, 0xD1, 0x3C, 0x40, -0xFE, 0x92, 0xFA, 0xB0, 0xFF, 0xCC, 0xCD, 0xC0, 0x00, 0x72, 0xDC, 0xB0, 0x01, 0x75, 0x50, 0xC0, -0x02, 0x40, 0x49, 0xB0, 0x03, 0x55, 0x32, 0xC0, 0x04, 0x20, 0x2B, 0xB0, 0x05, 0x3E, 0x4F, 0x40, -0x06, 0x00, 0x0D, 0xB0, 0x07, 0x0B, 0xBC, 0x40, 0x07, 0xDF, 0xEF, 0xB0, 0x08, 0xFE, 0x13, 0x40, -0x09, 0xBF, 0xD1, 0xB0, 0x0A, 0xDD, 0xF5, 0x40, 0x0B, 0xA8, 0xEE, 0x30, 0x0C, 0xBD, 0xD7, 0x40, -0x0D, 0x88, 0xD0, 0x30, 0x0E, 0x9D, 0xB9, 0x40, 0x0F, 0x68, 0xB2, 0x30, 0x10, 0x86, 0xD5, 0xC0, -0x11, 0x48, 0x94, 0x30, 0x12, 0x66, 0xB7, 0xC0, 0x13, 0x28, 0x76, 0x30, 0x14, 0x46, 0x99, 0xC0, -0x15, 0x11, 0x92, 0xB0, 0x16, 0x26, 0x7B, 0xC0, 0x16, 0xF1, 0x74, 0xB0, 0x18, 0x06, 0x5D, 0xC0, -0x18, 0xD1, 0x56, 0xB0, 0x19, 0xE6, 0x3F, 0xC0, 0x1A, 0xB1, 0x38, 0xB0, 0x1B, 0xCF, 0x5C, 0x40, -0x1C, 0x91, 0x1A, 0xB0, 0x1D, 0xAF, 0x3E, 0x40, 0x1E, 0x70, 0xFC, 0xB0, 0x1F, 0x8F, 0x20, 0x40, -0x20, 0x7F, 0x03, 0x30, 0x21, 0x6F, 0x02, 0x40, 0x22, 0x39, 0xFB, 0x30, 0x23, 0x45, 0xA9, 0xC0, -0x24, 0x19, 0xDD, 0x30, 0x25, 0x38, 0x00, 0xC0, 0x26, 0x02, 0xF9, 0xB0, 0x26, 0xF2, 0xF8, 0xC0, -0x27, 0xD9, 0xA1, 0x30, 0x28, 0xF7, 0xC4, 0xC0, 0x29, 0xC2, 0xBD, 0xB0, 0x2A, 0xD7, 0xA6, 0xC0, -0x2B, 0xA2, 0x9F, 0xB0, 0x2C, 0xB7, 0x88, 0xC0, 0x2D, 0x82, 0x81, 0xB0, 0x2E, 0x97, 0x6A, 0xC0, -0x2F, 0x62, 0x63, 0xB0, 0x30, 0x80, 0x87, 0x40, 0x31, 0x42, 0x45, 0xB0, 0x32, 0x60, 0x69, 0x40, -0x33, 0x3D, 0xD7, 0x30, 0x34, 0x40, 0x4B, 0x40, 0x35, 0x0B, 0x44, 0x30, 0x36, 0x0D, 0xB8, 0x40, -0x37, 0x06, 0xD5, 0xB0, 0x38, 0x00, 0x0F, 0x40, 0x38, 0xCB, 0x08, 0x30, 0x39, 0xE9, 0x2B, 0xC0, -0x3A, 0xAA, 0xEA, 0x30, 0x3B, 0xC9, 0x0D, 0xC0, 0x3C, 0x8A, 0xCC, 0x30, 0x3D, 0xA8, 0xEF, 0xC0, -0x3E, 0x6A, 0xAE, 0x30, 0x3F, 0x88, 0xD1, 0xC0, 0x40, 0x53, 0xCA, 0xB0, 0x41, 0x68, 0xB3, 0xC0, -0x42, 0x33, 0xAC, 0xB0, 0x43, 0x48, 0x95, 0xC0, 0x44, 0x13, 0x8E, 0xB0, 0x45, 0x31, 0xB2, 0x40, -0x45, 0xF3, 0x70, 0xB0, 0x47, 0x11, 0x94, 0x40, 0x47, 0xEF, 0x02, 0x30, 0x48, 0xF1, 0x76, 0x40, -0x49, 0xBC, 0x6F, 0x30, 0x4A, 0xD1, 0x58, 0x40, 0x4B, 0xB8, 0x00, 0xB0, 0x4C, 0xB1, 0x3A, 0x40, -0x4D, 0xC6, 0x07, 0x30, 0x4E, 0x50, 0x82, 0xC0, 0x4F, 0x9C, 0xAE, 0xB0, 0x50, 0x42, 0xD9, 0xC0, -0x51, 0x7C, 0x90, 0xB0, 0x52, 0x2B, 0xF6, 0x40, 0x53, 0x5C, 0x72, 0xB0, 0x54, 0x0B, 0xD8, 0x40, -0x55, 0x3C, 0x54, 0xB0, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0F, 0xB9, 0xC7, 0x40, 0x88, +0xFD, 0xD1, 0x3C, 0x40, 0xFE, 0x92, 0xFA, 0xB0, 0xFF, 0xCC, 0xCD, 0xC0, 0x00, 0x72, 0xDC, 0xB0, +0x01, 0x75, 0x50, 0xC0, 0x02, 0x40, 0x49, 0xB0, 0x03, 0x55, 0x32, 0xC0, 0x04, 0x20, 0x2B, 0xB0, +0x05, 0x3E, 0x4F, 0x40, 0x06, 0x00, 0x0D, 0xB0, 0x07, 0x0B, 0xBC, 0x40, 0x07, 0xDF, 0xEF, 0xB0, +0x08, 0xFE, 0x13, 0x40, 0x09, 0xBF, 0xD1, 0xB0, 0x0A, 0xDD, 0xF5, 0x40, 0x0B, 0xA8, 0xEE, 0x30, +0x0C, 0xBD, 0xD7, 0x40, 0x0D, 0x88, 0xD0, 0x30, 0x0E, 0x9D, 0xB9, 0x40, 0x0F, 0x68, 0xB2, 0x30, +0x10, 0x86, 0xD5, 0xC0, 0x11, 0x48, 0x94, 0x30, 0x12, 0x66, 0xB7, 0xC0, 0x13, 0x28, 0x76, 0x30, +0x14, 0x46, 0x99, 0xC0, 0x15, 0x11, 0x92, 0xB0, 0x16, 0x26, 0x7B, 0xC0, 0x16, 0xF1, 0x74, 0xB0, +0x18, 0x06, 0x5D, 0xC0, 0x18, 0xD1, 0x56, 0xB0, 0x19, 0xE6, 0x3F, 0xC0, 0x1A, 0xB1, 0x38, 0xB0, +0x1B, 0xCF, 0x5C, 0x40, 0x1C, 0x91, 0x1A, 0xB0, 0x1D, 0xAF, 0x3E, 0x40, 0x1E, 0x70, 0xFC, 0xB0, +0x1F, 0x8F, 0x20, 0x40, 0x20, 0x7F, 0x03, 0x30, 0x21, 0x6F, 0x02, 0x40, 0x22, 0x39, 0xFB, 0x30, +0x23, 0x4E, 0xE4, 0x40, 0x24, 0x19, 0xDD, 0x30, 0x25, 0x38, 0x00, 0xC0, 0x25, 0xF9, 0xBF, 0x30, +0x26, 0xF2, 0xF8, 0xC0, 0x27, 0xD9, 0xA1, 0x30, 0x28, 0xF7, 0xC4, 0xC0, 0x29, 0xC2, 0xBD, 0xB0, +0x2A, 0xD7, 0xA6, 0xC0, 0x2B, 0xA2, 0x9F, 0xB0, 0x2C, 0xB7, 0x88, 0xC0, 0x2D, 0x82, 0x81, 0xB0, +0x2E, 0x97, 0x6A, 0xC0, 0x2F, 0x62, 0x63, 0xB0, 0x30, 0x80, 0x87, 0x40, 0x31, 0x42, 0x45, 0xB0, +0x32, 0x60, 0x69, 0x40, 0x33, 0x3D, 0xD7, 0x30, 0x34, 0x40, 0x4B, 0x40, 0x35, 0x0B, 0x44, 0x30, +0x36, 0x0D, 0xB8, 0x40, 0x37, 0x06, 0xD5, 0xB0, 0x38, 0x00, 0x0F, 0x40, 0x38, 0xCB, 0x08, 0x30, +0x39, 0xE9, 0x2B, 0xC0, 0x3A, 0xAA, 0xEA, 0x30, 0x3B, 0xC9, 0x0D, 0xC0, 0x3C, 0x8A, 0xCC, 0x30, +0x3D, 0xA8, 0xEF, 0xC0, 0x3E, 0x6A, 0xAE, 0x30, 0x3F, 0x88, 0xD1, 0xC0, 0x40, 0x53, 0xCA, 0xB0, +0x41, 0x68, 0xB3, 0xC0, 0x42, 0x33, 0xAC, 0xB0, 0x43, 0x48, 0x95, 0xC0, 0x44, 0x13, 0x8E, 0xB0, +0x45, 0x31, 0xB2, 0x40, 0x45, 0xF3, 0x70, 0xB0, 0x47, 0x11, 0x94, 0x40, 0x47, 0xEF, 0x02, 0x30, +0x48, 0xF1, 0x76, 0x40, 0x49, 0xBC, 0x6F, 0x30, 0x4A, 0xD1, 0x58, 0x40, 0x4B, 0xB8, 0x00, 0xB0, +0x4C, 0xB1, 0x3A, 0x40, 0x4D, 0xC6, 0x07, 0x30, 0x4E, 0x50, 0x82, 0xC0, 0x4F, 0x9C, 0xAE, 0xB0, +0x50, 0x42, 0xD9, 0xC0, 0x51, 0x7C, 0x90, 0xB0, 0x52, 0x2B, 0xF6, 0x40, 0x53, 0x5C, 0x72, 0xB0, +0x54, 0x0B, 0xD8, 0x40, 0x55, 0x3C, 0x54, 0xB0, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0xFF, 0xFF, 0x99, 0x78, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, -0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x09, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x09, 0xFF, 0xFF, -0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x09, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, -0x45, 0x4D, 0x54, 0x00, 0x45, 0x41, 0x53, 0x54, 0x00, 0x45, 0x41, 0x53, 0x53, 0x54, 0x00, 0x00, -0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x5F, 0xE6, -0xC8, 0x00, 0x6B, 0xAD, 0x1A, 0x00, 0x00, 0x00, 0x0D, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, -0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, +0x02, 0x01, 0x02, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, +0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, +0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, +0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, +0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0xFF, 0xFF, 0x99, 0x78, 0x00, 0x00, 0xFF, 0xFF, 0xAB, +0xA0, 0x01, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x0A, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x0A, 0xFF, +0xFF, 0xAB, 0xA0, 0x00, 0x0A, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, +0x0A, 0x45, 0x4D, 0x54, 0x00, 0x45, 0x41, 0x53, 0x53, 0x54, 0x00, 0x45, 0x41, 0x53, 0x54, 0x00, +0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x5F, +0xE6, 0xC8, 0x00, 0x6B, 0xAD, 0x1A, 0x00, 0x00, 0x00, 0x0D, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, +0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, /* Pacific/Efate */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x56, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -18546,4 +18544,4 @@ const unsigned char timelib_timezone_db_data_builtin[263380] = { 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 = { "2015.2", 583, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; +const timelib_tzdb timezonedb_builtin = { "2015.3", 583, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 959ab4896c..f00ce047b4 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -3630,6 +3630,7 @@ PHP_FUNCTION(timezone_open) } tzobj = Z_PHPTIMEZONE_P(php_date_instantiate(date_ce_timezone, return_value)); if (SUCCESS != timezone_initialize(tzobj, tz)) { + zval_ptr_dtor(return_value); RETURN_FALSE; } } diff --git a/ext/date/tests/DateTimeZone_getTransitions_basic1.phpt b/ext/date/tests/DateTimeZone_getTransitions_basic1.phpt index f3640d1c1a..d17808035b 100644 --- a/ext/date/tests/DateTimeZone_getTransitions_basic1.phpt +++ b/ext/date/tests/DateTimeZone_getTransitions_basic1.phpt @@ -16,7 +16,7 @@ date_default_timezone_set("Europe/London"); // Create a DateTimeZone object $tz = new DateTimeZone("Europe/London"); -$tran = $tz->getTransitions(); +$tran = $tz->getTransitions(-306972000, -37241999); if (!is_array($tran)) { echo "TEST FAILED: Expected an array\n"; @@ -25,14 +25,14 @@ if (!is_array($tran)) { echo "\n-- Total number of transitions: " . count($tran). " --\n"; echo "\n-- Format a sample entry for Spring 1963 --\n"; -var_dump( $tran[97] ); +var_dump( $tran[6] ); ?> ===DONE=== --EXPECT-- *** Testing DateTimeZone::getTransitions() : basic functionality *** --- Total number of transitions: 243 -- +-- Total number of transitions: 18 -- -- Format a sample entry for Spring 1963 -- array(5) { diff --git a/ext/date/tests/DateTime_add-massive.phpt b/ext/date/tests/DateTime_add-massive.phpt index ca5bef985e..6093d05180 100644 --- a/ext/date/tests/DateTime_add-massive.phpt +++ b/ext/date/tests/DateTime_add-massive.phpt @@ -10,6 +10,6 @@ define('PHPT_DATETIME_SHOW', PHPT_DATETIME_SHOW_ADD); require 'DateTime_data-massive.inc'; ?> ---EXPECT-- -test_massive_positive: ADD: -333333-01-01 16:18:02 EST + P+666666Y0M0DT0H0M0S = **333333-01-01 16:18:02 EST** -test_massive_negative: ADD: 333333-01-01 16:18:02 EST + P-666666Y0M0DT0H0M0S = **-333333-01-01 16:18:02 EST** +--EXPECTF-- +test_massive_positive: ADD: -333333-01-01 16:18:02 %s + P+666666Y0M0DT0H0M0S = **333333-01-01 16:18:02 %s** +test_massive_negative: ADD: 333333-01-01 16:18:02 %s + P-666666Y0M0DT0H0M0S = **-333333-01-01 16:18:02 %s** diff --git a/ext/date/tests/DateTime_diff-massive.phpt b/ext/date/tests/DateTime_diff-massive.phpt index 2199f84864..12a7d0fb2d 100644 --- a/ext/date/tests/DateTime_diff-massive.phpt +++ b/ext/date/tests/DateTime_diff-massive.phpt @@ -10,6 +10,6 @@ define('PHPT_DATETIME_SHOW', PHPT_DATETIME_SHOW_DIFF); require 'DateTime_data-massive.inc'; ?> ---EXPECT-- -test_massive_positive: DIFF: 333333-01-01 16:18:02 EST - -333333-01-01 16:18:02 EST = **P+666666Y0M0DT0H0M0S** -test_massive_negative: DIFF: -333333-01-01 16:18:02 EST - 333333-01-01 16:18:02 EST = **P-666666Y0M0DT0H0M0S** +--EXPECTF-- +test_massive_positive: DIFF: 333333-01-01 16:18:02 %s - -333333-01-01 16:18:02 %s = **P+666666Y0M0DT0H%s** +test_massive_negative: DIFF: -333333-01-01 16:18:02 %s - 333333-01-01 16:18:02 %s = **P-666666Y0M0DT0H%s** diff --git a/ext/date/tests/DateTime_sub-massive.phpt b/ext/date/tests/DateTime_sub-massive.phpt index a0520ecdd9..e143056658 100644 --- a/ext/date/tests/DateTime_sub-massive.phpt +++ b/ext/date/tests/DateTime_sub-massive.phpt @@ -10,6 +10,6 @@ define('PHPT_DATETIME_SHOW', PHPT_DATETIME_SHOW_SUB); require 'DateTime_data-massive.inc'; ?> ---EXPECT-- -test_massive_positive: SUB: 333333-01-01 16:18:02 EST - P+666666Y0M0DT0H0M0S = **-333333-01-01 16:18:02 EST** -test_massive_negative: SUB: -333333-01-01 16:18:02 EST - P-666666Y0M0DT0H0M0S = **333333-01-01 16:18:02 EST** +--EXPECTF-- +test_massive_positive: SUB: 333333-01-01 16:18:02 %s - P+666666Y0M0DT0H0M0S = **-333333-01-01 16:18:02 %s** +test_massive_negative: SUB: -333333-01-01 16:18:02 %s - P-666666Y0M0DT0H0M0S = **333333-01-01 16:18:02 %s** diff --git a/ext/date/tests/bug48058.phpt b/ext/date/tests/bug48058.phpt index 46a1918b49..87d2190933 100644 --- a/ext/date/tests/bug48058.phpt +++ b/ext/date/tests/bug48058.phpt @@ -20,10 +20,10 @@ array(5) { ["time"]=> string(%d) "%s" ["offset"]=> - int(3600) + int(%s) ["isdst"]=> - bool(true) + bool(%s) ["abbr"]=> - string(3) "BST" + string(%d) "%s" } 10000002008-02-28T12:00:00+0000 diff --git a/ext/date/tests/mktime-3-64bit.phpt b/ext/date/tests/mktime-3-64bit.phpt index a3649cd148..cbb441f13c 100644 --- a/ext/date/tests/mktime-3-64bit.phpt +++ b/ext/date/tests/mktime-3-64bit.phpt @@ -24,7 +24,7 @@ foreach ($tzs as $tz) { echo "\n"; } ?> ---EXPECT-- +--EXPECTF-- America/Toronto Y: 0 - January 2000-01-01T01:01:01-0500 Y: 69 - January 2069-01-01T01:01:01-0500 @@ -32,11 +32,11 @@ Y: 70 - January 1970-01-01T01:01:01-0500 Y: 71 - January 1971-01-01T01:01:01-0500 Y: 99 - January 1999-01-01T01:01:01-0500 Y: 100 - January 2000-01-01T01:01:01-0500 -Y: 101 - January 0101-01-01T01:01:01-0500 -Y: 105 - January 0105-01-01T01:01:01-0500 -Y: 110 - January 0110-01-01T01:01:01-0500 -Y: 1900 - January 1900-01-01T01:01:01-0500 -Y: 1901 - January 1901-01-01T01:01:01-0500 +Y: 101 - January 0101-01-01T01:01:01-0%d +Y: 105 - January 0105-01-01T01:01:01-0%d +Y: 110 - January 0110-01-01T01:01:01-0%d +Y: 1900 - January 1900-01-01T01:01:01-0%d +Y: 1901 - January 1901-01-01T01:01:01-0%d Y: 1902 - January 1902-01-01T01:01:01-0500 Y: 1999 - January 1999-01-01T01:01:01-0500 Y: 2000 - January 2000-01-01T01:01:01-0500 @@ -49,11 +49,11 @@ Y: 70 - January 1970-01-01T01:01:01+0100 Y: 71 - January 1971-01-01T01:01:01+0100 Y: 99 - January 1999-01-01T01:01:01+0100 Y: 100 - January 2000-01-01T01:01:01+0100 -Y: 101 - January 0101-01-01T01:01:01+0100 -Y: 105 - January 0105-01-01T01:01:01+0100 -Y: 110 - January 0110-01-01T01:01:01+0100 -Y: 1900 - January 1900-01-01T01:01:01+0100 -Y: 1901 - January 1901-01-01T01:01:01+0100 +Y: 101 - January 0101-01-01T01:01:01+0%d +Y: 105 - January 0105-01-01T01:01:01+0%d +Y: 110 - January 0110-01-01T01:01:01+0%d +Y: 1900 - January 1900-01-01T01:01:01+0%d +Y: 1901 - January 1901-01-01T01:01:01+0%d Y: 1902 - January 1902-01-01T01:01:01+0100 Y: 1999 - January 1999-01-01T01:01:01+0100 Y: 2000 - January 2000-01-01T01:01:01+0100 diff --git a/ext/date/tests/timezone_transitions_get_basic1.phpt b/ext/date/tests/timezone_transitions_get_basic1.phpt index eb6cf99342..97c5f0ccc1 100644 --- a/ext/date/tests/timezone_transitions_get_basic1.phpt +++ b/ext/date/tests/timezone_transitions_get_basic1.phpt @@ -18,24 +18,24 @@ $tz = timezone_open("Europe/London"); $tran = timezone_transitions_get($tz); -echo "\n-- Get all transitions --\n"; -$tran = timezone_transitions_get($tz); +echo "\n-- Get all 60s transitions --\n"; +$tran = timezone_transitions_get($tz, -306972000, -37241999); var_dump( gettype($tran) ); echo "\n-- Total number of transitions: " . count($tran). " --\n"; echo "\n-- Format a sample entry pfor Spring 1963 --\n"; -var_dump( $tran[97] ); +var_dump( $tran[6] ); ?> ===DONE=== --EXPECT-- *** Testing timezone_transitions_get() : basic functionality *** --- Get all transitions -- +-- Get all 60s transitions -- string(5) "array" --- Total number of transitions: 243 -- +-- Total number of transitions: 18 -- -- Format a sample entry pfor Spring 1963 -- array(5) { diff --git a/ext/dom/document.c b/ext/dom/document.c index 92d5fb5d33..d435b1c281 100644 --- a/ext/dom/document.c +++ b/ext/dom/document.c @@ -1379,7 +1379,11 @@ static xmlDocPtr dom_document_parser(zval *id, int mode, char *source, size_t so xmlInitParser(); if (mode == DOM_LOAD_FILE) { - char *file_dest = _dom_get_valid_file_path(source, resolved_path, MAXPATHLEN ); + char *file_dest; + if (CHECK_NULL_PATH(source, source_len)) { + return NULL; + } + file_dest = _dom_get_valid_file_path(source, resolved_path, MAXPATHLEN); if (file_dest) { ctxt = xmlCreateFileParserCtxt(file_dest); } @@ -1979,7 +1983,7 @@ static void dom_load_html(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{ */ id = getThis(); - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|l", &source, &source_len, &options) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "p|l", &source, &source_len, &options) == FAILURE) { return; } diff --git a/ext/dom/tests/DOMDocument_loadHTMLfile_error2.phpt b/ext/dom/tests/DOMDocument_loadHTMLfile_error2.phpt index e59ff56c5a..75004e2a74 100644 --- a/ext/dom/tests/DOMDocument_loadHTMLfile_error2.phpt +++ b/ext/dom/tests/DOMDocument_loadHTMLfile_error2.phpt @@ -13,6 +13,11 @@ assert.bail=true $doc = new DOMDocument(); $result = $doc->loadHTMLFile(""); assert('$result === false'); +$doc = new DOMDocument(); +$result = $doc->loadHTMLFile("text.html\0something"); +assert('$result === null'); ?> --EXPECTF-- %r(PHP ){0,1}%rWarning: DOMDocument::loadHTMLFile(): Empty string supplied as input %s + +%r(PHP ){0,1}%rWarning: DOMDocument::loadHTMLFile() expects parameter 1 to be a valid path, string given %s diff --git a/ext/fileinfo/fileinfo.c b/ext/fileinfo/fileinfo.c index c4745f92fe..40df99df47 100644 --- a/ext/fileinfo/fileinfo.c +++ b/ext/fileinfo/fileinfo.c @@ -531,6 +531,11 @@ static void _php_finfo_get_type(INTERNAL_FUNCTION_PARAMETERS, int mode, int mime RETVAL_FALSE; goto clean; } + if (CHECK_NULL_PATH(buffer, buffer_len)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid path"); + RETVAL_FALSE; + goto clean; + } wrap = php_stream_locate_url_wrapper(buffer, &tmp2, 0); diff --git a/ext/fileinfo/libmagic/softmagic.c b/ext/fileinfo/libmagic/softmagic.c index 24fa0ec436..3fd30ff42c 100644 --- a/ext/fileinfo/libmagic/softmagic.c +++ b/ext/fileinfo/libmagic/softmagic.c @@ -624,7 +624,6 @@ mprint(struct magic_set *ms, struct magic *m) t = ms->offset + sizeof(double); break; - case FILE_SEARCH: case FILE_REGEX: { char *cp; int rval; @@ -648,6 +647,15 @@ mprint(struct magic_set *ms, struct magic *m) break; } + case FILE_SEARCH: + if (file_printf(ms, F(ms, m, "%s"), m->value.s) == -1) + return -1; + if ((m->str_flags & REGEX_OFFSET_START)) + t = ms->search.offset; + else + t = ms->search.offset + m->vallen; + break; + case FILE_DEFAULT: case FILE_CLEAR: if (file_printf(ms, "%s", m->desc) == -1) @@ -1101,7 +1109,14 @@ mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir, if (bytecnt > nbytes) { bytecnt = nbytes; } - + if (offset > bytecnt) { + offset = bytecnt; + } + if (s == NULL) { + ms->search.s_len = 0; + ms->search.s = NULL; + return 0; + } buf = RCAST(const char *, s) + offset; end = last = RCAST(const char *, s) + bytecnt; /* mget() guarantees buf <= last */ diff --git a/ext/fileinfo/tests/bug68819_001.phpt b/ext/fileinfo/tests/bug68819_001.phpt new file mode 100644 index 0000000000..ce39ee61db --- /dev/null +++ b/ext/fileinfo/tests/bug68819_001.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #68819 Fileinfo on specific file causes spurious OOM and/or segfault, var 1 +--SKIPIF-- +<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?> +--FILE-- +<?php + +$string = <<<HERE +----a-----'''---------a---------------a--------a-----a-----a---------a-----as-------a----a--a-------------a--as-----s---------------a---------a---a--s-a-----a-----------asy---------a-----a-----------a----s--------a-------------a-------a--------a----s------------a-----a----------------a----s-----------------\r\n-------------------a-------a-a-------a-----a----a----s----s--------a-----------------------a----a----s-------------a------------------s-------a----a---a------as---s-a--------------s-----a------a-y--a-------a-----a--a--------a----s--------a-------------a-------a--------a----s--------------a-----a----------a----------s--a----------s-----------------\r\n-------------------a-------a-a-------a-----a----a----s----s--------a----------a----------------------a----a----s-------------a----------------------------s-------a----a---a------as---s-a--------------s-----a------a-y--a-------a-----a--a--------a----s--------a-------------a-------a--------a----s--------------a-----a----------a----------s--a----------s-----------------\r\n------a-------a-a-------a-----a----a---a-----a-----------------------a----a---a-----a------------------s-------a----a---a-----a------as---s-a--------------s-----a------a-y--a-------a-----a--a--------a----s--------a-------------a-------a--------a----s--------------a-----a----------a----------s--a----------s------\r\n-------------------a-------a-a-------a-----a----a---a-------a------------------------a----a---a-----''--a-------------------s-------a----a---a------as---s-a--------------s-----a------a-y--a-------a-----a--a--------a----s--------a-------------a-------a--------a----s--------------a-----a----------a----------s--a----------s-----------------\r\n-------------------a-------a-a-------a-----a----a-------s-----a---a-------------------------a----a-------------a---a-------------------s-------a----a-------------a---a-----as-a--------------a-----a--s----s---------y------------a-----a-s---a-------''----a---s--a-''------''----s------------a-y----------------s------a-----y--a-s--a-s------s--a-s----------''----------------------------a---s--a----a---------a-s---a-s--------s--------a---------s--a-y-------------as----a----a-------------a------a---s--a-s------a--------a----s----y--as--a----a-s---------------a-----a--------------------------------------\r\n-------------------a-------a-a-------a-----a----a-----------s--------a-----------------------a----a--------------------a------------------s-------a----a---a------as---s-a--------------s-----a------a-y--a-------a-----a--a--------a----s--------a-------------a-------a--------a----s--------------a-----a----------a----------s--a----------s-----------------\r\n-------------------a-------a-a-------a-----a----a-----------s--------a----------a----------------------a----a--------------------a------------------------------s-------a----a---a------as---s-a--------------s-----a------a-y--a-------a-----a--a--------a----s--------a-------------a-------a--------a----s--------------a-----a----------a----------s--a----------s-----------------\r\n-------------------a-------a-a-------a-----a----a---a-----------------------a----a---a------------------s-------a----a---a------as---s-a--------------s-----a------a-y--a-------a-----a--a--------a----s--------a-------------a-------a--------a----s--------------a-----a----------a----------s--a----------s-----------------\r\n-------------------a-------a-a-------a-----a----a---a----------a----------------------a----a---a------------------------------s-------a----a---a------as---s-a--------------s-----a------a-y--a-------a-----a--a--------a----s--------a-------------a-------a--------a----s--------------a-----a----------a----------s--a----------s-----------------\r\n-----a-a-----------a-------a-a-------a-----a----a----a---s-----a-----------------------a----a----a---------a-----------------s-------a----a----a---------a------as---s-a--------------s-----a------a-y--a-------a-----a--a--------a----s--------a-------------a-------a--------a----s--------------a-----a----------a----------s--a----------s-----------------\r\n-------------------a-------a-a-------a-----a----a--------a----a-----------------------a----a----------a----a------------------s-------a----a---a------as---s-a--------------s-----a------a-y--a-------a-----a--a--------a----s--------a-------------a-------a--------a----s--------------a-----a----------a----------s--a----------s-----------------\r\n-----a-------------a-------a-a-------a-----a----a--------s-----a---a-------------------------a----a--------------a---a-------------------s-------------a---------------a----a---a---a-----as-a--------------a-----a--s----s---------y------------a-----a-s---a-------''----a---s--a-''------''----s------------a-y----------------s------a-----y--a-s--a-s------s--a-s----------''----------------------------a---s--a----a---------a-s---a-s--------s--------a---------s--a-y-------------as----a----a-------------a------a---s--a-s------a--------a----s----y--as--a----a-s---------------a-----a--------------------------------------\r\n-------------------a-------a-a-------a-----a----a----------------a-----------------------a----a----------------a------------------s-------a----a---a------as---s-a--------------s-----a------a-y--a-------a-----a--a--------a----s--------a-------------a-------a--------a----s--------------a-----a----------a----------s--a----------s-----------------\r\n-------------------a-------a-a-------a-----a----a----------------a----------a----------------------a----a----------------a-----------------------------s-------a----a---a------as---s-a--------------s-----a------a-y--a-------a-----a--a--------a----s--------a-------------a-------a--------a----s--------------a-----a----------a----------s--a----------s-----------------\r\n---a---------------a-------a-a-------a-----as------------------------a--a--s------------------a-s------------------------a-----s--a-----'''----------a-s---------------------------------------------a-----s--a-----------------a---------a---a--s-a-----a-----------asy---------a-----a-----------a----s----------------------a----s--a-------------a-------a--------a----s------------a-----a----------------a----s------------------\r\n-a-----------------a-------a-a-------a--y---------a------------------y---------a-----'''-------y------a-y--a-------------------------a---------a---a----------as-a---a--s-a-----a-----------asy---------a-----a-----------a----s--------a-------------a-------a--------a----s---------a-----a----------------a----s------------------\r\n-a-----------------a-------a-a-------a--y-------------a------------------y-------------a-----'''-------y----------a-y--a-------------------------a---------a---a----------as-a---a--s-a-----a-----------asy---------a-----a-----------a----s--------a-------------a-------a--------a----s---------a-----a----------------a----s------------------\r\n-------------------a-------a-a-------a--a----a-----a------------------a----a-----a-----'''----------a----s----a----a-------s---a------------------a-----------a--s-a-----a---------------------a------a----s-a-----a-------s-s-------a----s--------a-------------a-------a--------a----s---------a-----a----------------a----s------------------\r\n------aa-----------a-------a-a------------s-a--s---------a---a------------------------a------------a---a------------------s--------a------------a---a------as---s-a--------------s-----a------a-y--a-------a-----a--a--------a----s--------a-------------a-------a--------a----s--------------a-----a----------a----------s--a----------s-----------------\r\n-------------------a-------a-a------------------------s-----s--a----a-----------------------------------------s--a----a------------------s---------------------------------s--a----a------as---s-a--------------s-----a------a-y--a-------a-----a--a--------a----s--------a-------------a-------a--------a----s--------------a-----a----------a----------s--a----------s-----------------\r\n-------------------a-------a-a--------------s-a---a--------------------------a---a------------------s----------a---a------as---s-a--------------s-----a------a-y--a-------a-----a--a--------a----s--------a-------------a-------a--------a----s---------------a-----a----------a----------s--a----------s-----------------\r\nsay-------a------------s-----''------a----s--------a-------------a-\r\n +HERE; + +$finfo = new finfo(); +$type = $finfo->buffer($string); + +var_dump($type); +?> +--EXPECT-- +string(60) "ASCII text, with very long lines, with CRLF line terminators" diff --git a/ext/fileinfo/tests/bug68819_002.phpt b/ext/fileinfo/tests/bug68819_002.phpt new file mode 100644 index 0000000000..cec238d63e --- /dev/null +++ b/ext/fileinfo/tests/bug68819_002.phpt @@ -0,0 +1,26 @@ +--TEST-- +Bug #68819 Fileinfo on specific file causes spurious OOM and/or segfault, var 2 +--SKIPIF-- +<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?> +--FILE-- +<?php + +$string = ''; + +// These two in any order +$string .= "\r\n"; +$string .= "''''"; + +// Total string length > 8192 +$string .= str_repeat(chr(rand(32, 127)), 8184); + +// Ending in this string +$string .= "say"; + +$finfo = new finfo(); +$type = $finfo->buffer($string); +var_dump($type); + +?> +--EXPECT-- +string(60) "ASCII text, with very long lines, with CRLF line terminators" diff --git a/ext/fileinfo/tests/finfo_file_basic.phpt b/ext/fileinfo/tests/finfo_file_basic.phpt index 20223fd88e..84cf80d6d5 100644 --- a/ext/fileinfo/tests/finfo_file_basic.phpt +++ b/ext/fileinfo/tests/finfo_file_basic.phpt @@ -19,6 +19,7 @@ echo "*** Testing finfo_file() : basic functionality ***\n"; var_dump( finfo_file( $finfo, __FILE__) ); var_dump( finfo_file( $finfo, __FILE__, FILEINFO_CONTINUE ) ); var_dump( finfo_file( $finfo, $magicFile ) ); +var_dump( finfo_file( $finfo, $magicFile.chr(0).$magicFile) ); ?> ===DONE=== @@ -27,4 +28,7 @@ var_dump( finfo_file( $finfo, $magicFile ) ); string(28) "text/x-php; charset=us-ascii" string(22) "PHP script, ASCII text" string(25) "text/plain; charset=utf-8" + +Warning: finfo_file(): Invalid path in %s%efinfo_file_basic.php on line %d +bool(false) ===DONE=== diff --git a/ext/filter/filter.c b/ext/filter/filter.c index 67f190eda5..a2e22e7ed7 100644 --- a/ext/filter/filter.c +++ b/ext/filter/filter.c @@ -388,6 +388,7 @@ static void php_zval_filter(zval *value, zend_long filter, zend_long flags, zval ce = Z_OBJCE_P(value); if (!ce->__tostring) { + zval_ptr_dtor(value); ZVAL_FALSE(value); return; } diff --git a/ext/gd/gd.c b/ext/gd/gd.c index fec29d7519..9105fe6609 100644 --- a/ext/gd/gd.c +++ b/ext/gd/gd.c @@ -2405,7 +2405,7 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, #endif if (image_type == PHP_GDIMG_TYPE_GD2PART) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "sllll", &file, &file_len, &srcx, &srcy, &width, &height) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "pllll", &file, &file_len, &srcx, &srcy, &width, &height) == FAILURE) { return; } if (width < 1 || height < 1) { @@ -2413,7 +2413,7 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, RETURN_FALSE; } } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &file, &file_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "p", &file, &file_len) == FAILURE) { return; } } @@ -4155,7 +4155,7 @@ PHP_FUNCTION(imagepsencodefont) size_t enc_len; int *f_ind; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &fnt, &enc, &enc_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rp", &fnt, &enc, &enc_len) == FAILURE) { return; } diff --git a/ext/gd/tests/imageloadfont_error1.phpt b/ext/gd/tests/imageloadfont_error1.phpt index 0e1386fcaf..418bbf3ced 100644 --- a/ext/gd/tests/imageloadfont_error1.phpt +++ b/ext/gd/tests/imageloadfont_error1.phpt @@ -3,7 +3,7 @@ Testing that imageloadfont() breaks on non-string first parameter --CREDITS-- Neveo Harrison <neveoo [at] gmail [dot] com> #testfest #tek11 --SKIPIF-- -<?php +<?php if (!extension_loaded("gd")) die("skip GD not present"); ?> --FILE-- diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c index 9583934679..1994052686 100644 --- a/ext/gmp/gmp.c +++ b/ext/gmp/gmp.c @@ -245,6 +245,9 @@ typedef struct _gmp_temp { #define GMP_MAX_BASE 62 +#define GMP_51_OR_NEWER \ + ((__GNU_MP_VERSION >= 6) || (__GNU_MP_VERSION >= 5 && __GNU_MP_VERSION_MINOR >= 1)) + #define IS_GMP(zval) \ (Z_TYPE_P(zval) == IS_OBJECT && instanceof_function(Z_OBJCE_P(zval), gmp_ce)) @@ -1388,11 +1391,12 @@ ZEND_FUNCTION(gmp_pow) RETURN_FALSE; } - INIT_GMP_RETVAL(gmpnum_result); if (Z_TYPE_P(base_arg) == IS_LONG && Z_LVAL_P(base_arg) >= 0) { + INIT_GMP_RETVAL(gmpnum_result); mpz_ui_pow_ui(gmpnum_result, Z_LVAL_P(base_arg), exp); } else { FETCH_GMP_ZVAL(gmpnum_base, base_arg, temp_base); + INIT_GMP_RETVAL(gmpnum_result); mpz_pow_ui(gmpnum_result, gmpnum_base, exp); FREE_GMP_TEMP(temp_base); } @@ -1574,7 +1578,15 @@ ZEND_FUNCTION(gmp_rootrem) add_next_index_zval(return_value, &result1); add_next_index_zval(return_value, &result2); +#if GMP_51_OR_NEWER + /* mpz_rootrem() is supported since GMP 4.2, but buggy wrt odd roots + * of negative numbers */ mpz_rootrem(gmpnum_result1, gmpnum_result2, gmpnum_a, (gmp_ulong) nth); +#else + mpz_root(gmpnum_result1, gmpnum_a, (gmp_ulong) nth); + mpz_pow_ui(gmpnum_result2, gmpnum_result1, (gmp_ulong) nth); + mpz_sub(gmpnum_result2, gmpnum_a, gmpnum_result2); +#endif FREE_GMP_TEMP(temp_a); } diff --git a/ext/gmp/tests/gmp_random_bits.phpt b/ext/gmp/tests/gmp_random_bits.phpt index 21d493cdb6..b4aa5d7b73 100644 --- a/ext/gmp/tests/gmp_random_bits.phpt +++ b/ext/gmp/tests/gmp_random_bits.phpt @@ -13,7 +13,7 @@ var_dump(gmp_random_bits(-1)); gmp_random_bits(1); gmp_random_bits(1024); -// 2 seconds to make sure the numbers stay in range +// 0.5 seconds to make sure the numbers stay in range $start = microtime(true); $limit = (2 ** 30) - 1; while (1) { @@ -26,7 +26,7 @@ while (1) { } } - if (microtime(true) - $start > 2) { + if (microtime(true) - $start > 0.5) { break; } } diff --git a/ext/gmp/tests/gmp_random_range.phpt b/ext/gmp/tests/gmp_random_range.phpt index a8e7c4a9c1..db2ece61c5 100644 --- a/ext/gmp/tests/gmp_random_range.phpt +++ b/ext/gmp/tests/gmp_random_range.phpt @@ -30,7 +30,7 @@ gmp_random_range(-1, $plusTen); gmp_random_range($zero, $plusTen); gmp_random_range($minusTen, $plusTen); -// 2 seconds to make sure the numbers stay in range +// 0.5 seconds to make sure the numbers stay in range $start = microtime(true); while (1) { for ($i = 0; $i < 5000; $i++) { @@ -56,7 +56,7 @@ while (1) { } } - if (microtime(true) - $start > 2) { + if (microtime(true) - $start > 0.5) { break; } } diff --git a/ext/gmp/tests/gmp_remroot.phpt b/ext/gmp/tests/gmp_remroot.phpt index 4a3539d87c..331f447aa2 100644 --- a/ext/gmp/tests/gmp_remroot.phpt +++ b/ext/gmp/tests/gmp_remroot.phpt @@ -56,7 +56,7 @@ array(2) { [1]=> object(GMP)#%d (1) { ["num"]=> - string(2) "36" + string(3) "-36" } } array(2) { diff --git a/ext/hash/hash.c b/ext/hash/hash.c index 3a15fc6fcc..0510d3749c 100644 --- a/ext/hash/hash.c +++ b/ext/hash/hash.c @@ -137,6 +137,7 @@ static void php_hash_do_hash(INTERNAL_FUNCTION_PARAMETERS, int isfilename, zend_ } if (isfilename) { if (CHECK_NULL_PATH(data, data_len)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid path"); RETURN_FALSE; } stream = php_stream_open_wrapper_ex(data, "rb", REPORT_ERRORS, NULL, DEFAULT_CONTEXT); @@ -254,6 +255,10 @@ static void php_hash_do_hash_hmac(INTERNAL_FUNCTION_PARAMETERS, int isfilename, RETURN_FALSE; } if (isfilename) { + if (CHECK_NULL_PATH(data, data_len)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid path"); + RETURN_FALSE; + } stream = php_stream_open_wrapper_ex(data, "rb", REPORT_ERRORS, NULL, DEFAULT_CONTEXT); if (!stream) { /* Stream will report errors opening file */ @@ -464,7 +469,7 @@ PHP_FUNCTION(hash_update_file) char *filename, buf[1024]; size_t filename_len, n; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|r", &zhash, &filename, &filename_len, &zcontext) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rp|r", &zhash, &filename, &filename_len, &zcontext) == FAILURE) { return; } diff --git a/ext/hash/tests/hash_hmac_file_error.phpt b/ext/hash/tests/hash_hmac_file_error.phpt index 42ab122285..26ba8aacbe 100644 --- a/ext/hash/tests/hash_hmac_file_error.phpt +++ b/ext/hash/tests/hash_hmac_file_error.phpt @@ -28,6 +28,9 @@ hash_hmac_file('crc32', $file, $key, TRUE, $extra_arg); echo "\n-- Testing hash_hmac_file() function with invalid hash algorithm --\n"; hash_hmac_file('foo', $file, $key, TRUE); +echo "\n-- Testing hash_hmac_file() function with bad path --\n"; +hash_hmac_file('crc32', $file.chr(0).$file, $key, TRUE); + ?> ===Done=== --EXPECTF-- @@ -51,4 +54,8 @@ Warning: hash_hmac_file() expects at most 4 parameters, 5 given in %s on line %d -- Testing hash_hmac_file() function with invalid hash algorithm -- Warning: hash_hmac_file(): Unknown hashing algorithm: foo in %s on line %d + +-- Testing hash_hmac_file() function with bad path -- + +Warning: hash_hmac_file(): Invalid path in %s on line %d ===Done===
\ No newline at end of file diff --git a/ext/intl/breakiterator/breakiterator_methods.cpp b/ext/intl/breakiterator/breakiterator_methods.cpp index baab5a682d..ce855ebacd 100644 --- a/ext/intl/breakiterator/breakiterator_methods.cpp +++ b/ext/intl/breakiterator/breakiterator_methods.cpp @@ -162,11 +162,11 @@ U_CFUNC PHP_FUNCTION(breakiter_set_text) BREAKITER_METHOD_FETCH_OBJECT; ut = utext_openUTF8(ut, text->val, text->len, BREAKITER_ERROR_CODE_P(bio)); - INTL_CTOR_CHECK_STATUS(bio, "breakiter_set_text: error opening UText"); + INTL_METHOD_CHECK_STATUS_OR_NULL(bio, "breakiter_set_text: error opening UText"); bio->biter->setText(ut, BREAKITER_ERROR_CODE(bio)); utext_close(ut); /* ICU shallow clones the UText */ - INTL_CTOR_CHECK_STATUS(bio, "breakiter_set_text: error calling " + INTL_METHOD_CHECK_STATUS_OR_NULL(bio, "breakiter_set_text: error calling " "BreakIterator::setText()"); /* When ICU clones the UText, it does not copy the buffer, so we have to diff --git a/ext/intl/calendar/calendar_methods.cpp b/ext/intl/calendar/calendar_methods.cpp index c8acf5fe54..ac5b33a89c 100644 --- a/ext/intl/calendar/calendar_methods.cpp +++ b/ext/intl/calendar/calendar_methods.cpp @@ -1161,11 +1161,11 @@ U_CFUNC PHP_FUNCTION(intlcal_from_date_time) Z_OBJCE_P(zv_arg), php_date_get_date_ce()))) { object_init_ex(&zv_tmp, php_date_get_date_ce()); zend_call_method_with_1_params(&zv_tmp, NULL, NULL, "__construct", NULL, zv_arg); + zv_datetime = &zv_tmp; if (EG(exception)) { zend_object_store_ctor_failed(Z_OBJ(zv_tmp)); goto error; } - zv_datetime = &zv_tmp; } else { zv_datetime = zv_arg; } diff --git a/ext/intl/collator/collator_create.c b/ext/intl/collator/collator_create.c index b6ad4502db..d32a4c637f 100644 --- a/ext/intl/collator/collator_create.c +++ b/ext/intl/collator/collator_create.c @@ -25,7 +25,7 @@ #include "intl_data.h" /* {{{ */ -static void collator_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) +static int collator_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) { const char* locale; size_t locale_len = 0; @@ -41,11 +41,10 @@ static void collator_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor { intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "collator_create: unable to parse input params", 0 ); - zval_dtor(return_value); - RETURN_NULL(); + return FAILURE; } - INTL_CHECK_LOCALE_LEN_OBJ(locale_len, return_value); + INTL_CHECK_LOCALE_LEN_OR_FAILURE(locale_len); COLLATOR_METHOD_FETCH_OBJECT; if(locale_len == 0) { @@ -55,6 +54,7 @@ static void collator_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor /* Open ICU collator. */ co->ucoll = ucol_open( locale, COLLATOR_ERROR_CODE_P( co ) ); INTL_CTOR_CHECK_STATUS(co, "collator_create: unable to open ICU collator"); + return SUCCESS; } /* }}} */ @@ -64,7 +64,10 @@ static void collator_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor PHP_FUNCTION( collator_create ) { object_init_ex( return_value, Collator_ce_ptr ); - collator_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); + if (collator_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0) == FAILURE) { + zval_ptr_dtor(return_value); + RETURN_NULL(); + } } /* }}} */ @@ -77,8 +80,7 @@ PHP_METHOD( Collator, __construct ) zend_replace_error_handling(EH_THROW, IntlException_ce_ptr, &error_handling); return_value = getThis(); - collator_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); - if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) { + if (collator_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1) == FAILURE) { if (!EG(exception)) { zend_throw_exception(IntlException_ce_ptr, "Constructor failed", 0); } diff --git a/ext/intl/dateformat/dateformat_attrcpp.cpp b/ext/intl/dateformat/dateformat_attrcpp.cpp index 8320904b63..49c4094a40 100644 --- a/ext/intl/dateformat/dateformat_attrcpp.cpp +++ b/ext/intl/dateformat/dateformat_attrcpp.cpp @@ -94,7 +94,6 @@ U_CFUNC PHP_FUNCTION(datefmt_get_timezone) RETURN_FALSE; } - object_init_ex(return_value, TimeZone_ce_ptr); timezone_object_construct(tz_clone, return_value, 1); } diff --git a/ext/intl/dateformat/dateformat_create.cpp b/ext/intl/dateformat/dateformat_create.cpp index afc182131d..1999b6a8c1 100644 --- a/ext/intl/dateformat/dateformat_create.cpp +++ b/ext/intl/dateformat/dateformat_create.cpp @@ -37,7 +37,7 @@ extern "C" { #include "zend_exceptions.h" /* {{{ */ -static void datefmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) +static int datefmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) { zval *object; @@ -58,7 +58,7 @@ static void datefmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) UChar* svalue = NULL; /* UTF-16 pattern_str */ int32_t slength = 0; IntlDateFormatter_object* dfo; - int zpp_flags = is_constructor ? ZEND_PARSE_PARAMS_THROW : 0; + int zpp_flags = is_constructor ? ZEND_PARSE_PARAMS_THROW : 0; intl_error_reset(NULL); object = return_value; @@ -68,11 +68,10 @@ static void datefmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) &calendar_zv, &pattern_str, &pattern_str_len) == FAILURE) { intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "datefmt_create: " "unable to parse input parameters", 0); - Z_OBJ_P(return_value) = NULL; - return; + return FAILURE; } - INTL_CHECK_LOCALE_LEN_OBJ(locale_len, return_value); + INTL_CHECK_LOCALE_LEN_OR_FAILURE(locale_len); if (locale_len == 0) { locale_str = intl_locale_get_default(); } @@ -83,7 +82,7 @@ static void datefmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) if (DATE_FORMAT_OBJECT(dfo) != NULL) { intl_errors_set(INTL_DATA_ERROR_P(dfo), U_ILLEGAL_ARGUMENT_ERROR, "datefmt_create: cannot call constructor twice", 0); - return; + return FAILURE; } /* process calendar */ @@ -162,10 +161,8 @@ error: if (calendar != NULL && calendar_owned) { delete calendar; } - if (U_FAILURE(intl_error_get_code(NULL))) { - /* free_object handles partially constructed instances fine */ - Z_OBJ_P(return_value) = NULL; - } + + return U_FAILURE(intl_error_get_code(NULL)) ? FAILURE : SUCCESS; } /* }}} */ @@ -177,8 +174,8 @@ error: U_CFUNC PHP_FUNCTION( datefmt_create ) { object_init_ex( return_value, IntlDateFormatter_ce_ptr ); - datefmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); - if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) { + if (datefmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0) == FAILURE) { + zval_ptr_dtor(return_value); RETURN_NULL(); } } @@ -195,8 +192,7 @@ U_CFUNC PHP_METHOD( IntlDateFormatter, __construct ) /* return_value param is being changed, therefore we will always return * NULL here */ return_value = getThis(); - datefmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); - if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) { + if (datefmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1) == FAILURE) { if (!EG(exception)) { zend_throw_exception(IntlException_ce_ptr, "Constructor failed", 0); } diff --git a/ext/intl/formatter/formatter_main.c b/ext/intl/formatter/formatter_main.c index 5b7e634053..bf0d2a80b7 100644 --- a/ext/intl/formatter/formatter_main.c +++ b/ext/intl/formatter/formatter_main.c @@ -25,7 +25,7 @@ #include "intl_convert.h" /* {{{ */ -static void numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) +static int numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) { const char* locale; char* pattern = NULL; @@ -42,11 +42,10 @@ static void numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) { intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "numfmt_create: unable to parse input parameters", 0 ); - Z_OBJ_P(return_value) = NULL; - return; + return FAILURE; } - INTL_CHECK_LOCALE_LEN_OBJ(locale_len, return_value); + INTL_CHECK_LOCALE_LEN_OR_FAILURE(locale_len); object = return_value; FORMATTER_METHOD_FETCH_OBJECT_NO_CHECK; @@ -68,6 +67,7 @@ static void numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) } INTL_CTOR_CHECK_STATUS(nfo, "numfmt_create: number formatter creation failed"); + return SUCCESS; } /* }}} */ @@ -79,8 +79,8 @@ static void numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) PHP_FUNCTION( numfmt_create ) { object_init_ex( return_value, NumberFormatter_ce_ptr ); - numfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); - if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) { + if (numfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0) == FAILURE) { + zval_ptr_dtor(return_value); RETURN_NULL(); } } @@ -95,8 +95,7 @@ PHP_METHOD( NumberFormatter, __construct ) zend_replace_error_handling(EH_THROW, IntlException_ce_ptr, &error_handling); return_value = getThis(); - numfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); - if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) { + if (numfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1) == FAILURE) { if (!EG(exception)) { zend_throw_exception(IntlException_ce_ptr, "Constructor failed", 0); } diff --git a/ext/intl/intl_data.h b/ext/intl/intl_data.h index 6001aa1285..8a11639047 100644 --- a/ext/intl/intl_data.h +++ b/ext/intl/intl_data.h @@ -54,7 +54,7 @@ typedef struct _intl_data { RETURN_FALSE; \ } -/* Check status in object, if error - exit */ +/* Check status in object, if error return false */ #define INTL_METHOD_CHECK_STATUS(obj, msg) \ intl_error_set_code( NULL, INTL_DATA_ERROR_CODE((obj)) ); \ if( U_FAILURE( INTL_DATA_ERROR_CODE((obj)) ) ) \ @@ -63,19 +63,23 @@ typedef struct _intl_data { RETURN_FALSE; \ } -/* Check status, if error - destroy value and exit */ +/* Check status in object, if error return null */ +#define INTL_METHOD_CHECK_STATUS_OR_NULL(obj, msg) \ + intl_error_set_code( NULL, INTL_DATA_ERROR_CODE((obj)) ); \ + if( U_FAILURE( INTL_DATA_ERROR_CODE((obj)) ) ) \ + { \ + intl_errors_set_custom_msg( INTL_DATA_ERROR_P((obj)), msg, 0 ); \ + zval_ptr_dtor(return_value); \ + RETURN_NULL(); \ + } + +/* Check status in object, if error return FAILURE */ #define INTL_CTOR_CHECK_STATUS(obj, msg) \ - intl_error_set_code( NULL, INTL_DATA_ERROR_CODE((obj)) ); \ + intl_error_set_code( NULL, INTL_DATA_ERROR_CODE((obj)) ); \ if( U_FAILURE( INTL_DATA_ERROR_CODE((obj)) ) ) \ { \ - intl_errors_set_custom_msg( INTL_DATA_ERROR_P((obj)), msg, 0 ); \ - /* yes, this is ugly, but it alreay is */ \ - if (return_value != getThis()) { \ - zval_dtor(return_value); \ - RETURN_NULL(); \ - } \ - Z_OBJ_P(return_value) = NULL; \ - return; \ + intl_errors_set_custom_msg( INTL_DATA_ERROR_P((obj)), msg, 0 ); \ + return FAILURE; \ } #define INTL_METHOD_RETVAL_UTF8(obj, ustring, ulen, free_it) \ @@ -100,14 +104,11 @@ typedef struct _intl_data { RETURN_NULL(); \ } -#define INTL_CHECK_LOCALE_LEN_OBJ(locale_len, object) \ +#define INTL_CHECK_LOCALE_LEN_OR_FAILURE(locale_len) \ if((locale_len) > INTL_MAX_LOCALE_LEN) { \ intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, \ "Locale string too long, should be no longer than 80 characters", 0 ); \ - zval_dtor(object); \ - ZVAL_NULL(object); \ - RETURN_NULL(); \ + return FAILURE; \ } - #endif // INTL_DATA_H diff --git a/ext/intl/msgformat/msgformat.c b/ext/intl/msgformat/msgformat.c index 2675aca5b8..e0919ec42b 100644 --- a/ext/intl/msgformat/msgformat.c +++ b/ext/intl/msgformat/msgformat.c @@ -26,7 +26,7 @@ #include "intl_convert.h" /* {{{ */ -static void msgfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) +static int msgfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) { const char* locale; char* pattern; @@ -45,11 +45,10 @@ static void msgfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) { intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "msgfmt_create: unable to parse input parameters", 0 ); - Z_OBJ_P(return_value) = NULL; - return; + return FAILURE; } - INTL_CHECK_LOCALE_LEN_OBJ(locale_len, return_value); + INTL_CHECK_LOCALE_LEN_OR_FAILURE(locale_len); MSG_FORMAT_METHOD_FETCH_OBJECT_NO_CHECK; /* Convert pattern (if specified) to UTF-16. */ @@ -86,6 +85,7 @@ static void msgfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) } INTL_CTOR_CHECK_STATUS(mfo, "msgfmt_create: message formatter creation failed"); + return SUCCESS; } /* }}} */ @@ -97,8 +97,8 @@ static void msgfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) PHP_FUNCTION( msgfmt_create ) { object_init_ex( return_value, MessageFormatter_ce_ptr ); - msgfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); - if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) { + if (msgfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0) == FAILURE) { + zval_ptr_dtor(return_value); RETURN_NULL(); } } @@ -113,8 +113,7 @@ PHP_METHOD( MessageFormatter, __construct ) zend_replace_error_handling(EH_THROW, IntlException_ce_ptr, &error_handling); return_value = getThis(); - msgfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); - if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) { + if (msgfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1) == FAILURE) { if (!EG(exception)) { zend_throw_exception(IntlException_ce_ptr, "Constructor failed", 0); } diff --git a/ext/intl/resourcebundle/resourcebundle_class.c b/ext/intl/resourcebundle/resourcebundle_class.c index a42556f746..d6b071a249 100644 --- a/ext/intl/resourcebundle/resourcebundle_class.c +++ b/ext/intl/resourcebundle/resourcebundle_class.c @@ -75,7 +75,7 @@ static zend_object *ResourceBundle_object_create( zend_class_entry *ce ) /* }}} */ /* {{{ ResourceBundle_ctor */ -static void resourcebundle_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) +static int resourcebundle_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor) { const char *bundlename; size_t bundlename_len = 0; @@ -94,11 +94,10 @@ static void resourcebundle_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_const { intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "resourcebundle_ctor: unable to parse input parameters", 0 ); - Z_OBJ_P(return_value) = NULL; - return; + return FAILURE; } - INTL_CHECK_LOCALE_LEN_OBJ(locale_len, return_value); + INTL_CHECK_LOCALE_LEN_OR_FAILURE(locale_len); if (locale == NULL) { locale = intl_locale_get_default(); @@ -123,8 +122,10 @@ static void resourcebundle_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_const rb->me, ULOC_ACTUAL_LOCALE, &INTL_DATA_ERROR_CODE(rb))); intl_errors_set_custom_msg(INTL_DATA_ERROR_P(rb), pbuf, 1); efree(pbuf); - Z_OBJ_P(return_value) = NULL; + return FAILURE; } + + return SUCCESS; } /* }}} */ @@ -145,8 +146,7 @@ PHP_METHOD( ResourceBundle, __construct ) zend_replace_error_handling(EH_THROW, IntlException_ce_ptr, &error_handling); return_value = getThis(); - resourcebundle_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); - if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) { + if (resourcebundle_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1) == FAILURE) { if (!EG(exception)) { zend_throw_exception(IntlException_ce_ptr, "Constructor failed", 0); } @@ -161,8 +161,8 @@ proto ResourceBundle resourcebundle_create( string $locale [, string $bundlename PHP_FUNCTION( resourcebundle_create ) { object_init_ex( return_value, ResourceBundle_ce_ptr ); - resourcebundle_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); - if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) { + if (resourcebundle_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0) == FAILURE) { + zval_ptr_dtor(return_value); RETURN_NULL(); } } diff --git a/ext/intl/spoofchecker/spoofchecker_create.c b/ext/intl/spoofchecker/spoofchecker_create.c index 865f600dfc..fbe7cbae1d 100644 --- a/ext/intl/spoofchecker/spoofchecker_create.c +++ b/ext/intl/spoofchecker/spoofchecker_create.c @@ -41,7 +41,7 @@ PHP_METHOD(Spoofchecker, __construct) SPOOFCHECKER_METHOD_FETCH_OBJECT_NO_CHECK; co->uspoof = uspoof_open(SPOOFCHECKER_ERROR_CODE_P(co)); - INTL_CTOR_CHECK_STATUS(co, "spoofchecker: unable to open ICU Spoof Checker"); + INTL_METHOD_CHECK_STATUS(co, "spoofchecker: unable to open ICU Spoof Checker"); /* Single-script enforcement is on by default. This fails for languages like Japanese that legally use multiple scripts within a single word, diff --git a/ext/intl/transliterator/transliterator_methods.c b/ext/intl/transliterator/transliterator_methods.c index d8b030a6d1..ced84a0c60 100644 --- a/ext/intl/transliterator/transliterator_methods.c +++ b/ext/intl/transliterator/transliterator_methods.c @@ -169,7 +169,7 @@ PHP_FUNCTION( transliterator_create_from_rules ) str_rules, str_rules_len, TRANSLITERATOR_ERROR_CODE_P( to ) ); /* (I'm not a big fan of non-obvious flow control macros ). * This one checks the error value, destroys object and returns false */ - INTL_CTOR_CHECK_STATUS( to, "String conversion of rules to UTF-16 failed" ); + INTL_METHOD_CHECK_STATUS_OR_NULL( to, "String conversion of rules to UTF-16 failed" ); /* Open ICU Transliterator. */ utrans = utrans_openU( id, ( sizeof( id ) - 1 ) / ( sizeof( *id ) ), (UTransDirection ) direction, @@ -197,7 +197,7 @@ PHP_FUNCTION( transliterator_create_from_rules ) } transliterator_object_construct( object, utrans, TRANSLITERATOR_ERROR_CODE_P( to ) ); /* no need to close the transliterator manually on construction error */ - INTL_CTOR_CHECK_STATUS( to, "transliterator_create_from_rules: internal constructor call failed" ); + INTL_METHOD_CHECK_STATUS_OR_NULL( to, "transliterator_create_from_rules: internal constructor call failed" ); } /* }}} */ @@ -227,11 +227,11 @@ PHP_FUNCTION( transliterator_create_inverse ) TRANSLITERATOR_METHOD_FETCH_OBJECT_NO_CHECK; /* change "to" into new object (from "object" ) */ utrans = utrans_openInverse( to_orig->utrans, TRANSLITERATOR_ERROR_CODE_P( to ) ); - INTL_CTOR_CHECK_STATUS( to, "transliterator_create_inverse: could not create " + INTL_METHOD_CHECK_STATUS_OR_NULL( to, "transliterator_create_inverse: could not create " "inverse ICU transliterator" ); transliterator_object_construct( object, utrans, TRANSLITERATOR_ERROR_CODE_P( to ) ); /* no need to close the transliterator manually on construction error */ - INTL_CTOR_CHECK_STATUS( to, "transliterator_create: internal constructor call failed" ); + INTL_METHOD_CHECK_STATUS_OR_NULL( to, "transliterator_create: internal constructor call failed" ); } /* }}} */ @@ -350,6 +350,7 @@ PHP_FUNCTION( transliterator_transliterate ) php_error_docref0( NULL, E_WARNING, "Could not create " "transliterator with ID \"%s\" (%s)", Z_STRVAL_P( arg1 ), message->val ); zend_string_free( message ); + ZVAL_UNDEF(&tmp_object); /* don't set U_ILLEGAL_ARGUMENT_ERROR to allow fetching of inner error */ goto cleanup; } @@ -463,7 +464,7 @@ cleanup: RETVAL_FALSE; } - /* zval_ptr_dtor( &tmp_object ); */ + zval_ptr_dtor( &tmp_object ); } /* }}} */ diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index 857ad7097e..8ade984ffb 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -1716,11 +1716,13 @@ PHP_MINFO_FUNCTION(mbstring) snprintf(tmp, sizeof(tmp), "%d.%d.%d", MBFL_VERSION_MAJOR, MBFL_VERSION_MINOR, MBFL_VERSION_TEENY); php_info_print_table_row(2, "libmbfl version", tmp); } +#if HAVE_ONIG { char tmp[256]; snprintf(tmp, sizeof(tmp), "%d.%d.%d", ONIGURUMA_VERSION_MAJOR, ONIGURUMA_VERSION_MINOR, ONIGURUMA_VERSION_TEENY); php_info_print_table_row(2, "oniguruma version", tmp); } +#endif php_info_print_table_end(); php_info_print_table_start(); diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c index 322ec95777..b37ba94d0d 100644 --- a/ext/odbc/php_odbc.c +++ b/ext/odbc/php_odbc.c @@ -954,7 +954,7 @@ int odbc_bindcols(odbc_result *result) charextraalloc = 0; colfieldid = SQL_COLUMN_DISPLAY_SIZE; - rc = PHP_ODBC_SQLCOLATTRIBUTE(result->stmt, (SQLUSMALLINT)(i+1), PHP_ODBC_DESC_BASE_COLUMN_NAME, + rc = PHP_ODBC_SQLCOLATTRIBUTE(result->stmt, (SQLUSMALLINT)(i+1), PHP_ODBC_SQL_DESC_NAME, result->values[i].name, sizeof(result->values[i].name), &colnamelen, 0); rc = PHP_ODBC_SQLCOLATTRIBUTE(result->stmt, (SQLUSMALLINT)(i+1), SQL_COLUMN_TYPE, NULL, 0, NULL, &result->values[i].coltype); @@ -1172,7 +1172,7 @@ PHP_FUNCTION(odbc_prepare) result->numparams = 0; - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -1609,7 +1609,7 @@ PHP_FUNCTION(odbc_exec) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { php_error_docref(NULL, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); efree(result); @@ -3141,7 +3141,7 @@ PHP_FUNCTION(odbc_tables) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3210,7 +3210,7 @@ PHP_FUNCTION(odbc_columns) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3282,7 +3282,7 @@ PHP_FUNCTION(odbc_columnprivileges) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3360,7 +3360,7 @@ PHP_FUNCTION(odbc_foreignkeys) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3428,7 +3428,7 @@ PHP_FUNCTION(odbc_gettypeinfo) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3487,7 +3487,7 @@ PHP_FUNCTION(odbc_primarykeys) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3555,7 +3555,7 @@ PHP_FUNCTION(odbc_procedurecolumns) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3624,7 +3624,7 @@ PHP_FUNCTION(odbc_procedures) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3694,7 +3694,7 @@ PHP_FUNCTION(odbc_specialcolumns) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3765,7 +3765,7 @@ PHP_FUNCTION(odbc_statistics) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3830,7 +3830,7 @@ PHP_FUNCTION(odbc_tableprivileges) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); diff --git a/ext/odbc/php_odbc_includes.h b/ext/odbc/php_odbc_includes.h index f9853a6c15..832c65da3e 100644 --- a/ext/odbc/php_odbc_includes.h +++ b/ext/odbc/php_odbc_includes.h @@ -283,14 +283,16 @@ void odbc_sql_error(ODBC_SQL_ERROR_PARAMS); #define IS_SQL_LONG(x) (x == SQL_LONGVARBINARY || x == SQL_LONGVARCHAR || x == SQL_WLONGVARCHAR) #define PHP_ODBC_SQLCOLATTRIBUTE SQLColAttribute +#define PHP_ODBC_SQLALLOCSTMT(hdbc, phstmt) SQLAllocHandle(SQL_HANDLE_STMT, hdbc, phstmt) -#define PHP_ODBC_DESC_BASE_COLUMN_NAME SQL_DESC_BASE_COLUMN_NAME +#define PHP_ODBC_SQL_DESC_NAME SQL_DESC_NAME #else #define IS_SQL_LONG(x) (x == SQL_LONGVARBINARY || x == SQL_LONGVARCHAR) #define PHP_ODBC_SQLCOLATTRIBUTE SQLColAttributes +#define PHP_ODBC_SQLALLOCSTMT SQLAllocStmt -#define PHP_ODBC_DESC_BASE_COLUMN_NAME SQL_COLUMN_NAME +#define PHP_ODBC_SQL_DESC_NAME SQL_COLUMN_NAME #endif #define IS_SQL_BINARY(x) (x == SQL_BINARY || x == SQL_VARBINARY || x == SQL_LONGVARBINARY) diff --git a/ext/opcache/ZendAccelerator.h b/ext/opcache/ZendAccelerator.h index 85af8330dd..aa38562687 100644 --- a/ext/opcache/ZendAccelerator.h +++ b/ext/opcache/ZendAccelerator.h @@ -27,7 +27,7 @@ #endif #define ACCELERATOR_PRODUCT_NAME "Zend OPcache" -#define PHP_ZENDOPCACHE_VERSION "7.0.4-dev" +#define PHP_ZENDOPCACHE_VERSION "7.0.6-dev" #define ACCELERATOR_VERSION PHP_ZENDOPCACHE_VERSION /* 2 - added Profiler support, on 20010712 */ /* 3 - added support for Optimizer's encoded-only-files mode */ diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c index 0c20fa1e15..1697d80bb9 100644 --- a/ext/openssl/openssl.c +++ b/ext/openssl/openssl.c @@ -1250,7 +1250,9 @@ PHP_MINIT_FUNCTION(openssl) } php_stream_xport_register("ssl", php_openssl_ssl_socket_factory); +#ifndef OPENSSL_NO_SSL3 php_stream_xport_register("sslv3", php_openssl_ssl_socket_factory); +#endif #ifndef OPENSSL_NO_SSL2 php_stream_xport_register("sslv2", php_openssl_ssl_socket_factory); #endif @@ -1299,7 +1301,9 @@ PHP_MSHUTDOWN_FUNCTION(openssl) #ifndef OPENSSL_NO_SSL2 php_stream_xport_unregister("sslv2"); #endif +#ifndef OPENSSL_NO_SSL3 php_stream_xport_unregister("sslv3"); +#endif php_stream_xport_unregister("tls"); php_stream_xport_unregister("tlsv1.0"); #if OPENSSL_VERSION_NUMBER >= 0x10001001L diff --git a/ext/openssl/tests/bug68912.phpt b/ext/openssl/tests/bug68912.phpt index 7d763db8e9..c18291a6ec 100644 --- a/ext/openssl/tests/bug68912.phpt +++ b/ext/openssl/tests/bug68912.phpt @@ -3,6 +3,7 @@ Bug #68912 (Segmentation fault at openssl_spki_new) --SKIPIF-- <?php if (!extension_loaded("openssl")) die("skip"); +if (!extension_loaded("xml")) die("skip xml extension not loaded"); if (!@openssl_pkey_new()) die("skip cannot create private key"); ?> --FILE-- diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c index f7f6219ffb..2fbc615dd2 100644 --- a/ext/openssl/xp_ssl.c +++ b/ext/openssl/xp_ssl.c @@ -2032,10 +2032,15 @@ static size_t php_openssl_sockop_io(int read, php_stream *stream, char *buf, siz stream->eof = (retry == 0 && errno != EAGAIN && !SSL_pending(sslsock->ssl_handle)); } + /* Don't loop indefinitely in non-blocking mode if no data is available */ + if (began_blocked == 0) { + break; + } + /* Now, if we have to wait some time, and we're supposed to be blocking, wait for the socket to become * available. Now, php_pollfd_for uses select to wait up to our time_left value only... */ - if (retry && began_blocked) { + if (retry) { if (read) { php_pollfd_for(sslsock->s.socket, (err == SSL_ERROR_WANT_WRITE) ? (POLLOUT|POLLPRI) : (POLLIN|POLLPRI), has_timeout ? &left_time : NULL); diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c index 117d288bb7..4c29905d2f 100644 --- a/ext/pcre/php_pcre.c +++ b/ext/pcre/php_pcre.c @@ -262,7 +262,13 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex) if (pce->locale == BG(locale_string) || (pce->locale && BG(locale_string) && pce->locale->len == BG(locale_string)->len && - !memcmp(pce->locale->val, BG(locale_string)->val, pce->locale->len))) { + !memcmp(pce->locale->val, BG(locale_string)->val, pce->locale->len)) || + (!pce->locale && + BG(locale_string)->len == 1 && + BG(locale_string)->val[0] == 'C') || + (!BG(locale_string) && + pce->locale->len == 1 && + pce->locale->val[0] == 'C')) { return pce; } #else diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c index a847ae5103..9029e4a8ea 100644 --- a/ext/pdo/pdo_dbh.c +++ b/ext/pdo/pdo_dbh.c @@ -1114,6 +1114,8 @@ static PHP_METHOD(PDO, query) /* something broke */ dbh->query_stmt = stmt; ZVAL_COPY_VALUE(&dbh->query_stmt_zval, return_value); + Z_DELREF(stmt->database_object_handle); + ZVAL_UNDEF(&stmt->database_object_handle); PDO_HANDLE_STMT_ERR(); } else { PDO_HANDLE_DBH_ERR(); diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index 346aba7eb0..3c09609fc6 100644 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -262,7 +262,8 @@ static void get_lazy_object(pdo_stmt_t *stmt, zval *return_value) /* {{{ */ zend_object_std_init(&row->std, pdo_row_ce); ZVAL_OBJ(&stmt->lazy_object_ref, &row->std); row->std.handlers = &pdo_row_object_handlers; - stmt->std.gc.refcount++; + GC_REFCOUNT(&stmt->std)++; + GC_REFCOUNT(&row->std)--; } ZVAL_COPY(return_value, &stmt->lazy_object_ref); } @@ -802,7 +803,7 @@ static int do_fetch_func_prepare(pdo_stmt_t *stmt) /* {{{ */ } /* }}} */ -static int do_fetch_opt_finish(pdo_stmt_t *stmt, int free_ctor_agrs) /* {{{ */ +static void do_fetch_opt_finish(pdo_stmt_t *stmt, int free_ctor_agrs) /* {{{ */ { /* fci.size is used to check if it is valid */ if (stmt->fetch.cls.fci.size && stmt->fetch.cls.fci.params) { @@ -825,7 +826,6 @@ static int do_fetch_opt_finish(pdo_stmt_t *stmt, int free_ctor_agrs) /* {{{ */ efree(stmt->fetch.func.values); stmt->fetch.func.values = NULL; } - return 1; } /* }}} */ @@ -2338,6 +2338,7 @@ static void free_statement(pdo_stmt_t *stmt) } if (!Z_ISUNDEF(stmt->fetch.into) && stmt->default_fetch_type == PDO_FETCH_INTO) { + zval_ptr_dtor(&stmt->fetch.into); ZVAL_UNDEF(&stmt->fetch.into); } diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c index 20cd706b5a..1c760dc94b 100644 --- a/ext/pdo_pgsql/pgsql_driver.c +++ b/ext/pdo_pgsql/pgsql_driver.c @@ -155,7 +155,11 @@ static int pgsql_lob_seek(php_stream *stream, zend_off_t offset, int whence, zend_off_t *newoffset) { struct pdo_pgsql_lob_self *self = (struct pdo_pgsql_lob_self*)stream->abstract; - int pos = lo_lseek(self->conn, self->lfd, offset, whence); +#if ZEND_ENABLE_ZVAL_LONG64 + zend_off_t pos = lo_lseek64(self->conn, self->lfd, offset, whence); +#else + zend_off_t pos = lo_lseek(self->conn, self->lfd, offset, whence); +#endif *newoffset = pos; return pos >= 0 ? 0 : -1; } @@ -1060,6 +1064,11 @@ static PHP_METHOD(PDO, pgsqlGetNotify) if (ms_timeout < 0) { php_error_docref(NULL, E_WARNING, "Invalid timeout"); RETURN_FALSE; +#if ZEND_ENABLE_ZVAL_LONG64 + } else if (ms_timeout > INT_MAX) { + php_error_docref(NULL, E_WARNING, "timeout was shrinked to %d", INT_MAX); + ms_timeout = INT_MAX; +#endif } H = (pdo_pgsql_db_handle *)dbh->driver_data; @@ -1068,7 +1077,7 @@ static PHP_METHOD(PDO, pgsqlGetNotify) pgsql_notify = PQnotifies(H->server); if (ms_timeout && !pgsql_notify) { - php_pollfd_for_ms(PQsocket(H->server), PHP_POLLREADABLE, ms_timeout); + php_pollfd_for_ms(PQsocket(H->server), PHP_POLLREADABLE, (int)ms_timeout); PQconsumeInput(H->server); pgsql_notify = PQnotifies(H->server); @@ -1145,16 +1154,16 @@ static int pdo_pgsql_set_attr(pdo_dbh_t *dbh, zend_long attr, zval *val) switch (attr) { case PDO_ATTR_EMULATE_PREPARES: convert_to_long(val); - H->emulate_prepares = Z_LVAL_P(val); + H->emulate_prepares = 0 != Z_LVAL_P(val); return 1; case PDO_PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT: convert_to_long(val); php_error_docref(NULL, E_DEPRECATED, "PDO::PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT is deprecated, use PDO::ATTR_EMULATE_PREPARES instead"); - H->disable_native_prepares = Z_LVAL_P(val); + H->disable_native_prepares = 0 != Z_LVAL_P(val); return 1; case PDO_PGSQL_ATTR_DISABLE_PREPARES: convert_to_long(val); - H->disable_prepares = Z_LVAL_P(val); + H->disable_prepares = 0 != Z_LVAL_P(val); return 1; default: return 0; diff --git a/ext/pdo_pgsql/php_pdo_pgsql_int.h b/ext/pdo_pgsql/php_pdo_pgsql_int.h index 6cad2a4702..d25cbff979 100644 --- a/ext/pdo_pgsql/php_pdo_pgsql_int.h +++ b/ext/pdo_pgsql/php_pdo_pgsql_int.h @@ -43,25 +43,24 @@ typedef struct { unsigned _reserved:31; pdo_pgsql_error_info einfo; Oid pgoid; + unsigned int stmt_counter; /* The following two variables have the same purpose. Unfortunately we need to keep track of two different attributes having the same effect. */ - int emulate_prepares; - int disable_native_prepares; /* deprecated since 5.6 */ - int disable_prepares; - unsigned int stmt_counter; + zend_bool emulate_prepares; + zend_bool disable_native_prepares; /* deprecated since 5.6 */ + zend_bool disable_prepares; } pdo_pgsql_db_handle; typedef struct { char *def; + zend_long intval; Oid pgsql_type; - zend_long intval; zend_bool boolval; } pdo_pgsql_column; typedef struct { pdo_pgsql_db_handle *H; PGresult *result; - int current_row; pdo_pgsql_column *cols; char *cursor_name; char *stmt_name; @@ -70,6 +69,7 @@ typedef struct { int *param_lengths; int *param_formats; Oid *param_types; + int current_row; zend_bool is_prepared; } pdo_pgsql_stmt; diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 536c94157a..6a86b8941b 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -3126,7 +3126,7 @@ PHP_FUNCTION(pg_trace) php_stream *stream; zend_resource *link; - if (zend_parse_parameters(argc, "s|sr", &z_filename, &z_filename_len, &mode, &mode_len, &pgsql_link) == FAILURE) { + if (zend_parse_parameters(argc, "p|sr", &z_filename, &z_filename_len, &mode, &mode_len, &pgsql_link) == FAILURE) { return; } diff --git a/ext/phar/phar.c b/ext/phar/phar.c index 8c2b596c3d..32f641624a 100644 --- a/ext/phar/phar.c +++ b/ext/phar/phar.c @@ -604,48 +604,38 @@ int phar_open_parsed_phar(char *fname, int fname_len, char *alias, int alias_len * * data is the serialized zval */ -int phar_parse_metadata(char **buffer, zval *metadata, int zip_metadata_len) /* {{{ */ +int phar_parse_metadata(char **buffer, zval *metadata, php_uint32 zip_metadata_len) /* {{{ */ { - const unsigned char *p; - php_uint32 buf_len; php_unserialize_data_t var_hash; - if (!zip_metadata_len) { - PHAR_GET_32(*buffer, buf_len); - } else { - buf_len = zip_metadata_len; - } - - if (buf_len) { + if (zip_metadata_len) { + const unsigned char *p; + unsigned char *p_buff = (unsigned char *)estrndup(*buffer, zip_metadata_len); + p = p_buff; ZVAL_NULL(metadata); - p = (const unsigned char*) *buffer; PHP_VAR_UNSERIALIZE_INIT(var_hash); - if (!php_var_unserialize(metadata, &p, p + buf_len, &var_hash)) { + if (!php_var_unserialize(metadata, &p, p + zip_metadata_len, &var_hash)) { + efree(p_buff); PHP_VAR_UNSERIALIZE_DESTROY(var_hash); zval_ptr_dtor(metadata); ZVAL_UNDEF(metadata); return FAILURE; } - + efree(p_buff); PHP_VAR_UNSERIALIZE_DESTROY(var_hash); if (PHAR_G(persist)) { /* lazy init metadata */ zval_ptr_dtor(metadata); - Z_PTR_P(metadata) = pemalloc(buf_len, 1); - memcpy(Z_PTR_P(metadata), *buffer, buf_len); - *buffer += buf_len; + Z_PTR_P(metadata) = pemalloc(zip_metadata_len, 1); + memcpy(Z_PTR_P(metadata), *buffer, zip_metadata_len); return SUCCESS; } } else { ZVAL_UNDEF(metadata); } - if (!zip_metadata_len) { - *buffer += buf_len; - } - return SUCCESS; } /* }}}*/ @@ -666,6 +656,7 @@ static int phar_parse_pharfile(php_stream *fp, char *fname, int fname_len, char phar_entry_info entry; php_uint32 manifest_len, manifest_count, manifest_flags, manifest_index, tmp_len, sig_flags; php_uint16 manifest_ver; + php_uint32 len; zend_long offset; int sig_len, register_alias = 0, temp_alias = 0; char *signature = NULL; @@ -1031,16 +1022,21 @@ static int phar_parse_pharfile(php_stream *fp, char *fname, int fname_len, char mydata->is_persistent = PHAR_G(persist); /* check whether we have meta data, zero check works regardless of byte order */ + PHAR_GET_32(buffer, len); if (mydata->is_persistent) { - PHAR_GET_32(buffer, mydata->metadata_len); - if (phar_parse_metadata(&buffer, &mydata->metadata, mydata->metadata_len) == FAILURE) { - MAPPHAR_FAIL("unable to read phar metadata in .phar file \"%s\""); - } - } else { - if (phar_parse_metadata(&buffer, &mydata->metadata, 0) == FAILURE) { - MAPPHAR_FAIL("unable to read phar metadata in .phar file \"%s\""); + mydata->metadata_len = len; + if(!len) { + /* FIXME: not sure why this is needed but removing it breaks tests */ + PHAR_GET_32(buffer, len); } } + if(len > endbuffer - buffer) { + MAPPHAR_FAIL("internal corruption of phar \"%s\" (trying to read past buffer end)"); + } + if (phar_parse_metadata(&buffer, &mydata->metadata, len) == FAILURE) { + MAPPHAR_FAIL("unable to read phar metadata in .phar file \"%s\""); + } + buffer += len; /* set up our manifest */ zend_hash_init(&mydata->manifest, manifest_count, @@ -1075,7 +1071,7 @@ static int phar_parse_pharfile(php_stream *fp, char *fname, int fname_len, char entry.manifest_pos = manifest_index; } - if (buffer + entry.filename_len + 20 > endbuffer) { + if (entry.filename_len + 20 > endbuffer - buffer) { MAPPHAR_FAIL("internal corruption of phar \"%s\" (truncated manifest entry)"); } @@ -1111,19 +1107,21 @@ static int phar_parse_pharfile(php_stream *fp, char *fname, int fname_len, char entry.flags |= PHAR_ENT_PERM_DEF_DIR; } + PHAR_GET_32(buffer, len); if (entry.is_persistent) { - PHAR_GET_32(buffer, entry.metadata_len); - if (!entry.metadata_len) buffer -= 4; - if (phar_parse_metadata(&buffer, &entry.metadata, entry.metadata_len) == FAILURE) { - pefree(entry.filename, entry.is_persistent); - MAPPHAR_FAIL("unable to read file metadata in .phar file \"%s\""); - } + entry.metadata_len = len; } else { - if (phar_parse_metadata(&buffer, &entry.metadata, 0) == FAILURE) { - pefree(entry.filename, entry.is_persistent); - MAPPHAR_FAIL("unable to read file metadata in .phar file \"%s\""); - } + entry.metadata_len = 0; + } + if (len > endbuffer - buffer) { + pefree(entry.filename, entry.is_persistent); + MAPPHAR_FAIL("internal corruption of phar \"%s\" (truncated manifest entry)"); + } + if (phar_parse_metadata(&buffer, &entry.metadata, len) == FAILURE) { + pefree(entry.filename, entry.is_persistent); + MAPPHAR_FAIL("unable to read file metadata in .phar file \"%s\""); } + buffer += len; entry.offset = entry.offset_abs = offset; offset += entry.compressed_filesize; diff --git a/ext/phar/phar_internal.h b/ext/phar/phar_internal.h index a2afd4d53b..ef752817aa 100644 --- a/ext/phar/phar_internal.h +++ b/ext/phar/phar_internal.h @@ -529,10 +529,13 @@ static inline void phar_set_inode(phar_entry_info *entry) /* {{{ */ { char tmp[MAXPATHLEN]; int tmp_len; + size_t len; - tmp_len = entry->filename_len + entry->phar->fname_len; - memcpy(tmp, entry->phar->fname, entry->phar->fname_len); - memcpy(tmp + entry->phar->fname_len, entry->filename, entry->filename_len); + tmp_len = MIN(MAXPATHLEN, entry->filename_len + entry->phar->fname_len); + len = MIN(entry->phar->fname_len, tmp_len); + memcpy(tmp, entry->phar->fname, len); + len = MIN(tmp_len - len, entry->filename_len); + memcpy(tmp + entry->phar->fname_len, entry->filename, len); entry->inode = (unsigned short)zend_hash_func(tmp, tmp_len); } /* }}} */ @@ -565,7 +568,7 @@ int phar_mount_entry(phar_archive_data *phar, char *filename, int filename_len, zend_string *phar_find_in_include_path(char *file, int file_len, phar_archive_data **pphar); char *phar_fix_filepath(char *path, int *new_len, int use_cwd); phar_entry_info * phar_open_jit(phar_archive_data *phar, phar_entry_info *entry, char **error); -int phar_parse_metadata(char **buffer, zval *metadata, int zip_metadata_len); +int phar_parse_metadata(char **buffer, zval *metadata, php_uint32 zip_metadata_len); void destroy_phar_manifest_entry(zval *zv); int phar_seek_efp(phar_entry_info *entry, zend_off_t offset, int whence, zend_off_t position, int follow_links); php_stream *phar_get_efp(phar_entry_info *entry, int follow_links); diff --git a/ext/phar/tests/bug69324.phar b/ext/phar/tests/bug69324.phar Binary files differnew file mode 100644 index 0000000000..0882d88c22 --- /dev/null +++ b/ext/phar/tests/bug69324.phar diff --git a/ext/phar/tests/bug69324.phpt b/ext/phar/tests/bug69324.phpt new file mode 100644 index 0000000000..70e3f972e7 --- /dev/null +++ b/ext/phar/tests/bug69324.phpt @@ -0,0 +1,17 @@ +--TEST-- +Bug #69324: Buffer Over-read in unserialize when parsing Phar +--SKIPIF-- +<?php +if (!extension_loaded("phar")) die("skip"); +?> +--FILE-- +<?php +try { +$p = new Phar(dirname(__FILE__).'/bug69324.phar', 0); +$meta=$p->getMetadata(); +var_dump($meta); +} catch(Exception $e) { + echo $e->getMessage(); +} +--EXPECTF-- +internal corruption of phar "%s" (truncated manifest entry)
\ No newline at end of file diff --git a/ext/phar/tests/bug69441.phar b/ext/phar/tests/bug69441.phar Binary files differnew file mode 100644 index 0000000000..80956dce7c --- /dev/null +++ b/ext/phar/tests/bug69441.phar diff --git a/ext/phar/tests/bug69441.phpt b/ext/phar/tests/bug69441.phpt new file mode 100644 index 0000000000..fafb7855c6 --- /dev/null +++ b/ext/phar/tests/bug69441.phpt @@ -0,0 +1,21 @@ +--TEST-- +Phar: bug #69441: Buffer Overflow when parsing tar/zip/phar in phar_set_inode +--SKIPIF-- +<?php if (!extension_loaded("phar")) die("skip"); ?> +--FILE-- +<?php +$fname = dirname(__FILE__) . '/bug69441.phar'; +try { +$r = new Phar($fname, 0); +} catch(UnexpectedValueException $e) { + echo $e; +} +?> + +==DONE== +--EXPECTF-- +exception 'UnexpectedValueException' with message 'phar error: corrupted central directory entry, no magic signature in zip-based phar "%s/bug69441.phar"' in %s/bug69441.php:%d +Stack trace: +#0 %s%ebug69441.php(%d): Phar->__construct('%s', 0) +#1 {main} +==DONE== diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 47cf107b19..bec69b2bbd 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -4315,6 +4315,7 @@ ZEND_METHOD(reflection_class, newInstanceWithoutConstructor) if (ce->create_object != NULL && ce->ce_flags & ZEND_ACC_FINAL) { zend_throw_exception_ex(reflection_exception_ptr, 0, "Class %s is an internal class marked as final that cannot be instantiated without invoking its constructor", ce->name->val); + return; } object_init_ex(return_value, ce); diff --git a/ext/skeleton/skeleton.c b/ext/skeleton/skeleton.c index 1fe049c533..9531d1985e 100644 --- a/ext/skeleton/skeleton.c +++ b/ext/skeleton/skeleton.c @@ -37,7 +37,7 @@ PHP_FUNCTION(confirm_extname_compiled) { char *arg = NULL; size_t arg_len, len; - char *strg; + zend_string *strg; if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &arg, &arg_len) == FAILURE) { return; diff --git a/ext/soap/soap.c b/ext/soap/soap.c index 4d6a8ff2fb..883e0ac541 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -2808,6 +2808,7 @@ static void do_soap_call(zend_execute_data *execute_data, ZVAL_COPY(return_value, fault); } else { add_soap_fault_ex(return_value, this_ptr, "Client", "Unknown Error", NULL, NULL); + Z_ADDREF_P(return_value); } } else { zval* fault; diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c index 8071a71e55..0cc53cfeb7 100644 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -64,18 +64,15 @@ PHPAPI zend_class_entry *spl_ce_RecursiveArrayIterator; typedef struct _spl_array_object { zval array; - zval retval; uint32_t ht_iter; int ar_flags; - int is_self; + unsigned char nApplyCount; zend_function *fptr_offset_get; zend_function *fptr_offset_set; zend_function *fptr_offset_has; zend_function *fptr_offset_del; zend_function *fptr_count; zend_class_entry* ce_get_iterator; - HashTable *debug_info; - unsigned char nApplyCount; zend_object std; } spl_array_object; @@ -132,12 +129,6 @@ static void spl_array_object_free_storage(zend_object *object) zend_object_std_dtor(&intern->std); zval_ptr_dtor(&intern->array); - zval_ptr_dtor(&intern->retval); - - if (intern->debug_info != NULL) { - zend_hash_destroy(intern->debug_info); - efree(intern->debug_info); - } } /* }}} */ @@ -156,7 +147,6 @@ static zend_object *spl_array_object_new_ex(zend_class_entry *class_type, zval * object_properties_init(&intern->std, class_type); intern->ar_flags = 0; - intern->debug_info = NULL; intern->ce_get_iterator = spl_ce_ArrayIterator; if (orig) { spl_array_object *other = Z_SPLARRAY_P(orig); @@ -368,26 +358,25 @@ num_index: } } /* }}} */ -static zval *spl_array_read_dimension_ex(int check_inherited, zval *object, zval *offset, int type, zval *zv) /* {{{ */ +static zval *spl_array_read_dimension_ex(int check_inherited, zval *object, zval *offset, int type, zval *rv) /* {{{ */ { zval *ret; if (check_inherited) { spl_array_object *intern = Z_SPLARRAY_P(object); if (intern->fptr_offset_get) { - zval rv, tmp; + zval tmp; if (!offset) { ZVAL_UNDEF(&tmp); offset = &tmp; } else { SEPARATE_ARG_IF_REF(offset); } - zend_call_method_with_1_params(object, Z_OBJCE_P(object), &intern->fptr_offset_get, "offsetGet", &rv, offset); + zend_call_method_with_1_params(object, Z_OBJCE_P(object), &intern->fptr_offset_get, "offsetGet", rv, offset); zval_ptr_dtor(offset); - if (!Z_ISUNDEF(rv)) { - zval_ptr_dtor(&intern->retval); - ZVAL_ZVAL(&intern->retval, &rv, 0, 0); - return &intern->retval; + + if (!Z_ISUNDEF_P(rv)) { + return rv; } return &EG(uninitialized_zval); } @@ -663,7 +652,13 @@ num_index: } } - return check_empty ? zend_is_true(value) : Z_TYPE_P(value) != IS_NULL; + { + zend_bool result = check_empty ? zend_is_true(value) : Z_TYPE_P(value) != IS_NULL; + if (value == &rv) { + zval_ptr_dtor(&rv); + } + return result; + } } /* }}} */ static int spl_array_has_dimension(zval *object, zval *offset, int check_empty) /* {{{ */ @@ -803,34 +798,31 @@ static HashTable* spl_array_get_debug_info(zval *obj, int *is_temp) /* {{{ */ zend_class_entry *base; spl_array_object *intern = Z_SPLARRAY_P(obj); - *is_temp = 0; - if (!intern->std.properties) { rebuild_object_properties(&intern->std); } if (HASH_OF(&intern->array) == intern->std.properties) { + *is_temp = 0; return intern->std.properties; } else { - if (intern->debug_info == NULL) { - ALLOC_HASHTABLE(intern->debug_info); - ZEND_INIT_SYMTABLE_EX(intern->debug_info, zend_hash_num_elements(intern->std.properties) + 1, 0); - } + HashTable *debug_info; + *is_temp = 1; - if (intern->debug_info->u.v.nApplyCount == 0) { - zend_hash_clean(intern->debug_info); - zend_hash_copy(intern->debug_info, intern->std.properties, (copy_ctor_func_t) zval_add_ref); + ALLOC_HASHTABLE(debug_info); + ZEND_INIT_SYMTABLE_EX(debug_info, zend_hash_num_elements(intern->std.properties) + 1, 0); + zend_hash_copy(debug_info, intern->std.properties, (copy_ctor_func_t) zval_add_ref); - storage = &intern->array; - Z_TRY_ADDREF_P(storage); + storage = &intern->array; + Z_TRY_ADDREF_P(storage); - base = (Z_OBJ_HT_P(obj) == &spl_handler_ArrayIterator) ? spl_ce_ArrayIterator : spl_ce_ArrayObject; - zname = spl_gen_private_prop_name(base, "storage", sizeof("storage")-1); - zend_symtable_update(intern->debug_info, zname, storage); - zend_string_release(zname); - } + base = Z_OBJ_HT_P(obj) == &spl_handler_ArrayIterator + ? spl_ce_ArrayIterator : spl_ce_ArrayObject; + zname = spl_gen_private_prop_name(base, "storage", sizeof("storage")-1); + zend_symtable_update(debug_info, zname, storage); + zend_string_release(zname); - return intern->debug_info; + return debug_info; } } /* }}} */ @@ -1253,11 +1245,11 @@ SPL_METHOD(Array, exchangeArray) zval *object = getThis(), *array; spl_array_object *intern = Z_SPLARRAY_P(object); - RETVAL_ARR(zend_array_dup(spl_array_get_hash_table(intern, 0))); if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &array) == FAILURE) { return; } + RETVAL_ARR(zend_array_dup(spl_array_get_hash_table(intern, 0))); spl_array_set_array(object, intern, array, 0L, 1); } /* }}} */ @@ -1371,10 +1363,8 @@ int spl_array_object_count_elements(zval *object, zend_long *count) /* {{{ */ zval rv; zend_call_method_with_0_params(object, intern->std.ce, &intern->fptr_count, "count", &rv); if (Z_TYPE(rv) != IS_UNDEF) { - zval_ptr_dtor(&intern->retval); - ZVAL_ZVAL(&intern->retval, &rv, 0, 0); - convert_to_long(&intern->retval); - *count = (zend_long)Z_LVAL(intern->retval); + *count = zval_get_long(&rv); + zval_ptr_dtor(&rv); return SUCCESS; } *count = 0; diff --git a/ext/spl/spl_dllist.c b/ext/spl/spl_dllist.c index 68c46486e1..6dc2e23b3d 100644 --- a/ext/spl/spl_dllist.c +++ b/ext/spl/spl_dllist.c @@ -93,7 +93,8 @@ struct _spl_dllist_object { zend_function *fptr_offset_del; zend_function *fptr_count; zend_class_entry *ce_get_iterator; - HashTable *debug_info; + zval *gc_data; + int gc_data_count; zend_object std; }; @@ -355,13 +356,12 @@ static void spl_dllist_object_free_storage(zend_object *object) /* {{{ */ zval_ptr_dtor(&tmp); } + if (intern->gc_data != NULL) { + efree(intern->gc_data); + }; + spl_ptr_llist_destroy(intern->llist); SPL_LLIST_CHECK_DELREF(intern->traverse_pointer); - - if (intern->debug_info != NULL) { - zend_hash_destroy(intern->debug_info); - efree(intern->debug_info); - } } /* }}} */ @@ -380,7 +380,6 @@ static zend_object *spl_dllist_object_new_ex(zend_class_entry *class_type, zval intern->flags = 0; intern->traverse_position = 0; - intern->debug_info = NULL; if (orig) { spl_dllist_object *other = Z_SPLDLLIST_P(orig); @@ -500,48 +499,65 @@ static HashTable* spl_dllist_object_get_debug_info(zval *obj, int *is_temp) /* { zval tmp, dllist_array; zend_string *pnstr; int i = 0; + HashTable *debug_info; + *is_temp = 1; - *is_temp = 0; - - if (intern->debug_info == NULL) { - ALLOC_HASHTABLE(intern->debug_info); - zend_hash_init(intern->debug_info, 1, NULL, ZVAL_PTR_DTOR, 0); + if (!intern->std.properties) { + rebuild_object_properties(&intern->std); } - if (intern->debug_info->u.v.nApplyCount == 0) { + ALLOC_HASHTABLE(debug_info); + zend_hash_init(debug_info, 1, NULL, ZVAL_PTR_DTOR, 0); + zend_hash_copy(debug_info, intern->std.properties, (copy_ctor_func_t) zval_add_ref); + + pnstr = spl_gen_private_prop_name(spl_ce_SplDoublyLinkedList, "flags", sizeof("flags")-1); + ZVAL_LONG(&tmp, intern->flags); + zend_hash_add(debug_info, pnstr, &tmp); + zend_string_release(pnstr); - if (!intern->std.properties) { - rebuild_object_properties(&intern->std); + array_init(&dllist_array); + + while (current) { + next = current->next; + + add_index_zval(&dllist_array, i, ¤t->data); + if (Z_REFCOUNTED(current->data)) { + Z_ADDREF(current->data); } - zend_hash_copy(intern->debug_info, intern->std.properties, (copy_ctor_func_t) zval_add_ref); + i++; - pnstr = spl_gen_private_prop_name(spl_ce_SplDoublyLinkedList, "flags", sizeof("flags")-1); - ZVAL_LONG(&tmp, intern->flags); - zend_hash_add(intern->debug_info, pnstr, &tmp); - zend_string_release(pnstr); + current = next; + } - array_init(&dllist_array); + pnstr = spl_gen_private_prop_name(spl_ce_SplDoublyLinkedList, "dllist", sizeof("dllist")-1); + zend_hash_add(debug_info, pnstr, &dllist_array); + zend_string_release(pnstr); - while (current) { - next = current->next; + return debug_info; +} +/* }}}} */ - add_index_zval(&dllist_array, i, ¤t->data); - if (Z_REFCOUNTED(current->data)) { - Z_ADDREF(current->data); - } - i++; +static HashTable *spl_dllist_object_get_gc(zval *obj, zval **gc_data, int *gc_data_count) /* {{{ */ +{ + spl_dllist_object *intern = Z_SPLDLLIST_P(obj); + spl_ptr_llist_element *current = intern->llist->head; + int i = 0; - current = next; - } + if (intern->gc_data_count < intern->llist->count) { + intern->gc_data_count = intern->llist->count; + intern->gc_data = safe_erealloc(intern->gc_data, intern->gc_data_count, sizeof(zval), 0); + } - pnstr = spl_gen_private_prop_name(spl_ce_SplDoublyLinkedList, "dllist", sizeof("dllist")-1); - zend_hash_add(intern->debug_info, pnstr, &dllist_array); - zend_string_release(pnstr); + while (current) { + ZVAL_COPY_VALUE(&intern->gc_data[i++], ¤t->data); + current = current->next; } - return intern->debug_info; + *gc_data = intern->gc_data; + *gc_data_count = i; + return zend_std_get_properties(obj); } -/* }}}} */ +/* }}} */ /* {{{ proto bool SplDoublyLinkedList::push(mixed $value) Push $value on the SplDoublyLinkedList */ @@ -1378,6 +1394,7 @@ PHP_MINIT_FUNCTION(spl_dllist) /* {{{ */ spl_handler_SplDoublyLinkedList.clone_obj = spl_dllist_object_clone; spl_handler_SplDoublyLinkedList.count_elements = spl_dllist_object_count_elements; spl_handler_SplDoublyLinkedList.get_debug_info = spl_dllist_object_get_debug_info; + spl_handler_SplDoublyLinkedList.get_gc = spl_dllist_object_get_gc; spl_handler_SplDoublyLinkedList.dtor_obj = zend_objects_destroy_object; spl_handler_SplDoublyLinkedList.free_obj = spl_dllist_object_free_storage; diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c index 48e9d2f85f..faac492b2a 100644 --- a/ext/spl/spl_fixedarray.c +++ b/ext/spl/spl_fixedarray.c @@ -50,7 +50,6 @@ typedef struct _spl_fixedarray { /* {{{ */ typedef struct _spl_fixedarray_object { /* {{{ */ spl_fixedarray *array; - zval retval; zend_function *fptr_offset_get; zend_function *fptr_offset_set; zend_function *fptr_offset_has; @@ -208,7 +207,6 @@ static void spl_fixedarray_object_free_storage(zend_object *object) /* {{{ */ } zend_object_std_dtor(&intern->std); - zval_ptr_dtor(&intern->retval); } /* }}} */ @@ -361,19 +359,17 @@ static zval *spl_fixedarray_object_read_dimension(zval *object, zval *offset, in intern = Z_SPLFIXEDARRAY_P(object); if (intern->fptr_offset_get) { - zval tmp, rv; + zval tmp; if (!offset) { ZVAL_UNDEF(&tmp); offset = &tmp; } else { SEPARATE_ARG_IF_REF(offset); } - zend_call_method_with_1_params(object, intern->std.ce, &intern->fptr_offset_get, "offsetGet", &rv, offset); + zend_call_method_with_1_params(object, intern->std.ce, &intern->fptr_offset_get, "offsetGet", rv, offset); zval_ptr_dtor(offset); - if (!Z_ISUNDEF(rv)) { - zval_ptr_dtor(&intern->retval); - ZVAL_ZVAL(&intern->retval, &rv, 0, 0); - return &intern->retval; + if (!Z_ISUNDEF_P(rv)) { + return rv; } return &EG(uninitialized_zval); } @@ -517,9 +513,9 @@ static int spl_fixedarray_object_has_dimension(zval *object, zval *offset, int c zend_call_method_with_1_params(object, intern->std.ce, &intern->fptr_offset_has, "offsetExists", &rv, offset); zval_ptr_dtor(offset); if (!Z_ISUNDEF(rv)) { - zval_ptr_dtor(&intern->retval); - ZVAL_ZVAL(&intern->retval, &rv, 0, 0); - return zend_is_true(&intern->retval); + zend_bool result = zend_is_true(&rv); + zval_ptr_dtor(&rv); + return result; } return 0; } @@ -537,10 +533,8 @@ static int spl_fixedarray_object_count_elements(zval *object, zend_long *count) zval rv; zend_call_method_with_0_params(object, intern->std.ce, &intern->fptr_count, "count", &rv); if (!Z_ISUNDEF(rv)) { - zval_ptr_dtor(&intern->retval); - ZVAL_ZVAL(&intern->retval, &rv, 0, 0); - convert_to_long(&intern->retval); - *count = (zend_long) Z_LVAL(intern->retval); + *count = zval_get_long(&rv); + zval_ptr_dtor(&rv); return SUCCESS; } } else if (intern->array) { diff --git a/ext/spl/spl_heap.c b/ext/spl/spl_heap.c index 8e9f3ad66f..a92707bd93 100644 --- a/ext/spl/spl_heap.c +++ b/ext/spl/spl_heap.c @@ -69,12 +69,10 @@ typedef struct _spl_heap_it spl_heap_it; struct _spl_heap_object { spl_ptr_heap *heap; - zval retval; int flags; zend_class_entry *ce_get_iterator; zend_function *fptr_cmp; zend_function *fptr_count; - HashTable *debug_info; zend_object std; }; @@ -250,8 +248,6 @@ static void spl_ptr_heap_insert(spl_ptr_heap *heap, zval *elem, void *cmp_userda heap->max_size *= 2; } - heap->ctor(elem); - /* sifting up */ for (i = heap->count++; i > 0 && heap->cmp(&heap->elements[(i-1)/2], elem, cmp_userdata) < 0; i = (i-1)/2) { heap->elements[i] = heap->elements[(i-1)/2]; @@ -309,7 +305,6 @@ static void spl_ptr_heap_delete_top(spl_ptr_heap *heap, zval *elem, void *cmp_us } ZVAL_COPY_VALUE(&heap->elements[i], bottom); - heap->dtor(elem); } /* }}} */ @@ -352,31 +347,16 @@ static int spl_ptr_heap_count(spl_ptr_heap *heap) { /* {{{ */ return heap->count; } /* }}} */ -/* }}} */ zend_object_iterator *spl_heap_get_iterator(zend_class_entry *ce, zval *object, int by_ref); static void spl_heap_object_free_storage(zend_object *object) /* {{{ */ { - int i; spl_heap_object *intern = spl_heap_from_obj(object); zend_object_std_dtor(&intern->std); - for (i = 0; i < intern->heap->count; ++i) { - if (!Z_ISUNDEF(intern->heap->elements[i])) { - zval_ptr_dtor(&intern->heap->elements[i]); - } - } - spl_ptr_heap_destroy(intern->heap); - - zval_ptr_dtor(&intern->retval); - - if (intern->debug_info != NULL) { - zend_hash_destroy(intern->debug_info); - efree(intern->debug_info); - } } /* }}} */ @@ -393,7 +373,6 @@ static zend_object *spl_heap_object_new_ex(zend_class_entry *class_type, zval *o intern->flags = 0; intern->fptr_cmp = NULL; - intern->debug_info = NULL; if (orig) { spl_heap_object *other = Z_SPLHEAP_P(orig); @@ -491,10 +470,8 @@ static int spl_heap_object_count_elements(zval *object, zend_long *count) /* {{{ zval rv; zend_call_method_with_0_params(object, intern->std.ce, &intern->fptr_count, "count", &rv); if (!Z_ISUNDEF(rv)) { - zval_ptr_dtor(&intern->retval); - ZVAL_ZVAL(&intern->retval, &rv, 0, 0); - convert_to_long(&intern->retval); - *count = (zend_long) Z_LVAL(intern->retval); + *count = zval_get_long(&rv); + zval_ptr_dtor(&rv); return SUCCESS; } *count = 0; @@ -508,51 +485,56 @@ static int spl_heap_object_count_elements(zval *object, zend_long *count) /* {{{ /* }}} */ static HashTable* spl_heap_object_get_debug_info_helper(zend_class_entry *ce, zval *obj, int *is_temp) { /* {{{ */ - spl_heap_object *intern = Z_SPLHEAP_P(obj); + spl_heap_object *intern = Z_SPLHEAP_P(obj); zval tmp, heap_array; zend_string *pnstr; + HashTable *debug_info; int i; - *is_temp = 0; + *is_temp = 1; if (!intern->std.properties) { rebuild_object_properties(&intern->std); } - if (intern->debug_info == NULL) { - ALLOC_HASHTABLE(intern->debug_info); - ZEND_INIT_SYMTABLE_EX(intern->debug_info, zend_hash_num_elements(intern->std.properties) + 1, 0); - } + ALLOC_HASHTABLE(debug_info); + ZEND_INIT_SYMTABLE_EX(debug_info, zend_hash_num_elements(intern->std.properties) + 1, 0); + zend_hash_copy(debug_info, intern->std.properties, (copy_ctor_func_t) zval_add_ref); - if (intern->debug_info->u.v.nApplyCount == 0) { + pnstr = spl_gen_private_prop_name(ce, "flags", sizeof("flags")-1); + ZVAL_LONG(&tmp, intern->flags); + zend_hash_update(debug_info, pnstr, &tmp); + zend_string_release(pnstr); - zend_hash_copy(intern->debug_info, intern->std.properties, (copy_ctor_func_t) zval_add_ref); + pnstr = spl_gen_private_prop_name(ce, "isCorrupted", sizeof("isCorrupted")-1); + ZVAL_BOOL(&tmp, intern->heap->flags&SPL_HEAP_CORRUPTED); + zend_hash_update(debug_info, pnstr, &tmp); + zend_string_release(pnstr); - pnstr = spl_gen_private_prop_name(ce, "flags", sizeof("flags")-1); - ZVAL_LONG(&tmp, intern->flags); - zend_hash_update(intern->debug_info, pnstr, &tmp); - zend_string_release(pnstr); + array_init(&heap_array); - pnstr = spl_gen_private_prop_name(ce, "isCorrupted", sizeof("isCorrupted")-1); - ZVAL_BOOL(&tmp, intern->heap->flags&SPL_HEAP_CORRUPTED); - zend_hash_update(intern->debug_info, pnstr, &tmp); - zend_string_release(pnstr); + for (i = 0; i < intern->heap->count; ++i) { + add_index_zval(&heap_array, i, &intern->heap->elements[i]); + if (Z_REFCOUNTED(intern->heap->elements[i])) { + Z_ADDREF(intern->heap->elements[i]); + } + } - array_init(&heap_array); + pnstr = spl_gen_private_prop_name(ce, "heap", sizeof("heap")-1); + zend_hash_update(debug_info, pnstr, &heap_array); + zend_string_release(pnstr); - for (i = 0; i < intern->heap->count; ++i) { - add_index_zval(&heap_array, i, &intern->heap->elements[i]); - if (Z_REFCOUNTED(intern->heap->elements[i])) { - Z_ADDREF(intern->heap->elements[i]); - } - } + return debug_info; +} +/* }}} */ - pnstr = spl_gen_private_prop_name(ce, "heap", sizeof("heap")-1); - zend_hash_update(intern->debug_info, pnstr, &heap_array); - zend_string_release(pnstr); - } +static HashTable *spl_heap_object_get_gc(zval *obj, zval **gc_data, int *gc_data_count) /* {{{ */ +{ + spl_heap_object *intern = Z_SPLHEAP_P(obj); + *gc_data = intern->heap->elements; + *gc_data_count = intern->heap->count; - return intern->debug_info; + return std_object_handlers.get_properties(obj); } /* }}} */ @@ -627,7 +609,6 @@ SPL_METHOD(SplHeap, insert) extract the element out of the top of the heap */ SPL_METHOD(SplHeap, extract) { - zval value; spl_heap_object *intern; if (zend_parse_parameters_none() == FAILURE) { @@ -641,14 +622,12 @@ SPL_METHOD(SplHeap, extract) return; } - spl_ptr_heap_delete_top(intern->heap, &value, getThis()); + spl_ptr_heap_delete_top(intern->heap, return_value, getThis()); - if (Z_ISUNDEF(value)) { + if (Z_ISUNDEF_P(return_value)) { zend_throw_exception(spl_ce_RuntimeException, "Can't extract from an empty heap", 0); return; } - - RETURN_ZVAL(&value, 1, 1); } /* }}} */ @@ -1233,6 +1212,7 @@ PHP_MINIT_FUNCTION(spl_heap) /* {{{ */ spl_handler_SplHeap.clone_obj = spl_heap_object_clone; spl_handler_SplHeap.count_elements = spl_heap_object_count_elements; spl_handler_SplHeap.get_debug_info = spl_heap_object_get_debug_info; + spl_handler_SplHeap.get_gc = spl_heap_object_get_gc; spl_handler_SplHeap.dtor_obj = zend_objects_destroy_object; spl_handler_SplHeap.free_obj = spl_heap_object_free_storage; @@ -1254,6 +1234,7 @@ PHP_MINIT_FUNCTION(spl_heap) /* {{{ */ spl_handler_SplPriorityQueue.clone_obj = spl_heap_object_clone; spl_handler_SplPriorityQueue.count_elements = spl_heap_object_count_elements; spl_handler_SplPriorityQueue.get_debug_info = spl_pqueue_object_get_debug_info; + spl_handler_SplPriorityQueue.get_gc = spl_heap_object_get_gc; spl_handler_SplPriorityQueue.dtor_obj = zend_objects_destroy_object; spl_handler_SplPriorityQueue.free_obj = spl_heap_object_free_storage; diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c index e2267cfdcd..37f97866c7 100644 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -474,24 +474,23 @@ static void spl_recursive_it_it_construct(INTERNAL_FUNCTION_PARAMETERS, zend_cla zval *iterator; zend_class_entry *ce_iterator; zend_long mode, flags; - int inc_refcount = 1; zend_error_handling error_handling; - zval caching_it; + zval caching_it, aggregate_retval; zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling); switch (rit_type) { case RIT_RecursiveTreeIterator: { - zval caching_it_flags, *user_caching_it_flags = NULL; mode = RIT_SELF_FIRST; flags = RTIT_BYPASS_KEY; if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "o|lzl", &iterator, &flags, &user_caching_it_flags, &mode) == SUCCESS) { if (instanceof_function(Z_OBJCE_P(iterator), zend_ce_aggregate)) { - zval *aggregate = iterator; - zend_call_method_with_0_params(aggregate, Z_OBJCE_P(aggregate), &Z_OBJCE_P(aggregate)->iterator_funcs.zf_new_iterator, "getiterator", iterator); -//??? inc_refcount = 0; + zend_call_method_with_0_params(iterator, Z_OBJCE_P(iterator), &Z_OBJCE_P(iterator)->iterator_funcs.zf_new_iterator, "getiterator", &aggregate_retval); + iterator = &aggregate_retval; + } else { + Z_ADDREF_P(iterator); } if (user_caching_it_flags) { @@ -501,11 +500,9 @@ static void spl_recursive_it_it_construct(INTERNAL_FUNCTION_PARAMETERS, zend_cla } spl_instantiate_arg_ex2(spl_ce_RecursiveCachingIterator, &caching_it, iterator, &caching_it_flags); zval_ptr_dtor(&caching_it_flags); - if (inc_refcount == 0 && iterator) { - zval_ptr_dtor(iterator); - } + + zval_ptr_dtor(iterator); iterator = &caching_it; -//??? inc_refcount = 0; } else { iterator = NULL; } @@ -518,9 +515,10 @@ static void spl_recursive_it_it_construct(INTERNAL_FUNCTION_PARAMETERS, zend_cla if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "o|ll", &iterator, &mode, &flags) == SUCCESS) { if (instanceof_function(Z_OBJCE_P(iterator), zend_ce_aggregate)) { - zval *aggregate = iterator; - zend_call_method_with_0_params(aggregate, Z_OBJCE_P(aggregate), &Z_OBJCE_P(aggregate)->iterator_funcs.zf_new_iterator, "getiterator", iterator); -//??? inc_refcount = 0; + zend_call_method_with_0_params(iterator, Z_OBJCE_P(iterator), &Z_OBJCE_P(iterator)->iterator_funcs.zf_new_iterator, "getiterator", &aggregate_retval); + iterator = &aggregate_retval; + } else { + Z_ADDREF_P(iterator); } } else { iterator = NULL; @@ -529,7 +527,7 @@ static void spl_recursive_it_it_construct(INTERNAL_FUNCTION_PARAMETERS, zend_cla } } if (!iterator || !instanceof_function(Z_OBJCE_P(iterator), spl_ce_RecursiveIterator)) { - if (iterator && !inc_refcount) { + if (iterator) { zval_ptr_dtor(iterator); } zend_throw_exception(spl_ce_InvalidArgumentException, "An instance of RecursiveIterator or IteratorAggregate creating it is required", 0); @@ -577,11 +575,7 @@ static void spl_recursive_it_it_construct(INTERNAL_FUNCTION_PARAMETERS, zend_cla ce_iterator = Z_OBJCE_P(iterator); /* respect inheritance, don't use spl_ce_RecursiveIterator */ intern->iterators[0].iterator = ce_iterator->get_iterator(ce_iterator, iterator, 0); -//??? if (inc_refcount) { - ZVAL_COPY(&intern->iterators[0].zobject, iterator); -//??? } else { -//??? ZVAL_COPY_VALUE(&intern->iterators[0].zobject, iterator); -//??? } + ZVAL_COPY_VALUE(&intern->iterators[0].zobject, iterator); intern->iterators[0].ce = ce_iterator; intern->iterators[0].state = RS_START; @@ -2255,6 +2249,7 @@ SPL_METHOD(RecursiveRegexIterator, getChildren) spl_instantiate_arg_n(Z_OBJCE_P(getThis()), return_value, 5, args); + zval_ptr_dtor(&args[0]); zval_ptr_dtor(&args[1]); } zval_ptr_dtor(&retval); diff --git a/ext/spl/spl_observer.c b/ext/spl/spl_observer.c index 76933a8228..b508565c83 100644 --- a/ext/spl/spl_observer.c +++ b/ext/spl/spl_observer.c @@ -85,7 +85,6 @@ typedef struct _spl_SplObjectStorage { /* {{{ */ HashPosition pos; zend_long flags; zend_function *fptr_get_hash; - HashTable *debug_info; zval *gcdata; size_t gcdata_num; zend_object std; @@ -112,11 +111,6 @@ void spl_SplObjectStorage_free_storage(zend_object *object) /* {{{ */ zend_hash_destroy(&intern->storage); - if (intern->debug_info != NULL) { - zend_hash_destroy(intern->debug_info); - efree(intern->debug_info); - } - if (intern->gcdata != NULL) { efree(intern->gcdata); } @@ -320,39 +314,35 @@ static HashTable* spl_object_storage_debug_info(zval *obj, int *is_temp) /* {{{ zval tmp, storage; zend_string *md5str; zend_string *zname; + HashTable *debug_info; - *is_temp = 0; + *is_temp = 1; props = Z_OBJPROP_P(obj); - if (intern->debug_info == NULL) { - ALLOC_HASHTABLE(intern->debug_info); - ZEND_INIT_SYMTABLE_EX(intern->debug_info, zend_hash_num_elements(props) + 1, 0); - } - - if (intern->debug_info->u.v.nApplyCount == 0) { - zend_hash_copy(intern->debug_info, props, (copy_ctor_func_t)zval_add_ref); + ALLOC_HASHTABLE(debug_info); + ZEND_INIT_SYMTABLE_EX(debug_info, zend_hash_num_elements(props) + 1, 0); + zend_hash_copy(debug_info, props, (copy_ctor_func_t)zval_add_ref); - array_init(&storage); + array_init(&storage); - ZEND_HASH_FOREACH_PTR(&intern->storage, element) { - md5str = php_spl_object_hash(&element->obj); - array_init(&tmp); - /* Incrementing the refcount of obj and inf would confuse the garbage collector. - * Prefer to null the destructor */ - Z_ARRVAL_P(&tmp)->pDestructor = NULL; - add_assoc_zval_ex(&tmp, "obj", sizeof("obj") - 1, &element->obj); - add_assoc_zval_ex(&tmp, "inf", sizeof("inf") - 1, &element->inf); - zend_hash_update(Z_ARRVAL(storage), md5str, &tmp); - zend_string_release(md5str); - } ZEND_HASH_FOREACH_END(); + ZEND_HASH_FOREACH_PTR(&intern->storage, element) { + md5str = php_spl_object_hash(&element->obj); + array_init(&tmp); + /* Incrementing the refcount of obj and inf would confuse the garbage collector. + * Prefer to null the destructor */ + Z_ARRVAL_P(&tmp)->pDestructor = NULL; + add_assoc_zval_ex(&tmp, "obj", sizeof("obj") - 1, &element->obj); + add_assoc_zval_ex(&tmp, "inf", sizeof("inf") - 1, &element->inf); + zend_hash_update(Z_ARRVAL(storage), md5str, &tmp); + zend_string_release(md5str); + } ZEND_HASH_FOREACH_END(); - zname = spl_gen_private_prop_name(spl_ce_SplObjectStorage, "storage", sizeof("storage")-1); - zend_symtable_update(intern->debug_info, zname, &storage); - zend_string_release(zname); - } + zname = spl_gen_private_prop_name(spl_ce_SplObjectStorage, "storage", sizeof("storage")-1); + zend_symtable_update(debug_info, zname, &storage); + zend_string_release(zname); - return intern->debug_info; + return debug_info; } /* }}} */ diff --git a/ext/spl/tests/arrayObject_exchangeArray_basic3.phpt b/ext/spl/tests/arrayObject_exchangeArray_basic3.phpt index 4045b7a946..ed2b8e89e1 100644 --- a/ext/spl/tests/arrayObject_exchangeArray_basic3.phpt +++ b/ext/spl/tests/arrayObject_exchangeArray_basic3.phpt @@ -98,9 +98,7 @@ object(C)#3 (2) { ["addedToOriginal"]=> string(17) "added To Original" } -array(2) { - ["pub1"]=> - string(7) "public1" +array(1) { ["addedToCopy"]=> string(13) "added To Copy" } diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c index 457e806440..0343e403e7 100644 --- a/ext/standard/http_fopen_wrapper.c +++ b/ext/standard/http_fopen_wrapper.c @@ -124,7 +124,7 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, size_t scratch_len = 0; int body = 0; char location[HTTP_HEADER_BLOCK_SIZE]; - zval *response_header = NULL; + zval response_header; int reqok = 0; char *http_header_line = NULL; char tmp_line[128]; @@ -146,6 +146,7 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, int response_code; zend_array *symbol_table; + ZVAL_UNDEF(&response_header); tmp_line[0] = '\0'; if (redirect_max < 1) { @@ -669,7 +670,15 @@ finish: zend_set_local_var_str("http_response_header", sizeof("http_response_header")-1, &ztmp, 0); } - response_header = zend_hash_str_find_ind(symbol_table, "http_response_header", sizeof("http_response_header")-1); + { + zval *response_header_ptr = zend_hash_str_find_ind(symbol_table, "http_response_header", sizeof("http_response_header")-1); + if (!response_header_ptr || Z_TYPE_P(response_header_ptr) != IS_ARRAY) { + ZVAL_UNDEF(&response_header); + goto out; + } else { + ZVAL_COPY(&response_header, response_header_ptr); + } + } if (!php_stream_eof(stream)) { size_t tmp_line_len; @@ -717,7 +726,7 @@ finish: } } ZVAL_STRINGL(&http_response, tmp_line, tmp_line_len); - zend_hash_next_index_insert(Z_ARRVAL_P(response_header), &http_response); + zend_hash_next_index_insert(Z_ARRVAL(response_header), &http_response); } } else { php_stream_wrapper_log_error(wrapper, options, "HTTP request failed, unexpected end of socket!"); @@ -790,7 +799,7 @@ finish: ZVAL_STRINGL(&http_header, http_header_line, http_header_line_length); - zend_hash_next_index_insert(Z_ARRVAL_P(response_header), &http_header); + zend_hash_next_index_insert(Z_ARRVAL(response_header), &http_header); } } else { break; @@ -904,7 +913,7 @@ out: if (stream) { if (header_init) { - ZVAL_COPY(&stream->wrapperdata, response_header); + ZVAL_COPY(&stream->wrapperdata, &response_header); } php_stream_notify_progress_init(context, 0, file_size); @@ -925,10 +934,14 @@ out: if (transfer_encoding) { php_stream_filter_append(&stream->readfilters, transfer_encoding); } - } else if (transfer_encoding) { - php_stream_filter_free(transfer_encoding); + } else { + if (transfer_encoding) { + php_stream_filter_free(transfer_encoding); + } } + zval_ptr_dtor(&response_header); + return stream; } /* }}} */ diff --git a/ext/standard/link.c b/ext/standard/link.c index b7fe1ae495..7001dd8807 100644 --- a/ext/standard/link.c +++ b/ext/standard/link.c @@ -59,7 +59,7 @@ PHP_FUNCTION(readlink) char buff[MAXPATHLEN]; int ret; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &link, &link_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "p", &link, &link_len) == FAILURE) { return; } diff --git a/ext/standard/math.c b/ext/standard/math.c index cff798c9fb..a3685c00b9 100644 --- a/ext/standard/math.c +++ b/ext/standard/math.c @@ -1458,7 +1458,8 @@ PHP_FUNCTION(intdiv) } else if (divisor == -1 && numerator == ZEND_LONG_MIN) { /* Prevent overflow error/crash We don't return a float here as that violates function contract */ - RETURN_LONG(0); + zend_throw_exception_ex(NULL, 0, "Division of PHP_INT_MIN by -1 is not an integer"); + return; } RETURN_LONG(numerator/divisor); diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index a86aae25f0..fa9758b06c 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -1493,7 +1493,7 @@ PHP_FUNCTION(stream_resolve_include_path) size_t filename_len; zend_string *resolved_path; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &filename, &filename_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "p", &filename, &filename_len) == FAILURE) { return; } diff --git a/ext/standard/tests/file/readlink_variation1.phpt b/ext/standard/tests/file/readlink_variation1.phpt index 1dae17cbd4..d4f1a5ff02 100644 --- a/ext/standard/tests/file/readlink_variation1.phpt +++ b/ext/standard/tests/file/readlink_variation1.phpt @@ -65,7 +65,7 @@ bool(false) Warning: readlink(): %s in %s on line %d bool(false) -Warning: readlink() expects parameter 1 to be string, resource given in %s on line %d +Warning: readlink() expects parameter 1 to be a valid path, resource given in %s on line %d NULL Warning: readlink(): %s in %s on line %d diff --git a/ext/standard/tests/http/bug69337.phpt b/ext/standard/tests/http/bug69337.phpt new file mode 100644 index 0000000000..1451d4bf01 --- /dev/null +++ b/ext/standard/tests/http/bug69337.phpt @@ -0,0 +1,41 @@ +--TEST-- +Bug #69337 (Stream context leaks when http request fails) +--SKIPIF-- +<?php require 'server.inc'; http_server_skipif('tcp://127.0.0.1:22345'); ?> +--INI-- +allow_url_fopen=1 +allow_url_include=1 +--FILE-- +<?php +require 'server.inc'; + +function stream_notification_callback($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) +{ + if($notification_code == STREAM_NOTIFY_REDIRECTED) { + // $http_response_header is now a string, but will be used as an array + // by php_stream_url_wrap_http_ex() later on + $GLOBALS['http_response_header'] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\0\0\0\0"; + } +} + +$ctx = stream_context_create(); +stream_context_set_params($ctx, array("notification" => "stream_notification_callback")); + +$responses = array( + "data://text/plain,HTTP/1.0 302 Found\r\nLocation: http://127.0.0.1:22345/try-again\r\n\r\n", + "data://text/plain,HTTP/1.0 404 Not Found\r\n\r\n", +); + +$pid = http_server("tcp://127.0.0.1:22345", $responses, $output); + +$f = file_get_contents('http://127.0.0.1:22345/', 0, $ctx); + +http_server_kill($pid); +var_dump($f); +?> +==DONE== +--EXPECTF-- +string(26) "HTTP/1.0 404 Not Found + +" +==DONE==
\ No newline at end of file diff --git a/ext/standard/tests/math/intdiv.phpt b/ext/standard/tests/math/intdiv.phpt index cff8469445..9362be638f 100644 --- a/ext/standard/tests/math/intdiv.phpt +++ b/ext/standard/tests/math/intdiv.phpt @@ -7,22 +7,25 @@ var_dump(intdiv(-3, 2)); var_dump(intdiv(3, -2)); var_dump(intdiv(-3, -2)); var_dump(intdiv(PHP_INT_MAX, PHP_INT_MAX)); -var_dump(intdiv(-PHP_INT_MAX - 1, -PHP_INT_MAX - 1)); -var_dump(intdiv(-PHP_INT_MAX - 1, -1)); +var_dump(intdiv(PHP_INT_MIN, PHP_INT_MIN)); +try { + var_dump(intdiv(PHP_INT_MIN, -1)); +} catch (Exception $e) { + echo "Exception: " . $e->getMessage() . "\n"; +} try { var_dump(intdiv(1, 0)); } catch (Exception $e) { - echo "\nException: " . $e->getMessage() . "\n"; + echo "Exception: " . $e->getMessage() . "\n"; } ?> ---EXPECTF-- +--EXPECT-- int(1) int(-1) int(-1) int(1) int(1) int(1) -int(0) - +Exception: Division of PHP_INT_MIN by -1 is not an integer Exception: Division by zero diff --git a/ext/standard/tests/serialize/bug69152.phpt b/ext/standard/tests/serialize/bug69152.phpt new file mode 100644 index 0000000000..eb3f34e21e --- /dev/null +++ b/ext/standard/tests/serialize/bug69152.phpt @@ -0,0 +1,16 @@ +--TEST-- +Bug #69152: Type Confusion Infoleak Vulnerability in unserialize() +--FILE-- +<?php +$x = unserialize('O:9:"exception":1:{s:20:"'."\0".'BaseException'."\0".'trace";s:4:"ryat";}'); +echo $x; +$x = unserialize('O:4:"test":1:{s:27:"__PHP_Incomplete_Class_Name";R:1;}'); +$x->test(); + +?> +--EXPECTF-- +exception 'Exception' in %s:%d +Stack trace: +#0 {main} + +Fatal error: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "unknown" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line %d diff --git a/ext/standard/tests/serialize/unserialize_mem_leak.phpt b/ext/standard/tests/serialize/unserialize_mem_leak.phpt index d27ca2b422..97c59f9ad1 100644 --- a/ext/standard/tests/serialize/unserialize_mem_leak.phpt +++ b/ext/standard/tests/serialize/unserialize_mem_leak.phpt @@ -1,7 +1,5 @@ --TEST-- Memleaks if unserialize return a self-referenced array/object ---XFAIL-- -To fix this, we need change zval_ptr_dtor_nogc to zval_ptr_dtor in free_args, but it will introduce slowdown. mark this XFAIL now. we may find better fix later. --INI-- report_memleaks=1 --FILE-- diff --git a/ext/standard/var.c b/ext/standard/var.c index 64926d174b..fc6be9234a 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -62,7 +62,7 @@ static void php_array_element_dump(zval *zv, zend_ulong index, zend_string *key, php_printf("%*c[\"", level + 1, ' '); PHPWRITE(key->val, key->len); php_printf("\"]=>\n"); - } + } php_var_dump(zv, level + 2); } /* }}} */ @@ -156,13 +156,13 @@ again: PUTS("}\n"); break; case IS_OBJECT: - myht = Z_OBJDEBUG_P(struc, is_temp); - if (myht && ++myht->u.v.nApplyCount > 1) { + if (Z_OBJ_APPLY_COUNT_P(struc) > 0) { PUTS("*RECURSION*\n"); - --myht->u.v.nApplyCount; return; } + Z_OBJ_INC_APPLY_COUNT_P(struc); + myht = Z_OBJDEBUG_P(struc, is_temp); class_name = Z_OBJ_HANDLER_P(struc, get_class_name)(Z_OBJ_P(struc)); php_printf("%sobject(%s)#%d (%d) {\n", COMMON, class_name->val, Z_OBJ_HANDLE_P(struc), myht ? zend_obj_num_elements(myht) : 0); zend_string_release(class_name); @@ -175,7 +175,6 @@ again: ZEND_HASH_FOREACH_KEY_VAL_IND(myht, num, key, val) { php_object_property_dump(val, num, key, level); } ZEND_HASH_FOREACH_END(); - --myht->u.v.nApplyCount; if (is_temp) { zend_hash_destroy(myht); efree(myht); @@ -185,6 +184,7 @@ again: php_printf("%*c", level-1, ' '); } PUTS("}\n"); + Z_OBJ_DEC_APPLY_COUNT_P(struc); break; case IS_RESOURCE: { const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(struc)); diff --git a/ext/tokenizer/tokenizer_data.c b/ext/tokenizer/tokenizer_data.c index 24a234d62c..6769202a3b 100644 --- a/ext/tokenizer/tokenizer_data.c +++ b/ext/tokenizer/tokenizer_data.c @@ -40,6 +40,7 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) { REGISTER_LONG_CONSTANT("T_PRINT", T_PRINT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_YIELD", T_YIELD, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_DOUBLE_ARROW", T_DOUBLE_ARROW, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_YIELD_FROM", T_YIELD_FROM, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_POW_EQUAL", T_POW_EQUAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_SR_EQUAL", T_SR_EQUAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_SL_EQUAL", T_SL_EQUAL, CONST_CS | CONST_PERSISTENT); @@ -179,6 +180,7 @@ char *get_token_type_name(int token_type) case T_PRINT: return "T_PRINT"; case T_YIELD: return "T_YIELD"; case T_DOUBLE_ARROW: return "T_DOUBLE_ARROW"; + case T_YIELD_FROM: return "T_YIELD_FROM"; case T_POW_EQUAL: return "T_POW_EQUAL"; case T_SR_EQUAL: return "T_SR_EQUAL"; case T_SL_EQUAL: return "T_SL_EQUAL"; diff --git a/ext/xmlwriter/php_xmlwriter.c b/ext/xmlwriter/php_xmlwriter.c index 3cab7a1458..a7da0e7902 100644 --- a/ext/xmlwriter/php_xmlwriter.c +++ b/ext/xmlwriter/php_xmlwriter.c @@ -1672,7 +1672,7 @@ static PHP_FUNCTION(xmlwriter_write_dtd_entity) /* }}} */ #endif -/* {{{ proto resource xmlwriter_open_uri(resource xmlwriter, string source) +/* {{{ proto resource xmlwriter_open_uri(string source) Create new xmlwriter using source uri for output */ static PHP_FUNCTION(xmlwriter_open_uri) { @@ -1685,7 +1685,7 @@ static PHP_FUNCTION(xmlwriter_open_uri) zval *self = getThis(); ze_xmlwriter_object *ze_obj = NULL; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &source, &source_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "p", &source, &source_len) == FAILURE) { return; } diff --git a/ext/zip/php_zip.h b/ext/zip/php_zip.h index 31099053ef..e68c9fcec9 100644 --- a/ext/zip/php_zip.h +++ b/ext/zip/php_zip.h @@ -38,7 +38,7 @@ extern zend_module_entry zip_module_entry; #define ZIP_OVERWRITE ZIP_TRUNCATE #endif -#define PHP_ZIP_VERSION "1.12.4" +#define PHP_ZIP_VERSION "1.12.5" #ifndef Z_SET_REFCOUNT_P # if PHP_MAJOR_VERSION < 6 && (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION < 3) diff --git a/ext/zlib/tests/gzopen_variation1.phpt b/ext/zlib/tests/gzopen_variation1.phpt index c5a47f4d08..bca48f39c9 100644 --- a/ext/zlib/tests/gzopen_variation1.phpt +++ b/ext/zlib/tests/gzopen_variation1.phpt @@ -1,17 +1,17 @@ --TEST-- -Test gzopen() function : usage variation +Test gzopen() function : usage variation --SKIPIF-- -<?php +<?php if (!extension_loaded("zlib")) { - print "skip - zlib extension not loaded"; -} + print "skip - zlib extension not loaded"; +} ?> --FILE-- <?php /* Prototype : resource gzopen(string filename, string mode [, int use_include_path]) - * Description: Open a .gz-file and return a .gz-file pointer + * Description: Open a .gz-file and return a .gz-file pointer * Source code: ext/zlib/zlib.c - * Alias to functions: + * Alias to functions: */ echo "*** Testing gzopen() : usage variation ***\n"; @@ -102,9 +102,9 @@ $inputs = array( // unset data 'unset var' => @$unset_var, - + // resource variable - 'resource' => $fp + 'resource' => $fp ); // loop through each element of the array for filename @@ -158,19 +158,19 @@ Error: 2 - gzopen(0.5): failed to open stream: No such file or directory, %s(%d) bool(false) --empty array-- -Error: 2 - gzopen() expects parameter 1 to be string, array given, %s(%d) +Error: 2 - gzopen() expects parameter 1 to be a valid path, array given, %s(%d) NULL --int indexed array-- -Error: 2 - gzopen() expects parameter 1 to be string, array given, %s(%d) +Error: 2 - gzopen() expects parameter 1 to be a valid path, array given, %s(%d) NULL --associative array-- -Error: 2 - gzopen() expects parameter 1 to be string, array given, %s(%d) +Error: 2 - gzopen() expects parameter 1 to be a valid path, array given, %s(%d) NULL --nested arrays-- -Error: 2 - gzopen() expects parameter 1 to be string, array given, %s(%d) +Error: 2 - gzopen() expects parameter 1 to be a valid path, array given, %s(%d) NULL --uppercase NULL-- @@ -210,7 +210,7 @@ Error: 2 - gzopen(Class A object): failed to open stream: No such file or direct bool(false) --instance of classWithoutToString-- -Error: 2 - gzopen() expects parameter 1 to be string, object given, %s(%d) +Error: 2 - gzopen() expects parameter 1 to be a valid path, object given, %s(%d) NULL --undefined var-- @@ -222,7 +222,7 @@ Error: 2 - gzopen(): Filename cannot be empty, %s(%d) bool(false) --resource-- -Error: 2 - gzopen() expects parameter 1 to be string, resource given, %s(%d) +Error: 2 - gzopen() expects parameter 1 to be a valid path, resource given, %s(%d) NULL ===DONE=== diff --git a/ext/zlib/tests/readgzfile_variation1.phpt b/ext/zlib/tests/readgzfile_variation1.phpt index 5a5ec4f6e7..5d9b639d29 100644 --- a/ext/zlib/tests/readgzfile_variation1.phpt +++ b/ext/zlib/tests/readgzfile_variation1.phpt @@ -29,15 +29,15 @@ foreach ( $variation as $var ) { ===DONE=== --EXPECTF-- -Warning: readgzfile() expects parameter 1 to be string, array given in %s on line %d +Warning: readgzfile() expects parameter 1 to be a valid path, array given in %s on line %d NULL -Warning: readgzfile() expects parameter 1 to be string, array given in %s on line %d +Warning: readgzfile() expects parameter 1 to be a valid path, array given in %s on line %d NULL -Warning: readgzfile() expects parameter 1 to be string, array given in %s on line %d +Warning: readgzfile() expects parameter 1 to be a valid path, array given in %s on line %d NULL -Warning: readgzfile() expects parameter 1 to be string, array given in %s on line %d +Warning: readgzfile() expects parameter 1 to be a valid path, array given in %s on line %d NULL -===DONE===
\ No newline at end of file +===DONE=== diff --git a/ext/zlib/tests/readgzfile_variation6.phpt b/ext/zlib/tests/readgzfile_variation6.phpt index 702f91850e..9fcea02939 100644 --- a/ext/zlib/tests/readgzfile_variation6.phpt +++ b/ext/zlib/tests/readgzfile_variation6.phpt @@ -45,5 +45,5 @@ foreach ( $variation as $var ) { --EXPECTF-- Error: 2 - readgzfile(Class A object): failed to open stream: No such file or directory, %s(%d) bool(false) -Error: 2 - readgzfile() expects parameter 1 to be string, object given, %s(%d) -NULL
\ No newline at end of file +Error: 2 - readgzfile() expects parameter 1 to be a valid path, object given, %s(%d) +NULL diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index 0cb94fe6e4..f44f92b86d 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -588,7 +588,7 @@ static PHP_FUNCTION(gzopen) php_stream *stream; zend_long use_include_path = 0; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|l", &filename, &filename_len, &mode, &mode_len, &use_include_path) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "ps|l", &filename, &filename_len, &mode, &mode_len, &use_include_path) == FAILURE) { return; } @@ -616,7 +616,7 @@ static PHP_FUNCTION(readgzfile) size_t size; zend_long use_include_path = 0; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|l", &filename, &filename_len, &use_include_path) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "p|l", &filename, &filename_len, &use_include_path) == FAILURE) { return; } |