del php-src: NEWS TSRM/threads.m4 Zend/tests/bug73156.phpt Zend/tests/bug73337.phpt Zend/tests/bug73338.phpt Zend/tests/bug73350.phpt
Zend/zend_exceptions.c Zend/zend_execute_API.c Ze nd/zend_hash.c Zend/zend_hash.h Zend/zend_strtod _int.h Zend/zend_types.h Zend/zend_vm_def.h
Zend/zend_vm_execute.h configure.in ext/date/lib /timezonedb.h ext/date/tests/bug53437_var3. phpt ext/gd/libgd/gd_crop.c ext/gd/tests/bug724 94.phpt
ext/hash/tests/hash_update_fi
| From: | Joe Watkins | Date: | Tue, 25 Oct 2016 15:21:10 +0000 |
| Subject: | del php-src: NEWS TSRM/threads.m4 Zend/tests/bug73156.phpt Zend/tests/bug73337.phpt Zend/tests/bug73338.phpt Zend/tests/bug73350.phpt Zend/zend_exceptions.c Zend/zend_execute_API.c Ze nd/zend_hash.c Zend/zend_hash.h Zend/zend_strtod _int.h Zend/zend_types.h Zend/zend_vm_def.h Zend/zend_vm_execute.h configure.in ext/date/lib /timezonedb.h ext/date/tests/bug53437_var3. phpt ext/gd/libgd/gd_crop.c ext/gd/tests/bug724 94.phpt ext/hash/tests/hash_update_fi |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-95283@lists.php.net to get a copy of this message | ||
Branch: PHP-7.1.0
Deleted commits count: 4
User: Joe Watkins <krakjoe@php.net> Tue, 25 Oct 2016 15:21:10 +0000
Changed paths:
M NEWS
M TSRM/threads.m4
M Zend/tests/bug73156.phpt
A Zend/tests/bug73337.phpt
A Zend/tests/bug73338.phpt
A Zend/tests/bug73350..phpt
M Zend/zend_exceptions.c
M Zend/zend_execute_API.c
M Zend/zend_hash.c
M Zend/zend_hash.h
M Zend/zend_strtod_int.h
M Zend/zend_types.h
M Zend/zend_vm_def.h
M Zend/zend_vm_execute.h
M configure.in
M ext/date/lib/timezonedb.h
M ext/date/tests/bug53437_var3.phpt
M ext/gd/libgd/gd_crop.c
A ext/gd/tests/bug72494.phpt
A ext/hash/tests/hash_update_file.phpt
A ext/hash/tests/hash_update_stream.phpt
M ext/json/json_encoder.c
M ext/opcache/Optimizer/zend_call_graph.c
M ext/opcache/Optimizer/zend_call_graph.h
M ext/opcache/Optimizer/zend_cfg.h
M ext/opcache/Optimizer/zend_dump.c
M ext/opcache/Optimizer/zend_inference.c
M ext/opcache/Optimizer/zend_optimizer.c
M ext/openssl/openssl.c
A ext/openssl/tests/openssl_free_key.phpt
M ext/openssl/xp_ssl.c
M ext/session/session.c
M ext/soap/php_encoding.c
M ext/soap/php_http.c
M ext/soap/soap.c
A ext/soap/tests/bug69137.phpt
M ext/sqlite3/sqlite3..c
M ext/sqlite3/tests/bug63921-32bit.phpt
M ext/sqlite3/tests/bug63921-64bit.phpt
A ext/sqlite3/tests/bug73333.phpt
M ext/standard/array.c
M ext/standard/php_random.h
M ext/standard/random.c
A ext/standard/tests/array/array_replace_merge_recursive_ref.phpt
A ext/standard/tests/network/dns_get_mx.phpt
M ext/standard/tests/serialize/bug69793.phpt
M main/php_version.h
M sapi/cli/php_cli_server.c
M sapi/fpm/fpm/fpm_request.c
A tests/lang/bug73329.phpt
diff --git b/NEWS a/NEWS index e66d80f..d274ade 100644 --- b/NEWS +++ a/NEWS @@ -1,11 +1,27 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +27 Oct 2016, PHP 7.1.0RC5 + +- Core: + . Fixed bug #73350 (Exception::__toString() cause circular references). + (Laruence) + . Fixed bug #73329 ((Float)"Nano" == NAN). (Anatol) + +- CLI Server: + . Fixed bug #73360 (Unable to work in root with unicode chars). (Anatol) + +- SQLite3: + . Fixed bug #73333 (2147483647 is fetched as string). (cmb) + 19 Oct 2016, PHP 7.1.0RC4 - Core: . Fixed bug #73288 (Segfault in __clone > Exception.toString > __get). (Laruence) . Fixed for #73240 (Write out of bounds at number_format). (Stas) + . Fix pthreads detection when cross-compiling (ffontaine) + . Fixed bug #73337 (try/catch not working with two exceptions inside a same + operation). (Dmitry) - BCmath: . Fix bug #73190 (memcpy negative parameter _bc_new_num_ex). (Stas) @@ -56,6 +72,8 @@ PHP NEWS . Fixed bug #73037 (SoapServer reports Bad Request when gzipped). (Anatol) . Fixed bug #73237 (Nested object in "any" element overwrites other fields). (Keith Smiley) + . Fixed bug #69137 (Peer verification fails when using a proxy with SoapClient) + (Keith Smiley) - SimpleXML: . Fixed bug #73293 (NULL pointer dereference in SimpleXMLElement::asXML()). @@ -528,7 +546,8 @@ PHP NEWS (Pierre) . Fixed bug #72482 (Ilegal write/read access caused by gdImageAALine overflow). (Pierre) - . Fixed bug #72494 (imagecropauto out-of-bounds access). (Pierre) + . Fixed bug #72494 (imagecropauto out-of-bounds access). (Fernando, Pierre, + cmb) - Intl: . Partially fixed #72506 (idn_to_ascii for UTS #46 incorrect for long domain diff --git b/TSRM/threads.m4 a/TSRM/threads.m4 index 38494ce..7ef9202 100644 --- b/TSRM/threads.m4 +++ a/TSRM/threads.m4 @@ -66,9 +66,10 @@ dnl dnl Check whether the current setup can use POSIX threads calls dnl AC_DEFUN([PTHREADS_CHECK_COMPILE], [ -AC_TRY_RUN( [ +AC_TRY_LINK( [ #include <pthread.h> #include <stddef.h> + ], [ void *thread_routine(void *data) { return data; @@ -81,17 +82,10 @@ int main() { pthread_mutexattr_init(&mattr); return pthread_create(&thd, NULL, thread_routine, &data); } ], [ - pthreads_working=yes - ], [ - pthreads_working=no + pthreads_checked=yes ], [ - dnl For cross compiling running this test is of no use. NetWare supports pthreads - pthreads_working=no - case $host_alias in - *netware*) - pthreads_working=yes - esac -] + pthreads_checked=no + ] ) ] )dnl dnl dnl PTHREADS_CHECK() @@ -129,30 +123,34 @@ else CFLAGS="$CFLAGS $flag" PTHREADS_CHECK_COMPILE CFLAGS=$ac_save - if test "$pthreads_working" = "yes"; then + if test "$pthreads_checked" = "yes"; then ac_cv_pthreads_cflags=$flag break fi done fi -fi -]) + ]) -AC_CACHE_CHECK(for pthreads_lib, ac_cv_pthreads_lib,[ -ac_cv_pthreads_lib= -if test "$pthreads_working" != "yes"; then - for lib in pthread pthreads c_r; do - ac_save=$LIBS - LIBS="$LIBS -l$lib" - PTHREADS_CHECK_COMPILE - LIBS=$ac_save - if test "$pthreads_working" = "yes"; then - ac_cv_pthreads_lib=$lib - break - fi - done + AC_CACHE_CHECK(for pthreads_lib, ac_cv_pthreads_lib,[ + ac_cv_pthreads_lib= + if test "$pthreads_working" != "yes"; then + for lib in pthread pthreads c_r; do + ac_save=$LIBS + LIBS="$LIBS -l$lib" + PTHREADS_CHECK_COMPILE + LIBS=$ac_save + if test "$pthreads_checked" = "yes"; then + ac_cv_pthreads_lib=$lib + break + fi + done + fi + ]) + + if test "x$ac_cv_pthreads_cflags" != "x" -o "x$ac_cv_pthreads_lib" != "x"; then + pthreads_working="yes" + fi fi -]) if test "$pthreads_working" = "yes"; then threads_result="POSIX-Threads found" diff --git b/Zend/tests/bug73156.phpt a/Zend/tests/bug73156.phpt index b509251..327ad9e 100644 --- b/Zend/tests/bug73156.phpt +++ a/Zend/tests/bug73156.phpt @@ -1,5 +1,5 @@ --TEST-- -iBug #73156 (segfault on undefined function) +Bug #73156 (segfault on undefined function) --FILE-- <?php class A { diff --git b/Zend/tests/bug73337.phpt a/Zend/tests/bug73337.phpt new file mode 100644 index 0000000..9eff18e --- /dev/null +++ a/Zend/tests/bug73337.phpt @@ -0,0 +1,12 @@ +--TEST-- +Bug #73337 (try/catch not working with two exceptions inside a same operation) +--FILE-- +<?php +class d { function __destruct() { throw new Exception; } } +try { new d + new d; } catch (Exception $e) { print "Exception properly caught\n"; } +?> +--EXPECTF-- +Notice: Object of class d could not be converted to int in %sbug73337.php on line 3 + +Notice: Object of class d could not be converted to int in %sbug73337.php on line 3 +Exception properly caught diff --git b/Zend/tests/bug73338.phpt a/Zend/tests/bug73338.phpt new file mode 100644 index 0000000..df4c3b6 --- /dev/null +++ a/Zend/tests/bug73338.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #73338: Ensure exceptions in function init opcodes are cleaned properly +--FILE-- +<?php + +try { call_user_func(new class { function __destruct () { throw new Error; } }); } catch (Error $e) {} + +set_error_handler(function() { throw new Error; }); + +try { var_dump(new stdClass, call_user_func("fail")); } catch (Error $e) {} + +try { (function() { call_user_func("fail"); })(); } catch (Error $e) {} + +try { [new class { static function foo() {} function __destruct () { throw new Error; } }, "foo"](); } catch (Error $e) {} + +?> +--EXPECTF-- +Warning: call_user_func() expects parameter 1 to be a valid callback, no array or string given in %s on line %d diff --git b/Zend/tests/bug73350.phpt a/Zend/tests/bug73350.phpt new file mode 100644 index 0000000..7505884 --- /dev/null +++ a/Zend/tests/bug73350.phpt @@ -0,0 +1,27 @@ +--TEST-- +Bug #73350 (Exception::__toString() cause circular references) +--FILE-- +<?php +$e = new Exception(); + +// This line cause problem :( +// Comment it to see the difference. +(string) $e; + +// This line show the clue (PHP Warning: ...). +var_export($e); +?> +--EXPECTF-- +Exception::__set_state(array( + 'message' => '', + 'string' => 'Exception in %sbug73350.php:%d +Stack trace: +#0 {main}', + 'code' => 0, + 'file' => '%sbug73350.php', + 'line' => %d, + 'trace' => + array ( + ), + 'previous' => NULL, +)) diff --git b/Zend/zend_exceptions.c a/Zend/zend_exceptions.c index 331213d..8f41e1c 100644 --- b/Zend/zend_exceptions.c +++ a/Zend/zend_exceptions.c @@ -740,14 +740,15 @@ ZEND_METHOD(exception, __toString) Z_OBJPROP_P(exception)->u.v.nApplyCount++; exception = GET_PROPERTY(exception, ZEND_STR_PREVIOUS); if (exception && Z_TYPE_P(exception) == IS_OBJECT && Z_OBJPROP_P(exception)->u.v.nApplyCount > 0) { - exception = NULL; + break; } } zend_string_release(fname); + exception = getThis(); /* Reset apply counts */ while (exception && Z_TYPE_P(exception) == IS_OBJECT && (base_ce = i_get_exception_base(exception)) && instanceof_function(Z_OBJCE_P(exception), base_ce)) { - if(Z_OBJPROP_P(exception)->u.v.nApplyCount) { + if (Z_OBJPROP_P(exception)->u.v.nApplyCount) { Z_OBJPROP_P(exception)->u.v.nApplyCount--; } else { break; diff --git b/Zend/zend_execute_API.c a/Zend/zend_execute_API.c index 2e299e8..fc4a39a 100644 --- b/Zend/zend_execute_API.c +++ a/Zend/zend_execute_API.c @@ -820,10 +820,13 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) / ZEND_ADD_CALL_FLAG(call, ZEND_CALL_CLOSURE); } - if (func->type == ZEND_USER_FUNCTION) { + if (func->type == ZEND_USER_FUNCTION) { int call_via_handler = (func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) != 0; + const zend_op *current_opline_before_exception = EG(opline_before_exception); + zend_init_execute_data(call, &func->op_array, fci->retval); zend_execute_ex(call); + EG(opline_before_exception) = current_opline_before_exception; if (call_via_handler) { /* We must re-initialize function again */ fci_cache->initialized = 0; diff --git b/Zend/zend_hash.c a/Zend/zend_hash.c index ec9a5ba..fdbdcac 100644 --- b/Zend/zend_hash.c +++ a/Zend/zend_hash.c @@ -34,9 +34,7 @@ #define HT_POISONED_PTR ((HashTable *) (intptr_t) -1) #if ZEND_DEBUG -/* -#define HASH_MASK_CONSISTENCY 0xc0 -*/ + #define HT_OK 0x00 #define HT_IS_DESTROYING 0x40 #define HT_DESTROYED 0x80 @@ -44,10 +42,10 @@ static void _zend_is_inconsistent(const HashTable *ht, const char *file, int line) { - if ((ht->u.flags & HASH_MASK_CONSISTENCY) == HT_OK) { + if (ht->u.v.consistency == HT_OK) { return; } - switch ((ht->u.flags & HASH_MASK_CONSISTENCY)) { + switch (ht->u.v.consistency) { case HT_IS_DESTROYING: zend_output_debug_string(1, "%s(%d) : ht=%p is being destroyed", file, line, ht); break; @@ -65,7 +63,7 @@ static void _zend_is_inconsistent(const HashTable *ht, const char *file, int lin } #define IS_CONSISTENT(a) _zend_is_inconsistent(a, __FILE__, __LINE__); #define SET_INCONSISTENT(n) do { \ - (ht)->u.flags |= n; \ + (ht)->u.v.consistency = n; \ } while (0) #else #define IS_CONSISTENT(a) @@ -891,7 +889,7 @@ ZEND_API int ZEND_FASTCALL zend_hash_rehash(HashTable *ht) HT_HASH_RESET(ht); i = 0; p = ht->arData; - if (ht->nNumUsed == ht->nNumOfElements) { + if (HT_IS_WITHOUT_HOLES(ht)) { do { nIndex = p->h | ht->nTableMask; Z_NEXT(p->val) = HT_HASH(ht, nIndex); @@ -1232,8 +1230,8 @@ ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht) if (ht->pDestructor) { SET_INCONSISTENT(HT_IS_DESTROYING); - if (ht->u.flags & (HASH_FLAG_PACKED|HASH_FLAG_STATIC_KEYS)) { - if (ht->nNumUsed == ht->nNumOfElements) { + if (HT_HAS_STATIC_KEYS_ONLY(ht)) { + if (HT_IS_WITHOUT_HOLES(ht)) { do { ht->pDestructor(&p->val); } while (++p != end); @@ -1244,7 +1242,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht) } } while (++p != end); } - } else if (ht->nNumUsed == ht->nNumOfElements) { + } else if (HT_IS_WITHOUT_HOLES(ht)) { do { ht->pDestructor(&p->val); if (EXPECTED(p->key)) { @@ -1264,7 +1262,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht) SET_INCONSISTENT(HT_DESTROYED); } else { - if (!(ht->u.flags & (HASH_FLAG_PACKED|HASH_FLAG_STATIC_KEYS))) { + if (!HT_HAS_STATIC_KEYS_ONLY(ht)) { do { if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF)) { if (EXPECTED(p->key)) { @@ -1303,11 +1301,11 @@ ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht) end = p + ht->nNumUsed; SET_INCONSISTENT(HT_IS_DESTROYING); - if (ht->u.flags & (HASH_FLAG_PACKED|HASH_FLAG_STATIC_KEYS)) { + if (HT_HAS_STATIC_KEYS_ONLY(ht)) { do { i_zval_ptr_dtor(&p->val ZEND_FILE_LINE_CC); } while (++p != end); - } else if (ht->nNumUsed == ht->nNumOfElements) { + } else if (HT_IS_WITHOUT_HOLES(ht)) { do { i_zval_ptr_dtor(&p->val ZEND_FILE_LINE_CC); if (EXPECTED(p->key)) { @@ -1345,8 +1343,8 @@ ZEND_API void ZEND_FASTCALL zend_hash_clean(HashTable *ht) p = ht->arData; end = p + ht->nNumUsed; if (ht->pDestructor) { - if (ht->u.flags & (HASH_FLAG_PACKED|HASH_FLAG_STATIC_KEYS)) { - if (ht->nNumUsed == ht->nNumOfElements) { + if (HT_HAS_STATIC_KEYS_ONLY(ht)) { + if (HT_IS_WITHOUT_HOLES(ht)) { do { ht->pDestructor(&p->val); } while (++p != end); @@ -1357,7 +1355,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_clean(HashTable *ht) } } while (++p != end); } - } else if (ht->nNumUsed == ht->nNumOfElements) { + } else if (HT_IS_WITHOUT_HOLES(ht)) { do { ht->pDestructor(&p->val); if (EXPECTED(p->key)) { @@ -1375,8 +1373,8 @@ ZEND_API void ZEND_FASTCALL zend_hash_clean(HashTable *ht) } while (++p != end); } } else { - if (!(ht->u.flags & (HASH_FLAG_PACKED|HASH_FLAG_STATIC_KEYS))) { - if (ht->nNumUsed == ht->nNumOfElements) { + if (!HT_HAS_STATIC_KEYS_ONLY(ht)) { + if (HT_IS_WITHOUT_HOLES(ht)) { do { if (EXPECTED(p->key)) { zend_string_release(p->key); @@ -1413,11 +1411,11 @@ ZEND_API void ZEND_FASTCALL zend_symtable_clean(HashTable *ht) if (ht->nNumUsed) { p = ht->arData; end = p + ht->nNumUsed; - if (ht->u.flags & HASH_FLAG_STATIC_KEYS) { + if (HT_HAS_STATIC_KEYS_ONLY(ht)) { do { i_zval_ptr_dtor(&p->val ZEND_FILE_LINE_CC); } while (++p != end); - } else if (ht->nNumUsed == ht->nNumOfElements) { + } else if (HT_IS_WITHOUT_HOLES(ht)) { do { i_zval_ptr_dtor(&p->val ZEND_FILE_LINE_CC); if (EXPECTED(p->key)) { @@ -1805,7 +1803,7 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source) target->nInternalPointer = source->nInternalPointer; HT_HASH_RESET_PACKED(target); - if (target->nNumUsed == target->nNumOfElements) { + if (HT_IS_WITHOUT_HOLES(target)) { zend_array_dup_packed_elements(source, target, 0); } else { zend_array_dup_packed_elements(source, target, 1); @@ -1826,14 +1824,14 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source) HT_SET_DATA_ADDR(target, emalloc(HT_SIZE(target))); HT_HASH_RESET(target); - if (target->u.flags & HASH_FLAG_STATIC_KEYS) { - if (source->nNumUsed == source->nNumOfElements) { + if (HT_HAS_STATIC_KEYS_ONLY(target)) { + if (HT_IS_WITHOUT_HOLES(source)) { idx = zend_array_dup_elements(source, target, 1, 0); } else { idx = zend_array_dup_elements(source, target, 1, 1); } } else { - if (source->nNumUsed == source->nNumOfElements) { + if (HT_IS_WITHOUT_HOLES(source)) { idx = zend_array_dup_elements(source, target, 0, 0); } else { idx = zend_array_dup_elements(source, target, 0, 1); @@ -2256,7 +2254,7 @@ ZEND_API int ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort, co return SUCCESS; } - if (ht->nNumUsed == ht->nNumOfElements) { + if (HT_IS_WITHOUT_HOLES(ht)) { i = ht->nNumUsed; } else { for (j = 0, i = 0; j < ht->nNumUsed; j++) { diff --git b/Zend/zend_hash.h a/Zend/zend_hash.h index b7e6f37..190551d 100644 --- b/Zend/zend_hash.h +++ a/Zend/zend_hash.h @@ -39,10 +39,17 @@ #define HASH_FLAG_APPLY_PROTECTION (1<<1) #define HASH_FLAG_PACKED (1<<2) #define HASH_FLAG_INITIALIZED (1<<3) -#define HASH_FLAG_STATIC_KEYS (1<<4) +#define HASH_FLAG_STATIC_KEYS (1<<4) /* long and interned strings */ #define HASH_FLAG_HAS_EMPTY_IND (1<<5) -#define HASH_MASK_CONSISTENCY 0xc0 +#define HT_IS_PACKED(ht) \ + (((ht)->u.flags & HASH_FLAG_PACKED) != 0) + +#define HT_IS_WITHOUT_HOLES(ht) \ + ((ht)->nNumUsed == (ht)->nNumOfElements) + +#define HT_HAS_STATIC_KEYS_ONLY(ht) \ + (((ht)->u.flags & (HASH_FLAG_PACKED|HASH_FLAG_STATIC_KEYS)) != 0) typedef struct _zend_hash_key { zend_ulong h; diff --git b/Zend/zend_strtod_int.h a/Zend/zend_strtod_int.h index c1f66eb..5a6644b 100644 --- b/Zend/zend_strtod_int.h +++ a/Zend/zend_strtod_int.h @@ -68,6 +68,10 @@ typedef unsigned long int uint32_t; #undef USE_LOCALE #endif +#ifndef NO_INFNAN_CHECK +#define NO_INFNAN_CHECK +#endif + #ifdef WORDS_BIGENDIAN #define IEEE_BIG_ENDIAN 1 #else diff --git b/Zend/zend_types.h a/Zend/zend_types.h index 29dec8e..2a10887 100644 --- b/Zend/zend_types.h +++ a/Zend/zend_types.h @@ -182,7 +182,7 @@ struct _zend_array { zend_uchar flags, zend_uchar nApplyCount, zend_uchar nIteratorsCount, - zend_uchar reserve) + zend_uchar consistency) } v; uint32_t flags; } u; diff --git b/Zend/zend_vm_def.h a/Zend/zend_vm_def.h index 2534430..78342a0 100644 --- b/Zend/zend_vm_def.h +++ a/Zend/zend_vm_def.h @@ -3234,15 +3234,19 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|THIS|CV, CONST|T GC_REFCOUNT(obj)++; /* For $this pointer */ } + FREE_OP2(); + FREE_OP1(); + + if ((OP1_TYPE & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - FREE_OP2(); - FREE_OP1(); - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CLASS_FETCH|CONST|VAR, CONST|TMPVAR|UNUSED|CONSTRUCTOR|CV, NUM) @@ -3397,7 +3401,7 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CLASS_FETCH|CONST|VAR, call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY, CONST, NUM) @@ -3461,12 +3465,26 @@ ZEND_VM_C_LABEL(try_function_name): call = NULL; } - FREE_OP2(); - if (UNEXPECTED(!call)) { HANDLE_EXCEPTION(); } + FREE_OP2(); + if (OP2_TYPE & (IS_VAR|IS_TMP_VAR)) { + if (UNEXPECTED(EG(exception))) { + if (call) { + if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) { + zend_string_release(call->func->common.function_name); + zend_free_trampoline(call->func); + } + zend_vm_stack_free_call_frame(call); + } + HANDLE_EXCEPTION(); + } + } else if (UNEXPECTED(!call)) { + HANDLE_EXCEPTION(); + } + call->prev_execute_data = EX(call); EX(call) = call; @@ -3492,6 +3510,17 @@ ZEND_VM_HANDLER(118, ZEND_INIT_USER_CALL, CONST, CONST|TMPVAR|CV, NUM) func = fcc.function_handler; called_scope = fcc.called_scope; object = fcc.object; + if (error) { + efree(error); + /* This is the only soft error is_callable() can generate */ + zend_error(E_DEPRECATED, + "Non-static method %s::%s() should not be called statically", + ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name)); + if (UNEXPECTED(EG(exception) != NULL)) { + FREE_OP2(); + HANDLE_EXCEPTION(); + } + } if (func->common.fn_flags & ZEND_ACC_CLOSURE) { /* Delay closure destruction until its invocation */ if (OP2_TYPE & (IS_VAR|IS_CV)) { @@ -3504,22 +3533,28 @@ ZEND_VM_HANDLER(118, ZEND_INIT_USER_CALL, CONST, CONST|TMPVAR|CV, NUM) call_info |= ZEND_CALL_RELEASE_THIS; GC_REFCOUNT(object)++; /* For $this pointer */ } - if (error) { - efree(error); - /* This is the only soft error is_callable() can generate */ - zend_error(E_DEPRECATED, - "Non-static method %s::%s() should not be called statically", - ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name)); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + + FREE_OP2(); + if ((OP2_TYPE & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) { + if (call_info & ZEND_CALL_CLOSURE) { + zend_object_release((zend_object*)func->common.prototype); } + if (call_info & ZEND_CALL_RELEASE_THIS) { + zend_object_release(object); + } + HANDLE_EXCEPTION(); } + if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) { init_func_run_time_cache(&func->op_array); } } else { zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(EX_CONSTANT(opline->op1)), error); efree(error); + FREE_OP2(); + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } func = (zend_function*)&zend_pass_function; called_scope = NULL; object = NULL; @@ -3530,8 +3565,7 @@ ZEND_VM_HANDLER(118, ZEND_INIT_USER_CALL, CONST, CONST|TMPVAR|CV, NUM) call->prev_execute_data = EX(call); EX(call) = call; - FREE_OP2(); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(69, ZEND_INIT_NS_FCALL_BY_NAME, ANY, CONST, NUM) @@ -4992,7 +5026,7 @@ ZEND_VM_HANDLER(68, ZEND_NEW, UNUSED|CLASS_FETCH|CONST|VAR, ANY, NUM) call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|THIS|CV, ANY) diff --git b/Zend/zend_vm_execute.h a/Zend/zend_vm_execute.h index 4c09072..a8a0466 100644 --- b/Zend/zend_vm_execute.h +++ a/Zend/zend_vm_execute.h @@ -2179,6 +2179,21 @@ try_function_name: HANDLE_EXCEPTION(); } + if (IS_CONST & (IS_VAR|IS_TMP_VAR)) { + if (UNEXPECTED(EG(exception))) { + if (call) { + if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) { + zend_string_release(call->func->common.function_name); + zend_free_trampoline(call->func); + } + zend_vm_stack_free_call_frame(call); + } + HANDLE_EXCEPTION(); + } + } else if (UNEXPECTED(!call)) { + HANDLE_EXCEPTION(); + } + call->prev_execute_data = EX(call); EX(call) = call; @@ -2475,6 +2490,21 @@ try_function_name: HANDLE_EXCEPTION(); } + if (IS_CV & (IS_VAR|IS_TMP_VAR)) { + if (UNEXPECTED(EG(exception))) { + if (call) { + if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) { + zend_string_release(call->func->common.function_name); + zend_free_trampoline(call->func); + } + zend_vm_stack_free_call_frame(call); + } + HANDLE_EXCEPTION(); + } + } else if (UNEXPECTED(!call)) { + HANDLE_EXCEPTION(); + } + call->prev_execute_data = EX(call); EX(call) = call; @@ -2555,12 +2585,26 @@ try_function_name: call = NULL; } - zval_ptr_dtor_nogc(free_op2); - if (UNEXPECTED(!call)) { HANDLE_EXCEPTION(); } + zval_ptr_dtor_nogc(free_op2); + if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) { + if (UNEXPECTED(EG(exception))) { + if (call) { + if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) { + zend_string_release(call->func->common.function_name); + zend_free_trampoline(call->func); + } + zend_vm_stack_free_call_frame(call); + } + HANDLE_EXCEPTION(); + } + } else if (UNEXPECTED(!call)) { + HANDLE_EXCEPTION(); + } + call->prev_execute_data = EX(call); EX(call) = call; @@ -3223,7 +3267,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_HANDLER(ZEND_OP call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -5409,13 +5453,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CO GC_REFCOUNT(obj)++; /* For $this pointer */ } + + if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -5570,7 +5618,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -5592,6 +5640,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONS func = fcc.function_handler; called_scope = fcc.called_scope; object = fcc.object; + if (error) { + efree(error); + /* This is the only soft error is_callable() can generate */ + zend_error(E_DEPRECATED, + "Non-static method %s::%s() should not be called statically", + ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name)); + if (UNEXPECTED(EG(exception) != NULL)) { + + HANDLE_EXCEPTION(); + } + } if (func->common.fn_flags & ZEND_ACC_CLOSURE) { /* Delay closure destruction until its invocation */ if (IS_CONST & (IS_VAR|IS_CV)) { @@ -5604,22 +5663,27 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONS call_info |= ZEND_CALL_RELEASE_THIS; GC_REFCOUNT(object)++; /* For $this pointer */ } - if (error) { - efree(error); - /* This is the only soft error is_callable() can generate */ - zend_error(E_DEPRECATED, - "Non-static method %s::%s() should not be called statically", - ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name)); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + + if ((IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) { + if (call_info & ZEND_CALL_CLOSURE) { + zend_object_release((zend_object*)func->common.prototype); } + if (call_info & ZEND_CALL_RELEASE_THIS) { + zend_object_release(object); + } + HANDLE_EXCEPTION(); } + if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) { init_func_run_time_cache(&func->op_array); } } else { zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(EX_CONSTANT(opline->op1)), error); efree(error); + + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } func = (zend_function*)&zend_pass_function; called_scope = NULL; object = NULL; @@ -5630,7 +5694,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONS call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -7542,7 +7606,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -9304,13 +9368,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV GC_REFCOUNT(obj)++; /* For $this pointer */ } + + if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -9465,7 +9533,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -9487,6 +9555,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_H func = fcc.function_handler; called_scope = fcc.called_scope; object = fcc.object; + if (error) { + efree(error); + /* This is the only soft error is_callable() can generate */ + zend_error(E_DEPRECATED, + "Non-static method %s::%s() should not be called statically", + ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name)); + if (UNEXPECTED(EG(exception) != NULL)) { + + HANDLE_EXCEPTION(); + } + } if (func->common.fn_flags & ZEND_ACC_CLOSURE) { /* Delay closure destruction until its invocation */ if (IS_CV & (IS_VAR|IS_CV)) { @@ -9499,22 +9578,27 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_H call_info |= ZEND_CALL_RELEASE_THIS; GC_REFCOUNT(object)++; /* For $this pointer */ } - if (error) { - efree(error); - /* This is the only soft error is_callable() can generate */ - zend_error(E_DEPRECATED, - "Non-static method %s::%s() should not be called statically", - ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name)); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + + if ((IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) { + if (call_info & ZEND_CALL_CLOSURE) { + zend_object_release((zend_object*)func->common.prototype); } + if (call_info & ZEND_CALL_RELEASE_THIS) { + zend_object_release(object); + } + HANDLE_EXCEPTION(); } + if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) { init_func_run_time_cache(&func->op_array); } } else { zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(EX_CONSTANT(opline->op1)), error); efree(error); + + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } func = (zend_function*)&zend_pass_function; called_scope = NULL; object = NULL; @@ -9525,7 +9609,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_H call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -11262,14 +11346,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TM GC_REFCOUNT(obj)++; /* For $this pointer */ } + zval_ptr_dtor_nogc(free_op2); + + if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - zval_ptr_dtor_nogc(free_op2); - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -11424,7 +11512,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -11446,6 +11534,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPV func = fcc.function_handler; called_scope = fcc.called_scope; object = fcc.object; + if (error) { + efree(error); + /* This is the only soft error is_callable() can generate */ + zend_error(E_DEPRECATED, + "Non-static method %s::%s() should not be called statically", + ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name)); + if (UNEXPECTED(EG(exception) != NULL)) { + zval_ptr_dtor_nogc(free_op2); + HANDLE_EXCEPTION(); + } + } if (func->common.fn_flags & ZEND_ACC_CLOSURE) { /* Delay closure destruction until its invocation */ if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) { @@ -11458,22 +11557,28 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPV call_info |= ZEND_CALL_RELEASE_THIS; GC_REFCOUNT(object)++; /* For $this pointer */ } - if (error) { - efree(error); - /* This is the only soft error is_callable() can generate */ - zend_error(E_DEPRECATED, - "Non-static method %s::%s() should not be called statically", - ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name)); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + + zval_ptr_dtor_nogc(free_op2); + if (((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) { + if (call_info & ZEND_CALL_CLOSURE) { + zend_object_release((zend_object*)func->common.prototype); + } + if (call_info & ZEND_CALL_RELEASE_THIS) { + zend_object_release(object); } + HANDLE_EXCEPTION(); } + if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) { init_func_run_time_cache(&func->op_array); } } else { zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(EX_CONSTANT(opline->op1)), error); efree(error); + zval_ptr_dtor_nogc(free_op2); + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } func = (zend_function*)&zend_pass_function; called_scope = NULL; object = NULL; @@ -11484,8 +11589,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPV call->prev_execute_data = EX(call); EX(call) = call; - zval_ptr_dtor_nogc(free_op2); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -16223,7 +16327,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_HANDLER(ZEND_OPCO call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -19840,7 +19944,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -21733,7 +21837,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -24680,7 +24784,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -27515,7 +27619,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -27842,7 +27946,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_HANDLER(ZEND_O call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -29424,13 +29528,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C GC_REFCOUNT(obj)++; /* For $this pointer */ } + + if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -29585,7 +29693,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -30383,7 +30491,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -32106,13 +32214,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C GC_REFCOUNT(obj)++; /* For $this pointer */ } + + if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -32267,7 +32379,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -33994,14 +34106,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_T GC_REFCOUNT(obj)++; /* For $this pointer */ } + zval_ptr_dtor_nogc(free_op2); + + if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - zval_ptr_dtor_nogc(free_op2); - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -34156,7 +34272,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -39583,13 +39699,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST GC_REFCOUNT(obj)++; /* For $this pointer */ } + + if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -46553,13 +46673,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HA GC_REFCOUNT(obj)++; /* For $this pointer */ } + + if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -50512,14 +50636,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVA GC_REFCOUNT(obj)++; /* For $this pointer */ } + zval_ptr_dtor_nogc(free_op2); + + if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - zval_ptr_dtor_nogc(free_op2); - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -52728,14 +52856,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C GC_REFCOUNT(obj)++; /* For $this pointer */ } + zval_ptr_dtor_nogc(free_op1); + + if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - zval_ptr_dtor_nogc(free_op1); - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -55126,14 +55258,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C GC_REFCOUNT(obj)++; /* For $this pointer */ } + zval_ptr_dtor_nogc(free_op1); + + if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - zval_ptr_dtor_nogc(free_op1); - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -56407,15 +56543,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_T GC_REFCOUNT(obj)++; /* For $this pointer */ } + zval_ptr_dtor_nogc(free_op2); + zval_ptr_dtor_nogc(free_op1); + + if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - zval_ptr_dtor_nogc(free_op2); - zval_ptr_dtor_nogc(free_op1); - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) diff --git b/configure.in a/configure.in index 5035e10..5de49d1 100644 --- b/configure.in +++ a/configure.in @@ -120,7 +120,7 @@ int zend_sprintf(char *buffer, const char *format, ...); PHP_MAJOR_VERSION=7 PHP_MINOR_VERSION=1 PHP_RELEASE_VERSION=0 -PHP_EXTRA_VERSION="RC4" +PHP_EXTRA_VERSION="RC5" 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` diff --git b/ext/date/lib/timezonedb.h a/ext/date/lib/timezonedb.h index cead481..524fc1f 100644 --- b/ext/date/lib/timezonedb.h +++ a/ext/date/lib/timezonedb.h @@ -259,347 +259,347 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[590] = { { "Asia/Chongqing" , FOR_V2(0x045A20, 0x01B2C7) }, { "Asia/Chungking" , FOR_V2(0x045BCA, 0x01B378) }, { "Asia/Colombo" , FOR_V2(0x045D74, 0x01B429) }, - { "Asia/Dacca" , FOR_V2(0x045F05, 0x01B4DE) }, - { "Asia/Damascus" , FOR_V2(0x046097, 0x01B595) }, - { "Asia/Dhaka" , FOR_V2(0x0469B3, 0x01B8EA) }, - { "Asia/Dili" , FOR_V2(0x046B45, 0x01B9A1) }, - { "Asia/Dubai" , FOR_V2(0x046C86, 0x01BA38) }, - { "Asia/Dushanbe" , FOR_V2(0x046D3D, 0x01BA92) }, - { "Asia/Gaza" , FOR_V2(0x046FB6, 0x01BB9C) }, - { "Asia/Harbin" , FOR_V2(0x0478D5, 0x01BF00) }, - { "Asia/Hebron" , FOR_V2(0x047A7F, 0x01BFB1) }, - { "Asia/Ho_Chi_Minh" , FOR_V2(0x0483B9, 0x01C31E) }, - { "Asia/Hong_Kong" , FOR_V2(0x04853A, 0x01C3CD) }, - { "Asia/Hovd" , FOR_V2(0x0489EB, 0x01C59C) }, - { "Asia/Irkutsk" , FOR_V2(0x04900B, 0x01C7FF) }, - { "Asia/Istanbul" , FOR_V2(0x04952D, 0x01CA14) }, - { "Asia/Jakarta" , FOR_V2(0x049DAF, 0x01CD4C) }, - { "Asia/Jayapura" , FOR_V2(0x049F3A, 0x01CE06) }, - { "Asia/Jerusalem" , FOR_V2(0x04A06D, 0x01CEB5) }, - { "Asia/Kabul" , FOR_V2(0x04A952, 0x01D1FD) }, - { "Asia/Kamchatka" , FOR_V2(0x04AA25, 0x01D25F) }, - { "Asia/Karachi" , FOR_V2(0x04AEF1, 0x01D44B) }, - { "Asia/Kashgar" , FOR_V2(0x04B090, 0x01D505) }, - { "Asia/Kathmandu" , FOR_V2(0x04B147, 0x01D55F) }, - { "Asia/Katmandu" , FOR_V2(0x04B227, 0x01D5CA) }, - { "Asia/Khandyga" , FOR_V2(0x04B307, 0x01D635) }, - { "Asia/Kolkata" , FOR_V2(0x04B850, 0x01D860) }, - { "Asia/Krasnoyarsk" , FOR_V2(0x04B97F, 0x01D8EA) }, - { "Asia/Kuala_Lumpur" , FOR_V2(0x04BE7F, 0x01DAF2) }, - { "Asia/Kuching" , FOR_V2(0x04C02D, 0x01DBC1) }, - { "Asia/Kuwait" , FOR_V2(0x04C24E, 0x01DCB3) }, - { "Asia/Macao" , FOR_V2(0x04C305, 0x01DD0D) }, - { "Asia/Macau" , FOR_V2(0x04C62C, 0x01DE4D) }, - { "Asia/Magadan" , FOR_V2(0x04C953, 0x01DF8D) }, - { "Asia/Makassar" , FOR_V2(0x04CE59, 0x01E191) }, - { "Asia/Manila" , FOR_V2(0x04CFC6, 0x01E264) }, - { "Asia/Muscat" , FOR_V2(0x04D13B, 0x01E302) }, - { "Asia/Nicosia" , FOR_V2(0x04D1F2, 0x01E35C) }, - { "Asia/Novokuznetsk" , FOR_V2(0x04D9DE, 0x01E649) }, - { "Asia/Novosibirsk" , FOR_V2(0x04DEA8, 0x01E834) }, - { "Asia/Omsk" , FOR_V2(0x04E3AF, 0x01EA39) }, - { "Asia/Oral" , FOR_V2(0x04E8A3, 0x01EC35) }, - { "Asia/Phnom_Penh" , FOR_V2(0x04ECC5, 0x01EDE5) }, - { "Asia/Pontianak" , FOR_V2(0x04ED9D, 0x01EE4B) }, - { "Asia/Pyongyang" , FOR_V2(0x04EF36, 0x01EF13) }, - { "Asia/Qatar" , FOR_V2(0x04F07A, 0x01EFAA) }, - { "Asia/Qyzylorda" , FOR_V2(0x04F157, 0x01F015) }, - { "Asia/Rangoon" , FOR_V2(0x04F597, 0x01F1DB) }, - { "Asia/Riyadh" , FOR_V2(0x04F6C0, 0x01F264) }, - { "Asia/Saigon" , FOR_V2(0x04F777, 0x01F2BE) }, - { "Asia/Sakhalin" , FOR_V2(0x04F8F8, 0x01F36D) }, - { "Asia/Samarkand" , FOR_V2(0x04FDEE, 0x01F56D) }, - { "Asia/Seoul" , FOR_V2(0x050076, 0x01F685) }, - { "Asia/Shanghai" , FOR_V2(0x0502BD, 0x01F77D) }, - { "Asia/Singapore" , FOR_V2(0x050473, 0x01F83A) }, - { "Asia/Srednekolymsk" , FOR_V2(0x05062B, 0x01F902) }, - { "Asia/Taipei" , FOR_V2(0x050B35, 0x01FB13) }, - { "Asia/Tashkent" , FOR_V2(0x050E61, 0x01FC55) }, - { "Asia/Tbilisi" , FOR_V2(0x0510F9, 0x01FD75) }, - { "Asia/Tehran" , FOR_V2(0x05153D, 0x01FF28) }, - { "Asia/Tel_Aviv" , FOR_V2(0x051BD7, 0x0201A3) }, - { "Asia/Thimbu" , FOR_V2(0x0524BC, 0x0204EB) }, - { "Asia/Thimphu" , FOR_V2(0x052599, 0x020556) }, - { "Asia/Tokyo" , FOR_V2(0x052676, 0x0205C1) }, - { "Asia/Tomsk" , FOR_V2(0x0527E5, 0x020658) }, - { "Asia/Ujung_Pandang" , FOR_V2(0x052CE6, 0x020857) }, - { "Asia/Ulaanbaatar" , FOR_V2(0x052E0A, 0x0208E1) }, - { "Asia/Ulan_Bator" , FOR_V2(0x053414, 0x020B2E) }, - { "Asia/Urumqi" , FOR_V2(0x053A09, 0x020D66) }, - { "Asia/Ust-Nera" , FOR_V2(0x053ACD, 0x020DCD) }, - { "Asia/Vientiane" , FOR_V2(0x053FF7, 0x020FE5) }, - { "Asia/Vladivostok" , FOR_V2(0x0540CF, 0x02104B) }, - { "Asia/Yakutsk" , FOR_V2(0x0545CA, 0x02124D) }, - { "Asia/Yangon" , FOR_V2(0x054AC4, 0x02144F) }, - { "Asia/Yekaterinburg" , FOR_V2(0x054BED, 0x0214D8) }, - { "Asia/Yerevan" , FOR_V2(0x055108, 0x0216E6) }, - { "Atlantic/Azores" , FOR_V2(0x0555C3, 0x0218C3) }, - { "Atlantic/Bermuda" , FOR_V2(0x056375, 0x021DD7) }, - { "Atlantic/Canary" , FOR_V2(0x056B55, 0x0220BD) }, - { "Atlantic/Cape_Verde" , FOR_V2(0x0572E8, 0x022398) }, - { "Atlantic/Faeroe" , FOR_V2(0x0573F2, 0x022416) }, - { "Atlantic/Faroe" , FOR_V2(0x057B23, 0x0226BF) }, - { "Atlantic/Jan_Mayen" , FOR_V2(0x058254, 0x022968) }, - { "Atlantic/Madeira" , FOR_V2(0x058B2B, 0x022CAB) }, - { "Atlantic/Reykjavik" , FOR_V2(0x0598DC, 0x0231C5) }, - { "Atlantic/South_Georgia" , FOR_V2(0x059D8E, 0x023397) }, - { "Atlantic/St_Helena" , FOR_V2(0x059E2E, 0x0233DB) }, - { "Atlantic/Stanley" , FOR_V2(0x059EE4, 0x023435) }, - { "Australia/ACT" , FOR_V2(0x05A3CE, 0x02361C) }, - { "Australia/Adelaide" , FOR_V2(0x05AC89, 0x023950) }, - { "Australia/Brisbane" , FOR_V2(0x05B562, 0x023C8F) }, - { "Australia/Broken_Hill" , FOR_V2(0x05B749, 0x023D69) }, - { "Australia/Canberra" , FOR_V2(0x05C053, 0x0240BA) }, - { "Australia/Currie" , FOR_V2(0x05C90E, 0x0243EE) }, - { "Australia/Darwin" , FOR_V2(0x05D1DF, 0x024738) }, - { "Australia/Eucla" , FOR_V2(0x05D340, 0x0247D1) }, - { "Australia/Hobart" , FOR_V2(0x05D54C, 0x0248B9) }, - { "Australia/LHI" , FOR_V2(0x05DE8C, 0x024C2A) }, - { "Australia/Lindeman" , FOR_V2(0x05E5DB, 0x024EDC) }, - { "Australia/Lord_Howe" , FOR_V2(0x05E810, 0x024FD7) }, - { "Australia/Melbourne" , FOR_V2(0x05EF6F, 0x025299) }, - { "Australia/North" , FOR_V2(0x05F832, 0x0255D5) }, - { "Australia/NSW" , FOR_V2(0x05F981, 0x02565C) }, - { "Australia/Perth" , FOR_V2(0x06023C, 0x025990) }, - { "Australia/Queensland" , FOR_V2(0x060445, 0x025A7B) }, - { "Australia/South" , FOR_V2(0x060615, 0x025B3E) }, - { "Australia/Sydney" , FOR_V2(0x060EDF, 0x025E6E) }, - { "Australia/Tasmania" , FOR_V2(0x0617B6, 0x0261BE) }, - { "Australia/Victoria" , FOR_V2(0x0620E1, 0x02651A) }, - { "Australia/West" , FOR_V2(0x06299C, 0x02684E) }, - { "Australia/Yancowinna" , FOR_V2(0x062B87, 0x02691B) }, - { "Brazil/Acre" , FOR_V2(0x063475, 0x026C50) }, - { "Brazil/DeNoronha" , FOR_V2(0x063711, 0x026D61) }, - { "Brazil/East" , FOR_V2(0x0639F5, 0x026E86) }, - { "Brazil/West" , FOR_V2(0x0641E0, 0x027168) }, - { "Canada/Atlantic" , FOR_V2(0x064454, 0x027265) }, - { "Canada/Central" , FOR_V2(0x0651CE, 0x027752) }, - { "Canada/East-Saskatchewan" , FOR_V2(0x065D25, 0x027B7D) }, - { "Canada/Eastern" , FOR_V2(0x066113, 0x027D0B) }, - { "Canada/Mountain" , FOR_V2(0x066ECE, 0x02820C) }, - { "Canada/Newfoundland" , FOR_V2(0x06783C, 0x028587) }, - { "Canada/Pacific" , FOR_V2(0x068698, 0x028ACB) }, - { "Canada/Saskatchewan" , FOR_V2(0x0691F9, 0x028EF5) }, - { "Canada/Yukon" , FOR_V2(0x0695E7, 0x029083) }, - { "CET" , FOR_V2(0x069E20, 0x029397) }, - { "Chile/Continental" , FOR_V2(0x06A662, 0x0296A0) }, - { "Chile/EasterIsland" , FOR_V2(0x06B041, 0x029A44) }, - { "CST6CDT" , FOR_V2(0x06B8FE, 0x029D7E) }, - { "Cuba" , FOR_V2(0x06C200, 0x02A0CF) }, - { "EET" , FOR_V2(0x06CB91, 0x02A453) }, - { "Egypt" , FOR_V2(0x06D2F1, 0x02A706) }, - { "Eire" , FOR_V2(0x06DAB1, 0x02A9E6) }, - { "EST" , FOR_V2(0x06E8A4, 0x02AF08) }, - { "EST5EDT" , FOR_V2(0x06E92F, 0x02AF4C) }, - { "Etc/GMT" , FOR_V2(0x06F231, 0x02B29D) }, - { "Etc/GMT+0" , FOR_V2(0x06F2BC, 0x02B2E1) }, - { "Etc/GMT+1" , FOR_V2(0x06F347, 0x02B325) }, - { "Etc/GMT+10" , FOR_V2(0x06F3E7, 0x02B373) }, - { "Etc/GMT+11" , FOR_V2(0x06F488, 0x02B3C1) }, - { "Etc/GMT+12" , FOR_V2(0x06F529, 0x02B40F) }, - { "Etc/GMT+2" , FOR_V2(0x06F5CA, 0x02B45D) }, - { "Etc/GMT+3" , FOR_V2(0x06F66A, 0x02B4AB) }, - { "Etc/GMT+4" , FOR_V2(0x06F70A, 0x02B4F9) }, - { "Etc/GMT+5" , FOR_V2(0x06F7AA, 0x02B547) }, - { "Etc/GMT+6" , FOR_V2(0x06F84A, 0x02B595) }, - { "Etc/GMT+7" , FOR_V2(0x06F8EA, 0x02B5E3) }, - { "Etc/GMT+8" , FOR_V2(0x06F98A, 0x02B631) }, - { "Etc/GMT+9" , FOR_V2(0x06FA2A, 0x02B67F) }, - { "Etc/GMT-0" , FOR_V2(0x06FACA, 0x02B6CD) }, - { "Etc/GMT-1" , FOR_V2(0x06FB55, 0x02B711) }, - { "Etc/GMT-10" , FOR_V2(0x06FBF6, 0x02B75F) }, - { "Etc/GMT-11" , FOR_V2(0x06FC98, 0x02B7AD) }, - { "Etc/GMT-12" , FOR_V2(0x06FD3A, 0x02B7FB) }, - { "Etc/GMT-13" , FOR_V2(0x06FDDC, 0x02B849) }, - { "Etc/GMT-14" , FOR_V2(0x06FE7E, 0x02B897) }, - { "Etc/GMT-2" , FOR_V2(0x06FF20, 0x02B8E5) }, - { "Etc/GMT-3" , FOR_V2(0x06FFC1, 0x02B933) }, - { "Etc/GMT-4" , FOR_V2(0x070062, 0x02B981) }, - { "Etc/GMT-5" , FOR_V2(0x070103, 0x02B9CF) }, - { "Etc/GMT-6" , FOR_V2(0x0701A4, 0x02BA1D) }, - { "Etc/GMT-7" , FOR_V2(0x070245, 0x02BA6B) }, - { "Etc/GMT-8" , FOR_V2(0x0702E6, 0x02BAB9) }, - { "Etc/GMT-9" , FOR_V2(0x070387, 0x02BB07) }, - { "Etc/GMT0" , FOR_V2(0x070428, 0x02BB55) }, - { "Etc/Greenwich" , FOR_V2(0x0704B3, 0x02BB99) }, - { "Etc/UCT" , FOR_V2(0x07053E, 0x02BBDD) }, - { "Etc/Universal" , FOR_V2(0x0705C9, 0x02BC21) }, - { "Etc/UTC" , FOR_V2(0x070654, 0x02BC65) }, - { "Etc/Zulu" , FOR_V2(0x0706DF, 0x02BCA9) }, - { "Europe/Amsterdam" , FOR_V2(0x07076A, 0x02BCED) }, - { "Europe/Andorra" , FOR_V2(0x0712F5, 0x02C13C) }, - { "Europe/Astrakhan" , FOR_V2(0x0719D8, 0x02C3C9) }, - { "Europe/Athens" , FOR_V2(0x071EA3, 0x02C5B5) }, - { "Europe/Belfast" , FOR_V2(0x07278E, 0x02C909) }, - { "Europe/Belgrade" , FOR_V2(0x073601, 0x02CE51) }, - { "Europe/Berlin" , FOR_V2(0x073DB2, 0x02D12B) }, - { "Europe/Bratislava" , FOR_V2(0x0746F1, 0x02D4A6) }, - { "Europe/Brussels" , FOR_V2(0x074FDD, 0x02D7E9) }, - { "Europe/Bucharest" , FOR_V2(0x075B83, 0x02DC31) }, - { "Europe/Budapest" , FOR_V2(0x07643C, 0x02DF6C) }, - { "Europe/Busingen" , FOR_V2(0x076DAD, 0x02E2E6) }, - { "Europe/Chisinau" , FOR_V2(0x07753F, 0x02E5AE) }, - { "Europe/Copenhagen" , FOR_V2(0x077ED8, 0x02E952) }, - { "Europe/Dublin" , FOR_V2(0x078754, 0x02EC6D) }, - { "Europe/Gibraltar" , FOR_V2(0x079547, 0x02F18F) }, - { "Europe/Guernsey" , FOR_V2(0x07A148, 0x02F5F7) }, - { "Europe/Helsinki" , FOR_V2(0x07AFBB, 0x02FB3F) }, - { "Europe/Isle_of_Man" , FOR_V2(0x07B73C, 0x02FE06) }, - { "Europe/Istanbul" , FOR_V2(0x07C5AF, 0x03034E) }, - { "Europe/Jersey" , FOR_V2(0x07CE31, 0x030686) }, - { "Europe/Kaliningrad" , FOR_V2(0x07DCA4, 0x030BCE) }, - { "Europe/Kiev" , FOR_V2(0x07E2B2, 0x030E3F) }, - { "Europe/Kirov" , FOR_V2(0x07EB03, 0x031172) }, - { "Europe/Lisbon" , FOR_V2(0x07EFAC, 0x03134D) }, - { "Europe/Ljubljana" , FOR_V2(0x07FD48, 0x031861) }, - { "Europe/London" , FOR_V2(0x0804F9, 0x031B3B) }, - { "Europe/Luxembourg" , FOR_V2(0x08136C, 0x032083) }, - { "Europe/Madrid" , FOR_V2(0x081F16, 0x0324DE) }, - { "Europe/Malta" , FOR_V2(0x08296D, 0x0328BD) }, - { "Europe/Mariehamn" , FOR_V2(0x0833BE, 0x032C87) }, - { "Europe/Minsk" , FOR_V2(0x083B3F, 0x032F4E) }, - { "Europe/Monaco" , FOR_V2(0x0840A5, 0x033172) }, - { "Europe/Moscow" , FOR_V2(0x084C3A, 0x0335BE) }, - { "Europe/Nicosia" , FOR_V2(0x085262, 0x03383E) }, - { "Europe/Oslo" , FOR_V2(0x085A4E, 0x033B2B) }, - { "Europe/Paris" , FOR_V2(0x086325, 0x033E6E) }, - { "Europe/Podgorica" , FOR_V2(0x086ECC, 0x0342C5) }, - { "Europe/Prague" , FOR_V2(0x08767D, 0x03459F) }, - { "Europe/Riga" , FOR_V2(0x087F69, 0x0348E2) }, - { "Europe/Rome" , FOR_V2(0x088830, 0x034C38) }, - { "Europe/Samara" , FOR_V2(0x0892B2, 0x03500C) }, - { "Europe/San_Marino" , FOR_V2(0x0897BC, 0x03521B) }, - { "Europe/Sarajevo" , FOR_V2(0x08A23E, 0x0355EF) }, - { "Europe/Simferopol" , FOR_V2(0x08A9EF, 0x0358C9) }, - { "Europe/Skopje" , FOR_V2(0x08AFDC, 0x035B2B) }, - { "Europe/Sofia" , FOR_V2(0x08B78D, 0x035E05) }, - { "Europe/Stockholm" , FOR_V2(0x08BFEB, 0x03611E) }, - { "Europe/Tallinn" , FOR_V2(0x08C775, 0x0363DE) }, - { "Europe/Tirane" , FOR_V2(0x08D00C, 0x036724) }, - { "Europe/Tiraspol" , FOR_V2(0x08D84A, 0x036A2F) }, - { "Europe/Ulyanovsk" , FOR_V2(0x08E1E3, 0x036DD3) }, - { "Europe/Uzhgorod" , FOR_V2(0x08E702, 0x036FE5) }, - { "Europe/Vaduz" , FOR_V2(0x08EF4D, 0x03730D) }, - { "Europe/Vatican" , FOR_V2(0x08F6D7, 0x0375CD) }, - { "Europe/Vienna" , FOR_V2(0x090159, 0x0379A1) }, - { "Europe/Vilnius" , FOR_V2(0x090A22, 0x037CDF) }, - { "Europe/Volgograd" , FOR_V2(0x0912C5, 0x03802F) }, - { "Europe/Warsaw" , FOR_V2(0x09177B, 0x038217) }, - { "Europe/Zagreb" , FOR_V2(0x092218, 0x038609) }, - { "Europe/Zaporozhye" , FOR_V2(0x0929C9, 0x0388E3) }, - { "Europe/Zurich" , FOR_V2(0x093242, 0x038C35) }, - { "Factory" , FOR_V2(0x0939CC, 0x038EF5) }, - { "GB" , FOR_V2(0x093A6C, 0x038F43) }, - { "GB-Eire" , FOR_V2(0x0948DF, 0x03948B) }, - { "GMT" , FOR_V2(0x095752, 0x0399D3) }, - { "GMT+0" , FOR_V2(0x0957DD, 0x039A17) }, - { "GMT-0" , FOR_V2(0x095868, 0x039A5B) }, - { "GMT0" , FOR_V2(0x0958F3, 0x039A9F) }, - { "Greenwich" , FOR_V2(0x09597E, 0x039AE3) }, - { "Hongkong" , FOR_V2(0x095A09, 0x039B27) }, - { "HST" , FOR_V2(0x095EBA, 0x039CF6) }, - { "Iceland" , FOR_V2(0x095F46, 0x039D3A) }, - { "Indian/Antananarivo" , FOR_V2(0x0963F8, 0x039F0C) }, - { "Indian/Chagos" , FOR_V2(0x09651F, 0x039F98) }, - { "Indian/Christmas" , FOR_V2(0x0965F4, 0x039FFF) }, - { "Indian/Cocos" , FOR_V2(0x096695, 0x03A043) }, - { "Indian/Comoro" , FOR_V2(0x096739, 0x03A087) }, - { "Indian/Kerguelen" , FOR_V2(0x096860, 0x03A113) }, - { "Indian/Mahe" , FOR_V2(0x096927, 0x03A172) }, - { "Indian/Maldives" , FOR_V2(0x0969DE, 0x03A1CC) }, - { "Indian/Mauritius" , FOR_V2(0x096AB6, 0x03A232) }, - { "Indian/Mayotte" , FOR_V2(0x096BBF, 0x03A2AD) }, - { "Indian/Reunion" , FOR_V2(0x096CE6, 0x03A339) }, - { "Iran" , FOR_V2(0x096D9D, 0x03A393) }, - { "Israel" , FOR_V2(0x097437, 0x03A60E) }, - { "Jamaica" , FOR_V2(0x097D1C, 0x03A956) }, - { "Japan" , FOR_V2(0x097F23, 0x03AA2C) }, - { "Kwajalein" , FOR_V2(0x098092, 0x03AAC3) }, - { "Libya" , FOR_V2(0x09818B, 0x03AB37) }, - { "MET" , FOR_V2(0x098426, 0x03AC45) }, - { "Mexico/BajaNorte" , FOR_V2(0x098C68, 0x03AF4E) }, - { "Mexico/BajaSur" , FOR_V2(0x0995A8, 0x03B2BC) }, - { "Mexico/General" , FOR_V2(0x099BD0, 0x03B50E) }, - { "MST" , FOR_V2(0x09A22E, 0x03B771) }, - { "MST7MDT" , FOR_V2(0x09A2B9, 0x03B7B5) }, - { "Navajo" , FOR_V2(0x09ABBB, 0x03BB06) }, - { "NZ" , FOR_V2(0x09B55C, 0x03BE90) }, - { "NZ-CHAT" , FOR_V2(0x09BF04, 0x03C21F) }, - { "Pacific/Apia" , FOR_V2(0x09C719, 0x03C514) }, - { "Pacific/Auckland" , FOR_V2(0x09CB73, 0x03C6BD) }, - { "Pacific/Bougainville" , FOR_V2(0x09D533, 0x03CA64) }, - { "Pacific/Chatham" , FOR_V2(0x09D663, 0x03CAED) }, - { "Pacific/Chuuk" , FOR_V2(0x09DE87, 0x03CDF1) }, - { "Pacific/Easter" , FOR_V2(0x09DF3B, 0x03CE45) }, - { "Pacific/Efate" , FOR_V2(0x09E805, 0x03D18C) }, - { "Pacific/Enderbury" , FOR_V2(0x09E9EF, 0x03D257) }, - { "Pacific/Fakaofo" , FOR_V2(0x09EAF0, 0x03D2D6) }, - { "Pacific/Fiji" , FOR_V2(0x09EBC1, 0x03D338) }, - { "Pacific/Funafuti" , FOR_V2(0x09EFFE, 0x03D4D0) }, - { "Pacific/Galapagos" , FOR_V2(0x09F0A0, 0x03D514) }, - { "Pacific/Gambier" , FOR_V2(0x09F190, 0x03D591) }, - { "Pacific/Guadalcanal" , FOR_V2(0x09F258, 0x03D5FB) }, - { "Pacific/Guam" , FOR_V2(0x09F310, 0x03D655) }, - { "Pacific/Honolulu" , FOR_V2(0x09F3FD, 0x03D6BC) }, - { "Pacific/Johnston" , FOR_V2(0x09F523, 0x03D744) }, - { "Pacific/Kiritimati" , FOR_V2(0x09F651, 0x03D7D4) }, - { "Pacific/Kosrae" , FOR_V2(0x09F74F, 0x03D850) }, - { "Pacific/Kwajalein" , FOR_V2(0x09F847, 0x03D8C6) }, - { "Pacific/Majuro" , FOR_V2(0x09F949, 0x03D943) }, - { "Pacific/Marquesas" , FOR_V2(0x09FA37, 0x03D9C2) }, - { "Pacific/Midway" , FOR_V2(0x09FB04, 0x03DA2E) }, - { "Pacific/Nauru" , FOR_V2(0x09FC2E, 0x03DAC0) }, - { "Pacific/Niue" , FOR_V2(0x09FD38, 0x03DB3D) }, - { "Pacific/Norfolk" , FOR_V2(0x09FE26, 0x03DBAC) }, - { "Pacific/Noumea" , FOR_V2(0x09FF53, 0x03DC36) }, - { "Pacific/Pago_Pago" , FOR_V2(0x0A0099, 0x03DCCB) }, - { "Pacific/Palau" , FOR_V2(0x0A01B5, 0x03DD4F) }, - { "Pacific/Pitcairn" , FOR_V2(0x0A0256, 0x03DD93) }, - { "Pacific/Pohnpei" , FOR_V2(0x0A032D, 0x03DDF9) }, - { "Pacific/Ponape" , FOR_V2(0x0A03E0, 0x03DE4C) }, - { "Pacific/Port_Moresby" , FOR_V2(0x0A0485, 0x03DE91) }, - { "Pacific/Rarotonga" , FOR_V2(0x0A055A, 0x03DEF2) }, - { "Pacific/Saipan" , FOR_V2(0x0A07A4, 0x03DFDF) }, - { "Pacific/Samoa" , FOR_V2(0x0A0891, 0x03E046) }, - { "Pacific/Tahiti" , FOR_V2(0x0A09AD, 0x03E0CA) }, - { "Pacific/Tarawa" , FOR_V2(0x0A0A76, 0x03E134) }, - { "Pacific/Tongatapu" , FOR_V2(0x0A0B2A, 0x03E188) }, - { "Pacific/Truk" , FOR_V2(0x0A0C89, 0x03E225) }, - { "Pacific/Wake" , FOR_V2(0x0A0D2E, 0x03E26A) }, - { "Pacific/Wallis" , FOR_V2(0x0A0DDE, 0x03E2BA) }, - { "Pacific/Yap" , FOR_V2(0x0A0E80, 0x03E2FE) }, - { "Poland" , FOR_V2(0x0A0F25, 0x03E343) }, - { "Portugal" , FOR_V2(0x0A19C2, 0x03E735) }, - { "PRC" , FOR_V2(0x0A274B, 0x03EC36) }, - { "PST8PDT" , FOR_V2(0x0A28F5, 0x03ECE7) }, - { "ROC" , FOR_V2(0x0A31F7, 0x03F038) }, - { "ROK" , FOR_V2(0x0A3523, 0x03F17A) }, - { "Singapore" , FOR_V2(0x0A376A, 0x03F272) }, - { "Turkey" , FOR_V2(0x0A3922, 0x03F33A) }, - { "UCT" , FOR_V2(0x0A41A4, 0x03F672) }, - { "Universal" , FOR_V2(0x0A422F, 0x03F6B6) }, - { "US/Alaska" , FOR_V2(0x0A42BA, 0x03F6FA) }, - { "US/Aleutian" , FOR_V2(0x0A4C16, 0x03FA74) }, - { "US/Arizona" , FOR_V2(0x0A555F, 0x03FDE5) }, - { "US/Central" , FOR_V2(0x0A56CC, 0x03FE84) }, - { "US/East-Indiana" , FOR_V2(0x0A64D9, 0x0403A8) }, - { "US/Eastern" , FOR_V2(0x0A6B70, 0x040623) }, - { "US/Hawaii" , FOR_V2(0x0A7955, 0x040B33) }, - { "US/Indiana-Starke" , FOR_V2(0x0A7A75, 0x040BB5) }, - { "US/Michigan" , FOR_V2(0x0A8406, 0x040F3F) }, - { "US/Mountain" , FOR_V2(0x0A8CBA, 0x04127B) }, - { "US/Pacific" , FOR_V2(0x0A965B, 0x041605) }, - { "US/Pacific-New" , FOR_V2(0x0AA184, 0x041A1B) }, - { "US/Samoa" , FOR_V2(0x0AACAD, 0x041E31) }, - { "UTC" , FOR_V2(0x0AADC9, 0x041EB5) }, - { "W-SU" , FOR_V2(0x0AAE54, 0x041EF9) }, - { "WET" , FOR_V2(0x0AB468, 0x042165) }, - { "Zulu" , FOR_V2(0x0ABBC5, 0x042418) }, + { "Asia/Dacca" , FOR_V2(0x045F1D, 0x01B4E6) }, + { "Asia/Damascus" , FOR_V2(0x0460AF, 0x01B59D) }, + { "Asia/Dhaka" , FOR_V2(0x0469CB, 0x01B8F2) }, + { "Asia/Dili" , FOR_V2(0x046B5D, 0x01B9A9) }, + { "Asia/Dubai" , FOR_V2(0x046C9E, 0x01BA40) }, + { "Asia/Dushanbe" , FOR_V2(0x046D55, 0x01BA9A) }, + { "Asia/Gaza" , FOR_V2(0x046FCE, 0x01BBA4) }, + { "Asia/Harbin" , FOR_V2(0x0478EB, 0x01BF08) }, + { "Asia/Hebron" , FOR_V2(0x047A95, 0x01BFB9) }, + { "Asia/Ho_Chi_Minh" , FOR_V2(0x0483CD, 0x01C326) }, + { "Asia/Hong_Kong" , FOR_V2(0x04854E, 0x01C3D5) }, + { "Asia/Hovd" , FOR_V2(0x0489FF, 0x01C5A4) }, + { "Asia/Irkutsk" , FOR_V2(0x04901F, 0x01C807) }, + { "Asia/Istanbul" , FOR_V2(0x049541, 0x01CA1C) }, + { "Asia/Jakarta" , FOR_V2(0x049DC3, 0x01CD54) }, + { "Asia/Jayapura" , FOR_V2(0x049F4E, 0x01CE0E) }, + { "Asia/Jerusalem" , FOR_V2(0x04A081, 0x01CEBD) }, + { "Asia/Kabul" , FOR_V2(0x04A966, 0x01D205) }, + { "Asia/Kamchatka" , FOR_V2(0x04AA39, 0x01D267) }, + { "Asia/Karachi" , FOR_V2(0x04AF05, 0x01D453) }, + { "Asia/Kashgar" , FOR_V2(0x04B0A4, 0x01D50D) }, + { "Asia/Kathmandu" , FOR_V2(0x04B15B, 0x01D567) }, + { "Asia/Katmandu" , FOR_V2(0x04B23B, 0x01D5D2) }, + { "Asia/Khandyga" , FOR_V2(0x04B31B, 0x01D63D) }, + { "Asia/Kolkata" , FOR_V2(0x04B864, 0x01D868) }, + { "Asia/Krasnoyarsk" , FOR_V2(0x04B993, 0x01D8F2) }, + { "Asia/Kuala_Lumpur" , FOR_V2(0x04BE93, 0x01DAFA) }, + { "Asia/Kuching" , FOR_V2(0x04C041, 0x01DBC9) }, + { "Asia/Kuwait" , FOR_V2(0x04C262, 0x01DCBB) }, + { "Asia/Macao" , FOR_V2(0x04C319, 0x01DD15) }, + { "Asia/Macau" , FOR_V2(0x04C640, 0x01DE55) }, + { "Asia/Magadan" , FOR_V2(0x04C967, 0x01DF95) }, + { "Asia/Makassar" , FOR_V2(0x04CE6D, 0x01E199) }, + { "Asia/Manila" , FOR_V2(0x04CFDA, 0x01E26C) }, + { "Asia/Muscat" , FOR_V2(0x04D14F, 0x01E30A) }, + { "Asia/Nicosia" , FOR_V2(0x04D206, 0x01E364) }, + { "Asia/Novokuznetsk" , FOR_V2(0x04D9F2, 0x01E651) }, + { "Asia/Novosibirsk" , FOR_V2(0x04DEBC, 0x01E83C) }, + { "Asia/Omsk" , FOR_V2(0x04E3C3, 0x01EA41) }, + { "Asia/Oral" , FOR_V2(0x04E8B7, 0x01EC3D) }, + { "Asia/Phnom_Penh" , FOR_V2(0x04ECD9, 0x01EDED) }, + { "Asia/Pontianak" , FOR_V2(0x04EDB1, 0x01EE53) }, + { "Asia/Pyongyang" , FOR_V2(0x04EF4A, 0x01EF1B) }, + { "Asia/Qatar" , FOR_V2(0x04F08E, 0x01EFB2) }, + { "Asia/Qyzylorda" , FOR_V2(0x04F16B, 0x01F01D) }, + { "Asia/Rangoon" , FOR_V2(0x04F5AB, 0x01F1E3) }, + { "Asia/Riyadh" , FOR_V2(0x04F6D4, 0x01F26C) }, + { "Asia/Saigon" , FOR_V2(0x04F78B, 0x01F2C6) }, + { "Asia/Sakhalin" , FOR_V2(0x04F90C, 0x01F375) }, + { "Asia/Samarkand" , FOR_V2(0x04FE02, 0x01F575) }, + { "Asia/Seoul" , FOR_V2(0x05008A, 0x01F68D) }, + { "Asia/Shanghai" , FOR_V2(0x0502D1, 0x01F785) }, + { "Asia/Singapore" , FOR_V2(0x050487, 0x01F842) }, + { "Asia/Srednekolymsk" , FOR_V2(0x05063F, 0x01F90A) }, + { "Asia/Taipei" , FOR_V2(0x050B49, 0x01FB1B) }, + { "Asia/Tashkent" , FOR_V2(0x050E75, 0x01FC5D) }, + { "Asia/Tbilisi" , FOR_V2(0x05110D, 0x01FD7D) }, + { "Asia/Tehran" , FOR_V2(0x051551, 0x01FF30) }, + { "Asia/Tel_Aviv" , FOR_V2(0x051BEB, 0x0201AB) }, + { "Asia/Thimbu" , FOR_V2(0x0524D0, 0x0204F3) }, + { "Asia/Thimphu" , FOR_V2(0x0525AD, 0x02055E) }, + { "Asia/Tokyo" , FOR_V2(0x05268A, 0x0205C9) }, + { "Asia/Tomsk" , FOR_V2(0x0527F9, 0x020660) }, + { "Asia/Ujung_Pandang" , FOR_V2(0x052CFA, 0x02085F) }, + { "Asia/Ulaanbaatar" , FOR_V2(0x052E1E, 0x0208E9) }, + { "Asia/Ulan_Bator" , FOR_V2(0x053428, 0x020B36) }, + { "Asia/Urumqi" , FOR_V2(0x053A1D, 0x020D6E) }, + { "Asia/Ust-Nera" , FOR_V2(0x053AE1, 0x020DD5) }, + { "Asia/Vientiane" , FOR_V2(0x05400B, 0x020FED) }, + { "Asia/Vladivostok" , FOR_V2(0x0540E3, 0x021053) }, + { "Asia/Yakutsk" , FOR_V2(0x0545DE, 0x021255) }, + { "Asia/Yangon" , FOR_V2(0x054AD8, 0x021457) }, + { "Asia/Yekaterinburg" , FOR_V2(0x054C01, 0x0214E0) }, + { "Asia/Yerevan" , FOR_V2(0x05511C, 0x0216EE) }, + { "Atlantic/Azores" , FOR_V2(0x0555D7, 0x0218CB) }, + { "Atlantic/Bermuda" , FOR_V2(0x056389, 0x021DDF) }, + { "Atlantic/Canary" , FOR_V2(0x056B69, 0x0220C5) }, + { "Atlantic/Cape_Verde" , FOR_V2(0x0572FC, 0x0223A0) }, + { "Atlantic/Faeroe" , FOR_V2(0x057406, 0x02241E) }, + { "Atlantic/Faroe" , FOR_V2(0x057B37, 0x0226C7) }, + { "Atlantic/Jan_Mayen" , FOR_V2(0x058268, 0x022970) }, + { "Atlantic/Madeira" , FOR_V2(0x058B3F, 0x022CB3) }, + { "Atlantic/Reykjavik" , FOR_V2(0x0598F0, 0x0231CD) }, + { "Atlantic/South_Georgia" , FOR_V2(0x059DA2, 0x02339F) }, + { "Atlantic/St_Helena" , FOR_V2(0x059E42, 0x0233E3) }, + { "Atlantic/Stanley" , FOR_V2(0x059EF8, 0x02343D) }, + { "Australia/ACT" , FOR_V2(0x05A3E2, 0x023624) }, + { "Australia/Adelaide" , FOR_V2(0x05AC9D, 0x023958) }, + { "Australia/Brisbane" , FOR_V2(0x05B576, 0x023C97) }, + { "Australia/Broken_Hill" , FOR_V2(0x05B75D, 0x023D71) }, + { "Australia/Canberra" , FOR_V2(0x05C067, 0x0240C2) }, + { "Australia/Currie" , FOR_V2(0x05C922, 0x0243F6) }, + { "Australia/Darwin" , FOR_V2(0x05D1F3, 0x024740) }, + { "Australia/Eucla" , FOR_V2(0x05D354, 0x0247D9) }, + { "Australia/Hobart" , FOR_V2(0x05D560, 0x0248C1) }, + { "Australia/LHI" , FOR_V2(0x05DEA0, 0x024C32) }, + { "Australia/Lindeman" , FOR_V2(0x05E5EF, 0x024EE4) }, + { "Australia/Lord_Howe" , FOR_V2(0x05E824, 0x024FDF) }, + { "Australia/Melbourne" , FOR_V2(0x05EF83, 0x0252A1) }, + { "Australia/North" , FOR_V2(0x05F846, 0x0255DD) }, + { "Australia/NSW" , FOR_V2(0x05F995, 0x025664) }, + { "Australia/Perth" , FOR_V2(0x060250, 0x025998) }, + { "Australia/Queensland" , FOR_V2(0x060459, 0x025A83) }, + { "Australia/South" , FOR_V2(0x060629, 0x025B46) }, + { "Australia/Sydney" , FOR_V2(0x060EF3, 0x025E76) }, + { "Australia/Tasmania" , FOR_V2(0x0617CA, 0x0261C6) }, + { "Australia/Victoria" , FOR_V2(0x0620F5, 0x026522) }, + { "Australia/West" , FOR_V2(0x0629B0, 0x026856) }, + { "Australia/Yancowinna" , FOR_V2(0x062B9B, 0x026923) }, + { "Brazil/Acre" , FOR_V2(0x063489, 0x026C58) }, + { "Brazil/DeNoronha" , FOR_V2(0x063725, 0x026D69) }, + { "Brazil/East" , FOR_V2(0x063A09, 0x026E8E) }, + { "Brazil/West" , FOR_V2(0x0641F4, 0x027170) }, + { "Canada/Atlantic" , FOR_V2(0x064468, 0x02726D) }, + { "Canada/Central" , FOR_V2(0x0651E2, 0x02775A) }, + { "Canada/East-Saskatchewan" , FOR_V2(0x065D39, 0x027B85) }, + { "Canada/Eastern" , FOR_V2(0x066127, 0x027D13) }, + { "Canada/Mountain" , FOR_V2(0x066EE2, 0x028214) }, + { "Canada/Newfoundland" , FOR_V2(0x067850, 0x02858F) }, + { "Canada/Pacific" , FOR_V2(0x0686AC, 0x028AD3) }, + { "Canada/Saskatchewan" , FOR_V2(0x06920D, 0x028EFD) }, + { "Canada/Yukon" , FOR_V2(0x0695FB, 0x02908B) }, + { "CET" , FOR_V2(0x069E34, 0x02939F) }, + { "Chile/Continental" , FOR_V2(0x06A676, 0x0296A8) }, + { "Chile/EasterIsland" , FOR_V2(0x06B055, 0x029A4C) }, + { "CST6CDT" , FOR_V2(0x06B912, 0x029D86) }, + { "Cuba" , FOR_V2(0x06C214, 0x02A0D7) }, + { "EET" , FOR_V2(0x06CBA5, 0x02A45B) }, + { "Egypt" , FOR_V2(0x06D305, 0x02A70E) }, + { "Eire" , FOR_V2(0x06DAC5, 0x02A9EE) }, + { "EST" , FOR_V2(0x06E8B8, 0x02AF10) }, + { "EST5EDT" , FOR_V2(0x06E943, 0x02AF54) }, + { "Etc/GMT" , FOR_V2(0x06F245, 0x02B2A5) }, + { "Etc/GMT+0" , FOR_V2(0x06F2D0, 0x02B2E9) }, + { "Etc/GMT+1" , FOR_V2(0x06F35B, 0x02B32D) }, + { "Etc/GMT+10" , FOR_V2(0x06F3FB, 0x02B37B) }, + { "Etc/GMT+11" , FOR_V2(0x06F49C, 0x02B3C9) }, + { "Etc/GMT+12" , FOR_V2(0x06F53D, 0x02B417) }, + { "Etc/GMT+2" , FOR_V2(0x06F5DE, 0x02B465) }, + { "Etc/GMT+3" , FOR_V2(0x06F67E, 0x02B4B3) }, + { "Etc/GMT+4" , FOR_V2(0x06F71E, 0x02B501) }, + { "Etc/GMT+5" , FOR_V2(0x06F7BE, 0x02B54F) }, + { "Etc/GMT+6" , FOR_V2(0x06F85E, 0x02B59D) }, + { "Etc/GMT+7" , FOR_V2(0x06F8FE, 0x02B5EB) }, + { "Etc/GMT+8" , FOR_V2(0x06F99E, 0x02B639) }, + { "Etc/GMT+9" , FOR_V2(0x06FA3E, 0x02B687) }, + { "Etc/GMT-0" , FOR_V2(0x06FADE, 0x02B6D5) }, + { "Etc/GMT-1" , FOR_V2(0x06FB69, 0x02B719) }, + { "Etc/GMT-10" , FOR_V2(0x06FC0A, 0x02B767) }, + { "Etc/GMT-11" , FOR_V2(0x06FCAC, 0x02B7B5) }, + { "Etc/GMT-12" , FOR_V2(0x06FD4E, 0x02B803) }, + { "Etc/GMT-13" , FOR_V2(0x06FDF0, 0x02B851) }, + { "Etc/GMT-14" , FOR_V2(0x06FE92, 0x02B89F) }, + { "Etc/GMT-2" , FOR_V2(0x06FF34, 0x02B8ED) }, + { "Etc/GMT-3" , FOR_V2(0x06FFD5, 0x02B93B) }, + { "Etc/GMT-4" , FOR_V2(0x070076, 0x02B989) }, + { "Etc/GMT-5" , FOR_V2(0x070117, 0x02B9D7) }, + { "Etc/GMT-6" , FOR_V2(0x0701B8, 0x02BA25) }, + { "Etc/GMT-7" , FOR_V2(0x070259, 0x02BA73) }, + { "Etc/GMT-8" , FOR_V2(0x0702FA, 0x02BAC1) }, + { "Etc/GMT-9" , FOR_V2(0x07039B, 0x02BB0F) }, + { "Etc/GMT0" , FOR_V2(0x07043C, 0x02BB5D) }, + { "Etc/Greenwich" , FOR_V2(0x0704C7, 0x02BBA1) }, + { "Etc/UCT" , FOR_V2(0x070552, 0x02BBE5) }, + { "Etc/Universal" , FOR_V2(0x0705DD, 0x02BC29) }, + { "Etc/UTC" , FOR_V2(0x070668, 0x02BC6D) }, + { "Etc/Zulu" , FOR_V2(0x0706F3, 0x02BCB1) }, + { "Europe/Amsterdam" , FOR_V2(0x07077E, 0x02BCF5) }, + { "Europe/Andorra" , FOR_V2(0x071309, 0x02C144) }, + { "Europe/Astrakhan" , FOR_V2(0x0719EC, 0x02C3D1) }, + { "Europe/Athens" , FOR_V2(0x071EB7, 0x02C5BD) }, + { "Europe/Belfast" , FOR_V2(0x0727A2, 0x02C911) }, + { "Europe/Belgrade" , FOR_V2(0x073615, 0x02CE59) }, + { "Europe/Berlin" , FOR_V2(0x073DC6, 0x02D133) }, + { "Europe/Bratislava" , FOR_V2(0x074705, 0x02D4AE) }, + { "Europe/Brussels" , FOR_V2(0x074FF1, 0x02D7F1) }, + { "Europe/Bucharest" , FOR_V2(0x075B97, 0x02DC39) }, + { "Europe/Budapest" , FOR_V2(0x076450, 0x02DF74) }, + { "Europe/Busingen" , FOR_V2(0x076DC1, 0x02E2EE) }, + { "Europe/Chisinau" , FOR_V2(0x077553, 0x02E5B6) }, + { "Europe/Copenhagen" , FOR_V2(0x077EEC, 0x02E95A) }, + { "Europe/Dublin" , FOR_V2(0x078768, 0x02EC75) }, + { "Europe/Gibraltar" , FOR_V2(0x07955B, 0x02F197) }, + { "Europe/Guernsey" , FOR_V2(0x07A15C, 0x02F5FF) }, + { "Europe/Helsinki" , FOR_V2(0x07AFCF, 0x02FB47) }, + { "Europe/Isle_of_Man" , FOR_V2(0x07B750, 0x02FE0E) }, + { "Europe/Istanbul" , FOR_V2(0x07C5C3, 0x030356) }, + { "Europe/Jersey" , FOR_V2(0x07CE45, 0x03068E) }, + { "Europe/Kaliningrad" , FOR_V2(0x07DCB8, 0x030BD6) }, + { "Europe/Kiev" , FOR_V2(0x07E2C6, 0x030E47) }, + { "Europe/Kirov" , FOR_V2(0x07EB17, 0x03117A) }, + { "Europe/Lisbon" , FOR_V2(0x07EFC0, 0x031355) }, + { "Europe/Ljubljana" , FOR_V2(0x07FD5C, 0x031869) }, + { "Europe/London" , FOR_V2(0x08050D, 0x031B43) }, + { "Europe/Luxembourg" , FOR_V2(0x081380, 0x03208B) }, + { "Europe/Madrid" , FOR_V2(0x081F2A, 0x0324E6) }, + { "Europe/Malta" , FOR_V2(0x082981, 0x0328C5) }, + { "Europe/Mariehamn" , FOR_V2(0x0833D2, 0x032C8F) }, + { "Europe/Minsk" , FOR_V2(0x083B53, 0x032F56) }, + { "Europe/Monaco" , FOR_V2(0x0840B9, 0x03317A) }, + { "Europe/Moscow" , FOR_V2(0x084C4E, 0x0335C6) }, + { "Europe/Nicosia" , FOR_V2(0x085276, 0x033846) }, + { "Europe/Oslo" , FOR_V2(0x085A62, 0x033B33) }, + { "Europe/Paris" , FOR_V2(0x086339, 0x033E76) }, + { "Europe/Podgorica" , FOR_V2(0x086EE0, 0x0342CD) }, + { "Europe/Prague" , FOR_V2(0x087691, 0x0345A7) }, + { "Europe/Riga" , FOR_V2(0x087F7D, 0x0348EA) }, + { "Europe/Rome" , FOR_V2(0x088844, 0x034C40) }, + { "Europe/Samara" , FOR_V2(0x0892C6, 0x035014) }, + { "Europe/San_Marino" , FOR_V2(0x0897D0, 0x035223) }, + { "Europe/Sarajevo" , FOR_V2(0x08A252, 0x0355F7) }, + { "Europe/Simferopol" , FOR_V2(0x08AA03, 0x0358D1) }, + { "Europe/Skopje" , FOR_V2(0x08AFF0, 0x035B33) }, + { "Europe/Sofia" , FOR_V2(0x08B7A1, 0x035E0D) }, + { "Europe/Stockholm" , FOR_V2(0x08BFFF, 0x036126) }, + { "Europe/Tallinn" , FOR_V2(0x08C789, 0x0363E6) }, + { "Europe/Tirane" , FOR_V2(0x08D020, 0x03672C) }, + { "Europe/Tiraspol" , FOR_V2(0x08D85E, 0x036A37) }, + { "Europe/Ulyanovsk" , FOR_V2(0x08E1F7, 0x036DDB) }, + { "Europe/Uzhgorod" , FOR_V2(0x08E716, 0x036FED) }, + { "Europe/Vaduz" , FOR_V2(0x08EF61, 0x037315) }, + { "Europe/Vatican" , FOR_V2(0x08F6EB, 0x0375D5) }, + { "Europe/Vienna" , FOR_V2(0x09016D, 0x0379A9) }, + { "Europe/Vilnius" , FOR_V2(0x090A36, 0x037CE7) }, + { "Europe/Volgograd" , FOR_V2(0x0912D9, 0x038037) }, + { "Europe/Warsaw" , FOR_V2(0x09178F, 0x03821F) }, + { "Europe/Zagreb" , FOR_V2(0x09222C, 0x038611) }, + { "Europe/Zaporozhye" , FOR_V2(0x0929DD, 0x0388EB) }, + { "Europe/Zurich" , FOR_V2(0x093256, 0x038C3D) }, + { "Factory" , FOR_V2(0x0939E0, 0x038EFD) }, + { "GB" , FOR_V2(0x093A80, 0x038F4B) }, + { "GB-Eire" , FOR_V2(0x0948F3, 0x039493) }, + { "GMT" , FOR_V2(0x095766, 0x0399DB) }, + { "GMT+0" , FOR_V2(0x0957F1, 0x039A1F) }, + { "GMT-0" , FOR_V2(0x09587C, 0x039A63) }, + { "GMT0" , FOR_V2(0x095907, 0x039AA7) }, + { "Greenwich" , FOR_V2(0x095992, 0x039AEB) }, + { "Hongkong" , FOR_V2(0x095A1D, 0x039B2F) }, + { "HST" , FOR_V2(0x095ECE, 0x039CFE) }, + { "Iceland" , FOR_V2(0x095F5A, 0x039D42) }, + { "Indian/Antananarivo" , FOR_V2(0x09640C, 0x039F14) }, + { "Indian/Chagos" , FOR_V2(0x096533, 0x039FA0) }, + { "Indian/Christmas" , FOR_V2(0x096608, 0x03A007) }, + { "Indian/Cocos" , FOR_V2(0x0966A9, 0x03A04B) }, + { "Indian/Comoro" , FOR_V2(0x09674D, 0x03A08F) }, + { "Indian/Kerguelen" , FOR_V2(0x096874, 0x03A11B) }, + { "Indian/Mahe" , FOR_V2(0x09693B, 0x03A17A) }, + { "Indian/Maldives" , FOR_V2(0x0969F2, 0x03A1D4) }, + { "Indian/Mauritius" , FOR_V2(0x096ACA, 0x03A23A) }, + { "Indian/Mayotte" , FOR_V2(0x096BD3, 0x03A2B5) }, + { "Indian/Reunion" , FOR_V2(0x096CFA, 0x03A341) }, + { "Iran" , FOR_V2(0x096DB1, 0x03A39B) }, + { "Israel" , FOR_V2(0x09744B, 0x03A616) }, + { "Jamaica" , FOR_V2(0x097D30, 0x03A95E) }, + { "Japan" , FOR_V2(0x097F37, 0x03AA34) }, + { "Kwajalein" , FOR_V2(0x0980A6, 0x03AACB) }, + { "Libya" , FOR_V2(0x09819F, 0x03AB3F) }, + { "MET" , FOR_V2(0x09843A, 0x03AC4D) }, + { "Mexico/BajaNorte" , FOR_V2(0x098C7C, 0x03AF56) }, + { "Mexico/BajaSur" , FOR_V2(0x0995BC, 0x03B2C4) }, + { "Mexico/General" , FOR_V2(0x099BE4, 0x03B516) }, + { "MST" , FOR_V2(0x09A242, 0x03B779) }, + { "MST7MDT" , FOR_V2(0x09A2CD, 0x03B7BD) }, + { "Navajo" , FOR_V2(0x09ABCF, 0x03BB0E) }, + { "NZ" , FOR_V2(0x09B570, 0x03BE98) }, + { "NZ-CHAT" , FOR_V2(0x09BF18, 0x03C227) }, + { "Pacific/Apia" , FOR_V2(0x09C72D, 0x03C51C) }, + { "Pacific/Auckland" , FOR_V2(0x09CB87, 0x03C6C5) }, + { "Pacific/Bougainville" , FOR_V2(0x09D547, 0x03CA6C) }, + { "Pacific/Chatham" , FOR_V2(0x09D677, 0x03CAF5) }, + { "Pacific/Chuuk" , FOR_V2(0x09DE9B, 0x03CDF9) }, + { "Pacific/Easter" , FOR_V2(0x09DF4F, 0x03CE4D) }, + { "Pacific/Efate" , FOR_V2(0x09E819, 0x03D194) }, + { "Pacific/Enderbury" , FOR_V2(0x09EA03, 0x03D25F) }, + { "Pacific/Fakaofo" , FOR_V2(0x09EB04, 0x03D2DE) }, + { "Pacific/Fiji" , FOR_V2(0x09EBD5, 0x03D340) }, + { "Pacific/Funafuti" , FOR_V2(0x09F012, 0x03D4D8) }, + { "Pacific/Galapagos" , FOR_V2(0x09F0B4, 0x03D51C) }, + { "Pacific/Gambier" , FOR_V2(0x09F1A4, 0x03D599) }, + { "Pacific/Guadalcanal" , FOR_V2(0x09F26C, 0x03D603) }, + { "Pacific/Guam" , FOR_V2(0x09F324, 0x03D65D) }, + { "Pacific/Honolulu" , FOR_V2(0x09F411, 0x03D6C4) }, + { "Pacific/Johnston" , FOR_V2(0x09F537, 0x03D74C) }, + { "Pacific/Kiritimati" , FOR_V2(0x09F665, 0x03D7DC) }, + { "Pacific/Kosrae" , FOR_V2(0x09F763, 0x03D858) }, + { "Pacific/Kwajalein" , FOR_V2(0x09F85B, 0x03D8CE) }, + { "Pacific/Majuro" , FOR_V2(0x09F95D, 0x03D94B) }, + { "Pacific/Marquesas" , FOR_V2(0x09FA4B, 0x03D9CA) }, + { "Pacific/Midway" , FOR_V2(0x09FB18, 0x03DA36) }, + { "Pacific/Nauru" , FOR_V2(0x09FC42, 0x03DAC8) }, + { "Pacific/Niue" , FOR_V2(0x09FD4C, 0x03DB45) }, + { "Pacific/Norfolk" , FOR_V2(0x09FE3A, 0x03DBB4) }, + { "Pacific/Noumea" , FOR_V2(0x09FF67, 0x03DC3E) }, + { "Pacific/Pago_Pago" , FOR_V2(0x0A00AD, 0x03DCD3) }, + { "Pacific/Palau" , FOR_V2(0x0A01C9, 0x03DD57) }, + { "Pacific/Pitcairn" , FOR_V2(0x0A026A, 0x03DD9B) }, + { "Pacific/Pohnpei" , FOR_V2(0x0A0341, 0x03DE01) }, + { "Pacific/Ponape" , FOR_V2(0x0A03F4, 0x03DE54) }, + { "Pacific/Port_Moresby" , FOR_V2(0x0A0499, 0x03DE99) }, + { "Pacific/Rarotonga" , FOR_V2(0x0A056E, 0x03DEFA) }, + { "Pacific/Saipan" , FOR_V2(0x0A07B8, 0x03DFE7) }, + { "Pacific/Samoa" , FOR_V2(0x0A08A5, 0x03E04E) }, + { "Pacific/Tahiti" , FOR_V2(0x0A09C1, 0x03E0D2) }, + { "Pacific/Tarawa" , FOR_V2(0x0A0A8A, 0x03E13C) }, + { "Pacific/Tongatapu" , FOR_V2(0x0A0B3E, 0x03E190) }, + { "Pacific/Truk" , FOR_V2(0x0A0C9D, 0x03E22D) }, + { "Pacific/Wake" , FOR_V2(0x0A0D42, 0x03E272) }, + { "Pacific/Wallis" , FOR_V2(0x0A0DF2, 0x03E2C2) }, + { "Pacific/Yap" , FOR_V2(0x0A0E94, 0x03E306) }, + { "Poland" , FOR_V2(0x0A0F39, 0x03E34B) }, + { "Portugal" , FOR_V2(0x0A19D6, 0x03E73D) }, + { "PRC" , FOR_V2(0x0A275F, 0x03EC3E) }, + { "PST8PDT" , FOR_V2(0x0A2909, 0x03ECEF) }, + { "ROC" , FOR_V2(0x0A320B, 0x03F040) }, + { "ROK" , FOR_V2(0x0A3537, 0x03F182) }, + { "Singapore" , FOR_V2(0x0A377E, 0x03F27A) }, + { "Turkey" , FOR_V2(0x0A3936, 0x03F342) }, + { "UCT" , FOR_V2(0x0A41B8, 0x03F67A) }, + { "Universal" , FOR_V2(0x0A4243, 0x03F6BE) }, + { "US/Alaska" , FOR_V2(0x0A42CE, 0x03F702) }, + { "US/Aleutian" , FOR_V2(0x0A4C2A, 0x03FA7C) }, + { "US/Arizona" , FOR_V2(0x0A5573, 0x03FDED) }, + { "US/Central" , FOR_V2(0x0A56E0, 0x03FE8C) }, + { "US/East-Indiana" , FOR_V2(0x0A64ED, 0x0403B0) }, + { "US/Eastern" , FOR_V2(0x0A6B84, 0x04062B) }, + { "US/Hawaii" , FOR_V2(0x0A7969, 0x040B3B) }, + { "US/Indiana-Starke" , FOR_V2(0x0A7A89, 0x040BBD) }, + { "US/Michigan" , FOR_V2(0x0A841A, 0x040F47) }, + { "US/Mountain" , FOR_V2(0x0A8CCE, 0x041283) }, + { "US/Pacific" , FOR_V2(0x0A966F, 0x04160D) }, + { "US/Pacific-New" , FOR_V2(0x0AA198, 0x041A23) }, + { "US/Samoa" , FOR_V2(0x0AACC1, 0x041E39) }, + { "UTC" , FOR_V2(0x0AADDD, 0x041EBD) }, + { "W-SU" , FOR_V2(0x0AAE68, 0x041F01) }, + { "WET" , FOR_V2(0x0AB47C, 0x04216D) }, + { "Zulu" , FOR_V2(0x0ABBD9, 0x042420) }, }; #ifdef TIMELIB_SUPPORTS_V2DATA -const unsigned char timelib_timezone_db_data_builtin[703568] = { +const unsigned char timelib_timezone_db_data_builtin[703588] = { #else -const unsigned char timelib_timezone_db_data_builtin[271452] = { +const unsigned char timelib_timezone_db_data_builtin[271460] = { #endif @@ -19805,30 +19805,32 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { /* Asia/Colombo */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x4C, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x15, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x18, 0x80, 0x00, 0x00, 0x00, 0x87, 0x9D, 0xBD, 0x1C, 0xCB, 0x5A, 0x1C, 0x28, 0xCC, 0x95, 0x2B, 0xA0, 0xD2, 0x75, 0x80, 0x38, -0x31, 0xA6, 0x00, 0x28, 0x32, 0x71, 0x00, 0x20, 0x44, 0x3F, 0xEA, 0x28, 0x01, 0x02, 0x03, 0x04, -0x02, 0x05, 0x06, 0x02, 0x00, 0x00, 0x4A, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE4, 0x00, 0x04, -0x00, 0x00, 0x4D, 0x58, 0x00, 0x08, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0C, 0x00, 0x00, 0x5B, 0x68, -0x01, 0x08, 0x00, 0x00, 0x5B, 0x68, 0x00, 0x11, 0x00, 0x00, 0x54, 0x60, 0x00, 0x11, 0x00, 0x00, -0x4D, 0x58, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, -0x49, 0x48, 0x53, 0x54, 0x00, 0x4C, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x31, 0xA6, 0x00, 0x28, 0x32, 0x71, 0x00, 0x20, 0x44, 0x3F, 0xEA, 0x28, 0x7F, 0xFF, 0xFF, 0xFF, +0x01, 0x02, 0x03, 0x04, 0x02, 0x05, 0x06, 0x02, 0x02, 0x00, 0x00, 0x4A, 0xDC, 0x00, 0x00, 0x00, +0x00, 0x4A, 0xE4, 0x00, 0x04, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x08, 0x00, 0x00, 0x54, 0x60, 0x01, +0x0E, 0x00, 0x00, 0x5B, 0x68, 0x01, 0x12, 0x00, 0x00, 0x5B, 0x68, 0x00, 0x12, 0x00, 0x00, 0x54, +0x60, 0x00, 0x0E, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4D, 0x54, +0x00, 0x2B, 0x30, 0x35, 0x33, 0x30, 0x00, 0x2B, 0x30, 0x36, 0x00, 0x2B, 0x30, 0x36, 0x33, 0x30, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, #ifdef TIMELIB_SUPPORTS_V2DATA 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x15, 0xF8, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x18, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0x99, 0x24, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x9D, 0xBD, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0xCB, 0x5A, 0x1C, 0x28, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0x95, 0x2B, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD2, 0x75, 0x80, 0x38, 0x00, 0x00, 0x00, 0x00, 0x31, 0xA6, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x32, 0x71, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, -0x44, 0x3F, 0xEA, 0x28, 0x00, 0x01, 0x02, 0x03, 0x04, 0x02, 0x05, 0x06, 0x02, 0x00, 0x00, 0x4A, -0xDC, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE4, 0x00, 0x04, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x08, 0x00, -0x00, 0x54, 0x60, 0x01, 0x0C, 0x00, 0x00, 0x5B, 0x68, 0x01, 0x08, 0x00, 0x00, 0x5B, 0x68, 0x00, -0x11, 0x00, 0x00, 0x54, 0x60, 0x00, 0x11, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x08, 0x4C, 0x4D, 0x54, -0x00, 0x4D, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x49, 0x48, 0x53, 0x54, 0x00, 0x4C, 0x4B, -0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x0A, 0x49, 0x53, 0x54, 0x2D, 0x35, 0x3A, 0x33, 0x30, 0x0A, +0x44, 0x3F, 0xEA, 0x28, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0x02, 0x03, +0x04, 0x02, 0x05, 0x06, 0x02, 0x02, 0x00, 0x00, 0x4A, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE4, +0x00, 0x04, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x08, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0E, 0x00, 0x00, +0x5B, 0x68, 0x01, 0x12, 0x00, 0x00, 0x5B, 0x68, 0x00, 0x12, 0x00, 0x00, 0x54, 0x60, 0x00, 0x0E, +0x00, 0x00, 0x4D, 0x58, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4D, 0x54, 0x00, 0x2B, 0x30, +0x35, 0x33, 0x30, 0x00, 0x2B, 0x30, 0x36, 0x00, 0x2B, 0x30, 0x36, 0x33, 0x30, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x3C, +0x2B, 0x30, 0x35, 0x33, 0x30, 0x3E, 0x2D, 0x35, 0x3A, 0x33, 0x30, 0x0A, #endif 0x00, 0x93, 0xE8, 0x95, 0x01, 0x8C, 0x7F, 0xE8, 0x00, 0x00, 0x00, 0x00, @@ -20157,17 +20159,17 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 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, 0xA0, 0x50, 0x53, 0x34, 0x9F, 0x60, 0x54, 0x49, 0x6C, 0x50, 0x55, 0x15, 0xD2, 0xE0, 0x56, 0x29, 0x4E, 0x50, -0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x09, 0x30, 0x50, 0x58, 0xD5, 0xA4, 0xF0, 0x59, 0xF2, 0x4C, 0xD0, -0x5A, 0xBE, 0xC1, 0x70, 0x5B, 0xD2, 0x2E, 0xD0, 0x5C, 0x9E, 0xA3, 0x70, 0x5D, 0xB2, 0x10, 0xD0, -0x5E, 0x7E, 0x85, 0x70, 0x5F, 0x91, 0xF2, 0xD0, 0x60, 0x5E, 0x67, 0x70, 0x61, 0x71, 0xD4, 0xD0, -0x62, 0x3E, 0x49, 0x70, 0x63, 0x51, 0xB6, 0xD0, 0x64, 0x1E, 0x2B, 0x70, 0x65, 0x3A, 0xD3, 0x50, -0x66, 0x07, 0x47, 0xF0, 0x67, 0x1A, 0xB5, 0x50, 0x67, 0xE7, 0x29, 0xF0, 0x68, 0xFA, 0x97, 0x50, -0x69, 0xC7, 0x0B, 0xF0, 0x6A, 0xDA, 0x79, 0x50, 0x6B, 0xA6, 0xED, 0xF0, 0x6C, 0xBA, 0x5B, 0x50, -0x6D, 0x86, 0xCF, 0xF0, 0x6E, 0xA3, 0x77, 0xD0, 0x6F, 0x6F, 0xEC, 0x70, 0x70, 0x83, 0x59, 0xD0, -0x71, 0x4F, 0xCE, 0x70, 0x72, 0x63, 0x3B, 0xD0, 0x73, 0x2F, 0xB0, 0x70, 0x74, 0x43, 0x1D, 0xD0, -0x75, 0x0F, 0x92, 0x70, 0x76, 0x22, 0xFF, 0xD0, 0x76, 0xEF, 0x74, 0x70, 0x78, 0x02, 0xE1, 0xD0, -0x78, 0xCF, 0x56, 0x70, 0x79, 0xEB, 0xFE, 0x50, 0x7A, 0xB8, 0x72, 0xF0, 0x7B, 0xCB, 0xE0, 0x50, -0x7C, 0x98, 0x54, 0xF0, 0x7D, 0xAB, 0xC2, 0x50, 0x7E, 0x78, 0x36, 0xF0, 0x7F, 0x8B, 0xA4, 0x50, +0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x13, 0xCA, 0x60, 0x58, 0xD5, 0xA4, 0xF0, 0x59, 0xF3, 0xAC, 0x60, +0x5A, 0xBE, 0xC1, 0x70, 0x5B, 0xD3, 0x8E, 0x60, 0x5C, 0x9E, 0xA3, 0x70, 0x5D, 0xB3, 0x70, 0x60, +0x5E, 0x7E, 0x85, 0x70, 0x5F, 0x9C, 0x8C, 0xE0, 0x60, 0x5E, 0x67, 0x70, 0x61, 0x7C, 0x6E, 0xE0, +0x62, 0x3E, 0x49, 0x70, 0x63, 0x5C, 0x50, 0xE0, 0x64, 0x1E, 0x2B, 0x70, 0x65, 0x3C, 0x32, 0xE0, +0x66, 0x07, 0x47, 0xF0, 0x67, 0x1C, 0x14, 0xE0, 0x67, 0xE7, 0x29, 0xF0, 0x68, 0xFB, 0xF6, 0xE0, +0x69, 0xC7, 0x0B, 0xF0, 0x6A, 0xE5, 0x13, 0x60, 0x6B, 0xA6, 0xED, 0xF0, 0x6C, 0xC4, 0xF5, 0x60, +0x6D, 0x86, 0xCF, 0xF0, 0x6E, 0xA4, 0xD7, 0x60, 0x6F, 0x6F, 0xEC, 0x70, 0x70, 0x84, 0xB9, 0x60, +0x71, 0x4F, 0xCE, 0x70, 0x72, 0x64, 0x9B, 0x60, 0x73, 0x2F, 0xB0, 0x70, 0x74, 0x44, 0x7D, 0x60, +0x75, 0x0F, 0x92, 0x70, 0x76, 0x2D, 0x99, 0xE0, 0x76, 0xEF, 0x74, 0x70, 0x78, 0x0D, 0x7B, 0xE0, +0x78, 0xCF, 0x56, 0x70, 0x79, 0xED, 0x5D, 0xE0, 0x7A, 0xB8, 0x72, 0xF0, 0x7B, 0xCD, 0x3F, 0xE0, +0x7C, 0x98, 0x54, 0xF0, 0x7D, 0xAD, 0x21, 0xE0, 0x7E, 0x78, 0x36, 0xF0, 0x7F, 0x96, 0x3E, 0x60, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, @@ -20183,7 +20185,7 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, #ifdef TIMELIB_SUPPORTS_V2DATA -0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x15, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0xBD, 0x4A, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, @@ -20237,28 +20239,28 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x51, 0x54, 0xBD, 0x60, 0x00, 0x00, 0x00, 0x00, 0x52, 0x44, 0xA0, 0x50, 0x00, 0x00, 0x00, 0x00, 0x53, 0x34, 0x9F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x54, 0x49, 0x6C, 0x50, 0x00, 0x00, 0x00, 0x00, 0x55, 0x15, 0xD2, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x56, 0x29, 0x4E, 0x50, 0x00, 0x00, 0x00, 0x00, -0x56, 0xF5, 0xC2, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x58, 0x09, 0x30, 0x50, 0x00, 0x00, 0x00, 0x00, -0x58, 0xD5, 0xA4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF2, 0x4C, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x5A, 0xBE, 0xC1, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD2, 0x2E, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x5C, 0x9E, 0xA3, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB2, 0x10, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x5E, 0x7E, 0x85, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x91, 0xF2, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x60, 0x5E, 0x67, 0x70, 0x00, 0x00, 0x00, 0x00, 0x61, 0x71, 0xD4, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x62, 0x3E, 0x49, 0x70, 0x00, 0x00, 0x00, 0x00, 0x63, 0x51, 0xB6, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x64, 0x1E, 0x2B, 0x70, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3A, 0xD3, 0x50, 0x00, 0x00, 0x00, 0x00, -0x66, 0x07, 0x47, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1A, 0xB5, 0x50, 0x00, 0x00, 0x00, 0x00, -0x67, 0xE7, 0x29, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFA, 0x97, 0x50, 0x00, 0x00, 0x00, 0x00, -0x69, 0xC7, 0x0B, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDA, 0x79, 0x50, 0x00, 0x00, 0x00, 0x00, -0x6B, 0xA6, 0xED, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xBA, 0x5B, 0x50, 0x00, 0x00, 0x00, 0x00, -0x6D, 0x86, 0xCF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA3, 0x77, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x6F, 0x6F, 0xEC, 0x70, 0x00, 0x00, 0x00, 0x00, 0x70, 0x83, 0x59, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x71, 0x4F, 0xCE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x72, 0x63, 0x3B, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x73, 0x2F, 0xB0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x74, 0x43, 0x1D, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x75, 0x0F, 0x92, 0x70, 0x00, 0x00, 0x00, 0x00, 0x76, 0x22, 0xFF, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x76, 0xEF, 0x74, 0x70, 0x00, 0x00, 0x00, 0x00, 0x78, 0x02, 0xE1, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x78, 0xCF, 0x56, 0x70, 0x00, 0x00, 0x00, 0x00, 0x79, 0xEB, 0xFE, 0x50, 0x00, 0x00, 0x00, 0x00, -0x7A, 0xB8, 0x72, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCB, 0xE0, 0x50, 0x00, 0x00, 0x00, 0x00, -0x7C, 0x98, 0x54, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAB, 0xC2, 0x50, 0x00, 0x00, 0x00, 0x00, -0x7E, 0x78, 0x36, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8B, 0xA4, 0x50, 0x00, 0x02, 0x01, 0x02, +0x56, 0xF5, 0xC2, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x58, 0x13, 0xCA, 0x60, 0x00, 0x00, 0x00, 0x00, +0x58, 0xD5, 0xA4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF3, 0xAC, 0x60, 0x00, 0x00, 0x00, 0x00, +0x5A, 0xBE, 0xC1, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD3, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, +0x5C, 0x9E, 0xA3, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x70, 0x60, 0x00, 0x00, 0x00, 0x00, +0x5E, 0x7E, 0x85, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x9C, 0x8C, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x60, 0x5E, 0x67, 0x70, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7C, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x62, 0x3E, 0x49, 0x70, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5C, 0x50, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x64, 0x1E, 0x2B, 0x70, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3C, 0x32, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x66, 0x07, 0x47, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1C, 0x14, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x67, 0xE7, 0x29, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFB, 0xF6, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x69, 0xC7, 0x0B, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xE5, 0x13, 0x60, 0x00, 0x00, 0x00, 0x00, +0x6B, 0xA6, 0xED, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC4, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00, +0x6D, 0x86, 0xCF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA4, 0xD7, 0x60, 0x00, 0x00, 0x00, 0x00, +0x6F, 0x6F, 0xEC, 0x70, 0x00, 0x00, 0x00, 0x00, 0x70, 0x84, 0xB9, 0x60, 0x00, 0x00, 0x00, 0x00, +0x71, 0x4F, 0xCE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x72, 0x64, 0x9B, 0x60, 0x00, 0x00, 0x00, 0x00, +0x73, 0x2F, 0xB0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x74, 0x44, 0x7D, 0x60, 0x00, 0x00, 0x00, 0x00, +0x75, 0x0F, 0x92, 0x70, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2D, 0x99, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x76, 0xEF, 0x74, 0x70, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0D, 0x7B, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x78, 0xCF, 0x56, 0x70, 0x00, 0x00, 0x00, 0x00, 0x79, 0xED, 0x5D, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7A, 0xB8, 0x72, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCD, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7C, 0x98, 0x54, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAD, 0x21, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7E, 0x78, 0x36, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x96, 0x3E, 0x60, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, @@ -20274,7 +20276,7 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x45, 0x45, 0x53, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x36, 0x2F, 0x31, 0x2C, 0x4D, -0x31, 0x30, 0x2E, 0x33, 0x2E, 0x36, 0x2F, 0x31, 0x34, 0x34, 0x0A, +0x31, 0x30, 0x2E, 0x35, 0x2E, 0x36, 0x2F, 0x31, 0x0A, #endif 0x00, 0xB9, 0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, 0x74, 0x72, 0x69, 0x70, @@ -20340,18 +20342,18 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 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, 0xA0, 0x50, 0x53, 0x34, 0x9F, 0x60, 0x54, 0x49, 0x6C, 0x50, -0x55, 0x15, 0xD2, 0xE0, 0x56, 0x29, 0x4E, 0x50, 0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x09, 0x30, 0x50, -0x58, 0xD5, 0xA4, 0xF0, 0x59, 0xF2, 0x4C, 0xD0, 0x5A, 0xBE, 0xC1, 0x70, 0x5B, 0xD2, 0x2E, 0xD0, -0x5C, 0x9E, 0xA3, 0x70, 0x5D, 0xB2, 0x10, 0xD0, 0x5E, 0x7E, 0x85, 0x70, 0x5F, 0x91, 0xF2, 0xD0, -0x60, 0x5E, 0x67, 0x70, 0x61, 0x71, 0xD4, 0xD0, 0x62, 0x3E, 0x49, 0x70, 0x63, 0x51, 0xB6, 0xD0, -0x64, 0x1E, 0x2B, 0x70, 0x65, 0x3A, 0xD3, 0x50, 0x66, 0x07, 0x47, 0xF0, 0x67, 0x1A, 0xB5, 0x50, -0x67, 0xE7, 0x29, 0xF0, 0x68, 0xFA, 0x97, 0x50, 0x69, 0xC7, 0x0B, 0xF0, 0x6A, 0xDA, 0x79, 0x50, -0x6B, 0xA6, 0xED, 0xF0, 0x6C, 0xBA, 0x5B, 0x50, 0x6D, 0x86, 0xCF, 0xF0, 0x6E, 0xA3, 0x77, 0xD0, -0x6F, 0x6F, 0xEC, 0x70, 0x70, 0x83, 0x59, 0xD0, 0x71, 0x4F, 0xCE, 0x70, 0x72, 0x63, 0x3B, 0xD0, -0x73, 0x2F, 0xB0, 0x70, 0x74, 0x43, 0x1D, 0xD0, 0x75, 0x0F, 0x92, 0x70, 0x76, 0x22, 0xFF, 0xD0, -0x76, 0xEF, 0x74, 0x70, 0x78, 0x02, 0xE1, 0xD0, 0x78, 0xCF, 0x56, 0x70, 0x79, 0xEB, 0xFE, 0x50, -0x7A, 0xB8, 0x72, 0xF0, 0x7B, 0xCB, 0xE0, 0x50, 0x7C, 0x98, 0x54, 0xF0, 0x7D, 0xAB, 0xC2, 0x50, -0x7E, 0x78, 0x36, 0xF0, 0x7F, 0x8B, 0xA4, 0x50, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x55, 0x15, 0xD2, 0xE0, 0x56, 0x29, 0x4E, 0x50, 0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x13, 0xCA, 0x60, +0x58, 0xD5, 0xA4, 0xF0, 0x59, 0xF3, 0xAC, 0x60, 0x5A, 0xBE, 0xC1, 0x70, 0x5B, 0xD3, 0x8E, 0x60, +0x5C, 0x9E, 0xA3, 0x70, 0x5D, 0xB3, 0x70, 0x60, 0x5E, 0x7E, 0x85, 0x70, 0x5F, 0x9C, 0x8C, 0xE0, +0x60, 0x5E, 0x67, 0x70, 0x61, 0x7C, 0x6E, 0xE0, 0x62, 0x3E, 0x49, 0x70, 0x63, 0x5C, 0x50, 0xE0, +0x64, 0x1E, 0x2B, 0x70, 0x65, 0x3C, 0x32, 0xE0, 0x66, 0x07, 0x47, 0xF0, 0x67, 0x1C, 0x14, 0xE0, +0x67, 0xE7, 0x29, 0xF0, 0x68, 0xFB, 0xF6, 0xE0, 0x69, 0xC7, 0x0B, 0xF0, 0x6A, 0xE5, 0x13, 0x60, +0x6B, 0xA6, 0xED, 0xF0, 0x6C, 0xC4, 0xF5, 0x60, 0x6D, 0x86, 0xCF, 0xF0, 0x6E, 0xA4, 0xD7, 0x60, +0x6F, 0x6F, 0xEC, 0x70, 0x70, 0x84, 0xB9, 0x60, 0x71, 0x4F, 0xCE, 0x70, 0x72, 0x64, 0x9B, 0x60, +0x73, 0x2F, 0xB0, 0x70, 0x74, 0x44, 0x7D, 0x60, 0x75, 0x0F, 0x92, 0x70, 0x76, 0x2D, 0x99, 0xE0, +0x76, 0xEF, 0x74, 0x70, 0x78, 0x0D, 0x7B, 0xE0, 0x78, 0xCF, 0x56, 0x70, 0x79, 0xED, 0x5D, 0xE0, +0x7A, 0xB8, 0x72, 0xF0, 0x7B, 0xCD, 0x3F, 0xE0, 0x7C, 0x98, 0x54, 0xF0, 0x7D, 0xAD, 0x21, 0xE0, +0x7E, 0x78, 0x36, 0xF0, 0x7F, 0x96, 0x3E, 0x60, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, @@ -20367,7 +20369,7 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, #ifdef TIMELIB_SUPPORTS_V2DATA -0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x15, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0xBD, 0x4A, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, @@ -20422,28 +20424,28 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x51, 0x54, 0xBD, 0x60, 0x00, 0x00, 0x00, 0x00, 0x52, 0x44, 0xA0, 0x50, 0x00, 0x00, 0x00, 0x00, 0x53, 0x34, 0x9F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x54, 0x49, 0x6C, 0x50, 0x00, 0x00, 0x00, 0x00, 0x55, 0x15, 0xD2, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x56, 0x29, 0x4E, 0x50, 0x00, 0x00, 0x00, 0x00, -0x56, 0xF5, 0xC2, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x58, 0x09, 0x30, 0x50, 0x00, 0x00, 0x00, 0x00, -0x58, 0xD5, 0xA4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF2, 0x4C, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x5A, 0xBE, 0xC1, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD2, 0x2E, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x5C, 0x9E, 0xA3, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB2, 0x10, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x5E, 0x7E, 0x85, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x91, 0xF2, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x60, 0x5E, 0x67, 0x70, 0x00, 0x00, 0x00, 0x00, 0x61, 0x71, 0xD4, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x62, 0x3E, 0x49, 0x70, 0x00, 0x00, 0x00, 0x00, 0x63, 0x51, 0xB6, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x64, 0x1E, 0x2B, 0x70, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3A, 0xD3, 0x50, 0x00, 0x00, 0x00, 0x00, -0x66, 0x07, 0x47, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1A, 0xB5, 0x50, 0x00, 0x00, 0x00, 0x00, -0x67, 0xE7, 0x29, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFA, 0x97, 0x50, 0x00, 0x00, 0x00, 0x00, -0x69, 0xC7, 0x0B, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDA, 0x79, 0x50, 0x00, 0x00, 0x00, 0x00, -0x6B, 0xA6, 0xED, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xBA, 0x5B, 0x50, 0x00, 0x00, 0x00, 0x00, -0x6D, 0x86, 0xCF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA3, 0x77, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x6F, 0x6F, 0xEC, 0x70, 0x00, 0x00, 0x00, 0x00, 0x70, 0x83, 0x59, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x71, 0x4F, 0xCE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x72, 0x63, 0x3B, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x73, 0x2F, 0xB0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x74, 0x43, 0x1D, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x75, 0x0F, 0x92, 0x70, 0x00, 0x00, 0x00, 0x00, 0x76, 0x22, 0xFF, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x76, 0xEF, 0x74, 0x70, 0x00, 0x00, 0x00, 0x00, 0x78, 0x02, 0xE1, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x78, 0xCF, 0x56, 0x70, 0x00, 0x00, 0x00, 0x00, 0x79, 0xEB, 0xFE, 0x50, 0x00, 0x00, 0x00, 0x00, -0x7A, 0xB8, 0x72, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCB, 0xE0, 0x50, 0x00, 0x00, 0x00, 0x00, -0x7C, 0x98, 0x54, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAB, 0xC2, 0x50, 0x00, 0x00, 0x00, 0x00, -0x7E, 0x78, 0x36, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8B, 0xA4, 0x50, 0x00, 0x02, 0x01, 0x02, +0x56, 0xF5, 0xC2, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x58, 0x13, 0xCA, 0x60, 0x00, 0x00, 0x00, 0x00, +0x58, 0xD5, 0xA4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF3, 0xAC, 0x60, 0x00, 0x00, 0x00, 0x00, +0x5A, 0xBE, 0xC1, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD3, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, +0x5C, 0x9E, 0xA3, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x70, 0x60, 0x00, 0x00, 0x00, 0x00, +0x5E, 0x7E, 0x85, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x9C, 0x8C, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x60, 0x5E, 0x67, 0x70, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7C, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x62, 0x3E, 0x49, 0x70, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5C, 0x50, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x64, 0x1E, 0x2B, 0x70, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3C, 0x32, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x66, 0x07, 0x47, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1C, 0x14, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x67, 0xE7, 0x29, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFB, 0xF6, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x69, 0xC7, 0x0B, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xE5, 0x13, 0x60, 0x00, 0x00, 0x00, 0x00, +0x6B, 0xA6, 0xED, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC4, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00, +0x6D, 0x86, 0xCF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA4, 0xD7, 0x60, 0x00, 0x00, 0x00, 0x00, +0x6F, 0x6F, 0xEC, 0x70, 0x00, 0x00, 0x00, 0x00, 0x70, 0x84, 0xB9, 0x60, 0x00, 0x00, 0x00, 0x00, +0x71, 0x4F, 0xCE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x72, 0x64, 0x9B, 0x60, 0x00, 0x00, 0x00, 0x00, +0x73, 0x2F, 0xB0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x74, 0x44, 0x7D, 0x60, 0x00, 0x00, 0x00, 0x00, +0x75, 0x0F, 0x92, 0x70, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2D, 0x99, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x76, 0xEF, 0x74, 0x70, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0D, 0x7B, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x78, 0xCF, 0x56, 0x70, 0x00, 0x00, 0x00, 0x00, 0x79, 0xED, 0x5D, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7A, 0xB8, 0x72, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCD, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7C, 0x98, 0x54, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAD, 0x21, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7E, 0x78, 0x36, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x96, 0x3E, 0x60, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, @@ -20459,7 +20461,7 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x36, 0x2F, 0x31, -0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x33, 0x2E, 0x36, 0x2F, 0x31, 0x34, 0x34, 0x0A, +0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x36, 0x2F, 0x31, 0x0A, #endif 0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, 0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, 0x73, 0x74, 0x20, 0x42, 0x61, 0x6E, 0x6B, @@ -20785,11 +20787,11 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x0E, 0xA6, 0x91, 0x50, 0x0F, 0x84, 0x1B, 0x60, 0x10, 0x86, 0x73, 0x50, 0x12, 0x67, 0x98, 0xC0, 0x13, 0x4D, 0x36, 0x00, 0x14, 0x47, 0x7A, 0xC0, 0x15, 0x23, 0xDD, 0x80, 0x16, 0x27, 0x5C, 0xC0, 0x17, 0x03, 0xBF, 0x80, 0x18, 0x07, 0x3E, 0xC0, 0x19, 0x89, 0x94, 0x50, 0x19, 0xDC, 0x94, 0xC0, -0x1C, 0xC6, 0xD3, 0xD0, 0x1D, 0x9B, 0x15, 0x50, 0x1E, 0x8C, 0x82, 0x00, 0x1F, 0x7C, 0x73, 0x00, -0x20, 0x6C, 0x64, 0x00, 0x21, 0x5C, 0x55, 0x00, 0x22, 0x4C, 0x46, 0x00, 0x23, 0x3C, 0x37, 0x00, -0x24, 0x2C, 0x28, 0x00, 0x25, 0x1C, 0x19, 0x00, 0x26, 0x0C, 0x0A, 0x00, 0x27, 0x05, 0x35, 0x80, +0x1C, 0xC6, 0xD3, 0xD0, 0x1D, 0x9B, 0x15, 0x50, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, +0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, +0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x0B, 0xFB, 0xF0, 0x27, 0x05, 0x27, 0x70, 0x27, 0xF5, 0x18, 0x70, 0x28, 0xE5, 0x09, 0x70, 0x29, 0xD4, 0xFA, 0x70, 0x2A, 0xC4, 0xEB, 0x70, -0x2B, 0xB4, 0xDC, 0x70, 0x2C, 0xA4, 0xCD, 0x70, 0x2D, 0x94, 0xBE, 0x70, 0x2E, 0x84, 0xAF, 0x70, +0x2B, 0xB4, 0xDC, 0x70, 0x2C, 0xA4, 0xCD, 0x70, 0x2D, 0x8B, 0x83, 0xF0, 0x2E, 0x84, 0xAF, 0x70, 0x2F, 0x74, 0xA0, 0x70, 0x30, 0x64, 0x91, 0x70, 0x31, 0x5D, 0xBC, 0xF0, 0x32, 0x72, 0x97, 0xF0, 0x33, 0x3D, 0x9E, 0xF0, 0x34, 0x52, 0x79, 0xF0, 0x35, 0x1D, 0x80, 0xF0, 0x36, 0x32, 0x5B, 0xF0, 0x36, 0xFD, 0x62, 0xF0, 0x38, 0x1B, 0x78, 0x70, 0x38, 0xDD, 0x44, 0xF0, 0x39, 0xFB, 0x5A, 0x70, @@ -20855,15 +20857,15 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x17, 0x03, 0xBF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x18, 0x07, 0x3E, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x19, 0x89, 0x94, 0x50, 0x00, 0x00, 0x00, 0x00, 0x19, 0xDC, 0x94, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xC6, 0xD3, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9B, 0x15, 0x50, 0x00, 0x00, 0x00, 0x00, -0x1E, 0x8C, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, -0x20, 0x6C, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, -0x22, 0x4C, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, -0x24, 0x2C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, -0x26, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x35, 0x80, 0x00, 0x00, 0x00, 0x00, +0x1E, 0x8C, 0x73, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x64, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x20, 0x6C, 0x55, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x27, 0x70, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE5, 0x09, 0x70, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xFA, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xEB, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xDC, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xCD, 0x70, 0x00, 0x00, 0x00, 0x00, -0x2D, 0x94, 0xBE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x00, +0x2D, 0x8B, 0x83, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xA0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x91, 0x70, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xBC, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0x97, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0x9E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x79, 0xF0, 0x00, 0x00, 0x00, 0x00, @@ -34772,11 +34774,11 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x0E, 0xA6, 0x91, 0x50, 0x0F, 0x84, 0x1B, 0x60, 0x10, 0x86, 0x73, 0x50, 0x12, 0x67, 0x98, 0xC0, 0x13, 0x4D, 0x36, 0x00, 0x14, 0x47, 0x7A, 0xC0, 0x15, 0x23, 0xDD, 0x80, 0x16, 0x27, 0x5C, 0xC0, 0x17, 0x03, 0xBF, 0x80, 0x18, 0x07, 0x3E, 0xC0, 0x19, 0x89, 0x94, 0x50, 0x19, 0xDC, 0x94, 0xC0, -0x1C, 0xC6, 0xD3, 0xD0, 0x1D, 0x9B, 0x15, 0x50, 0x1E, 0x8C, 0x82, 0x00, 0x1F, 0x7C, 0x73, 0x00, -0x20, 0x6C, 0x64, 0x00, 0x21, 0x5C, 0x55, 0x00, 0x22, 0x4C, 0x46, 0x00, 0x23, 0x3C, 0x37, 0x00, -0x24, 0x2C, 0x28, 0x00, 0x25, 0x1C, 0x19, 0x00, 0x26, 0x0C, 0x0A, 0x00, 0x27, 0x05, 0x35, 0x80, +0x1C, 0xC6, 0xD3, 0xD0, 0x1D, 0x9B, 0x15, 0x50, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, +0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, +0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x0B, 0xFB, 0xF0, 0x27, 0x05, 0x27, 0x70, 0x27, 0xF5, 0x18, 0x70, 0x28, 0xE5, 0x09, 0x70, 0x29, 0xD4, 0xFA, 0x70, 0x2A, 0xC4, 0xEB, 0x70, -0x2B, 0xB4, 0xDC, 0x70, 0x2C, 0xA4, 0xCD, 0x70, 0x2D, 0x94, 0xBE, 0x70, 0x2E, 0x84, 0xAF, 0x70, +0x2B, 0xB4, 0xDC, 0x70, 0x2C, 0xA4, 0xCD, 0x70, 0x2D, 0x8B, 0x83, 0xF0, 0x2E, 0x84, 0xAF, 0x70, 0x2F, 0x74, 0xA0, 0x70, 0x30, 0x64, 0x91, 0x70, 0x31, 0x5D, 0xBC, 0xF0, 0x32, 0x72, 0x97, 0xF0, 0x33, 0x3D, 0x9E, 0xF0, 0x34, 0x52, 0x79, 0xF0, 0x35, 0x1D, 0x80, 0xF0, 0x36, 0x32, 0x5B, 0xF0, 0x36, 0xFD, 0x62, 0xF0, 0x38, 0x1B, 0x78, 0x70, 0x38, 0xDD, 0x44, 0xF0, 0x39, 0xFB, 0x5A, 0x70, @@ -34842,15 +34844,15 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x17, 0x03, 0xBF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x18, 0x07, 0x3E, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x19, 0x89, 0x94, 0x50, 0x00, 0x00, 0x00, 0x00, 0x19, 0xDC, 0x94, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xC6, 0xD3, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9B, 0x15, 0x50, 0x00, 0x00, 0x00, 0x00, -0x1E, 0x8C, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, -0x20, 0x6C, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, -0x22, 0x4C, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, -0x24, 0x2C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, -0x26, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x35, 0x80, 0x00, 0x00, 0x00, 0x00, +0x1E, 0x8C, 0x73, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x64, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x20, 0x6C, 0x55, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x27, 0x70, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE5, 0x09, 0x70, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xFA, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xEB, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xDC, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xCD, 0x70, 0x00, 0x00, 0x00, 0x00, -0x2D, 0x94, 0xBE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x00, +0x2D, 0x8B, 0x83, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xA0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x91, 0x70, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xBC, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0x97, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0x9E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x79, 0xF0, 0x00, 0x00, 0x00, 0x00, @@ -45486,11 +45488,11 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x0E, 0xA6, 0x91, 0x50, 0x0F, 0x84, 0x1B, 0x60, 0x10, 0x86, 0x73, 0x50, 0x12, 0x67, 0x98, 0xC0, 0x13, 0x4D, 0x36, 0x00, 0x14, 0x47, 0x7A, 0xC0, 0x15, 0x23, 0xDD, 0x80, 0x16, 0x27, 0x5C, 0xC0, 0x17, 0x03, 0xBF, 0x80, 0x18, 0x07, 0x3E, 0xC0, 0x19, 0x89, 0x94, 0x50, 0x19, 0xDC, 0x94, 0xC0, -0x1C, 0xC6, 0xD3, 0xD0, 0x1D, 0x9B, 0x15, 0x50, 0x1E, 0x8C, 0x82, 0x00, 0x1F, 0x7C, 0x73, 0x00, -0x20, 0x6C, 0x64, 0x00, 0x21, 0x5C, 0x55, 0x00, 0x22, 0x4C, 0x46, 0x00, 0x23, 0x3C, 0x37, 0x00, -0x24, 0x2C, 0x28, 0x00, 0x25, 0x1C, 0x19, 0x00, 0x26, 0x0C, 0x0A, 0x00, 0x27, 0x05, 0x35, 0x80, +0x1C, 0xC6, 0xD3, 0xD0, 0x1D, 0x9B, 0x15, 0x50, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, +0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, +0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x0B, 0xFB, 0xF0, 0x27, 0x05, 0x27, 0x70, 0x27, 0xF5, 0x18, 0x70, 0x28, 0xE5, 0x09, 0x70, 0x29, 0xD4, 0xFA, 0x70, 0x2A, 0xC4, 0xEB, 0x70, -0x2B, 0xB4, 0xDC, 0x70, 0x2C, 0xA4, 0xCD, 0x70, 0x2D, 0x94, 0xBE, 0x70, 0x2E, 0x84, 0xAF, 0x70, +0x2B, 0xB4, 0xDC, 0x70, 0x2C, 0xA4, 0xCD, 0x70, 0x2D, 0x8B, 0x83, 0xF0, 0x2E, 0x84, 0xAF, 0x70, 0x2F, 0x74, 0xA0, 0x70, 0x30, 0x64, 0x91, 0x70, 0x31, 0x5D, 0xBC, 0xF0, 0x32, 0x72, 0x97, 0xF0, 0x33, 0x3D, 0x9E, 0xF0, 0x34, 0x52, 0x79, 0xF0, 0x35, 0x1D, 0x80, 0xF0, 0x36, 0x32, 0x5B, 0xF0, 0x36, 0xFD, 0x62, 0xF0, 0x38, 0x1B, 0x78, 0x70, 0x38, 0xDD, 0x44, 0xF0, 0x39, 0xFB, 0x5A, 0x70, @@ -45556,15 +45558,15 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x17, 0x03, 0xBF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x18, 0x07, 0x3E, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x19, 0x89, 0x94, 0x50, 0x00, 0x00, 0x00, 0x00, 0x19, 0xDC, 0x94, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xC6, 0xD3, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9B, 0x15, 0x50, 0x00, 0x00, 0x00, 0x00, -0x1E, 0x8C, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, -0x20, 0x6C, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, -0x22, 0x4C, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, -0x24, 0x2C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, -0x26, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x35, 0x80, 0x00, 0x00, 0x00, 0x00, +0x1E, 0x8C, 0x73, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x64, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x20, 0x6C, 0x55, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x27, 0x70, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE5, 0x09, 0x70, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xFA, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xEB, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xDC, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xCD, 0x70, 0x00, 0x00, 0x00, 0x00, -0x2D, 0x94, 0xBE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x00, +0x2D, 0x8B, 0x83, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xA0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x91, 0x70, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xBC, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0x97, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0x9E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x79, 0xF0, 0x00, 0x00, 0x00, 0x00, @@ -47668,4 +47670,4 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { #endif 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,}; -const timelib_tzdb timezonedb_builtin = { "2016.7", 590, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; +const timelib_tzdb timezonedb_builtin = { "2016.8", 590, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; diff --git b/ext/date/tests/bug53437_var3.phpt a/ext/date/tests/bug53437_var3.phpt index 82b90f5..9a50f5f 100644 --- b/ext/date/tests/bug53437_var3.phpt +++ a/ext/date/tests/bug53437_var3.phpt @@ -12,7 +12,7 @@ var_dump($di); ?> ==DONE== --EXPECTF-- -object(DateInterval)#%d (15) { +object(DateInterval)#%d (16) { ["y"]=> int(2) ["m"]=> @@ -25,6 +25,8 @@ object(DateInterval)#%d (15) { int(8) ["s"]=> int(0) + ["f"]=> + float(-1) ["weekday"]=> int(10) ["weekday_behavior"]=> diff --git b/ext/gd/libgd/gd_crop.c a/ext/gd/libgd/gd_crop.c index 8331521..58b6303 100644 --- b/ext/gd/libgd/gd_crop.c +++ a/ext/gd/libgd/gd_crop.c @@ -243,6 +243,10 @@ gdImagePtr gdImageCropThreshold(gdImagePtr im, const unsigned int color, const f return NULL; } + if (!gdImageTrueColor(im) && color >= gdImageColorsTotal(im)) { + return NULL; + } + /* TODO: Add gdImageGetRowPtr and works with ptr at the row level * for the true color and palette images * new formats will simply work with ptr diff --git b/ext/gd/tests/bug72494.phpt a/ext/gd/tests/bug72494.phpt new file mode 100644 index 0000000..f21de6c --- /dev/null +++ a/ext/gd/tests/bug72494.phpt @@ -0,0 +1,15 @@ +--TEST-- +Bug #72494 (imagecropauto out-of-bounds access) +--SKIPIF-- +<?php +if (!extension_loaded('gd')) die('skip gd extension not available'); +?> +--FILE-- +<?php +$im = imagecreate(10,10); +imagecropauto($im, IMG_CROP_THRESHOLD, 0, 1337); +?> +===DONE=== +--EXPECTF-- +Warning: imagecropauto(): Color argument missing with threshold mode in %s on line %d +===DONE=== diff --git b/ext/hash/tests/hash_update_file.phpt a/ext/hash/tests/hash_update_file.phpt new file mode 100644 index 0000000..32ce962 --- /dev/null +++ a/ext/hash/tests/hash_update_file.phpt @@ -0,0 +1,21 @@ +--TEST-- +bool hash_update_file ( resource $hcontext , string $filename [, resource $scontext = NULL ] ); +--CREDITS-- +marcosptf - <marcosptf@yahoo.com.br> - @phpsp - sao paulo - br +--SKIPIF-- +<?php +if (phpversion() < "5.3.0") { + die('SKIP php version so lower.'); +} +require_once(dirname(__FILE__) . '/skip_mhash.inc'); ?> +?> +--FILE-- +<?php +$ctx = hash_init('md5'); +$filePath = __DIR__ . DIRECTORY_SEPARATOR . 'sha1.phpt'; +fopen($filePath, "r"); +var_dump(hash_update_file($ctx, $filePath)); +hash_final($ctx); +?> +--EXPECT-- +bool(true) diff --git b/ext/hash/tests/hash_update_stream.phpt a/ext/hash/tests/hash_update_stream.phpt new file mode 100644 index 0000000..b628b9c --- /dev/null +++ a/ext/hash/tests/hash_update_stream.phpt @@ -0,0 +1,23 @@ +--TEST-- +int hash_update_stream ( resource $context , resource $handle [, int $length = -1 ] ); +--CREDITS-- +marcosptf - <marcosptf@yahoo.com.br> - @phpsp - sao paulo - br +--SKIPIF-- +<?php +if (phpversion() < "5.3.0") { + die('SKIP php version so lower.'); +} +require_once(dirname(__FILE__) . '/skip_mhash.inc'); ?> +?> +--FILE-- +<?php +$fp = tmpfile(); +fwrite($fp, 'The quick brown fox jumped over the lazy dog.'); +rewind($fp); + +$ctx = hash_init('md5'); +hash_update_stream($ctx, $fp); +echo hash_final($ctx); +?> +--EXPECT-- +5c6ffbdd40d9556b73a21e63c3e0e904 diff --git b/ext/json/json_encoder.c a/ext/json/json_encoder.c index f946748..473726c 100644 --- b/ext/json/json_encoder.c +++ a/ext/json/json_encoder.c @@ -45,6 +45,10 @@ static int php_json_determine_array_type(zval *val) /* {{{ */ zend_string *key; zend_ulong index, idx; + if (HT_IS_PACKED(myht) && HT_IS_WITHOUT_HOLES(myht)) { + return PHP_JSON_OUTPUT_ARRAY; + } + idx = 0; ZEND_HASH_FOREACH_KEY(myht, index, key) { if (key) { diff --git b/ext/opcache/Optimizer/zend_call_graph.c a/ext/opcache/Optimizer/zend_call_graph.c index 53eb0a8..e892c35 100644 --- b/ext/opcache/Optimizer/zend_call_graph.c +++ a/ext/opcache/Optimizer/zend_call_graph.c @@ -80,65 +80,7 @@ static int zend_foreach_op_array(zend_call_graph *call_graph, zend_script *scrip return SUCCESS; } -static void zend_collect_args_info(zend_call_info *call_info) -{ - zend_op *opline = call_info->caller_init_opline; - zend_op *end = call_info->caller_call_opline; - uint32_t i; - int num; - int level = 0; - - ZEND_ASSERT(opline && end); - if (!opline->extended_value) { - return; - } - for (i = 0; i < opline->extended_value; i++) { - call_info->arg_info[i].opline = NULL; - } - while (opline < end) { - opline++; - switch (opline->opcode) { - case ZEND_SEND_VAL: - case ZEND_SEND_VAR: - case ZEND_SEND_VAL_EX: - case ZEND_SEND_VAR_EX: - case ZEND_SEND_REF: - case ZEND_SEND_VAR_NO_REF: - case ZEND_SEND_VAR_NO_REF_EX: - num = opline->op2.num; - if (num > 0) { - num--; - } - if (!level) { - call_info->arg_info[num].opline = opline; - } - break; - case ZEND_SEND_ARRAY: - case ZEND_SEND_USER: - case ZEND_SEND_UNPACK: - // ??? - break; - case ZEND_INIT_FCALL: - case ZEND_INIT_FCALL_BY_NAME: - case ZEND_INIT_NS_FCALL_BY_NAME: - case ZEND_INIT_DYNAMIC_CALL: - case ZEND_NEW: - case ZEND_INIT_METHOD_CALL: - case ZEND_INIT_STATIC_METHOD_CALL: - case ZEND_INIT_USER_CALL: - level++; - break; - case ZEND_DO_FCALL: - case ZEND_DO_ICALL: - case ZEND_DO_UCALL: - case ZEND_DO_FCALL_BY_NAME: - level--; - break; - } - } -} - -static int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_op_array *op_array, zend_func_info *func_info) +int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_op_array *op_array, zend_func_info *func_info) { zend_op *opline = op_array->opcodes; zend_op *end = opline + op_array->last; @@ -149,12 +91,13 @@ static int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t ALLOCA_FLAG(use_heap); call_stack = do_alloca((op_array->last / 2) * sizeof(zend_call_info*), use_heap); + call_info = NULL; while (opline != end) { - call_info = NULL; switch (opline->opcode) { case ZEND_INIT_FCALL: case ZEND_INIT_METHOD_CALL: case ZEND_INIT_STATIC_METHOD_CALL: + call_stack[call] = call_info; func = zend_optimizer_get_called_func( script, op_array, opline, (build_flags & ZEND_RT_CONSTANTS) != 0); if (func) { @@ -167,20 +110,31 @@ static int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t call_info->next_callee = func_info->callee_info; func_info->callee_info = call_info; - if (func->type == ZEND_INTERNAL_FUNCTION) { + if (build_flags & ZEND_CALL_TREE) { + call_info->next_caller = NULL; + } else if (func->type == ZEND_INTERNAL_FUNCTION) { call_info->next_caller = NULL; } else { zend_func_info *callee_func_info = ZEND_FUNC_INFO(&func->op_array); - call_info->next_caller = callee_func_info ? callee_func_info->caller_info : NULL; + if (callee_func_info) { + call_info->next_caller = callee_func_info->caller_info; + callee_func_info->caller_info = call_info; + } else { + call_info->next_caller = NULL; + } } + } else { + call_info = NULL; } - /* break missing intentionally */ + call++; + break; case ZEND_INIT_FCALL_BY_NAME: case ZEND_INIT_NS_FCALL_BY_NAME: case ZEND_INIT_DYNAMIC_CALL: case ZEND_NEW: case ZEND_INIT_USER_CALL: call_stack[call] = call_info; + call_info = NULL; call++; break; case ZEND_DO_FCALL: @@ -188,12 +142,33 @@ static int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t case ZEND_DO_UCALL: case ZEND_DO_FCALL_BY_NAME: func_info->flags |= ZEND_FUNC_HAS_CALLS; + if (call_info) { + call_info->caller_call_opline = opline; + } call--; - if (call_stack[call]) { - call_stack[call]->caller_call_opline = opline; - zend_collect_args_info(call_stack[call]); + call_info = call_stack[call]; + break; + case ZEND_SEND_VAL: + case ZEND_SEND_VAR: + case ZEND_SEND_VAL_EX: + case ZEND_SEND_VAR_EX: + case ZEND_SEND_REF: + case ZEND_SEND_VAR_NO_REF: + case ZEND_SEND_VAR_NO_REF_EX: + if (call_info) { + uint32_t num = opline->op2.num; + + if (num > 0) { + num--; + } + call_info->arg_info[num].opline = opline; } break; + case ZEND_SEND_ARRAY: + case ZEND_SEND_USER: + case ZEND_SEND_UNPACK: + /* TODO: set info about var_arg call ??? */ + break; } opline++; } diff --git b/ext/opcache/Optimizer/zend_call_graph.h a/ext/opcache/Optimizer/zend_call_graph.h index 64eb9e8..a5f47f1 100644 --- b/ext/opcache/Optimizer/zend_call_graph.h +++ a/ext/opcache/Optimizer/zend_call_graph.h @@ -69,6 +69,7 @@ typedef struct _zend_call_graph { BEGIN_EXTERN_C() int zend_build_call_graph(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_call_graph *call_graph); +int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_op_array *op_array, zend_func_info *func_info); END_EXTERN_C() diff --git b/ext/opcache/Optimizer/zend_cfg.h a/ext/opcache/Optimizer/zend_cfg.h index 1ffb62a..4f570b7 100644 --- b/ext/opcache/Optimizer/zend_cfg.h +++ a/ext/opcache/Optimizer/zend_cfg.h @@ -101,6 +101,7 @@ typedef struct _zend_cfg { #define ZEND_CFG_SPLIT_AT_LIVE_RANGES (1<<26) #define ZEND_CFG_NO_ENTRY_PREDECESSORS (1<<25) #define ZEND_CFG_RECV_ENTRY (1<<24) +#define ZEND_CALL_TREE (1<<23) #define CRT_CONSTANT_EX(op_array, node, rt_constants) \ ((rt_constants) ? \ diff --git b/ext/opcache/Optimizer/zend_dump.c a/ext/opcache/Optimizer/zend_dump.c index ed9b6a5..cd07309 100644 --- b/ext/opcache/Optimizer/zend_dump.c +++ a/ext/opcache/Optimizer/zend_dump.c @@ -735,7 +735,7 @@ static void zend_dump_block_info(const zend_cfg *cfg, int n, uint32_t dump_flags fprintf(stderr, " ; level=%d\n", b->level); } if (b->loop_header >= 0) { - fprintf(stderr, " ; loop_header=%d\n", b->level); + fprintf(stderr, " ; loop_header=%d\n", b->loop_header); } if (b->children >= 0) { int j = b->children; diff --git b/ext/opcache/Optimizer/zend_inference.c a/ext/opcache/Optimizer/zend_inference.c index 33bab0e..0635cc5 100644 --- b/ext/opcache/Optimizer/zend_inference.c +++ a/ext/opcache/Optimizer/zend_inference.c @@ -2964,15 +2964,17 @@ static void zend_update_type_info(const zend_op_array *op_array, } break; case ZEND_SEND_VAR_EX: - case ZEND_SEND_VAR_NO_REF: - case ZEND_SEND_VAR_NO_REF_EX: - case ZEND_SEND_REF: -// TODO: ??? if (ssa_ops[i].op1_def >= 0) { tmp = (t1 & MAY_BE_UNDEF)|MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_ANY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF; UPDATE_SSA_TYPE(tmp, ssa_ops[i].op1_def); } break; + case ZEND_SEND_REF: + if (ssa_ops[i].op1_def >= 0) { + tmp = MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_ANY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF; + UPDATE_SSA_TYPE(tmp, ssa_ops[i].op1_def); + } + break; case ZEND_SEND_UNPACK: if (ssa_ops[i].op1_def >= 0) { tmp = t1; diff --git b/ext/opcache/Optimizer/zend_optimizer.c a/ext/opcache/Optimizer/zend_optimizer.c index 3092b96..841be4a 100644 --- b/ext/opcache/Optimizer/zend_optimizer.c +++ a/ext/opcache/Optimizer/zend_optimizer.c @@ -546,11 +546,16 @@ zend_function *zend_optimizer_get_called_func( { zend_string *function_name = Z_STR_P(GET_OP(op2)); zend_function *func; - if ((func = zend_hash_find_ptr(&script->function_table, function_name)) != NULL) { + if (script && (func = zend_hash_find_ptr(&script->function_table, function_name)) != NULL) { return func; } else if ((func = zend_hash_find_ptr(EG(function_table), function_name)) != NULL) { - ZEND_ASSERT(func->type == ZEND_INTERNAL_FUNCTION); - return func; + if (func->type == ZEND_INTERNAL_FUNCTION) { + return func; + } else if (func->type == ZEND_USER_FUNCTION && + func->op_array.filename && + func->op_array.filename == op_array->filename) { + return func; + } } break; } @@ -558,7 +563,18 @@ zend_function *zend_optimizer_get_called_func( case ZEND_INIT_NS_FCALL_BY_NAME: if (opline->op2_type == IS_CONST && Z_TYPE_P(GET_OP(op2)) == IS_STRING) { zval *function_name = GET_OP(op2) + 1; - return zend_hash_find_ptr(&script->function_table, Z_STR_P(function_name)); + zend_function *func; + if (script && (func = zend_hash_find_ptr(&script->function_table, Z_STR_P(function_name)))) { + return func; + } else if ((func = zend_hash_find_ptr(EG(function_table), function_name)) != NULL) { + if (func->type == ZEND_INTERNAL_FUNCTION) { + return func; + } else if (func->type == ZEND_USER_FUNCTION && + func->op_array.filename && + func->op_array.filename == op_array->filename) { + return func; + } + } } break; case ZEND_INIT_STATIC_METHOD_CALL: @@ -566,7 +582,17 @@ zend_function *zend_optimizer_get_called_func( zend_class_entry *ce = NULL; if (opline->op1_type == IS_CONST && Z_TYPE_P(GET_OP(op1)) == IS_STRING) { zend_string *class_name = Z_STR_P(GET_OP(op1) + 1); - ce = zend_hash_find_ptr(&script->class_table, class_name); + if (script && (ce = zend_hash_find_ptr(&script->class_table, class_name))) { + /* pass */ + } else if ((ce = zend_hash_find_ptr(EG(class_table), class_name))) { + if (ce->type == ZEND_INTERNAL_CLASS) { + /* pass */ + } else if (ce->type != ZEND_USER_CLASS || + !ce->info.user.filename || + ce->info.user.filename != op_array->filename) { + ce = NULL; + } + } } else if (opline->op1_type == IS_UNUSED && op_array->scope && !(op_array->scope->ce_flags & ZEND_ACC_TRAIT) && (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) { diff --git b/ext/openssl/openssl.c a/ext/openssl/openssl.c index 3bad717..ab58f47 100644 --- b/ext/openssl/openssl.c +++ a/ext/openssl/openssl.c @@ -73,7 +73,7 @@ #ifdef HAVE_OPENSSL_MD2_H #define OPENSSL_ALGO_MD2 4 #endif -#if OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER) #define OPENSSL_ALGO_DSS1 5 #endif #define OPENSSL_ALGO_SHA224 6 @@ -557,7 +557,7 @@ ZEND_GET_MODULE(openssl) #endif /* {{{ OpenSSL compatibility functions and macros */ -#if OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER) #define EVP_PKEY_get0_RSA(_pkey) _pkey->pkey.rsa #define EVP_PKEY_get0_DH(_pkey) _pkey->pkey.dh #define EVP_PKEY_get0_DSA(_pkey) _pkey->pkey.dsa @@ -1296,7 +1296,7 @@ static EVP_MD * php_openssl_get_evp_md_from_algo(zend_long algo) { /* {{{ */ mdtype = (EVP_MD *) EVP_md2(); break; #endif -#if OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER) case OPENSSL_ALGO_DSS1: mdtype = (EVP_MD *) EVP_dss1(); break; @@ -1422,7 +1422,7 @@ PHP_MINIT_FUNCTION(openssl) #ifdef HAVE_OPENSSL_MD2_H REGISTER_LONG_CONSTANT("OPENSSL_ALGO_MD2", OPENSSL_ALGO_MD2, CONST_CS|CONST_PERSISTENT); #endif -#if OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER) REGISTER_LONG_CONSTANT("OPENSSL_ALGO_DSS1", OPENSSL_ALGO_DSS1, CONST_CS|CONST_PERSISTENT); #endif REGISTER_LONG_CONSTANT("OPENSSL_ALGO_SHA224", OPENSSL_ALGO_SHA224, CONST_CS|CONST_PERSISTENT); @@ -3910,7 +3910,6 @@ static int php_openssl_is_private_key(EVP_PKEY* pkey) assert(pkey != NULL); switch (EVP_PKEY_id(pkey)) { -#ifndef NO_RSA case EVP_PKEY_RSA: case EVP_PKEY_RSA2: { @@ -3925,8 +3924,6 @@ static int php_openssl_is_private_key(EVP_PKEY* pkey) } } break; -#endif -#ifndef NO_DSA case EVP_PKEY_DSA: case EVP_PKEY_DSA1: case EVP_PKEY_DSA2: @@ -3949,8 +3946,6 @@ static int php_openssl_is_private_key(EVP_PKEY* pkey) } } break; -#endif -#ifndef NO_DH case EVP_PKEY_DH: { DH *dh = EVP_PKEY_get0_DH(pkey); @@ -3969,7 +3964,6 @@ static int php_openssl_is_private_key(EVP_PKEY* pkey) } } break; -#endif #ifdef HAVE_EVP_PKEY_EC case EVP_PKEY_EC: { diff --git b/ext/openssl/tests/openssl_free_key.phpt a/ext/openssl/tests/openssl_free_key.phpt new file mode 100644 index 0000000..18219a2 --- /dev/null +++ a/ext/openssl/tests/openssl_free_key.phpt @@ -0,0 +1,77 @@ +--TEST-- +void openssl_free_key ( resource $key_identifier ); +--CREDITS-- +marcosptf - <marcosptf@yahoo.com.br> - @phpsp - sao paulo - br +--SKIPIF-- +<?php +if (!extension_loaded("openssl")) + die("skip"); +if (!@openssl_pkey_new()) + die("skip cannot create private key"); +?> +--FILE-- +<?php +echo "Creating private key\n"; + +/* stack up some entropy; performance is not critical, + * and being slow will most likely even help the test. + */ +for ($z = "", $i = 0; $i < 1024; $i++) { + $z .= $i * $i; + if (function_exists("usleep")) + usleep($i); +} + +$privkey = openssl_pkey_new(); + +if ($privkey === false) + die("failed to create private key"); + +$passphrase = "banana"; +$key_file_name = tempnam("/tmp", "ssl"); +if ($key_file_name === false) + die("failed to get a temporary filename!"); + +echo "Export key to file\n"; + +openssl_pkey_export_to_file($privkey, $key_file_name, $passphrase) or die("failed to export to file $key_file_name"); + +echo "Load key from file - array syntax\n"; + +$loaded_key = openssl_pkey_get_private(array("file://$key_file_name", $passphrase)); + +if ($loaded_key === false) + die("failed to load key using array syntax"); + +openssl_free_key($loaded_key); + +echo "Load key using direct syntax\n"; + +$loaded_key = openssl_pkey_get_private("file://$key_file_name", $passphrase); + +if ($loaded_key === false) + die("failed to load key using direct syntax"); + +openssl_free_key($loaded_key); + +echo "Load key manually and use string syntax\n"; + +$key_content = file_get_contents($key_file_name); +$loaded_key = openssl_pkey_get_private($key_content, $passphrase); + +if ($loaded_key === false) + die("failed to load key using string syntax"); + +openssl_free_key($loaded_key); + +echo "OK!\n"; + +@unlink($key_file_name); +?> +--EXPECT-- +Creating private key +Export key to file +Load key from file - array syntax +Load key using direct syntax +Load key manually and use string syntax +OK! diff --git b/ext/openssl/xp_ssl.c a/ext/openssl/xp_ssl.c index 5b39a0d..9a53a6e 100644 --- b/ext/openssl/xp_ssl.c +++ a/ext/openssl/xp_ssl.c @@ -91,7 +91,7 @@ /* Used for peer verification in windows */ #define PHP_X509_NAME_ENTRY_TO_UTF8(ne, i, out) ASN1_STRING_to_UTF8(&out, X509_NAME_ENTRY_get_data(X509_NAME_get_entry(ne, i))) -#if !defined(OPENSSL_NO_RSA) && OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER) static RSA *tmp_rsa_cb(SSL *s, int is_export, int keylength); #endif @@ -1123,7 +1123,7 @@ static void init_server_reneg_limit(php_stream *stream, php_openssl_netstream_da } /* }}} */ -#if !defined(OPENSSL_NO_RSA) && OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER) static RSA *tmp_rsa_cb(SSL *s, int is_export, int keylength) { BIGNUM *bn = NULL; @@ -1147,7 +1147,6 @@ static RSA *tmp_rsa_cb(SSL *s, int is_export, int keylength) } #endif -#ifndef OPENSSL_NO_DH static int set_server_dh_param(php_stream * stream, SSL_CTX *ctx) /* {{{ */ { DH *dh; @@ -1192,9 +1191,8 @@ static int set_server_dh_param(php_stream * stream, SSL_CTX *ctx) /* {{{ */ return SUCCESS; } /* }}} */ -#endif -#if defined(HAVE_ECDH) && OPENSSL_VERSION_NUMBER < 0x10100000L +#if defined(HAVE_ECDH) && (OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER)) static int set_server_ecdh_curve(php_stream *stream, SSL_CTX *ctx) /* {{{ */ { zval *zvcurve; @@ -1237,13 +1235,13 @@ static int set_server_specific_opts(php_stream *stream, SSL_CTX *ctx) /* {{{ */ zval *zv; long ssl_ctx_options = SSL_CTX_get_options(ctx); -#if defined(HAVE_ECDH) && OPENSSL_VERSION_NUMBER < 0x10100000L +#if defined(HAVE_ECDH) && (OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER)) if (set_server_ecdh_curve(stream, ctx) == FAILURE) { return FAILURE; } #endif -#if !defined(OPENSSL_NO_RSA) && OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER) SSL_CTX_set_tmp_rsa_callback(ctx, tmp_rsa_cb); #endif /* We now use tmp_rsa_cb to generate a key of appropriate size whenever necessary */ @@ -1251,13 +1249,11 @@ static int set_server_specific_opts(php_stream *stream, SSL_CTX *ctx) /* {{{ */ php_error_docref(NULL, E_WARNING, "rsa_key_size context option has been removed"); } -#ifndef OPENSSL_NO_DH set_server_dh_param(stream, ctx); zv = php_stream_context_get_option(PHP_STREAM_CONTEXT(stream), "ssl", "single_dh_use"); if (zv != NULL && zend_is_true(zv)) { ssl_ctx_options |= SSL_OP_SINGLE_DH_USE; } -#endif zv = php_stream_context_get_option(PHP_STREAM_CONTEXT(stream), "ssl", "honor_cipher_order"); if (zv != NULL && zend_is_true(zv)) { diff --git b/ext/session/session.c a/ext/session/session.c index 742461b..5484390 100644 --- b/ext/session/session.c +++ a/ext/session/session.c @@ -2266,7 +2266,6 @@ static PHP_FUNCTION(session_gc) num = php_session_gc(1); if (num < 0) { - php_error_docref(NULL, E_WARNING, "Failed to perfom session GC"); RETURN_FALSE; } diff --git b/ext/soap/php_encoding.c a/ext/soap/php_encoding.c index c0e22d7..c6a3f86 100644 --- b/ext/soap/php_encoding.c +++ a/ext/soap/php_encoding.c @@ -3483,6 +3483,10 @@ static int is_map(zval *array) zend_string *key; zend_ulong i = 0; + if (HT_IS_PACKED(Z_ARRVAL_P(array)) && HT_IS_WITHOUT_HOLES(Z_ARRVAL_P(array))) { + return FALSE; + } + ZEND_HASH_FOREACH_KEY(Z_ARRVAL_P(array), index, key) { if (key || index != i) { return TRUE; diff --git b/ext/soap/php_http.c a/ext/soap/php_http.c index dd87ec1..7a6562c 100644 --- b/ext/soap/php_http.c +++ a/ext/soap/php_http.c @@ -161,7 +161,7 @@ void http_context_headers(php_stream_context* context, static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, php_stream_context *context, int *use_proxy) { php_stream *stream; - zval *proxy_host, *proxy_port, *tmp; + zval *proxy_host, *proxy_port, *tmp, ssl_proxy_peer_name; char *host; char *name; char *protocol; @@ -241,6 +241,13 @@ static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, ph if (stream && *use_proxy && use_ssl) { smart_str soap_headers = {0}; + /* Set peer_name or name verification will try to use the proxy server name */ + if (!context || (tmp = php_stream_context_get_option(context, "ssl", "peer_name")) == NULL) { + ZVAL_STRING(&ssl_proxy_peer_name, phpurl->host); + php_stream_context_set_option(PHP_STREAM_CONTEXT(stream), "ssl", "peer_name", &ssl_proxy_peer_name); + zval_ptr_dtor(&ssl_proxy_peer_name); + } + smart_str_append_const(&soap_headers, "CONNECT "); smart_str_appends(&soap_headers, phpurl->host); smart_str_appendc(&soap_headers, ':'); diff --git b/ext/soap/soap.c a/ext/soap/soap.c index 23bbfb6..73b7616 100644 --- b/ext/soap/soap.c +++ a/ext/soap/soap.c @@ -2366,6 +2366,8 @@ PHP_METHOD(SoapClient, SoapClient) Z_TYPE_P(tmp) == IS_RESOURCE) { context = php_stream_context_from_zval(tmp, 1); Z_ADDREF_P(tmp); + } else { + context = php_stream_context_alloc(); } if ((tmp = zend_hash_str_find(ht, "location", sizeof("location")-1)) != NULL && diff --git b/ext/soap/tests/bug69137.phpt a/ext/soap/tests/bug69137.phpt new file mode 100644 index 0000000..9160b91 --- /dev/null +++ a/ext/soap/tests/bug69137.phpt @@ -0,0 +1,46 @@ +--TEST-- +SOAP Bug #69137 - Peer verification fails when using a proxy with SoapClient +--SKIPIF-- +<?php +require_once('skipif.inc'); +if (getenv("SKIP_ONLINE_TESTS")) { die("skip test requiring internet connection"); } +if (!getenv('http_proxy')) { die("skip test unless an HTTP/HTTPS proxy server is specified in http_proxy environment variable"); } +?> +--INI-- +soap.wsdl_cache_enabled=1 +--FILE-- +<?php + +class IpLookup +{ + public $licenseKey; + public $ipAddress; +} + +list ($proxyHost, $proxyPort) = explode(':', str_replace('http://', '', $_ENV['http_proxy'])); + +// Prime the WSDL cache because that request sets peer_name on the HTTP context +// and masks the SOAP bug. +$testServiceWsdl = 'https://ws.cdyne.com/ip2geo/ip2geo.asmx?wsdl'; +$client = new SoapClient($testServiceWsdl); +unset($client); + +$parameters = [ + 'proxy_host' => $proxyHost, + 'proxy_port' => $proxyPort, + 'trace' => 1, +]; +$client = new SoapClient($testServiceWsdl, $parameters); + +$lookup = new IpLookup(); +$lookup->licenseKey = 0; +$lookup->ipAddress = '72.52.91.14'; + +$result = $client->ResolveIP($lookup); + +if ($result && is_object($result) && $result->ResolveIPResult && is_object($result->ResolveIPResult)) { + print "successful lookup"; +} +?> +--EXPECT-- +successful lookup diff --git b/ext/sqlite3/sqlite3.c a/ext/sqlite3/sqlite3.c index 67b14bb..9eaf714 100644 --- b/ext/sqlite3/sqlite3.c +++ a/ext/sqlite3/sqlite3.c @@ -567,13 +567,20 @@ PHP_METHOD(sqlite3, query) static void sqlite_value_to_zval(sqlite3_stmt *stmt, int column, zval *data) /* {{{ */ { + sqlite3_int64 val; + switch (sqlite3_column_type(stmt, column)) { case SQLITE_INTEGER: - if ((sqlite3_column_int64(stmt, column)) >= INT_MAX || sqlite3_column_int64(stmt, column) <= INT_MIN) { + val = sqlite3_column_int64(stmt, column); +#if LONG_MAX <= 2147483647 + if (val > ZEND_LONG_MAX || val < ZEND_LONG_MIN) { ZVAL_STRINGL(data, (char *)sqlite3_column_text(stmt, column), sqlite3_column_bytes(stmt, column)); } else { - ZVAL_LONG(data, sqlite3_column_int64(stmt, column)); +#endif + ZVAL_LONG(data, val); +#if LONG_MAX <= 2147483647 } +#endif break; case SQLITE_FLOAT: diff --git b/ext/sqlite3/tests/bug63921-32bit.phpt a/ext/sqlite3/tests/bug63921-32bit.phpt index 8c1c6b9..d2cc7b2 100644 --- b/ext/sqlite3/tests/bug63921-32bit.phpt +++ a/ext/sqlite3/tests/bug63921-32bit.phpt @@ -24,4 +24,4 @@ var_dump($num,$result[0]); ?> --EXPECT-- int(2147483647) -string(10) "2147483647" +int(2147483647) diff --git b/ext/sqlite3/tests/bug63921-64bit.phpt a/ext/sqlite3/tests/bug63921-64bit.phpt index 8e821fd..d6c539e 100644 --- b/ext/sqlite3/tests/bug63921-64bit.phpt +++ a/ext/sqlite3/tests/bug63921-64bit.phpt @@ -24,4 +24,4 @@ var_dump($num,$result[0]); ?> --EXPECT-- int(100004313234244) -string(15) "100004313234244" +int(100004313234244) diff --git b/ext/sqlite3/tests/bug73333.phpt a/ext/sqlite3/tests/bug73333.phpt new file mode 100644 index 0000000..7315751 --- /dev/null +++ a/ext/sqlite3/tests/bug73333.phpt @@ -0,0 +1,26 @@ +--TEST-- +Bug #73333 (2147483647 is fetched as string) +--SKIPIF-- +<?php +if (!extension_loaded('sqlite3')) die('skip sqlite3 extension not available'); +?> +--FILE-- +<?php +if (!defined('PHP_INT_MIN')) define('PHP_INT_MIN', -PHP_INT_MAX-1); + +$db = new SQLite3(':memory:'); +$db->exec('CREATE TABLE foo (bar INT)'); +foreach ([PHP_INT_MIN, PHP_INT_MAX] as $value) { + $db->exec("INSERT INTO foo VALUES ($value)"); +} + +$res = $db->query('SELECT bar FROM foo'); +while (($row = $res->fetchArray(SQLITE3_NUM)) !== false) { + echo gettype($row[0]), PHP_EOL; +} +?> +===DONE=== +--EXPECT-- +integer +integer +===DONE=== diff --git b/ext/standard/array.c a/ext/standard/array.c index 078b84a..69439a7 100644 --- b/ext/standard/array.c +++ a/ext/standard/array.c @@ -2909,7 +2909,9 @@ PHP_FUNCTION(array_slice) /* Start at the beginning and go until we hit offset */ pos = 0; - if ((Z_ARRVAL_P(input)->u.flags & HASH_FLAG_PACKED) && !preserve_keys) { + if (HT_IS_PACKED(Z_ARRVAL_P(input)) && + (!preserve_keys || + (offset == 0 && HT_IS_WITHOUT_HOLES(Z_ARRVAL_P(input))))) { zend_hash_real_init(Z_ARRVAL_P(return_value), 1); ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) { ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(input), entry) { @@ -2975,17 +2977,10 @@ PHPAPI int php_array_merge_recursive(HashTable *dest, HashTable *src) /* {{{ */ return 0; } - if (Z_ISREF_P(dest_entry)) { - if (Z_REFCOUNT_P(dest_entry) == 1) { - ZVAL_UNREF(dest_entry); - } else { - Z_DELREF_P(dest_entry); - ZVAL_DUP(dest_entry, dest_zval); - } - dest_zval = dest_entry; - } else { - SEPARATE_ZVAL(dest_zval); - } + ZEND_ASSERT(!Z_ISREF_P(dest_entry) || Z_REFCOUNT_P(dest_entry) > 1); + SEPARATE_ZVAL(dest_entry); + dest_zval = dest_entry; + if (Z_TYPE_P(dest_zval) == IS_NULL) { convert_to_array_ex(dest_zval); add_next_index_null(dest_zval); @@ -3108,7 +3103,10 @@ PHPAPI int php_array_replace_recursive(HashTable *dest, HashTable *src) /* {{{ * php_error_docref(NULL, E_WARNING, "recursion detected"); return 0; } - SEPARATE_ZVAL(dest_zval); + + ZEND_ASSERT(!Z_ISREF_P(dest_entry) || Z_REFCOUNT_P(dest_entry) > 1); + SEPARATE_ZVAL(dest_entry); + dest_zval = dest_entry; if (ZEND_HASH_APPLY_PROTECTION(Z_ARRVAL_P(dest_zval))) { Z_ARRVAL_P(dest_zval)->u.v.nApplyCount++; diff --git b/ext/standard/php_random.h a/ext/standard/php_random.h index c4034e7..090e9d1 100644 --- b/ext/standard/php_random.h +++ a/ext/standard/php_random.h @@ -34,7 +34,13 @@ typedef struct { #define php_random_bytes_throw(b, s) php_random_bytes((b), (s), 1) #define php_random_bytes_silent(b, s) php_random_bytes((b), (s), 0) +#define php_random_int_throw(min, max, result) \ + php_random_int((min), (max), (result), 1) +#define php_random_int_silent(min, max, result) \ + php_random_int((min), (max), (result), 0) + PHPAPI int php_random_bytes(void *bytes, size_t size, zend_bool should_throw); +PHPAPI int php_random_int(zend_long min, zend_long max, zend_long *result, zend_bool should_throw); #ifdef ZTS # define RANDOM_G(v) ZEND_TSRMG(random_globals_id, php_random_globals *, v) diff --git b/ext/standard/random.c a/ext/standard/random.c index c0e1abd..1161d76 100644 --- b/ext/standard/random.c +++ a/ext/standard/random.c @@ -81,7 +81,6 @@ PHP_MSHUTDOWN_FUNCTION(random) /* }}} */ /* {{{ */ - PHPAPI int php_random_bytes(void *bytes, size_t size, zend_bool should_throw) { #if PHP_WIN32 @@ -214,37 +213,27 @@ PHP_FUNCTION(random_bytes) } /* }}} */ -/* {{{ proto int random_int(int min, int max) -Return an arbitrary pseudo-random integer */ -PHP_FUNCTION(random_int) +/* {{{ */ +PHPAPI int php_random_int(zend_long min, zend_long max, zend_long *result, zend_bool should_throw) { - zend_long min; - zend_long max; zend_ulong umax; - zend_ulong result; - - if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ll", &min, &max) == FAILURE) { - return; - } - - if (min > max) { - zend_throw_exception(zend_ce_error, "Minimum value must be less than or equal to the maximum value", 0); - return; - } + zend_ulong trial; if (min == max) { - RETURN_LONG(min); + *result = min; + return SUCCESS; } umax = max - min; - if (php_random_bytes_throw(&result, sizeof(result)) == FAILURE) { - return; + if (php_random_bytes(&trial, sizeof(trial), should_throw) == FAILURE) { + return FAILURE; } /* Special case where no modulus is required */ if (umax == ZEND_ULONG_MAX) { - RETURN_LONG((zend_long)result); + *result = (zend_long)trial; + return SUCCESS; } /* Increment the max so the range is inclusive of max */ @@ -256,14 +245,40 @@ PHP_FUNCTION(random_int) zend_ulong limit = ZEND_ULONG_MAX - (ZEND_ULONG_MAX % umax) - 1; /* Discard numbers over the limit to avoid modulo bias */ - while (result > limit) { - if (php_random_bytes_throw(&result, sizeof(result)) == FAILURE) { - return; + while (trial > limit) { + if (php_random_bytes(&trial, sizeof(trial), should_throw) == FAILURE) { + return FAILURE; } } } - RETURN_LONG((zend_long)((result % umax) + min)); + *result = (zend_long)((trial % umax) + min); + return SUCCESS; +} +/* }}} */ + +/* {{{ proto int random_int(int min, int max) +Return an arbitrary pseudo-random integer */ +PHP_FUNCTION(random_int) +{ + zend_long min; + zend_long max; + zend_long result; + + if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ll", &min, &max) == FAILURE) { + return; + } + + if (min > max) { + zend_throw_exception(zend_ce_error, "Minimum value must be less than or equal to the maximum value", 0); + return; + } + + if (php_random_int_throw(min, max, &result) == FAILURE) { + return; + } + + RETURN_LONG(result); } /* }}} */ diff --git b/ext/standard/tests/array/array_replace_merge_recursive_ref.phpt a/ext/standard/tests/array/array_replace_merge_recursive_ref.phpt new file mode 100644 index 0000000..e8d4f8e --- /dev/null +++ a/ext/standard/tests/array/array_replace_merge_recursive_ref.phpt @@ -0,0 +1,31 @@ +--TEST-- +Test array_(replace|merge)_recursive with references +--FILE-- +<?php + +$one = [1]; +$two = [42]; +$arr1 = ['k' => &$one]; +$arr2 = ['k' => &$two]; +var_dump(current($one), current($two)); +array_replace_recursive($arr1, $arr2); +var_dump(current($one), current($two)); + +$one = [1]; +$two = [42]; +$arr1 = ['k' => &$one]; +$arr2 = ['k' => &$two]; +var_dump(current($one), current($two)); +array_merge_recursive($arr1, $arr2); +var_dump(current($one), current($two)); + +?> +--EXPECT-- +int(1) +int(42) +int(1) +int(42) +int(1) +int(42) +int(1) +int(42) diff --git b/ext/standard/tests/network/dns_get_mx.phpt a/ext/standard/tests/network/dns_get_mx.phpt new file mode 100644 index 0000000..c5bf361 --- /dev/null +++ a/ext/standard/tests/network/dns_get_mx.phpt @@ -0,0 +1,29 @@ +--TEST-- +bool dns_get_mx ( string $hostname , array &$mxhosts [, array &$weight ] ); +--CREDITS-- +marcosptf - <marcosptf@yahoo.com.br> - @phpsp - sao paulo - br +--SKIPIF-- +<?php +if (getenv("SKIP_SLOW_TESTS")) + die("skip slow test"); +if (getenv("SKIP_ONLINE_TESTS")) + die("skip test requiring internet connection"); +if (substr(PHP_OS, 0, 3) == 'WIN') { + die('skip: no Windows support'); +} +?> +--FILE-- +<?php +$domains = array('yahoo.co.jp', 'yahoo.com', 'es.yahoo.com', 'fr.yahoo.com', 'it.yahoo.com'); +foreach ($domains as $domain) { + if (getmxrr($domain, $hosts, $weights)) { + echo "Hosts: " . count($hosts) . ", weights: " . count($weights) . "\n"; + } +} +?> +--EXPECTF-- +Hosts: %i, weights: %i +Hosts: %i, weights: %i +Hosts: %i, weights: %i +Hosts: %i, weights: %i +Hosts: %i, weights: %i diff --git b/ext/standard/tests/serialize/bug69793.phpt a/ext/standard/tests/serialize/bug69793.phpt index 611d516..8426c15 100644 --- b/ext/standard/tests/serialize/bug69793.phpt +++ a/ext/standard/tests/serialize/bug69793.phpt @@ -10,6 +10,8 @@ var_dump($e.""); Notice: Undefined property: Exception::$file in %s%ebug69793.php on line %d Notice: Undefined property: Exception::$previous in %s%ebug69793.php on line %d + +Notice: Undefined property: Exception::$previous in %s%ebug69793.php on line %d string(41) "Exception in :1337 Stack trace: #0 {main}" diff --git b/main/php_version.h a/main/php_version.h index 647c88f..5862919 100644 --- b/main/php_version.h +++ a/main/php_version.h @@ -3,6 +3,6 @@ #define PHP_MAJOR_VERSION 7 #define PHP_MINOR_VERSION 1 #define PHP_RELEASE_VERSION 0 -#define PHP_EXTRA_VERSION "RC4" -#define PHP_VERSION "7.1.0RC4" +#define PHP_EXTRA_VERSION "RC5" +#define PHP_VERSION "7.1.0RC5" #define PHP_VERSION_ID 70100 diff --git b/sapi/cli/php_cli_server.c a/sapi/cli/php_cli_server.c index 7ae6c6f..0853db9 100644 --- b/sapi/cli/php_cli_server.c +++ a/sapi/cli/php_cli_server.c @@ -1400,7 +1400,7 @@ static void php_cli_server_request_translate_vpath(php_cli_server_request *reque *p = '\0'; q = p; while (q > buf) { - if (!zend_stat(buf, &sb)) { + if (!php_sys_stat(buf, &sb)) { if (sb.st_mode & S_IFDIR) { const char **file = index_files; if (q[-1] != DEFAULT_SLASH) { @@ -1409,7 +1409,7 @@ static void php_cli_server_request_translate_vpath(php_cli_server_request *reque while (*file) { size_t l = strlen(*file); memmove(q, *file, l + 1); - if (!zend_stat(buf, &sb) && (sb.st_mode & S_IFREG)) { + if (!php_sys_stat(buf, &sb) && (sb.st_mode & S_IFREG)) { q += l; break; } @@ -2502,7 +2502,7 @@ int do_cli_server(int argc, char **argv) /* {{{ */ if (document_root) { zend_stat_t sb; - if (zend_stat(document_root, &sb)) { + if (php_sys_stat(document_root, &sb)) { fprintf(stderr, "Directory %s does not exist.\n", document_root); return 1; } diff --git b/sapi/fpm/fpm/fpm_request.c a/sapi/fpm/fpm/fpm_request.c index ec8601b..3f82a7d 100644 --- b/sapi/fpm/fpm/fpm_request.c +++ a/sapi/fpm/fpm/fpm_request.c @@ -262,8 +262,9 @@ void fpm_request_check_timed_out(struct fpm_child_s *child, struct timeval *now, fpm_trace_signal(child->pid); - zlog(ZLOG_WARNING, "[pool %s] child %d, script '%s' (request: \"%s %s\") executing too slow (%d.%06d sec), logging", + zlog(ZLOG_WARNING, "[pool %s] child %d, script '%s' (request: \"%s %s%s%s\") executing too slow (%d.%06d sec), logging", child->wp->config->name, (int) child->pid, purified_script_filename, proc.request_method, proc.request_uri, + (proc.query_string[0] ? "?" : ""), proc.query_string, (int) tv.tv_sec, (int) tv.tv_usec); } else @@ -272,8 +273,9 @@ void fpm_request_check_timed_out(struct fpm_child_s *child, struct timeval *now, str_purify_filename(purified_script_filename, proc.script_filename, sizeof(proc.script_filename)); fpm_pctl_kill(child->pid, FPM_PCTL_TERM); - zlog(ZLOG_WARNING, "[pool %s] child %d, script '%s' (request: \"%s %s\") execution timed out (%d.%06d sec), terminating", + zlog(ZLOG_WARNING, "[pool %s] child %d, script '%s' (request: \"%s %s%s%s\") execution timed out (%d.%06d sec), terminating", child->wp->config->name, (int) child->pid, purified_script_filename, proc.request_method, proc.request_uri, + (proc.query_string[0] ? "?" : ""), proc.query_string, (int) tv.tv_sec, (int) tv.tv_usec); } } diff --git b/tests/lang/bug73329.phpt a/tests/lang/bug73329.phpt new file mode 100644 index 0000000..938f8ba --- /dev/null +++ a/tests/lang/bug73329.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #73329 (Float)"Nano" == NAN +--FILE-- +<?php + var_dump( + (float)"nanite", + (float)"nan", + (float)"inf", + (float)"infusorian" + ); +?> +==DONE== +--EXPECT-- +float(0) +float(0) +float(0) +float(0) +==DONE==
diff --git b/NEWS a/NEWS index e66d80f..d274ade 100644 --- b/NEWS +++ a/NEWS @@ -1,11 +1,27 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +27 Oct 2016, PHP 7.1.0RC5 + +- Core: + . Fixed bug #73350 (Exception::__toString() cause circular references). + (Laruence) + . Fixed bug #73329 ((Float)"Nano" == NAN). (Anatol) + +- CLI Server: + . Fixed bug #73360 (Unable to work in root with unicode chars). (Anatol) + +- SQLite3: + . Fixed bug #73333 (2147483647 is fetched as string). (cmb) + 19 Oct 2016, PHP 7.1.0RC4 - Core: . Fixed bug #73288 (Segfault in __clone > Exception.toString > __get). (Laruence) . Fixed for #73240 (Write out of bounds at number_format). (Stas) + . Fix pthreads detection when cross-compiling (ffontaine) + . Fixed bug #73337 (try/catch not working with two exceptions inside a same + operation). (Dmitry) - BCmath: . Fix bug #73190 (memcpy negative parameter _bc_new_num_ex). (Stas) @@ -56,6 +72,8 @@ PHP NEWS . Fixed bug #73037 (SoapServer reports Bad Request when gzipped). (Anatol) . Fixed bug #73237 (Nested object in "any" element overwrites other fields). (Keith Smiley) + . Fixed bug #69137 (Peer verification fails when using a proxy with SoapClient) + (Keith Smiley) - SimpleXML: . Fixed bug #73293 (NULL pointer dereference in SimpleXMLElement::asXML()). @@ -528,7 +546,8 @@ PHP NEWS (Pierre) . Fixed bug #72482 (Ilegal write/read access caused by gdImageAALine overflow). (Pierre) - . Fixed bug #72494 (imagecropauto out-of-bounds access). (Pierre) + . Fixed bug #72494 (imagecropauto out-of-bounds access). (Fernando, Pierre, + cmb) - Intl: . Partially fixed #72506 (idn_to_ascii for UTS #46 incorrect for long domain diff --git b/TSRM/threads.m4 a/TSRM/threads.m4 index 38494ce..7ef9202 100644 --- b/TSRM/threads.m4 +++ a/TSRM/threads.m4 @@ -66,9 +66,10 @@ dnl dnl Check whether the current setup can use POSIX threads calls dnl AC_DEFUN([PTHREADS_CHECK_COMPILE], [ -AC_TRY_RUN( [ +AC_TRY_LINK( [ #include <pthread.h> #include <stddef.h> + ], [ void *thread_routine(void *data) { return data; @@ -81,17 +82,10 @@ int main() { pthread_mutexattr_init(&mattr); return pthread_create(&thd, NULL, thread_routine, &data); } ], [ - pthreads_working=yes - ], [ - pthreads_working=no + pthreads_checked=yes ], [ - dnl For cross compiling running this test is of no use. NetWare supports pthreads - pthreads_working=no - case $host_alias in - *netware*) - pthreads_working=yes - esac -] + pthreads_checked=no + ] ) ] )dnl dnl dnl PTHREADS_CHECK() @@ -129,30 +123,34 @@ else CFLAGS="$CFLAGS $flag" PTHREADS_CHECK_COMPILE CFLAGS=$ac_save - if test "$pthreads_working" = "yes"; then + if test "$pthreads_checked" = "yes"; then ac_cv_pthreads_cflags=$flag break fi done fi -fi -]) + ]) -AC_CACHE_CHECK(for pthreads_lib, ac_cv_pthreads_lib,[ -ac_cv_pthreads_lib= -if test "$pthreads_working" != "yes"; then - for lib in pthread pthreads c_r; do - ac_save=$LIBS - LIBS="$LIBS -l$lib" - PTHREADS_CHECK_COMPILE - LIBS=$ac_save - if test "$pthreads_working" = "yes"; then - ac_cv_pthreads_lib=$lib - break - fi - done + AC_CACHE_CHECK(for pthreads_lib, ac_cv_pthreads_lib,[ + ac_cv_pthreads_lib= + if test "$pthreads_working" != "yes"; then + for lib in pthread pthreads c_r; do + ac_save=$LIBS + LIBS="$LIBS -l$lib" + PTHREADS_CHECK_COMPILE + LIBS=$ac_save + if test "$pthreads_checked" = "yes"; then + ac_cv_pthreads_lib=$lib + break + fi + done + fi + ]) + + if test "x$ac_cv_pthreads_cflags" != "x" -o "x$ac_cv_pthreads_lib" != "x"; then + pthreads_working="yes" + fi fi -]) if test "$pthreads_working" = "yes"; then threads_result="POSIX-Threads found" diff --git b/Zend/tests/bug73156.phpt a/Zend/tests/bug73156.phpt index b509251..327ad9e 100644 --- b/Zend/tests/bug73156.phpt +++ a/Zend/tests/bug73156.phpt @@ -1,5 +1,5 @@ --TEST-- -iBug #73156 (segfault on undefined function) +Bug #73156 (segfault on undefined function) --FILE-- <?php class A { diff --git b/Zend/tests/bug73337.phpt a/Zend/tests/bug73337.phpt new file mode 100644 index 0000000..9eff18e --- /dev/null +++ a/Zend/tests/bug73337.phpt @@ -0,0 +1,12 @@ +--TEST-- +Bug #73337 (try/catch not working with two exceptions inside a same operation) +--FILE-- +<?php +class d { function __destruct() { throw new Exception; } } +try { new d + new d; } catch (Exception $e) { print "Exception properly caught\n"; } +?> +--EXPECTF-- +Notice: Object of class d could not be converted to int in %sbug73337.php on line 3 + +Notice: Object of class d could not be converted to int in %sbug73337.php on line 3 +Exception properly caught diff --git b/Zend/tests/bug73338.phpt a/Zend/tests/bug73338.phpt new file mode 100644 index 0000000..df4c3b6 --- /dev/null +++ a/Zend/tests/bug73338.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #73338: Ensure exceptions in function init opcodes are cleaned properly +--FILE-- +<?php + +try { call_user_func(new class { function __destruct () { throw new Error; } }); } catch (Error $e) {} + +set_error_handler(function() { throw new Error; }); + +try { var_dump(new stdClass, call_user_func("fail")); } catch (Error $e) {} + +try { (function() { call_user_func("fail"); })(); } catch (Error $e) {} + +try { [new class { static function foo() {} function __destruct () { throw new Error; } }, "foo"](); } catch (Error $e) {} + +?> +--EXPECTF-- +Warning: call_user_func() expects parameter 1 to be a valid callback, no array or string given in %s on line %d diff --git b/Zend/tests/bug73350.phpt a/Zend/tests/bug73350.phpt new file mode 100644 index 0000000..7505884 --- /dev/null +++ a/Zend/tests/bug73350.phpt @@ -0,0 +1,27 @@ +--TEST-- +Bug #73350 (Exception::__toString() cause circular references) +--FILE-- +<?php +$e = new Exception(); + +// This line cause problem :( +// Comment it to see the difference. +(string) $e; + +// This line show the clue (PHP Warning: ...). +var_export($e); +?> +--EXPECTF-- +Exception::__set_state(array( + 'message' => '', + 'string' => 'Exception in %sbug73350.php:%d +Stack trace: +#0 {main}', + 'code' => 0, + 'file' => '%sbug73350.php', + 'line' => %d, + 'trace' => + array ( + ), + 'previous' => NULL, +)) diff --git b/Zend/zend_exceptions.c a/Zend/zend_exceptions.c index 331213d..8f41e1c 100644 --- b/Zend/zend_exceptions.c +++ a/Zend/zend_exceptions.c @@ -740,14 +740,15 @@ ZEND_METHOD(exception, __toString) Z_OBJPROP_P(exception)->u.v.nApplyCount++; exception = GET_PROPERTY(exception, ZEND_STR_PREVIOUS); if (exception && Z_TYPE_P(exception) == IS_OBJECT && Z_OBJPROP_P(exception)->u.v.nApplyCount > 0) { - exception = NULL; + break; } } zend_string_release(fname); + exception = getThis(); /* Reset apply counts */ while (exception && Z_TYPE_P(exception) == IS_OBJECT && (base_ce = i_get_exception_base(exception)) && instanceof_function(Z_OBJCE_P(exception), base_ce)) { - if(Z_OBJPROP_P(exception)->u.v.nApplyCount) { + if (Z_OBJPROP_P(exception)->u.v.nApplyCount) { Z_OBJPROP_P(exception)->u.v.nApplyCount--; } else { break; diff --git b/Zend/zend_execute_API.c a/Zend/zend_execute_API.c index 2e299e8..fc4a39a 100644 --- b/Zend/zend_execute_API.c +++ a/Zend/zend_execute_API.c @@ -820,10 +820,13 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) / ZEND_ADD_CALL_FLAG(call, ZEND_CALL_CLOSURE); } - if (func->type == ZEND_USER_FUNCTION) { + if (func->type == ZEND_USER_FUNCTION) { int call_via_handler = (func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) != 0; + const zend_op *current_opline_before_exception = EG(opline_before_exception); + zend_init_execute_data(call, &func->op_array, fci->retval); zend_execute_ex(call); + EG(opline_before_exception) = current_opline_before_exception; if (call_via_handler) { /* We must re-initialize function again */ fci_cache->initialized = 0; diff --git b/Zend/zend_hash.c a/Zend/zend_hash.c index ec9a5ba..fdbdcac 100644 --- b/Zend/zend_hash.c +++ a/Zend/zend_hash.c @@ -34,9 +34,7 @@ #define HT_POISONED_PTR ((HashTable *) (intptr_t) -1) #if ZEND_DEBUG -/* -#define HASH_MASK_CONSISTENCY 0xc0 -*/ + #define HT_OK 0x00 #define HT_IS_DESTROYING 0x40 #define HT_DESTROYED 0x80 @@ -44,10 +42,10 @@ static void _zend_is_inconsistent(const HashTable *ht, const char *file, int line) { - if ((ht->u.flags & HASH_MASK_CONSISTENCY) == HT_OK) { + if (ht->u.v.consistency == HT_OK) { return; } - switch ((ht->u.flags & HASH_MASK_CONSISTENCY)) { + switch (ht->u.v.consistency) { case HT_IS_DESTROYING: zend_output_debug_string(1, "%s(%d) : ht=%p is being destroyed", file, line, ht); break; @@ -65,7 +63,7 @@ static void _zend_is_inconsistent(const HashTable *ht, const char *file, int lin } #define IS_CONSISTENT(a) _zend_is_inconsistent(a, __FILE__, __LINE__); #define SET_INCONSISTENT(n) do { \ - (ht)->u.flags |= n; \ + (ht)->u.v.consistency = n; \ } while (0) #else #define IS_CONSISTENT(a) @@ -891,7 +889,7 @@ ZEND_API int ZEND_FASTCALL zend_hash_rehash(HashTable *ht) HT_HASH_RESET(ht); i = 0; p = ht->arData; - if (ht->nNumUsed == ht->nNumOfElements) { + if (HT_IS_WITHOUT_HOLES(ht)) { do { nIndex = p->h | ht->nTableMask; Z_NEXT(p->val) = HT_HASH(ht, nIndex); @@ -1232,8 +1230,8 @@ ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht) if (ht->pDestructor) { SET_INCONSISTENT(HT_IS_DESTROYING); - if (ht->u.flags & (HASH_FLAG_PACKED|HASH_FLAG_STATIC_KEYS)) { - if (ht->nNumUsed == ht->nNumOfElements) { + if (HT_HAS_STATIC_KEYS_ONLY(ht)) { + if (HT_IS_WITHOUT_HOLES(ht)) { do { ht->pDestructor(&p->val); } while (++p != end); @@ -1244,7 +1242,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht) } } while (++p != end); } - } else if (ht->nNumUsed == ht->nNumOfElements) { + } else if (HT_IS_WITHOUT_HOLES(ht)) { do { ht->pDestructor(&p->val); if (EXPECTED(p->key)) { @@ -1264,7 +1262,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht) SET_INCONSISTENT(HT_DESTROYED); } else { - if (!(ht->u.flags & (HASH_FLAG_PACKED|HASH_FLAG_STATIC_KEYS))) { + if (!HT_HAS_STATIC_KEYS_ONLY(ht)) { do { if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF)) { if (EXPECTED(p->key)) { @@ -1303,11 +1301,11 @@ ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht) end = p + ht->nNumUsed; SET_INCONSISTENT(HT_IS_DESTROYING); - if (ht->u.flags & (HASH_FLAG_PACKED|HASH_FLAG_STATIC_KEYS)) { + if (HT_HAS_STATIC_KEYS_ONLY(ht)) { do { i_zval_ptr_dtor(&p->val ZEND_FILE_LINE_CC); } while (++p != end); - } else if (ht->nNumUsed == ht->nNumOfElements) { + } else if (HT_IS_WITHOUT_HOLES(ht)) { do { i_zval_ptr_dtor(&p->val ZEND_FILE_LINE_CC); if (EXPECTED(p->key)) { @@ -1345,8 +1343,8 @@ ZEND_API void ZEND_FASTCALL zend_hash_clean(HashTable *ht) p = ht->arData; end = p + ht->nNumUsed; if (ht->pDestructor) { - if (ht->u.flags & (HASH_FLAG_PACKED|HASH_FLAG_STATIC_KEYS)) { - if (ht->nNumUsed == ht->nNumOfElements) { + if (HT_HAS_STATIC_KEYS_ONLY(ht)) { + if (HT_IS_WITHOUT_HOLES(ht)) { do { ht->pDestructor(&p->val); } while (++p != end); @@ -1357,7 +1355,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_clean(HashTable *ht) } } while (++p != end); } - } else if (ht->nNumUsed == ht->nNumOfElements) { + } else if (HT_IS_WITHOUT_HOLES(ht)) { do { ht->pDestructor(&p->val); if (EXPECTED(p->key)) { @@ -1375,8 +1373,8 @@ ZEND_API void ZEND_FASTCALL zend_hash_clean(HashTable *ht) } while (++p != end); } } else { - if (!(ht->u.flags & (HASH_FLAG_PACKED|HASH_FLAG_STATIC_KEYS))) { - if (ht->nNumUsed == ht->nNumOfElements) { + if (!HT_HAS_STATIC_KEYS_ONLY(ht)) { + if (HT_IS_WITHOUT_HOLES(ht)) { do { if (EXPECTED(p->key)) { zend_string_release(p->key); @@ -1413,11 +1411,11 @@ ZEND_API void ZEND_FASTCALL zend_symtable_clean(HashTable *ht) if (ht->nNumUsed) { p = ht->arData; end = p + ht->nNumUsed; - if (ht->u.flags & HASH_FLAG_STATIC_KEYS) { + if (HT_HAS_STATIC_KEYS_ONLY(ht)) { do { i_zval_ptr_dtor(&p->val ZEND_FILE_LINE_CC); } while (++p != end); - } else if (ht->nNumUsed == ht->nNumOfElements) { + } else if (HT_IS_WITHOUT_HOLES(ht)) { do { i_zval_ptr_dtor(&p->val ZEND_FILE_LINE_CC); if (EXPECTED(p->key)) { @@ -1805,7 +1803,7 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source) target->nInternalPointer = source->nInternalPointer; HT_HASH_RESET_PACKED(target); - if (target->nNumUsed == target->nNumOfElements) { + if (HT_IS_WITHOUT_HOLES(target)) { zend_array_dup_packed_elements(source, target, 0); } else { zend_array_dup_packed_elements(source, target, 1); @@ -1826,14 +1824,14 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source) HT_SET_DATA_ADDR(target, emalloc(HT_SIZE(target))); HT_HASH_RESET(target); - if (target->u.flags & HASH_FLAG_STATIC_KEYS) { - if (source->nNumUsed == source->nNumOfElements) { + if (HT_HAS_STATIC_KEYS_ONLY(target)) { + if (HT_IS_WITHOUT_HOLES(source)) { idx = zend_array_dup_elements(source, target, 1, 0); } else { idx = zend_array_dup_elements(source, target, 1, 1); } } else { - if (source->nNumUsed == source->nNumOfElements) { + if (HT_IS_WITHOUT_HOLES(source)) { idx = zend_array_dup_elements(source, target, 0, 0); } else { idx = zend_array_dup_elements(source, target, 0, 1); @@ -2256,7 +2254,7 @@ ZEND_API int ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort, co return SUCCESS; } - if (ht->nNumUsed == ht->nNumOfElements) { + if (HT_IS_WITHOUT_HOLES(ht)) { i = ht->nNumUsed; } else { for (j = 0, i = 0; j < ht->nNumUsed; j++) { diff --git b/Zend/zend_hash.h a/Zend/zend_hash.h index b7e6f37..190551d 100644 --- b/Zend/zend_hash.h +++ a/Zend/zend_hash.h @@ -39,10 +39,17 @@ #define HASH_FLAG_APPLY_PROTECTION (1<<1) #define HASH_FLAG_PACKED (1<<2) #define HASH_FLAG_INITIALIZED (1<<3) -#define HASH_FLAG_STATIC_KEYS (1<<4) +#define HASH_FLAG_STATIC_KEYS (1<<4) /* long and interned strings */ #define HASH_FLAG_HAS_EMPTY_IND (1<<5) -#define HASH_MASK_CONSISTENCY 0xc0 +#define HT_IS_PACKED(ht) \ + (((ht)->u.flags & HASH_FLAG_PACKED) != 0) + +#define HT_IS_WITHOUT_HOLES(ht) \ + ((ht)->nNumUsed == (ht)->nNumOfElements) + +#define HT_HAS_STATIC_KEYS_ONLY(ht) \ + (((ht)->u.flags & (HASH_FLAG_PACKED|HASH_FLAG_STATIC_KEYS)) != 0) typedef struct _zend_hash_key { zend_ulong h; diff --git b/Zend/zend_strtod_int.h a/Zend/zend_strtod_int.h index c1f66eb..5a6644b 100644 --- b/Zend/zend_strtod_int.h +++ a/Zend/zend_strtod_int.h @@ -68,6 +68,10 @@ typedef unsigned long int uint32_t; #undef USE_LOCALE #endif +#ifndef NO_INFNAN_CHECK +#define NO_INFNAN_CHECK +#endif + #ifdef WORDS_BIGENDIAN #define IEEE_BIG_ENDIAN 1 #else diff --git b/Zend/zend_types.h a/Zend/zend_types.h index 29dec8e..2a10887 100644 --- b/Zend/zend_types.h +++ a/Zend/zend_types.h @@ -182,7 +182,7 @@ struct _zend_array { zend_uchar flags, zend_uchar nApplyCount, zend_uchar nIteratorsCount, - zend_uchar reserve) + zend_uchar consistency) } v; uint32_t flags; } u; diff --git b/Zend/zend_vm_def.h a/Zend/zend_vm_def.h index 2534430..78342a0 100644 --- b/Zend/zend_vm_def.h +++ a/Zend/zend_vm_def.h @@ -3234,15 +3234,19 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|THIS|CV, CONST|T GC_REFCOUNT(obj)++; /* For $this pointer */ } + FREE_OP2(); + FREE_OP1(); + + if ((OP1_TYPE & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - FREE_OP2(); - FREE_OP1(); - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CLASS_FETCH|CONST|VAR, CONST|TMPVAR|UNUSED|CONSTRUCTOR|CV, NUM) @@ -3397,7 +3401,7 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CLASS_FETCH|CONST|VAR, call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY, CONST, NUM) @@ -3461,12 +3465,26 @@ ZEND_VM_C_LABEL(try_function_name): call = NULL; } - FREE_OP2(); - if (UNEXPECTED(!call)) { HANDLE_EXCEPTION(); } + FREE_OP2(); + if (OP2_TYPE & (IS_VAR|IS_TMP_VAR)) { + if (UNEXPECTED(EG(exception))) { + if (call) { + if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) { + zend_string_release(call->func->common.function_name); + zend_free_trampoline(call->func); + } + zend_vm_stack_free_call_frame(call); + } + HANDLE_EXCEPTION(); + } + } else if (UNEXPECTED(!call)) { + HANDLE_EXCEPTION(); + } + call->prev_execute_data = EX(call); EX(call) = call; @@ -3492,6 +3510,17 @@ ZEND_VM_HANDLER(118, ZEND_INIT_USER_CALL, CONST, CONST|TMPVAR|CV, NUM) func = fcc.function_handler; called_scope = fcc.called_scope; object = fcc.object; + if (error) { + efree(error); + /* This is the only soft error is_callable() can generate */ + zend_error(E_DEPRECATED, + "Non-static method %s::%s() should not be called statically", + ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name)); + if (UNEXPECTED(EG(exception) != NULL)) { + FREE_OP2(); + HANDLE_EXCEPTION(); + } + } if (func->common.fn_flags & ZEND_ACC_CLOSURE) { /* Delay closure destruction until its invocation */ if (OP2_TYPE & (IS_VAR|IS_CV)) { @@ -3504,22 +3533,28 @@ ZEND_VM_HANDLER(118, ZEND_INIT_USER_CALL, CONST, CONST|TMPVAR|CV, NUM) call_info |= ZEND_CALL_RELEASE_THIS; GC_REFCOUNT(object)++; /* For $this pointer */ } - if (error) { - efree(error); - /* This is the only soft error is_callable() can generate */ - zend_error(E_DEPRECATED, - "Non-static method %s::%s() should not be called statically", - ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name)); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + + FREE_OP2(); + if ((OP2_TYPE & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) { + if (call_info & ZEND_CALL_CLOSURE) { + zend_object_release((zend_object*)func->common.prototype); } + if (call_info & ZEND_CALL_RELEASE_THIS) { + zend_object_release(object); + } + HANDLE_EXCEPTION(); } + if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) { init_func_run_time_cache(&func->op_array); } } else { zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(EX_CONSTANT(opline->op1)), error); efree(error); + FREE_OP2(); + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } func = (zend_function*)&zend_pass_function; called_scope = NULL; object = NULL; @@ -3530,8 +3565,7 @@ ZEND_VM_HANDLER(118, ZEND_INIT_USER_CALL, CONST, CONST|TMPVAR|CV, NUM) call->prev_execute_data = EX(call); EX(call) = call; - FREE_OP2(); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(69, ZEND_INIT_NS_FCALL_BY_NAME, ANY, CONST, NUM) @@ -4992,7 +5026,7 @@ ZEND_VM_HANDLER(68, ZEND_NEW, UNUSED|CLASS_FETCH|CONST|VAR, ANY, NUM) call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|THIS|CV, ANY) diff --git b/Zend/zend_vm_execute.h a/Zend/zend_vm_execute.h index 4c09072..a8a0466 100644 --- b/Zend/zend_vm_execute.h +++ a/Zend/zend_vm_execute.h @@ -2179,6 +2179,21 @@ try_function_name: HANDLE_EXCEPTION(); } + if (IS_CONST & (IS_VAR|IS_TMP_VAR)) { + if (UNEXPECTED(EG(exception))) { + if (call) { + if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) { + zend_string_release(call->func->common.function_name); + zend_free_trampoline(call->func); + } + zend_vm_stack_free_call_frame(call); + } + HANDLE_EXCEPTION(); + } + } else if (UNEXPECTED(!call)) { + HANDLE_EXCEPTION(); + } + call->prev_execute_data = EX(call); EX(call) = call; @@ -2475,6 +2490,21 @@ try_function_name: HANDLE_EXCEPTION(); } + if (IS_CV & (IS_VAR|IS_TMP_VAR)) { + if (UNEXPECTED(EG(exception))) { + if (call) { + if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) { + zend_string_release(call->func->common.function_name); + zend_free_trampoline(call->func); + } + zend_vm_stack_free_call_frame(call); + } + HANDLE_EXCEPTION(); + } + } else if (UNEXPECTED(!call)) { + HANDLE_EXCEPTION(); + } + call->prev_execute_data = EX(call); EX(call) = call; @@ -2555,12 +2585,26 @@ try_function_name: call = NULL; } - zval_ptr_dtor_nogc(free_op2); - if (UNEXPECTED(!call)) { HANDLE_EXCEPTION(); } + zval_ptr_dtor_nogc(free_op2); + if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) { + if (UNEXPECTED(EG(exception))) { + if (call) { + if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) { + zend_string_release(call->func->common.function_name); + zend_free_trampoline(call->func); + } + zend_vm_stack_free_call_frame(call); + } + HANDLE_EXCEPTION(); + } + } else if (UNEXPECTED(!call)) { + HANDLE_EXCEPTION(); + } + call->prev_execute_data = EX(call); EX(call) = call; @@ -3223,7 +3267,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_HANDLER(ZEND_OP call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -5409,13 +5453,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CO GC_REFCOUNT(obj)++; /* For $this pointer */ } + + if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -5570,7 +5618,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -5592,6 +5640,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONS func = fcc.function_handler; called_scope = fcc.called_scope; object = fcc.object; + if (error) { + efree(error); + /* This is the only soft error is_callable() can generate */ + zend_error(E_DEPRECATED, + "Non-static method %s::%s() should not be called statically", + ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name)); + if (UNEXPECTED(EG(exception) != NULL)) { + + HANDLE_EXCEPTION(); + } + } if (func->common.fn_flags & ZEND_ACC_CLOSURE) { /* Delay closure destruction until its invocation */ if (IS_CONST & (IS_VAR|IS_CV)) { @@ -5604,22 +5663,27 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONS call_info |= ZEND_CALL_RELEASE_THIS; GC_REFCOUNT(object)++; /* For $this pointer */ } - if (error) { - efree(error); - /* This is the only soft error is_callable() can generate */ - zend_error(E_DEPRECATED, - "Non-static method %s::%s() should not be called statically", - ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name)); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + + if ((IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) { + if (call_info & ZEND_CALL_CLOSURE) { + zend_object_release((zend_object*)func->common.prototype); } + if (call_info & ZEND_CALL_RELEASE_THIS) { + zend_object_release(object); + } + HANDLE_EXCEPTION(); } + if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) { init_func_run_time_cache(&func->op_array); } } else { zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(EX_CONSTANT(opline->op1)), error); efree(error); + + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } func = (zend_function*)&zend_pass_function; called_scope = NULL; object = NULL; @@ -5630,7 +5694,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONS call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -7542,7 +7606,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -9304,13 +9368,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV GC_REFCOUNT(obj)++; /* For $this pointer */ } + + if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -9465,7 +9533,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -9487,6 +9555,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_H func = fcc.function_handler; called_scope = fcc.called_scope; object = fcc.object; + if (error) { + efree(error); + /* This is the only soft error is_callable() can generate */ + zend_error(E_DEPRECATED, + "Non-static method %s::%s() should not be called statically", + ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name)); + if (UNEXPECTED(EG(exception) != NULL)) { + + HANDLE_EXCEPTION(); + } + } if (func->common.fn_flags & ZEND_ACC_CLOSURE) { /* Delay closure destruction until its invocation */ if (IS_CV & (IS_VAR|IS_CV)) { @@ -9499,22 +9578,27 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_H call_info |= ZEND_CALL_RELEASE_THIS; GC_REFCOUNT(object)++; /* For $this pointer */ } - if (error) { - efree(error); - /* This is the only soft error is_callable() can generate */ - zend_error(E_DEPRECATED, - "Non-static method %s::%s() should not be called statically", - ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name)); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + + if ((IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) { + if (call_info & ZEND_CALL_CLOSURE) { + zend_object_release((zend_object*)func->common.prototype); } + if (call_info & ZEND_CALL_RELEASE_THIS) { + zend_object_release(object); + } + HANDLE_EXCEPTION(); } + if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) { init_func_run_time_cache(&func->op_array); } } else { zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(EX_CONSTANT(opline->op1)), error); efree(error); + + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } func = (zend_function*)&zend_pass_function; called_scope = NULL; object = NULL; @@ -9525,7 +9609,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_H call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -11262,14 +11346,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TM GC_REFCOUNT(obj)++; /* For $this pointer */ } + zval_ptr_dtor_nogc(free_op2); + + if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - zval_ptr_dtor_nogc(free_op2); - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -11424,7 +11512,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -11446,6 +11534,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPV func = fcc.function_handler; called_scope = fcc.called_scope; object = fcc.object; + if (error) { + efree(error); + /* This is the only soft error is_callable() can generate */ + zend_error(E_DEPRECATED, + "Non-static method %s::%s() should not be called statically", + ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name)); + if (UNEXPECTED(EG(exception) != NULL)) { + zval_ptr_dtor_nogc(free_op2); + HANDLE_EXCEPTION(); + } + } if (func->common.fn_flags & ZEND_ACC_CLOSURE) { /* Delay closure destruction until its invocation */ if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) { @@ -11458,22 +11557,28 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPV call_info |= ZEND_CALL_RELEASE_THIS; GC_REFCOUNT(object)++; /* For $this pointer */ } - if (error) { - efree(error); - /* This is the only soft error is_callable() can generate */ - zend_error(E_DEPRECATED, - "Non-static method %s::%s() should not be called statically", - ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name)); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + + zval_ptr_dtor_nogc(free_op2); + if (((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) { + if (call_info & ZEND_CALL_CLOSURE) { + zend_object_release((zend_object*)func->common.prototype); + } + if (call_info & ZEND_CALL_RELEASE_THIS) { + zend_object_release(object); } + HANDLE_EXCEPTION(); } + if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) { init_func_run_time_cache(&func->op_array); } } else { zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(EX_CONSTANT(opline->op1)), error); efree(error); + zval_ptr_dtor_nogc(free_op2); + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } func = (zend_function*)&zend_pass_function; called_scope = NULL; object = NULL; @@ -11484,8 +11589,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPV call->prev_execute_data = EX(call); EX(call) = call; - zval_ptr_dtor_nogc(free_op2); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -16223,7 +16327,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_HANDLER(ZEND_OPCO call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -19840,7 +19944,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -21733,7 +21837,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -24680,7 +24784,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -27515,7 +27619,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -27842,7 +27946,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_HANDLER(ZEND_O call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -29424,13 +29528,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C GC_REFCOUNT(obj)++; /* For $this pointer */ } + + if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -29585,7 +29693,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -30383,7 +30491,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -32106,13 +32214,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C GC_REFCOUNT(obj)++; /* For $this pointer */ } + + if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -32267,7 +32379,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -33994,14 +34106,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_T GC_REFCOUNT(obj)++; /* For $this pointer */ } + zval_ptr_dtor_nogc(free_op2); + + if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - zval_ptr_dtor_nogc(free_op2); - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -34156,7 +34272,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U call->prev_execute_data = EX(call); EX(call) = call; - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -39583,13 +39699,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST GC_REFCOUNT(obj)++; /* For $this pointer */ } + + if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -46553,13 +46673,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HA GC_REFCOUNT(obj)++; /* For $this pointer */ } + + if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -50512,14 +50636,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVA GC_REFCOUNT(obj)++; /* For $this pointer */ } + zval_ptr_dtor_nogc(free_op2); + + if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - zval_ptr_dtor_nogc(free_op2); - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -52728,14 +52856,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C GC_REFCOUNT(obj)++; /* For $this pointer */ } + zval_ptr_dtor_nogc(free_op1); + + if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - zval_ptr_dtor_nogc(free_op1); - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -55126,14 +55258,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C GC_REFCOUNT(obj)++; /* For $this pointer */ } + zval_ptr_dtor_nogc(free_op1); + + if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - zval_ptr_dtor_nogc(free_op1); - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -56407,15 +56543,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_T GC_REFCOUNT(obj)++; /* For $this pointer */ } + zval_ptr_dtor_nogc(free_op2); + zval_ptr_dtor_nogc(free_op1); + + if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } + call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; - zval_ptr_dtor_nogc(free_op2); - zval_ptr_dtor_nogc(free_op1); - - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) diff --git b/configure.in a/configure.in index 5035e10..5de49d1 100644 --- b/configure.in +++ a/configure.in @@ -120,7 +120,7 @@ int zend_sprintf(char *buffer, const char *format, ...); PHP_MAJOR_VERSION=7 PHP_MINOR_VERSION=1 PHP_RELEASE_VERSION=0 -PHP_EXTRA_VERSION="RC4" +PHP_EXTRA_VERSION="RC5" 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` diff --git b/ext/date/lib/timezonedb.h a/ext/date/lib/timezonedb.h index cead481..524fc1f 100644 --- b/ext/date/lib/timezonedb.h +++ a/ext/date/lib/timezonedb.h @@ -259,347 +259,347 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[590] = { { "Asia/Chongqing" , FOR_V2(0x045A20, 0x01B2C7) }, { "Asia/Chungking" , FOR_V2(0x045BCA, 0x01B378) }, { "Asia/Colombo" , FOR_V2(0x045D74, 0x01B429) }, - { "Asia/Dacca" , FOR_V2(0x045F05, 0x01B4DE) }, - { "Asia/Damascus" , FOR_V2(0x046097, 0x01B595) }, - { "Asia/Dhaka" , FOR_V2(0x0469B3, 0x01B8EA) }, - { "Asia/Dili" , FOR_V2(0x046B45, 0x01B9A1) }, - { "Asia/Dubai" , FOR_V2(0x046C86, 0x01BA38) }, - { "Asia/Dushanbe" , FOR_V2(0x046D3D, 0x01BA92) }, - { "Asia/Gaza" , FOR_V2(0x046FB6, 0x01BB9C) }, - { "Asia/Harbin" , FOR_V2(0x0478D5, 0x01BF00) }, - { "Asia/Hebron" , FOR_V2(0x047A7F, 0x01BFB1) }, - { "Asia/Ho_Chi_Minh" , FOR_V2(0x0483B9, 0x01C31E) }, - { "Asia/Hong_Kong" , FOR_V2(0x04853A, 0x01C3CD) }, - { "Asia/Hovd" , FOR_V2(0x0489EB, 0x01C59C) }, - { "Asia/Irkutsk" , FOR_V2(0x04900B, 0x01C7FF) }, - { "Asia/Istanbul" , FOR_V2(0x04952D, 0x01CA14) }, - { "Asia/Jakarta" , FOR_V2(0x049DAF, 0x01CD4C) }, - { "Asia/Jayapura" , FOR_V2(0x049F3A, 0x01CE06) }, - { "Asia/Jerusalem" , FOR_V2(0x04A06D, 0x01CEB5) }, - { "Asia/Kabul" , FOR_V2(0x04A952, 0x01D1FD) }, - { "Asia/Kamchatka" , FOR_V2(0x04AA25, 0x01D25F) }, - { "Asia/Karachi" , FOR_V2(0x04AEF1, 0x01D44B) }, - { "Asia/Kashgar" , FOR_V2(0x04B090, 0x01D505) }, - { "Asia/Kathmandu" , FOR_V2(0x04B147, 0x01D55F) }, - { "Asia/Katmandu" , FOR_V2(0x04B227, 0x01D5CA) }, - { "Asia/Khandyga" , FOR_V2(0x04B307, 0x01D635) }, - { "Asia/Kolkata" , FOR_V2(0x04B850, 0x01D860) }, - { "Asia/Krasnoyarsk" , FOR_V2(0x04B97F, 0x01D8EA) }, - { "Asia/Kuala_Lumpur" , FOR_V2(0x04BE7F, 0x01DAF2) }, - { "Asia/Kuching" , FOR_V2(0x04C02D, 0x01DBC1) }, - { "Asia/Kuwait" , FOR_V2(0x04C24E, 0x01DCB3) }, - { "Asia/Macao" , FOR_V2(0x04C305, 0x01DD0D) }, - { "Asia/Macau" , FOR_V2(0x04C62C, 0x01DE4D) }, - { "Asia/Magadan" , FOR_V2(0x04C953, 0x01DF8D) }, - { "Asia/Makassar" , FOR_V2(0x04CE59, 0x01E191) }, - { "Asia/Manila" , FOR_V2(0x04CFC6, 0x01E264) }, - { "Asia/Muscat" , FOR_V2(0x04D13B, 0x01E302) }, - { "Asia/Nicosia" , FOR_V2(0x04D1F2, 0x01E35C) }, - { "Asia/Novokuznetsk" , FOR_V2(0x04D9DE, 0x01E649) }, - { "Asia/Novosibirsk" , FOR_V2(0x04DEA8, 0x01E834) }, - { "Asia/Omsk" , FOR_V2(0x04E3AF, 0x01EA39) }, - { "Asia/Oral" , FOR_V2(0x04E8A3, 0x01EC35) }, - { "Asia/Phnom_Penh" , FOR_V2(0x04ECC5, 0x01EDE5) }, - { "Asia/Pontianak" , FOR_V2(0x04ED9D, 0x01EE4B) }, - { "Asia/Pyongyang" , FOR_V2(0x04EF36, 0x01EF13) }, - { "Asia/Qatar" , FOR_V2(0x04F07A, 0x01EFAA) }, - { "Asia/Qyzylorda" , FOR_V2(0x04F157, 0x01F015) }, - { "Asia/Rangoon" , FOR_V2(0x04F597, 0x01F1DB) }, - { "Asia/Riyadh" , FOR_V2(0x04F6C0, 0x01F264) }, - { "Asia/Saigon" , FOR_V2(0x04F777, 0x01F2BE) }, - { "Asia/Sakhalin" , FOR_V2(0x04F8F8, 0x01F36D) }, - { "Asia/Samarkand" , FOR_V2(0x04FDEE, 0x01F56D) }, - { "Asia/Seoul" , FOR_V2(0x050076, 0x01F685) }, - { "Asia/Shanghai" , FOR_V2(0x0502BD, 0x01F77D) }, - { "Asia/Singapore" , FOR_V2(0x050473, 0x01F83A) }, - { "Asia/Srednekolymsk" , FOR_V2(0x05062B, 0x01F902) }, - { "Asia/Taipei" , FOR_V2(0x050B35, 0x01FB13) }, - { "Asia/Tashkent" , FOR_V2(0x050E61, 0x01FC55) }, - { "Asia/Tbilisi" , FOR_V2(0x0510F9, 0x01FD75) }, - { "Asia/Tehran" , FOR_V2(0x05153D, 0x01FF28) }, - { "Asia/Tel_Aviv" , FOR_V2(0x051BD7, 0x0201A3) }, - { "Asia/Thimbu" , FOR_V2(0x0524BC, 0x0204EB) }, - { "Asia/Thimphu" , FOR_V2(0x052599, 0x020556) }, - { "Asia/Tokyo" , FOR_V2(0x052676, 0x0205C1) }, - { "Asia/Tomsk" , FOR_V2(0x0527E5, 0x020658) }, - { "Asia/Ujung_Pandang" , FOR_V2(0x052CE6, 0x020857) }, - { "Asia/Ulaanbaatar" , FOR_V2(0x052E0A, 0x0208E1) }, - { "Asia/Ulan_Bator" , FOR_V2(0x053414, 0x020B2E) }, - { "Asia/Urumqi" , FOR_V2(0x053A09, 0x020D66) }, - { "Asia/Ust-Nera" , FOR_V2(0x053ACD, 0x020DCD) }, - { "Asia/Vientiane" , FOR_V2(0x053FF7, 0x020FE5) }, - { "Asia/Vladivostok" , FOR_V2(0x0540CF, 0x02104B) }, - { "Asia/Yakutsk" , FOR_V2(0x0545CA, 0x02124D) }, - { "Asia/Yangon" , FOR_V2(0x054AC4, 0x02144F) }, - { "Asia/Yekaterinburg" , FOR_V2(0x054BED, 0x0214D8) }, - { "Asia/Yerevan" , FOR_V2(0x055108, 0x0216E6) }, - { "Atlantic/Azores" , FOR_V2(0x0555C3, 0x0218C3) }, - { "Atlantic/Bermuda" , FOR_V2(0x056375, 0x021DD7) }, - { "Atlantic/Canary" , FOR_V2(0x056B55, 0x0220BD) }, - { "Atlantic/Cape_Verde" , FOR_V2(0x0572E8, 0x022398) }, - { "Atlantic/Faeroe" , FOR_V2(0x0573F2, 0x022416) }, - { "Atlantic/Faroe" , FOR_V2(0x057B23, 0x0226BF) }, - { "Atlantic/Jan_Mayen" , FOR_V2(0x058254, 0x022968) }, - { "Atlantic/Madeira" , FOR_V2(0x058B2B, 0x022CAB) }, - { "Atlantic/Reykjavik" , FOR_V2(0x0598DC, 0x0231C5) }, - { "Atlantic/South_Georgia" , FOR_V2(0x059D8E, 0x023397) }, - { "Atlantic/St_Helena" , FOR_V2(0x059E2E, 0x0233DB) }, - { "Atlantic/Stanley" , FOR_V2(0x059EE4, 0x023435) }, - { "Australia/ACT" , FOR_V2(0x05A3CE, 0x02361C) }, - { "Australia/Adelaide" , FOR_V2(0x05AC89, 0x023950) }, - { "Australia/Brisbane" , FOR_V2(0x05B562, 0x023C8F) }, - { "Australia/Broken_Hill" , FOR_V2(0x05B749, 0x023D69) }, - { "Australia/Canberra" , FOR_V2(0x05C053, 0x0240BA) }, - { "Australia/Currie" , FOR_V2(0x05C90E, 0x0243EE) }, - { "Australia/Darwin" , FOR_V2(0x05D1DF, 0x024738) }, - { "Australia/Eucla" , FOR_V2(0x05D340, 0x0247D1) }, - { "Australia/Hobart" , FOR_V2(0x05D54C, 0x0248B9) }, - { "Australia/LHI" , FOR_V2(0x05DE8C, 0x024C2A) }, - { "Australia/Lindeman" , FOR_V2(0x05E5DB, 0x024EDC) }, - { "Australia/Lord_Howe" , FOR_V2(0x05E810, 0x024FD7) }, - { "Australia/Melbourne" , FOR_V2(0x05EF6F, 0x025299) }, - { "Australia/North" , FOR_V2(0x05F832, 0x0255D5) }, - { "Australia/NSW" , FOR_V2(0x05F981, 0x02565C) }, - { "Australia/Perth" , FOR_V2(0x06023C, 0x025990) }, - { "Australia/Queensland" , FOR_V2(0x060445, 0x025A7B) }, - { "Australia/South" , FOR_V2(0x060615, 0x025B3E) }, - { "Australia/Sydney" , FOR_V2(0x060EDF, 0x025E6E) }, - { "Australia/Tasmania" , FOR_V2(0x0617B6, 0x0261BE) }, - { "Australia/Victoria" , FOR_V2(0x0620E1, 0x02651A) }, - { "Australia/West" , FOR_V2(0x06299C, 0x02684E) }, - { "Australia/Yancowinna" , FOR_V2(0x062B87, 0x02691B) }, - { "Brazil/Acre" , FOR_V2(0x063475, 0x026C50) }, - { "Brazil/DeNoronha" , FOR_V2(0x063711, 0x026D61) }, - { "Brazil/East" , FOR_V2(0x0639F5, 0x026E86) }, - { "Brazil/West" , FOR_V2(0x0641E0, 0x027168) }, - { "Canada/Atlantic" , FOR_V2(0x064454, 0x027265) }, - { "Canada/Central" , FOR_V2(0x0651CE, 0x027752) }, - { "Canada/East-Saskatchewan" , FOR_V2(0x065D25, 0x027B7D) }, - { "Canada/Eastern" , FOR_V2(0x066113, 0x027D0B) }, - { "Canada/Mountain" , FOR_V2(0x066ECE, 0x02820C) }, - { "Canada/Newfoundland" , FOR_V2(0x06783C, 0x028587) }, - { "Canada/Pacific" , FOR_V2(0x068698, 0x028ACB) }, - { "Canada/Saskatchewan" , FOR_V2(0x0691F9, 0x028EF5) }, - { "Canada/Yukon" , FOR_V2(0x0695E7, 0x029083) }, - { "CET" , FOR_V2(0x069E20, 0x029397) }, - { "Chile/Continental" , FOR_V2(0x06A662, 0x0296A0) }, - { "Chile/EasterIsland" , FOR_V2(0x06B041, 0x029A44) }, - { "CST6CDT" , FOR_V2(0x06B8FE, 0x029D7E) }, - { "Cuba" , FOR_V2(0x06C200, 0x02A0CF) }, - { "EET" , FOR_V2(0x06CB91, 0x02A453) }, - { "Egypt" , FOR_V2(0x06D2F1, 0x02A706) }, - { "Eire" , FOR_V2(0x06DAB1, 0x02A9E6) }, - { "EST" , FOR_V2(0x06E8A4, 0x02AF08) }, - { "EST5EDT" , FOR_V2(0x06E92F, 0x02AF4C) }, - { "Etc/GMT" , FOR_V2(0x06F231, 0x02B29D) }, - { "Etc/GMT+0" , FOR_V2(0x06F2BC, 0x02B2E1) }, - { "Etc/GMT+1" , FOR_V2(0x06F347, 0x02B325) }, - { "Etc/GMT+10" , FOR_V2(0x06F3E7, 0x02B373) }, - { "Etc/GMT+11" , FOR_V2(0x06F488, 0x02B3C1) }, - { "Etc/GMT+12" , FOR_V2(0x06F529, 0x02B40F) }, - { "Etc/GMT+2" , FOR_V2(0x06F5CA, 0x02B45D) }, - { "Etc/GMT+3" , FOR_V2(0x06F66A, 0x02B4AB) }, - { "Etc/GMT+4" , FOR_V2(0x06F70A, 0x02B4F9) }, - { "Etc/GMT+5" , FOR_V2(0x06F7AA, 0x02B547) }, - { "Etc/GMT+6" , FOR_V2(0x06F84A, 0x02B595) }, - { "Etc/GMT+7" , FOR_V2(0x06F8EA, 0x02B5E3) }, - { "Etc/GMT+8" , FOR_V2(0x06F98A, 0x02B631) }, - { "Etc/GMT+9" , FOR_V2(0x06FA2A, 0x02B67F) }, - { "Etc/GMT-0" , FOR_V2(0x06FACA, 0x02B6CD) }, - { "Etc/GMT-1" , FOR_V2(0x06FB55, 0x02B711) }, - { "Etc/GMT-10" , FOR_V2(0x06FBF6, 0x02B75F) }, - { "Etc/GMT-11" , FOR_V2(0x06FC98, 0x02B7AD) }, - { "Etc/GMT-12" , FOR_V2(0x06FD3A, 0x02B7FB) }, - { "Etc/GMT-13" , FOR_V2(0x06FDDC, 0x02B849) }, - { "Etc/GMT-14" , FOR_V2(0x06FE7E, 0x02B897) }, - { "Etc/GMT-2" , FOR_V2(0x06FF20, 0x02B8E5) }, - { "Etc/GMT-3" , FOR_V2(0x06FFC1, 0x02B933) }, - { "Etc/GMT-4" , FOR_V2(0x070062, 0x02B981) }, - { "Etc/GMT-5" , FOR_V2(0x070103, 0x02B9CF) }, - { "Etc/GMT-6" , FOR_V2(0x0701A4, 0x02BA1D) }, - { "Etc/GMT-7" , FOR_V2(0x070245, 0x02BA6B) }, - { "Etc/GMT-8" , FOR_V2(0x0702E6, 0x02BAB9) }, - { "Etc/GMT-9" , FOR_V2(0x070387, 0x02BB07) }, - { "Etc/GMT0" , FOR_V2(0x070428, 0x02BB55) }, - { "Etc/Greenwich" , FOR_V2(0x0704B3, 0x02BB99) }, - { "Etc/UCT" , FOR_V2(0x07053E, 0x02BBDD) }, - { "Etc/Universal" , FOR_V2(0x0705C9, 0x02BC21) }, - { "Etc/UTC" , FOR_V2(0x070654, 0x02BC65) }, - { "Etc/Zulu" , FOR_V2(0x0706DF, 0x02BCA9) }, - { "Europe/Amsterdam" , FOR_V2(0x07076A, 0x02BCED) }, - { "Europe/Andorra" , FOR_V2(0x0712F5, 0x02C13C) }, - { "Europe/Astrakhan" , FOR_V2(0x0719D8, 0x02C3C9) }, - { "Europe/Athens" , FOR_V2(0x071EA3, 0x02C5B5) }, - { "Europe/Belfast" , FOR_V2(0x07278E, 0x02C909) }, - { "Europe/Belgrade" , FOR_V2(0x073601, 0x02CE51) }, - { "Europe/Berlin" , FOR_V2(0x073DB2, 0x02D12B) }, - { "Europe/Bratislava" , FOR_V2(0x0746F1, 0x02D4A6) }, - { "Europe/Brussels" , FOR_V2(0x074FDD, 0x02D7E9) }, - { "Europe/Bucharest" , FOR_V2(0x075B83, 0x02DC31) }, - { "Europe/Budapest" , FOR_V2(0x07643C, 0x02DF6C) }, - { "Europe/Busingen" , FOR_V2(0x076DAD, 0x02E2E6) }, - { "Europe/Chisinau" , FOR_V2(0x07753F, 0x02E5AE) }, - { "Europe/Copenhagen" , FOR_V2(0x077ED8, 0x02E952) }, - { "Europe/Dublin" , FOR_V2(0x078754, 0x02EC6D) }, - { "Europe/Gibraltar" , FOR_V2(0x079547, 0x02F18F) }, - { "Europe/Guernsey" , FOR_V2(0x07A148, 0x02F5F7) }, - { "Europe/Helsinki" , FOR_V2(0x07AFBB, 0x02FB3F) }, - { "Europe/Isle_of_Man" , FOR_V2(0x07B73C, 0x02FE06) }, - { "Europe/Istanbul" , FOR_V2(0x07C5AF, 0x03034E) }, - { "Europe/Jersey" , FOR_V2(0x07CE31, 0x030686) }, - { "Europe/Kaliningrad" , FOR_V2(0x07DCA4, 0x030BCE) }, - { "Europe/Kiev" , FOR_V2(0x07E2B2, 0x030E3F) }, - { "Europe/Kirov" , FOR_V2(0x07EB03, 0x031172) }, - { "Europe/Lisbon" , FOR_V2(0x07EFAC, 0x03134D) }, - { "Europe/Ljubljana" , FOR_V2(0x07FD48, 0x031861) }, - { "Europe/London" , FOR_V2(0x0804F9, 0x031B3B) }, - { "Europe/Luxembourg" , FOR_V2(0x08136C, 0x032083) }, - { "Europe/Madrid" , FOR_V2(0x081F16, 0x0324DE) }, - { "Europe/Malta" , FOR_V2(0x08296D, 0x0328BD) }, - { "Europe/Mariehamn" , FOR_V2(0x0833BE, 0x032C87) }, - { "Europe/Minsk" , FOR_V2(0x083B3F, 0x032F4E) }, - { "Europe/Monaco" , FOR_V2(0x0840A5, 0x033172) }, - { "Europe/Moscow" , FOR_V2(0x084C3A, 0x0335BE) }, - { "Europe/Nicosia" , FOR_V2(0x085262, 0x03383E) }, - { "Europe/Oslo" , FOR_V2(0x085A4E, 0x033B2B) }, - { "Europe/Paris" , FOR_V2(0x086325, 0x033E6E) }, - { "Europe/Podgorica" , FOR_V2(0x086ECC, 0x0342C5) }, - { "Europe/Prague" , FOR_V2(0x08767D, 0x03459F) }, - { "Europe/Riga" , FOR_V2(0x087F69, 0x0348E2) }, - { "Europe/Rome" , FOR_V2(0x088830, 0x034C38) }, - { "Europe/Samara" , FOR_V2(0x0892B2, 0x03500C) }, - { "Europe/San_Marino" , FOR_V2(0x0897BC, 0x03521B) }, - { "Europe/Sarajevo" , FOR_V2(0x08A23E, 0x0355EF) }, - { "Europe/Simferopol" , FOR_V2(0x08A9EF, 0x0358C9) }, - { "Europe/Skopje" , FOR_V2(0x08AFDC, 0x035B2B) }, - { "Europe/Sofia" , FOR_V2(0x08B78D, 0x035E05) }, - { "Europe/Stockholm" , FOR_V2(0x08BFEB, 0x03611E) }, - { "Europe/Tallinn" , FOR_V2(0x08C775, 0x0363DE) }, - { "Europe/Tirane" , FOR_V2(0x08D00C, 0x036724) }, - { "Europe/Tiraspol" , FOR_V2(0x08D84A, 0x036A2F) }, - { "Europe/Ulyanovsk" , FOR_V2(0x08E1E3, 0x036DD3) }, - { "Europe/Uzhgorod" , FOR_V2(0x08E702, 0x036FE5) }, - { "Europe/Vaduz" , FOR_V2(0x08EF4D, 0x03730D) }, - { "Europe/Vatican" , FOR_V2(0x08F6D7, 0x0375CD) }, - { "Europe/Vienna" , FOR_V2(0x090159, 0x0379A1) }, - { "Europe/Vilnius" , FOR_V2(0x090A22, 0x037CDF) }, - { "Europe/Volgograd" , FOR_V2(0x0912C5, 0x03802F) }, - { "Europe/Warsaw" , FOR_V2(0x09177B, 0x038217) }, - { "Europe/Zagreb" , FOR_V2(0x092218, 0x038609) }, - { "Europe/Zaporozhye" , FOR_V2(0x0929C9, 0x0388E3) }, - { "Europe/Zurich" , FOR_V2(0x093242, 0x038C35) }, - { "Factory" , FOR_V2(0x0939CC, 0x038EF5) }, - { "GB" , FOR_V2(0x093A6C, 0x038F43) }, - { "GB-Eire" , FOR_V2(0x0948DF, 0x03948B) }, - { "GMT" , FOR_V2(0x095752, 0x0399D3) }, - { "GMT+0" , FOR_V2(0x0957DD, 0x039A17) }, - { "GMT-0" , FOR_V2(0x095868, 0x039A5B) }, - { "GMT0" , FOR_V2(0x0958F3, 0x039A9F) }, - { "Greenwich" , FOR_V2(0x09597E, 0x039AE3) }, - { "Hongkong" , FOR_V2(0x095A09, 0x039B27) }, - { "HST" , FOR_V2(0x095EBA, 0x039CF6) }, - { "Iceland" , FOR_V2(0x095F46, 0x039D3A) }, - { "Indian/Antananarivo" , FOR_V2(0x0963F8, 0x039F0C) }, - { "Indian/Chagos" , FOR_V2(0x09651F, 0x039F98) }, - { "Indian/Christmas" , FOR_V2(0x0965F4, 0x039FFF) }, - { "Indian/Cocos" , FOR_V2(0x096695, 0x03A043) }, - { "Indian/Comoro" , FOR_V2(0x096739, 0x03A087) }, - { "Indian/Kerguelen" , FOR_V2(0x096860, 0x03A113) }, - { "Indian/Mahe" , FOR_V2(0x096927, 0x03A172) }, - { "Indian/Maldives" , FOR_V2(0x0969DE, 0x03A1CC) }, - { "Indian/Mauritius" , FOR_V2(0x096AB6, 0x03A232) }, - { "Indian/Mayotte" , FOR_V2(0x096BBF, 0x03A2AD) }, - { "Indian/Reunion" , FOR_V2(0x096CE6, 0x03A339) }, - { "Iran" , FOR_V2(0x096D9D, 0x03A393) }, - { "Israel" , FOR_V2(0x097437, 0x03A60E) }, - { "Jamaica" , FOR_V2(0x097D1C, 0x03A956) }, - { "Japan" , FOR_V2(0x097F23, 0x03AA2C) }, - { "Kwajalein" , FOR_V2(0x098092, 0x03AAC3) }, - { "Libya" , FOR_V2(0x09818B, 0x03AB37) }, - { "MET" , FOR_V2(0x098426, 0x03AC45) }, - { "Mexico/BajaNorte" , FOR_V2(0x098C68, 0x03AF4E) }, - { "Mexico/BajaSur" , FOR_V2(0x0995A8, 0x03B2BC) }, - { "Mexico/General" , FOR_V2(0x099BD0, 0x03B50E) }, - { "MST" , FOR_V2(0x09A22E, 0x03B771) }, - { "MST7MDT" , FOR_V2(0x09A2B9, 0x03B7B5) }, - { "Navajo" , FOR_V2(0x09ABBB, 0x03BB06) }, - { "NZ" , FOR_V2(0x09B55C, 0x03BE90) }, - { "NZ-CHAT" , FOR_V2(0x09BF04, 0x03C21F) }, - { "Pacific/Apia" , FOR_V2(0x09C719, 0x03C514) }, - { "Pacific/Auckland" , FOR_V2(0x09CB73, 0x03C6BD) }, - { "Pacific/Bougainville" , FOR_V2(0x09D533, 0x03CA64) }, - { "Pacific/Chatham" , FOR_V2(0x09D663, 0x03CAED) }, - { "Pacific/Chuuk" , FOR_V2(0x09DE87, 0x03CDF1) }, - { "Pacific/Easter" , FOR_V2(0x09DF3B, 0x03CE45) }, - { "Pacific/Efate" , FOR_V2(0x09E805, 0x03D18C) }, - { "Pacific/Enderbury" , FOR_V2(0x09E9EF, 0x03D257) }, - { "Pacific/Fakaofo" , FOR_V2(0x09EAF0, 0x03D2D6) }, - { "Pacific/Fiji" , FOR_V2(0x09EBC1, 0x03D338) }, - { "Pacific/Funafuti" , FOR_V2(0x09EFFE, 0x03D4D0) }, - { "Pacific/Galapagos" , FOR_V2(0x09F0A0, 0x03D514) }, - { "Pacific/Gambier" , FOR_V2(0x09F190, 0x03D591) }, - { "Pacific/Guadalcanal" , FOR_V2(0x09F258, 0x03D5FB) }, - { "Pacific/Guam" , FOR_V2(0x09F310, 0x03D655) }, - { "Pacific/Honolulu" , FOR_V2(0x09F3FD, 0x03D6BC) }, - { "Pacific/Johnston" , FOR_V2(0x09F523, 0x03D744) }, - { "Pacific/Kiritimati" , FOR_V2(0x09F651, 0x03D7D4) }, - { "Pacific/Kosrae" , FOR_V2(0x09F74F, 0x03D850) }, - { "Pacific/Kwajalein" , FOR_V2(0x09F847, 0x03D8C6) }, - { "Pacific/Majuro" , FOR_V2(0x09F949, 0x03D943) }, - { "Pacific/Marquesas" , FOR_V2(0x09FA37, 0x03D9C2) }, - { "Pacific/Midway" , FOR_V2(0x09FB04, 0x03DA2E) }, - { "Pacific/Nauru" , FOR_V2(0x09FC2E, 0x03DAC0) }, - { "Pacific/Niue" , FOR_V2(0x09FD38, 0x03DB3D) }, - { "Pacific/Norfolk" , FOR_V2(0x09FE26, 0x03DBAC) }, - { "Pacific/Noumea" , FOR_V2(0x09FF53, 0x03DC36) }, - { "Pacific/Pago_Pago" , FOR_V2(0x0A0099, 0x03DCCB) }, - { "Pacific/Palau" , FOR_V2(0x0A01B5, 0x03DD4F) }, - { "Pacific/Pitcairn" , FOR_V2(0x0A0256, 0x03DD93) }, - { "Pacific/Pohnpei" , FOR_V2(0x0A032D, 0x03DDF9) }, - { "Pacific/Ponape" , FOR_V2(0x0A03E0, 0x03DE4C) }, - { "Pacific/Port_Moresby" , FOR_V2(0x0A0485, 0x03DE91) }, - { "Pacific/Rarotonga" , FOR_V2(0x0A055A, 0x03DEF2) }, - { "Pacific/Saipan" , FOR_V2(0x0A07A4, 0x03DFDF) }, - { "Pacific/Samoa" , FOR_V2(0x0A0891, 0x03E046) }, - { "Pacific/Tahiti" , FOR_V2(0x0A09AD, 0x03E0CA) }, - { "Pacific/Tarawa" , FOR_V2(0x0A0A76, 0x03E134) }, - { "Pacific/Tongatapu" , FOR_V2(0x0A0B2A, 0x03E188) }, - { "Pacific/Truk" , FOR_V2(0x0A0C89, 0x03E225) }, - { "Pacific/Wake" , FOR_V2(0x0A0D2E, 0x03E26A) }, - { "Pacific/Wallis" , FOR_V2(0x0A0DDE, 0x03E2BA) }, - { "Pacific/Yap" , FOR_V2(0x0A0E80, 0x03E2FE) }, - { "Poland" , FOR_V2(0x0A0F25, 0x03E343) }, - { "Portugal" , FOR_V2(0x0A19C2, 0x03E735) }, - { "PRC" , FOR_V2(0x0A274B, 0x03EC36) }, - { "PST8PDT" , FOR_V2(0x0A28F5, 0x03ECE7) }, - { "ROC" , FOR_V2(0x0A31F7, 0x03F038) }, - { "ROK" , FOR_V2(0x0A3523, 0x03F17A) }, - { "Singapore" , FOR_V2(0x0A376A, 0x03F272) }, - { "Turkey" , FOR_V2(0x0A3922, 0x03F33A) }, - { "UCT" , FOR_V2(0x0A41A4, 0x03F672) }, - { "Universal" , FOR_V2(0x0A422F, 0x03F6B6) }, - { "US/Alaska" , FOR_V2(0x0A42BA, 0x03F6FA) }, - { "US/Aleutian" , FOR_V2(0x0A4C16, 0x03FA74) }, - { "US/Arizona" , FOR_V2(0x0A555F, 0x03FDE5) }, - { "US/Central" , FOR_V2(0x0A56CC, 0x03FE84) }, - { "US/East-Indiana" , FOR_V2(0x0A64D9, 0x0403A8) }, - { "US/Eastern" , FOR_V2(0x0A6B70, 0x040623) }, - { "US/Hawaii" , FOR_V2(0x0A7955, 0x040B33) }, - { "US/Indiana-Starke" , FOR_V2(0x0A7A75, 0x040BB5) }, - { "US/Michigan" , FOR_V2(0x0A8406, 0x040F3F) }, - { "US/Mountain" , FOR_V2(0x0A8CBA, 0x04127B) }, - { "US/Pacific" , FOR_V2(0x0A965B, 0x041605) }, - { "US/Pacific-New" , FOR_V2(0x0AA184, 0x041A1B) }, - { "US/Samoa" , FOR_V2(0x0AACAD, 0x041E31) }, - { "UTC" , FOR_V2(0x0AADC9, 0x041EB5) }, - { "W-SU" , FOR_V2(0x0AAE54, 0x041EF9) }, - { "WET" , FOR_V2(0x0AB468, 0x042165) }, - { "Zulu" , FOR_V2(0x0ABBC5, 0x042418) }, + { "Asia/Dacca" , FOR_V2(0x045F1D, 0x01B4E6) }, + { "Asia/Damascus" , FOR_V2(0x0460AF, 0x01B59D) }, + { "Asia/Dhaka" , FOR_V2(0x0469CB, 0x01B8F2) }, + { "Asia/Dili" , FOR_V2(0x046B5D, 0x01B9A9) }, + { "Asia/Dubai" , FOR_V2(0x046C9E, 0x01BA40) }, + { "Asia/Dushanbe" , FOR_V2(0x046D55, 0x01BA9A) }, + { "Asia/Gaza" , FOR_V2(0x046FCE, 0x01BBA4) }, + { "Asia/Harbin" , FOR_V2(0x0478EB, 0x01BF08) }, + { "Asia/Hebron" , FOR_V2(0x047A95, 0x01BFB9) }, + { "Asia/Ho_Chi_Minh" , FOR_V2(0x0483CD, 0x01C326) }, + { "Asia/Hong_Kong" , FOR_V2(0x04854E, 0x01C3D5) }, + { "Asia/Hovd" , FOR_V2(0x0489FF, 0x01C5A4) }, + { "Asia/Irkutsk" , FOR_V2(0x04901F, 0x01C807) }, + { "Asia/Istanbul" , FOR_V2(0x049541, 0x01CA1C) }, + { "Asia/Jakarta" , FOR_V2(0x049DC3, 0x01CD54) }, + { "Asia/Jayapura" , FOR_V2(0x049F4E, 0x01CE0E) }, + { "Asia/Jerusalem" , FOR_V2(0x04A081, 0x01CEBD) }, + { "Asia/Kabul" , FOR_V2(0x04A966, 0x01D205) }, + { "Asia/Kamchatka" , FOR_V2(0x04AA39, 0x01D267) }, + { "Asia/Karachi" , FOR_V2(0x04AF05, 0x01D453) }, + { "Asia/Kashgar" , FOR_V2(0x04B0A4, 0x01D50D) }, + { "Asia/Kathmandu" , FOR_V2(0x04B15B, 0x01D567) }, + { "Asia/Katmandu" , FOR_V2(0x04B23B, 0x01D5D2) }, + { "Asia/Khandyga" , FOR_V2(0x04B31B, 0x01D63D) }, + { "Asia/Kolkata" , FOR_V2(0x04B864, 0x01D868) }, + { "Asia/Krasnoyarsk" , FOR_V2(0x04B993, 0x01D8F2) }, + { "Asia/Kuala_Lumpur" , FOR_V2(0x04BE93, 0x01DAFA) }, + { "Asia/Kuching" , FOR_V2(0x04C041, 0x01DBC9) }, + { "Asia/Kuwait" , FOR_V2(0x04C262, 0x01DCBB) }, + { "Asia/Macao" , FOR_V2(0x04C319, 0x01DD15) }, + { "Asia/Macau" , FOR_V2(0x04C640, 0x01DE55) }, + { "Asia/Magadan" , FOR_V2(0x04C967, 0x01DF95) }, + { "Asia/Makassar" , FOR_V2(0x04CE6D, 0x01E199) }, + { "Asia/Manila" , FOR_V2(0x04CFDA, 0x01E26C) }, + { "Asia/Muscat" , FOR_V2(0x04D14F, 0x01E30A) }, + { "Asia/Nicosia" , FOR_V2(0x04D206, 0x01E364) }, + { "Asia/Novokuznetsk" , FOR_V2(0x04D9F2, 0x01E651) }, + { "Asia/Novosibirsk" , FOR_V2(0x04DEBC, 0x01E83C) }, + { "Asia/Omsk" , FOR_V2(0x04E3C3, 0x01EA41) }, + { "Asia/Oral" , FOR_V2(0x04E8B7, 0x01EC3D) }, + { "Asia/Phnom_Penh" , FOR_V2(0x04ECD9, 0x01EDED) }, + { "Asia/Pontianak" , FOR_V2(0x04EDB1, 0x01EE53) }, + { "Asia/Pyongyang" , FOR_V2(0x04EF4A, 0x01EF1B) }, + { "Asia/Qatar" , FOR_V2(0x04F08E, 0x01EFB2) }, + { "Asia/Qyzylorda" , FOR_V2(0x04F16B, 0x01F01D) }, + { "Asia/Rangoon" , FOR_V2(0x04F5AB, 0x01F1E3) }, + { "Asia/Riyadh" , FOR_V2(0x04F6D4, 0x01F26C) }, + { "Asia/Saigon" , FOR_V2(0x04F78B, 0x01F2C6) }, + { "Asia/Sakhalin" , FOR_V2(0x04F90C, 0x01F375) }, + { "Asia/Samarkand" , FOR_V2(0x04FE02, 0x01F575) }, + { "Asia/Seoul" , FOR_V2(0x05008A, 0x01F68D) }, + { "Asia/Shanghai" , FOR_V2(0x0502D1, 0x01F785) }, + { "Asia/Singapore" , FOR_V2(0x050487, 0x01F842) }, + { "Asia/Srednekolymsk" , FOR_V2(0x05063F, 0x01F90A) }, + { "Asia/Taipei" , FOR_V2(0x050B49, 0x01FB1B) }, + { "Asia/Tashkent" , FOR_V2(0x050E75, 0x01FC5D) }, + { "Asia/Tbilisi" , FOR_V2(0x05110D, 0x01FD7D) }, + { "Asia/Tehran" , FOR_V2(0x051551, 0x01FF30) }, + { "Asia/Tel_Aviv" , FOR_V2(0x051BEB, 0x0201AB) }, + { "Asia/Thimbu" , FOR_V2(0x0524D0, 0x0204F3) }, + { "Asia/Thimphu" , FOR_V2(0x0525AD, 0x02055E) }, + { "Asia/Tokyo" , FOR_V2(0x05268A, 0x0205C9) }, + { "Asia/Tomsk" , FOR_V2(0x0527F9, 0x020660) }, + { "Asia/Ujung_Pandang" , FOR_V2(0x052CFA, 0x02085F) }, + { "Asia/Ulaanbaatar" , FOR_V2(0x052E1E, 0x0208E9) }, + { "Asia/Ulan_Bator" , FOR_V2(0x053428, 0x020B36) }, + { "Asia/Urumqi" , FOR_V2(0x053A1D, 0x020D6E) }, + { "Asia/Ust-Nera" , FOR_V2(0x053AE1, 0x020DD5) }, + { "Asia/Vientiane" , FOR_V2(0x05400B, 0x020FED) }, + { "Asia/Vladivostok" , FOR_V2(0x0540E3, 0x021053) }, + { "Asia/Yakutsk" , FOR_V2(0x0545DE, 0x021255) }, + { "Asia/Yangon" , FOR_V2(0x054AD8, 0x021457) }, + { "Asia/Yekaterinburg" , FOR_V2(0x054C01, 0x0214E0) }, + { "Asia/Yerevan" , FOR_V2(0x05511C, 0x0216EE) }, + { "Atlantic/Azores" , FOR_V2(0x0555D7, 0x0218CB) }, + { "Atlantic/Bermuda" , FOR_V2(0x056389, 0x021DDF) }, + { "Atlantic/Canary" , FOR_V2(0x056B69, 0x0220C5) }, + { "Atlantic/Cape_Verde" , FOR_V2(0x0572FC, 0x0223A0) }, + { "Atlantic/Faeroe" , FOR_V2(0x057406, 0x02241E) }, + { "Atlantic/Faroe" , FOR_V2(0x057B37, 0x0226C7) }, + { "Atlantic/Jan_Mayen" , FOR_V2(0x058268, 0x022970) }, + { "Atlantic/Madeira" , FOR_V2(0x058B3F, 0x022CB3) }, + { "Atlantic/Reykjavik" , FOR_V2(0x0598F0, 0x0231CD) }, + { "Atlantic/South_Georgia" , FOR_V2(0x059DA2, 0x02339F) }, + { "Atlantic/St_Helena" , FOR_V2(0x059E42, 0x0233E3) }, + { "Atlantic/Stanley" , FOR_V2(0x059EF8, 0x02343D) }, + { "Australia/ACT" , FOR_V2(0x05A3E2, 0x023624) }, + { "Australia/Adelaide" , FOR_V2(0x05AC9D, 0x023958) }, + { "Australia/Brisbane" , FOR_V2(0x05B576, 0x023C97) }, + { "Australia/Broken_Hill" , FOR_V2(0x05B75D, 0x023D71) }, + { "Australia/Canberra" , FOR_V2(0x05C067, 0x0240C2) }, + { "Australia/Currie" , FOR_V2(0x05C922, 0x0243F6) }, + { "Australia/Darwin" , FOR_V2(0x05D1F3, 0x024740) }, + { "Australia/Eucla" , FOR_V2(0x05D354, 0x0247D9) }, + { "Australia/Hobart" , FOR_V2(0x05D560, 0x0248C1) }, + { "Australia/LHI" , FOR_V2(0x05DEA0, 0x024C32) }, + { "Australia/Lindeman" , FOR_V2(0x05E5EF, 0x024EE4) }, + { "Australia/Lord_Howe" , FOR_V2(0x05E824, 0x024FDF) }, + { "Australia/Melbourne" , FOR_V2(0x05EF83, 0x0252A1) }, + { "Australia/North" , FOR_V2(0x05F846, 0x0255DD) }, + { "Australia/NSW" , FOR_V2(0x05F995, 0x025664) }, + { "Australia/Perth" , FOR_V2(0x060250, 0x025998) }, + { "Australia/Queensland" , FOR_V2(0x060459, 0x025A83) }, + { "Australia/South" , FOR_V2(0x060629, 0x025B46) }, + { "Australia/Sydney" , FOR_V2(0x060EF3, 0x025E76) }, + { "Australia/Tasmania" , FOR_V2(0x0617CA, 0x0261C6) }, + { "Australia/Victoria" , FOR_V2(0x0620F5, 0x026522) }, + { "Australia/West" , FOR_V2(0x0629B0, 0x026856) }, + { "Australia/Yancowinna" , FOR_V2(0x062B9B, 0x026923) }, + { "Brazil/Acre" , FOR_V2(0x063489, 0x026C58) }, + { "Brazil/DeNoronha" , FOR_V2(0x063725, 0x026D69) }, + { "Brazil/East" , FOR_V2(0x063A09, 0x026E8E) }, + { "Brazil/West" , FOR_V2(0x0641F4, 0x027170) }, + { "Canada/Atlantic" , FOR_V2(0x064468, 0x02726D) }, + { "Canada/Central" , FOR_V2(0x0651E2, 0x02775A) }, + { "Canada/East-Saskatchewan" , FOR_V2(0x065D39, 0x027B85) }, + { "Canada/Eastern" , FOR_V2(0x066127, 0x027D13) }, + { "Canada/Mountain" , FOR_V2(0x066EE2, 0x028214) }, + { "Canada/Newfoundland" , FOR_V2(0x067850, 0x02858F) }, + { "Canada/Pacific" , FOR_V2(0x0686AC, 0x028AD3) }, + { "Canada/Saskatchewan" , FOR_V2(0x06920D, 0x028EFD) }, + { "Canada/Yukon" , FOR_V2(0x0695FB, 0x02908B) }, + { "CET" , FOR_V2(0x069E34, 0x02939F) }, + { "Chile/Continental" , FOR_V2(0x06A676, 0x0296A8) }, + { "Chile/EasterIsland" , FOR_V2(0x06B055, 0x029A4C) }, + { "CST6CDT" , FOR_V2(0x06B912, 0x029D86) }, + { "Cuba" , FOR_V2(0x06C214, 0x02A0D7) }, + { "EET" , FOR_V2(0x06CBA5, 0x02A45B) }, + { "Egypt" , FOR_V2(0x06D305, 0x02A70E) }, + { "Eire" , FOR_V2(0x06DAC5, 0x02A9EE) }, + { "EST" , FOR_V2(0x06E8B8, 0x02AF10) }, + { "EST5EDT" , FOR_V2(0x06E943, 0x02AF54) }, + { "Etc/GMT" , FOR_V2(0x06F245, 0x02B2A5) }, + { "Etc/GMT+0" , FOR_V2(0x06F2D0, 0x02B2E9) }, + { "Etc/GMT+1" , FOR_V2(0x06F35B, 0x02B32D) }, + { "Etc/GMT+10" , FOR_V2(0x06F3FB, 0x02B37B) }, + { "Etc/GMT+11" , FOR_V2(0x06F49C, 0x02B3C9) }, + { "Etc/GMT+12" , FOR_V2(0x06F53D, 0x02B417) }, + { "Etc/GMT+2" , FOR_V2(0x06F5DE, 0x02B465) }, + { "Etc/GMT+3" , FOR_V2(0x06F67E, 0x02B4B3) }, + { "Etc/GMT+4" , FOR_V2(0x06F71E, 0x02B501) }, + { "Etc/GMT+5" , FOR_V2(0x06F7BE, 0x02B54F) }, + { "Etc/GMT+6" , FOR_V2(0x06F85E, 0x02B59D) }, + { "Etc/GMT+7" , FOR_V2(0x06F8FE, 0x02B5EB) }, + { "Etc/GMT+8" , FOR_V2(0x06F99E, 0x02B639) }, + { "Etc/GMT+9" , FOR_V2(0x06FA3E, 0x02B687) }, + { "Etc/GMT-0" , FOR_V2(0x06FADE, 0x02B6D5) }, + { "Etc/GMT-1" , FOR_V2(0x06FB69, 0x02B719) }, + { "Etc/GMT-10" , FOR_V2(0x06FC0A, 0x02B767) }, + { "Etc/GMT-11" , FOR_V2(0x06FCAC, 0x02B7B5) }, + { "Etc/GMT-12" , FOR_V2(0x06FD4E, 0x02B803) }, + { "Etc/GMT-13" , FOR_V2(0x06FDF0, 0x02B851) }, + { "Etc/GMT-14" , FOR_V2(0x06FE92, 0x02B89F) }, + { "Etc/GMT-2" , FOR_V2(0x06FF34, 0x02B8ED) }, + { "Etc/GMT-3" , FOR_V2(0x06FFD5, 0x02B93B) }, + { "Etc/GMT-4" , FOR_V2(0x070076, 0x02B989) }, + { "Etc/GMT-5" , FOR_V2(0x070117, 0x02B9D7) }, + { "Etc/GMT-6" , FOR_V2(0x0701B8, 0x02BA25) }, + { "Etc/GMT-7" , FOR_V2(0x070259, 0x02BA73) }, + { "Etc/GMT-8" , FOR_V2(0x0702FA, 0x02BAC1) }, + { "Etc/GMT-9" , FOR_V2(0x07039B, 0x02BB0F) }, + { "Etc/GMT0" , FOR_V2(0x07043C, 0x02BB5D) }, + { "Etc/Greenwich" , FOR_V2(0x0704C7, 0x02BBA1) }, + { "Etc/UCT" , FOR_V2(0x070552, 0x02BBE5) }, + { "Etc/Universal" , FOR_V2(0x0705DD, 0x02BC29) }, + { "Etc/UTC" , FOR_V2(0x070668, 0x02BC6D) }, + { "Etc/Zulu" , FOR_V2(0x0706F3, 0x02BCB1) }, + { "Europe/Amsterdam" , FOR_V2(0x07077E, 0x02BCF5) }, + { "Europe/Andorra" , FOR_V2(0x071309, 0x02C144) }, + { "Europe/Astrakhan" , FOR_V2(0x0719EC, 0x02C3D1) }, + { "Europe/Athens" , FOR_V2(0x071EB7, 0x02C5BD) }, + { "Europe/Belfast" , FOR_V2(0x0727A2, 0x02C911) }, + { "Europe/Belgrade" , FOR_V2(0x073615, 0x02CE59) }, + { "Europe/Berlin" , FOR_V2(0x073DC6, 0x02D133) }, + { "Europe/Bratislava" , FOR_V2(0x074705, 0x02D4AE) }, + { "Europe/Brussels" , FOR_V2(0x074FF1, 0x02D7F1) }, + { "Europe/Bucharest" , FOR_V2(0x075B97, 0x02DC39) }, + { "Europe/Budapest" , FOR_V2(0x076450, 0x02DF74) }, + { "Europe/Busingen" , FOR_V2(0x076DC1, 0x02E2EE) }, + { "Europe/Chisinau" , FOR_V2(0x077553, 0x02E5B6) }, + { "Europe/Copenhagen" , FOR_V2(0x077EEC, 0x02E95A) }, + { "Europe/Dublin" , FOR_V2(0x078768, 0x02EC75) }, + { "Europe/Gibraltar" , FOR_V2(0x07955B, 0x02F197) }, + { "Europe/Guernsey" , FOR_V2(0x07A15C, 0x02F5FF) }, + { "Europe/Helsinki" , FOR_V2(0x07AFCF, 0x02FB47) }, + { "Europe/Isle_of_Man" , FOR_V2(0x07B750, 0x02FE0E) }, + { "Europe/Istanbul" , FOR_V2(0x07C5C3, 0x030356) }, + { "Europe/Jersey" , FOR_V2(0x07CE45, 0x03068E) }, + { "Europe/Kaliningrad" , FOR_V2(0x07DCB8, 0x030BD6) }, + { "Europe/Kiev" , FOR_V2(0x07E2C6, 0x030E47) }, + { "Europe/Kirov" , FOR_V2(0x07EB17, 0x03117A) }, + { "Europe/Lisbon" , FOR_V2(0x07EFC0, 0x031355) }, + { "Europe/Ljubljana" , FOR_V2(0x07FD5C, 0x031869) }, + { "Europe/London" , FOR_V2(0x08050D, 0x031B43) }, + { "Europe/Luxembourg" , FOR_V2(0x081380, 0x03208B) }, + { "Europe/Madrid" , FOR_V2(0x081F2A, 0x0324E6) }, + { "Europe/Malta" , FOR_V2(0x082981, 0x0328C5) }, + { "Europe/Mariehamn" , FOR_V2(0x0833D2, 0x032C8F) }, + { "Europe/Minsk" , FOR_V2(0x083B53, 0x032F56) }, + { "Europe/Monaco" , FOR_V2(0x0840B9, 0x03317A) }, + { "Europe/Moscow" , FOR_V2(0x084C4E, 0x0335C6) }, + { "Europe/Nicosia" , FOR_V2(0x085276, 0x033846) }, + { "Europe/Oslo" , FOR_V2(0x085A62, 0x033B33) }, + { "Europe/Paris" , FOR_V2(0x086339, 0x033E76) }, + { "Europe/Podgorica" , FOR_V2(0x086EE0, 0x0342CD) }, + { "Europe/Prague" , FOR_V2(0x087691, 0x0345A7) }, + { "Europe/Riga" , FOR_V2(0x087F7D, 0x0348EA) }, + { "Europe/Rome" , FOR_V2(0x088844, 0x034C40) }, + { "Europe/Samara" , FOR_V2(0x0892C6, 0x035014) }, + { "Europe/San_Marino" , FOR_V2(0x0897D0, 0x035223) }, + { "Europe/Sarajevo" , FOR_V2(0x08A252, 0x0355F7) }, + { "Europe/Simferopol" , FOR_V2(0x08AA03, 0x0358D1) }, + { "Europe/Skopje" , FOR_V2(0x08AFF0, 0x035B33) }, + { "Europe/Sofia" , FOR_V2(0x08B7A1, 0x035E0D) }, + { "Europe/Stockholm" , FOR_V2(0x08BFFF, 0x036126) }, + { "Europe/Tallinn" , FOR_V2(0x08C789, 0x0363E6) }, + { "Europe/Tirane" , FOR_V2(0x08D020, 0x03672C) }, + { "Europe/Tiraspol" , FOR_V2(0x08D85E, 0x036A37) }, + { "Europe/Ulyanovsk" , FOR_V2(0x08E1F7, 0x036DDB) }, + { "Europe/Uzhgorod" , FOR_V2(0x08E716, 0x036FED) }, + { "Europe/Vaduz" , FOR_V2(0x08EF61, 0x037315) }, + { "Europe/Vatican" , FOR_V2(0x08F6EB, 0x0375D5) }, + { "Europe/Vienna" , FOR_V2(0x09016D, 0x0379A9) }, + { "Europe/Vilnius" , FOR_V2(0x090A36, 0x037CE7) }, + { "Europe/Volgograd" , FOR_V2(0x0912D9, 0x038037) }, + { "Europe/Warsaw" , FOR_V2(0x09178F, 0x03821F) }, + { "Europe/Zagreb" , FOR_V2(0x09222C, 0x038611) }, + { "Europe/Zaporozhye" , FOR_V2(0x0929DD, 0x0388EB) }, + { "Europe/Zurich" , FOR_V2(0x093256, 0x038C3D) }, + { "Factory" , FOR_V2(0x0939E0, 0x038EFD) }, + { "GB" , FOR_V2(0x093A80, 0x038F4B) }, + { "GB-Eire" , FOR_V2(0x0948F3, 0x039493) }, + { "GMT" , FOR_V2(0x095766, 0x0399DB) }, + { "GMT+0" , FOR_V2(0x0957F1, 0x039A1F) }, + { "GMT-0" , FOR_V2(0x09587C, 0x039A63) }, + { "GMT0" , FOR_V2(0x095907, 0x039AA7) }, + { "Greenwich" , FOR_V2(0x095992, 0x039AEB) }, + { "Hongkong" , FOR_V2(0x095A1D, 0x039B2F) }, + { "HST" , FOR_V2(0x095ECE, 0x039CFE) }, + { "Iceland" , FOR_V2(0x095F5A, 0x039D42) }, + { "Indian/Antananarivo" , FOR_V2(0x09640C, 0x039F14) }, + { "Indian/Chagos" , FOR_V2(0x096533, 0x039FA0) }, + { "Indian/Christmas" , FOR_V2(0x096608, 0x03A007) }, + { "Indian/Cocos" , FOR_V2(0x0966A9, 0x03A04B) }, + { "Indian/Comoro" , FOR_V2(0x09674D, 0x03A08F) }, + { "Indian/Kerguelen" , FOR_V2(0x096874, 0x03A11B) }, + { "Indian/Mahe" , FOR_V2(0x09693B, 0x03A17A) }, + { "Indian/Maldives" , FOR_V2(0x0969F2, 0x03A1D4) }, + { "Indian/Mauritius" , FOR_V2(0x096ACA, 0x03A23A) }, + { "Indian/Mayotte" , FOR_V2(0x096BD3, 0x03A2B5) }, + { "Indian/Reunion" , FOR_V2(0x096CFA, 0x03A341) }, + { "Iran" , FOR_V2(0x096DB1, 0x03A39B) }, + { "Israel" , FOR_V2(0x09744B, 0x03A616) }, + { "Jamaica" , FOR_V2(0x097D30, 0x03A95E) }, + { "Japan" , FOR_V2(0x097F37, 0x03AA34) }, + { "Kwajalein" , FOR_V2(0x0980A6, 0x03AACB) }, + { "Libya" , FOR_V2(0x09819F, 0x03AB3F) }, + { "MET" , FOR_V2(0x09843A, 0x03AC4D) }, + { "Mexico/BajaNorte" , FOR_V2(0x098C7C, 0x03AF56) }, + { "Mexico/BajaSur" , FOR_V2(0x0995BC, 0x03B2C4) }, + { "Mexico/General" , FOR_V2(0x099BE4, 0x03B516) }, + { "MST" , FOR_V2(0x09A242, 0x03B779) }, + { "MST7MDT" , FOR_V2(0x09A2CD, 0x03B7BD) }, + { "Navajo" , FOR_V2(0x09ABCF, 0x03BB0E) }, + { "NZ" , FOR_V2(0x09B570, 0x03BE98) }, + { "NZ-CHAT" , FOR_V2(0x09BF18, 0x03C227) }, + { "Pacific/Apia" , FOR_V2(0x09C72D, 0x03C51C) }, + { "Pacific/Auckland" , FOR_V2(0x09CB87, 0x03C6C5) }, + { "Pacific/Bougainville" , FOR_V2(0x09D547, 0x03CA6C) }, + { "Pacific/Chatham" , FOR_V2(0x09D677, 0x03CAF5) }, + { "Pacific/Chuuk" , FOR_V2(0x09DE9B, 0x03CDF9) }, + { "Pacific/Easter" , FOR_V2(0x09DF4F, 0x03CE4D) }, + { "Pacific/Efate" , FOR_V2(0x09E819, 0x03D194) }, + { "Pacific/Enderbury" , FOR_V2(0x09EA03, 0x03D25F) }, + { "Pacific/Fakaofo" , FOR_V2(0x09EB04, 0x03D2DE) }, + { "Pacific/Fiji" , FOR_V2(0x09EBD5, 0x03D340) }, + { "Pacific/Funafuti" , FOR_V2(0x09F012, 0x03D4D8) }, + { "Pacific/Galapagos" , FOR_V2(0x09F0B4, 0x03D51C) }, + { "Pacific/Gambier" , FOR_V2(0x09F1A4, 0x03D599) }, + { "Pacific/Guadalcanal" , FOR_V2(0x09F26C, 0x03D603) }, + { "Pacific/Guam" , FOR_V2(0x09F324, 0x03D65D) }, + { "Pacific/Honolulu" , FOR_V2(0x09F411, 0x03D6C4) }, + { "Pacific/Johnston" , FOR_V2(0x09F537, 0x03D74C) }, + { "Pacific/Kiritimati" , FOR_V2(0x09F665, 0x03D7DC) }, + { "Pacific/Kosrae" , FOR_V2(0x09F763, 0x03D858) }, + { "Pacific/Kwajalein" , FOR_V2(0x09F85B, 0x03D8CE) }, + { "Pacific/Majuro" , FOR_V2(0x09F95D, 0x03D94B) }, + { "Pacific/Marquesas" , FOR_V2(0x09FA4B, 0x03D9CA) }, + { "Pacific/Midway" , FOR_V2(0x09FB18, 0x03DA36) }, + { "Pacific/Nauru" , FOR_V2(0x09FC42, 0x03DAC8) }, + { "Pacific/Niue" , FOR_V2(0x09FD4C, 0x03DB45) }, + { "Pacific/Norfolk" , FOR_V2(0x09FE3A, 0x03DBB4) }, + { "Pacific/Noumea" , FOR_V2(0x09FF67, 0x03DC3E) }, + { "Pacific/Pago_Pago" , FOR_V2(0x0A00AD, 0x03DCD3) }, + { "Pacific/Palau" , FOR_V2(0x0A01C9, 0x03DD57) }, + { "Pacific/Pitcairn" , FOR_V2(0x0A026A, 0x03DD9B) }, + { "Pacific/Pohnpei" , FOR_V2(0x0A0341, 0x03DE01) }, + { "Pacific/Ponape" , FOR_V2(0x0A03F4, 0x03DE54) }, + { "Pacific/Port_Moresby" , FOR_V2(0x0A0499, 0x03DE99) }, + { "Pacific/Rarotonga" , FOR_V2(0x0A056E, 0x03DEFA) }, + { "Pacific/Saipan" , FOR_V2(0x0A07B8, 0x03DFE7) }, + { "Pacific/Samoa" , FOR_V2(0x0A08A5, 0x03E04E) }, + { "Pacific/Tahiti" , FOR_V2(0x0A09C1, 0x03E0D2) }, + { "Pacific/Tarawa" , FOR_V2(0x0A0A8A, 0x03E13C) }, + { "Pacific/Tongatapu" , FOR_V2(0x0A0B3E, 0x03E190) }, + { "Pacific/Truk" , FOR_V2(0x0A0C9D, 0x03E22D) }, + { "Pacific/Wake" , FOR_V2(0x0A0D42, 0x03E272) }, + { "Pacific/Wallis" , FOR_V2(0x0A0DF2, 0x03E2C2) }, + { "Pacific/Yap" , FOR_V2(0x0A0E94, 0x03E306) }, + { "Poland" , FOR_V2(0x0A0F39, 0x03E34B) }, + { "Portugal" , FOR_V2(0x0A19D6, 0x03E73D) }, + { "PRC" , FOR_V2(0x0A275F, 0x03EC3E) }, + { "PST8PDT" , FOR_V2(0x0A2909, 0x03ECEF) }, + { "ROC" , FOR_V2(0x0A320B, 0x03F040) }, + { "ROK" , FOR_V2(0x0A3537, 0x03F182) }, + { "Singapore" , FOR_V2(0x0A377E, 0x03F27A) }, + { "Turkey" , FOR_V2(0x0A3936, 0x03F342) }, + { "UCT" , FOR_V2(0x0A41B8, 0x03F67A) }, + { "Universal" , FOR_V2(0x0A4243, 0x03F6BE) }, + { "US/Alaska" , FOR_V2(0x0A42CE, 0x03F702) }, + { "US/Aleutian" , FOR_V2(0x0A4C2A, 0x03FA7C) }, + { "US/Arizona" , FOR_V2(0x0A5573, 0x03FDED) }, + { "US/Central" , FOR_V2(0x0A56E0, 0x03FE8C) }, + { "US/East-Indiana" , FOR_V2(0x0A64ED, 0x0403B0) }, + { "US/Eastern" , FOR_V2(0x0A6B84, 0x04062B) }, + { "US/Hawaii" , FOR_V2(0x0A7969, 0x040B3B) }, + { "US/Indiana-Starke" , FOR_V2(0x0A7A89, 0x040BBD) }, + { "US/Michigan" , FOR_V2(0x0A841A, 0x040F47) }, + { "US/Mountain" , FOR_V2(0x0A8CCE, 0x041283) }, + { "US/Pacific" , FOR_V2(0x0A966F, 0x04160D) }, + { "US/Pacific-New" , FOR_V2(0x0AA198, 0x041A23) }, + { "US/Samoa" , FOR_V2(0x0AACC1, 0x041E39) }, + { "UTC" , FOR_V2(0x0AADDD, 0x041EBD) }, + { "W-SU" , FOR_V2(0x0AAE68, 0x041F01) }, + { "WET" , FOR_V2(0x0AB47C, 0x04216D) }, + { "Zulu" , FOR_V2(0x0ABBD9, 0x042420) }, }; #ifdef TIMELIB_SUPPORTS_V2DATA -const unsigned char timelib_timezone_db_data_builtin[703568] = { +const unsigned char timelib_timezone_db_data_builtin[703588] = { #else -const unsigned char timelib_timezone_db_data_builtin[271452] = { +const unsigned char timelib_timezone_db_data_builtin[271460] = { #endif @@ -19805,30 +19805,32 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { /* Asia/Colombo */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x4C, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x15, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x18, 0x80, 0x00, 0x00, 0x00, 0x87, 0x9D, 0xBD, 0x1C, 0xCB, 0x5A, 0x1C, 0x28, 0xCC, 0x95, 0x2B, 0xA0, 0xD2, 0x75, 0x80, 0x38, -0x31, 0xA6, 0x00, 0x28, 0x32, 0x71, 0x00, 0x20, 0x44, 0x3F, 0xEA, 0x28, 0x01, 0x02, 0x03, 0x04, -0x02, 0x05, 0x06, 0x02, 0x00, 0x00, 0x4A, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE4, 0x00, 0x04, -0x00, 0x00, 0x4D, 0x58, 0x00, 0x08, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0C, 0x00, 0x00, 0x5B, 0x68, -0x01, 0x08, 0x00, 0x00, 0x5B, 0x68, 0x00, 0x11, 0x00, 0x00, 0x54, 0x60, 0x00, 0x11, 0x00, 0x00, -0x4D, 0x58, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, -0x49, 0x48, 0x53, 0x54, 0x00, 0x4C, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x31, 0xA6, 0x00, 0x28, 0x32, 0x71, 0x00, 0x20, 0x44, 0x3F, 0xEA, 0x28, 0x7F, 0xFF, 0xFF, 0xFF, +0x01, 0x02, 0x03, 0x04, 0x02, 0x05, 0x06, 0x02, 0x02, 0x00, 0x00, 0x4A, 0xDC, 0x00, 0x00, 0x00, +0x00, 0x4A, 0xE4, 0x00, 0x04, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x08, 0x00, 0x00, 0x54, 0x60, 0x01, +0x0E, 0x00, 0x00, 0x5B, 0x68, 0x01, 0x12, 0x00, 0x00, 0x5B, 0x68, 0x00, 0x12, 0x00, 0x00, 0x54, +0x60, 0x00, 0x0E, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4D, 0x54, +0x00, 0x2B, 0x30, 0x35, 0x33, 0x30, 0x00, 0x2B, 0x30, 0x36, 0x00, 0x2B, 0x30, 0x36, 0x33, 0x30, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, #ifdef TIMELIB_SUPPORTS_V2DATA 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x15, 0xF8, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x18, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0x99, 0x24, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x9D, 0xBD, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0xCB, 0x5A, 0x1C, 0x28, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0x95, 0x2B, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD2, 0x75, 0x80, 0x38, 0x00, 0x00, 0x00, 0x00, 0x31, 0xA6, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x32, 0x71, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, -0x44, 0x3F, 0xEA, 0x28, 0x00, 0x01, 0x02, 0x03, 0x04, 0x02, 0x05, 0x06, 0x02, 0x00, 0x00, 0x4A, -0xDC, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE4, 0x00, 0x04, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x08, 0x00, -0x00, 0x54, 0x60, 0x01, 0x0C, 0x00, 0x00, 0x5B, 0x68, 0x01, 0x08, 0x00, 0x00, 0x5B, 0x68, 0x00, -0x11, 0x00, 0x00, 0x54, 0x60, 0x00, 0x11, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x08, 0x4C, 0x4D, 0x54, -0x00, 0x4D, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x49, 0x48, 0x53, 0x54, 0x00, 0x4C, 0x4B, -0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x0A, 0x49, 0x53, 0x54, 0x2D, 0x35, 0x3A, 0x33, 0x30, 0x0A, +0x44, 0x3F, 0xEA, 0x28, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0x02, 0x03, +0x04, 0x02, 0x05, 0x06, 0x02, 0x02, 0x00, 0x00, 0x4A, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE4, +0x00, 0x04, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x08, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0E, 0x00, 0x00, +0x5B, 0x68, 0x01, 0x12, 0x00, 0x00, 0x5B, 0x68, 0x00, 0x12, 0x00, 0x00, 0x54, 0x60, 0x00, 0x0E, +0x00, 0x00, 0x4D, 0x58, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4D, 0x54, 0x00, 0x2B, 0x30, +0x35, 0x33, 0x30, 0x00, 0x2B, 0x30, 0x36, 0x00, 0x2B, 0x30, 0x36, 0x33, 0x30, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x3C, +0x2B, 0x30, 0x35, 0x33, 0x30, 0x3E, 0x2D, 0x35, 0x3A, 0x33, 0x30, 0x0A, #endif 0x00, 0x93, 0xE8, 0x95, 0x01, 0x8C, 0x7F, 0xE8, 0x00, 0x00, 0x00, 0x00, @@ -20157,17 +20159,17 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 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, 0xA0, 0x50, 0x53, 0x34, 0x9F, 0x60, 0x54, 0x49, 0x6C, 0x50, 0x55, 0x15, 0xD2, 0xE0, 0x56, 0x29, 0x4E, 0x50, -0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x09, 0x30, 0x50, 0x58, 0xD5, 0xA4, 0xF0, 0x59, 0xF2, 0x4C, 0xD0, -0x5A, 0xBE, 0xC1, 0x70, 0x5B, 0xD2, 0x2E, 0xD0, 0x5C, 0x9E, 0xA3, 0x70, 0x5D, 0xB2, 0x10, 0xD0, -0x5E, 0x7E, 0x85, 0x70, 0x5F, 0x91, 0xF2, 0xD0, 0x60, 0x5E, 0x67, 0x70, 0x61, 0x71, 0xD4, 0xD0, -0x62, 0x3E, 0x49, 0x70, 0x63, 0x51, 0xB6, 0xD0, 0x64, 0x1E, 0x2B, 0x70, 0x65, 0x3A, 0xD3, 0x50, -0x66, 0x07, 0x47, 0xF0, 0x67, 0x1A, 0xB5, 0x50, 0x67, 0xE7, 0x29, 0xF0, 0x68, 0xFA, 0x97, 0x50, -0x69, 0xC7, 0x0B, 0xF0, 0x6A, 0xDA, 0x79, 0x50, 0x6B, 0xA6, 0xED, 0xF0, 0x6C, 0xBA, 0x5B, 0x50, -0x6D, 0x86, 0xCF, 0xF0, 0x6E, 0xA3, 0x77, 0xD0, 0x6F, 0x6F, 0xEC, 0x70, 0x70, 0x83, 0x59, 0xD0, -0x71, 0x4F, 0xCE, 0x70, 0x72, 0x63, 0x3B, 0xD0, 0x73, 0x2F, 0xB0, 0x70, 0x74, 0x43, 0x1D, 0xD0, -0x75, 0x0F, 0x92, 0x70, 0x76, 0x22, 0xFF, 0xD0, 0x76, 0xEF, 0x74, 0x70, 0x78, 0x02, 0xE1, 0xD0, -0x78, 0xCF, 0x56, 0x70, 0x79, 0xEB, 0xFE, 0x50, 0x7A, 0xB8, 0x72, 0xF0, 0x7B, 0xCB, 0xE0, 0x50, -0x7C, 0x98, 0x54, 0xF0, 0x7D, 0xAB, 0xC2, 0x50, 0x7E, 0x78, 0x36, 0xF0, 0x7F, 0x8B, 0xA4, 0x50, +0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x13, 0xCA, 0x60, 0x58, 0xD5, 0xA4, 0xF0, 0x59, 0xF3, 0xAC, 0x60, +0x5A, 0xBE, 0xC1, 0x70, 0x5B, 0xD3, 0x8E, 0x60, 0x5C, 0x9E, 0xA3, 0x70, 0x5D, 0xB3, 0x70, 0x60, +0x5E, 0x7E, 0x85, 0x70, 0x5F, 0x9C, 0x8C, 0xE0, 0x60, 0x5E, 0x67, 0x70, 0x61, 0x7C, 0x6E, 0xE0, +0x62, 0x3E, 0x49, 0x70, 0x63, 0x5C, 0x50, 0xE0, 0x64, 0x1E, 0x2B, 0x70, 0x65, 0x3C, 0x32, 0xE0, +0x66, 0x07, 0x47, 0xF0, 0x67, 0x1C, 0x14, 0xE0, 0x67, 0xE7, 0x29, 0xF0, 0x68, 0xFB, 0xF6, 0xE0, +0x69, 0xC7, 0x0B, 0xF0, 0x6A, 0xE5, 0x13, 0x60, 0x6B, 0xA6, 0xED, 0xF0, 0x6C, 0xC4, 0xF5, 0x60, +0x6D, 0x86, 0xCF, 0xF0, 0x6E, 0xA4, 0xD7, 0x60, 0x6F, 0x6F, 0xEC, 0x70, 0x70, 0x84, 0xB9, 0x60, +0x71, 0x4F, 0xCE, 0x70, 0x72, 0x64, 0x9B, 0x60, 0x73, 0x2F, 0xB0, 0x70, 0x74, 0x44, 0x7D, 0x60, +0x75, 0x0F, 0x92, 0x70, 0x76, 0x2D, 0x99, 0xE0, 0x76, 0xEF, 0x74, 0x70, 0x78, 0x0D, 0x7B, 0xE0, +0x78, 0xCF, 0x56, 0x70, 0x79, 0xED, 0x5D, 0xE0, 0x7A, 0xB8, 0x72, 0xF0, 0x7B, 0xCD, 0x3F, 0xE0, +0x7C, 0x98, 0x54, 0xF0, 0x7D, 0xAD, 0x21, 0xE0, 0x7E, 0x78, 0x36, 0xF0, 0x7F, 0x96, 0x3E, 0x60, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, @@ -20183,7 +20185,7 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, #ifdef TIMELIB_SUPPORTS_V2DATA -0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x15, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0xBD, 0x4A, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, @@ -20237,28 +20239,28 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x51, 0x54, 0xBD, 0x60, 0x00, 0x00, 0x00, 0x00, 0x52, 0x44, 0xA0, 0x50, 0x00, 0x00, 0x00, 0x00, 0x53, 0x34, 0x9F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x54, 0x49, 0x6C, 0x50, 0x00, 0x00, 0x00, 0x00, 0x55, 0x15, 0xD2, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x56, 0x29, 0x4E, 0x50, 0x00, 0x00, 0x00, 0x00, -0x56, 0xF5, 0xC2, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x58, 0x09, 0x30, 0x50, 0x00, 0x00, 0x00, 0x00, -0x58, 0xD5, 0xA4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF2, 0x4C, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x5A, 0xBE, 0xC1, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD2, 0x2E, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x5C, 0x9E, 0xA3, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB2, 0x10, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x5E, 0x7E, 0x85, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x91, 0xF2, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x60, 0x5E, 0x67, 0x70, 0x00, 0x00, 0x00, 0x00, 0x61, 0x71, 0xD4, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x62, 0x3E, 0x49, 0x70, 0x00, 0x00, 0x00, 0x00, 0x63, 0x51, 0xB6, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x64, 0x1E, 0x2B, 0x70, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3A, 0xD3, 0x50, 0x00, 0x00, 0x00, 0x00, -0x66, 0x07, 0x47, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1A, 0xB5, 0x50, 0x00, 0x00, 0x00, 0x00, -0x67, 0xE7, 0x29, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFA, 0x97, 0x50, 0x00, 0x00, 0x00, 0x00, -0x69, 0xC7, 0x0B, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDA, 0x79, 0x50, 0x00, 0x00, 0x00, 0x00, -0x6B, 0xA6, 0xED, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xBA, 0x5B, 0x50, 0x00, 0x00, 0x00, 0x00, -0x6D, 0x86, 0xCF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA3, 0x77, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x6F, 0x6F, 0xEC, 0x70, 0x00, 0x00, 0x00, 0x00, 0x70, 0x83, 0x59, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x71, 0x4F, 0xCE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x72, 0x63, 0x3B, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x73, 0x2F, 0xB0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x74, 0x43, 0x1D, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x75, 0x0F, 0x92, 0x70, 0x00, 0x00, 0x00, 0x00, 0x76, 0x22, 0xFF, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x76, 0xEF, 0x74, 0x70, 0x00, 0x00, 0x00, 0x00, 0x78, 0x02, 0xE1, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x78, 0xCF, 0x56, 0x70, 0x00, 0x00, 0x00, 0x00, 0x79, 0xEB, 0xFE, 0x50, 0x00, 0x00, 0x00, 0x00, -0x7A, 0xB8, 0x72, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCB, 0xE0, 0x50, 0x00, 0x00, 0x00, 0x00, -0x7C, 0x98, 0x54, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAB, 0xC2, 0x50, 0x00, 0x00, 0x00, 0x00, -0x7E, 0x78, 0x36, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8B, 0xA4, 0x50, 0x00, 0x02, 0x01, 0x02, +0x56, 0xF5, 0xC2, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x58, 0x13, 0xCA, 0x60, 0x00, 0x00, 0x00, 0x00, +0x58, 0xD5, 0xA4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF3, 0xAC, 0x60, 0x00, 0x00, 0x00, 0x00, +0x5A, 0xBE, 0xC1, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD3, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, +0x5C, 0x9E, 0xA3, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x70, 0x60, 0x00, 0x00, 0x00, 0x00, +0x5E, 0x7E, 0x85, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x9C, 0x8C, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x60, 0x5E, 0x67, 0x70, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7C, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x62, 0x3E, 0x49, 0x70, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5C, 0x50, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x64, 0x1E, 0x2B, 0x70, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3C, 0x32, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x66, 0x07, 0x47, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1C, 0x14, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x67, 0xE7, 0x29, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFB, 0xF6, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x69, 0xC7, 0x0B, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xE5, 0x13, 0x60, 0x00, 0x00, 0x00, 0x00, +0x6B, 0xA6, 0xED, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC4, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00, +0x6D, 0x86, 0xCF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA4, 0xD7, 0x60, 0x00, 0x00, 0x00, 0x00, +0x6F, 0x6F, 0xEC, 0x70, 0x00, 0x00, 0x00, 0x00, 0x70, 0x84, 0xB9, 0x60, 0x00, 0x00, 0x00, 0x00, +0x71, 0x4F, 0xCE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x72, 0x64, 0x9B, 0x60, 0x00, 0x00, 0x00, 0x00, +0x73, 0x2F, 0xB0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x74, 0x44, 0x7D, 0x60, 0x00, 0x00, 0x00, 0x00, +0x75, 0x0F, 0x92, 0x70, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2D, 0x99, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x76, 0xEF, 0x74, 0x70, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0D, 0x7B, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x78, 0xCF, 0x56, 0x70, 0x00, 0x00, 0x00, 0x00, 0x79, 0xED, 0x5D, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7A, 0xB8, 0x72, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCD, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7C, 0x98, 0x54, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAD, 0x21, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7E, 0x78, 0x36, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x96, 0x3E, 0x60, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, @@ -20274,7 +20276,7 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x45, 0x45, 0x53, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x36, 0x2F, 0x31, 0x2C, 0x4D, -0x31, 0x30, 0x2E, 0x33, 0x2E, 0x36, 0x2F, 0x31, 0x34, 0x34, 0x0A, +0x31, 0x30, 0x2E, 0x35, 0x2E, 0x36, 0x2F, 0x31, 0x0A, #endif 0x00, 0xB9, 0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, 0x74, 0x72, 0x69, 0x70, @@ -20340,18 +20342,18 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 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, 0xA0, 0x50, 0x53, 0x34, 0x9F, 0x60, 0x54, 0x49, 0x6C, 0x50, -0x55, 0x15, 0xD2, 0xE0, 0x56, 0x29, 0x4E, 0x50, 0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x09, 0x30, 0x50, -0x58, 0xD5, 0xA4, 0xF0, 0x59, 0xF2, 0x4C, 0xD0, 0x5A, 0xBE, 0xC1, 0x70, 0x5B, 0xD2, 0x2E, 0xD0, -0x5C, 0x9E, 0xA3, 0x70, 0x5D, 0xB2, 0x10, 0xD0, 0x5E, 0x7E, 0x85, 0x70, 0x5F, 0x91, 0xF2, 0xD0, -0x60, 0x5E, 0x67, 0x70, 0x61, 0x71, 0xD4, 0xD0, 0x62, 0x3E, 0x49, 0x70, 0x63, 0x51, 0xB6, 0xD0, -0x64, 0x1E, 0x2B, 0x70, 0x65, 0x3A, 0xD3, 0x50, 0x66, 0x07, 0x47, 0xF0, 0x67, 0x1A, 0xB5, 0x50, -0x67, 0xE7, 0x29, 0xF0, 0x68, 0xFA, 0x97, 0x50, 0x69, 0xC7, 0x0B, 0xF0, 0x6A, 0xDA, 0x79, 0x50, -0x6B, 0xA6, 0xED, 0xF0, 0x6C, 0xBA, 0x5B, 0x50, 0x6D, 0x86, 0xCF, 0xF0, 0x6E, 0xA3, 0x77, 0xD0, -0x6F, 0x6F, 0xEC, 0x70, 0x70, 0x83, 0x59, 0xD0, 0x71, 0x4F, 0xCE, 0x70, 0x72, 0x63, 0x3B, 0xD0, -0x73, 0x2F, 0xB0, 0x70, 0x74, 0x43, 0x1D, 0xD0, 0x75, 0x0F, 0x92, 0x70, 0x76, 0x22, 0xFF, 0xD0, -0x76, 0xEF, 0x74, 0x70, 0x78, 0x02, 0xE1, 0xD0, 0x78, 0xCF, 0x56, 0x70, 0x79, 0xEB, 0xFE, 0x50, -0x7A, 0xB8, 0x72, 0xF0, 0x7B, 0xCB, 0xE0, 0x50, 0x7C, 0x98, 0x54, 0xF0, 0x7D, 0xAB, 0xC2, 0x50, -0x7E, 0x78, 0x36, 0xF0, 0x7F, 0x8B, 0xA4, 0x50, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x55, 0x15, 0xD2, 0xE0, 0x56, 0x29, 0x4E, 0x50, 0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x13, 0xCA, 0x60, +0x58, 0xD5, 0xA4, 0xF0, 0x59, 0xF3, 0xAC, 0x60, 0x5A, 0xBE, 0xC1, 0x70, 0x5B, 0xD3, 0x8E, 0x60, +0x5C, 0x9E, 0xA3, 0x70, 0x5D, 0xB3, 0x70, 0x60, 0x5E, 0x7E, 0x85, 0x70, 0x5F, 0x9C, 0x8C, 0xE0, +0x60, 0x5E, 0x67, 0x70, 0x61, 0x7C, 0x6E, 0xE0, 0x62, 0x3E, 0x49, 0x70, 0x63, 0x5C, 0x50, 0xE0, +0x64, 0x1E, 0x2B, 0x70, 0x65, 0x3C, 0x32, 0xE0, 0x66, 0x07, 0x47, 0xF0, 0x67, 0x1C, 0x14, 0xE0, +0x67, 0xE7, 0x29, 0xF0, 0x68, 0xFB, 0xF6, 0xE0, 0x69, 0xC7, 0x0B, 0xF0, 0x6A, 0xE5, 0x13, 0x60, +0x6B, 0xA6, 0xED, 0xF0, 0x6C, 0xC4, 0xF5, 0x60, 0x6D, 0x86, 0xCF, 0xF0, 0x6E, 0xA4, 0xD7, 0x60, +0x6F, 0x6F, 0xEC, 0x70, 0x70, 0x84, 0xB9, 0x60, 0x71, 0x4F, 0xCE, 0x70, 0x72, 0x64, 0x9B, 0x60, +0x73, 0x2F, 0xB0, 0x70, 0x74, 0x44, 0x7D, 0x60, 0x75, 0x0F, 0x92, 0x70, 0x76, 0x2D, 0x99, 0xE0, +0x76, 0xEF, 0x74, 0x70, 0x78, 0x0D, 0x7B, 0xE0, 0x78, 0xCF, 0x56, 0x70, 0x79, 0xED, 0x5D, 0xE0, +0x7A, 0xB8, 0x72, 0xF0, 0x7B, 0xCD, 0x3F, 0xE0, 0x7C, 0x98, 0x54, 0xF0, 0x7D, 0xAD, 0x21, 0xE0, +0x7E, 0x78, 0x36, 0xF0, 0x7F, 0x96, 0x3E, 0x60, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, @@ -20367,7 +20369,7 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, #ifdef TIMELIB_SUPPORTS_V2DATA -0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x15, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0xBD, 0x4A, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, @@ -20422,28 +20424,28 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x51, 0x54, 0xBD, 0x60, 0x00, 0x00, 0x00, 0x00, 0x52, 0x44, 0xA0, 0x50, 0x00, 0x00, 0x00, 0x00, 0x53, 0x34, 0x9F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x54, 0x49, 0x6C, 0x50, 0x00, 0x00, 0x00, 0x00, 0x55, 0x15, 0xD2, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x56, 0x29, 0x4E, 0x50, 0x00, 0x00, 0x00, 0x00, -0x56, 0xF5, 0xC2, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x58, 0x09, 0x30, 0x50, 0x00, 0x00, 0x00, 0x00, -0x58, 0xD5, 0xA4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF2, 0x4C, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x5A, 0xBE, 0xC1, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD2, 0x2E, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x5C, 0x9E, 0xA3, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB2, 0x10, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x5E, 0x7E, 0x85, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x91, 0xF2, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x60, 0x5E, 0x67, 0x70, 0x00, 0x00, 0x00, 0x00, 0x61, 0x71, 0xD4, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x62, 0x3E, 0x49, 0x70, 0x00, 0x00, 0x00, 0x00, 0x63, 0x51, 0xB6, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x64, 0x1E, 0x2B, 0x70, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3A, 0xD3, 0x50, 0x00, 0x00, 0x00, 0x00, -0x66, 0x07, 0x47, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1A, 0xB5, 0x50, 0x00, 0x00, 0x00, 0x00, -0x67, 0xE7, 0x29, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFA, 0x97, 0x50, 0x00, 0x00, 0x00, 0x00, -0x69, 0xC7, 0x0B, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDA, 0x79, 0x50, 0x00, 0x00, 0x00, 0x00, -0x6B, 0xA6, 0xED, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xBA, 0x5B, 0x50, 0x00, 0x00, 0x00, 0x00, -0x6D, 0x86, 0xCF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA3, 0x77, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x6F, 0x6F, 0xEC, 0x70, 0x00, 0x00, 0x00, 0x00, 0x70, 0x83, 0x59, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x71, 0x4F, 0xCE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x72, 0x63, 0x3B, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x73, 0x2F, 0xB0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x74, 0x43, 0x1D, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x75, 0x0F, 0x92, 0x70, 0x00, 0x00, 0x00, 0x00, 0x76, 0x22, 0xFF, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x76, 0xEF, 0x74, 0x70, 0x00, 0x00, 0x00, 0x00, 0x78, 0x02, 0xE1, 0xD0, 0x00, 0x00, 0x00, 0x00, -0x78, 0xCF, 0x56, 0x70, 0x00, 0x00, 0x00, 0x00, 0x79, 0xEB, 0xFE, 0x50, 0x00, 0x00, 0x00, 0x00, -0x7A, 0xB8, 0x72, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCB, 0xE0, 0x50, 0x00, 0x00, 0x00, 0x00, -0x7C, 0x98, 0x54, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAB, 0xC2, 0x50, 0x00, 0x00, 0x00, 0x00, -0x7E, 0x78, 0x36, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8B, 0xA4, 0x50, 0x00, 0x02, 0x01, 0x02, +0x56, 0xF5, 0xC2, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x58, 0x13, 0xCA, 0x60, 0x00, 0x00, 0x00, 0x00, +0x58, 0xD5, 0xA4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF3, 0xAC, 0x60, 0x00, 0x00, 0x00, 0x00, +0x5A, 0xBE, 0xC1, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD3, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, +0x5C, 0x9E, 0xA3, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x70, 0x60, 0x00, 0x00, 0x00, 0x00, +0x5E, 0x7E, 0x85, 0x70, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x9C, 0x8C, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x60, 0x5E, 0x67, 0x70, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7C, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x62, 0x3E, 0x49, 0x70, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5C, 0x50, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x64, 0x1E, 0x2B, 0x70, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3C, 0x32, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x66, 0x07, 0x47, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1C, 0x14, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x67, 0xE7, 0x29, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFB, 0xF6, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x69, 0xC7, 0x0B, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xE5, 0x13, 0x60, 0x00, 0x00, 0x00, 0x00, +0x6B, 0xA6, 0xED, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC4, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00, +0x6D, 0x86, 0xCF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA4, 0xD7, 0x60, 0x00, 0x00, 0x00, 0x00, +0x6F, 0x6F, 0xEC, 0x70, 0x00, 0x00, 0x00, 0x00, 0x70, 0x84, 0xB9, 0x60, 0x00, 0x00, 0x00, 0x00, +0x71, 0x4F, 0xCE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x72, 0x64, 0x9B, 0x60, 0x00, 0x00, 0x00, 0x00, +0x73, 0x2F, 0xB0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x74, 0x44, 0x7D, 0x60, 0x00, 0x00, 0x00, 0x00, +0x75, 0x0F, 0x92, 0x70, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2D, 0x99, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x76, 0xEF, 0x74, 0x70, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0D, 0x7B, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x78, 0xCF, 0x56, 0x70, 0x00, 0x00, 0x00, 0x00, 0x79, 0xED, 0x5D, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7A, 0xB8, 0x72, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCD, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7C, 0x98, 0x54, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAD, 0x21, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7E, 0x78, 0x36, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x96, 0x3E, 0x60, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, @@ -20459,7 +20461,7 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x36, 0x2F, 0x31, -0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x33, 0x2E, 0x36, 0x2F, 0x31, 0x34, 0x34, 0x0A, +0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x36, 0x2F, 0x31, 0x0A, #endif 0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, 0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, 0x73, 0x74, 0x20, 0x42, 0x61, 0x6E, 0x6B, @@ -20785,11 +20787,11 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x0E, 0xA6, 0x91, 0x50, 0x0F, 0x84, 0x1B, 0x60, 0x10, 0x86, 0x73, 0x50, 0x12, 0x67, 0x98, 0xC0, 0x13, 0x4D, 0x36, 0x00, 0x14, 0x47, 0x7A, 0xC0, 0x15, 0x23, 0xDD, 0x80, 0x16, 0x27, 0x5C, 0xC0, 0x17, 0x03, 0xBF, 0x80, 0x18, 0x07, 0x3E, 0xC0, 0x19, 0x89, 0x94, 0x50, 0x19, 0xDC, 0x94, 0xC0, -0x1C, 0xC6, 0xD3, 0xD0, 0x1D, 0x9B, 0x15, 0x50, 0x1E, 0x8C, 0x82, 0x00, 0x1F, 0x7C, 0x73, 0x00, -0x20, 0x6C, 0x64, 0x00, 0x21, 0x5C, 0x55, 0x00, 0x22, 0x4C, 0x46, 0x00, 0x23, 0x3C, 0x37, 0x00, -0x24, 0x2C, 0x28, 0x00, 0x25, 0x1C, 0x19, 0x00, 0x26, 0x0C, 0x0A, 0x00, 0x27, 0x05, 0x35, 0x80, +0x1C, 0xC6, 0xD3, 0xD0, 0x1D, 0x9B, 0x15, 0x50, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, +0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, +0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x0B, 0xFB, 0xF0, 0x27, 0x05, 0x27, 0x70, 0x27, 0xF5, 0x18, 0x70, 0x28, 0xE5, 0x09, 0x70, 0x29, 0xD4, 0xFA, 0x70, 0x2A, 0xC4, 0xEB, 0x70, -0x2B, 0xB4, 0xDC, 0x70, 0x2C, 0xA4, 0xCD, 0x70, 0x2D, 0x94, 0xBE, 0x70, 0x2E, 0x84, 0xAF, 0x70, +0x2B, 0xB4, 0xDC, 0x70, 0x2C, 0xA4, 0xCD, 0x70, 0x2D, 0x8B, 0x83, 0xF0, 0x2E, 0x84, 0xAF, 0x70, 0x2F, 0x74, 0xA0, 0x70, 0x30, 0x64, 0x91, 0x70, 0x31, 0x5D, 0xBC, 0xF0, 0x32, 0x72, 0x97, 0xF0, 0x33, 0x3D, 0x9E, 0xF0, 0x34, 0x52, 0x79, 0xF0, 0x35, 0x1D, 0x80, 0xF0, 0x36, 0x32, 0x5B, 0xF0, 0x36, 0xFD, 0x62, 0xF0, 0x38, 0x1B, 0x78, 0x70, 0x38, 0xDD, 0x44, 0xF0, 0x39, 0xFB, 0x5A, 0x70, @@ -20855,15 +20857,15 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x17, 0x03, 0xBF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x18, 0x07, 0x3E, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x19, 0x89, 0x94, 0x50, 0x00, 0x00, 0x00, 0x00, 0x19, 0xDC, 0x94, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xC6, 0xD3, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9B, 0x15, 0x50, 0x00, 0x00, 0x00, 0x00, -0x1E, 0x8C, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, -0x20, 0x6C, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, -0x22, 0x4C, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, -0x24, 0x2C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, -0x26, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x35, 0x80, 0x00, 0x00, 0x00, 0x00, +0x1E, 0x8C, 0x73, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x64, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x20, 0x6C, 0x55, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x27, 0x70, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE5, 0x09, 0x70, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xFA, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xEB, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xDC, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xCD, 0x70, 0x00, 0x00, 0x00, 0x00, -0x2D, 0x94, 0xBE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x00, +0x2D, 0x8B, 0x83, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xA0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x91, 0x70, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xBC, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0x97, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0x9E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x79, 0xF0, 0x00, 0x00, 0x00, 0x00, @@ -34772,11 +34774,11 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x0E, 0xA6, 0x91, 0x50, 0x0F, 0x84, 0x1B, 0x60, 0x10, 0x86, 0x73, 0x50, 0x12, 0x67, 0x98, 0xC0, 0x13, 0x4D, 0x36, 0x00, 0x14, 0x47, 0x7A, 0xC0, 0x15, 0x23, 0xDD, 0x80, 0x16, 0x27, 0x5C, 0xC0, 0x17, 0x03, 0xBF, 0x80, 0x18, 0x07, 0x3E, 0xC0, 0x19, 0x89, 0x94, 0x50, 0x19, 0xDC, 0x94, 0xC0, -0x1C, 0xC6, 0xD3, 0xD0, 0x1D, 0x9B, 0x15, 0x50, 0x1E, 0x8C, 0x82, 0x00, 0x1F, 0x7C, 0x73, 0x00, -0x20, 0x6C, 0x64, 0x00, 0x21, 0x5C, 0x55, 0x00, 0x22, 0x4C, 0x46, 0x00, 0x23, 0x3C, 0x37, 0x00, -0x24, 0x2C, 0x28, 0x00, 0x25, 0x1C, 0x19, 0x00, 0x26, 0x0C, 0x0A, 0x00, 0x27, 0x05, 0x35, 0x80, +0x1C, 0xC6, 0xD3, 0xD0, 0x1D, 0x9B, 0x15, 0x50, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, +0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, +0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x0B, 0xFB, 0xF0, 0x27, 0x05, 0x27, 0x70, 0x27, 0xF5, 0x18, 0x70, 0x28, 0xE5, 0x09, 0x70, 0x29, 0xD4, 0xFA, 0x70, 0x2A, 0xC4, 0xEB, 0x70, -0x2B, 0xB4, 0xDC, 0x70, 0x2C, 0xA4, 0xCD, 0x70, 0x2D, 0x94, 0xBE, 0x70, 0x2E, 0x84, 0xAF, 0x70, +0x2B, 0xB4, 0xDC, 0x70, 0x2C, 0xA4, 0xCD, 0x70, 0x2D, 0x8B, 0x83, 0xF0, 0x2E, 0x84, 0xAF, 0x70, 0x2F, 0x74, 0xA0, 0x70, 0x30, 0x64, 0x91, 0x70, 0x31, 0x5D, 0xBC, 0xF0, 0x32, 0x72, 0x97, 0xF0, 0x33, 0x3D, 0x9E, 0xF0, 0x34, 0x52, 0x79, 0xF0, 0x35, 0x1D, 0x80, 0xF0, 0x36, 0x32, 0x5B, 0xF0, 0x36, 0xFD, 0x62, 0xF0, 0x38, 0x1B, 0x78, 0x70, 0x38, 0xDD, 0x44, 0xF0, 0x39, 0xFB, 0x5A, 0x70, @@ -34842,15 +34844,15 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x17, 0x03, 0xBF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x18, 0x07, 0x3E, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x19, 0x89, 0x94, 0x50, 0x00, 0x00, 0x00, 0x00, 0x19, 0xDC, 0x94, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xC6, 0xD3, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9B, 0x15, 0x50, 0x00, 0x00, 0x00, 0x00, -0x1E, 0x8C, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, -0x20, 0x6C, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, -0x22, 0x4C, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, -0x24, 0x2C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, -0x26, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x35, 0x80, 0x00, 0x00, 0x00, 0x00, +0x1E, 0x8C, 0x73, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x64, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x20, 0x6C, 0x55, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x27, 0x70, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE5, 0x09, 0x70, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xFA, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xEB, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xDC, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xCD, 0x70, 0x00, 0x00, 0x00, 0x00, -0x2D, 0x94, 0xBE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x00, +0x2D, 0x8B, 0x83, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xA0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x91, 0x70, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xBC, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0x97, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0x9E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x79, 0xF0, 0x00, 0x00, 0x00, 0x00, @@ -45486,11 +45488,11 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x0E, 0xA6, 0x91, 0x50, 0x0F, 0x84, 0x1B, 0x60, 0x10, 0x86, 0x73, 0x50, 0x12, 0x67, 0x98, 0xC0, 0x13, 0x4D, 0x36, 0x00, 0x14, 0x47, 0x7A, 0xC0, 0x15, 0x23, 0xDD, 0x80, 0x16, 0x27, 0x5C, 0xC0, 0x17, 0x03, 0xBF, 0x80, 0x18, 0x07, 0x3E, 0xC0, 0x19, 0x89, 0x94, 0x50, 0x19, 0xDC, 0x94, 0xC0, -0x1C, 0xC6, 0xD3, 0xD0, 0x1D, 0x9B, 0x15, 0x50, 0x1E, 0x8C, 0x82, 0x00, 0x1F, 0x7C, 0x73, 0x00, -0x20, 0x6C, 0x64, 0x00, 0x21, 0x5C, 0x55, 0x00, 0x22, 0x4C, 0x46, 0x00, 0x23, 0x3C, 0x37, 0x00, -0x24, 0x2C, 0x28, 0x00, 0x25, 0x1C, 0x19, 0x00, 0x26, 0x0C, 0x0A, 0x00, 0x27, 0x05, 0x35, 0x80, +0x1C, 0xC6, 0xD3, 0xD0, 0x1D, 0x9B, 0x15, 0x50, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, +0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, +0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x0B, 0xFB, 0xF0, 0x27, 0x05, 0x27, 0x70, 0x27, 0xF5, 0x18, 0x70, 0x28, 0xE5, 0x09, 0x70, 0x29, 0xD4, 0xFA, 0x70, 0x2A, 0xC4, 0xEB, 0x70, -0x2B, 0xB4, 0xDC, 0x70, 0x2C, 0xA4, 0xCD, 0x70, 0x2D, 0x94, 0xBE, 0x70, 0x2E, 0x84, 0xAF, 0x70, +0x2B, 0xB4, 0xDC, 0x70, 0x2C, 0xA4, 0xCD, 0x70, 0x2D, 0x8B, 0x83, 0xF0, 0x2E, 0x84, 0xAF, 0x70, 0x2F, 0x74, 0xA0, 0x70, 0x30, 0x64, 0x91, 0x70, 0x31, 0x5D, 0xBC, 0xF0, 0x32, 0x72, 0x97, 0xF0, 0x33, 0x3D, 0x9E, 0xF0, 0x34, 0x52, 0x79, 0xF0, 0x35, 0x1D, 0x80, 0xF0, 0x36, 0x32, 0x5B, 0xF0, 0x36, 0xFD, 0x62, 0xF0, 0x38, 0x1B, 0x78, 0x70, 0x38, 0xDD, 0x44, 0xF0, 0x39, 0xFB, 0x5A, 0x70, @@ -45556,15 +45558,15 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { 0x17, 0x03, 0xBF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x18, 0x07, 0x3E, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x19, 0x89, 0x94, 0x50, 0x00, 0x00, 0x00, 0x00, 0x19, 0xDC, 0x94, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xC6, 0xD3, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9B, 0x15, 0x50, 0x00, 0x00, 0x00, 0x00, -0x1E, 0x8C, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, -0x20, 0x6C, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, -0x22, 0x4C, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, -0x24, 0x2C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, -0x26, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x35, 0x80, 0x00, 0x00, 0x00, 0x00, +0x1E, 0x8C, 0x73, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x64, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x20, 0x6C, 0x55, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x27, 0x70, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE5, 0x09, 0x70, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xFA, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xEB, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xDC, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xCD, 0x70, 0x00, 0x00, 0x00, 0x00, -0x2D, 0x94, 0xBE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x00, +0x2D, 0x8B, 0x83, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xA0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x91, 0x70, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xBC, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0x97, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0x9E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x79, 0xF0, 0x00, 0x00, 0x00, 0x00, @@ -47668,4 +47670,4 @@ const unsigned char timelib_timezone_db_data_builtin[271452] = { #endif 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,}; -const timelib_tzdb timezonedb_builtin = { "2016.7", 590, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; +const timelib_tzdb timezonedb_builtin = { "2016.8", 590, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; diff --git b/ext/date/tests/bug53437_var3.phpt a/ext/date/tests/bug53437_var3.phpt index 82b90f5..9a50f5f 100644 --- b/ext/date/tests/bug53437_var3.phpt +++ a/ext/date/tests/bug53437_var3.phpt @@ -12,7 +12,7 @@ var_dump($di); ?> ==DONE== --EXPECTF-- -object(DateInterval)#%d (15) { +object(DateInterval)#%d (16) { ["y"]=> int(2) ["m"]=> @@ -25,6 +25,8 @@ object(DateInterval)#%d (15) { int(8) ["s"]=> int(0) + ["f"]=> + float(-1) ["weekday"]=> int(10) ["weekday_behavior"]=> diff --git b/ext/gd/libgd/gd_crop.c a/ext/gd/libgd/gd_crop.c index 8331521..58b6303 100644 --- b/ext/gd/libgd/gd_crop.c +++ a/ext/gd/libgd/gd_crop.c @@ -243,6 +243,10 @@ gdImagePtr gdImageCropThreshold(gdImagePtr im, const unsigned int color, const f return NULL; } + if (!gdImageTrueColor(im) && color >= gdImageColorsTotal(im)) { + return NULL; + } + /* TODO: Add gdImageGetRowPtr and works with ptr at the row level * for the true color and palette images * new formats will simply work with ptr diff --git b/ext/gd/tests/bug72494.phpt a/ext/gd/tests/bug72494.phpt new file mode 100644 index 0000000..f21de6c --- /dev/null +++ a/ext/gd/tests/bug72494.phpt @@ -0,0 +1,15 @@ +--TEST-- +Bug #72494 (imagecropauto out-of-bounds access) +--SKIPIF-- +<?php +if (!extension_loaded('gd')) die('skip gd extension not available'); +?> +--FILE-- +<?php +$im = imagecreate(10,10); +imagecropauto($im, IMG_CROP_THRESHOLD, 0, 1337); +?> +===DONE=== +--EXPECTF-- +Warning: imagecropauto(): Color argument missing with threshold mode in %s on line %d +===DONE=== diff --git b/ext/hash/tests/hash_update_file.phpt a/ext/hash/tests/hash_update_file.phpt new file mode 100644 index 0000000..32ce962 --- /dev/null +++ a/ext/hash/tests/hash_update_file.phpt @@ -0,0 +1,21 @@ +--TEST-- +bool hash_update_file ( resource $hcontext , string $filename [, resource $scontext = NULL ] ); +--CREDITS-- +marcosptf - <marcosptf@yahoo.com.br> - @phpsp - sao paulo - br +--SKIPIF-- +<?php +if (phpversion() < "5.3.0") { + die('SKIP php version so lower.'); +} +require_once(dirname(__FILE__) . '/skip_mhash.inc'); ?> +?> +--FILE-- +<?php +$ctx = hash_init('md5'); +$filePath = __DIR__ . DIRECTORY_SEPARATOR . 'sha1.phpt'; +fopen($filePath, "r"); +var_dump(hash_update_file($ctx, $filePath)); +hash_final($ctx); +?> +--EXPECT-- +bool(true) diff --git b/ext/hash/tests/hash_update_stream.phpt a/ext/hash/tests/hash_update_stream.phpt new file mode 100644 index 0000000..b628b9c --- /dev/null +++ a/ext/hash/tests/hash_update_stream.phpt @@ -0,0 +1,23 @@ +--TEST-- +int hash_update_stream ( resource $context , resource $handle [, int $length = -1 ] ); +--CREDITS-- +marcosptf - <marcosptf@yahoo.com.br> - @phpsp - sao paulo - br +--SKIPIF-- +<?php +if (phpversion() < "5.3.0") { + die('SKIP php version so lower.'); +} +require_once(dirname(__FILE__) . '/skip_mhash.inc'); ?> +?> +--FILE-- +<?php +$fp = tmpfile(); +fwrite($fp, 'The quick brown fox jumped over the lazy dog.'); +rewind($fp); + +$ctx = hash_init('md5'); +hash_update_stream($ctx, $fp); +echo hash_final($ctx); +?> +--EXPECT-- +5c6ffbdd40d9556b73a21e63c3e0e904 diff --git b/ext/json/json_encoder.c a/ext/json/json_encoder.c index f946748..473726c 100644 --- b/ext/json/json_encoder.c +++ a/ext/json/json_encoder.c @@ -45,6 +45,10 @@ static int php_json_determine_array_type(zval *val) /* {{{ */ zend_string *key; zend_ulong index, idx; + if (HT_IS_PACKED(myht) && HT_IS_WITHOUT_HOLES(myht)) { + return PHP_JSON_OUTPUT_ARRAY; + } + idx = 0; ZEND_HASH_FOREACH_KEY(myht, index, key) { if (key) { diff --git b/ext/opcache/Optimizer/zend_call_graph.c a/ext/opcache/Optimizer/zend_call_graph.c index 53eb0a8..e892c35 100644 --- b/ext/opcache/Optimizer/zend_call_graph.c +++ a/ext/opcache/Optimizer/zend_call_graph.c @@ -80,65 +80,7 @@ static int zend_foreach_op_array(zend_call_graph *call_graph, zend_script *scrip return SUCCESS; } -static void zend_collect_args_info(zend_call_info *call_info) -{ - zend_op *opline = call_info->caller_init_opline; - zend_op *end = call_info->caller_call_opline; - uint32_t i; - int num; - int level = 0; - - ZEND_ASSERT(opline && end); - if (!opline->extended_value) { - return; - } - for (i = 0; i < opline->extended_value; i++) { - call_info->arg_info[i].opline = NULL; - } - while (opline < end) { - opline++; - switch (opline->opcode) { - case ZEND_SEND_VAL: - case ZEND_SEND_VAR: - case ZEND_SEND_VAL_EX: - case ZEND_SEND_VAR_EX: - case ZEND_SEND_REF: - case ZEND_SEND_VAR_NO_REF: - case ZEND_SEND_VAR_NO_REF_EX: - num = opline->op2.num; - if (num > 0) { - num--; - } - if (!level) { - call_info->arg_info[num].opline = opline; - } - break; - case ZEND_SEND_ARRAY: - case ZEND_SEND_USER: - case ZEND_SEND_UNPACK: - // ??? - break; - case ZEND_INIT_FCALL: - case ZEND_INIT_FCALL_BY_NAME: - case ZEND_INIT_NS_FCALL_BY_NAME: - case ZEND_INIT_DYNAMIC_CALL: - case ZEND_NEW: - case ZEND_INIT_METHOD_CALL: - case ZEND_INIT_STATIC_METHOD_CALL: - case ZEND_INIT_USER_CALL: - level++; - break; - case ZEND_DO_FCALL: - case ZEND_DO_ICALL: - case ZEND_DO_UCALL: - case ZEND_DO_FCALL_BY_NAME: - level--; - break; - } - } -} - -static int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_op_array *op_array, zend_func_info *func_info) +int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_op_array *op_array, zend_func_info *func_info) { zend_op *opline = op_array->opcodes; zend_op *end = opline + op_array->last; @@ -149,12 +91,13 @@ static int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t ALLOCA_FLAG(use_heap); call_stack = do_alloca((op_array->last / 2) * sizeof(zend_call_info*), use_heap); + call_info = NULL; while (opline != end) { - call_info = NULL; switch (opline->opcode) { case ZEND_INIT_FCALL: case ZEND_INIT_METHOD_CALL: case ZEND_INIT_STATIC_METHOD_CALL: + call_stack[call] = call_info; func = zend_optimizer_get_called_func( script, op_array, opline, (build_flags & ZEND_RT_CONSTANTS) != 0); if (func) { @@ -167,20 +110,31 @@ static int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t call_info->next_callee = func_info->callee_info; func_info->callee_info = call_info; - if (func->type == ZEND_INTERNAL_FUNCTION) { + if (build_flags & ZEND_CALL_TREE) { + call_info->next_caller = NULL; + } else if (func->type == ZEND_INTERNAL_FUNCTION) { call_info->next_caller = NULL; } else { zend_func_info *callee_func_info = ZEND_FUNC_INFO(&func->op_array); - call_info->next_caller = callee_func_info ? callee_func_info->caller_info : NULL; + if (callee_func_info) { + call_info->next_caller = callee_func_info->caller_info; + callee_func_info->caller_info = call_info; + } else { + call_info->next_caller = NULL; + } } + } else { + call_info = NULL; } - /* break missing intentionally */ + call++; + break; case ZEND_INIT_FCALL_BY_NAME: case ZEND_INIT_NS_FCALL_BY_NAME: case ZEND_INIT_DYNAMIC_CALL: case ZEND_NEW: case ZEND_INIT_USER_CALL: call_stack[call] = call_info; + call_info = NULL; call++; break; case ZEND_DO_FCALL: @@ -188,12 +142,33 @@ static int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t case ZEND_DO_UCALL: case ZEND_DO_FCALL_BY_NAME: func_info->flags |= ZEND_FUNC_HAS_CALLS; + if (call_info) { + call_info->caller_call_opline = opline; + } call--; - if (call_stack[call]) { - call_stack[call]->caller_call_opline = opline; - zend_collect_args_info(call_stack[call]); + call_info = call_stack[call]; + break; + case ZEND_SEND_VAL: + case ZEND_SEND_VAR: + case ZEND_SEND_VAL_EX: + case ZEND_SEND_VAR_EX: + case ZEND_SEND_REF: + case ZEND_SEND_VAR_NO_REF: + case ZEND_SEND_VAR_NO_REF_EX: + if (call_info) { + uint32_t num = opline->op2.num; + + if (num > 0) { + num--; + } + call_info->arg_info[num].opline = opline; } break; + case ZEND_SEND_ARRAY: + case ZEND_SEND_USER: + case ZEND_SEND_UNPACK: + /* TODO: set info about var_arg call ??? */ + break; } opline++; } diff --git b/ext/opcache/Optimizer/zend_call_graph.h a/ext/opcache/Optimizer/zend_call_graph.h index 64eb9e8..a5f47f1 100644 --- b/ext/opcache/Optimizer/zend_call_graph.h +++ a/ext/opcache/Optimizer/zend_call_graph.h @@ -69,6 +69,7 @@ typedef struct _zend_call_graph { BEGIN_EXTERN_C() int zend_build_call_graph(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_call_graph *call_graph); +int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_op_array *op_array, zend_func_info *func_info); END_EXTERN_C() diff --git b/ext/opcache/Optimizer/zend_cfg.h a/ext/opcache/Optimizer/zend_cfg.h index 1ffb62a..4f570b7 100644 --- b/ext/opcache/Optimizer/zend_cfg.h +++ a/ext/opcache/Optimizer/zend_cfg.h @@ -101,6 +101,7 @@ typedef struct _zend_cfg { #define ZEND_CFG_SPLIT_AT_LIVE_RANGES (1<<26) #define ZEND_CFG_NO_ENTRY_PREDECESSORS (1<<25) #define ZEND_CFG_RECV_ENTRY (1<<24) +#define ZEND_CALL_TREE (1<<23) #define CRT_CONSTANT_EX(op_array, node, rt_constants) \ ((rt_constants) ? \ diff --git b/ext/opcache/Optimizer/zend_dump.c a/ext/opcache/Optimizer/zend_dump.c index ed9b6a5..cd07309 100644 --- b/ext/opcache/Optimizer/zend_dump.c +++ a/ext/opcache/Optimizer/zend_dump.c @@ -735,7 +735,7 @@ static void zend_dump_block_info(const zend_cfg *cfg, int n, uint32_t dump_flags fprintf(stderr, " ; level=%d\n", b->level); } if (b->loop_header >= 0) { - fprintf(stderr, " ; loop_header=%d\n", b->level); + fprintf(stderr, " ; loop_header=%d\n", b->loop_header); } if (b->children >= 0) { int j = b->children; diff --git b/ext/opcache/Optimizer/zend_inference.c a/ext/opcache/Optimizer/zend_inference.c index 33bab0e..0635cc5 100644 --- b/ext/opcache/Optimizer/zend_inference.c +++ a/ext/opcache/Optimizer/zend_inference.c @@ -2964,15 +2964,17 @@ static void zend_update_type_info(const zend_op_array *op_array, } break; case ZEND_SEND_VAR_EX: - case ZEND_SEND_VAR_NO_REF: - case ZEND_SEND_VAR_NO_REF_EX: - case ZEND_SEND_REF: -// TODO: ??? if (ssa_ops[i].op1_def >= 0) { tmp = (t1 & MAY_BE_UNDEF)|MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_ANY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF; UPDATE_SSA_TYPE(tmp, ssa_ops[i].op1_def); } break; + case ZEND_SEND_REF: + if (ssa_ops[i].op1_def >= 0) { + tmp = MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_ANY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF; + UPDATE_SSA_TYPE(tmp, ssa_ops[i].op1_def); + } + break; case ZEND_SEND_UNPACK: if (ssa_ops[i].op1_def >= 0) { tmp = t1; diff --git b/ext/opcache/Optimizer/zend_optimizer.c a/ext/opcache/Optimizer/zend_optimizer.c index 3092b96..841be4a 100644 --- b/ext/opcache/Optimizer/zend_optimizer.c +++ a/ext/opcache/Optimizer/zend_optimizer.c @@ -546,11 +546,16 @@ zend_function *zend_optimizer_get_called_func( { zend_string *function_name = Z_STR_P(GET_OP(op2)); zend_function *func; - if ((func = zend_hash_find_ptr(&script->function_table, function_name)) != NULL) { + if (script && (func = zend_hash_find_ptr(&script->function_table, function_name)) != NULL) { return func; } else if ((func = zend_hash_find_ptr(EG(function_table), function_name)) != NULL) { - ZEND_ASSERT(func->type == ZEND_INTERNAL_FUNCTION); - return func; + if (func->type == ZEND_INTERNAL_FUNCTION) { + return func; + } else if (func->type == ZEND_USER_FUNCTION && + func->op_array.filename && + func->op_array.filename == op_array->filename) { + return func; + } } break; } @@ -558,7 +563,18 @@ zend_function *zend_optimizer_get_called_func( case ZEND_INIT_NS_FCALL_BY_NAME: if (opline->op2_type == IS_CONST && Z_TYPE_P(GET_OP(op2)) == IS_STRING) { zval *function_name = GET_OP(op2) + 1; - return zend_hash_find_ptr(&script->function_table, Z_STR_P(function_name)); + zend_function *func; + if (script && (func = zend_hash_find_ptr(&script->function_table, Z_STR_P(function_name)))) { + return func; + } else if ((func = zend_hash_find_ptr(EG(function_table), function_name)) != NULL) { + if (func->type == ZEND_INTERNAL_FUNCTION) { + return func; + } else if (func->type == ZEND_USER_FUNCTION && + func->op_array.filename && + func->op_array.filename == op_array->filename) { + return func; + } + } } break; case ZEND_INIT_STATIC_METHOD_CALL: @@ -566,7 +582,17 @@ zend_function *zend_optimizer_get_called_func( zend_class_entry *ce = NULL; if (opline->op1_type == IS_CONST && Z_TYPE_P(GET_OP(op1)) == IS_STRING) { zend_string *class_name = Z_STR_P(GET_OP(op1) + 1); - ce = zend_hash_find_ptr(&script->class_table, class_name); + if (script && (ce = zend_hash_find_ptr(&script->class_table, class_name))) { + /* pass */ + } else if ((ce = zend_hash_find_ptr(EG(class_table), class_name))) { + if (ce->type == ZEND_INTERNAL_CLASS) { + /* pass */ + } else if (ce->type != ZEND_USER_CLASS || + !ce->info.user.filename || + ce->info.user.filename != op_array->filename) { + ce = NULL; + } + } } else if (opline->op1_type == IS_UNUSED && op_array->scope && !(op_array->scope->ce_flags & ZEND_ACC_TRAIT) && (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) { diff --git b/ext/openssl/openssl.c a/ext/openssl/openssl.c index 3bad717..ab58f47 100644 --- b/ext/openssl/openssl.c +++ a/ext/openssl/openssl.c @@ -73,7 +73,7 @@ #ifdef HAVE_OPENSSL_MD2_H #define OPENSSL_ALGO_MD2 4 #endif -#if OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER) #define OPENSSL_ALGO_DSS1 5 #endif #define OPENSSL_ALGO_SHA224 6 @@ -557,7 +557,7 @@ ZEND_GET_MODULE(openssl) #endif /* {{{ OpenSSL compatibility functions and macros */ -#if OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER) #define EVP_PKEY_get0_RSA(_pkey) _pkey->pkey.rsa #define EVP_PKEY_get0_DH(_pkey) _pkey->pkey.dh #define EVP_PKEY_get0_DSA(_pkey) _pkey->pkey.dsa @@ -1296,7 +1296,7 @@ static EVP_MD * php_openssl_get_evp_md_from_algo(zend_long algo) { /* {{{ */ mdtype = (EVP_MD *) EVP_md2(); break; #endif -#if OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER) case OPENSSL_ALGO_DSS1: mdtype = (EVP_MD *) EVP_dss1(); break; @@ -1422,7 +1422,7 @@ PHP_MINIT_FUNCTION(openssl) #ifdef HAVE_OPENSSL_MD2_H REGISTER_LONG_CONSTANT("OPENSSL_ALGO_MD2", OPENSSL_ALGO_MD2, CONST_CS|CONST_PERSISTENT); #endif -#if OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER) REGISTER_LONG_CONSTANT("OPENSSL_ALGO_DSS1", OPENSSL_ALGO_DSS1, CONST_CS|CONST_PERSISTENT); #endif REGISTER_LONG_CONSTANT("OPENSSL_ALGO_SHA224", OPENSSL_ALGO_SHA224, CONST_CS|CONST_PERSISTENT); @@ -3910,7 +3910,6 @@ static int php_openssl_is_private_key(EVP_PKEY* pkey) assert(pkey != NULL); switch (EVP_PKEY_id(pkey)) { -#ifndef NO_RSA case EVP_PKEY_RSA: case EVP_PKEY_RSA2: { @@ -3925,8 +3924,6 @@ static int php_openssl_is_private_key(EVP_PKEY* pkey) } } break; -#endif -#ifndef NO_DSA case EVP_PKEY_DSA: case EVP_PKEY_DSA1: case EVP_PKEY_DSA2: @@ -3949,8 +3946,6 @@ static int php_openssl_is_private_key(EVP_PKEY* pkey) } } break; -#endif -#ifndef NO_DH case EVP_PKEY_DH: { DH *dh = EVP_PKEY_get0_DH(pkey); @@ -3969,7 +3964,6 @@ static int php_openssl_is_private_key(EVP_PKEY* pkey) } } break; -#endif #ifdef HAVE_EVP_PKEY_EC case EVP_PKEY_EC: { diff --git b/ext/openssl/tests/openssl_free_key.phpt a/ext/openssl/tests/openssl_free_key.phpt new file mode 100644 index 0000000..18219a2 --- /dev/null +++ a/ext/openssl/tests/openssl_free_key.phpt @@ -0,0 +1,77 @@ +--TEST-- +void openssl_free_key ( resource $key_identifier ); +--CREDITS-- +marcosptf - <marcosptf@yahoo.com.br> - @phpsp - sao paulo - br +--SKIPIF-- +<?php +if (!extension_loaded("openssl")) + die("skip"); +if (!@openssl_pkey_new()) + die("skip cannot create private key"); +?> +--FILE-- +<?php +echo "Creating private key\n"; + +/* stack up some entropy; performance is not critical, + * and being slow will most likely even help the test. + */ +for ($z = "", $i = 0; $i < 1024; $i++) { + $z .= $i * $i; + if (function_exists("usleep")) + usleep($i); +} + +$privkey = openssl_pkey_new(); + +if ($privkey === false) + die("failed to create private key"); + +$passphrase = "banana"; +$key_file_name = tempnam("/tmp", "ssl"); +if ($key_file_name === false) + die("failed to get a temporary filename!"); + +echo "Export key to file\n"; + +openssl_pkey_export_to_file($privkey, $key_file_name, $passphrase) or die("failed to export to file $key_file_name"); + +echo "Load key from file - array syntax\n"; + +$loaded_key = openssl_pkey_get_private(array("file://$key_file_name", $passphrase)); + +if ($loaded_key === false) + die("failed to load key using array syntax"); + +openssl_free_key($loaded_key); + +echo "Load key using direct syntax\n"; + +$loaded_key = openssl_pkey_get_private("file://$key_file_name", $passphrase); + +if ($loaded_key === false) + die("failed to load key using direct syntax"); + +openssl_free_key($loaded_key); + +echo "Load key manually and use string syntax\n"; + +$key_content = file_get_contents($key_file_name); +$loaded_key = openssl_pkey_get_private($key_content, $passphrase); + +if ($loaded_key === false) + die("failed to load key using string syntax"); + +openssl_free_key($loaded_key); + +echo "OK!\n"; + +@unlink($key_file_name); +?> +--EXPECT-- +Creating private key +Export key to file +Load key from file - array syntax +Load key using direct syntax +Load key manually and use string syntax +OK! diff --git b/ext/openssl/xp_ssl.c a/ext/openssl/xp_ssl.c index 5b39a0d..9a53a6e 100644 --- b/ext/openssl/xp_ssl.c +++ a/ext/openssl/xp_ssl.c @@ -91,7 +91,7 @@ /* Used for peer verification in windows */ #define PHP_X509_NAME_ENTRY_TO_UTF8(ne, i, out) ASN1_STRING_to_UTF8(&out, X509_NAME_ENTRY_get_data(X509_NAME_get_entry(ne, i))) -#if !defined(OPENSSL_NO_RSA) && OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER) static RSA *tmp_rsa_cb(SSL *s, int is_export, int keylength); #endif @@ -1123,7 +1123,7 @@ static void init_server_reneg_limit(php_stream *stream, php_openssl_netstream_da } /* }}} */ -#if !defined(OPENSSL_NO_RSA) && OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER) static RSA *tmp_rsa_cb(SSL *s, int is_export, int keylength) { BIGNUM *bn = NULL; @@ -1147,7 +1147,6 @@ static RSA *tmp_rsa_cb(SSL *s, int is_export, int keylength) } #endif -#ifndef OPENSSL_NO_DH static int set_server_dh_param(php_stream * stream, SSL_CTX *ctx) /* {{{ */ { DH *dh; @@ -1192,9 +1191,8 @@ static int set_server_dh_param(php_stream * stream, SSL_CTX *ctx) /* {{{ */ return SUCCESS; } /* }}} */ -#endif -#if defined(HAVE_ECDH) && OPENSSL_VERSION_NUMBER < 0x10100000L +#if defined(HAVE_ECDH) && (OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER)) static int set_server_ecdh_curve(php_stream *stream, SSL_CTX *ctx) /* {{{ */ { zval *zvcurve; @@ -1237,13 +1235,13 @@ static int set_server_specific_opts(php_stream *stream, SSL_CTX *ctx) /* {{{ */ zval *zv; long ssl_ctx_options = SSL_CTX_get_options(ctx); -#if defined(HAVE_ECDH) && OPENSSL_VERSION_NUMBER < 0x10100000L +#if defined(HAVE_ECDH) && (OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER)) if (set_server_ecdh_curve(stream, ctx) == FAILURE) { return FAILURE; } #endif -#if !defined(OPENSSL_NO_RSA) && OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER) SSL_CTX_set_tmp_rsa_callback(ctx, tmp_rsa_cb); #endif /* We now use tmp_rsa_cb to generate a key of appropriate size whenever necessary */ @@ -1251,13 +1249,11 @@ static int set_server_specific_opts(php_stream *stream, SSL_CTX *ctx) /* {{{ */ php_error_docref(NULL, E_WARNING, "rsa_key_size context option has been removed"); } -#ifndef OPENSSL_NO_DH set_server_dh_param(stream, ctx); zv = php_stream_context_get_option(PHP_STREAM_CONTEXT(stream), "ssl", "single_dh_use"); if (zv != NULL && zend_is_true(zv)) { ssl_ctx_options |= SSL_OP_SINGLE_DH_USE; } -#endif zv = php_stream_context_get_option(PHP_STREAM_CONTEXT(stream), "ssl", "honor_cipher_order"); if (zv != NULL && zend_is_true(zv)) { diff --git b/ext/session/session.c a/ext/session/session.c index 742461b..5484390 100644 --- b/ext/session/session.c +++ a/ext/session/session.c @@ -2266,7 +2266,6 @@ static PHP_FUNCTION(session_gc) num = php_session_gc(1); if (num < 0) { - php_error_docref(NULL, E_WARNING, "Failed to perfom session GC"); RETURN_FALSE; } diff --git b/ext/soap/php_encoding.c a/ext/soap/php_encoding.c index c0e22d7..c6a3f86 100644 --- b/ext/soap/php_encoding.c +++ a/ext/soap/php_encoding.c @@ -3483,6 +3483,10 @@ static int is_map(zval *array) zend_string *key; zend_ulong i = 0; + if (HT_IS_PACKED(Z_ARRVAL_P(array)) && HT_IS_WITHOUT_HOLES(Z_ARRVAL_P(array))) { + return FALSE; + } + ZEND_HASH_FOREACH_KEY(Z_ARRVAL_P(array), index, key) { if (key || index != i) { return TRUE; diff --git b/ext/soap/php_http.c a/ext/soap/php_http.c index dd87ec1..7a6562c 100644 --- b/ext/soap/php_http.c +++ a/ext/soap/php_http.c @@ -161,7 +161,7 @@ void http_context_headers(php_stream_context* context, static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, php_stream_context *context, int *use_proxy) { php_stream *stream; - zval *proxy_host, *proxy_port, *tmp; + zval *proxy_host, *proxy_port, *tmp, ssl_proxy_peer_name; char *host; char *name; char *protocol; @@ -241,6 +241,13 @@ static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, ph if (stream && *use_proxy && use_ssl) { smart_str soap_headers = {0}; + /* Set peer_name or name verification will try to use the proxy server name */ + if (!context || (tmp = php_stream_context_get_option(context, "ssl", "peer_name")) == NULL) { + ZVAL_STRING(&ssl_proxy_peer_name, phpurl->host); + php_stream_context_set_option(PHP_STREAM_CONTEXT(stream), "ssl", "peer_name", &ssl_proxy_peer_name); + zval_ptr_dtor(&ssl_proxy_peer_name); + } + smart_str_append_const(&soap_headers, "CONNECT "); smart_str_appends(&soap_headers, phpurl->host); smart_str_appendc(&soap_headers, ':'); diff --git b/ext/soap/soap.c a/ext/soap/soap.c index 23bbfb6..73b7616 100644 --- b/ext/soap/soap.c +++ a/ext/soap/soap.c @@ -2366,6 +2366,8 @@ PHP_METHOD(SoapClient, SoapClient) Z_TYPE_P(tmp) == IS_RESOURCE) { context = php_stream_context_from_zval(tmp, 1); Z_ADDREF_P(tmp); + } else { + context = php_stream_context_alloc(); } if ((tmp = zend_hash_str_find(ht, "location", sizeof("location")-1)) != NULL && diff --git b/ext/soap/tests/bug69137.phpt a/ext/soap/tests/bug69137.phpt new file mode 100644 index 0000000..9160b91 --- /dev/null +++ a/ext/soap/tests/bug69137.phpt @@ -0,0 +1,46 @@ +--TEST-- +SOAP Bug #69137 - Peer verification fails when using a proxy with SoapClient +--SKIPIF-- +<?php +require_once('skipif.inc'); +if (getenv("SKIP_ONLINE_TESTS")) { die("skip test requiring internet connection"); } +if (!getenv('http_proxy')) { die("skip test unless an HTTP/HTTPS proxy server is specified in http_proxy environment variable"); } +?> +--INI-- +soap.wsdl_cache_enabled=1 +--FILE-- +<?php + +class IpLookup +{ + public $licenseKey; + public $ipAddress; +} + +list ($proxyHost, $proxyPort) = explode(':', str_replace('http://', '', $_ENV['http_proxy'])); + +// Prime the WSDL cache because that request sets peer_name on the HTTP context +// and masks the SOAP bug. +$testServiceWsdl = 'https://ws.cdyne.com/ip2geo/ip2geo.asmx?wsdl'; +$client = new SoapClient($testServiceWsdl); +unset($client); + +$parameters = [ + 'proxy_host' => $proxyHost, + 'proxy_port' => $proxyPort, + 'trace' => 1, +]; +$client = new SoapClient($testServiceWsdl, $parameters); + +$lookup = new IpLookup(); +$lookup->licenseKey = 0; +$lookup->ipAddress = '72.52.91.14'; + +$result = $client->ResolveIP($lookup); + +if ($result && is_object($result) && $result->ResolveIPResult && is_object($result->ResolveIPResult)) { + print "successful lookup"; +} +?> +--EXPECT-- +successful lookup diff --git b/ext/sqlite3/sqlite3.c a/ext/sqlite3/sqlite3.c index 67b14bb..9eaf714 100644 --- b/ext/sqlite3/sqlite3.c +++ a/ext/sqlite3/sqlite3.c @@ -567,13 +567,20 @@ PHP_METHOD(sqlite3, query) static void sqlite_value_to_zval(sqlite3_stmt *stmt, int column, zval *data) /* {{{ */ { + sqlite3_int64 val; + switch (sqlite3_column_type(stmt, column)) { case SQLITE_INTEGER: - if ((sqlite3_column_int64(stmt, column)) >= INT_MAX || sqlite3_column_int64(stmt, column) <= INT_MIN) { + val = sqlite3_column_int64(stmt, column); +#if LONG_MAX <= 2147483647 + if (val > ZEND_LONG_MAX || val < ZEND_LONG_MIN) { ZVAL_STRINGL(data, (char *)sqlite3_column_text(stmt, column), sqlite3_column_bytes(stmt, column)); } else { - ZVAL_LONG(data, sqlite3_column_int64(stmt, column)); +#endif + ZVAL_LONG(data, val); +#if LONG_MAX <= 2147483647 } +#endif break; case SQLITE_FLOAT: diff --git b/ext/sqlite3/tests/bug63921-32bit.phpt a/ext/sqlite3/tests/bug63921-32bit.phpt index 8c1c6b9..d2cc7b2 100644 --- b/ext/sqlite3/tests/bug63921-32bit.phpt +++ a/ext/sqlite3/tests/bug63921-32bit.phpt @@ -24,4 +24,4 @@ var_dump($num,$result[0]); ?> --EXPECT-- int(2147483647) -string(10) "2147483647" +int(2147483647) diff --git b/ext/sqlite3/tests/bug63921-64bit.phpt a/ext/sqlite3/tests/bug63921-64bit.phpt index 8e821fd..d6c539e 100644 --- b/ext/sqlite3/tests/bug63921-64bit.phpt +++ a/ext/sqlite3/tests/bug63921-64bit.phpt @@ -24,4 +24,4 @@ var_dump($num,$result[0]); ?> --EXPECT-- int(100004313234244) -string(15) "100004313234244" +int(100004313234244) diff --git b/ext/sqlite3/tests/bug73333.phpt a/ext/sqlite3/tests/bug73333.phpt new file mode 100644 index 0000000..7315751 --- /dev/null +++ a/ext/sqlite3/tests/bug73333.phpt @@ -0,0 +1,26 @@ +--TEST-- +Bug #73333 (2147483647 is fetched as string) +--SKIPIF-- +<?php +if (!extension_loaded('sqlite3')) die('skip sqlite3 extension not available'); +?> +--FILE-- +<?php +if (!defined('PHP_INT_MIN')) define('PHP_INT_MIN', -PHP_INT_MAX-1); + +$db = new SQLite3(':memory:'); +$db->exec('CREATE TABLE foo (bar INT)'); +foreach ([PHP_INT_MIN, PHP_INT_MAX] as $value) { + $db->exec("INSERT INTO foo VALUES ($value)"); +} + +$res = $db->query('SELECT bar FROM foo'); +while (($row = $res->fetchArray(SQLITE3_NUM)) !== false) { + echo gettype($row[0]), PHP_EOL; +} +?> +===DONE=== +--EXPECT-- +integer +integer +===DONE=== diff --git b/ext/standard/array.c a/ext/standard/array.c index 078b84a..69439a7 100644 --- b/ext/standard/array.c +++ a/ext/standard/array.c @@ -2909,7 +2909,9 @@ PHP_FUNCTION(array_slice) /* Start at the beginning and go until we hit offset */ pos = 0; - if ((Z_ARRVAL_P(input)->u.flags & HASH_FLAG_PACKED) && !preserve_keys) { + if (HT_IS_PACKED(Z_ARRVAL_P(input)) && + (!preserve_keys || + (offset == 0 && HT_IS_WITHOUT_HOLES(Z_ARRVAL_P(input))))) { zend_hash_real_init(Z_ARRVAL_P(return_value), 1); ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) { ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(input), entry) { @@ -2975,17 +2977,10 @@ PHPAPI int php_array_merge_recursive(HashTable *dest, HashTable *src) /* {{{ */ return 0; } - if (Z_ISREF_P(dest_entry)) { - if (Z_REFCOUNT_P(dest_entry) == 1) { - ZVAL_UNREF(dest_entry); - } else { - Z_DELREF_P(dest_entry); - ZVAL_DUP(dest_entry, dest_zval); - } - dest_zval = dest_entry; - } else { - SEPARATE_ZVAL(dest_zval); - } + ZEND_ASSERT(!Z_ISREF_P(dest_entry) || Z_REFCOUNT_P(dest_entry) > 1); + SEPARATE_ZVAL(dest_entry); + dest_zval = dest_entry; + if (Z_TYPE_P(dest_zval) == IS_NULL) { convert_to_array_ex(dest_zval); add_next_index_null(dest_zval); @@ -3108,7 +3103,10 @@ PHPAPI int php_array_replace_recursive(HashTable *dest, HashTable *src) /* {{{ * php_error_docref(NULL, E_WARNING, "recursion detected"); return 0; } - SEPARATE_ZVAL(dest_zval); + + ZEND_ASSERT(!Z_ISREF_P(dest_entry) || Z_REFCOUNT_P(dest_entry) > 1); + SEPARATE_ZVAL(dest_entry); + dest_zval = dest_entry; if (ZEND_HASH_APPLY_PROTECTION(Z_ARRVAL_P(dest_zval))) { Z_ARRVAL_P(dest_zval)->u.v.nApplyCount++; diff --git b/ext/standard/php_random.h a/ext/standard/php_random.h index c4034e7..090e9d1 100644 --- b/ext/standard/php_random.h +++ a/ext/standard/php_random.h @@ -34,7 +34,13 @@ typedef struct { #define php_random_bytes_throw(b, s) php_random_bytes((b), (s), 1) #define php_random_bytes_silent(b, s) php_random_bytes((b), (s), 0) +#define php_random_int_throw(min, max, result) \ + php_random_int((min), (max), (result), 1) +#define php_random_int_silent(min, max, result) \ + php_random_int((min), (max), (result), 0) + PHPAPI int php_random_bytes(void *bytes, size_t size, zend_bool should_throw); +PHPAPI int php_random_int(zend_long min, zend_long max, zend_long *result, zend_bool should_throw); #ifdef ZTS # define RANDOM_G(v) ZEND_TSRMG(random_globals_id, php_random_globals *, v) diff --git b/ext/standard/random.c a/ext/standard/random.c index c0e1abd..1161d76 100644 --- b/ext/standard/random.c +++ a/ext/standard/random.c @@ -81,7 +81,6 @@ PHP_MSHUTDOWN_FUNCTION(random) /* }}} */ /* {{{ */ - PHPAPI int php_random_bytes(void *bytes, size_t size, zend_bool should_throw) { #if PHP_WIN32 @@ -214,37 +213,27 @@ PHP_FUNCTION(random_bytes) } /* }}} */ -/* {{{ proto int random_int(int min, int max) -Return an arbitrary pseudo-random integer */ -PHP_FUNCTION(random_int) +/* {{{ */ +PHPAPI int php_random_int(zend_long min, zend_long max, zend_long *result, zend_bool should_throw) { - zend_long min; - zend_long max; zend_ulong umax; - zend_ulong result; - - if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ll", &min, &max) == FAILURE) { - return; - } - - if (min > max) { - zend_throw_exception(zend_ce_error, "Minimum value must be less than or equal to the maximum value", 0); - return; - } + zend_ulong trial; if (min == max) { - RETURN_LONG(min); + *result = min; + return SUCCESS; } umax = max - min; - if (php_random_bytes_throw(&result, sizeof(result)) == FAILURE) { - return; + if (php_random_bytes(&trial, sizeof(trial), should_throw) == FAILURE) { + return FAILURE; } /* Special case where no modulus is required */ if (umax == ZEND_ULONG_MAX) { - RETURN_LONG((zend_long)result); + *result = (zend_long)trial; + return SUCCESS; } /* Increment the max so the range is inclusive of max */ @@ -256,14 +245,40 @@ PHP_FUNCTION(random_int) zend_ulong limit = ZEND_ULONG_MAX - (ZEND_ULONG_MAX % umax) - 1; /* Discard numbers over the limit to avoid modulo bias */ - while (result > limit) { - if (php_random_bytes_throw(&result, sizeof(result)) == FAILURE) { - return; + while (trial > limit) { + if (php_random_bytes(&trial, sizeof(trial), should_throw) == FAILURE) { + return FAILURE; } } } - RETURN_LONG((zend_long)((result % umax) + min)); + *result = (zend_long)((trial % umax) + min); + return SUCCESS; +} +/* }}} */ + +/* {{{ proto int random_int(int min, int max) +Return an arbitrary pseudo-random integer */ +PHP_FUNCTION(random_int) +{ + zend_long min; + zend_long max; + zend_long result; + + if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ll", &min, &max) == FAILURE) { + return; + } + + if (min > max) { + zend_throw_exception(zend_ce_error, "Minimum value must be less than or equal to the maximum value", 0); + return; + } + + if (php_random_int_throw(min, max, &result) == FAILURE) { + return; + } + + RETURN_LONG(result); } /* }}} */ diff --git b/ext/standard/tests/array/array_replace_merge_recursive_ref.phpt a/ext/standard/tests/array/array_replace_merge_recursive_ref.phpt new file mode 100644 index 0000000..e8d4f8e --- /dev/null +++ a/ext/standard/tests/array/array_replace_merge_recursive_ref.phpt @@ -0,0 +1,31 @@ +--TEST-- +Test array_(replace|merge)_recursive with references +--FILE-- +<?php + +$one = [1]; +$two = [42]; +$arr1 = ['k' => &$one]; +$arr2 = ['k' => &$two]; +var_dump(current($one), current($two)); +array_replace_recursive($arr1, $arr2); +var_dump(current($one), current($two)); + +$one = [1]; +$two = [42]; +$arr1 = ['k' => &$one]; +$arr2 = ['k' => &$two]; +var_dump(current($one), current($two)); +array_merge_recursive($arr1, $arr2); +var_dump(current($one), current($two)); + +?> +--EXPECT-- +int(1) +int(42) +int(1) +int(42) +int(1) +int(42) +int(1) +int(42) diff --git b/ext/standard/tests/network/dns_get_mx.phpt a/ext/standard/tests/network/dns_get_mx.phpt new file mode 100644 index 0000000..c5bf361 --- /dev/null +++ a/ext/standard/tests/network/dns_get_mx.phpt @@ -0,0 +1,29 @@ +--TEST-- +bool dns_get_mx ( string $hostname , array &$mxhosts [, array &$weight ] ); +--CREDITS-- +marcosptf - <marcosptf@yahoo.com.br> - @phpsp - sao paulo - br +--SKIPIF-- +<?php +if (getenv("SKIP_SLOW_TESTS")) + die("skip slow test"); +if (getenv("SKIP_ONLINE_TESTS")) + die("skip test requiring internet connection"); +if (substr(PHP_OS, 0, 3) == 'WIN') { + die('skip: no Windows support'); +} +?> +--FILE-- +<?php +$domains = array('yahoo.co.jp', 'yahoo.com', 'es.yahoo.com', 'fr.yahoo.com', 'it.yahoo.com'); +foreach ($domains as $domain) { + if (getmxrr($domain, $hosts, $weights)) { + echo "Hosts: " . count($hosts) . ", weights: " . count($weights) . "\n"; + } +} +?> +--EXPECTF-- +Hosts: %i, weights: %i +Hosts: %i, weights: %i +Hosts: %i, weights: %i +Hosts: %i, weights: %i +Hosts: %i, weights: %i diff --git b/ext/standard/tests/serialize/bug69793.phpt a/ext/standard/tests/serialize/bug69793.phpt index 611d516..8426c15 100644 --- b/ext/standard/tests/serialize/bug69793.phpt +++ a/ext/standard/tests/serialize/bug69793.phpt @@ -10,6 +10,8 @@ var_dump($e.""); Notice: Undefined property: Exception::$file in %s%ebug69793.php on line %d Notice: Undefined property: Exception::$previous in %s%ebug69793.php on line %d + +Notice: Undefined property: Exception::$previous in %s%ebug69793.php on line %d string(41) "Exception in :1337 Stack trace: #0 {main}" diff --git b/main/php_version.h a/main/php_version.h index 647c88f..5862919 100644 --- b/main/php_version.h +++ a/main/php_version.h @@ -3,6 +3,6 @@ #define PHP_MAJOR_VERSION 7 #define PHP_MINOR_VERSION 1 #define PHP_RELEASE_VERSION 0 -#define PHP_EXTRA_VERSION "RC4" -#define PHP_VERSION "7.1.0RC4" +#define PHP_EXTRA_VERSION "RC5" +#define PHP_VERSION "7.1.0RC5" #define PHP_VERSION_ID 70100 diff --git b/sapi/cli/php_cli_server.c a/sapi/cli/php_cli_server.c index 7ae6c6f..0853db9 100644 --- b/sapi/cli/php_cli_server.c +++ a/sapi/cli/php_cli_server.c @@ -1400,7 +1400,7 @@ static void php_cli_server_request_translate_vpath(php_cli_server_request *reque *p = '\0'; q = p; while (q > buf) { - if (!zend_stat(buf, &sb)) { + if (!php_sys_stat(buf, &sb)) { if (sb.st_mode & S_IFDIR) { const char **file = index_files; if (q[-1] != DEFAULT_SLASH) { @@ -1409,7 +1409,7 @@ static void php_cli_server_request_translate_vpath(php_cli_server_request *reque while (*file) { size_t l = strlen(*file); memmove(q, *file, l + 1); - if (!zend_stat(buf, &sb) && (sb.st_mode & S_IFREG)) { + if (!php_sys_stat(buf, &sb) && (sb.st_mode & S_IFREG)) { q += l; break; } @@ -2502,7 +2502,7 @@ int do_cli_server(int argc, char **argv) /* {{{ */ if (document_root) { zend_stat_t sb; - if (zend_stat(document_root, &sb)) { + if (php_sys_stat(document_root, &sb)) { fprintf(stderr, "Directory %s does not exist.\n", document_root); return 1; } diff --git b/sapi/fpm/fpm/fpm_request.c a/sapi/fpm/fpm/fpm_request.c index ec8601b..3f82a7d 100644 --- b/sapi/fpm/fpm/fpm_request.c +++ a/sapi/fpm/fpm/fpm_request.c @@ -262,8 +262,9 @@ void fpm_request_check_timed_out(struct fpm_child_s *child, struct timeval *now, fpm_trace_signal(child->pid); - zlog(ZLOG_WARNING, "[pool %s] child %d, script '%s' (request: \"%s %s\") executing too slow (%d.%06d sec), logging", + zlog(ZLOG_WARNING, "[pool %s] child %d, script '%s' (request: \"%s %s%s%s\") executing too slow (%d.%06d sec), logging", child->wp->config->name, (int) child->pid, purified_script_filename, proc.request_method, proc.request_uri, + (proc.query_string[0] ? "?" : ""), proc.query_string, (int) tv.tv_sec, (int) tv.tv_usec); } else @@ -272,8 +273,9 @@ void fpm_request_check_timed_out(struct fpm_child_s *child, struct timeval *now, str_purify_filename(purified_script_filename, proc.script_filename, sizeof(proc.script_filename)); fpm_pctl_kill(child->pid, FPM_PCTL_TERM); - zlog(ZLOG_WARNING, "[pool %s] child %d, script '%s' (request: \"%s %s\") execution timed out (%d.%06d sec), terminating", + zlog(ZLOG_WARNING, "[pool %s] child %d, script '%s' (request: \"%s %s%s%s\") execution timed out (%d.%06d sec), terminating", child->wp->config->name, (int) child->pid, purified_script_filename, proc.request_method, proc.request_uri, + (proc.query_string[0] ? "?" : ""), proc.query_string, (int) tv.tv_sec, (int) tv.tv_usec); } } diff --git b/tests/lang/bug73329.phpt a/tests/lang/bug73329.phpt new file mode 100644 index 0000000..938f8ba --- /dev/null +++ a/tests/lang/bug73329.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #73329 (Float)"Nano" == NAN +--FILE-- +<?php + var_dump( + (float)"nanite", + (float)"nan", + (float)"inf", + (float)"infusorian" + ); +?> +==DONE== +--EXPECT-- +float(0) +float(0) +float(0) +float(0) +==DONE==