summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/curl/interface.c5
-rw-r--r--ext/curl/tests/bug69316.phpt45
-rw-r--r--ext/date/lib/timezonedb.h1154
-rw-r--r--ext/date/php_date.c1
-rw-r--r--ext/date/tests/DateTimeZone_getTransitions_basic1.phpt6
-rw-r--r--ext/date/tests/DateTime_add-massive.phpt6
-rw-r--r--ext/date/tests/DateTime_diff-massive.phpt6
-rw-r--r--ext/date/tests/DateTime_sub-massive.phpt6
-rw-r--r--ext/date/tests/bug48058.phpt6
-rw-r--r--ext/date/tests/mktime-3-64bit.phpt22
-rw-r--r--ext/date/tests/timezone_transitions_get_basic1.phpt10
-rw-r--r--ext/dom/document.c8
-rw-r--r--ext/dom/tests/DOMDocument_loadHTMLfile_error2.phpt5
-rw-r--r--ext/fileinfo/fileinfo.c5
-rw-r--r--ext/fileinfo/libmagic/softmagic.c19
-rw-r--r--ext/fileinfo/tests/bug68819_001.phpt18
-rw-r--r--ext/fileinfo/tests/bug68819_002.phpt26
-rw-r--r--ext/fileinfo/tests/finfo_file_basic.phpt4
-rw-r--r--ext/filter/filter.c1
-rw-r--r--ext/gd/gd.c6
-rw-r--r--ext/gd/tests/imageloadfont_error1.phpt2
-rw-r--r--ext/gmp/gmp.c14
-rw-r--r--ext/gmp/tests/gmp_random_bits.phpt4
-rw-r--r--ext/gmp/tests/gmp_random_range.phpt4
-rw-r--r--ext/gmp/tests/gmp_remroot.phpt2
-rw-r--r--ext/hash/hash.c7
-rw-r--r--ext/hash/tests/hash_hmac_file_error.phpt7
-rw-r--r--ext/intl/breakiterator/breakiterator_methods.cpp4
-rw-r--r--ext/intl/calendar/calendar_methods.cpp2
-rw-r--r--ext/intl/collator/collator_create.c16
-rw-r--r--ext/intl/dateformat/dateformat_attrcpp.cpp1
-rw-r--r--ext/intl/dateformat/dateformat_create.cpp24
-rw-r--r--ext/intl/formatter/formatter_main.c15
-rw-r--r--ext/intl/intl_data.h33
-rw-r--r--ext/intl/msgformat/msgformat.c15
-rw-r--r--ext/intl/resourcebundle/resourcebundle_class.c18
-rw-r--r--ext/intl/spoofchecker/spoofchecker_create.c2
-rw-r--r--ext/intl/transliterator/transliterator_methods.c11
-rw-r--r--ext/mbstring/mbstring.c2
-rw-r--r--ext/odbc/php_odbc.c28
-rw-r--r--ext/odbc/php_odbc_includes.h6
-rw-r--r--ext/opcache/ZendAccelerator.h2
-rw-r--r--ext/openssl/openssl.c4
-rw-r--r--ext/openssl/tests/bug68912.phpt1
-rw-r--r--ext/openssl/xp_ssl.c7
-rw-r--r--ext/pcre/php_pcre.c8
-rw-r--r--ext/pdo/pdo_dbh.c2
-rw-r--r--ext/pdo/pdo_stmt.c7
-rw-r--r--ext/pdo_pgsql/pgsql_driver.c19
-rw-r--r--ext/pdo_pgsql/php_pdo_pgsql_int.h12
-rw-r--r--ext/pgsql/pgsql.c2
-rw-r--r--ext/phar/phar.c74
-rw-r--r--ext/phar/phar_internal.h11
-rw-r--r--ext/phar/tests/bug69324.pharbin0 -> 269 bytes
-rw-r--r--ext/phar/tests/bug69324.phpt17
-rw-r--r--ext/phar/tests/bug69441.pharbin0 -> 5780 bytes
-rw-r--r--ext/phar/tests/bug69441.phpt21
-rw-r--r--ext/reflection/php_reflection.c1
-rw-r--r--ext/skeleton/skeleton.c2
-rw-r--r--ext/soap/soap.c1
-rw-r--r--ext/spl/spl_array.c72
-rw-r--r--ext/spl/spl_dllist.c87
-rw-r--r--ext/spl/spl_fixedarray.c24
-rw-r--r--ext/spl/spl_heap.c97
-rw-r--r--ext/spl/spl_iterators.c33
-rw-r--r--ext/spl/spl_observer.c52
-rw-r--r--ext/spl/tests/arrayObject_exchangeArray_basic3.phpt4
-rw-r--r--ext/standard/http_fopen_wrapper.c27
-rw-r--r--ext/standard/link.c2
-rw-r--r--ext/standard/math.c3
-rw-r--r--ext/standard/streamsfuncs.c2
-rw-r--r--ext/standard/tests/file/readlink_variation1.phpt2
-rw-r--r--ext/standard/tests/http/bug69337.phpt41
-rw-r--r--ext/standard/tests/math/intdiv.phpt15
-rw-r--r--ext/standard/tests/serialize/bug69152.phpt16
-rw-r--r--ext/standard/tests/serialize/unserialize_mem_leak.phpt2
-rw-r--r--ext/standard/var.c10
-rw-r--r--ext/tokenizer/tokenizer_data.c2
-rw-r--r--ext/xmlwriter/php_xmlwriter.c4
-rw-r--r--ext/zip/php_zip.h2
-rw-r--r--ext/zlib/tests/gzopen_variation1.phpt28
-rw-r--r--ext/zlib/tests/readgzfile_variation1.phpt10
-rw-r--r--ext/zlib/tests/readgzfile_variation6.phpt4
-rw-r--r--ext/zlib/zlib.c4
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
new file mode 100644
index 0000000000..0882d88c22
--- /dev/null
+++ b/ext/phar/tests/bug69324.phar
Binary files differ
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
new file mode 100644
index 0000000000..80956dce7c
--- /dev/null
+++ b/ext/phar/tests/bug69441.phar
Binary files differ
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, &current->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, &current->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++], &current->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;
}