summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Lytochkin <lytboris@php.net>2013-05-03 11:21:48 +0400
committerBoris Lytochkin <lytboris@php.net>2013-05-03 11:21:48 +0400
commitaa448adc8347c072421103d1a92b0a7a75ec873f (patch)
treea8f3dbfd72e00f4191f2836a4543fd86813d982e
parent62364e6e01092911fa11e6d28f9acc3ed9af07e8 (diff)
parent4a34d4a83cd87a0b3fe499936f93e632cc594685 (diff)
downloadphp-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 ...
-rw-r--r--.travis.yml9
-rw-r--r--NEWS42
-rw-r--r--Zend/tests/bug62343.phpt13
-rw-r--r--Zend/tests/bug64578.phpt15
-rw-r--r--Zend/zend_builtin_functions.c15
-rw-r--r--Zend/zend_execute.c7
-rw-r--r--Zend/zend_vm_def.h31
-rw-r--r--Zend/zend_vm_execute.h35
-rw-r--r--configure.in4
-rw-r--r--ext/date/lib/timezonedb.h910
-rw-r--r--ext/date/php_date.c21
-rw-r--r--ext/date/tests/bug55397.phpt3
-rw-r--r--ext/date/tests/bug62852.phpt26
-rw-r--r--ext/date/tests/bug62852_var2.phpt25
-rw-r--r--ext/date/tests/bug62852_var3.phpt25
-rw-r--r--ext/gd/config.m42
-rw-r--r--ext/gd/gd.c8
-rw-r--r--ext/gd/libgd/gd_compat.h7
-rw-r--r--ext/gd/libgd/gd_rotate.c9
-rw-r--r--ext/mysqli/mysqli.c2
-rw-r--r--ext/mysqli/tests/bug64726.phpt23
-rw-r--r--ext/mysqlnd/mysqlnd_enum_n_def.h2
-rw-r--r--ext/mysqlnd/mysqlnd_result.c1
-rw-r--r--ext/standard/dns.c2
-rw-r--r--ext/standard/streamsfuncs.c2
-rw-r--r--ext/standard/tests/file/bug24482.phpt5
-rw-r--r--ext/zip/lib/zip_close.c5
-rw-r--r--ext/zip/lib/zip_dirent.c12
-rw-r--r--ext/zip/php_zip.c7
-rw-r--r--ext/zip/tests/bug64342_0.phpt42
-rw-r--r--ext/zip/tests/bug64342_1.phpt37
-rw-r--r--main/main.c2
-rw-r--r--main/php_version.h6
-rw-r--r--sapi/cli/php.1.in4
-rw-r--r--sapi/fpm/fpm/fpm_conf.c17
-rw-r--r--sapi/fpm/fpm/fpm_log.c16
-rw-r--r--sapi/fpm/fpm/fpm_main.c208
-rw-r--r--sapi/fpm/fpm/fpm_signals.c4
-rw-r--r--sapi/fpm/fpm/fpm_sockets.c10
-rw-r--r--sapi/fpm/fpm/fpm_stdio.c5
-rw-r--r--sapi/fpm/fpm/fpm_worker_pool.c20
-rw-r--r--sapi/fpm/fpm/fpm_worker_pool.h1
-rw-r--r--win32/build/libs_version.txt34
-rw-r--r--win32/sockets.c51
-rw-r--r--win32/time.c19
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
diff --git a/NEWS b/NEWS
index 41f5eab4e7..cd865d2c8a 100644
--- a/NEWS
+++ b/NEWS
@@ -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;
}