diff options
| author | Boris Lytochkin <lytboris@php.net> | 2013-05-03 11:21:48 +0400 |
|---|---|---|
| committer | Boris Lytochkin <lytboris@php.net> | 2013-05-03 11:21:48 +0400 |
| commit | aa448adc8347c072421103d1a92b0a7a75ec873f (patch) | |
| tree | a8f3dbfd72e00f4191f2836a4543fd86813d982e | |
| parent | 62364e6e01092911fa11e6d28f9acc3ed9af07e8 (diff) | |
| parent | 4a34d4a83cd87a0b3fe499936f93e632cc594685 (diff) | |
| download | php-git-aa448adc8347c072421103d1a92b0a7a75ec873f.tar.gz | |
Merge branch 'PHP-5.3' of https://git.php.net/push/php-src into PHP-5.3
* 'PHP-5.3' of https://git.php.net/push/php-src: (39 commits)
NEWS
From code coverity scan, syscall return value must be check.
fix more resource leaks
From code coverity scan - fix some memory leak - fix some resources leak (fd) - create fpm_worker_pool_free (shared use) - possible null dref (wp->user and wp->home can be null)
fixed size array cannot be null
use limit_extensions as we use security_limit_extensions later (free)
unused variable
fix possible null deref (detected by code coverity scan)
Also fixed bug #64726 in 5.3
Fix memory realted to #64726
Fix Test Bug #64714
PHP 5.3.26 this will be
Fix NEWS
Fix bug #64458 (dns_get_record result with string of length -1)
Fixed incorrect check. SEND_REF may be executed before DO_FCALL when EX(function_state).function is not yet set to the calling function.
Fixed stream_socket_pair() on Windows x64 and
- Updated to version 2013.3 (2013c)
lower the limit, should fit in a byte
updated lib versions
allow lcov 1.10
...
45 files changed, 1051 insertions, 693 deletions
diff --git a/.travis.yml b/.travis.yml index a375a359dd..f1a333adcb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,9 @@ language: php -php: - # We only specify one version so we only get one worker - - 5.4 +branches: + except: + - /^PHP-5\.3.*/ + - /^PHP-5\.4.*/ notifications: email: false - -script: exit 0 @@ -1,10 +1,42 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -?? ??? 2013, PHP 5.3.24 +?? ??? 2013, PHP 5.3.26 + +- FPM: + . Fixed some possible memory or resource leaks and possible null dereference + detected by code coverity scan. (Remi) + . Log a warning when a syscall fails. (Remi) + +- MySQLi: + . Fixed bug #64726 (Segfault when calling fetch_object on a use_result and DB + pointer has closed). (Laruence) + +?? ??? 2013, PHP 5.3.25 + +### ADD ENTRIES ABOVE FOR 5.3.26. 5.3.25 NEWS WILL BE UPDATED BY RM ON MERGE ### + +- Core: + . Fixed bug #64578 (debug_backtrace in set_error_handler corrupts zend heap: + segfault). (Laruence) + . Fixed bug #64458 (dns_get_record result with string of length -1). (Stas) + . Fixed bugs #47675 and #64577 (fd leak on Solaris). (Rasmus) + +- Streams: + . Fixed Windows x64 version of stream_socket_pair() and improved error + handling. (Anatol Belski) + +- Zip: + . Fixed bug #64342 (ZipArchive::addFile() has to check for file existence). + (Anatol) + +11 Apr 2013, PHP 5.3.24 - Core . Fixed bug #64370 (microtime(true) less than $_SERVER['REQUEST_TIME_FLOAT']). (Anatol) + . Fixed bug #63914 (zend_do_fcall_common_helper_SPEC does not handle + exceptions properly). (Jeff Welch) + . Fixed bug #62343 (Show class_alias In get_declared_classes()) (Dmitry) - PCRE: . Merged PCRE 8.32). (Anatol) @@ -13,8 +45,14 @@ PHP NEWS . Fixed bug #63530 (mysqlnd_stmt::bind_one_parameter crashes, uses wrong alloc for stmt->param_bind). (Andrey) +- DateTime + . Fixed bug #62852 (Unserialize Invalid Date causes crash). (Anatol) + +- Zip: + . Bug #64452 (Zip crash intermittently). (Anatol) + -28 Feb 2013, PHP 5.3.23RC1 +14 Mar 2013, PHP 5.3.23 - Phar: . Fixed timestamp update on Phar contents modification. (Dmitry) diff --git a/Zend/tests/bug62343.phpt b/Zend/tests/bug62343.phpt new file mode 100644 index 0000000000..b0208c4ac3 --- /dev/null +++ b/Zend/tests/bug62343.phpt @@ -0,0 +1,13 @@ +--TEST-- +Bug #62343 (Show class_alias In get_declared_classes()) +--FILE-- +<?php +class a { } +class_alias("a", "b"); +$c = get_declared_classes(); +var_dump(end($c)); +var_dump(prev($c)); +?> +--EXPECT-- +string(1) "b" +string(1) "a" diff --git a/Zend/tests/bug64578.phpt b/Zend/tests/bug64578.phpt new file mode 100644 index 0000000000..65c51d94ff --- /dev/null +++ b/Zend/tests/bug64578.phpt @@ -0,0 +1,15 @@ +--TEST-- +Bug #64578 (debug_backtrace in set_error_handler corrupts zend heap: segfault) +--FILE-- +<?php +function x($s) { + $resource = fopen("php://input", "r"); + $s[$resource] = '2'; +} +$y = "1"; +x($y); +var_dump($y); +?> +--EXPECTF-- +Warning: Illegal offset type in %sbug64578.php on line %d +string(1) "1" diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 06f14624be..c60cff522c 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -1541,6 +1541,13 @@ ZEND_FUNCTION(restore_exception_handler) } /* }}} */ +static int same_name(const char *key, const char *name, zend_uint name_len) +{ + char *lcname = zend_str_tolower_dup(name, name_len); + int ret = memcmp(lcname, key, name_len) == 0; + efree(lcname); + return ret; +} static int copy_class_or_interface_name(zend_class_entry **pce TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key) { @@ -1552,7 +1559,13 @@ static int copy_class_or_interface_name(zend_class_entry **pce TSRMLS_DC, int nu if ((hash_key->nKeyLength==0 || hash_key->arKey[0]!=0) && (comply_mask == (ce->ce_flags & mask))) { - add_next_index_stringl(array, ce->name, ce->name_length, 1); + if (ce->refcount > 1 && + (ce->name_length != hash_key->nKeyLength - 1 || + !same_name(hash_key->arKey, ce->name, ce->name_length))) { + add_next_index_stringl(array, hash_key->arKey, hash_key->nKeyLength - 1, 1); + } else { + add_next_index_stringl(array, ce->name, ce->name_length, 1); + } } return ZEND_HASH_APPLY_KEEP; } diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index de7cd4a486..16dc08e502 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -937,6 +937,10 @@ convert_to_array: zend_error_noreturn(E_ERROR, "[] operator not supported for strings"); } + if (type != BP_VAR_UNSET) { + SEPARATE_ZVAL_IF_NOT_REF(container_ptr); + } + if (Z_TYPE_P(dim) != IS_LONG) { switch(Z_TYPE_P(dim)) { /* case IS_LONG: */ @@ -956,9 +960,6 @@ convert_to_array: convert_to_long(&tmp); dim = &tmp; } - if (type != BP_VAR_UNSET) { - SEPARATE_ZVAL_IF_NOT_REF(container_ptr); - } container = *container_ptr; result->str_offset.str = container; PZVAL_LOCK(container); diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index e8d3250d0d..02566f365d 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2301,10 +2301,6 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY) EX(function_state).arguments = zend_vm_stack_push_args(opline->extended_value TSRMLS_CC); if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) { - ALLOC_INIT_ZVAL(EX_T(opline->result.u.var).var.ptr); - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.fcall_returned_reference = EX(function_state).function->common.return_reference; - if (EX(function_state).function->common.arg_info) { zend_uint i=0; zval **p = (zval**)EX(function_state).arguments; @@ -2315,15 +2311,22 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY) arg_count--; } } - if (!zend_execute_internal) { - /* saves one function call if zend_execute_internal is not used */ - ((zend_internal_function *) EX(function_state).function)->handler(opline->extended_value, EX_T(opline->result.u.var).var.ptr, EX(function_state).function->common.return_reference?&EX_T(opline->result.u.var).var.ptr:NULL, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC); - } else { - zend_execute_internal(EXECUTE_DATA, RETURN_VALUE_USED(opline) TSRMLS_CC); - } - if (!RETURN_VALUE_USED(opline)) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); + if (EXPECTED(EG(exception) == NULL)) { + ALLOC_INIT_ZVAL(EX_T(opline->result.u.var).var.ptr); + EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; + EX_T(opline->result.u.var).var.fcall_returned_reference = EX(function_state).function->common.return_reference; + + if (!zend_execute_internal) { + /* saves one function call if zend_execute_internal is not used */ + ((zend_internal_function *) EX(function_state).function)->handler(opline->extended_value, EX_T(opline->result.u.var).var.ptr, EX(function_state).function->common.return_reference?&EX_T(opline->result.u.var).var.ptr:NULL, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC); + } else { + zend_execute_internal(EXECUTE_DATA, RETURN_VALUE_USED(opline) TSRMLS_CC); + } + + if (!RETURN_VALUE_USED(opline)) { + zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); + } } } else if (EX(function_state).function->type == ZEND_USER_FUNCTION) { EX(original_return_value) = EG(return_value_ptr_ptr); @@ -2707,7 +2710,9 @@ ZEND_VM_HANDLER(67, ZEND_SEND_REF, VAR|CV, ANY) ZEND_VM_NEXT_OPCODE(); } - if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION && !ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { + if (opline->extended_value == ZEND_DO_FCALL_BY_NAME && + EX(function_state).function->type == ZEND_INTERNAL_FUNCTION && + !ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { ZEND_VM_DISPATCH_TO_HELPER(zend_send_by_var_helper); } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index f5cedd872f..f6220b0f53 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -301,10 +301,6 @@ static int ZEND_FASTCALL zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_AR EX(function_state).arguments = zend_vm_stack_push_args(opline->extended_value TSRMLS_CC); if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) { - ALLOC_INIT_ZVAL(EX_T(opline->result.u.var).var.ptr); - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.fcall_returned_reference = EX(function_state).function->common.return_reference; - if (EX(function_state).function->common.arg_info) { zend_uint i=0; zval **p = (zval**)EX(function_state).arguments; @@ -315,15 +311,22 @@ static int ZEND_FASTCALL zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_AR arg_count--; } } - if (!zend_execute_internal) { - /* saves one function call if zend_execute_internal is not used */ - ((zend_internal_function *) EX(function_state).function)->handler(opline->extended_value, EX_T(opline->result.u.var).var.ptr, EX(function_state).function->common.return_reference?&EX_T(opline->result.u.var).var.ptr:NULL, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC); - } else { - zend_execute_internal(execute_data, RETURN_VALUE_USED(opline) TSRMLS_CC); - } - if (!RETURN_VALUE_USED(opline)) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); + if (EXPECTED(EG(exception) == NULL)) { + ALLOC_INIT_ZVAL(EX_T(opline->result.u.var).var.ptr); + EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; + EX_T(opline->result.u.var).var.fcall_returned_reference = EX(function_state).function->common.return_reference; + + if (!zend_execute_internal) { + /* saves one function call if zend_execute_internal is not used */ + ((zend_internal_function *) EX(function_state).function)->handler(opline->extended_value, EX_T(opline->result.u.var).var.ptr, EX(function_state).function->common.return_reference?&EX_T(opline->result.u.var).var.ptr:NULL, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC); + } else { + zend_execute_internal(execute_data, RETURN_VALUE_USED(opline) TSRMLS_CC); + } + + if (!RETURN_VALUE_USED(opline)) { + zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); + } } } else if (EX(function_state).function->type == ZEND_USER_FUNCTION) { EX(original_return_value) = EG(return_value_ptr_ptr); @@ -8396,7 +8399,9 @@ static int ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG ZEND_VM_NEXT_OPCODE(); } - if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION && !ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { + if (opline->extended_value == ZEND_DO_FCALL_BY_NAME && + EX(function_state).function->type == ZEND_INTERNAL_FUNCTION && + !ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { return zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } @@ -22309,7 +22314,9 @@ static int ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS ZEND_VM_NEXT_OPCODE(); } - if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION && !ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { + if (opline->extended_value == ZEND_DO_FCALL_BY_NAME && + EX(function_state).function->type == ZEND_INTERNAL_FUNCTION && + !ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { return zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } diff --git a/configure.in b/configure.in index f49e19568f..bfbc219b63 100644 --- a/configure.in +++ b/configure.in @@ -41,7 +41,7 @@ AC_CONFIG_HEADER(main/php_config.h) PHP_MAJOR_VERSION=5 PHP_MINOR_VERSION=3 -PHP_RELEASE_VERSION=24 +PHP_RELEASE_VERSION=26 PHP_EXTRA_VERSION="-dev" PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION" PHP_VERSION_ID=`expr [$]PHP_MAJOR_VERSION \* 10000 + [$]PHP_MINOR_VERSION \* 100 + [$]PHP_RELEASE_VERSION` @@ -712,7 +712,7 @@ if test "$PHP_GCOV" = "yes"; then AC_MSG_ERROR([ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1.]) fi - ltp_version_list="1.5 1.6 1.7" + ltp_version_list="1.5 1.6 1.7 1.9 1.10" AC_CHECK_PROG(LTP, lcov, lcov) AC_CHECK_PROG(LTP_GENHTML, genhtml, genhtml) diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h index 7bf9a9d220..2f9d8fe668 100644 --- a/ext/date/lib/timezonedb.h +++ b/ext/date/lib/timezonedb.h @@ -221,366 +221,366 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[579] = { { "Antarctica/Davis" , 0x0179E5 }, { "Antarctica/DumontDUrville" , 0x017A86 }, { "Antarctica/Macquarie" , 0x017B18 }, - { "Antarctica/Mawson" , 0x017D92 }, - { "Antarctica/McMurdo" , 0x017E0E }, - { "Antarctica/Palmer" , 0x018110 }, - { "Antarctica/Rothera" , 0x01842C }, - { "Antarctica/South_Pole" , 0x0184A2 }, - { "Antarctica/Syowa" , 0x0187AA }, - { "Antarctica/Vostok" , 0x018818 }, - { "Arctic/Longyearbyen" , 0x018889 }, - { "Asia/Aden" , 0x018BBB }, - { "Asia/Almaty" , 0x018C10 }, - { "Asia/Amman" , 0x018D8F }, - { "Asia/Anadyr" , 0x019045 }, - { "Asia/Aqtau" , 0x01922A }, - { "Asia/Aqtobe" , 0x019429 }, - { "Asia/Ashgabat" , 0x0195E1 }, - { "Asia/Ashkhabad" , 0x0196FE }, - { "Asia/Baghdad" , 0x01981B }, - { "Asia/Bahrain" , 0x019990 }, - { "Asia/Baku" , 0x0199F6 }, - { "Asia/Bangkok" , 0x019CDE }, - { "Asia/Beirut" , 0x019D33 }, - { "Asia/Bishkek" , 0x01A040 }, - { "Asia/Brunei" , 0x01A1EC }, - { "Asia/Calcutta" , 0x01A24E }, - { "Asia/Choibalsan" , 0x01A2C7 }, - { "Asia/Chongqing" , 0x01A440 }, - { "Asia/Chungking" , 0x01A52F }, - { "Asia/Colombo" , 0x01A5DE }, - { "Asia/Dacca" , 0x01A67A }, - { "Asia/Damascus" , 0x01A720 }, - { "Asia/Dhaka" , 0x01AA70 }, - { "Asia/Dili" , 0x01AB16 }, - { "Asia/Dubai" , 0x01AB9F }, - { "Asia/Dushanbe" , 0x01ABF4 }, - { "Asia/Gaza" , 0x01ACF7 }, - { "Asia/Harbin" , 0x01AF50 }, - { "Asia/Hebron" , 0x01B037 }, - { "Asia/Ho_Chi_Minh" , 0x01B299 }, - { "Asia/Hong_Kong" , 0x01B311 }, - { "Asia/Hovd" , 0x01B4D3 }, - { "Asia/Irkutsk" , 0x01B64B }, - { "Asia/Istanbul" , 0x01B831 }, - { "Asia/Jakarta" , 0x01BC1E }, - { "Asia/Jayapura" , 0x01BCC8 }, - { "Asia/Jerusalem" , 0x01BD64 }, - { "Asia/Kabul" , 0x01C093 }, - { "Asia/Kamchatka" , 0x01C0E4 }, - { "Asia/Karachi" , 0x01C2C0 }, - { "Asia/Kashgar" , 0x01C375 }, - { "Asia/Kathmandu" , 0x01C446 }, - { "Asia/Katmandu" , 0x01C4AC }, - { "Asia/Khandyga" , 0x01C512 }, - { "Asia/Kolkata" , 0x01C737 }, - { "Asia/Krasnoyarsk" , 0x01C7B0 }, - { "Asia/Kuala_Lumpur" , 0x01C998 }, - { "Asia/Kuching" , 0x01CA55 }, - { "Asia/Kuwait" , 0x01CB43 }, - { "Asia/Macao" , 0x01CB98 }, - { "Asia/Macau" , 0x01CCD3 }, - { "Asia/Magadan" , 0x01CE0E }, - { "Asia/Makassar" , 0x01CFF0 }, - { "Asia/Manila" , 0x01D0B4 }, - { "Asia/Muscat" , 0x01D139 }, - { "Asia/Nicosia" , 0x01D18E }, - { "Asia/Novokuznetsk" , 0x01D476 }, - { "Asia/Novosibirsk" , 0x01D678 }, - { "Asia/Omsk" , 0x01D863 }, - { "Asia/Oral" , 0x01DA4A }, - { "Asia/Phnom_Penh" , 0x01DC1A }, - { "Asia/Pontianak" , 0x01DC92 }, - { "Asia/Pyongyang" , 0x01DD53 }, - { "Asia/Qatar" , 0x01DDC0 }, - { "Asia/Qyzylorda" , 0x01DE26 }, - { "Asia/Rangoon" , 0x01DFFC }, - { "Asia/Riyadh" , 0x01E074 }, - { "Asia/Saigon" , 0x01E0C9 }, - { "Asia/Sakhalin" , 0x01E141 }, - { "Asia/Samarkand" , 0x01E338 }, - { "Asia/Seoul" , 0x01E46E }, - { "Asia/Shanghai" , 0x01E512 }, - { "Asia/Singapore" , 0x01E5F2 }, - { "Asia/Taipei" , 0x01E6A9 }, - { "Asia/Tashkent" , 0x01E7C1 }, - { "Asia/Tbilisi" , 0x01E8F2 }, - { "Asia/Tehran" , 0x01EAAC }, - { "Asia/Tel_Aviv" , 0x01ED1A }, - { "Asia/Thimbu" , 0x01F049 }, - { "Asia/Thimphu" , 0x01F0AF }, - { "Asia/Tokyo" , 0x01F115 }, - { "Asia/Ujung_Pandang" , 0x01F19E }, - { "Asia/Ulaanbaatar" , 0x01F21A }, - { "Asia/Ulan_Bator" , 0x01F375 }, - { "Asia/Urumqi" , 0x01F4C2 }, - { "Asia/Ust-Nera" , 0x01F589 }, - { "Asia/Vientiane" , 0x01F78E }, - { "Asia/Vladivostok" , 0x01F806 }, - { "Asia/Yakutsk" , 0x01F9F2 }, - { "Asia/Yekaterinburg" , 0x01FBD7 }, - { "Asia/Yerevan" , 0x01FDE2 }, - { "Atlantic/Azores" , 0x01FFE2 }, - { "Atlantic/Bermuda" , 0x0204E5 }, - { "Atlantic/Canary" , 0x0207C6 }, - { "Atlantic/Cape_Verde" , 0x020A9C }, - { "Atlantic/Faeroe" , 0x020B15 }, - { "Atlantic/Faroe" , 0x020DB9 }, - { "Atlantic/Jan_Mayen" , 0x02105D }, - { "Atlantic/Madeira" , 0x02138F }, - { "Atlantic/Reykjavik" , 0x021898 }, - { "Atlantic/South_Georgia" , 0x021A51 }, - { "Atlantic/St_Helena" , 0x021C63 }, - { "Atlantic/Stanley" , 0x021A95 }, - { "Australia/ACT" , 0x021CB8 }, - { "Australia/Adelaide" , 0x021FD5 }, - { "Australia/Brisbane" , 0x022301 }, - { "Australia/Broken_Hill" , 0x0223C8 }, - { "Australia/Canberra" , 0x022706 }, - { "Australia/Currie" , 0x022A23 }, - { "Australia/Darwin" , 0x022D56 }, - { "Australia/Eucla" , 0x022DDC }, - { "Australia/Hobart" , 0x022EB1 }, - { "Australia/LHI" , 0x02320F }, - { "Australia/Lindeman" , 0x0234AA }, - { "Australia/Lord_Howe" , 0x02358B }, - { "Australia/Melbourne" , 0x023836 }, - { "Australia/North" , 0x023B5B }, - { "Australia/NSW" , 0x023BCF }, - { "Australia/Perth" , 0x023EEC }, - { "Australia/Queensland" , 0x023FC4 }, - { "Australia/South" , 0x024070 }, - { "Australia/Sydney" , 0x02438D }, - { "Australia/Tasmania" , 0x0246CA }, - { "Australia/Victoria" , 0x024A0F }, - { "Australia/West" , 0x024D2C }, - { "Australia/Yancowinna" , 0x024DE2 }, - { "Brazil/Acre" , 0x025104 }, - { "Brazil/DeNoronha" , 0x025203 }, - { "Brazil/East" , 0x025323 }, - { "Brazil/West" , 0x025600 }, - { "Canada/Atlantic" , 0x0256F8 }, - { "Canada/Central" , 0x025BE0 }, - { "Canada/East-Saskatchewan" , 0x0264EA }, - { "Canada/Eastern" , 0x025FFA }, - { "Canada/Mountain" , 0x026673 }, - { "Canada/Newfoundland" , 0x0269E9 }, - { "Canada/Pacific" , 0x026F14 }, - { "Canada/Saskatchewan" , 0x02732D }, - { "Canada/Yukon" , 0x0274B6 }, - { "CET" , 0x0277B9 }, - { "Chile/Continental" , 0x027AC2 }, - { "Chile/EasterIsland" , 0x027E5D }, - { "CST6CDT" , 0x02819F }, - { "Cuba" , 0x0284F0 }, - { "EET" , 0x028863 }, - { "Egypt" , 0x028B16 }, - { "Eire" , 0x028DD9 }, - { "EST" , 0x0292EA }, - { "EST5EDT" , 0x02932E }, - { "Etc/GMT" , 0x02967F }, - { "Etc/GMT+0" , 0x02974B }, - { "Etc/GMT+1" , 0x0297D5 }, - { "Etc/GMT+10" , 0x029862 }, - { "Etc/GMT+11" , 0x0298F0 }, - { "Etc/GMT+12" , 0x02997E }, - { "Etc/GMT+2" , 0x029A99 }, - { "Etc/GMT+3" , 0x029B25 }, - { "Etc/GMT+4" , 0x029BB1 }, - { "Etc/GMT+5" , 0x029C3D }, - { "Etc/GMT+6" , 0x029CC9 }, - { "Etc/GMT+7" , 0x029D55 }, - { "Etc/GMT+8" , 0x029DE1 }, - { "Etc/GMT+9" , 0x029E6D }, - { "Etc/GMT-0" , 0x029707 }, - { "Etc/GMT-1" , 0x02978F }, - { "Etc/GMT-10" , 0x02981B }, - { "Etc/GMT-11" , 0x0298A9 }, - { "Etc/GMT-12" , 0x029937 }, - { "Etc/GMT-13" , 0x0299C5 }, - { "Etc/GMT-14" , 0x029A0C }, - { "Etc/GMT-2" , 0x029A53 }, - { "Etc/GMT-3" , 0x029ADF }, - { "Etc/GMT-4" , 0x029B6B }, - { "Etc/GMT-5" , 0x029BF7 }, - { "Etc/GMT-6" , 0x029C83 }, - { "Etc/GMT-7" , 0x029D0F }, - { "Etc/GMT-8" , 0x029D9B }, - { "Etc/GMT-9" , 0x029E27 }, - { "Etc/GMT0" , 0x0296C3 }, - { "Etc/Greenwich" , 0x029EB3 }, - { "Etc/UCT" , 0x029EF7 }, - { "Etc/Universal" , 0x029F3B }, - { "Etc/UTC" , 0x029F7F }, - { "Etc/Zulu" , 0x029FC3 }, - { "Europe/Amsterdam" , 0x02A007 }, - { "Europe/Andorra" , 0x02A445 }, - { "Europe/Athens" , 0x02A6C1 }, - { "Europe/Belfast" , 0x02AA04 }, - { "Europe/Belgrade" , 0x02AF3B }, - { "Europe/Berlin" , 0x02B204 }, - { "Europe/Bratislava" , 0x02B568 }, - { "Europe/Brussels" , 0x02B89A }, - { "Europe/Bucharest" , 0x02BCD1 }, - { "Europe/Budapest" , 0x02BFFB }, - { "Europe/Busingen" , 0x02C36E }, - { "Europe/Chisinau" , 0x02C625 }, - { "Europe/Copenhagen" , 0x02C9B3 }, - { "Europe/Dublin" , 0x02CCBD }, - { "Europe/Gibraltar" , 0x02D1CE }, - { "Europe/Guernsey" , 0x02D625 }, - { "Europe/Helsinki" , 0x02DB5C }, - { "Europe/Isle_of_Man" , 0x02DE12 }, - { "Europe/Istanbul" , 0x02E349 }, - { "Europe/Jersey" , 0x02E736 }, - { "Europe/Kaliningrad" , 0x02EC6D }, - { "Europe/Kiev" , 0x02EED3 }, - { "Europe/Lisbon" , 0x02F1EA }, - { "Europe/Ljubljana" , 0x02F6EE }, - { "Europe/London" , 0x02F9B7 }, - { "Europe/Luxembourg" , 0x02FEEE }, - { "Europe/Madrid" , 0x030344 }, - { "Europe/Malta" , 0x03070A }, - { "Europe/Mariehamn" , 0x030AC3 }, - { "Europe/Minsk" , 0x030D79 }, - { "Europe/Monaco" , 0x030F87 }, - { "Europe/Moscow" , 0x0313C2 }, - { "Europe/Nicosia" , 0x031613 }, - { "Europe/Oslo" , 0x0318FB }, - { "Europe/Paris" , 0x031C2D }, - { "Europe/Podgorica" , 0x032073 }, - { "Europe/Prague" , 0x03233C }, - { "Europe/Riga" , 0x03266E }, - { "Europe/Rome" , 0x0329B3 }, - { "Europe/Samara" , 0x032D76 }, - { "Europe/San_Marino" , 0x032FA9 }, - { "Europe/Sarajevo" , 0x03336C }, - { "Europe/Simferopol" , 0x033635 }, - { "Europe/Skopje" , 0x033960 }, - { "Europe/Sofia" , 0x033C29 }, - { "Europe/Stockholm" , 0x033F31 }, - { "Europe/Tallinn" , 0x0341E0 }, - { "Europe/Tirane" , 0x03451A }, - { "Europe/Tiraspol" , 0x034820 }, - { "Europe/Uzhgorod" , 0x034BAE }, - { "Europe/Vaduz" , 0x034EC5 }, - { "Europe/Vatican" , 0x035158 }, - { "Europe/Vienna" , 0x03551B }, - { "Europe/Vilnius" , 0x035848 }, - { "Europe/Volgograd" , 0x035B87 }, - { "Europe/Warsaw" , 0x035D87 }, - { "Europe/Zagreb" , 0x036168 }, - { "Europe/Zaporozhye" , 0x036431 }, - { "Europe/Zurich" , 0x036772 }, - { "Factory" , 0x036A21 }, - { "GB" , 0x036A92 }, - { "GB-Eire" , 0x036FC9 }, - { "GMT" , 0x037500 }, - { "GMT+0" , 0x0375CC }, - { "GMT-0" , 0x037588 }, - { "GMT0" , 0x037544 }, - { "Greenwich" , 0x037610 }, - { "Hongkong" , 0x037654 }, - { "HST" , 0x037816 }, - { "Iceland" , 0x03785A }, - { "Indian/Antananarivo" , 0x037A13 }, - { "Indian/Chagos" , 0x037A87 }, - { "Indian/Christmas" , 0x037AE9 }, - { "Indian/Cocos" , 0x037B2D }, - { "Indian/Comoro" , 0x037B71 }, - { "Indian/Kerguelen" , 0x037BC6 }, - { "Indian/Mahe" , 0x037C1B }, - { "Indian/Maldives" , 0x037C70 }, - { "Indian/Mauritius" , 0x037CC5 }, - { "Indian/Mayotte" , 0x037D3B }, - { "Indian/Reunion" , 0x037D90 }, - { "Iran" , 0x037DE5 }, - { "Israel" , 0x038053 }, - { "Jamaica" , 0x038382 }, - { "Japan" , 0x038447 }, - { "Kwajalein" , 0x0384D0 }, - { "Libya" , 0x038533 }, - { "MET" , 0x03872C }, - { "Mexico/BajaNorte" , 0x038A35 }, - { "Mexico/BajaSur" , 0x038D9E }, - { "Mexico/General" , 0x038FE3 }, - { "MST" , 0x039241 }, - { "MST7MDT" , 0x039285 }, - { "Navajo" , 0x0395D6 }, - { "NZ" , 0x03994F }, - { "NZ-CHAT" , 0x039CCD }, - { "Pacific/Apia" , 0x039FB5 }, - { "Pacific/Auckland" , 0x03A151 }, - { "Pacific/Chatham" , 0x03A4DD }, - { "Pacific/Chuuk" , 0x03A7D4 }, - { "Pacific/Easter" , 0x03A82D }, - { "Pacific/Efate" , 0x03AB8B }, - { "Pacific/Enderbury" , 0x03AC51 }, - { "Pacific/Fakaofo" , 0x03ACBF }, - { "Pacific/Fiji" , 0x03AD10 }, - { "Pacific/Funafuti" , 0x03AEA3 }, - { "Pacific/Galapagos" , 0x03AEE7 }, - { "Pacific/Gambier" , 0x03AF5F }, - { "Pacific/Guadalcanal" , 0x03AFC4 }, - { "Pacific/Guam" , 0x03B019 }, - { "Pacific/Honolulu" , 0x03B06F }, - { "Pacific/Johnston" , 0x03B0E6 }, - { "Pacific/Kiritimati" , 0x03B138 }, - { "Pacific/Kosrae" , 0x03B1A3 }, - { "Pacific/Kwajalein" , 0x03B200 }, - { "Pacific/Majuro" , 0x03B26C }, - { "Pacific/Marquesas" , 0x03B2CB }, - { "Pacific/Midway" , 0x03B332 }, - { "Pacific/Nauru" , 0x03B3BC }, - { "Pacific/Niue" , 0x03B434 }, - { "Pacific/Norfolk" , 0x03B492 }, - { "Pacific/Noumea" , 0x03B4E7 }, - { "Pacific/Pago_Pago" , 0x03B577 }, - { "Pacific/Palau" , 0x03B600 }, - { "Pacific/Pitcairn" , 0x03B644 }, - { "Pacific/Pohnpei" , 0x03B699 }, - { "Pacific/Ponape" , 0x03B6EE }, - { "Pacific/Port_Moresby" , 0x03B733 }, - { "Pacific/Rarotonga" , 0x03B777 }, - { "Pacific/Saipan" , 0x03B853 }, - { "Pacific/Samoa" , 0x03B8B6 }, - { "Pacific/Tahiti" , 0x03B93F }, - { "Pacific/Tarawa" , 0x03B9A4 }, - { "Pacific/Tongatapu" , 0x03B9F8 }, - { "Pacific/Truk" , 0x03BA84 }, - { "Pacific/Wake" , 0x03BAC9 }, - { "Pacific/Wallis" , 0x03BB19 }, - { "Pacific/Yap" , 0x03BB5D }, - { "Poland" , 0x03BBA2 }, - { "Portugal" , 0x03BF83 }, - { "PRC" , 0x03C47F }, - { "PST8PDT" , 0x03C530 }, - { "ROC" , 0x03C881 }, - { "ROK" , 0x03C999 }, - { "Singapore" , 0x03CA3D }, - { "Turkey" , 0x03CAF4 }, - { "UCT" , 0x03CEE1 }, - { "Universal" , 0x03CF25 }, - { "US/Alaska" , 0x03CF69 }, - { "US/Aleutian" , 0x03D2D2 }, - { "US/Arizona" , 0x03D638 }, - { "US/Central" , 0x03D6C6 }, - { "US/East-Indiana" , 0x03E0D0 }, - { "US/Eastern" , 0x03DBD1 }, - { "US/Hawaii" , 0x03E33A }, - { "US/Indiana-Starke" , 0x03E3AB }, - { "US/Michigan" , 0x03E71C }, - { "US/Mountain" , 0x03EA53 }, - { "US/Pacific" , 0x03EDCC }, - { "US/Pacific-New" , 0x03F1D1 }, - { "US/Samoa" , 0x03F5D6 }, - { "UTC" , 0x03F65F }, - { "W-SU" , 0x03F956 }, - { "WET" , 0x03F6A3 }, - { "Zulu" , 0x03FB90 }, + { "Antarctica/Mawson" , 0x017D5F }, + { "Antarctica/McMurdo" , 0x017DDB }, + { "Antarctica/Palmer" , 0x0180DD }, + { "Antarctica/Rothera" , 0x0183F9 }, + { "Antarctica/South_Pole" , 0x01846F }, + { "Antarctica/Syowa" , 0x018777 }, + { "Antarctica/Vostok" , 0x0187E5 }, + { "Arctic/Longyearbyen" , 0x018856 }, + { "Asia/Aden" , 0x018B88 }, + { "Asia/Almaty" , 0x018BDD }, + { "Asia/Amman" , 0x018D5C }, + { "Asia/Anadyr" , 0x019012 }, + { "Asia/Aqtau" , 0x0191F7 }, + { "Asia/Aqtobe" , 0x0193F6 }, + { "Asia/Ashgabat" , 0x0195AE }, + { "Asia/Ashkhabad" , 0x0196CB }, + { "Asia/Baghdad" , 0x0197E8 }, + { "Asia/Bahrain" , 0x01995D }, + { "Asia/Baku" , 0x0199C3 }, + { "Asia/Bangkok" , 0x019CAB }, + { "Asia/Beirut" , 0x019D00 }, + { "Asia/Bishkek" , 0x01A00D }, + { "Asia/Brunei" , 0x01A1B9 }, + { "Asia/Calcutta" , 0x01A21B }, + { "Asia/Choibalsan" , 0x01A294 }, + { "Asia/Chongqing" , 0x01A40D }, + { "Asia/Chungking" , 0x01A4FC }, + { "Asia/Colombo" , 0x01A5AB }, + { "Asia/Dacca" , 0x01A647 }, + { "Asia/Damascus" , 0x01A6ED }, + { "Asia/Dhaka" , 0x01AA3D }, + { "Asia/Dili" , 0x01AAE3 }, + { "Asia/Dubai" , 0x01AB6C }, + { "Asia/Dushanbe" , 0x01ABC1 }, + { "Asia/Gaza" , 0x01ACC4 }, + { "Asia/Harbin" , 0x01B017 }, + { "Asia/Hebron" , 0x01B0FE }, + { "Asia/Ho_Chi_Minh" , 0x01B45A }, + { "Asia/Hong_Kong" , 0x01B4D2 }, + { "Asia/Hovd" , 0x01B694 }, + { "Asia/Irkutsk" , 0x01B80C }, + { "Asia/Istanbul" , 0x01B9F2 }, + { "Asia/Jakarta" , 0x01BDDF }, + { "Asia/Jayapura" , 0x01BE89 }, + { "Asia/Jerusalem" , 0x01BF25 }, + { "Asia/Kabul" , 0x01C254 }, + { "Asia/Kamchatka" , 0x01C2A5 }, + { "Asia/Karachi" , 0x01C481 }, + { "Asia/Kashgar" , 0x01C536 }, + { "Asia/Kathmandu" , 0x01C607 }, + { "Asia/Katmandu" , 0x01C66D }, + { "Asia/Khandyga" , 0x01C6D3 }, + { "Asia/Kolkata" , 0x01C8F8 }, + { "Asia/Krasnoyarsk" , 0x01C971 }, + { "Asia/Kuala_Lumpur" , 0x01CB59 }, + { "Asia/Kuching" , 0x01CC16 }, + { "Asia/Kuwait" , 0x01CD04 }, + { "Asia/Macao" , 0x01CD59 }, + { "Asia/Macau" , 0x01CE94 }, + { "Asia/Magadan" , 0x01CFCF }, + { "Asia/Makassar" , 0x01D1B1 }, + { "Asia/Manila" , 0x01D275 }, + { "Asia/Muscat" , 0x01D2FA }, + { "Asia/Nicosia" , 0x01D34F }, + { "Asia/Novokuznetsk" , 0x01D637 }, + { "Asia/Novosibirsk" , 0x01D839 }, + { "Asia/Omsk" , 0x01DA24 }, + { "Asia/Oral" , 0x01DC0B }, + { "Asia/Phnom_Penh" , 0x01DDDB }, + { "Asia/Pontianak" , 0x01DE53 }, + { "Asia/Pyongyang" , 0x01DF14 }, + { "Asia/Qatar" , 0x01DF81 }, + { "Asia/Qyzylorda" , 0x01DFE7 }, + { "Asia/Rangoon" , 0x01E1BD }, + { "Asia/Riyadh" , 0x01E235 }, + { "Asia/Saigon" , 0x01E28A }, + { "Asia/Sakhalin" , 0x01E302 }, + { "Asia/Samarkand" , 0x01E4F9 }, + { "Asia/Seoul" , 0x01E62F }, + { "Asia/Shanghai" , 0x01E6D3 }, + { "Asia/Singapore" , 0x01E7B3 }, + { "Asia/Taipei" , 0x01E86A }, + { "Asia/Tashkent" , 0x01E982 }, + { "Asia/Tbilisi" , 0x01EAB3 }, + { "Asia/Tehran" , 0x01EC6D }, + { "Asia/Tel_Aviv" , 0x01EEDB }, + { "Asia/Thimbu" , 0x01F20A }, + { "Asia/Thimphu" , 0x01F270 }, + { "Asia/Tokyo" , 0x01F2D6 }, + { "Asia/Ujung_Pandang" , 0x01F35F }, + { "Asia/Ulaanbaatar" , 0x01F3DB }, + { "Asia/Ulan_Bator" , 0x01F536 }, + { "Asia/Urumqi" , 0x01F683 }, + { "Asia/Ust-Nera" , 0x01F74A }, + { "Asia/Vientiane" , 0x01F94F }, + { "Asia/Vladivostok" , 0x01F9C7 }, + { "Asia/Yakutsk" , 0x01FBB3 }, + { "Asia/Yekaterinburg" , 0x01FD98 }, + { "Asia/Yerevan" , 0x01FFA3 }, + { "Atlantic/Azores" , 0x0201A3 }, + { "Atlantic/Bermuda" , 0x0206A6 }, + { "Atlantic/Canary" , 0x020987 }, + { "Atlantic/Cape_Verde" , 0x020C5D }, + { "Atlantic/Faeroe" , 0x020CD6 }, + { "Atlantic/Faroe" , 0x020F7A }, + { "Atlantic/Jan_Mayen" , 0x02121E }, + { "Atlantic/Madeira" , 0x021550 }, + { "Atlantic/Reykjavik" , 0x021A59 }, + { "Atlantic/South_Georgia" , 0x021C12 }, + { "Atlantic/St_Helena" , 0x021E24 }, + { "Atlantic/Stanley" , 0x021C56 }, + { "Australia/ACT" , 0x021E79 }, + { "Australia/Adelaide" , 0x022196 }, + { "Australia/Brisbane" , 0x0224C2 }, + { "Australia/Broken_Hill" , 0x022589 }, + { "Australia/Canberra" , 0x0228C7 }, + { "Australia/Currie" , 0x022BE4 }, + { "Australia/Darwin" , 0x022F17 }, + { "Australia/Eucla" , 0x022F9D }, + { "Australia/Hobart" , 0x023072 }, + { "Australia/LHI" , 0x0233D0 }, + { "Australia/Lindeman" , 0x02366B }, + { "Australia/Lord_Howe" , 0x02374C }, + { "Australia/Melbourne" , 0x0239F7 }, + { "Australia/North" , 0x023D1C }, + { "Australia/NSW" , 0x023D90 }, + { "Australia/Perth" , 0x0240AD }, + { "Australia/Queensland" , 0x024185 }, + { "Australia/South" , 0x024231 }, + { "Australia/Sydney" , 0x02454E }, + { "Australia/Tasmania" , 0x02488B }, + { "Australia/Victoria" , 0x024BD0 }, + { "Australia/West" , 0x024EED }, + { "Australia/Yancowinna" , 0x024FA3 }, + { "Brazil/Acre" , 0x0252C5 }, + { "Brazil/DeNoronha" , 0x0253C4 }, + { "Brazil/East" , 0x0254E4 }, + { "Brazil/West" , 0x0257C1 }, + { "Canada/Atlantic" , 0x0258B9 }, + { "Canada/Central" , 0x025DA1 }, + { "Canada/East-Saskatchewan" , 0x0266AB }, + { "Canada/Eastern" , 0x0261BB }, + { "Canada/Mountain" , 0x026834 }, + { "Canada/Newfoundland" , 0x026BAA }, + { "Canada/Pacific" , 0x0270D5 }, + { "Canada/Saskatchewan" , 0x0274EE }, + { "Canada/Yukon" , 0x027677 }, + { "CET" , 0x02797A }, + { "Chile/Continental" , 0x027C83 }, + { "Chile/EasterIsland" , 0x02801E }, + { "CST6CDT" , 0x028360 }, + { "Cuba" , 0x0286B1 }, + { "EET" , 0x028A24 }, + { "Egypt" , 0x028CD7 }, + { "Eire" , 0x028F9A }, + { "EST" , 0x0294AB }, + { "EST5EDT" , 0x0294EF }, + { "Etc/GMT" , 0x029840 }, + { "Etc/GMT+0" , 0x02990C }, + { "Etc/GMT+1" , 0x029996 }, + { "Etc/GMT+10" , 0x029A23 }, + { "Etc/GMT+11" , 0x029AB1 }, + { "Etc/GMT+12" , 0x029B3F }, + { "Etc/GMT+2" , 0x029C5A }, + { "Etc/GMT+3" , 0x029CE6 }, + { "Etc/GMT+4" , 0x029D72 }, + { "Etc/GMT+5" , 0x029DFE }, + { "Etc/GMT+6" , 0x029E8A }, + { "Etc/GMT+7" , 0x029F16 }, + { "Etc/GMT+8" , 0x029FA2 }, + { "Etc/GMT+9" , 0x02A02E }, + { "Etc/GMT-0" , 0x0298C8 }, + { "Etc/GMT-1" , 0x029950 }, + { "Etc/GMT-10" , 0x0299DC }, + { "Etc/GMT-11" , 0x029A6A }, + { "Etc/GMT-12" , 0x029AF8 }, + { "Etc/GMT-13" , 0x029B86 }, + { "Etc/GMT-14" , 0x029BCD }, + { "Etc/GMT-2" , 0x029C14 }, + { "Etc/GMT-3" , 0x029CA0 }, + { "Etc/GMT-4" , 0x029D2C }, + { "Etc/GMT-5" , 0x029DB8 }, + { "Etc/GMT-6" , 0x029E44 }, + { "Etc/GMT-7" , 0x029ED0 }, + { "Etc/GMT-8" , 0x029F5C }, + { "Etc/GMT-9" , 0x029FE8 }, + { "Etc/GMT0" , 0x029884 }, + { "Etc/Greenwich" , 0x02A074 }, + { "Etc/UCT" , 0x02A0B8 }, + { "Etc/Universal" , 0x02A0FC }, + { "Etc/UTC" , 0x02A140 }, + { "Etc/Zulu" , 0x02A184 }, + { "Europe/Amsterdam" , 0x02A1C8 }, + { "Europe/Andorra" , 0x02A606 }, + { "Europe/Athens" , 0x02A882 }, + { "Europe/Belfast" , 0x02ABC5 }, + { "Europe/Belgrade" , 0x02B0FC }, + { "Europe/Berlin" , 0x02B3C5 }, + { "Europe/Bratislava" , 0x02B729 }, + { "Europe/Brussels" , 0x02BA5B }, + { "Europe/Bucharest" , 0x02BE92 }, + { "Europe/Budapest" , 0x02C1BC }, + { "Europe/Busingen" , 0x02C52F }, + { "Europe/Chisinau" , 0x02C7E6 }, + { "Europe/Copenhagen" , 0x02CB74 }, + { "Europe/Dublin" , 0x02CE7E }, + { "Europe/Gibraltar" , 0x02D38F }, + { "Europe/Guernsey" , 0x02D7E6 }, + { "Europe/Helsinki" , 0x02DD1D }, + { "Europe/Isle_of_Man" , 0x02DFD3 }, + { "Europe/Istanbul" , 0x02E50A }, + { "Europe/Jersey" , 0x02E8F7 }, + { "Europe/Kaliningrad" , 0x02EE2E }, + { "Europe/Kiev" , 0x02F094 }, + { "Europe/Lisbon" , 0x02F3AB }, + { "Europe/Ljubljana" , 0x02F8AF }, + { "Europe/London" , 0x02FB78 }, + { "Europe/Luxembourg" , 0x0300AF }, + { "Europe/Madrid" , 0x030505 }, + { "Europe/Malta" , 0x0308CB }, + { "Europe/Mariehamn" , 0x030C84 }, + { "Europe/Minsk" , 0x030F3A }, + { "Europe/Monaco" , 0x031148 }, + { "Europe/Moscow" , 0x031583 }, + { "Europe/Nicosia" , 0x0317D4 }, + { "Europe/Oslo" , 0x031ABC }, + { "Europe/Paris" , 0x031DEE }, + { "Europe/Podgorica" , 0x032234 }, + { "Europe/Prague" , 0x0324FD }, + { "Europe/Riga" , 0x03282F }, + { "Europe/Rome" , 0x032B74 }, + { "Europe/Samara" , 0x032F37 }, + { "Europe/San_Marino" , 0x03316A }, + { "Europe/Sarajevo" , 0x03352D }, + { "Europe/Simferopol" , 0x0337F6 }, + { "Europe/Skopje" , 0x033B21 }, + { "Europe/Sofia" , 0x033DEA }, + { "Europe/Stockholm" , 0x0340F2 }, + { "Europe/Tallinn" , 0x0343A1 }, + { "Europe/Tirane" , 0x0346DB }, + { "Europe/Tiraspol" , 0x0349E1 }, + { "Europe/Uzhgorod" , 0x034D6F }, + { "Europe/Vaduz" , 0x035086 }, + { "Europe/Vatican" , 0x035319 }, + { "Europe/Vienna" , 0x0356DC }, + { "Europe/Vilnius" , 0x035A09 }, + { "Europe/Volgograd" , 0x035D48 }, + { "Europe/Warsaw" , 0x035F48 }, + { "Europe/Zagreb" , 0x036329 }, + { "Europe/Zaporozhye" , 0x0365F2 }, + { "Europe/Zurich" , 0x036933 }, + { "Factory" , 0x036BE2 }, + { "GB" , 0x036C53 }, + { "GB-Eire" , 0x03718A }, + { "GMT" , 0x0376C1 }, + { "GMT+0" , 0x03778D }, + { "GMT-0" , 0x037749 }, + { "GMT0" , 0x037705 }, + { "Greenwich" , 0x0377D1 }, + { "Hongkong" , 0x037815 }, + { "HST" , 0x0379D7 }, + { "Iceland" , 0x037A1B }, + { "Indian/Antananarivo" , 0x037BD4 }, + { "Indian/Chagos" , 0x037C48 }, + { "Indian/Christmas" , 0x037CAA }, + { "Indian/Cocos" , 0x037CEE }, + { "Indian/Comoro" , 0x037D32 }, + { "Indian/Kerguelen" , 0x037D87 }, + { "Indian/Mahe" , 0x037DDC }, + { "Indian/Maldives" , 0x037E31 }, + { "Indian/Mauritius" , 0x037E86 }, + { "Indian/Mayotte" , 0x037EFC }, + { "Indian/Reunion" , 0x037F51 }, + { "Iran" , 0x037FA6 }, + { "Israel" , 0x038214 }, + { "Jamaica" , 0x038543 }, + { "Japan" , 0x038608 }, + { "Kwajalein" , 0x038691 }, + { "Libya" , 0x0386F4 }, + { "MET" , 0x0388ED }, + { "Mexico/BajaNorte" , 0x038BF6 }, + { "Mexico/BajaSur" , 0x038F5F }, + { "Mexico/General" , 0x0391A4 }, + { "MST" , 0x039402 }, + { "MST7MDT" , 0x039446 }, + { "Navajo" , 0x039797 }, + { "NZ" , 0x039B10 }, + { "NZ-CHAT" , 0x039E8E }, + { "Pacific/Apia" , 0x03A176 }, + { "Pacific/Auckland" , 0x03A312 }, + { "Pacific/Chatham" , 0x03A69E }, + { "Pacific/Chuuk" , 0x03A995 }, + { "Pacific/Easter" , 0x03A9EE }, + { "Pacific/Efate" , 0x03AD4C }, + { "Pacific/Enderbury" , 0x03AE12 }, + { "Pacific/Fakaofo" , 0x03AE80 }, + { "Pacific/Fiji" , 0x03AED1 }, + { "Pacific/Funafuti" , 0x03B064 }, + { "Pacific/Galapagos" , 0x03B0A8 }, + { "Pacific/Gambier" , 0x03B120 }, + { "Pacific/Guadalcanal" , 0x03B185 }, + { "Pacific/Guam" , 0x03B1DA }, + { "Pacific/Honolulu" , 0x03B230 }, + { "Pacific/Johnston" , 0x03B2A7 }, + { "Pacific/Kiritimati" , 0x03B2F9 }, + { "Pacific/Kosrae" , 0x03B364 }, + { "Pacific/Kwajalein" , 0x03B3C1 }, + { "Pacific/Majuro" , 0x03B42D }, + { "Pacific/Marquesas" , 0x03B48C }, + { "Pacific/Midway" , 0x03B4F3 }, + { "Pacific/Nauru" , 0x03B57D }, + { "Pacific/Niue" , 0x03B5F5 }, + { "Pacific/Norfolk" , 0x03B653 }, + { "Pacific/Noumea" , 0x03B6A8 }, + { "Pacific/Pago_Pago" , 0x03B738 }, + { "Pacific/Palau" , 0x03B7C1 }, + { "Pacific/Pitcairn" , 0x03B805 }, + { "Pacific/Pohnpei" , 0x03B85A }, + { "Pacific/Ponape" , 0x03B8AF }, + { "Pacific/Port_Moresby" , 0x03B8F4 }, + { "Pacific/Rarotonga" , 0x03B938 }, + { "Pacific/Saipan" , 0x03BA14 }, + { "Pacific/Samoa" , 0x03BA77 }, + { "Pacific/Tahiti" , 0x03BB00 }, + { "Pacific/Tarawa" , 0x03BB65 }, + { "Pacific/Tongatapu" , 0x03BBB9 }, + { "Pacific/Truk" , 0x03BC45 }, + { "Pacific/Wake" , 0x03BC8A }, + { "Pacific/Wallis" , 0x03BCDA }, + { "Pacific/Yap" , 0x03BD1E }, + { "Poland" , 0x03BD63 }, + { "Portugal" , 0x03C144 }, + { "PRC" , 0x03C640 }, + { "PST8PDT" , 0x03C6F1 }, + { "ROC" , 0x03CA42 }, + { "ROK" , 0x03CB5A }, + { "Singapore" , 0x03CBFE }, + { "Turkey" , 0x03CCB5 }, + { "UCT" , 0x03D0A2 }, + { "Universal" , 0x03D0E6 }, + { "US/Alaska" , 0x03D12A }, + { "US/Aleutian" , 0x03D493 }, + { "US/Arizona" , 0x03D7F9 }, + { "US/Central" , 0x03D887 }, + { "US/East-Indiana" , 0x03E291 }, + { "US/Eastern" , 0x03DD92 }, + { "US/Hawaii" , 0x03E4FB }, + { "US/Indiana-Starke" , 0x03E56C }, + { "US/Michigan" , 0x03E8DD }, + { "US/Mountain" , 0x03EC14 }, + { "US/Pacific" , 0x03EF8D }, + { "US/Pacific-New" , 0x03F392 }, + { "US/Samoa" , 0x03F797 }, + { "UTC" , 0x03F820 }, + { "W-SU" , 0x03FB17 }, + { "WET" , 0x03F864 }, + { "Zulu" , 0x03FD51 }, }; /* This is a generated file, do not modify */ -const unsigned char timelib_timezone_db_data_builtin[261076] = { +const unsigned char timelib_timezone_db_data_builtin[261525] = { /* Africa/Abidjan */ @@ -1868,19 +1868,19 @@ const unsigned char timelib_timezone_db_data_builtin[261076] = { 0x45, 0x31, 0xB2, 0x40, 0x45, 0xF3, 0x70, 0xB0, 0x47, 0x1A, 0xCE, 0xC0, 0x47, 0xD3, 0x52, 0xB0, 0x48, 0xFA, 0xB0, 0xC0, 0x49, 0xB3, 0x34, 0xB0, 0x4A, 0xDA, 0x92, 0xC0, 0x4B, 0xC1, 0x3B, 0x30, 0x4C, 0xA7, 0xFF, 0xC0, 0x4D, 0xA1, 0x1D, 0x30, 0x4E, 0x87, 0xE1, 0xC0, 0x4F, 0x80, 0xFF, 0x30, -0x50, 0x70, 0xFE, 0x40, 0x51, 0x4E, 0x6C, 0x30, 0x52, 0x50, 0xE0, 0x40, 0x53, 0x49, 0xFD, 0xB0, -0x54, 0x30, 0xC2, 0x40, 0x55, 0x29, 0xDF, 0xB0, 0x56, 0x10, 0xA4, 0x40, 0x57, 0x09, 0xC1, 0xB0, -0x57, 0xF0, 0x86, 0x40, 0x58, 0xE9, 0xA3, 0xB0, 0x59, 0xD0, 0x68, 0x40, 0x5A, 0xC9, 0x85, 0xB0, -0x5B, 0xB9, 0x84, 0xC0, 0x5C, 0xB2, 0xA2, 0x30, 0x5D, 0x99, 0x66, 0xC0, 0x5E, 0x92, 0x84, 0x30, -0x5F, 0x79, 0x48, 0xC0, 0x60, 0x72, 0x66, 0x30, 0x61, 0x59, 0x2A, 0xC0, 0x62, 0x52, 0x48, 0x30, -0x63, 0x39, 0x0C, 0xC0, 0x64, 0x32, 0x2A, 0x30, 0x65, 0x18, 0xEE, 0xC0, 0x66, 0x1B, 0x46, 0xB0, -0x67, 0x02, 0x0B, 0x40, 0x67, 0xFB, 0x28, 0xB0, 0x68, 0xE1, 0xED, 0x40, 0x69, 0xDB, 0x0A, 0xB0, -0x6A, 0xC1, 0xCF, 0x40, 0x6B, 0xBA, 0xEC, 0xB0, 0x6C, 0xA1, 0xB1, 0x40, 0x6D, 0x9A, 0xCE, 0xB0, -0x6E, 0x81, 0x93, 0x40, 0x6F, 0x7A, 0xB0, 0xB0, 0x70, 0x6A, 0xAF, 0xC0, 0x71, 0x63, 0xCD, 0x30, -0x72, 0x4A, 0x91, 0xC0, 0x73, 0x43, 0xAF, 0x30, 0x74, 0x2A, 0x73, 0xC0, 0x75, 0x23, 0x91, 0x30, -0x76, 0x0A, 0x55, 0xC0, 0x77, 0x03, 0x73, 0x30, 0x77, 0xEA, 0x37, 0xC0, 0x78, 0xE3, 0x55, 0x30, -0x79, 0xCA, 0x19, 0xC0, 0x7A, 0xC3, 0x37, 0x30, 0x7B, 0xB3, 0x36, 0x40, 0x7C, 0xAC, 0x53, 0xB0, -0x7D, 0x93, 0x18, 0x40, 0x7E, 0x8C, 0x35, 0xB0, 0x7F, 0x72, 0xFA, 0x40, 0x01, 0x02, 0x01, 0x03, +0x50, 0x70, 0xFE, 0x40, 0x51, 0x4E, 0x6C, 0x30, 0x52, 0x50, 0xE0, 0x40, 0x53, 0x2E, 0x4E, 0x30, +0x54, 0x30, 0xC2, 0x40, 0x55, 0x0E, 0x30, 0x30, 0x56, 0x10, 0xA4, 0x40, 0x56, 0xF7, 0x4C, 0xB0, +0x57, 0xF0, 0x86, 0x40, 0x58, 0xD7, 0x2E, 0xB0, 0x59, 0xD0, 0x68, 0x40, 0x5A, 0xB7, 0x10, 0xB0, +0x5B, 0xB9, 0x84, 0xC0, 0x5C, 0x96, 0xF2, 0xB0, 0x5D, 0x99, 0x66, 0xC0, 0x5E, 0x76, 0xD4, 0xB0, +0x5F, 0x79, 0x48, 0xC0, 0x60, 0x5F, 0xF1, 0x30, 0x61, 0x59, 0x2A, 0xC0, 0x62, 0x3F, 0xD3, 0x30, +0x63, 0x39, 0x0C, 0xC0, 0x64, 0x1F, 0xB5, 0x30, 0x65, 0x18, 0xEE, 0xC0, 0x65, 0xFF, 0x97, 0x30, +0x67, 0x02, 0x0B, 0x40, 0x67, 0xDF, 0x79, 0x30, 0x68, 0xE1, 0xED, 0x40, 0x69, 0xBF, 0x5B, 0x30, +0x6A, 0xC1, 0xCF, 0x40, 0x6B, 0xA8, 0x77, 0xB0, 0x6C, 0xA1, 0xB1, 0x40, 0x6D, 0x88, 0x59, 0xB0, +0x6E, 0x81, 0x93, 0x40, 0x6F, 0x68, 0x3B, 0xB0, 0x70, 0x6A, 0xAF, 0xC0, 0x71, 0x48, 0x1D, 0xB0, +0x72, 0x4A, 0x91, 0xC0, 0x73, 0x27, 0xFF, 0xB0, 0x74, 0x2A, 0x73, 0xC0, 0x75, 0x11, 0x1C, 0x30, +0x76, 0x0A, 0x55, 0xC0, 0x76, 0xF0, 0xFE, 0x30, 0x77, 0xEA, 0x37, 0xC0, 0x78, 0xD0, 0xE0, 0x30, +0x79, 0xCA, 0x19, 0xC0, 0x7A, 0xB0, 0xC2, 0x30, 0x7B, 0xB3, 0x36, 0x40, 0x7C, 0x90, 0xA4, 0x30, +0x7D, 0x93, 0x18, 0x40, 0x7E, 0x70, 0x86, 0x30, 0x7F, 0x72, 0xFA, 0x40, 0x01, 0x02, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, @@ -7214,46 +7214,43 @@ const unsigned char timelib_timezone_db_data_builtin[261076] = { 0x69, 0x65, /* Antarctica/Macquarie */ -0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0D, 0x91, 0x05, 0x5B, 0x00, -0x9B, 0xD5, 0x78, 0x80, 0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, -0xCC, 0xB7, 0x56, 0x80, 0xCD, 0xA7, 0x39, 0x70, 0xCE, 0xA0, 0x73, 0x00, 0xCF, 0x87, 0x1B, 0x70, -0xFB, 0xC2, 0x8D, 0x00, 0xFC, 0xB2, 0x7E, 0x00, 0xFD, 0xC7, 0x59, 0x00, 0xFE, 0x76, 0xB0, 0x80, -0xFF, 0xA7, 0x3B, 0x00, 0x00, 0x56, 0x92, 0x80, 0x01, 0x87, 0x1D, 0x00, 0x02, 0x3F, 0xAF, 0x00, -0x03, 0x70, 0x39, 0x80, 0x04, 0x0D, 0x1C, 0x00, 0x05, 0x50, 0x1B, 0x80, 0x05, 0xF6, 0x38, 0x80, -0x07, 0x2F, 0xFD, 0x80, 0x07, 0xD6, 0x1A, 0x80, 0x09, 0x0F, 0xDF, 0x80, 0x09, 0xB5, 0xFC, 0x80, -0x0A, 0xEF, 0xC1, 0x80, 0x0B, 0x9F, 0x19, 0x00, 0x0C, 0xD8, 0xDE, 0x00, 0x0D, 0x7E, 0xFB, 0x00, -0x0E, 0xB8, 0xC0, 0x00, 0x0F, 0x5E, 0xDD, 0x00, 0x10, 0x98, 0xA2, 0x00, 0x11, 0x3E, 0xBF, 0x00, -0x12, 0x78, 0x84, 0x00, 0x13, 0x1E, 0xA1, 0x00, 0x14, 0x58, 0x66, 0x00, 0x14, 0xFE, 0x83, 0x00, -0x16, 0x38, 0x48, 0x00, 0x17, 0x03, 0x4F, 0x00, 0x18, 0x21, 0x64, 0x80, 0x18, 0xE3, 0x31, 0x00, -0x1A, 0x01, 0x46, 0x80, 0x1A, 0xA7, 0x63, 0x80, 0x1B, 0xE1, 0x28, 0x80, 0x1C, 0x87, 0x45, 0x80, -0x1D, 0xC1, 0x0A, 0x80, 0x1E, 0x67, 0x27, 0x80, 0x1F, 0x97, 0xB2, 0x00, 0x20, 0x59, 0x7E, 0x80, -0x21, 0x80, 0xCE, 0x80, 0x22, 0x42, 0x9B, 0x00, 0x23, 0x69, 0xEB, 0x00, 0x24, 0x22, 0x7D, 0x00, -0x25, 0x49, 0xCD, 0x00, 0x26, 0x02, 0x5F, 0x00, 0x27, 0x29, 0xAF, 0x00, 0x27, 0xF4, 0xB6, 0x00, -0x28, 0xED, 0xE1, 0x80, 0x29, 0xD4, 0x98, 0x00, 0x2A, 0xCD, 0xC3, 0x80, 0x2B, 0xB4, 0x7A, 0x00, -0x2C, 0xAD, 0xA5, 0x80, 0x2D, 0x94, 0x5C, 0x00, 0x2E, 0x8D, 0x87, 0x80, 0x2F, 0x74, 0x3E, 0x00, -0x30, 0x6D, 0x69, 0x80, 0x31, 0x5D, 0x5A, 0x80, 0x32, 0x56, 0x86, 0x00, 0x33, 0x3D, 0x3C, 0x80, -0x34, 0x36, 0x68, 0x00, 0x35, 0x1D, 0x1E, 0x80, 0x36, 0x16, 0x4A, 0x00, 0x36, 0xFD, 0x00, 0x80, -0x37, 0xF6, 0x2C, 0x00, 0x38, 0xDC, 0xE2, 0x80, 0x39, 0xA7, 0xE9, 0x80, 0x3A, 0xBC, 0xC4, 0x80, -0x3B, 0xBF, 0x2A, 0x80, 0x3C, 0xA5, 0xE1, 0x00, 0x3D, 0x9F, 0x0C, 0x80, 0x3E, 0x85, 0xC3, 0x00, -0x3F, 0x7E, 0xEE, 0x80, 0x40, 0x65, 0xA5, 0x00, 0x41, 0x5E, 0xD0, 0x80, 0x42, 0x45, 0x87, 0x00, -0x43, 0x3E, 0xB2, 0x80, 0x44, 0x2E, 0xA3, 0x80, 0x45, 0x1E, 0x94, 0x80, 0x46, 0x05, 0x4B, 0x00, -0x47, 0x07, 0xB1, 0x00, 0x47, 0xF7, 0xA2, 0x00, 0x48, 0xE7, 0x93, 0x00, 0x49, 0xD7, 0x84, 0x00, -0x4A, 0xC7, 0x75, 0x00, 0x4B, 0xB7, 0x66, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, -0xA0, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x04, 0x00, -0x00, 0x8C, 0xA0, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x08, 0x7A, 0x7A, 0x7A, 0x00, 0x45, -0x53, 0x54, 0x00, 0x4D, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x2B, 0x30, 0x02, 0x05, 0x32, 0x58, 0x00, 0x00, 0x00, 0x2A, -0x4D, 0x61, 0x63, 0x71, 0x75, 0x61, 0x72, 0x69, 0x65, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, -0x20, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x4D, 0x61, 0x63, 0x71, 0x75, 0x61, -0x72, 0x69, 0x65, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, +0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0xD5, 0x78, 0x80, +0x9C, 0xBC, 0x20, 0xF0, 0xA0, 0x87, 0xB4, 0x60, 0xD7, 0x0C, 0x68, 0x00, 0xFB, 0xC2, 0x8D, 0x00, +0xFC, 0xB2, 0x7E, 0x00, 0xFD, 0xC7, 0x59, 0x00, 0xFE, 0x76, 0xB0, 0x80, 0xFF, 0xA7, 0x3B, 0x00, +0x00, 0x56, 0x92, 0x80, 0x01, 0x87, 0x1D, 0x00, 0x02, 0x3F, 0xAF, 0x00, 0x03, 0x70, 0x39, 0x80, +0x04, 0x0D, 0x1C, 0x00, 0x05, 0x50, 0x1B, 0x80, 0x05, 0xF6, 0x38, 0x80, 0x07, 0x2F, 0xFD, 0x80, +0x07, 0xD6, 0x1A, 0x80, 0x09, 0x0F, 0xDF, 0x80, 0x09, 0xB5, 0xFC, 0x80, 0x0A, 0xEF, 0xC1, 0x80, +0x0B, 0x9F, 0x19, 0x00, 0x0C, 0xD8, 0xDE, 0x00, 0x0D, 0x7E, 0xFB, 0x00, 0x0E, 0xB8, 0xC0, 0x00, +0x0F, 0x5E, 0xDD, 0x00, 0x10, 0x98, 0xA2, 0x00, 0x11, 0x3E, 0xBF, 0x00, 0x12, 0x78, 0x84, 0x00, +0x13, 0x1E, 0xA1, 0x00, 0x14, 0x58, 0x66, 0x00, 0x14, 0xFE, 0x83, 0x00, 0x16, 0x38, 0x48, 0x00, +0x17, 0x03, 0x4F, 0x00, 0x18, 0x21, 0x64, 0x80, 0x18, 0xE3, 0x31, 0x00, 0x1A, 0x01, 0x46, 0x80, +0x1A, 0xA7, 0x63, 0x80, 0x1B, 0xE1, 0x28, 0x80, 0x1C, 0x87, 0x45, 0x80, 0x1D, 0xC1, 0x0A, 0x80, +0x1E, 0x67, 0x27, 0x80, 0x1F, 0x97, 0xB2, 0x00, 0x20, 0x59, 0x7E, 0x80, 0x21, 0x80, 0xCE, 0x80, +0x22, 0x42, 0x9B, 0x00, 0x23, 0x69, 0xEB, 0x00, 0x24, 0x22, 0x7D, 0x00, 0x25, 0x49, 0xCD, 0x00, +0x26, 0x02, 0x5F, 0x00, 0x27, 0x29, 0xAF, 0x00, 0x27, 0xF4, 0xB6, 0x00, 0x28, 0xED, 0xE1, 0x80, +0x29, 0xD4, 0x98, 0x00, 0x2A, 0xCD, 0xC3, 0x80, 0x2B, 0xB4, 0x7A, 0x00, 0x2C, 0xAD, 0xA5, 0x80, +0x2D, 0x94, 0x5C, 0x00, 0x2E, 0x8D, 0x87, 0x80, 0x2F, 0x74, 0x3E, 0x00, 0x30, 0x6D, 0x69, 0x80, +0x31, 0x5D, 0x5A, 0x80, 0x32, 0x56, 0x86, 0x00, 0x33, 0x3D, 0x3C, 0x80, 0x34, 0x36, 0x68, 0x00, +0x35, 0x1D, 0x1E, 0x80, 0x36, 0x16, 0x4A, 0x00, 0x36, 0xFD, 0x00, 0x80, 0x37, 0xF6, 0x2C, 0x00, +0x38, 0xDC, 0xE2, 0x80, 0x39, 0xA7, 0xE9, 0x80, 0x3A, 0xBC, 0xC4, 0x80, 0x3B, 0xBF, 0x2A, 0x80, +0x3C, 0xA5, 0xE1, 0x00, 0x3D, 0x9F, 0x0C, 0x80, 0x3E, 0x85, 0xC3, 0x00, 0x3F, 0x7E, 0xEE, 0x80, +0x40, 0x65, 0xA5, 0x00, 0x41, 0x5E, 0xD0, 0x80, 0x42, 0x45, 0x87, 0x00, 0x43, 0x3E, 0xB2, 0x80, +0x44, 0x2E, 0xA3, 0x80, 0x45, 0x1E, 0x94, 0x80, 0x46, 0x05, 0x4B, 0x00, 0x47, 0x07, 0xB1, 0x00, +0x47, 0xF7, 0xA2, 0x00, 0x48, 0xE7, 0x93, 0x00, 0x49, 0xD7, 0x84, 0x00, 0x4A, 0xC7, 0x75, 0x00, +0x4B, 0xB7, 0x66, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, +0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, +0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, +0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, +0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, +0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x00, 0x00, +0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, +0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, +0x00, 0x08, 0x45, 0x53, 0x54, 0x00, 0x7A, 0x7A, 0x7A, 0x00, 0x4D, 0x49, 0x53, 0x54, 0x00, 0x00, +0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x2B, 0x30, 0x02, +0x05, 0x32, 0x58, 0x00, 0x00, 0x00, 0x10, 0x4D, 0x61, 0x63, 0x71, 0x75, 0x61, 0x72, 0x69, 0x65, +0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, /* Antarctica/Mawson */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -8101,7 +8098,7 @@ const unsigned char timelib_timezone_db_data_builtin[261076] = { /* Asia/Gaza */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0xC8, 0x59, 0xB2, 0xE0, +0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0xC8, 0x59, 0xB2, 0xE0, 0xCC, 0xE5, 0xC1, 0x50, 0xCD, 0xAC, 0xFE, 0x00, 0xCE, 0xC6, 0xF4, 0xD0, 0xCF, 0x8F, 0x66, 0xE0, 0xD0, 0xA9, 0x79, 0xD0, 0xD1, 0x84, 0x60, 0xE0, 0xD2, 0x8A, 0xC9, 0x70, 0xD3, 0x65, 0xB0, 0x80, 0xD4, 0x6B, 0xE0, 0xD0, 0xE8, 0x36, 0x63, 0x60, 0xE8, 0xF4, 0x2D, 0x50, 0xEA, 0x0B, 0xB9, 0x60, @@ -8122,21 +8119,37 @@ const unsigned char timelib_timezone_db_data_builtin[261076] = { 0x39, 0xEF, 0x60, 0xD0, 0x3A, 0xDF, 0x5F, 0xE0, 0x3B, 0xCF, 0x42, 0xD0, 0x3C, 0xBF, 0x41, 0xE0, 0x3D, 0xAF, 0x24, 0xD0, 0x3E, 0x9F, 0x23, 0xE0, 0x3F, 0x8F, 0x06, 0xD0, 0x40, 0x7F, 0x05, 0xE0, 0x41, 0x5C, 0x81, 0xE0, 0x42, 0x5E, 0xE7, 0xE0, 0x43, 0x41, 0xB7, 0xF0, 0x44, 0x2D, 0xA6, 0x60, -0x45, 0x12, 0xFD, 0x50, 0x46, 0x0E, 0xD9, 0xE0, 0x46, 0xE8, 0x6F, 0x70, 0x47, 0xF1, 0x5E, 0xE0, -0x48, 0xB7, 0x11, 0xD0, 0x49, 0xCB, 0xFA, 0xE0, 0x4A, 0xA0, 0x4A, 0x70, 0x4B, 0xAD, 0x2E, 0x9C, -0x4C, 0x61, 0xBD, 0xD0, 0x4D, 0x96, 0xF3, 0xDC, 0x4E, 0x35, 0xC2, 0x50, 0x4F, 0x74, 0xDB, 0x60, -0x50, 0x5B, 0x91, 0xE0, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, +0x45, 0x12, 0xFD, 0x50, 0x46, 0x0E, 0xD9, 0xE0, 0x46, 0xE8, 0x6F, 0x70, 0x47, 0xEC, 0x18, 0xE0, +0x48, 0xB7, 0x11, 0xD0, 0x49, 0xCB, 0xFA, 0xE0, 0x4A, 0xA0, 0x3C, 0x60, 0x4B, 0xAD, 0x2E, 0x9C, +0x4C, 0x61, 0xBD, 0xD0, 0x4D, 0x94, 0xF9, 0x9C, 0x4E, 0x35, 0xC2, 0x50, 0x4F, 0x74, 0xDB, 0x60, +0x50, 0x5B, 0x91, 0xE0, 0x51, 0x54, 0xBD, 0x60, 0x52, 0x44, 0xAE, 0x60, 0x53, 0x34, 0x9F, 0x60, +0x54, 0x24, 0x90, 0x60, 0x55, 0x14, 0x81, 0x60, 0x56, 0x04, 0x72, 0x60, 0x56, 0xFD, 0x9D, 0xE0, +0x57, 0xE4, 0x54, 0x60, 0x58, 0xDD, 0x7F, 0xE0, 0x59, 0xC4, 0x36, 0x60, 0x5A, 0xBD, 0x61, 0xE0, +0x5B, 0xA4, 0x18, 0x60, 0x5C, 0x9D, 0x43, 0xE0, 0x5D, 0x8D, 0x34, 0xE0, 0x5E, 0x7D, 0x25, 0xE0, +0x5F, 0x6D, 0x16, 0xE0, 0x60, 0x5D, 0x07, 0xE0, 0x61, 0x4C, 0xF8, 0xE0, 0x62, 0x46, 0x24, 0x60, +0x63, 0x2C, 0xDA, 0xE0, 0x64, 0x26, 0x06, 0x60, 0x65, 0x0C, 0xBC, 0xE0, 0x66, 0x05, 0xE8, 0x60, +0x66, 0xF5, 0xD9, 0x60, 0x67, 0xE5, 0xCA, 0x60, 0x68, 0xD5, 0xBB, 0x60, 0x69, 0xC5, 0xAC, 0x60, +0x6A, 0xB5, 0x9D, 0x60, 0x6B, 0xA5, 0x8E, 0x60, 0x6C, 0x95, 0x7F, 0x60, 0x6D, 0x8E, 0xAA, 0xE0, +0x6E, 0x75, 0x61, 0x60, 0x6F, 0x6E, 0x8C, 0xE0, 0x70, 0x55, 0x43, 0x60, 0x71, 0x4E, 0x6E, 0xE0, +0x72, 0x3E, 0x5F, 0xE0, 0x73, 0x2E, 0x50, 0xE0, 0x74, 0x1E, 0x41, 0xE0, 0x75, 0x0E, 0x32, 0xE0, +0x75, 0xFE, 0x23, 0xE0, 0x76, 0xF7, 0x4F, 0x60, 0x77, 0xDE, 0x05, 0xE0, 0x78, 0xD7, 0x31, 0x60, +0x79, 0xBD, 0xE7, 0xE0, 0x7A, 0xB7, 0x13, 0x60, 0x7B, 0x9D, 0xC9, 0xE0, 0x7C, 0x96, 0xF5, 0x60, +0x7D, 0x86, 0xE6, 0x60, 0x7E, 0x76, 0xD7, 0x60, 0x7F, 0x66, 0xC8, 0x60, 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, 0x04, 0x03, 0x04, 0x03, 0x04, +0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, +0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x01, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 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, 0x02, 0x01, -0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x01, 0x02, -0x05, 0x02, 0x05, 0x02, 0x05, 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, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, -0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0D, -0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x49, -0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0xB9, 0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x47, -0x61, 0x7A, 0x61, 0x20, 0x53, 0x74, 0x72, 0x69, 0x70, +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, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, +0x2A, 0x30, 0x01, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, +0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB9, 0x64, +0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, 0x74, +0x72, 0x69, 0x70, /* Asia/Harbin */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -8158,7 +8171,7 @@ const unsigned char timelib_timezone_db_data_builtin[261076] = { /* Asia/Hebron */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0xC8, 0x59, 0xB2, 0xE0, +0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0xC8, 0x59, 0xB2, 0xE0, 0xCC, 0xE5, 0xC1, 0x50, 0xCD, 0xAC, 0xFE, 0x00, 0xCE, 0xC6, 0xF4, 0xD0, 0xCF, 0x8F, 0x66, 0xE0, 0xD0, 0xA9, 0x79, 0xD0, 0xD1, 0x84, 0x60, 0xE0, 0xD2, 0x8A, 0xC9, 0x70, 0xD3, 0x65, 0xB0, 0x80, 0xD4, 0x6B, 0xE0, 0xD0, 0xE8, 0x36, 0x63, 0x60, 0xE8, 0xF4, 0x2D, 0x50, 0xEA, 0x0B, 0xB9, 0x60, @@ -8179,22 +8192,37 @@ const unsigned char timelib_timezone_db_data_builtin[261076] = { 0x39, 0xEF, 0x60, 0xD0, 0x3A, 0xDF, 0x5F, 0xE0, 0x3B, 0xCF, 0x42, 0xD0, 0x3C, 0xBF, 0x41, 0xE0, 0x3D, 0xAF, 0x24, 0xD0, 0x3E, 0x9F, 0x23, 0xE0, 0x3F, 0x8F, 0x06, 0xD0, 0x40, 0x7F, 0x05, 0xE0, 0x41, 0x5C, 0x81, 0xE0, 0x42, 0x5E, 0xE7, 0xE0, 0x43, 0x41, 0xB7, 0xF0, 0x44, 0x2D, 0xA6, 0x60, -0x45, 0x12, 0xFD, 0x50, 0x46, 0x0E, 0xD9, 0xE0, 0x46, 0xE8, 0x6F, 0x70, 0x47, 0xF1, 0x5E, 0xE0, -0x48, 0xBB, 0x06, 0x50, 0x49, 0xCB, 0xFA, 0xE0, 0x4A, 0xA0, 0x4A, 0x70, 0x4B, 0xAD, 0x2E, 0x9C, -0x4C, 0x61, 0xBD, 0xD0, 0x4D, 0x95, 0xA2, 0x5C, 0x4E, 0x35, 0xC2, 0x50, 0x4E, 0x5C, 0x0B, 0xE0, -0x4E, 0x85, 0x06, 0x80, 0x4F, 0x74, 0xDB, 0x60, 0x50, 0x5B, 0x91, 0xE0, 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, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x01, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x01, 0x02, 0x01, +0x45, 0x12, 0xFD, 0x50, 0x46, 0x0E, 0xD9, 0xE0, 0x46, 0xE8, 0x6F, 0x70, 0x47, 0xEC, 0x18, 0xE0, +0x48, 0xBB, 0x06, 0x50, 0x49, 0xCB, 0xFA, 0xE0, 0x4A, 0xA0, 0x3C, 0x60, 0x4B, 0xAB, 0xDC, 0xE0, +0x4C, 0x61, 0xBD, 0xD0, 0x4D, 0x94, 0xF9, 0x9C, 0x4E, 0x35, 0xC2, 0x50, 0x4E, 0x5C, 0x0B, 0xE0, +0x4E, 0x84, 0xDC, 0x50, 0x4F, 0x74, 0xDB, 0x60, 0x50, 0x5B, 0x91, 0xE0, 0x51, 0x54, 0xBD, 0x60, +0x52, 0x44, 0xAE, 0x60, 0x53, 0x34, 0x9F, 0x60, 0x54, 0x24, 0x90, 0x60, 0x55, 0x14, 0x81, 0x60, +0x56, 0x04, 0x72, 0x60, 0x56, 0xFD, 0x9D, 0xE0, 0x57, 0xE4, 0x54, 0x60, 0x58, 0xDD, 0x7F, 0xE0, +0x59, 0xC4, 0x36, 0x60, 0x5A, 0xBD, 0x61, 0xE0, 0x5B, 0xA4, 0x18, 0x60, 0x5C, 0x9D, 0x43, 0xE0, +0x5D, 0x8D, 0x34, 0xE0, 0x5E, 0x7D, 0x25, 0xE0, 0x5F, 0x6D, 0x16, 0xE0, 0x60, 0x5D, 0x07, 0xE0, +0x61, 0x4C, 0xF8, 0xE0, 0x62, 0x46, 0x24, 0x60, 0x63, 0x2C, 0xDA, 0xE0, 0x64, 0x26, 0x06, 0x60, +0x65, 0x0C, 0xBC, 0xE0, 0x66, 0x05, 0xE8, 0x60, 0x66, 0xF5, 0xD9, 0x60, 0x67, 0xE5, 0xCA, 0x60, +0x68, 0xD5, 0xBB, 0x60, 0x69, 0xC5, 0xAC, 0x60, 0x6A, 0xB5, 0x9D, 0x60, 0x6B, 0xA5, 0x8E, 0x60, +0x6C, 0x95, 0x7F, 0x60, 0x6D, 0x8E, 0xAA, 0xE0, 0x6E, 0x75, 0x61, 0x60, 0x6F, 0x6E, 0x8C, 0xE0, +0x70, 0x55, 0x43, 0x60, 0x71, 0x4E, 0x6E, 0xE0, 0x72, 0x3E, 0x5F, 0xE0, 0x73, 0x2E, 0x50, 0xE0, +0x74, 0x1E, 0x41, 0xE0, 0x75, 0x0E, 0x32, 0xE0, 0x75, 0xFE, 0x23, 0xE0, 0x76, 0xF7, 0x4F, 0x60, +0x77, 0xDE, 0x05, 0xE0, 0x78, 0xD7, 0x31, 0x60, 0x79, 0xBD, 0xE7, 0xE0, 0x7A, 0xB7, 0x13, 0x60, +0x7B, 0x9D, 0xC9, 0xE0, 0x7C, 0x96, 0xF5, 0x60, 0x7D, 0x86, 0xE6, 0x60, 0x7E, 0x76, 0xD7, 0x60, +0x7F, 0x66, 0xC8, 0x60, 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, 0x00, 0x00, 0x2A, 0x30, -0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, -0x2A, 0x30, 0x01, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, -0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB9, 0x71, -0xF5, 0x01, 0x48, 0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, 0x73, 0x74, 0x20, 0x42, 0x61, -0x6E, 0x6B, +0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, +0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x01, 0x02, +0x05, 0x02, 0x05, 0x02, 0x05, 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, 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, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, +0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x09, 0x00, 0x00, +0x1C, 0x20, 0x00, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, +0x53, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, 0x35, 0x7C, 0x00, +0x00, 0x00, 0x09, 0x57, 0x65, 0x73, 0x74, 0x20, 0x42, 0x61, 0x6E, 0x6B, /* Asia/Ho_Chi_Minh */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x56, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -18382,4 +18410,4 @@ const unsigned char timelib_timezone_db_data_builtin[261076] = { 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 = { "2013.2", 579, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; +const timelib_tzdb timezonedb_builtin = { "2013.3", 579, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 2e616b1704..e27be7d81e 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2554,13 +2554,15 @@ static int php_date_initialize_from_hash(zval **return_value, php_date_obj **dat case TIMELIB_ZONETYPE_OFFSET: case TIMELIB_ZONETYPE_ABBR: { char *tmp = emalloc(Z_STRLEN_PP(z_date) + Z_STRLEN_PP(z_timezone) + 2); + int ret; snprintf(tmp, Z_STRLEN_PP(z_date) + Z_STRLEN_PP(z_timezone) + 2, "%s %s", Z_STRVAL_PP(z_date), Z_STRVAL_PP(z_timezone)); - php_date_initialize(*dateobj, tmp, Z_STRLEN_PP(z_date) + Z_STRLEN_PP(z_timezone) + 1, NULL, NULL, 0 TSRMLS_CC); + ret = php_date_initialize(*dateobj, tmp, Z_STRLEN_PP(z_date) + Z_STRLEN_PP(z_timezone) + 1, NULL, NULL, 0 TSRMLS_CC); efree(tmp); - return 1; + return 1 == ret; } - case TIMELIB_ZONETYPE_ID: + case TIMELIB_ZONETYPE_ID: { + int ret; convert_to_string(*z_timezone); tzi = php_date_parse_tzfile(Z_STRVAL_PP(z_timezone), DATE_TIMEZONEDB TSRMLS_CC); @@ -2571,9 +2573,10 @@ static int php_date_initialize_from_hash(zval **return_value, php_date_obj **dat tzobj->tzi.tz = tzi; tzobj->initialized = 1; - php_date_initialize(*dateobj, Z_STRVAL_PP(z_date), Z_STRLEN_PP(z_date), NULL, tmp_obj, 0 TSRMLS_CC); + ret = php_date_initialize(*dateobj, Z_STRVAL_PP(z_date), Z_STRLEN_PP(z_date), NULL, tmp_obj, 0 TSRMLS_CC); zval_ptr_dtor(&tmp_obj); - return 1; + return 1 == ret; + } } } } @@ -2597,7 +2600,9 @@ PHP_METHOD(DateTime, __set_state) php_date_instantiate(date_ce_date, return_value TSRMLS_CC); dateobj = (php_date_obj *) zend_object_store_get_object(return_value TSRMLS_CC); - php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC); + if (!php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC)) { + php_error(E_ERROR, "Invalid serialization data for DateTime object"); + } } /* }}} */ @@ -2613,7 +2618,9 @@ PHP_METHOD(DateTime, __wakeup) myht = Z_OBJPROP_P(object); - php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC); + if (!php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC)) { + php_error(E_ERROR, "Invalid serialization data for DateTime object"); + } } /* }}} */ diff --git a/ext/date/tests/bug55397.phpt b/ext/date/tests/bug55397.phpt index efc09b5047..13778a00b2 100644 --- a/ext/date/tests/bug55397.phpt +++ b/ext/date/tests/bug55397.phpt @@ -7,5 +7,4 @@ date_default_timezone_set('Europe/Prague'); var_dump(unserialize('O:8:"DateTime":0:{}') == new DateTime); ?> --EXPECTF-- -Warning: %s: Trying to compare an incomplete DateTime object in %s on line %d -bool(false) +Fatal error: Invalid serialization data for DateTime object in %sbug55397.php on line %d diff --git a/ext/date/tests/bug62852.phpt b/ext/date/tests/bug62852.phpt index 26de510215..7013a3f97c 100644 --- a/ext/date/tests/bug62852.phpt +++ b/ext/date/tests/bug62852.phpt @@ -1,36 +1,14 @@ --TEST-- -Bug #62852 (Unserialize invalid DateTime causes crash) +Bug #62852 (Unserialize invalid DateTime causes crash), variation 1 --INI-- date.timezone=GMT ---XFAIL-- -bug is not fixed yet --FILE-- <?php $s1 = 'O:8:"DateTime":3:{s:4:"date";s:20:"10007-06-07 03:51:49";s:13:"timezone_type";i:3;s:8:"timezone";s:3:"UTC";}'; -$s2 = 'O:3:"Foo":3:{s:4:"date";s:20:"10007-06-07 03:51:49";s:13:"timezone_type";i:3;s:8:"timezone";s:3:"UTC";}'; -global $foo; - -class Foo extends DateTime { - function __wakeup() { - global $foo; - $foo = $this; - parent::__wakeup(); - } -} - -// Old test case try { unserialize( $s1 ); } catch ( Exception $e ) {} -// My test case -try { - unserialize( $s2 ); -} catch ( Exception $e ) {} -var_dump( $foo ); - -echo "okey"; -?> --EXPECTF-- -okey +Fatal error: Invalid serialization data for DateTime object in %sbug62852.php on line %d diff --git a/ext/date/tests/bug62852_var2.phpt b/ext/date/tests/bug62852_var2.phpt new file mode 100644 index 0000000000..f93ba28ab1 --- /dev/null +++ b/ext/date/tests/bug62852_var2.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #62852 (Unserialize invalid DateTime causes crash), variation 2 +--INI-- +date.timezone=GMT +--FILE-- +<?php +$s2 = 'O:3:"Foo":3:{s:4:"date";s:20:"10007-06-07 03:51:49";s:13:"timezone_type";i:3;s:8:"timezone";s:3:"UTC";}'; + +global $foo; + +class Foo extends DateTime { + function __wakeup() { + global $foo; + $foo = $this; + parent::__wakeup(); + } +} + +try { + unserialize( $s2 ); +} catch ( Exception $e ) {} +var_dump( $foo ); + +--EXPECTF-- +Fatal error: Invalid serialization data for DateTime object in %sbug62852_var2.php on line %d diff --git a/ext/date/tests/bug62852_var3.phpt b/ext/date/tests/bug62852_var3.phpt new file mode 100644 index 0000000000..5a644b5470 --- /dev/null +++ b/ext/date/tests/bug62852_var3.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #62852 (Unserialize invalid DateTime causes crash), variation 3 +--INI-- +date.timezone=GMT +--FILE-- +<?php +$s2 = 'O:3:"Foo":3:{s:4:"date";s:19:"0000-00-00 00:00:00";s:13:"timezone_type";i:0;s:8:"timezone";s:3:"UTC";}'; + +global $foo; + +class Foo extends DateTime { + function __wakeup() { + global $foo; + $foo = $this; + parent::__wakeup(); + } +} + +try { + unserialize( $s2 ); +} catch ( Exception $e ) {} +var_dump( $foo ); + +--EXPECTF-- +Fatal error: Invalid serialization data for DateTime object in %sbug62852_var3.php on line %d diff --git a/ext/gd/config.m4 b/ext/gd/config.m4 index ebbdb92fb9..d85c8b985c 100644 --- a/ext/gd/config.m4 +++ b/ext/gd/config.m4 @@ -252,6 +252,8 @@ AC_DEFUN([PHP_GD_CHECK_VERSION],[ PHP_CHECK_LIBRARY(gd, gdFreeFontCache, [AC_DEFINE(HAVE_GD_FREEFONTCACHE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdFontCacheMutexSetup, [AC_DEFINE(HAVE_GD_FONTMUTEX, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdNewDynamicCtxEx, [AC_DEFINE(HAVE_GD_DYNAMIC_CTX_EX, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) + PHP_CHECK_LIBRARY(gd, gdImageConvolution, [AC_DEFINE(HAVE_GD_IMAGE_CONVOLUTION, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) + PHP_CHECK_LIBRARY(gd, gdImagePixelate, [AC_DEFINE(HAVE_GD_IMAGE_PIXELATE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) ]) dnl diff --git a/ext/gd/gd.c b/ext/gd/gd.c index 3bb9fa2e5f..25f53687c1 100644 --- a/ext/gd/gd.c +++ b/ext/gd/gd.c @@ -1241,9 +1241,13 @@ PHP_RSHUTDOWN_FUNCTION(gd) /* }}} */ #if HAVE_GD_BUNDLED -#define PHP_GD_VERSION_STRING "bundled (2.0.34 compatible)" +#define PHP_GD_VERSION_STRING "bundled (2.1.0 compatible)" #else -#define PHP_GD_VERSION_STRING "2.0" +# ifdef GD_VERSION_STRING +# define PHP_GD_VERSION_STRING GD_VERSION_STRING +# else +# define PHP_GD_VERSION_STRING "2.0" +# endif #endif /* {{{ PHP_MINFO_FUNCTION diff --git a/ext/gd/libgd/gd_compat.h b/ext/gd/libgd/gd_compat.h index c084a0069c..779e709a63 100644 --- a/ext/gd/libgd/gd_compat.h +++ b/ext/gd/libgd/gd_compat.h @@ -32,6 +32,7 @@ int gdImageContrast(gdImagePtr src, double contrast); /* Simply adds or substracts respectively red, green or blue to a pixel */ int gdImageColor(gdImagePtr src, const int red, const int green, const int blue, const int alpha); +#if !defined(HAVE_GD_IMAGE_CONVOLUTION) /* Image convolution by a 3x3 custom matrix */ int gdImageConvolution(gdImagePtr src, float ft[3][3], float filter_div, float offset); int gdImageEdgeDetectQuick(gdImagePtr src); @@ -40,12 +41,18 @@ int gdImageSelectiveBlur( gdImagePtr src); int gdImageEmboss(gdImagePtr im); int gdImageMeanRemoval(gdImagePtr im); int gdImageSmooth(gdImagePtr im, float weight); +#endif + +#if !defined(HAVE_GD_IMAGE_PIXELATE) enum gdPixelateMode { GD_PIXELATE_UPPERLEFT, GD_PIXELATE_AVERAGE }; int gdImagePixelate(gdImagePtr im, int block_size, const unsigned int mode); +#endif + +int gdImagePixelate(gdImagePtr im, int block_size, const unsigned int mode); #if !HAVE_GD_IMAGEELLIPSE void gdImageEllipse(gdImagePtr im, int cx, int cy, int w, int h, int c); diff --git a/ext/gd/libgd/gd_rotate.c b/ext/gd/libgd/gd_rotate.c index 430d51d963..e94809ae77 100644 --- a/ext/gd/libgd/gd_rotate.c +++ b/ext/gd/libgd/gd_rotate.c @@ -216,12 +216,13 @@ gdImagePtr gdImageRotate90 (gdImagePtr src, int ignoretransparent) f = gdImageGetPixel; } dst = gdImageCreateTrueColor(src->sy, src->sx); - dst->transparent = src->transparent; if (dst != NULL) { int old_blendmode = dst->alphaBlendingFlag; dst->alphaBlendingFlag = 0; + dst->transparent = src->transparent; + gdImagePaletteCopy (dst, src); for (uY = 0; uY<src->sy; uY++) { @@ -262,12 +263,13 @@ gdImagePtr gdImageRotate180 (gdImagePtr src, int ignoretransparent) f = gdImageGetPixel; } dst = gdImageCreateTrueColor(src->sx, src->sy); - dst->transparent = src->transparent; if (dst != NULL) { int old_blendmode = dst->alphaBlendingFlag; dst->alphaBlendingFlag = 0; + dst->transparent = src->transparent; + gdImagePaletteCopy (dst, src); for (uY = 0; uY<src->sy; uY++) { @@ -309,12 +311,13 @@ gdImagePtr gdImageRotate270 (gdImagePtr src, int ignoretransparent) f = gdImageGetPixel; } dst = gdImageCreateTrueColor (src->sy, src->sx); - dst->transparent = src->transparent; if (dst != NULL) { int old_blendmode = dst->alphaBlendingFlag; dst->alphaBlendingFlag = 0; + dst->transparent = src->transparent; + gdImagePaletteCopy (dst, src); for (uY = 0; uY<src->sy; uY++) { diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 86f6070e6d..2941b4a899 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -1259,7 +1259,7 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags #endif - if (into_object && Z_TYPE_P(return_value) != IS_NULL) { + if (into_object && Z_TYPE_P(return_value) == IS_ARRAY) { zval dataset = *return_value; zend_fcall_info fci; zend_fcall_info_cache fcc; diff --git a/ext/mysqli/tests/bug64726.phpt b/ext/mysqli/tests/bug64726.phpt new file mode 100644 index 0000000000..83c4e3c1e9 --- /dev/null +++ b/ext/mysqli/tests/bug64726.phpt @@ -0,0 +1,23 @@ +--TEST-- +Bug #63398 (Memleak when calling fetch_object on a use_result and DB pointer has closed) +--SKIPIF-- +<?php +require_once('skipif.inc'); +require_once("connect.inc"); +if (!$IS_MYSQLND) { + die("skip mysqlnd only test"); +} +require_once('skipifconnectfailure.inc'); +?> +--FILE-- +<?php +require 'connect.inc'; +$db = new my_mysqli($host, $user, $passwd, $db, $port, $socket); + +$result = $db->query('SELECT 1', MYSQLI_USE_RESULT); +$db->close(); +var_dump($result->fetch_object()); +?> +--EXPECTF-- +Warning: mysqli_result::fetch_object(): Error while reading a row in %sbug64726.php on line %d +bool(false) diff --git a/ext/mysqlnd/mysqlnd_enum_n_def.h b/ext/mysqlnd/mysqlnd_enum_n_def.h index 10deb03812..f02a5b119a 100644 --- a/ext/mysqlnd/mysqlnd_enum_n_def.h +++ b/ext/mysqlnd/mysqlnd_enum_n_def.h @@ -39,7 +39,7 @@ #define MYSQLND_SQLSTATE_LENGTH 5 #define MYSQLND_SQLSTATE_NULL "00000" -#define MYSQLND_MAX_ALLOWED_USER_LEN 256 /* 64 char * 4byte . MySQL supports now only 16 char, but let it be forward compatible */ +#define MYSQLND_MAX_ALLOWED_USER_LEN 252 /* 63 char * 4byte . MySQL supports now only 16 char, but let it be forward compatible */ #define MYSQLND_MAX_ALLOWED_DB_LEN 1024 /* 256 char * 4byte. MySQL supports now only 64 char in the tables, but on the FS could be different. Forward compatible. */ #define MYSQLND_NET_CMD_BUFFER_MIN_SIZE 4096 diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c index 884de8bcee..a5ea3c498b 100644 --- a/ext/mysqlnd/mysqlnd_result.c +++ b/ext/mysqlnd/mysqlnd_result.c @@ -1547,6 +1547,7 @@ MYSQLND_METHOD(mysqlnd_res, fetch_into)(MYSQLND_RES * result, unsigned int flags mysqlnd_array_init(return_value, mysqlnd_num_fields(result) * 2); if (FAIL == result->m.fetch_row(result, (void *)return_value, flags, &fetched_anything TSRMLS_CC)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error while reading a row"); + zval_dtor(return_value); RETVAL_FALSE; } else if (fetched_anything == FALSE) { zval_dtor(return_value); diff --git a/ext/standard/dns.c b/ext/standard/dns.c index 7bf7ccac85..8e24a817ff 100644 --- a/ext/standard/dns.c +++ b/ext/standard/dns.c @@ -514,7 +514,7 @@ static u_char *php_parserr(u_char *cp, querybuf *answer, int type_to_fetch, int tp[dlen] = '\0'; cp += dlen; - add_assoc_stringl(*subarray, "txt", tp, dlen - 1, 0); + add_assoc_stringl(*subarray, "txt", tp, (dlen>0)?dlen - 1:0, 0); add_assoc_zval(*subarray, "entries", entries); } break; diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index 4a86007e85..27042f6e5d 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -51,7 +51,7 @@ PHP_FUNCTION(stream_socket_pair) { long domain, type, protocol; php_stream *s1, *s2; - int pair[2]; + php_socket_t pair[2]; if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &domain, &type, &protocol)) { diff --git a/ext/standard/tests/file/bug24482.phpt b/ext/standard/tests/file/bug24482.phpt index f545f1addf..9d0568af33 100644 --- a/ext/standard/tests/file/bug24482.phpt +++ b/ext/standard/tests/file/bug24482.phpt @@ -8,6 +8,11 @@ if (!function_exists("glob")) { ?> --FILE-- <?php + +// run this test in ext/standard/tests (see bug #64714) +chdir(__DIR__); // ensure in ext/standard/tests/file +chdir('..'); // move up to ext/standard/tests + $globdirs = glob("*", GLOB_ONLYDIR); $dirs = array(); diff --git a/ext/zip/lib/zip_close.c b/ext/zip/lib/zip_close.c index 362f92d749..576be3b353 100644 --- a/ext/zip/lib/zip_close.c +++ b/ext/zip/lib/zip_close.c @@ -164,9 +164,10 @@ zip_close(struct zip *za) for (j=0; j<survivors; j++) { i = filelist[j].idx; + _zip_dirent_init(&de); + /* create new local directory entry */ if (ZIP_ENTRY_DATA_CHANGED(za->entry+i) || new_torrentzip) { - _zip_dirent_init(&de); if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0)) _zip_dirent_torrent_normalize(&de); @@ -192,7 +193,7 @@ zip_close(struct zip *za) } else { /* copy existing directory entries */ - if (fseeko(za->zp, za->cdir->entry[i].offset, SEEK_SET) != 0) { + if ((NULL == za->zp) || (fseeko(za->zp, za->cdir->entry[i].offset, SEEK_SET) != 0)) { _zip_error_set(&za->error, ZIP_ER_SEEK, errno); error = 1; break; diff --git a/ext/zip/lib/zip_dirent.c b/ext/zip/lib/zip_dirent.c index b5b9d273be..b9dac5c989 100644 --- a/ext/zip/lib/zip_dirent.c +++ b/ext/zip/lib/zip_dirent.c @@ -157,11 +157,17 @@ _zip_cdir_write(struct zip_cdir *cd, FILE *fp, struct zip_error *error) void _zip_dirent_finalize(struct zip_dirent *zde) { - free(zde->filename); + if (zde->filename_len > 0) { + free(zde->filename); + } zde->filename = NULL; - free(zde->extrafield); + if (zde->extrafield_len > 0) { + free(zde->extrafield); + } zde->extrafield = NULL; - free(zde->comment); + if (zde->comment_len > 0) { + free(zde->comment); + } zde->comment = NULL; } diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c index bdd35a2ede..b1a1a3628c 100644 --- a/ext/zip/php_zip.c +++ b/ext/zip/php_zip.c @@ -28,6 +28,7 @@ #include "ext/standard/file.h" #include "ext/standard/php_string.h" #include "ext/pcre/php_pcre.h" +#include "ext/standard/php_filestat.h" #include "php_zip.h" #include "lib/zip.h" #include "lib/zipint.h" @@ -309,6 +310,7 @@ static int php_zip_add_file(struct zip *za, const char *filename, size_t filenam struct zip_source *zs; int cur_idx; char resolved_path[MAXPATHLEN]; + zval exists_flag; if (ZIP_OPENBASEDIR_CHECKPATH(filename)) { @@ -319,6 +321,11 @@ static int php_zip_add_file(struct zip *za, const char *filename, size_t filenam return -1; } + php_stat(resolved_path, strlen(resolved_path), FS_EXISTS, &exists_flag TSRMLS_CC); + if (!Z_BVAL(exists_flag)) { + return -1; + } + zs = zip_source_file(za, resolved_path, offset_start, offset_len); if (!zs) { return -1; diff --git a/ext/zip/tests/bug64342_0.phpt b/ext/zip/tests/bug64342_0.phpt new file mode 100644 index 0000000000..066d3e6fc2 --- /dev/null +++ b/ext/zip/tests/bug64342_0.phpt @@ -0,0 +1,42 @@ +--TEST-- +Bug #64342 ZipArchive::addFile() has to check file existance (variation 1) +--SKIPIF-- +<?php + if(!extension_loaded('zip')) die('skip'); +?> +--FILE-- +<?php + +$zip = new ZipArchive; +$res = $zip->open(dirname(__FILE__) . '/bug64342.zip', ZipArchive::CREATE); +if ($res === TRUE) { + $f = md5(uniqid()) . '.txt'; + echo "$f\n"; + $res = $zip->addFile($f); + if (true == $res) { + echo "add ok\n"; + } else { + echo "add failed\n"; + } + $res = $zip->close(); + if (true == $res) { + echo "close ok\n"; + } else { + echo "close failed\n"; + } +} else { + echo "open failed\n"; +} + + +?> +DONE +--CLEAN-- +<?php + +@unlink(dirname(__FILE__) . '/bug64342.zip'); +--EXPECTF-- +%s.txt +add failed +close ok +DONE diff --git a/ext/zip/tests/bug64342_1.phpt b/ext/zip/tests/bug64342_1.phpt new file mode 100644 index 0000000000..2b1357d12f --- /dev/null +++ b/ext/zip/tests/bug64342_1.phpt @@ -0,0 +1,37 @@ +--TEST-- +Bug #64342 ZipArchive::addFile() has to check file existance (variation 2) +--SKIPIF-- +<?php +/* $Id$ */ +if(!extension_loaded('zip')) die('skip'); +?> +--FILE-- +<?php + +$dirname = dirname(__FILE__) . '/'; +include $dirname . 'utils.inc'; +$file = $dirname . '__tmp_oo_addfile.zip'; + +copy($dirname . 'test.zip', $file); + +$zip = new ZipArchive; +if (!$zip->open($file)) { + exit('failed'); +} +if (!$zip->addFile($dirname . 'cant_find_me.txt', 'test.php')) { + echo "failed\n"; +} +if ($zip->status == ZIPARCHIVE::ER_OK) { + dump_entries_name($zip); + $zip->close(); +} else { + echo "failed\n"; +} +@unlink($file); +?> +--EXPECTF-- +failed +0 bar +1 foobar/ +2 foobar/baz +3 entry1.txt diff --git a/main/main.c b/main/main.c index 654cbf8c1b..4e0294c834 100644 --- a/main/main.c +++ b/main/main.c @@ -2231,7 +2231,7 @@ PHPAPI int php_execute_script(zend_file_handle *primary_file TSRMLS_DC) zend_file_handle *prepend_file_p, *append_file_p; zend_file_handle prepend_file = {0}, append_file = {0}; #if HAVE_BROKEN_GETCWD - int old_cwd_fd = -1; + volatile int old_cwd_fd = -1; #else char *old_cwd; ALLOCA_FLAG(use_heap) diff --git a/main/php_version.h b/main/php_version.h index 10e5b7d684..eeaffa3e44 100644 --- a/main/php_version.h +++ b/main/php_version.h @@ -2,7 +2,7 @@ /* edit configure.in to change version number */ #define PHP_MAJOR_VERSION 5 #define PHP_MINOR_VERSION 3 -#define PHP_RELEASE_VERSION 24 +#define PHP_RELEASE_VERSION 26 #define PHP_EXTRA_VERSION "-dev" -#define PHP_VERSION "5.3.24-dev" -#define PHP_VERSION_ID 50324 +#define PHP_VERSION "5.3.26-dev" +#define PHP_VERSION_ID 50326 diff --git a/sapi/cli/php.1.in b/sapi/cli/php.1.in index c1fcb27e51..2dfa499ba3 100644 --- a/sapi/cli/php.1.in +++ b/sapi/cli/php.1.in @@ -1,4 +1,4 @@ -.TH PHP 1 "2010" "The PHP Group" "Scripting Language" +.TH PHP 1 "2013" "The PHP Group" "Scripting Language" .SH NAME php \- PHP Command Line Interface 'CLI' .SH SYNOPSIS @@ -425,7 +425,7 @@ contributors all around the world. .SH VERSION INFORMATION This manpage describes \fBphp\fP, version @PHP_VERSION@. .SH COPYRIGHT -Copyright \(co 1997\-2010 The PHP Group +Copyright \(co 1997\-2013 The PHP Group .LP This source file is subject to version 3.01 of the PHP license, that is bundled with this package in the file LICENSE, and is diff --git a/sapi/fpm/fpm/fpm_conf.c b/sapi/fpm/fpm/fpm_conf.c index 25e2cc43a1..0a8a0e37e3 100644 --- a/sapi/fpm/fpm/fpm_conf.c +++ b/sapi/fpm/fpm/fpm_conf.c @@ -540,12 +540,17 @@ static char *fpm_conf_set_array(zval *key, zval *value, void **config, int conve kv->key = strdup(Z_STRVAL_P(key)); if (!kv->key) { + free(kv); return "fpm_conf_set_array: strdup(key) failed"; } if (convert_to_bool) { char *err = fpm_conf_set_boolean(value, &subconf, 0); - if (err) return err; + if (err) { + free(kv->key); + free(kv); + return err; + } kv->value = strdup(b ? "1" : "0"); } else { kv->value = strdup(Z_STRVAL_P(value)); @@ -556,6 +561,7 @@ static char *fpm_conf_set_array(zval *key, zval *value, void **config, int conve if (!kv->value) { free(kv->key); + free(kv); return "fpm_conf_set_array: strdup(value) failed"; } @@ -578,6 +584,7 @@ static void *fpm_worker_pool_config_alloc() /* {{{ */ wp->config = malloc(sizeof(struct fpm_worker_pool_config_s)); if (!wp->config) { + fpm_worker_pool_free(wp); return 0; } @@ -1002,7 +1009,7 @@ static int fpm_conf_process_all_pools() /* {{{ */ nb_ext = 0; /* find the number of extensions */ - while ((ext = strtok(limit_extensions, " \t"))) { + while (strtok(limit_extensions, " \t")) { limit_extensions = NULL; nb_ext++; } @@ -1024,8 +1031,8 @@ static int fpm_conf_process_all_pools() /* {{{ */ nb_ext = 0; /* parse the string and save the extension in the array */ - while ((ext = strtok(security_limit_extensions, " \t"))) { - security_limit_extensions = NULL; + while ((ext = strtok(limit_extensions, " \t"))) { + limit_extensions = NULL; wp->limit_extensions[nb_ext++] = strdup(ext); } @@ -1107,6 +1114,7 @@ int fpm_conf_write_pid() /* {{{ */ if (len != write(fd, buf, len)) { zlog(ZLOG_SYSERROR, "Unable to write to the PID file."); + close(fd); return -1; } close(fd); @@ -1460,6 +1468,7 @@ int fpm_conf_load_ini_file(char *filename TSRMLS_DC) /* {{{ */ if (ini_recursion++ > 4) { zlog(ZLOG_ERROR, "failed to include more than 5 files recusively"); + close(fd); return -1; } diff --git a/sapi/fpm/fpm/fpm_log.c b/sapi/fpm/fpm/fpm_log.c index 6b014b5005..4e1a057db1 100644 --- a/sapi/fpm/fpm/fpm_log.c +++ b/sapi/fpm/fpm/fpm_log.c @@ -57,7 +57,9 @@ int fpm_log_open(int reopen) /* {{{ */ wp->log_fd = fd; } - fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); + if (0 > fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC)) { + zlog(ZLOG_WARNING, "failed to change attribute of access_log"); + } } return ret; @@ -237,7 +239,7 @@ int fpm_log_write(char *log_format TSRMLS_DC) /* {{{ */ case 'f': /* script */ if (!test) { - len2 = snprintf(b, FPM_LOG_BUFFER - len, "%s", proc.script_filename && *proc.script_filename ? proc.script_filename : "-"); + len2 = snprintf(b, FPM_LOG_BUFFER - len, "%s", *proc.script_filename ? proc.script_filename : "-"); } break; @@ -249,7 +251,7 @@ int fpm_log_write(char *log_format TSRMLS_DC) /* {{{ */ case 'm': /* method */ if (!test) { - len2 = snprintf(b, FPM_LOG_BUFFER - len, "%s", proc.request_method && *proc.request_method ? proc.request_method : "-"); + len2 = snprintf(b, FPM_LOG_BUFFER - len, "%s", *proc.request_method ? proc.request_method : "-"); } break; @@ -347,19 +349,19 @@ int fpm_log_write(char *log_format TSRMLS_DC) /* {{{ */ case 'q': /* query_string */ if (!test) { - len2 = snprintf(b, FPM_LOG_BUFFER - len, "%s", proc.query_string ? proc.query_string : ""); + len2 = snprintf(b, FPM_LOG_BUFFER - len, "%s", proc.query_string); } break; case 'Q': /* '?' */ if (!test) { - len2 = snprintf(b, FPM_LOG_BUFFER - len, "%s", proc.query_string && *proc.query_string ? "?" : ""); + len2 = snprintf(b, FPM_LOG_BUFFER - len, "%s", *proc.query_string ? "?" : ""); } break; case 'r': /* request URI */ if (!test) { - len2 = snprintf(b, FPM_LOG_BUFFER - len, "%s", proc.request_uri ? proc.request_uri : "-"); + len2 = snprintf(b, FPM_LOG_BUFFER - len, "%s", proc.request_uri); } break; @@ -397,7 +399,7 @@ int fpm_log_write(char *log_format TSRMLS_DC) /* {{{ */ case 'u': /* remote user */ if (!test) { - len2 = snprintf(b, FPM_LOG_BUFFER - len, "%s", proc.auth_user ? proc.auth_user : "-"); + len2 = snprintf(b, FPM_LOG_BUFFER - len, "%s", proc.auth_user); } break; diff --git a/sapi/fpm/fpm/fpm_main.c b/sapi/fpm/fpm/fpm_main.c index 4e12c7d52f..763327271f 100644 --- a/sapi/fpm/fpm/fpm_main.c +++ b/sapi/fpm/fpm/fpm_main.c @@ -1179,119 +1179,123 @@ static void init_request_info(TSRMLS_D) int len = script_path_translated_len; char *ptr; - while ((ptr = strrchr(pt, '/')) || (ptr = strrchr(pt, '\\'))) { - *ptr = 0; - if (stat(pt, &st) == 0 && S_ISREG(st.st_mode)) { - /* - * okay, we found the base script! - * work out how many chars we had to strip off; - * then we can modify PATH_INFO - * accordingly - * - * we now have the makings of - * PATH_INFO=/test - * SCRIPT_FILENAME=/docroot/info.php - * - * we now need to figure out what docroot is. - * if DOCUMENT_ROOT is set, this is easy, otherwise, - * we have to play the game of hide and seek to figure - * out what SCRIPT_NAME should be - */ - int ptlen = strlen(pt); - int slen = len - ptlen; - int pilen = env_path_info ? strlen(env_path_info) : 0; - int tflag = 0; - char *path_info; - if (apache_was_here) { - /* recall that PATH_INFO won't exist */ - path_info = script_path_translated + ptlen; - tflag = (slen != 0 && (!orig_path_info || strcmp(orig_path_info, path_info) != 0)); - } else { - path_info = env_path_info ? env_path_info + pilen - slen : NULL; - tflag = (orig_path_info != path_info); - } + if (pt) { + while ((ptr = strrchr(pt, '/')) || (ptr = strrchr(pt, '\\'))) { + *ptr = 0; + if (stat(pt, &st) == 0 && S_ISREG(st.st_mode)) { + /* + * okay, we found the base script! + * work out how many chars we had to strip off; + * then we can modify PATH_INFO + * accordingly + * + * we now have the makings of + * PATH_INFO=/test + * SCRIPT_FILENAME=/docroot/info.php + * + * we now need to figure out what docroot is. + * if DOCUMENT_ROOT is set, this is easy, otherwise, + * we have to play the game of hide and seek to figure + * out what SCRIPT_NAME should be + */ + int ptlen = strlen(pt); + int slen = len - ptlen; + int pilen = env_path_info ? strlen(env_path_info) : 0; + int tflag = 0; + char *path_info; + if (apache_was_here) { + /* recall that PATH_INFO won't exist */ + path_info = script_path_translated + ptlen; + tflag = (slen != 0 && (!orig_path_info || strcmp(orig_path_info, path_info) != 0)); + } else { + path_info = env_path_info ? env_path_info + pilen - slen : NULL; + tflag = (orig_path_info != path_info); + } - if (tflag) { - if (orig_path_info) { - char old; - - _sapi_cgibin_putenv("ORIG_PATH_INFO", orig_path_info TSRMLS_CC); - old = path_info[0]; - path_info[0] = 0; - if (!orig_script_name || - strcmp(orig_script_name, env_path_info) != 0) { - if (orig_script_name) { - _sapi_cgibin_putenv("ORIG_SCRIPT_NAME", orig_script_name TSRMLS_CC); + if (tflag) { + if (orig_path_info) { + char old; + + _sapi_cgibin_putenv("ORIG_PATH_INFO", orig_path_info TSRMLS_CC); + old = path_info[0]; + path_info[0] = 0; + if (!orig_script_name || + strcmp(orig_script_name, env_path_info) != 0) { + if (orig_script_name) { + _sapi_cgibin_putenv("ORIG_SCRIPT_NAME", orig_script_name TSRMLS_CC); + } + SG(request_info).request_uri = _sapi_cgibin_putenv("SCRIPT_NAME", env_path_info TSRMLS_CC); + } else { + SG(request_info).request_uri = orig_script_name; } - SG(request_info).request_uri = _sapi_cgibin_putenv("SCRIPT_NAME", env_path_info TSRMLS_CC); - } else { - SG(request_info).request_uri = orig_script_name; + path_info[0] = old; } - path_info[0] = old; + env_path_info = _sapi_cgibin_putenv("PATH_INFO", path_info TSRMLS_CC); } - env_path_info = _sapi_cgibin_putenv("PATH_INFO", path_info TSRMLS_CC); - } - if (!orig_script_filename || - strcmp(orig_script_filename, pt) != 0) { - if (orig_script_filename) { - _sapi_cgibin_putenv("ORIG_SCRIPT_FILENAME", orig_script_filename TSRMLS_CC); - } - script_path_translated = _sapi_cgibin_putenv("SCRIPT_FILENAME", pt TSRMLS_CC); - } - TRANSLATE_SLASHES(pt); - - /* figure out docroot - * SCRIPT_FILENAME minus SCRIPT_NAME - */ - if (env_document_root) { - int l = strlen(env_document_root); - int path_translated_len = 0; - char *path_translated = NULL; - - if (l && env_document_root[l - 1] == '/') { - --l; + if (!orig_script_filename || + strcmp(orig_script_filename, pt) != 0) { + if (orig_script_filename) { + _sapi_cgibin_putenv("ORIG_SCRIPT_FILENAME", orig_script_filename TSRMLS_CC); + } + script_path_translated = _sapi_cgibin_putenv("SCRIPT_FILENAME", pt TSRMLS_CC); } + TRANSLATE_SLASHES(pt); - /* we have docroot, so we should have: - * DOCUMENT_ROOT=/docroot - * SCRIPT_FILENAME=/docroot/info.php + /* figure out docroot + * SCRIPT_FILENAME minus SCRIPT_NAME */ + if (env_document_root) { + int l = strlen(env_document_root); + int path_translated_len = 0; + char *path_translated = NULL; - /* PATH_TRANSLATED = DOCUMENT_ROOT + PATH_INFO */ - path_translated_len = l + (env_path_info ? strlen(env_path_info) : 0); - path_translated = (char *) emalloc(path_translated_len + 1); - memcpy(path_translated, env_document_root, l); - if (env_path_info) { - memcpy(path_translated + l, env_path_info, (path_translated_len - l)); - } - path_translated[path_translated_len] = '\0'; - if (orig_path_translated) { - _sapi_cgibin_putenv("ORIG_PATH_TRANSLATED", orig_path_translated TSRMLS_CC); - } - env_path_translated = _sapi_cgibin_putenv("PATH_TRANSLATED", path_translated TSRMLS_CC); - efree(path_translated); - } else if ( env_script_name && - strstr(pt, env_script_name) - ) { - /* PATH_TRANSLATED = PATH_TRANSLATED - SCRIPT_NAME + PATH_INFO */ - int ptlen = strlen(pt) - strlen(env_script_name); - int path_translated_len = ptlen + (env_path_info ? strlen(env_path_info) : 0); - char *path_translated = NULL; - - path_translated = (char *) emalloc(path_translated_len + 1); - memcpy(path_translated, pt, ptlen); - if (env_path_info) { - memcpy(path_translated + ptlen, env_path_info, path_translated_len - ptlen); - } - path_translated[path_translated_len] = '\0'; - if (orig_path_translated) { - _sapi_cgibin_putenv("ORIG_PATH_TRANSLATED", orig_path_translated TSRMLS_CC); + if (l && env_document_root[l - 1] == '/') { + --l; + } + + /* we have docroot, so we should have: + * DOCUMENT_ROOT=/docroot + * SCRIPT_FILENAME=/docroot/info.php + */ + + /* PATH_TRANSLATED = DOCUMENT_ROOT + PATH_INFO */ + path_translated_len = l + (env_path_info ? strlen(env_path_info) : 0); + path_translated = (char *) emalloc(path_translated_len + 1); + memcpy(path_translated, env_document_root, l); + if (env_path_info) { + memcpy(path_translated + l, env_path_info, (path_translated_len - l)); + } + path_translated[path_translated_len] = '\0'; + if (orig_path_translated) { + _sapi_cgibin_putenv("ORIG_PATH_TRANSLATED", orig_path_translated TSRMLS_CC); + } + env_path_translated = _sapi_cgibin_putenv("PATH_TRANSLATED", path_translated TSRMLS_CC); + efree(path_translated); + } else if ( env_script_name && + strstr(pt, env_script_name) + ) { + /* PATH_TRANSLATED = PATH_TRANSLATED - SCRIPT_NAME + PATH_INFO */ + int ptlen = strlen(pt) - strlen(env_script_name); + int path_translated_len = ptlen + (env_path_info ? strlen(env_path_info) : 0); + char *path_translated = NULL; + + path_translated = (char *) emalloc(path_translated_len + 1); + memcpy(path_translated, pt, ptlen); + if (env_path_info) { + memcpy(path_translated + ptlen, env_path_info, path_translated_len - ptlen); + } + path_translated[path_translated_len] = '\0'; + if (orig_path_translated) { + _sapi_cgibin_putenv("ORIG_PATH_TRANSLATED", orig_path_translated TSRMLS_CC); + } + env_path_translated = _sapi_cgibin_putenv("PATH_TRANSLATED", path_translated TSRMLS_CC); + efree(path_translated); } - env_path_translated = _sapi_cgibin_putenv("PATH_TRANSLATED", path_translated TSRMLS_CC); - efree(path_translated); + break; } - break; } + } else { + ptr = NULL; } if (!ptr) { /* diff --git a/sapi/fpm/fpm/fpm_signals.c b/sapi/fpm/fpm/fpm_signals.c index 8993a860ae..c5d0692f18 100644 --- a/sapi/fpm/fpm/fpm_signals.c +++ b/sapi/fpm/fpm/fpm_signals.c @@ -145,7 +145,9 @@ static void sig_soft_quit(int signo) /* {{{ */ /* closing fastcgi listening socket will force fcgi_accept() exit immediately */ close(0); - socket(AF_UNIX, SOCK_STREAM, 0); + if (0 > socket(AF_UNIX, SOCK_STREAM, 0)) { + zlog(ZLOG_WARNING, "failed to create a new socket"); + } fpm_php_soft_quit(); errno = saved_errno; } diff --git a/sapi/fpm/fpm/fpm_sockets.c b/sapi/fpm/fpm/fpm_sockets.c index f56b9cfbd1..3dcad4e70f 100644 --- a/sapi/fpm/fpm/fpm_sockets.c +++ b/sapi/fpm/fpm/fpm_sockets.c @@ -167,7 +167,7 @@ static int fpm_sockets_new_listening_socket(struct fpm_worker_pool_s *wp, struct { int flags = 1; int sock; - mode_t saved_umask; + mode_t saved_umask = 0; sock = socket(sa->sa_family, SOCK_STREAM, 0); @@ -176,11 +176,14 @@ static int fpm_sockets_new_listening_socket(struct fpm_worker_pool_s *wp, struct return -1; } - setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &flags, sizeof(flags)); + if (0 > setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &flags, sizeof(flags))) { + zlog(ZLOG_WARNING, "failed to change socket attribute"); + } if (wp->listen_address_domain == FPM_AF_UNIX) { if (fpm_socket_unix_test_connect((struct sockaddr_un *)sa, socklen) == 0) { zlog(ZLOG_ERROR, "An another FPM instance seems to already listen on %s", ((struct sockaddr_un *) sa)->sun_path); + close(sock); return -1; } unlink( ((struct sockaddr_un *) sa)->sun_path); @@ -192,6 +195,7 @@ static int fpm_sockets_new_listening_socket(struct fpm_worker_pool_s *wp, struct if (wp->listen_address_domain == FPM_AF_UNIX) { umask(saved_umask); } + close(sock); return -1; } @@ -203,6 +207,7 @@ static int fpm_sockets_new_listening_socket(struct fpm_worker_pool_s *wp, struct if (wp->socket_uid != -1 || wp->socket_gid != -1) { if (0 > chown(path, wp->socket_uid, wp->socket_gid)) { zlog(ZLOG_SYSERROR, "failed to chown() the socket '%s'", wp->config->listen_address); + close(sock); return -1; } } @@ -210,6 +215,7 @@ static int fpm_sockets_new_listening_socket(struct fpm_worker_pool_s *wp, struct if (0 > listen(sock, wp->config->listen_backlog)) { zlog(ZLOG_SYSERROR, "failed to listen to address '%s'", wp->config->listen_address); + close(sock); return -1; } diff --git a/sapi/fpm/fpm/fpm_stdio.c b/sapi/fpm/fpm/fpm_stdio.c index 6a587d00ee..10b867d00a 100644 --- a/sapi/fpm/fpm/fpm_stdio.c +++ b/sapi/fpm/fpm/fpm_stdio.c @@ -34,6 +34,7 @@ int fpm_stdio_init_main() /* {{{ */ if (0 > dup2(fd, STDIN_FILENO) || 0 > dup2(fd, STDOUT_FILENO)) { zlog(ZLOG_SYSERROR, "failed to init stdio: dup2()"); + close(fd); return -1; } close(fd); @@ -294,7 +295,9 @@ int fpm_stdio_open_error_log(int reopen) /* {{{ */ zlog_set_fd(fpm_globals.error_log_fd); } } - fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); + if (0 > fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC)) { + zlog(ZLOG_WARNING, "failed to change attribute of error_log"); + } return 0; } /* }}} */ diff --git a/sapi/fpm/fpm/fpm_worker_pool.c b/sapi/fpm/fpm/fpm_worker_pool.c index 123f9893fa..ebe1866c8a 100644 --- a/sapi/fpm/fpm/fpm_worker_pool.c +++ b/sapi/fpm/fpm/fpm_worker_pool.c @@ -18,6 +18,21 @@ struct fpm_worker_pool_s *fpm_worker_all_pools; +void fpm_worker_pool_free(struct fpm_worker_pool_s *wp) /* {{{ */ +{ + if (wp->config) { + free(wp->config); + } + if (wp->user) { + free(wp->user); + } + if (wp->home) { + free(wp->home); + } + free(wp); +} +/* }}} */ + static void fpm_worker_pool_cleanup(int which, void *arg) /* {{{ */ { struct fpm_worker_pool_s *wp, *wp_next; @@ -29,10 +44,7 @@ static void fpm_worker_pool_cleanup(int which, void *arg) /* {{{ */ if ((which & FPM_CLEANUP_CHILD) == 0 && fpm_globals.parent_pid == getpid()) { fpm_scoreboard_free(wp->scoreboard); } - free(wp->config); - free(wp->user); - free(wp->home); - free(wp); + fpm_worker_pool_free(wp); } fpm_worker_all_pools = NULL; } diff --git a/sapi/fpm/fpm/fpm_worker_pool.h b/sapi/fpm/fpm/fpm_worker_pool.h index 6688e6d3ba..05c993de4e 100644 --- a/sapi/fpm/fpm/fpm_worker_pool.h +++ b/sapi/fpm/fpm/fpm_worker_pool.h @@ -45,6 +45,7 @@ struct fpm_worker_pool_s { }; struct fpm_worker_pool_s *fpm_worker_pool_alloc(); +void fpm_worker_pool_free(struct fpm_worker_pool_s *wp); int fpm_worker_pool_init_main(); extern struct fpm_worker_pool_s *fpm_worker_all_pools; diff --git a/win32/build/libs_version.txt b/win32/build/libs_version.txt index b5d62ae682..e3cdcd24c9 100644 --- a/win32/build/libs_version.txt +++ b/win32/build/libs_version.txt @@ -1,17 +1,17 @@ -bz2-1.0.6
-cclient-2007e
-freetype-2.4.10
-icu-49.1.2
-jpeglib-8
-libcurl-7.29.0
-libiconv-1.14
-libmcrypt-2.5.8
-libmpir-1.3.1
-libpng-1.2.50
-libpq-8.3.6
-libssh2-1.4.2
-libtidy-20090325
-libxslt-1.1.27
-libxml-2.7.8
-openssl-0.9.8y
-
+bz2-1.0.6 +cclient-2007e +freetype-2.4.10 +icu-49.1.2 +jpeglib-8 +libcurl-7.30.0 +libiconv-1.14 +libmcrypt-2.5.8 +libmpir-1.3.1 +libpng-1.2.50 +libpq-8.3.6 +libssh2-1.4.2 +libtidy-20090325 +libxslt-1.1.27 +libxml-2.7.8 +openssl-0.9.8y + diff --git a/win32/sockets.c b/win32/sockets.c index d64280870f..c8fddd6e52 100644 --- a/win32/sockets.c +++ b/win32/sockets.c @@ -39,33 +39,54 @@ PHPAPI int socketpair(int domain, int type, int protocol, SOCKET sock[2]) return -1; } + sock[0] = sock[1] = redirect = INVALID_SOCKET; - sock[0] = socket(domain, type, protocol); - address.sin_addr.s_addr = INADDR_ANY; - address.sin_family = AF_INET; - address.sin_port = 0; - bind(sock[0], (struct sockaddr*)&address, sizeof(address)); + sock[0] = socket(domain, type, protocol); + if (INVALID_SOCKET == sock[0]) { + goto error; + } + + address.sin_addr.s_addr = INADDR_ANY; + address.sin_family = AF_INET; + address.sin_port = 0; + + if (bind(sock[0], (struct sockaddr*)&address, sizeof(address)) != 0) { + goto error; + } if(getsockname(sock[0], (struct sockaddr *)&address, &size) != 0) { + goto error; + } + + if (listen(sock[0], 2) != 0) { + goto error; + } + + sock[1] = socket(domain, type, protocol); + if (INVALID_SOCKET == sock[1]) { + goto error; } - listen(sock[0], 2); - sock[1] = socket(domain, type, protocol); address.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + if(connect(sock[1], (struct sockaddr*)&address, sizeof(address)) != 0) { + goto error; + } - connect(sock[1], (struct sockaddr*)&address, sizeof(address)); redirect = accept(sock[0],(struct sockaddr*)&address, &size); + if (INVALID_SOCKET == redirect) { + goto error; + } closesocket(sock[0]); sock[0] = redirect; - if(sock[0] == INVALID_SOCKET ) { - closesocket(sock[0]); - closesocket(sock[1]); - WSASetLastError(WSAECONNABORTED); - return -1; - } - return 0; + +error: + closesocket(redirect); + closesocket(sock[0]); + closesocket(sock[1]); + WSASetLastError(WSAECONNABORTED); + return -1; } diff --git a/win32/time.c b/win32/time.c index 77e4504cd1..75539748e8 100644 --- a/win32/time.c +++ b/win32/time.c @@ -50,6 +50,7 @@ int getfilesystemtime(struct timeval *tv) FILETIME ft; unsigned __int64 ff = 0; MyGetSystemTimeAsFileTime timefunc; + ULARGE_INTEGER fft; timefunc = get_time_func(); if (timefunc) { @@ -58,14 +59,20 @@ int getfilesystemtime(struct timeval *tv) GetSystemTimeAsFileTime(&ft); } - ff |= ft.dwHighDateTime; - ff <<= 32; - ff |= ft.dwLowDateTime; - ff /= 10; /* convert to microseconds */ + /* + * Do not cast a pointer to a FILETIME structure to either a + * ULARGE_INTEGER* or __int64* value because it can cause alignment faults on 64-bit Windows. + * via http://technet.microsoft.com/en-us/library/ms724284(v=vs.85).aspx + */ + fft.HighPart = ft.dwHighDateTime; + fft.LowPart = ft.dwLowDateTime; + ff = fft.QuadPart; + + ff /= 10Ui64; /* convert to microseconds */ ff -= 11644473600000000Ui64; /* convert to unix epoch */ - tv->tv_sec = (long)(ff / 1000000UL); - tv->tv_usec = (long)(ff % 1000000UL); + tv->tv_sec = (long)(ff / 1000000Ui64); + tv->tv_usec = (long)(ff % 1000000Ui64); return 0; } |
