Compare commits

..
Author SHA1 Message Date
Derick Rethans caf3c64339 Update versions for PHP 7.4.12 2020-10-27 15:01:47 +00:00
Derick Rethans cee7e5769a Update NEWS for PHP 7.4.12 2020-10-27 15:01:47 +00:00
Derick Rethans 9953bee136 Reset for 7.4.12 release 2020-10-27 15:00:27 +00:00
Derick Rethans 611ef08c01 Update NEWS for 7.4.12 2020-10-13 11:21:00 +00:00
Derick Rethans c73bab3f49 Update NEWS for PHP 7.4.12RC1 2020-10-13 11:19:36 +00:00
76 changed files with 799 additions and 2731 deletions

No files matched your search

-59
View File
@@ -1,64 +1,5 @@
PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
26 Nov 2020, PHP 7.4.13
- Core:
. Fixed bug #80280 (ADD_EXTENSION_DEP() fails for ext/standard and ext/date).
(cmb)
. Fixed bug #80258 (Windows Deduplication Enabled, randon permission errors).
(cmb)
- COM:
. Fixed bug #62474 (com_event_sink crashes on certain arguments). (cmb)
- DOM:
. Fixed bug #80268 (loadHTML() truncates at NUL bytes). (cmb)
- FFI:
. Fixed bug #79177 (FFI doesn't handle well PHP exceptions within callback).
(cmb, Dmitry, Nikita)
- IMAP:
. Fixed bug #64076 (imap_sort() does not return FALSE on failure). (cmb)
. Fixed bug #76618 (segfault on imap_reopen). (girgias)
. Fixed bug #80239 (imap_rfc822_write_address() leaks memory). (cmb)
. Fixed minor regression caused by fixing bug #80220. (cmb)
. Fixed bug #80242 (imap_mail_compose() segfaults for multipart with rfc822).
(cmb)
- MySQLi:
. Fixed bug #79375 (mysqli_store_result does not report error from lock wait
timeout). (Kamil Tekiela, Nikita)
. Fixed bug #76525 (mysqli::commit does not throw if MYSQLI_REPORT_ERROR
enabled and mysqlnd used). (Kamil Tekiela)
. Fixed bug #72413 (mysqlnd segfault (fetch_row second parameter
typemismatch)). (Kamil Tekiela)
- ODBC:
. Fixed bug #44618 (Fetching may rely on uninitialized data). (cmb)
- Opcache:
. Fixed bug #79643 (PHP with Opcache crashes when a file with specific name
is included). (twosee)
. Fixed run-time binding of preloaded dynamically declared function. (Dmitry)
- OpenSSL:
. Fixed bug #79983 (openssl_encrypt / openssl_decrypt fail with OCB mode).
(Nikita)
- PDO MySQL:
. Fixed bug #66528 (No PDOException or errorCode if database becomes
unavailable before PDO::commit). (Nikita)
. Fixed bug #65825 (PDOStatement::fetch() does not throw exception on broken
server connection). (Nikita)
- SNMP:
. Fixed bug #70461 (disable md5 code when it is not supported in net-snmp).
(Alexander Bergmann, cmb)
- Standard:
. Fixed bug #80266 (parse_url silently drops port number 0). (cmb, Nikita)
29 Oct 2020, PHP 7.4.12
- Core:
-18
View File
@@ -1,18 +0,0 @@
--TEST--
Make sure type inference upholds invariants for dead arrays
--FILE--
<?php
function test() {
foreach ($a as $v) {
$b[] = $v;
}
}
test();
?>
--EXPECTF--
Notice: Undefined variable: a in %s on line %d
Warning: Invalid argument supplied for foreach() in %s on line %d
+1 -6
View File
@@ -1050,12 +1050,7 @@ ZEND_API int do_bind_function(zval *lcname) /* {{{ */
return FAILURE;
}
function = (zend_function*)Z_PTR_P(zv);
if (UNEXPECTED(function->common.fn_flags & ZEND_ACC_PRELOADED)
&& !(CG(compiler_options) & ZEND_COMPILE_PRELOAD)) {
zv = zend_hash_add(EG(function_table), Z_STR_P(lcname), zv);
} else {
zv = zend_hash_set_bucket_key(EG(function_table), (Bucket*)zv, Z_STR_P(lcname));
}
zv = zend_hash_set_bucket_key(EG(function_table), (Bucket*)zv, Z_STR_P(lcname));
if (UNEXPECTED(!zv)) {
do_bind_function_error(Z_STR_P(lcname), &function->op_array, 0);
return FAILURE;
+1 -4
View File
@@ -498,7 +498,6 @@ static size_t tsrm_realpath_r(char *path, size_t start, size_t len, int *ll, tim
HANDLE hFind = INVALID_HANDLE_VALUE;
ALLOCA_FLAG(use_heap_large)
wchar_t *pathw = NULL;
int may_retry_reparse_point;
#define FREE_PATHW() \
do { free(pathw); } while(0);
@@ -598,7 +597,6 @@ static size_t tsrm_realpath_r(char *path, size_t start, size_t len, int *ll, tim
#ifdef ZEND_WIN32
retry_reparse_point:
may_retry_reparse_point = 0;
if (save) {
pathw = php_win32_ioutil_any_to_w(path);
if (!pathw) {
@@ -693,7 +691,6 @@ retry_reparse_tag_cloud:
CloseHandle(hLink);
if(pbuffer->ReparseTag == IO_REPARSE_TAG_SYMLINK) {
may_retry_reparse_point = 1;
reparsetarget = pbuffer->SymbolicLinkReparseBuffer.ReparseTarget;
isabsolute = pbuffer->SymbolicLinkReparseBuffer.Flags == 0;
#if VIRTUAL_CWD_DEBUG
@@ -830,7 +827,7 @@ retry_reparse_tag_cloud:
free_alloca(pbuffer, use_heap_large);
free(substitutename);
if (may_retry_reparse_point) {
{
DWORD attrs;
FREE_PATHW()
-9
View File
@@ -81,12 +81,3 @@ jobs:
php vendor/bin/phpunit
displayName: 'Test Amphp'
condition: or(succeeded(), failed())
- script: |
php7.3 /usr/bin/composer create-project symfony/symfony-demo symfony_demo --no-progress
cd symfony_demo
export USE_ZEND_ALLOC=0
export USE_TRACKED_ALLOC=1
sed -i 's/PHP_SAPI/"cli-server"/g' var/cache/dev/App_KernelDevDebugContainer.preload.php
php -d opcache.preload=var/cache/dev/App_KernelDevDebugContainer.preload.php public/index.php
displayName: 'Symfony Preloading'
condition: or(succeeded(), failed())
+5 -1
View File
@@ -978,6 +978,10 @@ else
# endif
#endif
#ifdef __cplusplus
extern "C" void exit (int);
#endif
void fnord() { int i=42;}
int main ()
{
@@ -993,7 +997,7 @@ int main ()
else
puts (dlerror ());
return (status);
exit (status);
}]
EOF
if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
-2
View File
@@ -1907,8 +1907,6 @@ AC_DEFUN([PHP_SETUP_ICU],[
if test "$PKG_CONFIG icu-io --atleast-version=60"; then
ICU_CFLAGS="$ICU_CFLAGS -DU_HIDE_OBSOLETE_UTF_OLD_H=1"
fi
ICU_CFLAGS="$ICU_CFLAGS -DU_DEFINE_FALSE_AND_TRUE=1"
])
dnl
+1 -1
View File
@@ -17,7 +17,7 @@ dnl Basic autoconf initialization, generation of config.nice.
dnl ----------------------------------------------------------------------------
AC_PREREQ([2.68])
AC_INIT([PHP],[7.4.13],[https://bugs.php.net],[php],[https://www.php.net])
AC_INIT([PHP],[7.4.12],[https://bugs.php.net],[php],[https://www.php.net])
AC_CONFIG_SRCDIR([main/php_version.h])
AC_CONFIG_AUX_DIR([build])
AC_PRESERVE_HELP_ORDER
+19 -23
View File
@@ -311,20 +311,18 @@ ITypeInfo *php_com_locate_typeinfo(char *typelibname, php_com_dotnet_object *obj
if (obj) {
if (dispname == NULL && sink) {
if (V_VT(&obj->v) == VT_DISPATCH) {
IProvideClassInfo2 *pci2;
IProvideClassInfo *pci;
IProvideClassInfo2 *pci2;
IProvideClassInfo *pci;
if (SUCCEEDED(IDispatch_QueryInterface(V_DISPATCH(&obj->v), &IID_IProvideClassInfo2, (void**)&pci2))) {
gotguid = SUCCEEDED(IProvideClassInfo2_GetGUID(pci2, GUIDKIND_DEFAULT_SOURCE_DISP_IID, &iid));
IProvideClassInfo2_Release(pci2);
}
if (!gotguid && SUCCEEDED(IDispatch_QueryInterface(V_DISPATCH(&obj->v), &IID_IProvideClassInfo, (void**)&pci))) {
/* examine the available interfaces */
/* TODO: write some code here */
php_error_docref(NULL, E_WARNING, "IProvideClassInfo: this code not yet written!");
IProvideClassInfo_Release(pci);
}
if (SUCCEEDED(IDispatch_QueryInterface(V_DISPATCH(&obj->v), &IID_IProvideClassInfo2, (void**)&pci2))) {
gotguid = SUCCEEDED(IProvideClassInfo2_GetGUID(pci2, GUIDKIND_DEFAULT_SOURCE_DISP_IID, &iid));
IProvideClassInfo2_Release(pci2);
}
if (!gotguid && SUCCEEDED(IDispatch_QueryInterface(V_DISPATCH(&obj->v), &IID_IProvideClassInfo, (void**)&pci))) {
/* examine the available interfaces */
/* TODO: write some code here */
php_error_docref(NULL, E_WARNING, "IProvideClassInfo: this code not yet written!");
IProvideClassInfo_Release(pci);
}
} else if (dispname == NULL) {
if (obj->typeinfo) {
@@ -341,17 +339,15 @@ ITypeInfo *php_com_locate_typeinfo(char *typelibname, php_com_dotnet_object *obj
/* get the library from the object; the rest will be dealt with later */
ITypeInfo_GetContainingTypeLib(obj->typeinfo, &typelib, &idx);
} else if (typelibname == NULL) {
if (V_VT(&obj->v) == VT_DISPATCH) {
IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &typeinfo);
if (dispname) {
unsigned int idx;
/* get the library from the object; the rest will be dealt with later */
ITypeInfo_GetContainingTypeLib(typeinfo, &typelib, &idx);
IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &typeinfo);
if (dispname) {
unsigned int idx;
/* get the library from the object; the rest will be dealt with later */
ITypeInfo_GetContainingTypeLib(typeinfo, &typelib, &idx);
if (typelib) {
ITypeInfo_Release(typeinfo);
typeinfo = NULL;
}
if (typelib) {
ITypeInfo_Release(typeinfo);
typeinfo = NULL;
}
}
}
-14
View File
@@ -1,14 +0,0 @@
--TEST--
Bug #62474 (com_event_sink crashes on certain arguments)
--SKIPIF--
<?php
if (!extension_loaded('com_dotnet')) die('skip com_dotnet extension not available');
?>
--FILE--
<?php
var_dump(com_event_sink(new variant, function() {}, array()));
var_dump(com_event_sink(new variant, new variant, 'a'));
?>
--EXPECT--
bool(false)
bool(false)
-1
View File
@@ -1,7 +1,6 @@
// vim:ft=javascript
EXTENSION("date", "php_date.c", false, "/Iext/date/lib /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /DHAVE_TIMELIB_CONFIG_H=1");
PHP_DATE = "yes";
ADD_SOURCES("ext/date/lib", "astro.c timelib.c dow.c parse_date.c parse_tz.c tm2unixtime.c unixtime2tm.c parse_iso_intervals.c interval.c", "date");
ADD_FLAG('CFLAGS_DATE', "/wd4244");
+401 -402
View File
@@ -270,338 +270,338 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[594] = {
{ "Asia/Dushanbe" , FOR_V2(0x0467F3, 0x01B60F) },
{ "Asia/Famagusta" , FOR_V2(0x046A4E, 0x01B70C) },
{ "Asia/Gaza" , FOR_V2(0x047255, 0x01BA12) },
{ "Asia/Harbin" , FOR_V2(0x047B79, 0x01BD77) },
{ "Asia/Hebron" , FOR_V2(0x047DB6, 0x01BE5E) },
{ "Asia/Ho_Chi_Minh" , FOR_V2(0x0486F5, 0x01C1CC) },
{ "Asia/Hong_Kong" , FOR_V2(0x048860, 0x01C26F) },
{ "Asia/Hovd" , FOR_V2(0x048D1F, 0x01C447) },
{ "Asia/Irkutsk" , FOR_V2(0x0490D1, 0x01C5D1) },
{ "Asia/Istanbul" , FOR_V2(0x0495D2, 0x01C7DA) },
{ "Asia/Jakarta" , FOR_V2(0x049D79, 0x01CAC7) },
{ "Asia/Jayapura" , FOR_V2(0x049EF5, 0x01CB7E) },
{ "Asia/Jerusalem" , FOR_V2(0x04A014, 0x01CC25) },
{ "Asia/Kabul" , FOR_V2(0x04A910, 0x01CF75) },
{ "Asia/Kamchatka" , FOR_V2(0x04A9EC, 0x01CFDC) },
{ "Asia/Karachi" , FOR_V2(0x04AE98, 0x01D1BA) },
{ "Asia/Kashgar" , FOR_V2(0x04B01F, 0x01D26A) },
{ "Asia/Kathmandu" , FOR_V2(0x04B0D0, 0x01D2C0) },
{ "Asia/Katmandu" , FOR_V2(0x04B1B0, 0x01D329) },
{ "Asia/Khandyga" , FOR_V2(0x04B290, 0x01D392) },
{ "Asia/Kolkata" , FOR_V2(0x04B7B1, 0x01D5AB) },
{ "Asia/Krasnoyarsk" , FOR_V2(0x04B8DA, 0x01D62B) },
{ "Asia/Kuala_Lumpur" , FOR_V2(0x04BDB6, 0x01D823) },
{ "Asia/Kuching" , FOR_V2(0x04BF55, 0x01D8EC) },
{ "Asia/Kuwait" , FOR_V2(0x04C152, 0x01D9CD) },
{ "Asia/Macao" , FOR_V2(0x04C203, 0x01DA23) },
{ "Asia/Macau" , FOR_V2(0x04C6DA, 0x01DC03) },
{ "Asia/Magadan" , FOR_V2(0x04CBB1, 0x01DDE3) },
{ "Asia/Makassar" , FOR_V2(0x04D093, 0x01DFD7) },
{ "Asia/Manila" , FOR_V2(0x04D1E6, 0x01E09F) },
{ "Asia/Muscat" , FOR_V2(0x04D33A, 0x01E132) },
{ "Asia/Nicosia" , FOR_V2(0x04D3EB, 0x01E188) },
{ "Asia/Novokuznetsk" , FOR_V2(0x04DBDC, 0x01E483) },
{ "Asia/Novosibirsk" , FOR_V2(0x04E086, 0x01E660) },
{ "Asia/Omsk" , FOR_V2(0x04E56B, 0x01E856) },
{ "Asia/Oral" , FOR_V2(0x04EA3B, 0x01EA42) },
{ "Asia/Phnom_Penh" , FOR_V2(0x04EE43, 0x01EBE7) },
{ "Asia/Pontianak" , FOR_V2(0x04EF16, 0x01EC4C) },
{ "Asia/Pyongyang" , FOR_V2(0x04F099, 0x01ED0B) },
{ "Asia/Qatar" , FOR_V2(0x04F192, 0x01ED80) },
{ "Asia/Qostanay" , FOR_V2(0x04F265, 0x01EDE5) },
{ "Asia/Qyzylorda" , FOR_V2(0x04F67E, 0x01EF98) },
{ "Asia/Rangoon" , FOR_V2(0x04FAA8, 0x01F153) },
{ "Asia/Riyadh" , FOR_V2(0x04FBC0, 0x01F1D4) },
{ "Asia/Saigon" , FOR_V2(0x04FC71, 0x01F22A) },
{ "Asia/Sakhalin" , FOR_V2(0x04FDDC, 0x01F2CD) },
{ "Asia/Samarkand" , FOR_V2(0x0502B2, 0x01F4BF) },
{ "Asia/Seoul" , FOR_V2(0x050510, 0x01F5C6) },
{ "Asia/Shanghai" , FOR_V2(0x050785, 0x01F6C9) },
{ "Asia/Singapore" , FOR_V2(0x0509CE, 0x01F7BC) },
{ "Asia/Srednekolymsk" , FOR_V2(0x050B59, 0x01F871) },
{ "Asia/Taipei" , FOR_V2(0x05103F, 0x01FA72) },
{ "Asia/Tashkent" , FOR_V2(0x051344, 0x01FBA5) },
{ "Asia/Tbilisi" , FOR_V2(0x0515B0, 0x01FCB3) },
{ "Asia/Tehran" , FOR_V2(0x0519C7, 0x01FE56) },
{ "Asia/Tel_Aviv" , FOR_V2(0x0523E9, 0x0200C8) },
{ "Asia/Thimbu" , FOR_V2(0x052CE5, 0x020418) },
{ "Asia/Thimphu" , FOR_V2(0x052DBC, 0x02047F) },
{ "Asia/Tokyo" , FOR_V2(0x052E93, 0x0204E6) },
{ "Asia/Tomsk" , FOR_V2(0x052FD4, 0x020577) },
{ "Asia/Ujung_Pandang" , FOR_V2(0x0534B3, 0x020767) },
{ "Asia/Ulaanbaatar" , FOR_V2(0x0535BD, 0x0207E6) },
{ "Asia/Ulan_Bator" , FOR_V2(0x053959, 0x02095A) },
{ "Asia/Urumqi" , FOR_V2(0x053CE0, 0x020AB9) },
{ "Asia/Ust-Nera" , FOR_V2(0x053D9E, 0x020B1C) },
{ "Asia/Vientiane" , FOR_V2(0x0542A2, 0x020D23) },
{ "Asia/Vladivostok" , FOR_V2(0x054375, 0x020D88) },
{ "Asia/Yakutsk" , FOR_V2(0x05484C, 0x020F7A) },
{ "Asia/Yangon" , FOR_V2(0x054D22, 0x02116C) },
{ "Asia/Yekaterinburg" , FOR_V2(0x054E3A, 0x0211ED) },
{ "Asia/Yerevan" , FOR_V2(0x05532F, 0x0213EA) },
{ "Atlantic/Azores" , FOR_V2(0x0557BA, 0x0215B3) },
{ "Atlantic/Bermuda" , FOR_V2(0x056568, 0x021AC7) },
{ "Atlantic/Canary" , FOR_V2(0x056D2E, 0x021DA2) },
{ "Atlantic/Cape_Verde" , FOR_V2(0x0574B1, 0x022077) },
{ "Atlantic/Faeroe" , FOR_V2(0x0575CB, 0x0220FC) },
{ "Atlantic/Faroe" , FOR_V2(0x057CEE, 0x0223A0) },
{ "Atlantic/Jan_Mayen" , FOR_V2(0x058411, 0x022644) },
{ "Atlantic/Madeira" , FOR_V2(0x058CD1, 0x022982) },
{ "Atlantic/Reykjavik" , FOR_V2(0x059A7F, 0x022E9F) },
{ "Atlantic/South_Georgia" , FOR_V2(0x059F15, 0x023065) },
{ "Atlantic/St_Helena" , FOR_V2(0x059FC5, 0x0230BB) },
{ "Atlantic/Stanley" , FOR_V2(0x05A065, 0x02310C) },
{ "Australia/ACT" , FOR_V2(0x05A52F, 0x0232E5) },
{ "Australia/Adelaide" , FOR_V2(0x05ADD7, 0x023614) },
{ "Australia/Brisbane" , FOR_V2(0x05B6A0, 0x023952) },
{ "Australia/Broken_Hill" , FOR_V2(0x05B874, 0x023A27) },
{ "Australia/Canberra" , FOR_V2(0x05C15F, 0x023D72) },
{ "Australia/Currie" , FOR_V2(0x05CA07, 0x0240A1) },
{ "Australia/Darwin" , FOR_V2(0x05D2C5, 0x0243E6) },
{ "Australia/Eucla" , FOR_V2(0x05D413, 0x02447D) },
{ "Australia/Hobart" , FOR_V2(0x05D61C, 0x024565) },
{ "Australia/LHI" , FOR_V2(0x05DF49, 0x0248D1) },
{ "Australia/Lindeman" , FOR_V2(0x05E699, 0x024B84) },
{ "Australia/Lord_Howe" , FOR_V2(0x05E8AD, 0x024C75) },
{ "Australia/Melbourne" , FOR_V2(0x05F00D, 0x024F38) },
{ "Australia/North" , FOR_V2(0x05F8BD, 0x02526F) },
{ "Australia/NSW" , FOR_V2(0x05F9F9, 0x0252F4) },
{ "Australia/Perth" , FOR_V2(0x0602A1, 0x025623) },
{ "Australia/Queensland" , FOR_V2(0x060497, 0x025709) },
{ "Australia/South" , FOR_V2(0x060654, 0x0257C7) },
{ "Australia/Sydney" , FOR_V2(0x060F0E, 0x025AF6) },
{ "Australia/Tasmania" , FOR_V2(0x0617D2, 0x025E41) },
{ "Australia/Victoria" , FOR_V2(0x0620EA, 0x026198) },
{ "Australia/West" , FOR_V2(0x062992, 0x0264C7) },
{ "Australia/Yancowinna" , FOR_V2(0x062B6A, 0x02658F) },
{ "Brazil/Acre" , FOR_V2(0x063439, 0x0268BE) },
{ "Brazil/DeNoronha" , FOR_V2(0x0636B9, 0x0269C0) },
{ "Brazil/East" , FOR_V2(0x063991, 0x026ADE) },
{ "Brazil/West" , FOR_V2(0x063F41, 0x026D00) },
{ "Canada/Atlantic" , FOR_V2(0x0641A9, 0x026DF6) },
{ "Canada/Central" , FOR_V2(0x064F15, 0x0272DE) },
{ "Canada/Eastern" , FOR_V2(0x065A55, 0x027704) },
{ "Canada/Mountain" , FOR_V2(0x066807, 0x027C05) },
{ "Canada/Newfoundland" , FOR_V2(0x06712F, 0x027F67) },
{ "Canada/Pacific" , FOR_V2(0x067F82, 0x0284AB) },
{ "Canada/Saskatchewan" , FOR_V2(0x068ADA, 0x0288D5) },
{ "Canada/Yukon" , FOR_V2(0x068EBA, 0x028A5E) },
{ "CET" , FOR_V2(0x069514, 0x028CD4) },
{ "Chile/Continental" , FOR_V2(0x069D4E, 0x028FD9) },
{ "Chile/EasterIsland" , FOR_V2(0x06A73B, 0x029385) },
{ "CST6CDT" , FOR_V2(0x06B000, 0x0296C5) },
{ "Cuba" , FOR_V2(0x06B912, 0x029A1E) },
{ "EET" , FOR_V2(0x06C28E, 0x029D9C) },
{ "Egypt" , FOR_V2(0x06CA0E, 0x02A05F) },
{ "Eire" , FOR_V2(0x06D1BD, 0x02A33B) },
{ "EST" , FOR_V2(0x06DF6D, 0x02A843) },
{ "EST5EDT" , FOR_V2(0x06DFEB, 0x02A885) },
{ "Etc/GMT" , FOR_V2(0x06E8FD, 0x02ABDE) },
{ "Etc/GMT+0" , FOR_V2(0x06E97B, 0x02AC20) },
{ "Etc/GMT+1" , FOR_V2(0x06E9F9, 0x02AC62) },
{ "Etc/GMT+10" , FOR_V2(0x06EA79, 0x02ACA4) },
{ "Etc/GMT+11" , FOR_V2(0x06EAFA, 0x02ACE6) },
{ "Etc/GMT+12" , FOR_V2(0x06EB7B, 0x02AD28) },
{ "Etc/GMT+2" , FOR_V2(0x06EBFC, 0x02AD6A) },
{ "Etc/GMT+3" , FOR_V2(0x06EC7C, 0x02ADAC) },
{ "Etc/GMT+4" , FOR_V2(0x06ECFC, 0x02ADEE) },
{ "Etc/GMT+5" , FOR_V2(0x06ED7C, 0x02AE30) },
{ "Etc/GMT+6" , FOR_V2(0x06EDFC, 0x02AE72) },
{ "Etc/GMT+7" , FOR_V2(0x06EE7C, 0x02AEB4) },
{ "Etc/GMT+8" , FOR_V2(0x06EEFC, 0x02AEF6) },
{ "Etc/GMT+9" , FOR_V2(0x06EF7C, 0x02AF38) },
{ "Etc/GMT-0" , FOR_V2(0x06EFFC, 0x02AF7A) },
{ "Etc/GMT-1" , FOR_V2(0x06F07A, 0x02AFBC) },
{ "Etc/GMT-10" , FOR_V2(0x06F0FB, 0x02AFFE) },
{ "Etc/GMT-11" , FOR_V2(0x06F17D, 0x02B040) },
{ "Etc/GMT-12" , FOR_V2(0x06F1FF, 0x02B082) },
{ "Etc/GMT-13" , FOR_V2(0x06F281, 0x02B0C4) },
{ "Etc/GMT-14" , FOR_V2(0x06F303, 0x02B106) },
{ "Etc/GMT-2" , FOR_V2(0x06F385, 0x02B148) },
{ "Etc/GMT-3" , FOR_V2(0x06F406, 0x02B18A) },
{ "Etc/GMT-4" , FOR_V2(0x06F487, 0x02B1CC) },
{ "Etc/GMT-5" , FOR_V2(0x06F508, 0x02B20E) },
{ "Etc/GMT-6" , FOR_V2(0x06F589, 0x02B250) },
{ "Etc/GMT-7" , FOR_V2(0x06F60A, 0x02B292) },
{ "Etc/GMT-8" , FOR_V2(0x06F68B, 0x02B2D4) },
{ "Etc/GMT-9" , FOR_V2(0x06F70C, 0x02B316) },
{ "Etc/GMT0" , FOR_V2(0x06F78D, 0x02B358) },
{ "Etc/Greenwich" , FOR_V2(0x06F80B, 0x02B39A) },
{ "Etc/UCT" , FOR_V2(0x06F889, 0x02B3DC) },
{ "Etc/Universal" , FOR_V2(0x06F907, 0x02B41E) },
{ "Etc/UTC" , FOR_V2(0x06F985, 0x02B460) },
{ "Etc/Zulu" , FOR_V2(0x06FA03, 0x02B4A2) },
{ "Europe/Amsterdam" , FOR_V2(0x06FA81, 0x02B4E4) },
{ "Europe/Andorra" , FOR_V2(0x0705EB, 0x02B929) },
{ "Europe/Astrakhan" , FOR_V2(0x070CC5, 0x02BBB6) },
{ "Europe/Athens" , FOR_V2(0x071170, 0x02BD94) },
{ "Europe/Belfast" , FOR_V2(0x071A52, 0x02C0E8) },
{ "Europe/Belgrade" , FOR_V2(0x07289E, 0x02C623) },
{ "Europe/Berlin" , FOR_V2(0x07302A, 0x02C8F3) },
{ "Europe/Bratislava" , FOR_V2(0x073944, 0x02CC64) },
{ "Europe/Brussels" , FOR_V2(0x07424D, 0x02CFB8) },
{ "Europe/Bucharest" , FOR_V2(0x074DCE, 0x02D3F6) },
{ "Europe/Budapest" , FOR_V2(0x075662, 0x02D727) },
{ "Europe/Busingen" , FOR_V2(0x075FAE, 0x02DA97) },
{ "Europe/Chisinau" , FOR_V2(0x076737, 0x02DD5F) },
{ "Europe/Copenhagen" , FOR_V2(0x077099, 0x02E0EE) },
{ "Europe/Dublin" , FOR_V2(0x0778FE, 0x02E404) },
{ "Europe/Gibraltar" , FOR_V2(0x0786AE, 0x02E90C) },
{ "Europe/Guernsey" , FOR_V2(0x0792A6, 0x02ED74) },
{ "Europe/Helsinki" , FOR_V2(0x07A0F2, 0x02F2AF) },
{ "Europe/Isle_of_Man" , FOR_V2(0x07A86A, 0x02F576) },
{ "Europe/Istanbul" , FOR_V2(0x07B6B6, 0x02FAB1) },
{ "Europe/Jersey" , FOR_V2(0x07BE5D, 0x02FD9E) },
{ "Europe/Kaliningrad" , FOR_V2(0x07CCA9, 0x0302D9) },
{ "Europe/Kiev" , FOR_V2(0x07D29E, 0x030540) },
{ "Europe/Kirov" , FOR_V2(0x07DAE6, 0x030873) },
{ "Europe/Lisbon" , FOR_V2(0x07DF81, 0x030A49) },
{ "Europe/Ljubljana" , FOR_V2(0x07ED2D, 0x030F65) },
{ "Europe/London" , FOR_V2(0x07F4B9, 0x031235) },
{ "Europe/Luxembourg" , FOR_V2(0x080305, 0x031770) },
{ "Europe/Madrid" , FOR_V2(0x080E93, 0x031BC1) },
{ "Europe/Malta" , FOR_V2(0x0818E5, 0x031FA6) },
{ "Europe/Mariehamn" , FOR_V2(0x08232D, 0x032370) },
{ "Europe/Minsk" , FOR_V2(0x082AA5, 0x032637) },
{ "Europe/Monaco" , FOR_V2(0x082FDA, 0x032849) },
{ "Europe/Moscow" , FOR_V2(0x083B66, 0x032C95) },
{ "Europe/Nicosia" , FOR_V2(0x084185, 0x032F15) },
{ "Europe/Oslo" , FOR_V2(0x084963, 0x0331FD) },
{ "Europe/Paris" , FOR_V2(0x085223, 0x03353B) },
{ "Europe/Podgorica" , FOR_V2(0x085DC1, 0x033992) },
{ "Europe/Prague" , FOR_V2(0x08654D, 0x033C62) },
{ "Europe/Riga" , FOR_V2(0x086E56, 0x033FB6) },
{ "Europe/Rome" , FOR_V2(0x0876F8, 0x034302) },
{ "Europe/Samara" , FOR_V2(0x088155, 0x0346CC) },
{ "Europe/San_Marino" , FOR_V2(0x088639, 0x0348CA) },
{ "Europe/Sarajevo" , FOR_V2(0x089096, 0x034C94) },
{ "Europe/Saratov" , FOR_V2(0x089822, 0x034F64) },
{ "Europe/Simferopol" , FOR_V2(0x089CDD, 0x035149) },
{ "Europe/Skopje" , FOR_V2(0x08A29C, 0x035398) },
{ "Europe/Sofia" , FOR_V2(0x08AA28, 0x035668) },
{ "Europe/Stockholm" , FOR_V2(0x08B251, 0x03596F) },
{ "Europe/Tallinn" , FOR_V2(0x08B9D2, 0x035C2F) },
{ "Europe/Tirane" , FOR_V2(0x08C242, 0x035F68) },
{ "Europe/Tiraspol" , FOR_V2(0x08CA72, 0x03626E) },
{ "Europe/Ulyanovsk" , FOR_V2(0x08D3D4, 0x0365FD) },
{ "Europe/Uzhgorod" , FOR_V2(0x08D8E5, 0x03680A) },
{ "Europe/Vaduz" , FOR_V2(0x08E101, 0x036B26) },
{ "Europe/Vatican" , FOR_V2(0x08E882, 0x036DE6) },
{ "Europe/Vienna" , FOR_V2(0x08F2DF, 0x0371B0) },
{ "Europe/Vilnius" , FOR_V2(0x08FB83, 0x0374E4) },
{ "Europe/Volgograd" , FOR_V2(0x090401, 0x03782A) },
{ "Europe/Warsaw" , FOR_V2(0x0908AC, 0x037A08) },
{ "Europe/Zagreb" , FOR_V2(0x091316, 0x037DEB) },
{ "Europe/Zaporozhye" , FOR_V2(0x091AA2, 0x0380BB) },
{ "Europe/Zurich" , FOR_V2(0x092303, 0x0383FC) },
{ "Factory" , FOR_V2(0x092A84, 0x0386BC) },
{ "GB" , FOR_V2(0x092B04, 0x0386FE) },
{ "GB-Eire" , FOR_V2(0x093950, 0x038C39) },
{ "GMT" , FOR_V2(0x09479C, 0x039174) },
{ "GMT+0" , FOR_V2(0x09481A, 0x0391B6) },
{ "GMT-0" , FOR_V2(0x094898, 0x0391F8) },
{ "GMT0" , FOR_V2(0x094916, 0x03923A) },
{ "Greenwich" , FOR_V2(0x094994, 0x03927C) },
{ "Hongkong" , FOR_V2(0x094A12, 0x0392BE) },
{ "HST" , FOR_V2(0x094ED1, 0x039496) },
{ "Iceland" , FOR_V2(0x094F50, 0x0394D8) },
{ "Indian/Antananarivo" , FOR_V2(0x0953E6, 0x03969E) },
{ "Indian/Chagos" , FOR_V2(0x0954ED, 0x03971C) },
{ "Indian/Christmas" , FOR_V2(0x0955C0, 0x039781) },
{ "Indian/Cocos" , FOR_V2(0x095671, 0x0397D7) },
{ "Indian/Comoro" , FOR_V2(0x09572B, 0x03982F) },
{ "Indian/Kerguelen" , FOR_V2(0x095832, 0x0398AD) },
{ "Indian/Mahe" , FOR_V2(0x0958E3, 0x039903) },
{ "Indian/Maldives" , FOR_V2(0x095994, 0x039959) },
{ "Indian/Mauritius" , FOR_V2(0x095A67, 0x0399BE) },
{ "Indian/Mayotte" , FOR_V2(0x095B64, 0x039A32) },
{ "Indian/Reunion" , FOR_V2(0x095C6B, 0x039AB0) },
{ "Iran" , FOR_V2(0x095D1C, 0x039B06) },
{ "Israel" , FOR_V2(0x09673E, 0x039D78) },
{ "Jamaica" , FOR_V2(0x09703A, 0x03A0C8) },
{ "Japan" , FOR_V2(0x097228, 0x03A196) },
{ "Kwajalein" , FOR_V2(0x097369, 0x03A227) },
{ "Libya" , FOR_V2(0x0974B1, 0x03A2BE) },
{ "MET" , FOR_V2(0x09772E, 0x03A3BF) },
{ "Mexico/BajaNorte" , FOR_V2(0x097F68, 0x03A6C4) },
{ "Mexico/BajaSur" , FOR_V2(0x09889A, 0x03AA2D) },
{ "Mexico/General" , FOR_V2(0x098E9C, 0x03AC6E) },
{ "MST" , FOR_V2(0x0994D8, 0x03AEC2) },
{ "MST7MDT" , FOR_V2(0x099556, 0x03AF04) },
{ "Navajo" , FOR_V2(0x099E68, 0x03B25D) },
{ "NZ" , FOR_V2(0x09A800, 0x03B5E7) },
{ "NZ-CHAT" , FOR_V2(0x09B191, 0x03B96F) },
{ "Pacific/Apia" , FOR_V2(0x09B9B1, 0x03BC6A) },
{ "Pacific/Auckland" , FOR_V2(0x09BE06, 0x03BE12) },
{ "Pacific/Bougainville" , FOR_V2(0x09C7AF, 0x03C1B2) },
{ "Pacific/Chatham" , FOR_V2(0x09C8D3, 0x03C237) },
{ "Pacific/Chuuk" , FOR_V2(0x09D102, 0x03C541) },
{ "Pacific/Easter" , FOR_V2(0x09D22A, 0x03C5CA) },
{ "Pacific/Efate" , FOR_V2(0x09DAFC, 0x03C917) },
{ "Pacific/Enderbury" , FOR_V2(0x09DCDA, 0x03C9DB) },
{ "Pacific/Fakaofo" , FOR_V2(0x09DDDF, 0x03CA5E) },
{ "Pacific/Fiji" , FOR_V2(0x09DEB3, 0x03CAC3) },
{ "Pacific/Funafuti" , FOR_V2(0x09E2F4, 0x03CC59) },
{ "Pacific/Galapagos" , FOR_V2(0x09E3A6, 0x03CCAF) },
{ "Pacific/Gambier" , FOR_V2(0x09E4B1, 0x03CD35) },
{ "Pacific/Guadalcanal" , FOR_V2(0x09E570, 0x03CD9A) },
{ "Pacific/Guam" , FOR_V2(0x09E622, 0x03CDF0) },
{ "Pacific/Honolulu" , FOR_V2(0x09E81C, 0x03CEBF) },
{ "Pacific/Johnston" , FOR_V2(0x09E977, 0x03CF64) },
{ "Pacific/Kiritimati" , FOR_V2(0x09EACC, 0x03D003) },
{ "Pacific/Kosrae" , FOR_V2(0x09EBD2, 0x03D085) },
{ "Pacific/Kwajalein" , FOR_V2(0x09ED43, 0x03D128) },
{ "Pacific/Majuro" , FOR_V2(0x09EE94, 0x03D1C8) },
{ "Pacific/Marquesas" , FOR_V2(0x09EFF3, 0x03D277) },
{ "Pacific/Midway" , FOR_V2(0x09F0BD, 0x03D2E0) },
{ "Pacific/Nauru" , FOR_V2(0x09F186, 0x03D34A) },
{ "Pacific/Niue" , FOR_V2(0x09F28E, 0x03D3C5) },
{ "Pacific/Norfolk" , FOR_V2(0x09F38B, 0x03D43D) },
{ "Pacific/Noumea" , FOR_V2(0x09F707, 0x03D59B) },
{ "Pacific/Pago_Pago" , FOR_V2(0x09F843, 0x03D62A) },
{ "Pacific/Palau" , FOR_V2(0x09F8FE, 0x03D686) },
{ "Pacific/Pitcairn" , FOR_V2(0x09F9BE, 0x03D6DC) },
{ "Pacific/Pohnpei" , FOR_V2(0x09FA94, 0x03D743) },
{ "Pacific/Ponape" , FOR_V2(0x09FBDD, 0x03D7DA) },
{ "Pacific/Port_Moresby" , FOR_V2(0x09FD18, 0x03D863) },
{ "Pacific/Rarotonga" , FOR_V2(0x09FDFB, 0x03D8D6) },
{ "Pacific/Saipan" , FOR_V2(0x0A0048, 0x03D9C6) },
{ "Pacific/Samoa" , FOR_V2(0x0A0242, 0x03DA95) },
{ "Pacific/Tahiti" , FOR_V2(0x0A02FD, 0x03DAF1) },
{ "Pacific/Tarawa" , FOR_V2(0x0A03BD, 0x03DB56) },
{ "Pacific/Tongatapu" , FOR_V2(0x0A047E, 0x03DBBB) },
{ "Pacific/Truk" , FOR_V2(0x0A05FE, 0x03DC66) },
{ "Pacific/Wake" , FOR_V2(0x0A0717, 0x03DCE0) },
{ "Pacific/Wallis" , FOR_V2(0x0A07D4, 0x03DD41) },
{ "Pacific/Yap" , FOR_V2(0x0A0886, 0x03DD97) },
{ "Poland" , FOR_V2(0x0A099F, 0x03DE11) },
{ "Portugal" , FOR_V2(0x0A1409, 0x03E1F4) },
{ "PRC" , FOR_V2(0x0A21A2, 0x03E6FD) },
{ "PST8PDT" , FOR_V2(0x0A23DF, 0x03E7E4) },
{ "ROC" , FOR_V2(0x0A2CF1, 0x03EB3D) },
{ "ROK" , FOR_V2(0x0A2FF6, 0x03EC70) },
{ "Singapore" , FOR_V2(0x0A326B, 0x03ED73) },
{ "Turkey" , FOR_V2(0x0A33F6, 0x03EE28) },
{ "UCT" , FOR_V2(0x0A3B9D, 0x03F115) },
{ "Universal" , FOR_V2(0x0A3C1B, 0x03F157) },
{ "US/Alaska" , FOR_V2(0x0A3C99, 0x03F199) },
{ "US/Aleutian" , FOR_V2(0x0A45E8, 0x03F511) },
{ "US/Arizona" , FOR_V2(0x0A4F28, 0x03F882) },
{ "US/Central" , FOR_V2(0x0A507C, 0x03F919) },
{ "US/East-Indiana" , FOR_V2(0x0A5E80, 0x03FE3D) },
{ "US/Eastern" , FOR_V2(0x0A650E, 0x0400B8) },
{ "US/Hawaii" , FOR_V2(0x0A72EA, 0x0405C8) },
{ "US/Indiana-Starke" , FOR_V2(0x0A743F, 0x040667) },
{ "US/Michigan" , FOR_V2(0x0A7DC7, 0x0409F1) },
{ "US/Mountain" , FOR_V2(0x0A8689, 0x040D32) },
{ "US/Pacific" , FOR_V2(0x0A9021, 0x0410BC) },
{ "US/Samoa" , FOR_V2(0x0A9B41, 0x0414D2) },
{ "UTC" , FOR_V2(0x0A9BFC, 0x04152E) },
{ "W-SU" , FOR_V2(0x0A9C7A, 0x041570) },
{ "WET" , FOR_V2(0x0AA285, 0x0417DC) },
{ "Zulu" , FOR_V2(0x0AAA02, 0x041A9F) },
{ "Asia/Harbin" , FOR_V2(0x047B77, 0x01BD77) },
{ "Asia/Hebron" , FOR_V2(0x047DB4, 0x01BE5E) },
{ "Asia/Ho_Chi_Minh" , FOR_V2(0x0486F1, 0x01C1CC) },
{ "Asia/Hong_Kong" , FOR_V2(0x04885C, 0x01C26F) },
{ "Asia/Hovd" , FOR_V2(0x048D1B, 0x01C447) },
{ "Asia/Irkutsk" , FOR_V2(0x0490CD, 0x01C5D1) },
{ "Asia/Istanbul" , FOR_V2(0x0495CE, 0x01C7DA) },
{ "Asia/Jakarta" , FOR_V2(0x049D75, 0x01CAC7) },
{ "Asia/Jayapura" , FOR_V2(0x049EF1, 0x01CB7E) },
{ "Asia/Jerusalem" , FOR_V2(0x04A010, 0x01CC25) },
{ "Asia/Kabul" , FOR_V2(0x04A90C, 0x01CF75) },
{ "Asia/Kamchatka" , FOR_V2(0x04A9E8, 0x01CFDC) },
{ "Asia/Karachi" , FOR_V2(0x04AE94, 0x01D1BA) },
{ "Asia/Kashgar" , FOR_V2(0x04B01B, 0x01D26A) },
{ "Asia/Kathmandu" , FOR_V2(0x04B0CC, 0x01D2C0) },
{ "Asia/Katmandu" , FOR_V2(0x04B1AC, 0x01D329) },
{ "Asia/Khandyga" , FOR_V2(0x04B28C, 0x01D392) },
{ "Asia/Kolkata" , FOR_V2(0x04B7AD, 0x01D5AB) },
{ "Asia/Krasnoyarsk" , FOR_V2(0x04B8D6, 0x01D62B) },
{ "Asia/Kuala_Lumpur" , FOR_V2(0x04BDB2, 0x01D823) },
{ "Asia/Kuching" , FOR_V2(0x04BF51, 0x01D8EC) },
{ "Asia/Kuwait" , FOR_V2(0x04C14E, 0x01D9CD) },
{ "Asia/Macao" , FOR_V2(0x04C1FF, 0x01DA23) },
{ "Asia/Macau" , FOR_V2(0x04C6D6, 0x01DC03) },
{ "Asia/Magadan" , FOR_V2(0x04CBAD, 0x01DDE3) },
{ "Asia/Makassar" , FOR_V2(0x04D08F, 0x01DFD7) },
{ "Asia/Manila" , FOR_V2(0x04D1E2, 0x01E09F) },
{ "Asia/Muscat" , FOR_V2(0x04D336, 0x01E132) },
{ "Asia/Nicosia" , FOR_V2(0x04D3E7, 0x01E188) },
{ "Asia/Novokuznetsk" , FOR_V2(0x04DBD8, 0x01E483) },
{ "Asia/Novosibirsk" , FOR_V2(0x04E082, 0x01E660) },
{ "Asia/Omsk" , FOR_V2(0x04E567, 0x01E856) },
{ "Asia/Oral" , FOR_V2(0x04EA37, 0x01EA42) },
{ "Asia/Phnom_Penh" , FOR_V2(0x04EE3F, 0x01EBE7) },
{ "Asia/Pontianak" , FOR_V2(0x04EF12, 0x01EC4C) },
{ "Asia/Pyongyang" , FOR_V2(0x04F095, 0x01ED0B) },
{ "Asia/Qatar" , FOR_V2(0x04F18E, 0x01ED80) },
{ "Asia/Qostanay" , FOR_V2(0x04F261, 0x01EDE5) },
{ "Asia/Qyzylorda" , FOR_V2(0x04F67A, 0x01EF98) },
{ "Asia/Rangoon" , FOR_V2(0x04FAA4, 0x01F153) },
{ "Asia/Riyadh" , FOR_V2(0x04FBBC, 0x01F1D4) },
{ "Asia/Saigon" , FOR_V2(0x04FC6D, 0x01F22A) },
{ "Asia/Sakhalin" , FOR_V2(0x04FDD8, 0x01F2CD) },
{ "Asia/Samarkand" , FOR_V2(0x0502AE, 0x01F4BF) },
{ "Asia/Seoul" , FOR_V2(0x05050C, 0x01F5C6) },
{ "Asia/Shanghai" , FOR_V2(0x050781, 0x01F6C9) },
{ "Asia/Singapore" , FOR_V2(0x0509CA, 0x01F7BC) },
{ "Asia/Srednekolymsk" , FOR_V2(0x050B55, 0x01F871) },
{ "Asia/Taipei" , FOR_V2(0x05103B, 0x01FA72) },
{ "Asia/Tashkent" , FOR_V2(0x051340, 0x01FBA5) },
{ "Asia/Tbilisi" , FOR_V2(0x0515AC, 0x01FCB3) },
{ "Asia/Tehran" , FOR_V2(0x0519C3, 0x01FE56) },
{ "Asia/Tel_Aviv" , FOR_V2(0x0523E5, 0x0200C8) },
{ "Asia/Thimbu" , FOR_V2(0x052CE1, 0x020418) },
{ "Asia/Thimphu" , FOR_V2(0x052DB8, 0x02047F) },
{ "Asia/Tokyo" , FOR_V2(0x052E8F, 0x0204E6) },
{ "Asia/Tomsk" , FOR_V2(0x052FD0, 0x020577) },
{ "Asia/Ujung_Pandang" , FOR_V2(0x0534AF, 0x020767) },
{ "Asia/Ulaanbaatar" , FOR_V2(0x0535B9, 0x0207E6) },
{ "Asia/Ulan_Bator" , FOR_V2(0x053955, 0x02095A) },
{ "Asia/Urumqi" , FOR_V2(0x053CDC, 0x020AB9) },
{ "Asia/Ust-Nera" , FOR_V2(0x053D9A, 0x020B1C) },
{ "Asia/Vientiane" , FOR_V2(0x05429E, 0x020D23) },
{ "Asia/Vladivostok" , FOR_V2(0x054371, 0x020D88) },
{ "Asia/Yakutsk" , FOR_V2(0x054848, 0x020F7A) },
{ "Asia/Yangon" , FOR_V2(0x054D1E, 0x02116C) },
{ "Asia/Yekaterinburg" , FOR_V2(0x054E36, 0x0211ED) },
{ "Asia/Yerevan" , FOR_V2(0x05532B, 0x0213EA) },
{ "Atlantic/Azores" , FOR_V2(0x0557B6, 0x0215B3) },
{ "Atlantic/Bermuda" , FOR_V2(0x056564, 0x021AC7) },
{ "Atlantic/Canary" , FOR_V2(0x056D2A, 0x021DA2) },
{ "Atlantic/Cape_Verde" , FOR_V2(0x0574AD, 0x022077) },
{ "Atlantic/Faeroe" , FOR_V2(0x0575C7, 0x0220FC) },
{ "Atlantic/Faroe" , FOR_V2(0x057CEA, 0x0223A0) },
{ "Atlantic/Jan_Mayen" , FOR_V2(0x05840D, 0x022644) },
{ "Atlantic/Madeira" , FOR_V2(0x058CCD, 0x022982) },
{ "Atlantic/Reykjavik" , FOR_V2(0x059A7B, 0x022E9F) },
{ "Atlantic/South_Georgia" , FOR_V2(0x059F11, 0x023065) },
{ "Atlantic/St_Helena" , FOR_V2(0x059FC1, 0x0230BB) },
{ "Atlantic/Stanley" , FOR_V2(0x05A061, 0x02310C) },
{ "Australia/ACT" , FOR_V2(0x05A52B, 0x0232E5) },
{ "Australia/Adelaide" , FOR_V2(0x05ADD3, 0x023614) },
{ "Australia/Brisbane" , FOR_V2(0x05B69C, 0x023952) },
{ "Australia/Broken_Hill" , FOR_V2(0x05B870, 0x023A27) },
{ "Australia/Canberra" , FOR_V2(0x05C15B, 0x023D72) },
{ "Australia/Currie" , FOR_V2(0x05CA03, 0x0240A1) },
{ "Australia/Darwin" , FOR_V2(0x05D2C1, 0x0243E6) },
{ "Australia/Eucla" , FOR_V2(0x05D40F, 0x02447D) },
{ "Australia/Hobart" , FOR_V2(0x05D618, 0x024565) },
{ "Australia/LHI" , FOR_V2(0x05DF45, 0x0248D1) },
{ "Australia/Lindeman" , FOR_V2(0x05E695, 0x024B84) },
{ "Australia/Lord_Howe" , FOR_V2(0x05E8A9, 0x024C75) },
{ "Australia/Melbourne" , FOR_V2(0x05F009, 0x024F38) },
{ "Australia/North" , FOR_V2(0x05F8B9, 0x02526F) },
{ "Australia/NSW" , FOR_V2(0x05F9F5, 0x0252F4) },
{ "Australia/Perth" , FOR_V2(0x06029D, 0x025623) },
{ "Australia/Queensland" , FOR_V2(0x060493, 0x025709) },
{ "Australia/South" , FOR_V2(0x060650, 0x0257C7) },
{ "Australia/Sydney" , FOR_V2(0x060F0A, 0x025AF6) },
{ "Australia/Tasmania" , FOR_V2(0x0617CE, 0x025E41) },
{ "Australia/Victoria" , FOR_V2(0x0620E6, 0x026198) },
{ "Australia/West" , FOR_V2(0x06298E, 0x0264C7) },
{ "Australia/Yancowinna" , FOR_V2(0x062B66, 0x02658F) },
{ "Brazil/Acre" , FOR_V2(0x063435, 0x0268BE) },
{ "Brazil/DeNoronha" , FOR_V2(0x0636B5, 0x0269C0) },
{ "Brazil/East" , FOR_V2(0x06398D, 0x026ADE) },
{ "Brazil/West" , FOR_V2(0x063F3D, 0x026D00) },
{ "Canada/Atlantic" , FOR_V2(0x0641A5, 0x026DF6) },
{ "Canada/Central" , FOR_V2(0x064F11, 0x0272DE) },
{ "Canada/Eastern" , FOR_V2(0x065A51, 0x027704) },
{ "Canada/Mountain" , FOR_V2(0x066803, 0x027C05) },
{ "Canada/Newfoundland" , FOR_V2(0x06712B, 0x027F67) },
{ "Canada/Pacific" , FOR_V2(0x067F7E, 0x0284AB) },
{ "Canada/Saskatchewan" , FOR_V2(0x068AD6, 0x0288D5) },
{ "Canada/Yukon" , FOR_V2(0x068EB6, 0x028A5E) },
{ "CET" , FOR_V2(0x069510, 0x028CD4) },
{ "Chile/Continental" , FOR_V2(0x069D4A, 0x028FD9) },
{ "Chile/EasterIsland" , FOR_V2(0x06A737, 0x029385) },
{ "CST6CDT" , FOR_V2(0x06AFFC, 0x0296C5) },
{ "Cuba" , FOR_V2(0x06B90E, 0x029A1E) },
{ "EET" , FOR_V2(0x06C28A, 0x029D9C) },
{ "Egypt" , FOR_V2(0x06CA0A, 0x02A05F) },
{ "Eire" , FOR_V2(0x06D1B9, 0x02A33B) },
{ "EST" , FOR_V2(0x06DF69, 0x02A843) },
{ "EST5EDT" , FOR_V2(0x06DFE7, 0x02A885) },
{ "Etc/GMT" , FOR_V2(0x06E8F9, 0x02ABDE) },
{ "Etc/GMT+0" , FOR_V2(0x06E977, 0x02AC20) },
{ "Etc/GMT+1" , FOR_V2(0x06E9F5, 0x02AC62) },
{ "Etc/GMT+10" , FOR_V2(0x06EA75, 0x02ACA4) },
{ "Etc/GMT+11" , FOR_V2(0x06EAF6, 0x02ACE6) },
{ "Etc/GMT+12" , FOR_V2(0x06EB77, 0x02AD28) },
{ "Etc/GMT+2" , FOR_V2(0x06EBF8, 0x02AD6A) },
{ "Etc/GMT+3" , FOR_V2(0x06EC78, 0x02ADAC) },
{ "Etc/GMT+4" , FOR_V2(0x06ECF8, 0x02ADEE) },
{ "Etc/GMT+5" , FOR_V2(0x06ED78, 0x02AE30) },
{ "Etc/GMT+6" , FOR_V2(0x06EDF8, 0x02AE72) },
{ "Etc/GMT+7" , FOR_V2(0x06EE78, 0x02AEB4) },
{ "Etc/GMT+8" , FOR_V2(0x06EEF8, 0x02AEF6) },
{ "Etc/GMT+9" , FOR_V2(0x06EF78, 0x02AF38) },
{ "Etc/GMT-0" , FOR_V2(0x06EFF8, 0x02AF7A) },
{ "Etc/GMT-1" , FOR_V2(0x06F076, 0x02AFBC) },
{ "Etc/GMT-10" , FOR_V2(0x06F0F7, 0x02AFFE) },
{ "Etc/GMT-11" , FOR_V2(0x06F179, 0x02B040) },
{ "Etc/GMT-12" , FOR_V2(0x06F1FB, 0x02B082) },
{ "Etc/GMT-13" , FOR_V2(0x06F27D, 0x02B0C4) },
{ "Etc/GMT-14" , FOR_V2(0x06F2FF, 0x02B106) },
{ "Etc/GMT-2" , FOR_V2(0x06F381, 0x02B148) },
{ "Etc/GMT-3" , FOR_V2(0x06F402, 0x02B18A) },
{ "Etc/GMT-4" , FOR_V2(0x06F483, 0x02B1CC) },
{ "Etc/GMT-5" , FOR_V2(0x06F504, 0x02B20E) },
{ "Etc/GMT-6" , FOR_V2(0x06F585, 0x02B250) },
{ "Etc/GMT-7" , FOR_V2(0x06F606, 0x02B292) },
{ "Etc/GMT-8" , FOR_V2(0x06F687, 0x02B2D4) },
{ "Etc/GMT-9" , FOR_V2(0x06F708, 0x02B316) },
{ "Etc/GMT0" , FOR_V2(0x06F789, 0x02B358) },
{ "Etc/Greenwich" , FOR_V2(0x06F807, 0x02B39A) },
{ "Etc/UCT" , FOR_V2(0x06F885, 0x02B3DC) },
{ "Etc/Universal" , FOR_V2(0x06F903, 0x02B41E) },
{ "Etc/UTC" , FOR_V2(0x06F981, 0x02B460) },
{ "Etc/Zulu" , FOR_V2(0x06F9FF, 0x02B4A2) },
{ "Europe/Amsterdam" , FOR_V2(0x06FA7D, 0x02B4E4) },
{ "Europe/Andorra" , FOR_V2(0x0705E7, 0x02B929) },
{ "Europe/Astrakhan" , FOR_V2(0x070CC1, 0x02BBB6) },
{ "Europe/Athens" , FOR_V2(0x07116C, 0x02BD94) },
{ "Europe/Belfast" , FOR_V2(0x071A4E, 0x02C0E8) },
{ "Europe/Belgrade" , FOR_V2(0x07289A, 0x02C623) },
{ "Europe/Berlin" , FOR_V2(0x073026, 0x02C8F3) },
{ "Europe/Bratislava" , FOR_V2(0x073940, 0x02CC64) },
{ "Europe/Brussels" , FOR_V2(0x074249, 0x02CFB8) },
{ "Europe/Bucharest" , FOR_V2(0x074DCA, 0x02D3F6) },
{ "Europe/Budapest" , FOR_V2(0x07565E, 0x02D727) },
{ "Europe/Busingen" , FOR_V2(0x075FAA, 0x02DA97) },
{ "Europe/Chisinau" , FOR_V2(0x076733, 0x02DD5F) },
{ "Europe/Copenhagen" , FOR_V2(0x077095, 0x02E0EE) },
{ "Europe/Dublin" , FOR_V2(0x0778FA, 0x02E404) },
{ "Europe/Gibraltar" , FOR_V2(0x0786AA, 0x02E90C) },
{ "Europe/Guernsey" , FOR_V2(0x0792A2, 0x02ED74) },
{ "Europe/Helsinki" , FOR_V2(0x07A0EE, 0x02F2AF) },
{ "Europe/Isle_of_Man" , FOR_V2(0x07A866, 0x02F576) },
{ "Europe/Istanbul" , FOR_V2(0x07B6B2, 0x02FAB1) },
{ "Europe/Jersey" , FOR_V2(0x07BE59, 0x02FD9E) },
{ "Europe/Kaliningrad" , FOR_V2(0x07CCA5, 0x0302D9) },
{ "Europe/Kiev" , FOR_V2(0x07D29A, 0x030540) },
{ "Europe/Kirov" , FOR_V2(0x07DAE2, 0x030873) },
{ "Europe/Lisbon" , FOR_V2(0x07DF7D, 0x030A49) },
{ "Europe/Ljubljana" , FOR_V2(0x07ED29, 0x030F65) },
{ "Europe/London" , FOR_V2(0x07F4B5, 0x031235) },
{ "Europe/Luxembourg" , FOR_V2(0x080301, 0x031770) },
{ "Europe/Madrid" , FOR_V2(0x080E8F, 0x031BC1) },
{ "Europe/Malta" , FOR_V2(0x0818E1, 0x031FA6) },
{ "Europe/Mariehamn" , FOR_V2(0x082329, 0x032370) },
{ "Europe/Minsk" , FOR_V2(0x082AA1, 0x032637) },
{ "Europe/Monaco" , FOR_V2(0x082FD6, 0x032849) },
{ "Europe/Moscow" , FOR_V2(0x083B62, 0x032C95) },
{ "Europe/Nicosia" , FOR_V2(0x084181, 0x032F15) },
{ "Europe/Oslo" , FOR_V2(0x08495F, 0x0331FD) },
{ "Europe/Paris" , FOR_V2(0x08521F, 0x03353B) },
{ "Europe/Podgorica" , FOR_V2(0x085DBD, 0x033992) },
{ "Europe/Prague" , FOR_V2(0x086549, 0x033C62) },
{ "Europe/Riga" , FOR_V2(0x086E52, 0x033FB6) },
{ "Europe/Rome" , FOR_V2(0x0876F4, 0x034302) },
{ "Europe/Samara" , FOR_V2(0x088151, 0x0346CC) },
{ "Europe/San_Marino" , FOR_V2(0x088635, 0x0348CA) },
{ "Europe/Sarajevo" , FOR_V2(0x089092, 0x034C94) },
{ "Europe/Saratov" , FOR_V2(0x08981E, 0x034F64) },
{ "Europe/Simferopol" , FOR_V2(0x089CD9, 0x035149) },
{ "Europe/Skopje" , FOR_V2(0x08A298, 0x035398) },
{ "Europe/Sofia" , FOR_V2(0x08AA24, 0x035668) },
{ "Europe/Stockholm" , FOR_V2(0x08B24D, 0x03596F) },
{ "Europe/Tallinn" , FOR_V2(0x08B9CE, 0x035C2F) },
{ "Europe/Tirane" , FOR_V2(0x08C23E, 0x035F68) },
{ "Europe/Tiraspol" , FOR_V2(0x08CA6E, 0x03626E) },
{ "Europe/Ulyanovsk" , FOR_V2(0x08D3D0, 0x0365FD) },
{ "Europe/Uzhgorod" , FOR_V2(0x08D8E1, 0x03680A) },
{ "Europe/Vaduz" , FOR_V2(0x08E0FD, 0x036B26) },
{ "Europe/Vatican" , FOR_V2(0x08E87E, 0x036DE6) },
{ "Europe/Vienna" , FOR_V2(0x08F2DB, 0x0371B0) },
{ "Europe/Vilnius" , FOR_V2(0x08FB7F, 0x0374E4) },
{ "Europe/Volgograd" , FOR_V2(0x0903FD, 0x03782A) },
{ "Europe/Warsaw" , FOR_V2(0x0908A8, 0x037A08) },
{ "Europe/Zagreb" , FOR_V2(0x091312, 0x037DEB) },
{ "Europe/Zaporozhye" , FOR_V2(0x091A9E, 0x0380BB) },
{ "Europe/Zurich" , FOR_V2(0x0922FF, 0x0383FC) },
{ "Factory" , FOR_V2(0x092A80, 0x0386BC) },
{ "GB" , FOR_V2(0x092B00, 0x0386FE) },
{ "GB-Eire" , FOR_V2(0x09394C, 0x038C39) },
{ "GMT" , FOR_V2(0x094798, 0x039174) },
{ "GMT+0" , FOR_V2(0x094816, 0x0391B6) },
{ "GMT-0" , FOR_V2(0x094894, 0x0391F8) },
{ "GMT0" , FOR_V2(0x094912, 0x03923A) },
{ "Greenwich" , FOR_V2(0x094990, 0x03927C) },
{ "Hongkong" , FOR_V2(0x094A0E, 0x0392BE) },
{ "HST" , FOR_V2(0x094ECD, 0x039496) },
{ "Iceland" , FOR_V2(0x094F4C, 0x0394D8) },
{ "Indian/Antananarivo" , FOR_V2(0x0953E2, 0x03969E) },
{ "Indian/Chagos" , FOR_V2(0x0954E9, 0x03971C) },
{ "Indian/Christmas" , FOR_V2(0x0955BC, 0x039781) },
{ "Indian/Cocos" , FOR_V2(0x09566D, 0x0397D7) },
{ "Indian/Comoro" , FOR_V2(0x095727, 0x03982F) },
{ "Indian/Kerguelen" , FOR_V2(0x09582E, 0x0398AD) },
{ "Indian/Mahe" , FOR_V2(0x0958DF, 0x039903) },
{ "Indian/Maldives" , FOR_V2(0x095990, 0x039959) },
{ "Indian/Mauritius" , FOR_V2(0x095A63, 0x0399BE) },
{ "Indian/Mayotte" , FOR_V2(0x095B60, 0x039A32) },
{ "Indian/Reunion" , FOR_V2(0x095C67, 0x039AB0) },
{ "Iran" , FOR_V2(0x095D18, 0x039B06) },
{ "Israel" , FOR_V2(0x09673A, 0x039D78) },
{ "Jamaica" , FOR_V2(0x097036, 0x03A0C8) },
{ "Japan" , FOR_V2(0x097224, 0x03A196) },
{ "Kwajalein" , FOR_V2(0x097365, 0x03A227) },
{ "Libya" , FOR_V2(0x0974AD, 0x03A2BE) },
{ "MET" , FOR_V2(0x09772A, 0x03A3BF) },
{ "Mexico/BajaNorte" , FOR_V2(0x097F64, 0x03A6C4) },
{ "Mexico/BajaSur" , FOR_V2(0x098896, 0x03AA2D) },
{ "Mexico/General" , FOR_V2(0x098E98, 0x03AC6E) },
{ "MST" , FOR_V2(0x0994D4, 0x03AEC2) },
{ "MST7MDT" , FOR_V2(0x099552, 0x03AF04) },
{ "Navajo" , FOR_V2(0x099E64, 0x03B25D) },
{ "NZ" , FOR_V2(0x09A7FC, 0x03B5E7) },
{ "NZ-CHAT" , FOR_V2(0x09B18D, 0x03B96F) },
{ "Pacific/Apia" , FOR_V2(0x09B9AD, 0x03BC6A) },
{ "Pacific/Auckland" , FOR_V2(0x09BE02, 0x03BE12) },
{ "Pacific/Bougainville" , FOR_V2(0x09C7AB, 0x03C1B2) },
{ "Pacific/Chatham" , FOR_V2(0x09C8CF, 0x03C237) },
{ "Pacific/Chuuk" , FOR_V2(0x09D0FE, 0x03C541) },
{ "Pacific/Easter" , FOR_V2(0x09D226, 0x03C5CA) },
{ "Pacific/Efate" , FOR_V2(0x09DAF8, 0x03C917) },
{ "Pacific/Enderbury" , FOR_V2(0x09DCD6, 0x03C9DB) },
{ "Pacific/Fakaofo" , FOR_V2(0x09DDDB, 0x03CA5E) },
{ "Pacific/Fiji" , FOR_V2(0x09DEAF, 0x03CAC3) },
{ "Pacific/Funafuti" , FOR_V2(0x09E2F0, 0x03CC59) },
{ "Pacific/Galapagos" , FOR_V2(0x09E3A2, 0x03CCAF) },
{ "Pacific/Gambier" , FOR_V2(0x09E4AD, 0x03CD35) },
{ "Pacific/Guadalcanal" , FOR_V2(0x09E56C, 0x03CD9A) },
{ "Pacific/Guam" , FOR_V2(0x09E61E, 0x03CDF0) },
{ "Pacific/Honolulu" , FOR_V2(0x09E818, 0x03CEBF) },
{ "Pacific/Johnston" , FOR_V2(0x09E973, 0x03CF64) },
{ "Pacific/Kiritimati" , FOR_V2(0x09EAC8, 0x03D003) },
{ "Pacific/Kosrae" , FOR_V2(0x09EBCE, 0x03D085) },
{ "Pacific/Kwajalein" , FOR_V2(0x09ED3F, 0x03D128) },
{ "Pacific/Majuro" , FOR_V2(0x09EE90, 0x03D1C8) },
{ "Pacific/Marquesas" , FOR_V2(0x09EFEF, 0x03D277) },
{ "Pacific/Midway" , FOR_V2(0x09F0B9, 0x03D2E0) },
{ "Pacific/Nauru" , FOR_V2(0x09F182, 0x03D34A) },
{ "Pacific/Niue" , FOR_V2(0x09F28A, 0x03D3C5) },
{ "Pacific/Norfolk" , FOR_V2(0x09F387, 0x03D43D) },
{ "Pacific/Noumea" , FOR_V2(0x09F703, 0x03D59B) },
{ "Pacific/Pago_Pago" , FOR_V2(0x09F83F, 0x03D62A) },
{ "Pacific/Palau" , FOR_V2(0x09F8FA, 0x03D686) },
{ "Pacific/Pitcairn" , FOR_V2(0x09F9BA, 0x03D6DC) },
{ "Pacific/Pohnpei" , FOR_V2(0x09FA90, 0x03D743) },
{ "Pacific/Ponape" , FOR_V2(0x09FBD9, 0x03D7DA) },
{ "Pacific/Port_Moresby" , FOR_V2(0x09FD14, 0x03D863) },
{ "Pacific/Rarotonga" , FOR_V2(0x09FDF7, 0x03D8D6) },
{ "Pacific/Saipan" , FOR_V2(0x0A0044, 0x03D9C6) },
{ "Pacific/Samoa" , FOR_V2(0x0A023E, 0x03DA95) },
{ "Pacific/Tahiti" , FOR_V2(0x0A02F9, 0x03DAF1) },
{ "Pacific/Tarawa" , FOR_V2(0x0A03B9, 0x03DB56) },
{ "Pacific/Tongatapu" , FOR_V2(0x0A047A, 0x03DBBB) },
{ "Pacific/Truk" , FOR_V2(0x0A05FA, 0x03DC66) },
{ "Pacific/Wake" , FOR_V2(0x0A0713, 0x03DCE0) },
{ "Pacific/Wallis" , FOR_V2(0x0A07D0, 0x03DD41) },
{ "Pacific/Yap" , FOR_V2(0x0A0882, 0x03DD97) },
{ "Poland" , FOR_V2(0x0A099B, 0x03DE11) },
{ "Portugal" , FOR_V2(0x0A1405, 0x03E1F4) },
{ "PRC" , FOR_V2(0x0A219E, 0x03E6FD) },
{ "PST8PDT" , FOR_V2(0x0A23DB, 0x03E7E4) },
{ "ROC" , FOR_V2(0x0A2CED, 0x03EB3D) },
{ "ROK" , FOR_V2(0x0A2FF2, 0x03EC70) },
{ "Singapore" , FOR_V2(0x0A3267, 0x03ED73) },
{ "Turkey" , FOR_V2(0x0A33F2, 0x03EE28) },
{ "UCT" , FOR_V2(0x0A3B99, 0x03F115) },
{ "Universal" , FOR_V2(0x0A3C17, 0x03F157) },
{ "US/Alaska" , FOR_V2(0x0A3C95, 0x03F199) },
{ "US/Aleutian" , FOR_V2(0x0A45E4, 0x03F511) },
{ "US/Arizona" , FOR_V2(0x0A4F24, 0x03F882) },
{ "US/Central" , FOR_V2(0x0A5078, 0x03F919) },
{ "US/East-Indiana" , FOR_V2(0x0A5E7C, 0x03FE3D) },
{ "US/Eastern" , FOR_V2(0x0A650A, 0x0400B8) },
{ "US/Hawaii" , FOR_V2(0x0A72E6, 0x0405C8) },
{ "US/Indiana-Starke" , FOR_V2(0x0A743B, 0x040667) },
{ "US/Michigan" , FOR_V2(0x0A7DC3, 0x0409F1) },
{ "US/Mountain" , FOR_V2(0x0A8685, 0x040D32) },
{ "US/Pacific" , FOR_V2(0x0A901D, 0x0410BC) },
{ "US/Samoa" , FOR_V2(0x0A9B3D, 0x0414D2) },
{ "UTC" , FOR_V2(0x0A9BF8, 0x04152E) },
{ "W-SU" , FOR_V2(0x0A9C76, 0x041570) },
{ "WET" , FOR_V2(0x0AA281, 0x0417DC) },
{ "Zulu" , FOR_V2(0x0AA9FE, 0x041A9F) },
};
#ifdef TIMELIB_SUPPORTS_V2DATA
const unsigned char timelib_timezone_db_data_builtin[699008] = {
const unsigned char timelib_timezone_db_data_builtin[699004] = {
#else
const unsigned char timelib_timezone_db_data_builtin[269025] = {
#endif
@@ -20241,18 +20241,18 @@ const unsigned char timelib_timezone_db_data_builtin[269025] = {
0x48, 0xB7, 0x11, 0xD0, 0x49, 0xCB, 0xFA, 0xE0, 0x4A, 0xA0, 0x3C, 0x60, 0x4B, 0xAD, 0x2E, 0x9C,
0x4C, 0x61, 0xBD, 0xD0, 0x4D, 0x94, 0xF9, 0x9C, 0x4E, 0x35, 0xC2, 0x50, 0x4F, 0x74, 0xDB, 0x60,
0x50, 0x5B, 0x91, 0xE0, 0x51, 0x54, 0xBD, 0x60, 0x52, 0x44, 0xA0, 0x50, 0x53, 0x34, 0x9F, 0x60,
0x54, 0x49, 0x6C, 0x50, 0x55, 0x15, 0xD2, 0xE0, 0x56, 0x29, 0x5C, 0x60, 0x56, 0xF5, 0xC2, 0xF0,
0x54, 0x49, 0x6C, 0x50, 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, 0xB5, 0x86, 0xF0,
0x5B, 0xD3, 0x8E, 0x60, 0x5C, 0x9D, 0x43, 0xE0, 0x5D, 0xB3, 0x62, 0x50, 0x5E, 0x7E, 0x77, 0x60,
0x5F, 0x93, 0x52, 0x60, 0x60, 0x5E, 0x59, 0x60, 0x61, 0x7C, 0x6E, 0xE0, 0x62, 0x3E, 0x3B, 0x60,
0x63, 0x5C, 0x50, 0xE0, 0x64, 0x1E, 0x1D, 0x60, 0x65, 0x3C, 0x32, 0xE0, 0x66, 0x07, 0x39, 0xE0,
0x67, 0x1C, 0x14, 0xE0, 0x67, 0xE7, 0x1B, 0xE0, 0x68, 0xFB, 0xF6, 0xE0, 0x69, 0xC6, 0xFD, 0xE0,
0x6A, 0xDB, 0xD8, 0xE0, 0x6B, 0xA6, 0xDF, 0xE0, 0x6C, 0xC4, 0xF5, 0x60, 0x6D, 0x86, 0xC1, 0xE0,
0x6E, 0xA4, 0xD7, 0x60, 0x6F, 0x66, 0xA3, 0xE0, 0x70, 0x84, 0xB9, 0x60, 0x71, 0x4F, 0xC0, 0x60,
0x72, 0x64, 0x9B, 0x60, 0x73, 0x2F, 0xA2, 0x60, 0x74, 0x44, 0x7D, 0x60, 0x75, 0x0F, 0x84, 0x60,
0x76, 0x2D, 0x99, 0xE0, 0x76, 0xEF, 0x66, 0x60, 0x78, 0x0D, 0x7B, 0xE0, 0x78, 0xCF, 0x48, 0x60,
0x79, 0xED, 0x5D, 0xE0, 0x7A, 0xAF, 0x2A, 0x60, 0x7B, 0xCD, 0x3F, 0xE0, 0x7C, 0x98, 0x46, 0xE0,
0x7D, 0xAD, 0x21, 0xE0, 0x7E, 0x78, 0x28, 0xE0, 0x7F, 0x8D, 0x03, 0xE0, 0x02, 0x01, 0x02, 0x01,
0x5B, 0xD3, 0x8E, 0x60, 0x5C, 0x9D, 0x43, 0xE0, 0x5D, 0xB3, 0x70, 0x60, 0x5E, 0x7D, 0x25, 0xE0,
0x5F, 0x9C, 0x8C, 0xE0, 0x60, 0x5D, 0x07, 0xE0, 0x61, 0x7C, 0x6E, 0xE0, 0x62, 0x3C, 0xE9, 0xE0,
0x63, 0x5C, 0x50, 0xE0, 0x64, 0x26, 0x06, 0x60, 0x65, 0x3C, 0x32, 0xE0, 0x66, 0x05, 0xE8, 0x60,
0x67, 0x1C, 0x14, 0xE0, 0x67, 0xE5, 0xCA, 0x60, 0x68, 0xFB, 0xF6, 0xE0, 0x69, 0xC5, 0xAC, 0x60,
0x6A, 0xE5, 0x13, 0x60, 0x6B, 0xA5, 0x8E, 0x60, 0x6C, 0xC4, 0xF5, 0x60, 0x6D, 0x8E, 0xAA, 0xE0,
0x6E, 0xA4, 0xD7, 0x60, 0x6F, 0x6E, 0x8C, 0xE0, 0x70, 0x84, 0xB9, 0x60, 0x71, 0x4E, 0x6E, 0xE0,
0x72, 0x64, 0x9B, 0x60, 0x73, 0x2E, 0x50, 0xE0, 0x74, 0x44, 0x7D, 0x60, 0x75, 0x0E, 0x32, 0xE0,
0x76, 0x2D, 0x99, 0xE0, 0x76, 0xEE, 0x14, 0xE0, 0x78, 0x0D, 0x7B, 0xE0, 0x78, 0xD7, 0x31, 0x60,
0x79, 0xED, 0x5D, 0xE0, 0x7A, 0xB7, 0x13, 0x60, 0x7B, 0xCD, 0x3F, 0xE0, 0x7C, 0x96, 0xF5, 0x60,
0x7D, 0xAD, 0x21, 0xE0, 0x7E, 0x76, 0xD7, 0x60, 0x7F, 0x96, 0x3E, 0x60, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03,
0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
@@ -20267,7 +20267,7 @@ const unsigned char timelib_timezone_db_data_builtin[269025] = {
0x1C, 0x20, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54,
0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
#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, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xFF, 0xFF, 0xFF,
0x7D, 0xBD, 0x4A, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x59, 0xB2, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF,
@@ -20321,29 +20321,29 @@ const unsigned char timelib_timezone_db_data_builtin[269025] = {
0x4F, 0x74, 0xDB, 0x60, 0x00, 0x00, 0x00, 0x00, 0x50, 0x5B, 0x91, 0xE0, 0x00, 0x00, 0x00, 0x00,
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, 0x5C, 0x60, 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, 0x13, 0xCA, 0x60, 0x00, 0x00, 0x00, 0x00,
0x58, 0xD5, 0xA4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF3, 0xAC, 0x60, 0x00, 0x00, 0x00, 0x00,
0x5A, 0xB5, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD3, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00,
0x5C, 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x62, 0x50, 0x00, 0x00, 0x00, 0x00,
0x5E, 0x7E, 0x77, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x93, 0x52, 0x60, 0x00, 0x00, 0x00, 0x00,
0x60, 0x5E, 0x59, 0x60, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7C, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x62, 0x3E, 0x3B, 0x60, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5C, 0x50, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x64, 0x1E, 0x1D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3C, 0x32, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x66, 0x07, 0x39, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1C, 0x14, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x67, 0xE7, 0x1B, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFB, 0xF6, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x69, 0xC6, 0xFD, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDB, 0xD8, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x6B, 0xA6, 0xDF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC4, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00,
0x6D, 0x86, 0xC1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA4, 0xD7, 0x60, 0x00, 0x00, 0x00, 0x00,
0x6F, 0x66, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x70, 0x84, 0xB9, 0x60, 0x00, 0x00, 0x00, 0x00,
0x71, 0x4F, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x72, 0x64, 0x9B, 0x60, 0x00, 0x00, 0x00, 0x00,
0x73, 0x2F, 0xA2, 0x60, 0x00, 0x00, 0x00, 0x00, 0x74, 0x44, 0x7D, 0x60, 0x00, 0x00, 0x00, 0x00,
0x75, 0x0F, 0x84, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2D, 0x99, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x76, 0xEF, 0x66, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0D, 0x7B, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x78, 0xCF, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x79, 0xED, 0x5D, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x7A, 0xAF, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCD, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x7C, 0x98, 0x46, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAD, 0x21, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x7E, 0x78, 0x28, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8D, 0x03, 0xE0, 0x02, 0x01, 0x02, 0x01,
0x5C, 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x70, 0x60, 0x00, 0x00, 0x00, 0x00,
0x5E, 0x7D, 0x25, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x9C, 0x8C, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x60, 0x5D, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7C, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x62, 0x3C, 0xE9, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5C, 0x50, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x64, 0x26, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3C, 0x32, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x66, 0x05, 0xE8, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1C, 0x14, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x67, 0xE5, 0xCA, 0x60, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFB, 0xF6, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x69, 0xC5, 0xAC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xE5, 0x13, 0x60, 0x00, 0x00, 0x00, 0x00,
0x6B, 0xA5, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC4, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00,
0x6D, 0x8E, 0xAA, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA4, 0xD7, 0x60, 0x00, 0x00, 0x00, 0x00,
0x6F, 0x6E, 0x8C, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x70, 0x84, 0xB9, 0x60, 0x00, 0x00, 0x00, 0x00,
0x71, 0x4E, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x72, 0x64, 0x9B, 0x60, 0x00, 0x00, 0x00, 0x00,
0x73, 0x2E, 0x50, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x74, 0x44, 0x7D, 0x60, 0x00, 0x00, 0x00, 0x00,
0x75, 0x0E, 0x32, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2D, 0x99, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x76, 0xEE, 0x14, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0D, 0x7B, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x78, 0xD7, 0x31, 0x60, 0x00, 0x00, 0x00, 0x00, 0x79, 0xED, 0x5D, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x7A, 0xB7, 0x13, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCD, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x7C, 0x96, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAD, 0x21, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x7E, 0x76, 0xD7, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x96, 0x3E, 0x60, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03,
0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
@@ -20357,8 +20357,8 @@ const unsigned char timelib_timezone_db_data_builtin[269025] = {
0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11, 0x00, 0x00,
0x1C, 0x20, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54,
0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0A,
0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34,
0x2F, 0x34, 0x38, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x34, 0x39, 0x0A,
0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x35,
0x2F, 0x30, 0x2C, 0x4D, 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,
@@ -20434,18 +20434,18 @@ const unsigned char timelib_timezone_db_data_builtin[269025] = {
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, 0x5C, 0x60, 0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x13, 0xCA, 0x60, 0x58, 0xD5, 0xA4, 0xF0,
0x56, 0x29, 0x4E, 0x50, 0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x13, 0xCA, 0x60, 0x58, 0xD5, 0xA4, 0xF0,
0x59, 0xF3, 0xAC, 0x60, 0x5A, 0xB5, 0x86, 0xF0, 0x5B, 0xD3, 0x8E, 0x60, 0x5C, 0x9D, 0x43, 0xE0,
0x5D, 0xB3, 0x62, 0x50, 0x5E, 0x7E, 0x77, 0x60, 0x5F, 0x93, 0x52, 0x60, 0x60, 0x5E, 0x59, 0x60,
0x61, 0x7C, 0x6E, 0xE0, 0x62, 0x3E, 0x3B, 0x60, 0x63, 0x5C, 0x50, 0xE0, 0x64, 0x1E, 0x1D, 0x60,
0x65, 0x3C, 0x32, 0xE0, 0x66, 0x07, 0x39, 0xE0, 0x67, 0x1C, 0x14, 0xE0, 0x67, 0xE7, 0x1B, 0xE0,
0x68, 0xFB, 0xF6, 0xE0, 0x69, 0xC6, 0xFD, 0xE0, 0x6A, 0xDB, 0xD8, 0xE0, 0x6B, 0xA6, 0xDF, 0xE0,
0x6C, 0xC4, 0xF5, 0x60, 0x6D, 0x86, 0xC1, 0xE0, 0x6E, 0xA4, 0xD7, 0x60, 0x6F, 0x66, 0xA3, 0xE0,
0x70, 0x84, 0xB9, 0x60, 0x71, 0x4F, 0xC0, 0x60, 0x72, 0x64, 0x9B, 0x60, 0x73, 0x2F, 0xA2, 0x60,
0x74, 0x44, 0x7D, 0x60, 0x75, 0x0F, 0x84, 0x60, 0x76, 0x2D, 0x99, 0xE0, 0x76, 0xEF, 0x66, 0x60,
0x78, 0x0D, 0x7B, 0xE0, 0x78, 0xCF, 0x48, 0x60, 0x79, 0xED, 0x5D, 0xE0, 0x7A, 0xAF, 0x2A, 0x60,
0x7B, 0xCD, 0x3F, 0xE0, 0x7C, 0x98, 0x46, 0xE0, 0x7D, 0xAD, 0x21, 0xE0, 0x7E, 0x78, 0x28, 0xE0,
0x7F, 0x8D, 0x03, 0xE0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x5D, 0xB3, 0x70, 0x60, 0x5E, 0x7D, 0x25, 0xE0, 0x5F, 0x9C, 0x8C, 0xE0, 0x60, 0x5D, 0x07, 0xE0,
0x61, 0x7C, 0x6E, 0xE0, 0x62, 0x3C, 0xE9, 0xE0, 0x63, 0x5C, 0x50, 0xE0, 0x64, 0x26, 0x06, 0x60,
0x65, 0x3C, 0x32, 0xE0, 0x66, 0x05, 0xE8, 0x60, 0x67, 0x1C, 0x14, 0xE0, 0x67, 0xE5, 0xCA, 0x60,
0x68, 0xFB, 0xF6, 0xE0, 0x69, 0xC5, 0xAC, 0x60, 0x6A, 0xE5, 0x13, 0x60, 0x6B, 0xA5, 0x8E, 0x60,
0x6C, 0xC4, 0xF5, 0x60, 0x6D, 0x8E, 0xAA, 0xE0, 0x6E, 0xA4, 0xD7, 0x60, 0x6F, 0x6E, 0x8C, 0xE0,
0x70, 0x84, 0xB9, 0x60, 0x71, 0x4E, 0x6E, 0xE0, 0x72, 0x64, 0x9B, 0x60, 0x73, 0x2E, 0x50, 0xE0,
0x74, 0x44, 0x7D, 0x60, 0x75, 0x0E, 0x32, 0xE0, 0x76, 0x2D, 0x99, 0xE0, 0x76, 0xEE, 0x14, 0xE0,
0x78, 0x0D, 0x7B, 0xE0, 0x78, 0xD7, 0x31, 0x60, 0x79, 0xED, 0x5D, 0xE0, 0x7A, 0xB7, 0x13, 0x60,
0x7B, 0xCD, 0x3F, 0xE0, 0x7C, 0x96, 0xF5, 0x60, 0x7D, 0xAD, 0x21, 0xE0, 0x7E, 0x76, 0xD7, 0x60,
0x7F, 0x96, 0x3E, 0x60, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
@@ -20460,7 +20460,7 @@ const unsigned char timelib_timezone_db_data_builtin[269025] = {
0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49,
0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
#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, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xFF, 0xFF, 0xFF,
0x7D, 0xBD, 0x4A, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x59, 0xB2, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF,
@@ -20515,29 +20515,29 @@ const unsigned char timelib_timezone_db_data_builtin[269025] = {
0x4F, 0x74, 0xDB, 0x60, 0x00, 0x00, 0x00, 0x00, 0x50, 0x5B, 0x91, 0xE0, 0x00, 0x00, 0x00, 0x00,
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, 0x5C, 0x60, 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, 0x13, 0xCA, 0x60, 0x00, 0x00, 0x00, 0x00,
0x58, 0xD5, 0xA4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF3, 0xAC, 0x60, 0x00, 0x00, 0x00, 0x00,
0x5A, 0xB5, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD3, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00,
0x5C, 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x62, 0x50, 0x00, 0x00, 0x00, 0x00,
0x5E, 0x7E, 0x77, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x93, 0x52, 0x60, 0x00, 0x00, 0x00, 0x00,
0x60, 0x5E, 0x59, 0x60, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7C, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x62, 0x3E, 0x3B, 0x60, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5C, 0x50, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x64, 0x1E, 0x1D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3C, 0x32, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x66, 0x07, 0x39, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1C, 0x14, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x67, 0xE7, 0x1B, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFB, 0xF6, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x69, 0xC6, 0xFD, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDB, 0xD8, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x6B, 0xA6, 0xDF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC4, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00,
0x6D, 0x86, 0xC1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA4, 0xD7, 0x60, 0x00, 0x00, 0x00, 0x00,
0x6F, 0x66, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x70, 0x84, 0xB9, 0x60, 0x00, 0x00, 0x00, 0x00,
0x71, 0x4F, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x72, 0x64, 0x9B, 0x60, 0x00, 0x00, 0x00, 0x00,
0x73, 0x2F, 0xA2, 0x60, 0x00, 0x00, 0x00, 0x00, 0x74, 0x44, 0x7D, 0x60, 0x00, 0x00, 0x00, 0x00,
0x75, 0x0F, 0x84, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2D, 0x99, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x76, 0xEF, 0x66, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0D, 0x7B, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x78, 0xCF, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x79, 0xED, 0x5D, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x7A, 0xAF, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCD, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x7C, 0x98, 0x46, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAD, 0x21, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x7E, 0x78, 0x28, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8D, 0x03, 0xE0, 0x02, 0x01, 0x02, 0x01,
0x5C, 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x70, 0x60, 0x00, 0x00, 0x00, 0x00,
0x5E, 0x7D, 0x25, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x9C, 0x8C, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x60, 0x5D, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7C, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x62, 0x3C, 0xE9, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5C, 0x50, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x64, 0x26, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3C, 0x32, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x66, 0x05, 0xE8, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1C, 0x14, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x67, 0xE5, 0xCA, 0x60, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFB, 0xF6, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x69, 0xC5, 0xAC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xE5, 0x13, 0x60, 0x00, 0x00, 0x00, 0x00,
0x6B, 0xA5, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC4, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00,
0x6D, 0x8E, 0xAA, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA4, 0xD7, 0x60, 0x00, 0x00, 0x00, 0x00,
0x6F, 0x6E, 0x8C, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x70, 0x84, 0xB9, 0x60, 0x00, 0x00, 0x00, 0x00,
0x71, 0x4E, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x72, 0x64, 0x9B, 0x60, 0x00, 0x00, 0x00, 0x00,
0x73, 0x2E, 0x50, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x74, 0x44, 0x7D, 0x60, 0x00, 0x00, 0x00, 0x00,
0x75, 0x0E, 0x32, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2D, 0x99, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x76, 0xEE, 0x14, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0D, 0x7B, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x78, 0xD7, 0x31, 0x60, 0x00, 0x00, 0x00, 0x00, 0x79, 0xED, 0x5D, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x7A, 0xB7, 0x13, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCD, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x7C, 0x96, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAD, 0x21, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x7E, 0x76, 0xD7, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x96, 0x3E, 0x60, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03,
0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
@@ -20551,9 +20551,8 @@ const unsigned char timelib_timezone_db_data_builtin[269025] = {
0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11,
0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45,
0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34,
0x2E, 0x34, 0x2F, 0x34, 0x38, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x34, 0x39,
0x0A,
0x01, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35,
0x2E, 0x35, 0x2F, 0x30, 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,
@@ -43849,7 +43848,7 @@ const unsigned char timelib_timezone_db_data_builtin[269025] = {
0x52, 0x6B, 0xCA, 0xE0, 0x52, 0xDA, 0x7A, 0xD0, 0x54, 0x54, 0xE7, 0x60, 0x54, 0xBA, 0x6A, 0xE0,
0x56, 0x34, 0xC9, 0x60, 0x56, 0x9A, 0x4C, 0xE0, 0x58, 0x1D, 0xE5, 0xE0, 0x58, 0x7A, 0x2E, 0xE0,
0x59, 0xFD, 0xC7, 0xE0, 0x5A, 0x5A, 0x10, 0xE0, 0x5B, 0xDD, 0xA9, 0xE0, 0x5C, 0x39, 0xF2, 0xE0,
0x5D, 0xC6, 0xC6, 0x60, 0x5E, 0x19, 0xD4, 0xE0, 0x5F, 0xDE, 0x07, 0x60, 0x60, 0x02, 0xF1, 0x60,
0x5D, 0xC6, 0xC6, 0x60, 0x5E, 0x19, 0xD4, 0xE0, 0x5F, 0xA6, 0xA8, 0x60, 0x60, 0x02, 0xF1, 0x60,
0x61, 0x8F, 0xC4, 0xE0, 0x61, 0xE2, 0xD3, 0x60, 0x63, 0x6F, 0xA6, 0xE0, 0x63, 0xC2, 0xB5, 0x60,
0x65, 0x4F, 0x88, 0xE0, 0x65, 0xA2, 0x97, 0x60, 0x67, 0x2F, 0x6A, 0xE0, 0x67, 0x82, 0x79, 0x60,
0x69, 0x0F, 0x4C, 0xE0, 0x69, 0x6B, 0x95, 0xE0, 0x6A, 0xEF, 0x2E, 0xE0, 0x6B, 0x4B, 0x77, 0xE0,
@@ -43882,7 +43881,7 @@ const unsigned char timelib_timezone_db_data_builtin[269025] = {
0x58, 0x7A, 0x2E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x59, 0xFD, 0xC7, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x5A, 0x5A, 0x10, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xDD, 0xA9, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x5C, 0x39, 0xF2, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xC6, 0xC6, 0x60, 0x00, 0x00, 0x00, 0x00,
0x5E, 0x19, 0xD4, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5F, 0xDE, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00,
0x5E, 0x19, 0xD4, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5F, 0xA6, 0xA8, 0x60, 0x00, 0x00, 0x00, 0x00,
0x60, 0x02, 0xF1, 0x60, 0x00, 0x00, 0x00, 0x00, 0x61, 0x8F, 0xC4, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x61, 0xE2, 0xD3, 0x60, 0x00, 0x00, 0x00, 0x00, 0x63, 0x6F, 0xA6, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x63, 0xC2, 0xB5, 0x60, 0x00, 0x00, 0x00, 0x00, 0x65, 0x4F, 0x88, 0xE0, 0x00, 0x00, 0x00, 0x00,
@@ -47405,4 +47404,4 @@ const unsigned char timelib_timezone_db_data_builtin[269025] = {
#endif
0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,};
const timelib_tzdb timezonedb_builtin = { "2020.4", 594, timezonedb_idx_builtin, timelib_timezone_db_data_builtin };
const timelib_tzdb timezonedb_builtin = { "2020.2", 594, timezonedb_idx_builtin, timelib_timezone_db_data_builtin };
+1
View File
@@ -2050,6 +2050,7 @@ static void dom_load_html(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{ */
}
ctxt = htmlCreateFileParserCtxt(source, NULL);
} else {
source_len = xmlStrlen((xmlChar *) source);
if (ZEND_SIZE_T_INT_OVFL(source_len)) {
php_error_docref(NULL, E_WARNING, "Input string is too long");
RETURN_FALSE;
-24
View File
@@ -1,24 +0,0 @@
--TEST--
Bug #80268 (loadHTML() truncates at NUL bytes)
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
$doc = new DOMDocument;
$doc->loadHTML("<p>foo\0bar</p>");
$html = $doc->saveHTML();
var_dump(strpos($html, '<p>foo</p>') !== false);
file_put_contents(__DIR__ . '/80268.html', "<p>foo\0bar</p>");
$doc = new DOMDocument;
$doc->loadHTMLFile(__DIR__ . '/80268.html');
$html = $doc->saveHTML();
var_dump(strpos($html, '<p>foo</p>') !== false);
?>
--CLEAN--
<?php
unlink(__DIR__ . '/80268.html');
?>
--EXPECT--
bool(true)
bool(true)
-4
View File
@@ -886,10 +886,6 @@ static void zend_ffi_callback_trampoline(ffi_cif* cif, void* ret, void** args, v
}
free_alloca(fci.params, use_heap);
if (EG(exception)) {
zend_error(E_ERROR, "Throwing from FFI callbacks is not allowed");
}
ret_type = ZEND_FFI_TYPE(callback_data->type->func.ret_type);
if (ret_type->kind != ZEND_FFI_TYPE_VOID) {
zend_ffi_zval_to_cdata(ret, ret_type, &retval);
-42
View File
@@ -1,42 +0,0 @@
--TEST--
Bug #79177 (FFI doesn't handle well PHP exceptions within callback)
--SKIPIF--
<?php
if (!extension_loaded('ffi')) die('skip ffi extension not available');
if (!extension_loaded('zend-test')) die('skip zend-test extension not available');
?>
--FILE--
<?php
require_once __DIR__ . '/utils.inc';
$header = <<<HEADER
extern int *(*bug79177_cb)(void);
void bug79177(void);
HEADER;
if (PHP_OS_FAMILY !== 'Windows') {
$ffi = FFI::cdef($header);
} else {
try {
$ffi = FFI::cdef($header, 'php_zend_test.dll');
} catch (FFI\Exception $ex) {
$ffi = FFI::cdef($header, ffi_get_php_dll_name());
}
}
$ffi->bug79177_cb = function() {
throw new \RuntimeException('Not allowed');
};
try {
$ffi->bug79177(); // this is supposed to raise a fatal error
} catch (\Throwable $exception) {}
echo "done\n";
?>
--EXPECTF--
Warning: Uncaught RuntimeException: Not allowed in %s:%d
Stack trace:
#0 %s(%d): {closure}()
#1 %s(%d): FFI->bug79177()
#2 {main}
thrown in %s on line %d
Fatal error: Throwing from FFI callbacks is not allowed in %s on line %d
-1
View File
@@ -218,7 +218,6 @@ PHP_MINIT_FUNCTION(finfo)
memcpy(&finfo_object_handlers, &std_object_handlers, sizeof(zend_object_handlers));
finfo_object_handlers.offset = XtOffsetOf(finfo_object, zo);
finfo_object_handlers.free_obj = finfo_objects_free;
finfo_object_handlers.clone_obj = NULL;
le_fileinfo = zend_register_list_destructors_ex(finfo_resource_destructor, NULL, "file_info", module_number);
-27
View File
@@ -1,27 +0,0 @@
--TEST--
Cloning and serializing finfo is not supported
--FILE--
<?php
$finfo = new finfo;
var_dump($finfo->buffer("Test string"));
try {
$finfo2 = clone $finfo;
var_dump($finfo2->buffer("Test string"));
} catch (Error $e) {
echo $e->getMessage(), "\n";
}
try {
$finfo3 = unserialize(serialize($finfo));
var_dump($finfo3->buffer("Test string"));
} catch (Error $e) {
echo $e->getMessage(), "\n";
}
?>
--EXPECTF--
string(%d) "%s"
Trying to clone an uncloneable object of class finfo
Warning: finfo::buffer(): The invalid fileinfo object. in %s on line %d
bool(false)
+2 -2
View File
@@ -1136,7 +1136,7 @@ ZEND_FUNCTION(gmp_export)
FETCH_GMP_ZVAL(gmpnumber, gmpnumber_arg, temp_a);
if (mpz_sgn(gmpnumber) == 0) {
RETVAL_EMPTY_STRING();
RETURN_EMPTY_STRING();
} else {
size_t bits_per_word = size * 8;
size_t count = (mpz_sizeinbase(gmpnumber, 2) + bits_per_word - 1) / bits_per_word;
@@ -1145,7 +1145,7 @@ ZEND_FUNCTION(gmp_export)
mpz_export(ZSTR_VAL(out_string), NULL, order, size, endian, 0, gmpnumber);
ZSTR_VAL(out_string)[ZSTR_LEN(out_string)] = '\0';
RETVAL_NEW_STR(out_string);
RETURN_NEW_STR(out_string);
}
FREE_GMP_TEMP(temp_a);
-4
View File
@@ -50,9 +50,6 @@ foreach ($export as $k => $test) {
var_dump($passed);
// Argument converted from int to GMP
var_dump(bin2hex(gmp_export(0xff)));
// Invalid arguments (zpp failure)
var_dump(gmp_export());
@@ -65,7 +62,6 @@ var_dump(gmp_export(123, 1, GMP_MSW_FIRST | GMP_LSW_FIRST));
var_dump(gmp_export(123, 1, GMP_BIG_ENDIAN | GMP_LITTLE_ENDIAN));
--EXPECTF--
bool(true)
string(2) "ff"
Warning: gmp_export() expects at least 1 parameter, 0 given in %s on line %d
NULL
+20 -32
View File
@@ -1323,7 +1323,7 @@ PHP_FUNCTION(imap_reopen)
imap_le_struct->imap_stream = mail_open(imap_le_struct->imap_stream, ZSTR_VAL(mailbox), flags);
if (imap_le_struct->imap_stream == NIL) {
zend_list_close(Z_RES_P(streamind));
zend_list_delete(Z_RES_P(streamind));
php_error_docref(NULL, E_WARNING, "Couldn't re-open stream");
RETURN_FALSE;
}
@@ -2710,9 +2710,8 @@ PHP_FUNCTION(imap_rfc822_write_address)
if (string) {
RETVAL_STR(string);
} else {
RETVAL_FALSE;
RETURN_FALSE;
}
mail_free_address(&addr);
}
/* }}} */
@@ -3200,9 +3199,6 @@ PHP_FUNCTION(imap_sort)
} else {
spg = mail_newsearchpgm();
}
if (spg == NIL) {
RETURN_FALSE;
}
mypgm = mail_newsortpgm();
mypgm->reverse = rev;
@@ -3724,19 +3720,15 @@ PHP_FUNCTION(imap_mail_compose)
bod->disposition.parameter = disp_param;
}
}
if (bod->type == TYPEMESSAGE && bod->subtype && !strcmp(bod->subtype, "RFC822")) {
bod->nested.msg = mail_newmsg();
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "contents.data", sizeof("contents.data") - 1)) != NULL) {
convert_to_string_ex(pvalue);
bod->contents.text.data = fs_get(Z_STRLEN_P(pvalue) + 1);
memcpy(bod->contents.text.data, Z_STRVAL_P(pvalue), Z_STRLEN_P(pvalue)+1);
bod->contents.text.size = Z_STRLEN_P(pvalue);
} else {
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "contents.data", sizeof("contents.data") - 1)) != NULL) {
convert_to_string_ex(pvalue);
bod->contents.text.data = fs_get(Z_STRLEN_P(pvalue) + 1);
memcpy(bod->contents.text.data, Z_STRVAL_P(pvalue), Z_STRLEN_P(pvalue)+1);
bod->contents.text.size = Z_STRLEN_P(pvalue);
} else {
bod->contents.text.data = fs_get(1);
memcpy(bod->contents.text.data, "", 1);
bod->contents.text.size = 0;
}
bod->contents.text.data = fs_get(1);
memcpy(bod->contents.text.data, "", 1);
bod->contents.text.size = 0;
}
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "lines", sizeof("lines") - 1)) != NULL) {
bod->size.lines = zval_get_long(pvalue);
@@ -3836,19 +3828,15 @@ PHP_FUNCTION(imap_mail_compose)
bod->disposition.parameter = disp_param;
}
}
if (bod->type == TYPEMESSAGE && bod->subtype && !strcmp(bod->subtype, "RFC822")) {
bod->nested.msg = mail_newmsg();
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "contents.data", sizeof("contents.data") - 1)) != NULL) {
convert_to_string_ex(pvalue);
bod->contents.text.data = fs_get(Z_STRLEN_P(pvalue) + 1);
memcpy(bod->contents.text.data, Z_STRVAL_P(pvalue), Z_STRLEN_P(pvalue) + 1);
bod->contents.text.size = Z_STRLEN_P(pvalue);
} else {
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "contents.data", sizeof("contents.data") - 1)) != NULL) {
convert_to_string_ex(pvalue);
bod->contents.text.data = fs_get(Z_STRLEN_P(pvalue) + 1);
memcpy(bod->contents.text.data, Z_STRVAL_P(pvalue), Z_STRLEN_P(pvalue) + 1);
bod->contents.text.size = Z_STRLEN_P(pvalue);
} else {
bod->contents.text.data = fs_get(1);
memcpy(bod->contents.text.data, "", 1);
bod->contents.text.size = 0;
}
bod->contents.text.data = fs_get(1);
memcpy(bod->contents.text.data, "", 1);
bod->contents.text.size = 0;
}
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "lines", sizeof("lines") - 1)) != NULL) {
bod->size.lines = zval_get_long(pvalue);
@@ -3949,7 +3937,7 @@ PHP_FUNCTION(imap_mail_compose)
bod=&part->body;
spprintf(&tempstring, 0, "%s%s%s", mystring, bod->contents.text.data ? (char *) bod->contents.text.data : "", CRLF);
spprintf(&tempstring, 0, "%s%s%s", mystring, bod->contents.text.data, CRLF);
efree(mystring);
mystring=tempstring;
} while ((part = part->next)); /* until done */
@@ -3959,7 +3947,7 @@ PHP_FUNCTION(imap_mail_compose)
efree(mystring);
mystring=tempstring;
} else if (bod) {
spprintf(&tempstring, 0, "%s%s%s", mystring, bod->contents.text.data ? (char *) bod->contents.text.data : "", CRLF);
spprintf(&tempstring, 0, "%s%s%s", mystring, bod->contents.text.data, CRLF);
efree(mystring);
mystring=tempstring;
} else {
-23
View File
@@ -1,23 +0,0 @@
--TEST--
Bug #64076 (imap_sort() does not return FALSE on failure)
--SKIPIF--
<?php
require_once __DIR__ . '/skipif.inc';
?>
--FILE--
<?php
require_once __DIR__ . '/imap_include.inc';
$stream = setup_test_mailbox('', 2);
imap_errors(); // clear error stack
var_dump(imap_sort($stream, SORTFROM, 0, 0, 'UNSUPPORTED SEARCH CRITERIUM'));
var_dump(imap_errors() !== false);
?>
--CLEAN--
<?php
require_once __DIR__ . '/clean.inc';
?>
--EXPECT--
Create a temporary mailbox and add 2 msgs
.. mailbox '{127.0.0.1:143/norsh}INBOX.phpttest' created
bool(false)
bool(true)
-34
View File
@@ -1,34 +0,0 @@
--TEST--
Bug #80220 (imap_mail_compose() may leak memory) - message/rfc822 regression
--SKIPIF--
<?php
if (!extension_loaded('imap')) die('skip imap extension not available');
?>
--FILE--
<?php
$bodies = [[
'type' => TYPEMESSAGE,
'subtype' => 'RFC822',
], [
'contents.data' => 'asd',
]];
var_dump(imap_mail_compose([], $bodies));
$bodies = [[
'type' => TYPEMESSAGE,
], [
'contents.data' => 'asd',
]];
var_dump(imap_mail_compose([], $bodies));
?>
--EXPECT--
string(53) "MIME-Version: 1.0
Content-Type: MESSAGE/RFC822
"
string(53) "MIME-Version: 1.0
Content-Type: MESSAGE/RFC822
"
-22
View File
@@ -1,22 +0,0 @@
--TEST--
Bug #80242 (imap_mail_compose() segfaults for multipart with rfc822)
--SKIPIF--
<?php
if (!extension_loaded('imap')) die('skip imap extension not available');
?>
--FILE--
<?php
$bodies = [[
'type' => TYPEMULTIPART,
], [
'type' => TYPETEXT,
'contents.data' => 'some text',
], [
'type' => TYPEMESSAGE,
'subtype' => 'RFC822',
]];
imap_mail_compose([], $bodies);
echo "done\n";
?>
--EXPECT--
done
@@ -1,12 +0,0 @@
--TEST--
imap_rfc822_write_address() : basic functionality
--SKIPIF--
<?php
if (!extension_loaded('imap')) die('skip imap extension not available');
?>
--FILE--
<?php
var_dump(imap_rfc822_write_address('me', 'example.com', 'My Name'));
?>
--EXPECT--
string(24) "My Name <me@example.com>"
@@ -1,8 +1,7 @@
--TEST--
locale_get_display_language() icu < 68.1
locale_get_display_language()
--SKIPIF--
<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
<?php if (version_compare(INTL_ICU_VERSION, '68.1') >= 0) die('skip for ICU < 68.1'); ?>
--FILE--
<?php
@@ -1,281 +0,0 @@
--TEST--
locale_get_display_language() icu >= 68.1
--SKIPIF--
<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
<?php if (version_compare(INTL_ICU_VERSION, '68.1') < 0) die('skip for ICU >= 68.1'); ?>
--FILE--
<?php
/*
* Try getting the display_language for different locales
* with Procedural and Object methods.
*/
function ut_main()
{
$res_str='';
$disp_locales=array('en','fr','de');
$locales = array(
'uk-ua_CALIFORNIA@currency=;currency=GRN',
'root',
'uk@currency=EURO',
'Hindi',
//Simple language subtag
'de',
'fr',
'ja',
'i-enochian', //(example of a grandfathered tag)
'art-lojban', //(example of a grandfathered tag)
//Language subtag plus Script subtag:
'zh-Hant',
'zh-Hans',
'sr-Cyrl',
'sr-Latn',
//Language-Script-Region
'zh-Hans-CN',
'sr-Latn-CS',
//Language-Variant
'sl-rozaj',
'sl-nedis',
//Language-Region-Variant
'de-CH-1901',
'sl-IT-nedis',
//Language-Script-Region-Variant
'sl-Latn-IT-nedis',
//Language-Region:
'de-DE',
'en-US',
'es-419',
//Private use subtags:
'de-CH-x-phonebk',
'az-Arab-x-AZE-derbend',
//Extended language subtags
'zh-min',
'zh-min-nan-Hant-CN',
//Private use registry values
'x-whatever',
'qaa-Qaaa-QM-x-southern',
'sr-Latn-QM',
'sr-Qaaa-CS',
/*Tags that use extensions (examples ONLY: extensions MUST be defined
by revision or update to this document or by RFC): */
'en-US-u-islamCal',
'zh-CN-a-myExt-x-private',
'en-a-myExt-b-another',
//Some Invalid Tags:
'de-419-DE',
'a-DE',
'ar-a-aaa-b-bbb-a-ccc'
);
$res_str = '';
foreach( $locales as $locale )
{
$res_str .= "locale='$locale'\n";
foreach( $disp_locales as $disp_locale )
{
$scr = ut_loc_get_display_language( $locale ,$disp_locale );
$res_str .= "disp_locale=$disp_locale : display_language=$scr";
$res_str .= "\n";
}
$res_str .= "-----------------\n";
}
return $res_str;
}
include_once( 'ut_common.inc' );
ut_run();
?>
--EXPECTREGEX--
locale='uk-ua_CALIFORNIA@currency=;currency=GRN'
disp_locale=en : display_language=Ukrainian
disp_locale=fr : display_language=ukrainien
disp_locale=de : display_language=Ukrainisch
-----------------
locale='root'
disp_locale=en : display_language=(Root|Unknown language)
disp_locale=fr : display_language=(racine|langue indéterminée)
disp_locale=de : display_language=([rR]oot|Unbekannte Sprache)
-----------------
locale='uk@currency=EURO'
disp_locale=en : display_language=Ukrainian
disp_locale=fr : display_language=ukrainien
disp_locale=de : display_language=Ukrainisch
-----------------
locale='Hindi'
disp_locale=en : display_language=hindi
disp_locale=fr : display_language=hindi
disp_locale=de : display_language=hindi
-----------------
locale='de'
disp_locale=en : display_language=German
disp_locale=fr : display_language=allemand
disp_locale=de : display_language=Deutsch
-----------------
locale='fr'
disp_locale=en : display_language=French
disp_locale=fr : display_language=français
disp_locale=de : display_language=Französisch
-----------------
locale='ja'
disp_locale=en : display_language=Japanese
disp_locale=fr : display_language=japonais
disp_locale=de : display_language=Japanisch
-----------------
locale='i-enochian'
disp_locale=en : display_language=i-enochian
disp_locale=fr : display_language=i-enochian
disp_locale=de : display_language=i-enochian
-----------------
locale='art-lojban'
disp_locale=en : display_language=Lojban
disp_locale=fr : display_language=lojban
disp_locale=de : display_language=Lojban
-----------------
locale='zh-Hant'
disp_locale=en : display_language=Chinese
disp_locale=fr : display_language=chinois
disp_locale=de : display_language=Chinesisch
-----------------
locale='zh-Hans'
disp_locale=en : display_language=Chinese
disp_locale=fr : display_language=chinois
disp_locale=de : display_language=Chinesisch
-----------------
locale='sr-Cyrl'
disp_locale=en : display_language=Serbian
disp_locale=fr : display_language=serbe
disp_locale=de : display_language=Serbisch
-----------------
locale='sr-Latn'
disp_locale=en : display_language=Serbian
disp_locale=fr : display_language=serbe
disp_locale=de : display_language=Serbisch
-----------------
locale='zh-Hans-CN'
disp_locale=en : display_language=Chinese
disp_locale=fr : display_language=chinois
disp_locale=de : display_language=Chinesisch
-----------------
locale='sr-Latn-CS'
disp_locale=en : display_language=Serbian
disp_locale=fr : display_language=serbe
disp_locale=de : display_language=Serbisch
-----------------
locale='sl-rozaj'
disp_locale=en : display_language=Slovenian
disp_locale=fr : display_language=slovène
disp_locale=de : display_language=Slowenisch
-----------------
locale='sl-nedis'
disp_locale=en : display_language=Slovenian
disp_locale=fr : display_language=slovène
disp_locale=de : display_language=Slowenisch
-----------------
locale='de-CH-1901'
disp_locale=en : display_language=German
disp_locale=fr : display_language=allemand
disp_locale=de : display_language=Deutsch
-----------------
locale='sl-IT-nedis'
disp_locale=en : display_language=Slovenian
disp_locale=fr : display_language=slovène
disp_locale=de : display_language=Slowenisch
-----------------
locale='sl-Latn-IT-nedis'
disp_locale=en : display_language=Slovenian
disp_locale=fr : display_language=slovène
disp_locale=de : display_language=Slowenisch
-----------------
locale='de-DE'
disp_locale=en : display_language=German
disp_locale=fr : display_language=allemand
disp_locale=de : display_language=Deutsch
-----------------
locale='en-US'
disp_locale=en : display_language=English
disp_locale=fr : display_language=anglais
disp_locale=de : display_language=Englisch
-----------------
locale='es-419'
disp_locale=en : display_language=Spanish
disp_locale=fr : display_language=espagnol
disp_locale=de : display_language=Spanisch
-----------------
locale='de-CH-x-phonebk'
disp_locale=en : display_language=German
disp_locale=fr : display_language=allemand
disp_locale=de : display_language=Deutsch
-----------------
locale='az-Arab-x-AZE-derbend'
disp_locale=en : display_language=Azerbaijani
disp_locale=fr : display_language=azerbaïdjanais
disp_locale=de : display_language=Aserbaidschanisch
-----------------
locale='zh-min'
disp_locale=en : display_language=Chinese
disp_locale=fr : display_language=chinois
disp_locale=de : display_language=Chinesisch
-----------------
locale='zh-min-nan-Hant-CN'
disp_locale=en : display_language=Chinese
disp_locale=fr : display_language=chinois
disp_locale=de : display_language=Chinesisch
-----------------
locale='x-whatever'
disp_locale=en : display_language=x-whatever
disp_locale=fr : display_language=x-whatever
disp_locale=de : display_language=x-whatever
-----------------
locale='qaa-Qaaa-QM-x-southern'
disp_locale=en : display_language=qaa
disp_locale=fr : display_language=qaa
disp_locale=de : display_language=qaa
-----------------
locale='sr-Latn-QM'
disp_locale=en : display_language=Serbian
disp_locale=fr : display_language=serbe
disp_locale=de : display_language=Serbisch
-----------------
locale='sr-Qaaa-CS'
disp_locale=en : display_language=Serbian
disp_locale=fr : display_language=serbe
disp_locale=de : display_language=Serbisch
-----------------
locale='en-US-u-islamCal'
disp_locale=en : display_language=English
disp_locale=fr : display_language=anglais
disp_locale=de : display_language=Englisch
-----------------
locale='zh-CN-a-myExt-x-private'
disp_locale=en : display_language=Chinese
disp_locale=fr : display_language=chinois
disp_locale=de : display_language=Chinesisch
-----------------
locale='en-a-myExt-b-another'
disp_locale=en : display_language=English
disp_locale=fr : display_language=anglais
disp_locale=de : display_language=Englisch
-----------------
locale='de-419-DE'
disp_locale=en : display_language=German
disp_locale=fr : display_language=allemand
disp_locale=de : display_language=Deutsch
-----------------
locale='a-DE'
disp_locale=en : display_language=a
disp_locale=fr : display_language=a
disp_locale=de : display_language=a
-----------------
locale='ar-a-aaa-b-bbb-a-ccc'
disp_locale=en : display_language=Arabic
disp_locale=fr : display_language=arabe
disp_locale=de : display_language=Arabisch
-----------------
+1 -2
View File
@@ -1,9 +1,8 @@
--TEST--
locale_get_display_name() icu >= 65.0 && icu < 68.1
locale_get_display_name() icu >= 64.0
--SKIPIF--
<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
<?php if (version_compare(INTL_ICU_VERSION, '65.0') < 0) die('skip for ICU >= 65.0'); ?>
<?php if (version_compare(INTL_ICU_VERSION, '68.1') >= 0) die('skip for ICU < 68.1'); ?>
--FILE--
<?php
@@ -1,342 +0,0 @@
--TEST--
locale_get_display_name() icu >= 68.1
--SKIPIF--
<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
<?php if (version_compare(INTL_ICU_VERSION, '68.1') < 0) die('skip for ICU >= 68.1'); ?>
--FILE--
<?php
/*
* Try getting the display_name for different locales
* with Procedural and Object methods.
*/
function ut_main()
{
$res_str='';
$disp_locales=array('en','fr','de');
$locales = array(
'sl_IT_nedis_KIRTI',
'sl_IT_nedis-a-kirti-x-xyz',
'sl_IT_rozaj',
'sl_IT_NEDIS_ROJAZ_1901',
'i-enochian',
'zh-hakka',
'zh-wuu',
'i-tay',
'sgn-BE-nl',
'sgn-CH-de',
'sl_IT_rozaj@currency=EUR',
'uk-ua_CALIFORNIA@currency=;currency=GRN',
'root',
'uk@currency=EURO',
'Hindi',
//Simple language subtag
'de',
'fr',
'ja',
'i-enochian', //(example of a grandfathered tag)
//Language subtag plus Script subtag:
'zh-Hant',
'zh-Hans',
'sr-Cyrl',
'sr-Latn',
//Language-Script-Region
'zh-Hans-CN',
'sr-Latn-CS',
//Language-Variant
'sl-rozaj',
'sl-nedis',
//Language-Region-Variant
'de-CH-1901',
'sl-IT-nedis',
//Language-Script-Region-Variant
'sl-Latn-IT-nedis',
//Language-Region:
'de-DE',
'en-US',
'es-419',
//Private use subtags:
'de-CH-x-phonebk',
'az-Arab-x-AZE-derbend',
//Extended language subtags
'zh-min',
'zh-min-nan-Hant-CN',
//Private use registry values
'x-whatever',
'qaa-Qaaa-QM-x-southern',
'sr-Latn-QM',
'sr-Qaaa-CS',
/*Tags that use extensions (examples ONLY: extensions MUST be defined
by revision or update to this document or by RFC): */
'en-US-u-islamCal',
'zh-CN-a-myExt-x-private',
'en-a-myExt-b-another',
//Some Invalid Tags:
'de-419-DE',
'a-DE',
'ar-a-aaa-b-bbb-a-ccc'
);
$res_str = '';
foreach( $locales as $locale )
{
$res_str .= "locale='$locale'\n";
foreach( $disp_locales as $disp_locale )
{
$scr = ut_loc_get_display_name( $locale ,$disp_locale );
$scr = str_replace(array('(', ')'), '#', $scr);
$res_str .= "disp_locale=$disp_locale : display_name=$scr";
$res_str .= "\n";
}
$res_str .= "-----------------\n";
}
return $res_str;
}
include_once( 'ut_common.inc' );
ut_run();
?>
--EXPECTREGEX--
locale='sl_IT_nedis_KIRTI'
disp_locale=en : display_name=Slovenian #Italy, NEDIS_KIRTI#
disp_locale=fr : display_name=slovène #Italie, NEDIS_KIRTI#
disp_locale=de : display_name=Slowenisch #Italien, NEDIS_KIRTI#
-----------------
locale='sl_IT_nedis-a-kirti-x-xyz'
disp_locale=en : display_name=Slovenian #Italy, NEDIS_A_KIRTI_X_XYZ#
disp_locale=fr : display_name=slovène #Italie, NEDIS_A_KIRTI_X_XYZ#
disp_locale=de : display_name=Slowenisch #Italien, NEDIS_A_KIRTI_X_XYZ#
-----------------
locale='sl_IT_rozaj'
disp_locale=en : display_name=Slovenian #Italy, Resian#
disp_locale=fr : display_name=slovène #Italie, dialecte de Resia#
disp_locale=de : display_name=Slowenisch #Italien, (ROZAJ|Resianisch)#
-----------------
locale='sl_IT_NEDIS_ROJAZ_1901'
disp_locale=en : display_name=Slovenian #Italy, NEDIS_ROJAZ_1901#
disp_locale=fr : display_name=slovène #Italie, NEDIS_ROJAZ_1901#
disp_locale=de : display_name=Slowenisch #Italien, NEDIS_ROJAZ_1901#
-----------------
locale='i-enochian'
disp_locale=en : display_name=i-enochian #Private-Use=i-enochian#
disp_locale=fr : display_name=i-enochian #usage privé=i-enochian#
disp_locale=de : display_name=i-enochian #Privatnutzung=i-enochian#
-----------------
locale='zh-hakka'
disp_locale=en : display_name=Chinese( #HAKKA#)?
disp_locale=fr : display_name=chinois( #HAKKA#)?
disp_locale=de : display_name=Chinesisch( #HAKKA#)?
-----------------
locale='zh-wuu'
disp_locale=en : display_name=Chinese #WUU#
disp_locale=fr : display_name=chinois #WUU#
disp_locale=de : display_name=Chinesisch #WUU#
-----------------
locale='i-tay'
disp_locale=en : display_name=i-tay
disp_locale=fr : display_name=i-tay
disp_locale=de : display_name=i-tay
-----------------
locale='sgn-BE-nl'
disp_locale=en : display_name=sgn #Belgium, NL#
disp_locale=fr : display_name=sgn #Belgique, NL#
disp_locale=de : display_name=sgn #Belgien, NL#
-----------------
locale='sgn-CH-de'
disp_locale=en : display_name=sgn #Switzerland, DE#
disp_locale=fr : display_name=sgn #Suisse, DE#
disp_locale=de : display_name=sgn #Schweiz, DE#
-----------------
locale='sl_IT_rozaj@currency=EUR'
disp_locale=en : display_name=Slovenian #Italy, Resian, [Cc]urrency=Euro#
disp_locale=fr : display_name=slovène #Italie, dialecte de Resia, [Dd]evise=euro#
disp_locale=de : display_name=Slowenisch #Italien, (ROZAJ|Resianisch), Währung=Euro#
-----------------
locale='uk-ua_CALIFORNIA@currency=;currency=GRN'
disp_locale=en : display_name=
disp_locale=fr : display_name=
disp_locale=de : display_name=
-----------------
locale='root'
disp_locale=en : display_name=Unknown language
disp_locale=fr : display_name=langue indéterminée
disp_locale=de : display_name=Unbekannte Sprache
-----------------
locale='uk@currency=EURO'
disp_locale=en : display_name=Ukrainian #[Cc]urrency=EURO#
disp_locale=fr : display_name=ukrainien #[Dd]evise=EURO#
disp_locale=de : display_name=Ukrainisch #Währung=EURO#
-----------------
locale='Hindi'
disp_locale=en : display_name=hindi
disp_locale=fr : display_name=hindi
disp_locale=de : display_name=hindi
-----------------
locale='de'
disp_locale=en : display_name=German
disp_locale=fr : display_name=allemand
disp_locale=de : display_name=Deutsch
-----------------
locale='fr'
disp_locale=en : display_name=French
disp_locale=fr : display_name=français
disp_locale=de : display_name=Französisch
-----------------
locale='ja'
disp_locale=en : display_name=Japanese
disp_locale=fr : display_name=japonais
disp_locale=de : display_name=Japanisch
-----------------
locale='i-enochian'
disp_locale=en : display_name=i-enochian #Private-Use=i-enochian#
disp_locale=fr : display_name=i-enochian #usage privé=i-enochian#
disp_locale=de : display_name=i-enochian #Privatnutzung=i-enochian#
-----------------
locale='zh-Hant'
disp_locale=en : display_name=Chinese #Traditional#
disp_locale=fr : display_name=chinois #traditionnel#
disp_locale=de : display_name=Chinesisch #Traditionell#
-----------------
locale='zh-Hans'
disp_locale=en : display_name=Chinese #Simplified#
disp_locale=fr : display_name=chinois #simplifié#
disp_locale=de : display_name=Chinesisch #Vereinfacht#
-----------------
locale='sr-Cyrl'
disp_locale=en : display_name=Serbian #Cyrillic#
disp_locale=fr : display_name=serbe #cyrillique#
disp_locale=de : display_name=Serbisch #Kyrillisch#
-----------------
locale='sr-Latn'
disp_locale=en : display_name=Serbian #Latin#
disp_locale=fr : display_name=serbe #latin#
disp_locale=de : display_name=Serbisch #Lateinisch#
-----------------
locale='zh-Hans-CN'
disp_locale=en : display_name=Chinese #Simplified, China#
disp_locale=fr : display_name=chinois #simplifié, Chine#
disp_locale=de : display_name=Chinesisch #Vereinfacht, China#
-----------------
locale='sr-Latn-CS'
disp_locale=en : display_name=Serbian #Latin, Serbia#
disp_locale=fr : display_name=serbe #latin, Serbie#
disp_locale=de : display_name=Serbisch #Lateinisch, Serbien#
-----------------
locale='sl-rozaj'
disp_locale=en : display_name=Slovenian #Resian#
disp_locale=fr : display_name=slovène #dialecte de Resia#
disp_locale=de : display_name=Slowenisch( #(ROZAJ|Resianisch)#)?
-----------------
locale='sl-nedis'
disp_locale=en : display_name=Slovenian #Natisone dialect#
disp_locale=fr : display_name=slovène #dialecte de Natisone#
disp_locale=de : display_name=Slowenisch #Natisone-Dialekt#
-----------------
locale='de-CH-1901'
disp_locale=en : display_name=German #Switzerland, Traditional German orthography#
disp_locale=fr : display_name=allemand #Suisse, orthographe allemande traditionnelle#
disp_locale=de : display_name=Deutsch #Schweiz, (1901|[aA]lte deutsche Rechtschreibung)#
-----------------
locale='sl-IT-nedis'
disp_locale=en : display_name=Slovenian #Italy, Natisone dialect#
disp_locale=fr : display_name=slovène #Italie, dialecte de Natisone#
disp_locale=de : display_name=Slowenisch #Italien, (NEDIS|Natisone-Dialekt)#
-----------------
locale='sl-Latn-IT-nedis'
disp_locale=en : display_name=Slovenian #Latin, Italy, Natisone dialect#
disp_locale=fr : display_name=slovène #latin, Italie, dialecte de Natisone#
disp_locale=de : display_name=Slowenisch #Lateinisch, Italien, (NEDIS|Natisone-Dialekt)#
-----------------
locale='de-DE'
disp_locale=en : display_name=German #Germany#
disp_locale=fr : display_name=allemand #Allemagne#
disp_locale=de : display_name=Deutsch #Deutschland#
-----------------
locale='en-US'
disp_locale=en : display_name=English #United States#
disp_locale=fr : display_name=anglais #États-Unis#
disp_locale=de : display_name=Englisch #Vereinigte Staaten#
-----------------
locale='es-419'
disp_locale=en : display_name=Spanish #Latin America#
disp_locale=fr : display_name=espagnol #Amérique latine#
disp_locale=de : display_name=Spanisch #Lateinamerika#
-----------------
locale='de-CH-x-phonebk'
disp_locale=en : display_name=German #Switzerland, Private-Use=phonebk#
disp_locale=fr : display_name=allemand #Suisse, usage privé=phonebk#
disp_locale=de : display_name=Deutsch #Schweiz, Privatnutzung=phonebk#
-----------------
locale='az-Arab-x-AZE-derbend'
disp_locale=en : display_name=Azerbaijani #Arabic, Private-Use=aze-derbend#
disp_locale=fr : display_name=azerbaïdjanais #arabe, usage privé=aze-derbend#
disp_locale=de : display_name=Aserbaidschanisch #Arabisch, Privatnutzung=aze-derbend#
-----------------
locale='zh-min'
disp_locale=en : display_name=Chinese #MIN#
disp_locale=fr : display_name=chinois #MIN#
disp_locale=de : display_name=Chinesisch #MIN#
-----------------
locale='zh-min-nan-Hant-CN'
disp_locale=en : display_name=Chinese #MIN, NAN_HANT_CN#
disp_locale=fr : display_name=chinois #MIN, NAN_HANT_CN#
disp_locale=de : display_name=Chinesisch #MIN, NAN_HANT_CN#
-----------------
locale='x-whatever'
disp_locale=en : display_name=x-whatever #Private-Use=whatever#
disp_locale=fr : display_name=x-whatever #usage privé=whatever#
disp_locale=de : display_name=x-whatever #Privatnutzung=whatever#
-----------------
locale='qaa-Qaaa-QM-x-southern'
disp_locale=en : display_name=qaa #Qaaa, QM, Private-Use=southern#
disp_locale=fr : display_name=qaa #Qaaa, QM, usage privé=southern#
disp_locale=de : display_name=qaa #Qaaa, QM, Privatnutzung=southern#
-----------------
locale='sr-Latn-QM'
disp_locale=en : display_name=Serbian #Latin, QM#
disp_locale=fr : display_name=serbe #latin, QM#
disp_locale=de : display_name=Serbisch #Lateinisch, QM#
-----------------
locale='sr-Qaaa-CS'
disp_locale=en : display_name=Serbian #Qaaa, Serbia#
disp_locale=fr : display_name=serbe #Qaaa, Serbie#
disp_locale=de : display_name=Serbisch #Qaaa, Serbien#
-----------------
locale='en-US-u-islamCal'
disp_locale=en : display_name=English #United States, attribute=islamcal#
disp_locale=fr : display_name=anglais #États-Unis, attribute=islamcal#
disp_locale=de : display_name=Englisch #Vereinigte Staaten, attribute=islamcal#
-----------------
locale='zh-CN-a-myExt-x-private'
disp_locale=en : display_name=Chinese #China, a=myext, Private-Use=private#
disp_locale=fr : display_name=chinois #Chine, a=myext, usage privé=private#
disp_locale=de : display_name=Chinesisch #China, a=myext, Privatnutzung=private#
-----------------
locale='en-a-myExt-b-another'
disp_locale=en : display_name=English #a=myext, b=another#
disp_locale=fr : display_name=anglais #a=myext, b=another#
disp_locale=de : display_name=Englisch #a=myext, b=another#
-----------------
locale='de-419-DE'
disp_locale=en : display_name=German #Latin America, DE#
disp_locale=fr : display_name=allemand #Amérique latine, DE#
disp_locale=de : display_name=Deutsch #Lateinamerika, DE#
-----------------
locale='a-DE'
disp_locale=en : display_name=a #Germany#
disp_locale=fr : display_name=a #Allemagne#
disp_locale=de : display_name=a #Deutschland#
-----------------
locale='ar-a-aaa-b-bbb-a-ccc'
disp_locale=en : display_name=Arabic #a=aaa, b=bbb#
disp_locale=fr : display_name=arabe #a=aaa, b=bbb#
disp_locale=de : display_name=Arabisch #a=aaa, b=bbb#
-----------------
@@ -1,9 +1,8 @@
--TEST--
IntlRuleBasedBreakIterator::getBinaryRules(): basic test icu >= 61.1 && icu < 68.1
IntlRuleBasedBreakIterator::getBinaryRules(): basic test
--SKIPIF--
<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
<?php if(version_compare(INTL_ICU_VERSION, '61.1') < 0) print 'skip ICU >= 61.1 only'; ?>
<?php if (version_compare(INTL_ICU_VERSION, '68.1') >= 0) die('skip for ICU < 68.1'); ?>
--FILE--
<?php
ini_set("intl.error_level", E_WARNING);
@@ -1,39 +0,0 @@
--TEST--
IntlRuleBasedBreakIterator::getBinaryRules(): basic test icu >= 68.1
--SKIPIF--
<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
<?php if (version_compare(INTL_ICU_VERSION, '68.1') < 0) die('skip for ICU >= 68.1'); ?>
--FILE--
<?php
ini_set("intl.error_level", E_WARNING);
ini_set("intl.default_locale", "pt_PT");
$rules = <<<RULES
\$LN = [[:letter:] [:number:]];
\$S = [.;,:];
!!forward;
\$LN+ {1};
\$S+ {42};
!!reverse;
\$LN+ {1};
\$S+ {42};
!!safe_forward;
!!safe_reverse;
RULES;
$rbbi = new IntlRuleBasedBreakIterator($rules);
$rbbi->setText('sdfkjsdf88á.... ,;');
$br = $rbbi->getBinaryRules();
$rbbi2 = new IntlRuleBasedBreakIterator($br, true);
var_dump($rbbi->getRules(), $rbbi2->getRules());
var_dump($rbbi->getRules() == $rbbi2->getRules());
?>
==DONE==
--EXPECT--
string(119) "$LN=[[:letter:][:number:]];$S=[.;,:];!!forward;$LN+{1};$S+{42};!!reverse;$LN+{1};$S+{42};!!safe_forward;!!safe_reverse;"
string(119) "$LN=[[:letter:][:number:]];$S=[.;,:];!!forward;$LN+{1};$S+{42};!!reverse;$LN+{1};$S+{42};!!safe_forward;!!safe_reverse;"
bool(true)
==DONE==
+1 -2
View File
@@ -1,9 +1,8 @@
--TEST--
IntlRuleBasedBreakIterator::getRules(): basic test icu >= 61.1 && icu < 68.1
IntlRuleBasedBreakIterator::getRules(): basic test
--SKIPIF--
<?php if (!extension_loaded('intl')) die('skip intl extension not enabled'); ?>
<?php if (version_compare(INTL_ICU_VERSION, '61.1') < 0) die('skip for ICU >= 61.1'); ?>
<?php if (version_compare(INTL_ICU_VERSION, '68.1') >= 0) die('skip for ICU < 68.1'); ?>
--FILE--
<?php
ini_set("intl.error_level", E_WARNING);
@@ -1,31 +0,0 @@
--TEST--
IntlRuleBasedBreakIterator::getRules(): basic test icu >= 68.1
--SKIPIF--
<?php if (!extension_loaded('intl')) die('skip intl extension not enabled'); ?>
<?php if (version_compare(INTL_ICU_VERSION, '68.1') < 0) die('skip for ICU >= 68.1'); ?>
--FILE--
<?php
ini_set("intl.error_level", E_WARNING);
ini_set("intl.default_locale", "pt_PT");
$rules = <<<RULES
\$LN = [[:letter:] [:number:]];
\$S = [.;,:];
!!forward;
\$LN+ {1};
\$S+ {42};
!!reverse;
\$LN+ {1};
\$S+ {42};
!!safe_forward;
!!safe_reverse;
RULES;
$rbbi = new IntlRuleBasedBreakIterator($rules);
var_dump($rbbi->getRules());
?>
==DONE==
--EXPECT--
string(119) "$LN=[[:letter:][:number:]];$S=[.;,:];!!forward;$LN+{1};$S+{42};!!reverse;$LN+{1};$S+{42};!!safe_forward;!!safe_reverse;"
==DONE==
+1 -6
View File
@@ -171,7 +171,6 @@ PHP_FUNCTION(mysqli_autocommit)
MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID);
if (mysql_autocommit(mysql->mysql, (my_bool)automode)) {
MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
RETURN_FALSE;
}
RETURN_TRUE;
@@ -755,7 +754,6 @@ PHP_FUNCTION(mysqli_commit)
#else
if (FAIL == mysqlnd_commit(mysql->mysql, flags, name)) {
#endif
MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
RETURN_FALSE;
}
RETURN_TRUE;
@@ -1125,8 +1123,7 @@ void mysqli_stmt_fetch_mysqlnd(INTERNAL_FUNCTION_PARAMETERS)
}
MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID);
if (FAIL == mysqlnd_stmt_fetch(stmt->stmt, &fetched_anything)) {
MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
if (FAIL == mysqlnd_stmt_fetch(stmt->stmt, &fetched_anything)) {
RETURN_BOOL(FALSE);
} else if (fetched_anything == TRUE) {
RETURN_BOOL(TRUE);
@@ -1991,7 +1988,6 @@ PHP_FUNCTION(mysqli_rollback)
#else
if (FAIL == mysqlnd_rollback(mysql->mysql, flags, name)) {
#endif
MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
RETURN_FALSE;
}
RETURN_TRUE;
@@ -2353,7 +2349,6 @@ PHP_FUNCTION(mysqli_stmt_attr_set)
#else
if (FAIL == mysql_stmt_attr_set(stmt->stmt, attr, mode_p)) {
#endif
MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
RETURN_FALSE;
}
RETURN_TRUE;
-172
View File
@@ -1,172 +0,0 @@
--TEST--
Bug #79375: mysqli_store_result does not report error from lock wait timeout
--SKIPIF--
<?php
require_once('skipif.inc');
require_once('skipifconnectfailure.inc');
if (!defined('MYSQLI_STORE_RESULT_COPY_DATA')) die('skip requires mysqlnd');
?>
--FILE--
<?php
require_once("connect.inc");
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
$mysqli2 = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
$mysqli->query('DROP TABLE IF EXISTS test');
$mysqli->query('CREATE TABLE test (first int) ENGINE = InnoDB');
$mysqli->query('INSERT INTO test VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9)');
function testStmtStoreResult(mysqli $mysqli, string $name) {
$mysqli->query("SET innodb_lock_wait_timeout = 1");
$mysqli->query("START TRANSACTION");
$query = "SELECT first FROM test WHERE first = 1 FOR UPDATE";
echo "Running query on $name\n";
$stmt = $mysqli->prepare($query);
$stmt->execute();
try {
$stmt->store_result();
echo "Got {$stmt->num_rows} for $name\n";
} catch(mysqli_sql_exception $e) {
echo $e->getMessage()."\n";
}
}
function testStmtGetResult(mysqli $mysqli, string $name) {
$mysqli->query("SET innodb_lock_wait_timeout = 1");
$mysqli->query("START TRANSACTION");
$query = "SELECT first FROM test WHERE first = 1 FOR UPDATE";
echo "Running query on $name\n";
$stmt = $mysqli->prepare($query);
$stmt->execute();
try {
$res = $stmt->get_result();
echo "Got {$res->num_rows} for $name\n";
} catch(mysqli_sql_exception $e) {
echo $e->getMessage()."\n";
}
}
function testNormalQuery(mysqli $mysqli, string $name) {
$mysqli->query("SET innodb_lock_wait_timeout = 1");
$mysqli->query("START TRANSACTION");
$query = "SELECT first FROM test WHERE first = 1 FOR UPDATE";
echo "Running query on $name\n";
try {
$res = $mysqli->query($query);
echo "Got {$res->num_rows} for $name\n";
} catch(mysqli_sql_exception $e) {
echo $e->getMessage()."\n";
}
}
function testStmtUseResult(mysqli $mysqli, string $name) {
$mysqli->query("SET innodb_lock_wait_timeout = 1");
$mysqli->query("START TRANSACTION");
$query = "SELECT first FROM test WHERE first = 1 FOR UPDATE";
echo "Running query on $name\n";
$stmt = $mysqli->prepare($query);
$stmt->execute();
try {
$stmt->fetch(); // should throw an error
$stmt->fetch();
echo "Got {$stmt->num_rows} for $name\n";
} catch (mysqli_sql_exception $e) {
echo $e->getMessage()."\n";
}
}
function testResultFetchRow(mysqli $mysqli, string $name) {
$mysqli->query("SET innodb_lock_wait_timeout = 1");
$mysqli->query("START TRANSACTION");
$query = "SELECT first FROM test WHERE first = 1 FOR UPDATE";
echo "Running query on $name\n";
$res = $mysqli->query($query, MYSQLI_USE_RESULT);
try {
$res->fetch_row();
$res->fetch_row();
echo "Got {$res->num_rows} for $name\n";
} catch(mysqli_sql_exception $e) {
echo $e->getMessage()."\n";
}
}
testStmtStoreResult($mysqli, 'first connection');
testStmtStoreResult($mysqli2, 'second connection');
$mysqli->close();
$mysqli2->close();
echo "\n";
// try it again for get_result
$mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
$mysqli2 = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
testStmtGetResult($mysqli, 'first connection');
testStmtGetResult($mysqli2, 'second connection');
$mysqli->close();
$mysqli2->close();
echo "\n";
// try it again with unprepared query
$mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
$mysqli2 = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
testNormalQuery($mysqli, 'first connection');
testNormalQuery($mysqli2, 'second connection');
$mysqli->close();
$mysqli2->close();
echo "\n";
// try it again with unprepared query
$mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
$mysqli2 = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
testStmtUseResult($mysqli, 'first connection');
testStmtUseResult($mysqli2, 'second connection');
$mysqli->close();
$mysqli2->close();
echo "\n";
// try it again using fetch_row on a result object
$mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
$mysqli2 = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
testResultFetchRow($mysqli, 'first connection');
testResultFetchRow($mysqli2, 'second connection');
$mysqli->close();
$mysqli2->close();
?>
--CLEAN--
<?php
require_once("clean_table.inc");
?>
--EXPECTF--
Running query on first connection
Got %d for first connection
Running query on second connection
Lock wait timeout exceeded; try restarting transaction
Running query on first connection
Got %d for first connection
Running query on second connection
Lock wait timeout exceeded; try restarting transaction
Running query on first connection
Got %d for first connection
Running query on second connection
Lock wait timeout exceeded; try restarting transaction
Running query on first connection
Got %d for first connection
Running query on second connection
Lock wait timeout exceeded; try restarting transaction
Running query on first connection
Got 1 for first connection
Running query on second connection
Warning: mysqli_result::fetch_row(): Error while reading a row in %s on line %d
Got 0 for second connection
+209 -250
View File
@@ -3,314 +3,285 @@ mysqli_report()
--SKIPIF--
<?php
require_once('skipif.inc');
require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
?>
--FILE--
<?php
require_once("connect.inc");
require_once("connect.inc");
if (true !== ($tmp = mysqli_report(-1)))
printf("[002] Expecting boolean/true even for invalid flags, got %s/%s\n", gettype($tmp), $tmp);
$tmp = NULL;
$link = NULL;
if (true !== ($tmp = mysqli_report(MYSQLI_REPORT_ERROR)))
printf("[003] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
if (NULL !== ($tmp = @mysqli_report()))
printf("[001] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
if (true !== ($tmp = mysqli_report(MYSQLI_REPORT_STRICT)))
printf("[004] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
if (true !== ($tmp = mysqli_report(-1)))
printf("[002] Expecting boolean/true even for invalid flags, got %s/%s\n", gettype($tmp), $tmp);
if (true !== ($tmp = mysqli_report(MYSQLI_REPORT_INDEX)))
printf("[005] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
if (true !== ($tmp = mysqli_report(MYSQLI_REPORT_ERROR)))
printf("[003] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
if (true !== ($tmp = mysqli_report(MYSQLI_REPORT_ALL)))
printf("[007] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
if (true !== ($tmp = mysqli_report(MYSQLI_REPORT_STRICT)))
printf("[004] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
if (true !== ($tmp = mysqli_report(MYSQLI_REPORT_OFF)))
printf("[008] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
if (true !== ($tmp = mysqli_report(MYSQLI_REPORT_INDEX)))
printf("[005] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
require('table.inc');
if (true !== ($tmp = mysqli_report(MYSQLI_REPORT_ALL)))
printf("[007] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
/*
Internal macro MYSQL_REPORT_ERROR
*/
mysqli_report(MYSQLI_REPORT_ERROR);
if (true !== ($tmp = mysqli_report(MYSQLI_REPORT_OFF)))
printf("[008] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
mysqli_multi_query($link, "BAR; FOO;");
mysqli_query($link, "FOO");
try {
mysqli_kill($link, -1);
} catch (\ValueError $e) {
echo $e->getMessage() . \PHP_EOL;
}
require('table.inc');
// mysqli_ping() cannot be tested, because one would need to cause an error inside the C function to test it
mysqli_prepare($link, "FOO");
mysqli_real_query($link, "FOO");
if (@mysqli_select_db($link, "Oh lord, let this be an unknown database name"))
printf("[009] select_db should have failed\n");
// mysqli_store_result() and mysqli_use_result() cannot be tested, because one would need to cause an error inside the C function to test it
/*
Internal macro MYSQL_REPORT_ERROR
*/
mysqli_report(MYSQLI_REPORT_ERROR);
mysqli_multi_query($link, "SELECT 1; FOO;");
mysqli_autocommit($link, true);
mysqli_commit($link);
mysqli_rollback($link);
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "SELECT id FROM test WHERE id > ?");
while(mysqli_more_results($link)) {
mysqli_next_result($link);
$res = mysqli_store_result($link);
}
mysqli_next_result($link);
mysqli_multi_query($link, "BAR; FOO;");
mysqli_query($link, "FOO");
mysqli_kill($link, -1);
$stmt = mysqli_prepare($link, "SELECT 1");
mysqli_stmt_attr_set($stmt, MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_FOR_UPDATE);
// mysqli_ping() cannot be tested, because one would need to cause an error inside the C function to test it
mysqli_prepare($link, "FOO");
mysqli_real_query($link, "FOO");
if (@mysqli_select_db($link, "Oh lord, let this be an unknown database name"))
printf("[009] select_db should have failed\n");
// mysqli_store_result() and mysqli_use_result() cannot be tested, because one would need to cause an error inside the C function to test it
// Check that none of the above would have caused any error messages if MYSQL_REPORT_ERROR would
// not have been set. If that would be the case, the test would be broken.
mysqli_report(MYSQLI_REPORT_OFF);
mysqli_multi_query($link, "BAR; FOO;");
mysqli_query($link, "FOO");
try {
mysqli_kill($link, -1);
} catch (\ValueError $e) {
echo $e->getMessage() . \PHP_EOL;
}
mysqli_prepare($link, "FOO");
mysqli_real_query($link, "FOO");
mysqli_select_db($link, "Oh lord, let this be an unknown database name");
// Check that none of the above would have caused any error messages if MYSQL_REPORT_ERROR would
// not have been set. If that would be the case, the test would be broken.
mysqli_report(MYSQLI_REPORT_OFF);
mysqli_multi_query($link, "SELECT 1; FOO;");
mysqli_autocommit($link, true);
mysqli_commit($link);
mysqli_rollback($link);
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "SELECT id FROM test WHERE id > ?");
while(mysqli_more_results($link)) {
mysqli_next_result($link);
$res = mysqli_store_result($link);
}
mysqli_next_result($link);
mysqli_multi_query($link, "BAR; FOO;");
mysqli_query($link, "FOO");
mysqli_kill($link, -1);
mysqli_prepare($link, "FOO");
mysqli_real_query($link, "FOO");
mysqli_select_db($link, "Oh lord, let this be an unknown database name");
$stmt = mysqli_prepare($link, "SELECT 1");
mysqli_stmt_attr_set($stmt, MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_FOR_UPDATE);
/*
Internal macro MYSQL_REPORT_STMT_ERROR
*/
/*
Internal macro MYSQL_REPORT_STMT_ERROR
*/
mysqli_report(MYSQLI_REPORT_ERROR);
mysqli_report(MYSQLI_REPORT_ERROR);
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "FOO");
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "FOO");
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "SELECT id FROM test WHERE id > ?");
$id = 1;
mysqli_kill($link, mysqli_thread_id($link));
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_close($stmt);
mysqli_close($link);
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "SELECT id FROM test WHERE id > ?");
$id = 1;
mysqli_kill($link, mysqli_thread_id($link));
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_close($stmt);
mysqli_close($link);
/* mysqli_stmt_execute() = mysql_stmt_execute cannot be tested from PHP */
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
printf("[008] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "SELECT id FROM test WHERE id > ?");
$id = 1;
mysqli_stmt_bind_param($stmt, "i", $id);
// mysqli_kill($link, mysqli_thread_id($link));
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
mysqli_close($link);
/* mysqli_stmt_execute() = mysql_stmt_execute cannot be tested from PHP */
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
printf("[008] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "SELECT id FROM test WHERE id > ?");
$id = 1;
mysqli_stmt_bind_param($stmt, "i", $id);
// mysqli_kill($link, mysqli_thread_id($link));
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
mysqli_close($link);
/* mysqli_kill() "trick" does not work for any of the following because of an E_COMMANDS_OUT_OF_SYNC */
/* mysqli_stmt_bind_result() = mysql_stmt_bind_result() cannot be tested from PHP */
/* mysqli_stmt_fetch() = mysql_stmt_fetch() cannot be tested from PHP */
/* mysqli_stmt_result_metadata() = mysql_stmt_result_metadata() cannot be tested from PHP */
/* mysqli_stmt_store_result() = mysql_stmt_store_result() cannot be tested from PHP */
/* mysqli_kill() "trick" does not work for any of the following because of an E_COMMANDS_OUT_OF_SYNC */
/* mysqli_stmt_bind_result() = mysql_stmt_bind_result() cannot be tested from PHP */
/* mysqli_stmt_fetch() = mysql_stmt_fetch() cannot be tested from PHP */
/* mysqli_stmt_result_metadata() = mysql_stmt_result_metadata() cannot be tested from PHP */
/* mysqli_stmt_store_result() = mysql_stmt_store_result() cannot be tested from PHP */
// Check
mysqli_report(MYSQLI_REPORT_OFF);
// Check
mysqli_report(MYSQLI_REPORT_OFF);
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
printf("[010] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "FOO");
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
printf("[010] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "FOO");
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "SELECT id FROM test WHERE id > ?");
$id = 1;
mysqli_kill($link, mysqli_thread_id($link));
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_close($stmt);
mysqli_close($link);
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "SELECT id FROM test WHERE id > ?");
$id = 1;
mysqli_kill($link, mysqli_thread_id($link));
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_close($stmt);
mysqli_close($link);
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
printf("[011] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "SELECT id FROM test WHERE id > ?");
$id = 1;
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_kill($link, mysqli_thread_id($link));
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
mysqli_close($link);
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
printf("[011] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "SELECT id FROM test WHERE id > ?");
$id = 1;
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_kill($link, mysqli_thread_id($link));
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
mysqli_close($link);
/*
MYSQLI_REPORT_STRICT
/*
MYSQLI_REPORT_STRICT
MYSQLI_REPORT_STRICT --->
php_mysqli_report_error() ->
MYSQLI_REPORT_MYSQL_ERROR,
MYSQLI_REPORT_STMT_ERROR ->
already tested
MYSQLI_REPORT_STRICT --->
php_mysqli_report_error() ->
MYSQLI_REPORT_MYSQL_ERROR,
MYSQLI_REPORT_STMT_ERROR ->
already tested
php_mysqli_throw_sql_exception() ->
my_mysqli_real_connect()
my_mysqli_connect()
php_mysqli_throw_sql_exception() ->
my_mysqli_real_connect()
my_mysqli_connect()
can't be tested: mysqli_query() via mysql_use_result()/mysql_store_result()
*/
mysqli_report(MYSQLI_REPORT_OFF);
mysqli_report(MYSQLI_REPORT_STRICT);
can't be tested: mysqli_query() via mysql_use_result()/mysql_store_result()
*/
mysqli_report(MYSQLI_REPORT_OFF);
mysqli_report(MYSQLI_REPORT_STRICT);
try {
try {
if ($link = my_mysqli_connect($host, $user . 'unknown_really', $passwd . 'non_empty', $db, $port, $socket))
printf("[012] Can connect to the server using host=%s, user=%s, passwd=***non_empty, dbname=%s, port=%s, socket=%s\n",
$host, $user . 'unknown_really', $db, $port, $socket);
mysqli_close($link);
if ($link = my_mysqli_connect($host, $user . 'unknown_really', $passwd . 'non_empty', $db, $port, $socket))
printf("[012] Can connect to the server using host=%s, user=%s, passwd=***non_empty, dbname=%s, port=%s, socket=%s\n",
$host, $user . 'unknown_really', $db, $port, $socket);
mysqli_close($link);
} catch (mysqli_sql_exception $e) {
printf("[013] %s\n", $e->getMessage());
}
} catch (mysqli_sql_exception $e) {
printf("[013] %s\n", $e->getMessage());
}
try {
if (!$link = mysqli_init())
printf("[014] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
try {
if (!$link = mysqli_init())
printf("[014] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
if ($link = my_mysqli_real_connect($link, $host, $user . 'unknown_really', $passwd . 'non_empty', $db, $port, $socket))
printf("[015] Can connect to the server using host=%s, user=%s, passwd=***non_empty, dbname=%s, port=%s, socket=%s\n",
$host, $user . 'unknown_really', $db, $port, $socket);
mysqli_close($link);
} catch (mysqli_sql_exception $e) {
printf("[016] %s\n", $e->getMessage());
}
if ($link = my_mysqli_real_connect($link, $host, $user . 'unknown_really', $passwd . 'non_empty', $db, $port, $socket))
printf("[015] Can connect to the server using host=%s, user=%s, passwd=***non_empty, dbname=%s, port=%s, socket=%s\n",
$host, $user . 'unknown_really', $db, $port, $socket);
mysqli_close($link);
} catch (mysqli_sql_exception $e) {
printf("[016] %s\n", $e->getMessage());
}
/*
MYSQLI_REPORT_INDEX --->
mysqli_query()
mysqli_stmt_execute()
mysqli_prepare()
mysqli_real_query()
mysqli_store_result()
mysqli_use_result()
/*
MYSQLI_REPORT_INDEX --->
mysqli_query()
mysqli_stmt_execute()
mysqli_prepare()
mysqli_real_query()
mysqli_store_result()
mysqli_use_result()
No test, because of to many prerequisites:
- Server needs to be started with and
--log-slow-queries --log-queries-not-using-indexes
- query must cause the warning on all MySQL versions
No test, because of to many prerequisites:
- Server needs to be started with and
--log-slow-queries --log-queries-not-using-indexes
- query must cause the warning on all MySQL versions
TODO:
*/
$log_slow_queries = false;
$log_queries_not_using_indexes = false;
mysqli_report(MYSQLI_REPORT_OFF);
mysqli_report(MYSQLI_REPORT_INDEX);
TODO:
*/
$log_slow_queries = false;
$log_queries_not_using_indexes = false;
mysqli_report(MYSQLI_REPORT_OFF);
mysqli_report(MYSQLI_REPORT_INDEX);
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
printf("[017] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
printf("[017] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
if (mysqli_get_server_version($link) <= 50600) {
// this might cause a warning - no index used
if (!$res = @mysqli_query($link, "SHOW VARIABLES LIKE 'log_slow_queries'"))
printf("[018] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (mysqli_get_server_version($link) <= 50600) {
// this might cause a warning - no index used
if (!$res = @mysqli_query($link, "SHOW VARIABLES LIKE 'log_slow_queries'"))
printf("[018] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!$row = mysqli_fetch_assoc($res))
printf("[019] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!$row = mysqli_fetch_assoc($res))
printf("[019] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
$log_slow_query = ('ON' == $row['Value']);
$log_slow_query = ('ON' == $row['Value']);
if (mysqli_get_server_version($link) >= 50111) {
// this might cause a warning - no index used
if (!$res = @mysqli_query($link, "SHOW VARIABLES LIKE 'log_queries_not_using_indexes'"))
printf("[020] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (mysqli_get_server_version($link) >= 50111) {
// this might cause a warning - no index used
if (!$res = @mysqli_query($link, "SHOW VARIABLES LIKE 'log_queries_not_using_indexes'"))
printf("[020] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!$row = mysqli_fetch_assoc($res))
printf("[021] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!$row = mysqli_fetch_assoc($res))
printf("[021] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
$log_queries_not_using_indexes = ('ON' == $row['Value']);
$log_queries_not_using_indexes = ('ON' == $row['Value']);
if ($log_slow_queries && $log_queries_not_using_indexes) {
if ($log_slow_queries && $log_queries_not_using_indexes) {
for ($i = 100; $i < 20000; $i++) {
if (!mysqli_query($link, "INSERT INTO test(id, label) VALUES ($i, 'z')"))
printf("[022 - %d] [%d] %s\n", $i - 99, mysqli_errno($link), mysqli_error($link));
}
for ($i = 100; $i < 20000; $i++) {
if (!mysqli_query($link, "INSERT INTO test(id, label) VALUES ($i, 'z')"))
printf("[022 - %d] [%d] %s\n", $i - 99, mysqli_errno($link), mysqli_error($link));
}
// this might cause a warning - no index used
if (!$res = @mysqli_query($link, "SELECT id, label FROM test WHERE id = 1323"))
printf("[023] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
// this might cause a warning - no index used
if (!$res = @mysqli_query($link, "SELECT id, label FROM test WHERE id = 1323"))
printf("[023] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
mysqli_free_result($res);
}
}
}
mysqli_free_result($res);
}
}
}
// Maybe we've provoked an index message, maybe not.
// All we can do is make a few dummy calls to ensure that all codes gets executed which
// checks the flag. Functions to check: mysqli_query() - done above,
// mysqli_stmt_execute(), mysqli_prepare(), mysqli_real_query(), mysqli_store_result()
// mysqli_use_result(), mysqli_thread_safe(), mysqli_thread_id()
mysqli_report(MYSQLI_REPORT_OFF);
mysqli_close($link);
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
printf("[024] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
// Maybe we've provoked an index message, maybe not.
// All we can do is make a few dummy calls to ensure that all codes gets executed which
// checks the flag. Functions to check: mysqli_query() - done above,
// mysqli_stmt_execute(), mysqli_prepare(), mysqli_real_query(), mysqli_store_result()
// mysqli_use_result(), mysqli_thread_safe(), mysqli_thread_id()
mysqli_report(MYSQLI_REPORT_OFF);
mysqli_close($link);
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
printf("[024] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
if (!$stmt = mysqli_stmt_init($link))
printf("[025] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!$stmt = mysqli_stmt_init($link))
printf("[025] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test'))
printf("[026] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test'))
printf("[026] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
if (!mysqli_stmt_execute($stmt))
printf("[027] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
if (!mysqli_stmt_execute($stmt))
printf("[027] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
mysqli_stmt_close($stmt);
mysqli_stmt_close($stmt);
if (!mysqli_real_query($link, 'SELECT label, id FROM test'))
printf("[028] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!mysqli_real_query($link, 'SELECT label, id FROM test'))
printf("[028] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!$res = mysqli_use_result($link))
printf("[029] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!$res = mysqli_use_result($link))
printf("[029] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
mysqli_free_result($res);
mysqli_free_result($res);
if (!mysqli_real_query($link, 'SELECT label, id FROM test'))
printf("[030] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!mysqli_real_query($link, 'SELECT label, id FROM test'))
printf("[030] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!$res = mysqli_store_result($link))
printf("[031] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!$res = mysqli_store_result($link))
printf("[031] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
mysqli_free_result($res);
mysqli_free_result($res);
if (!$stmt = mysqli_prepare($link, 'SELECT id * 3 FROM test'))
printf("[032] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
else
mysqli_stmt_close($stmt);
if (!$stmt = mysqli_prepare($link, 'SELECT id * 3 FROM test'))
printf("[032] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
else
mysqli_stmt_close($stmt);
if (!mysqli_query($link, "INSERT INTO test(id, label) VALUES (100, 'z')", MYSQLI_USE_RESULT) ||
!mysqli_query($link, 'DELETE FROM test WHERE id > 50', MYSQLI_USE_RESULT))
printf("[033] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!mysqli_query($link, "INSERT INTO test(id, label) VALUES (100, 'z')", MYSQLI_USE_RESULT) ||
!mysqli_query($link, 'DELETE FROM test WHERE id > 50', MYSQLI_USE_RESULT))
printf("[033] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
$tmp = mysqli_thread_safe($link);
$tmp = mysqli_thread_id($link);
$tmp = mysqli_thread_id($link);
mysqli_close($link);
print "done!";
mysqli_close($link);
print "done!";
?>
--CLEAN--
<?php
require_once("clean_table.inc");
require_once("clean_table.inc");
?>
--EXPECTF--
Warning: mysqli_multi_query(): (%d/%d): You have an error in your SQL syntax; check the manual that corresponds to your %s server version for the right syntax to use near 'BAR; FOO' at line 1 in %s on line %d
@@ -323,18 +294,6 @@ Warning: mysqli_prepare(): (%d/%d): You have an error in your SQL syntax; check
Warning: mysqli_real_query(): (%d/%d): You have an error in your SQL syntax; check the manual that corresponds to your %s server version for the right syntax to use near 'FOO' at line 1 in %s on line %d
Warning: mysqli_autocommit(): (%s/%d): Commands out of sync; you can't run this command now in %s on line %d
Warning: mysqli_commit(): (%s/%d): Commands out of sync; you can't run this command now in %s on line %d
Warning: mysqli_rollback(): (%s/%d): Commands out of sync; you can't run this command now in %s on line %d
Warning: mysqli_stmt_prepare(): (%s/%d): Commands out of sync; you can't run this command now in %s on line %d
Warning: mysqli_store_result(): (%s/%d): You have an error in your SQL syntax; check the manual that corresponds to your %s server version for the right syntax to use near 'FOO' at line 1 in %s on line %d
Warning: mysqli_stmt_attr_set(): (%s/%d): Not implemented in %s on line %d
Warning: mysqli_kill(): processid should have positive value in %s on line %d
Warning: mysqli_stmt_prepare(): (%d/%d): You have an error in your SQL syntax; check the manual that corresponds to your %s server version for the right syntax to use near 'FOO' at line 1 in %s on line %d
+18 -65
View File
@@ -124,77 +124,32 @@ if (!function_exists('mysqli_stmt_get_result'))
if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $id, $label)))
printf("[035] Expecting boolean/true, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
// get_result cannot be used in PS cursor mode
if (!$stmt = mysqli_stmt_init($link))
printf("[030] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!is_object($tmp = $result = mysqli_stmt_get_result($stmt)))
printf("[036] Expecting array, got %s/%s, [%d] %s\n",
gettype($tmp), var_export($tmp, 1),
mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
if (!mysqli_stmt_prepare($stmt, "SELECT id, label FROM test ORDER BY id LIMIT 2"))
printf("[031] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
if (false !== ($tmp = mysqli_stmt_fetch($stmt)))
printf("[037] Expecting boolean/false, got %s/%s, [%d] %s\n",
gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
if (!mysqli_stmt_attr_set($stmt, MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY))
printf("[032] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
if (!mysqli_stmt_execute($stmt))
printf("[033] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$res = mysqli_stmt_get_result($stmt);
// we expect no segfault if we try to fetch a row because get_result should throw an error or return false
mysqli_fetch_assoc($res);
} catch (\mysqli_sql_exception $e) {
echo $e->getMessage() . "\n";
}
try {
$res = $stmt->get_result();
// we expect no segfault if we try to fetch a row because get_result should throw an error or return false
$res->fetch_assoc();
} catch (\mysqli_sql_exception $e) {
echo $e->getMessage() . "\n";
}
mysqli_report(MYSQLI_REPORT_OFF);
if (!$stmt = mysqli_stmt_init($link))
printf("[034] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!mysqli_stmt_prepare($stmt, "SELECT id, label FROM test ORDER BY id LIMIT 2"))
printf("[035] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
if (!mysqli_stmt_execute($stmt))
printf("[036] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
$id = NULL;
$label = NULL;
if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $id, $label)))
printf("[037] Expecting boolean/true, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
if (!is_object($tmp = $result = mysqli_stmt_get_result($stmt)))
printf("[038] Expecting array, got %s/%s, [%d] %s\n",
gettype($tmp), var_export($tmp, 1),
mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
if (false !== ($tmp = mysqli_stmt_fetch($stmt)))
printf("[039] Expecting boolean/false, got %s/%s, [%d] %s\n",
gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
printf("[040] [%d] [%s]\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
printf("[041] [%d] [%s]\n", mysqli_errno($link), mysqli_error($link));
while ($row = mysqli_fetch_assoc($result)) {
var_dump($row);
}
mysqli_free_result($result);
printf("[038] [%d] [%s]\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
printf("[039] [%d] [%s]\n", mysqli_errno($link), mysqli_error($link));
while ($row = mysqli_fetch_assoc($result)) {
var_dump($row);
}
mysqli_free_result($result);
if (!mysqli_kill($link, mysqli_thread_id($link)))
printf("[042] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
printf("[040] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (false !== ($tmp = mysqli_stmt_get_result($stmt)))
printf("[043] Expecting false, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
printf("[041] Expecting false, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
mysqli_stmt_close($stmt);
if (false !== ($tmp = mysqli_stmt_fetch($stmt)))
printf("[044] Expecting false, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
printf("[042] Expecting false, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
mysqli_close($link);
@@ -213,10 +168,8 @@ Warning: mysqli_stmt_fetch(): invalid object or resource mysqli_stmt
Warning: mysqli_stmt_get_result(): invalid object or resource mysqli_stmt
in %s on line %d
mysqli_stmt_get_result() cannot be used with cursors
get_result() cannot be used with cursors
[040] [2014] [Commands out of sync; you can't run this command now]
[041] [0] []
[038] [2014] [Commands out of sync; you can't run this command now]
[039] [0] []
array(2) {
["id"]=>
int(1)
+6 -19
View File
@@ -121,11 +121,9 @@ MYSQLND_METHOD(mysqlnd_stmt, store_result)(MYSQLND_STMT * const s)
stmt->state = MYSQLND_STMT_USE_OR_STORE_CALLED;
} else {
COPY_CLIENT_ERROR(conn->error_info, result->stored_data->error_info);
COPY_CLIENT_ERROR(stmt->error_info, result->stored_data->error_info);
stmt->result->m.free_result_contents(stmt->result);
stmt->result = NULL;
stmt->state = MYSQLND_STMT_PREPARED;
DBG_RETURN(NULL);
}
DBG_RETURN(result);
@@ -153,19 +151,13 @@ MYSQLND_METHOD(mysqlnd_stmt, get_result)(MYSQLND_STMT * const s)
}
if (stmt->cursor_exists) {
/* Prepared statement cursors are not supported as of yet */
char * msg;
mnd_sprintf(&msg, 0, "%s() cannot be used with cursors", get_active_function_name());
SET_CLIENT_ERROR(stmt->error_info, CR_NOT_IMPLEMENTED, UNKNOWN_SQLSTATE, msg);
if (msg) {
mnd_sprintf_free(msg);
}
DBG_RETURN(NULL);
/* Silently convert buffered to unbuffered, for now */
DBG_RETURN(s->m->use_result(s));
}
/* Nothing to store for UPSERT/LOAD DATA*/
if (GET_CONNECTION_STATE(&conn->state) != CONN_FETCHING_DATA || stmt->state != MYSQLND_STMT_WAITING_USE_OR_STORE) {
SET_CLIENT_ERROR(stmt->error_info, CR_COMMANDS_OUT_OF_SYNC, UNKNOWN_SQLSTATE, mysqlnd_out_of_sync);
SET_CLIENT_ERROR(conn->error_info, CR_COMMANDS_OUT_OF_SYNC, UNKNOWN_SQLSTATE, mysqlnd_out_of_sync);
DBG_RETURN(NULL);
}
@@ -186,7 +178,7 @@ MYSQLND_METHOD(mysqlnd_stmt, get_result)(MYSQLND_STMT * const s)
break;
}
if (result->m.store_result(result, conn, MYSQLND_STORE_PS | MYSQLND_STORE_NO_COPY)) {
if ((result = result->m.store_result(result, conn, MYSQLND_STORE_PS | MYSQLND_STORE_NO_COPY))) {
UPSERT_STATUS_SET_AFFECTED_ROWS(stmt->upsert_status, result->stored_data->row_count);
stmt->state = MYSQLND_STMT_PREPARED;
result->type = MYSQLND_RES_PS_BUF;
@@ -417,7 +409,6 @@ MYSQLND_METHOD(mysqlnd_stmt, prepare)(MYSQLND_STMT * const s, const char * const
ret = conn->command->stmt_prepare(conn, query_string);
if (FAIL == ret) {
COPY_CLIENT_ERROR(stmt->error_info, *conn->error_info);
goto fail;
}
}
@@ -890,13 +881,9 @@ mysqlnd_stmt_fetch_row_unbuffered(MYSQLND_RES * result, void * param, const unsi
} else if (ret == FAIL) {
if (row_packet->error_info.error_no) {
COPY_CLIENT_ERROR(conn->error_info, row_packet->error_info);
if (stmt) {
COPY_CLIENT_ERROR(stmt->error_info, row_packet->error_info);
}
}
if (GET_CONNECTION_STATE(&conn->state) != CONN_QUIT_SENT) {
SET_CONNECTION_STATE(&conn->state, CONN_READY);
COPY_CLIENT_ERROR(stmt->error_info, row_packet->error_info);
}
SET_CONNECTION_STATE(&conn->state, CONN_READY);
result->unbuf->eof_reached = TRUE; /* so next time we won't get an error */
} else if (row_packet->eof) {
DBG_INF("EOF");
+3 -7
View File
@@ -743,9 +743,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row_c)(MYSQLND_RES * result, voi
COPY_CLIENT_ERROR(conn->error_info, row_packet->error_info);
DBG_ERR_FMT("errorno=%u error=%s", row_packet->error_info.error_no, row_packet->error_info.error);
}
if (GET_CONNECTION_STATE(&conn->state) != CONN_QUIT_SENT) {
SET_CONNECTION_STATE(&conn->state, CONN_READY);
}
SET_CONNECTION_STATE(&conn->state, CONN_READY);
result->unbuf->eof_reached = TRUE; /* so next time we won't get an error */
} else if (row_packet->eof) {
/* Mark the connection as usable again */
@@ -883,9 +881,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void
COPY_CLIENT_ERROR(conn->error_info, row_packet->error_info);
DBG_ERR_FMT("errorno=%u error=%s", row_packet->error_info.error_no, row_packet->error_info.error);
}
if (GET_CONNECTION_STATE(&conn->state) != CONN_QUIT_SENT) {
SET_CONNECTION_STATE(&conn->state, CONN_READY);
}
SET_CONNECTION_STATE(&conn->state, CONN_READY);
result->unbuf->eof_reached = TRUE; /* so next time we won't get an error */
} else if (row_packet->eof) {
/* Mark the connection as usable again */
@@ -911,7 +907,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void
result->memory_pool->checkpoint = checkpoint;
DBG_INF_FMT("ret=%s fetched=%u", ret == PASS? "PASS":"FAIL", *fetched_anything);
DBG_RETURN(ret);
DBG_RETURN(PASS);
}
/* }}} */
+5 -19
View File
@@ -1354,15 +1354,6 @@ premature_end:
}
/* }}} */
/* Like SET_CLIENT_ERROR, but for packet error_info. The type is the same,
* but only some parts of it are used. */
static void set_packet_error(
MYSQLND_ERROR_INFO *info, unsigned err_no, const char *sqlstate, const char *error)
{
info->error_no = err_no;
strlcpy(info->sqlstate, sqlstate, sizeof(info->sqlstate));
strlcpy(info->error, error, sizeof(info->error));
}
/* {{{ php_mysqlnd_read_row_ex */
static enum_func_status
@@ -1370,7 +1361,6 @@ php_mysqlnd_read_row_ex(MYSQLND_PFC * pfc,
MYSQLND_VIO * vio,
MYSQLND_STATS * stats,
MYSQLND_ERROR_INFO * error_info,
MYSQLND_CONNECTION_STATE * connection_state,
MYSQLND_MEMORY_POOL * pool,
MYSQLND_ROW_BUFFER * buffer,
size_t * const data_size)
@@ -1399,8 +1389,6 @@ php_mysqlnd_read_row_ex(MYSQLND_PFC * pfc,
*data_size = 0;
if (UNEXPECTED(FAIL == mysqlnd_read_header(pfc, vio, &header, stats, error_info))) {
ret = FAIL;
SET_CONNECTION_STATE(connection_state, CONN_QUIT_SENT);
set_packet_error(error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone);
} else {
*data_size += header.size;
buffer->ptr = pool->get_chunk(pool, *data_size + prealloc_more_bytes);
@@ -1408,8 +1396,7 @@ php_mysqlnd_read_row_ex(MYSQLND_PFC * pfc,
if (UNEXPECTED(PASS != (ret = pfc->data->m.receive(pfc, vio, p, header.size, stats, error_info)))) {
DBG_ERR("Empty row packet body");
SET_CONNECTION_STATE(connection_state, CONN_QUIT_SENT);
set_packet_error(error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone);
php_error(E_WARNING, "Empty row packet body");
} else {
while (header.size >= MYSQLND_MAX_PACKET_SIZE) {
if (FAIL == mysqlnd_read_header(pfc, vio, &header, stats, error_info)) {
@@ -1438,8 +1425,7 @@ php_mysqlnd_read_row_ex(MYSQLND_PFC * pfc,
if (PASS != (ret = pfc->data->m.receive(pfc, vio, p, header.size, stats, error_info))) {
DBG_ERR("Empty row packet body");
SET_CONNECTION_STATE(connection_state, CONN_QUIT_SENT);
set_packet_error(error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone);
php_error(E_WARNING, "Empty row packet body");
break;
}
}
@@ -1734,8 +1720,8 @@ php_mysqlnd_rowp_read_text_protocol_c(MYSQLND_ROW_BUFFER * row_buffer, zval * fi
static enum_func_status
php_mysqlnd_rowp_read(MYSQLND_CONN_DATA * conn, void * _packet)
{
MYSQLND_PACKET_ROW *packet = (MYSQLND_PACKET_ROW *) _packet;
MYSQLND_ERROR_INFO * error_info = &packet->error_info;
MYSQLND_PACKET_ROW *packet= (MYSQLND_PACKET_ROW *) _packet;
MYSQLND_ERROR_INFO * error_info = conn->error_info;
MYSQLND_PFC * pfc = conn->protocol_frame_codec;
MYSQLND_VIO * vio = conn->vio;
MYSQLND_STATS * stats = conn->stats;
@@ -1745,7 +1731,7 @@ php_mysqlnd_rowp_read(MYSQLND_CONN_DATA * conn, void * _packet)
DBG_ENTER("php_mysqlnd_rowp_read");
ret = php_mysqlnd_read_row_ex(pfc, vio, stats, error_info, &conn->state,
ret = php_mysqlnd_read_row_ex(pfc, vio, stats, error_info,
packet->result_set_memory_pool, &packet->row_buffer, &data_size);
if (FAIL == ret) {
goto end;
+4 -22
View File
@@ -1808,9 +1808,6 @@ static void php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
if (rc == SQL_SUCCESS_WITH_INFO) {
ZVAL_STRINGL(&tmp, buf, result->longreadlen);
} else if (rc != SQL_SUCCESS) {
php_error_docref(NULL, E_WARNING, "Cannot get data of column #%d (retcode %u)", i + 1, rc);
ZVAL_FALSE(&tmp);
} else if (result->values[i].vallen == SQL_NULL_DATA) {
ZVAL_NULL(&tmp);
break;
@@ -1964,9 +1961,6 @@ PHP_FUNCTION(odbc_fetch_into)
}
if (rc == SQL_SUCCESS_WITH_INFO) {
ZVAL_STRINGL(&tmp, buf, result->longreadlen);
} else if (rc != SQL_SUCCESS) {
php_error_docref(NULL, E_WARNING, "Cannot get data of column #%d (retcode %u)", i + 1, rc);
ZVAL_FALSE(&tmp);
} else if (result->values[i].vallen == SQL_NULL_DATA) {
ZVAL_NULL(&tmp);
break;
@@ -2204,13 +2198,12 @@ PHP_FUNCTION(odbc_result)
RETURN_FALSE;
}
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
zend_string_efree(field_str);
php_error_docref(NULL, E_WARNING, "Cannot get data of column #%d (retcode %u)", field_ind + 1, rc);
RETURN_FALSE;
} else if (result->values[field_ind].vallen == SQL_NULL_DATA) {
if (result->values[field_ind].vallen == SQL_NULL_DATA) {
zend_string_efree(field_str);
RETURN_NULL();
} else if (rc == SQL_NO_DATA_FOUND) {
zend_string_efree(field_str);
RETURN_FALSE;
}
/* Reduce fieldlen by 1 if we have char data. One day we might
have binary strings... */
@@ -2256,12 +2249,6 @@ PHP_FUNCTION(odbc_result)
RETURN_FALSE;
}
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
php_error_docref(NULL, E_WARNING, "Cannot get data of column #%d (retcode %u)", field_ind + 1, rc);
efree(field);
RETURN_FALSE;
}
if (result->values[field_ind].vallen == SQL_NULL_DATA) {
efree(field);
RETURN_NULL();
@@ -2371,11 +2358,6 @@ PHP_FUNCTION(odbc_result_all)
}
if (rc == SQL_SUCCESS_WITH_INFO) {
PHPWRITE(buf, result->longreadlen);
} else if (rc != SQL_SUCCESS) {
php_printf("</td></tr></table>");
php_error_docref(NULL, E_WARNING, "Cannot get data of column #%zu (retcode %u)", i + 1, rc);
efree(buf);
RETURN_FALSE;
} else if (result->values[i].vallen == SQL_NULL_DATA) {
php_printf("<td>NULL</td>");
break;
-62
View File
@@ -1,62 +0,0 @@
--TEST--
Bug #44618 (Fetching may rely on uninitialized data)
--SKIPIF--
<?php include 'skipif.inc'; ?>
--FILE--
<?php
include __DIR__ . "/config.inc";
$conn = odbc_connect($dsn, $user, $pass, SQL_CUR_USE_ODBC);
odbc_exec($conn, "CREATE TABLE bug44618(ID INT, real1 REAL, text1 TEXT)");
odbc_exec($conn, "INSERT INTO bug44618 VALUES (1, 10.0199995, 'testing 1,2,3')");
$result = odbc_exec($conn, "SELECT * FROM bug44618");
var_dump(odbc_fetch_array($result));
$result = null;
$result = odbc_exec($conn, "SELECT * FROM bug44618");
odbc_fetch_into($result, $array);
var_dump($array);
$result = null;
$result = odbc_exec($conn, "SELECT * FROM bug44618");
odbc_fetch_row($result);
var_dump(odbc_result($result, "text1"));
$result = null;
$result = odbc_exec($conn, "SELECT * FROM bug44618");
odbc_result_all($result);
$result = null;
?>
--CLEAN--
<?php
include __DIR__ . "/config.inc";
$conn = odbc_connect($dsn, $user, $pass);
odbc_exec($conn, "DROP TABLE bug44618");
?>
--EXPECTF--
Warning: odbc_fetch_array(): Cannot get data of column #3 (retcode 100) in %s on line %d
array(3) {
["ID"]=>
string(1) "1"
["real1"]=>
string(5) "10.02"
["text1"]=>
bool(false)
}
Warning: odbc_fetch_into(): Cannot get data of column #3 (retcode 100) in %s on line %d
array(3) {
[0]=>
string(1) "1"
[1]=>
string(5) "10.02"
[2]=>
bool(false)
}
Warning: odbc_result(): Cannot get data of column #3 (retcode 100) in %s on line %d
bool(false)
<table><tr><th>ID</th><th>real1</th><th>text1</th></tr>
<tr><td>1</td><td>10.02</td><td></td></tr></table>
Warning: odbc_result_all(): Cannot get data of column #3 (retcode 100) in %s on line %d
+3 -13
View File
@@ -287,9 +287,8 @@ int ssa_verify_integrity(zend_op_array *op_array, zend_ssa *ssa, const char *ext
/* Phis */
FOREACH_PHI(phi) {
unsigned num_sources = NUM_PHI_SOURCES(phi);
for (i = 0; i < num_sources; i++) {
int source = phi->sources[i];
int source;
FOREACH_PHI_SOURCE(phi, source) {
if (source < 0) {
FAIL(VARFMT " negative source\n", VAR(phi->ssa_var));
}
@@ -299,16 +298,7 @@ int ssa_verify_integrity(zend_op_array *op_array, zend_ssa *ssa, const char *ext
if (ssa->vars[source].var != ssa->vars[phi->ssa_var].var) {
FAIL(VARFMT " source of phi for " VARFMT "\n", VAR(source), VAR(phi->ssa_var));
}
if (phi->use_chains[i]) {
int j;
for (j = i + 1; j < num_sources; j++) {
if (phi->sources[j] == source && phi->use_chains[j]) {
FAIL("use chain for source " VARFMT " of phi " VARFMT
" at %d despite earlier use\n", VAR(source), VAR(phi->ssa_var), j);
}
}
}
}
} FOREACH_PHI_SOURCE_END();
if (ssa->vars[phi->ssa_var].definition_phi != phi) {
FAIL(VARFMT " does not define this phi\n", VAR(phi->ssa_var));
}
+15 -19
View File
@@ -2106,28 +2106,24 @@ static uint32_t assign_dim_result_type(
tmp |= MAY_BE_RC1 | MAY_BE_RCN;
}
if (tmp & MAY_BE_ARRAY) {
/* Only add key type if we have a value type. We want to maintain the invariant that a
* key type exists iff a value type exists even in dead code that may use empty types. */
if (value_type & (MAY_BE_ANY|MAY_BE_UNDEF)) {
if (value_type & MAY_BE_UNDEF) {
tmp |= MAY_BE_ARRAY_OF_NULL;
}
if (dim_op_type == IS_UNUSED) {
if (value_type & MAY_BE_UNDEF) {
tmp |= MAY_BE_ARRAY_OF_NULL;
}
if (dim_op_type == IS_UNUSED) {
tmp |= MAY_BE_ARRAY_KEY_LONG;
} else {
if (dim_type & (MAY_BE_LONG|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_RESOURCE|MAY_BE_DOUBLE)) {
tmp |= MAY_BE_ARRAY_KEY_LONG;
} else {
if (dim_type & (MAY_BE_LONG|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_RESOURCE|MAY_BE_DOUBLE)) {
}
if (dim_type & MAY_BE_STRING) {
tmp |= MAY_BE_ARRAY_KEY_STRING;
if (dim_op_type != IS_CONST) {
// FIXME: numeric string
tmp |= MAY_BE_ARRAY_KEY_LONG;
}
if (dim_type & MAY_BE_STRING) {
tmp |= MAY_BE_ARRAY_KEY_STRING;
if (dim_op_type != IS_CONST) {
// FIXME: numeric string
tmp |= MAY_BE_ARRAY_KEY_LONG;
}
}
if (dim_type & (MAY_BE_UNDEF|MAY_BE_NULL)) {
tmp |= MAY_BE_ARRAY_KEY_STRING;
}
}
if (dim_type & (MAY_BE_UNDEF|MAY_BE_NULL)) {
tmp |= MAY_BE_ARRAY_KEY_STRING;
}
}
/* Only add value type if we have a key type. It might be that the key type is illegal
+5 -3
View File
@@ -1298,7 +1298,11 @@ static inline void zend_ssa_remove_phi_source(zend_ssa *ssa, zend_ssa_phi *phi,
for (j = 0; j < predecessors_count; j++) {
if (phi->sources[j] == var_num) {
if (j < pred_offset) {
ZEND_ASSERT(next_phi == NULL);
if (next_phi == NULL) {
next_phi = phi->use_chains[pred_offset];
} else {
ZEND_ASSERT(phi->use_chains[pred_offset] == NULL);
}
} else if (j >= pred_offset) {
phi->use_chains[j] = next_phi;
}
@@ -1587,8 +1591,6 @@ void zend_ssa_rename_var_uses(zend_ssa *ssa, int old, int new, zend_bool update_
new_var->phi_use_chain = phi;
}
after_first_new_source = 1;
} else {
phi->use_chains[j] = NULL;
}
}
}
+20 -21
View File
@@ -2576,9 +2576,7 @@ static int zend_accel_init_shm(void)
if (ZCG(accel_directives).interned_strings_buffer) {
accel_shared_globals = zend_shared_alloc((ZCG(accel_directives).interned_strings_buffer * 1024 * 1024));
} else {
/* Make sure there is always at least one interned string hash slot,
* so the table can be queried unconditionally. */
accel_shared_globals = zend_shared_alloc(sizeof(zend_accel_shared_globals) + sizeof(uint32_t));
accel_shared_globals = zend_shared_alloc(sizeof(zend_accel_shared_globals));
}
if (!accel_shared_globals) {
zend_accel_error(ACCEL_LOG_FATAL, "Insufficient shared memory!");
@@ -2619,8 +2617,6 @@ static int zend_accel_init_shm(void)
STRTAB_INVALID_POS,
(char*)ZCSG(interned_strings).start -
((char*)&ZCSG(interned_strings) + sizeof(zend_string_table)));
} else {
*STRTAB_HASH_TO_SLOT(&ZCSG(interned_strings), 0) = STRTAB_INVALID_POS;
}
zend_interned_strings_set_request_storage_handlers(accel_new_interned_string_for_php, accel_init_interned_string_for_php);
@@ -4052,8 +4048,7 @@ static void preload_register_trait_methods(zend_class_entry *ce) {
zend_op_array *op_array;
ZEND_HASH_FOREACH_PTR(&ce->function_table, op_array) {
if (!(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) {
ZEND_ASSERT(op_array->refcount && "Must have refcount pointer");
zend_shared_alloc_register_xlat_entry(op_array->refcount, op_array);
zend_shared_alloc_register_xlat_entry(op_array->opcodes, op_array);
}
} ZEND_HASH_FOREACH_END();
}
@@ -4064,18 +4059,18 @@ static void preload_fix_trait_methods(zend_class_entry *ce)
ZEND_HASH_FOREACH_PTR(&ce->function_table, op_array) {
if (op_array->fn_flags & ZEND_ACC_TRAIT_CLONE) {
zend_op_array *orig_op_array = zend_shared_alloc_get_xlat_entry(op_array->refcount);
ZEND_ASSERT(orig_op_array && "Must be in xlat table");
zend_class_entry *scope = op_array->scope;
uint32_t fn_flags = op_array->fn_flags;
zend_function *prototype = op_array->prototype;
HashTable *ht = op_array->static_variables;
*op_array = *orig_op_array;
op_array->scope = scope;
op_array->fn_flags = fn_flags;
op_array->prototype = prototype;
op_array->static_variables = ht;
zend_op_array *orig_op_array = zend_shared_alloc_get_xlat_entry(op_array->opcodes);
if (orig_op_array) {
zend_class_entry *scope = op_array->scope;
uint32_t fn_flags = op_array->fn_flags;
zend_function *prototype = op_array->prototype;
HashTable *ht = op_array->static_variables;
*op_array = *orig_op_array;
op_array->scope = scope;
op_array->fn_flags = fn_flags;
op_array->prototype = prototype;
op_array->static_variables = ht;
}
}
} ZEND_HASH_FOREACH_END();
}
@@ -4106,12 +4101,16 @@ static int preload_optimize(zend_persistent_script *script)
}
ZEND_HASH_FOREACH_PTR(&script->script.class_table, ce) {
preload_fix_trait_methods(ce);
if (ce->ce_flags & ZEND_ACC_IMPLEMENT_TRAITS) {
preload_fix_trait_methods(ce);
}
} ZEND_HASH_FOREACH_END();
ZEND_HASH_FOREACH_PTR(preload_scripts, script) {
ZEND_HASH_FOREACH_PTR(&script->script.class_table, ce) {
preload_fix_trait_methods(ce);
if (ce->ce_flags & ZEND_ACC_IMPLEMENT_TRAITS) {
preload_fix_trait_methods(ce);
}
} ZEND_HASH_FOREACH_END();
} ZEND_HASH_FOREACH_END();
-19
View File
@@ -1,19 +0,0 @@
--TEST--
Check that phi use chains are correctly maintained when removing blocks
--FILE--
<?php
function test(array $adapters) {
foreach ($adapters as $adapter) {
if (\in_array('cli-server', ['cli', 'phpdbg'], true) && $adapter instanceof stdClass && !\filter_var('1', \FILTER_VALIDATE_BOOLEAN)) {
continue;
}
$adapters[] = $adapter;
}
}
?>
===DONE===
--EXPECT--
===DONE===
@@ -1,4 +0,0 @@
<?php
if (1) {
function f() {}
}
@@ -1,18 +0,0 @@
--TEST--
Defining a dynamic function inside the preload script
--INI--
opcache.enable=1
opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_dynamic_function.inc
--SKIPIF--
<?php
require_once('skipif.inc');
if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
?>
--FILE--
<?php
var_dump(function_exists("f"));
?>
--EXPECT--
bool(true)
@@ -1,33 +0,0 @@
<?php
trait T1 {
public function method() {
// Needs to be optimized somehow.
$str = "Foo";
echo "$str\n";
}
}
trait T2 {}
class C1 {
use T1;
}
class C2 extends C1 {
use T2;
}
trait T3 {
public function method() {
// Prevent trivial inheritance.
static $x;
// Needs to be optimized somehow.
$str = "Foo";
echo "$str\n";
}
}
class C3 {
use T3;
}
class C4 extends C3 {}
@@ -1,20 +0,0 @@
--TEST--
Op array fixed up multiple times during preloading
--INI--
opcache.enable=1
opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_trait_multiple_fixup.inc
--SKIPIF--
<?php
require_once('skipif.inc');
if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
?>
--FILE--
<?php
(new C2)->method();
(new C4)->method();
?>
--EXPECT--
Foo
Foo
+11 -28
View File
@@ -6484,8 +6484,6 @@ PHP_FUNCTION(openssl_digest)
struct php_openssl_cipher_mode {
zend_bool is_aead;
zend_bool is_single_run_aead;
zend_bool set_tag_length_always;
zend_bool set_tag_length_when_encrypting;
int aead_get_tag_flag;
int aead_set_tag_flag;
int aead_ivlen_flag;
@@ -6493,43 +6491,27 @@ struct php_openssl_cipher_mode {
static void php_openssl_load_cipher_mode(struct php_openssl_cipher_mode *mode, const EVP_CIPHER *cipher_type) /* {{{ */
{
int cipher_mode = EVP_CIPHER_mode(cipher_type);
memset(mode, 0, sizeof(struct php_openssl_cipher_mode));
switch (cipher_mode) {
#if PHP_OPENSSL_API_VERSION >= 0x10100
case EVP_CIPH_GCM_MODE:
case EVP_CIPH_OCB_MODE:
case EVP_CIPH_CCM_MODE:
mode->is_aead = 1;
/* For OCB mode, explicitly set the tag length even when decrypting,
* see https://github.com/openssl/openssl/issues/8331. */
mode->set_tag_length_always = cipher_mode == EVP_CIPH_OCB_MODE;
mode->set_tag_length_when_encrypting = cipher_mode == EVP_CIPH_CCM_MODE;
mode->is_single_run_aead = cipher_mode == EVP_CIPH_CCM_MODE;
mode->aead_get_tag_flag = EVP_CTRL_AEAD_GET_TAG;
mode->aead_set_tag_flag = EVP_CTRL_AEAD_SET_TAG;
mode->aead_ivlen_flag = EVP_CTRL_AEAD_SET_IVLEN;
break;
#else
# ifdef EVP_CIPH_GCM_MODE
switch (EVP_CIPHER_mode(cipher_type)) {
#ifdef EVP_CIPH_GCM_MODE
case EVP_CIPH_GCM_MODE:
mode->is_aead = 1;
mode->is_single_run_aead = 0;
mode->aead_get_tag_flag = EVP_CTRL_GCM_GET_TAG;
mode->aead_set_tag_flag = EVP_CTRL_GCM_SET_TAG;
mode->aead_ivlen_flag = EVP_CTRL_GCM_SET_IVLEN;
break;
# endif
# ifdef EVP_CIPH_CCM_MODE
#endif
#ifdef EVP_CIPH_CCM_MODE
case EVP_CIPH_CCM_MODE:
mode->is_aead = 1;
mode->is_single_run_aead = 1;
mode->set_tag_length_when_encrypting = 1;
mode->aead_get_tag_flag = EVP_CTRL_CCM_GET_TAG;
mode->aead_set_tag_flag = EVP_CTRL_CCM_SET_TAG;
mode->aead_ivlen_flag = EVP_CTRL_CCM_SET_IVLEN;
break;
# endif
#endif
default:
memset(mode, 0, sizeof(struct php_openssl_cipher_mode));
}
}
/* }}} */
@@ -6611,13 +6593,12 @@ static int php_openssl_cipher_init(const EVP_CIPHER *cipher_type,
if (php_openssl_validate_iv(piv, piv_len, max_iv_len, free_iv, cipher_ctx, mode) == FAILURE) {
return FAILURE;
}
if (mode->set_tag_length_always || (enc && mode->set_tag_length_when_encrypting)) {
if (mode->is_single_run_aead && enc) {
if (!EVP_CIPHER_CTX_ctrl(cipher_ctx, mode->aead_set_tag_flag, tag_len, NULL)) {
php_error_docref(NULL, E_WARNING, "Setting tag length for AEAD cipher failed");
return FAILURE;
}
}
if (!enc && tag && tag_len > 0) {
} else if (!enc && tag && tag_len > 0) {
if (!mode->is_aead) {
php_error_docref(NULL, E_WARNING, "The tag cannot be used because the cipher method does not support AEAD");
} else if (!EVP_CIPHER_CTX_ctrl(cipher_ctx, mode->aead_set_tag_flag, tag_len, (unsigned char *) tag)) {
@@ -6763,6 +6744,8 @@ PHP_OPENSSL_API zend_string* php_openssl_encrypt(char *data, size_t data_len, ch
}
} else if (tag) {
ZEND_TRY_ASSIGN_REF_NULL(tag);
php_error_docref(NULL, E_WARNING,
"The authenticated tag cannot be provided for cipher that doesn not support AEAD");
} else if (mode.is_aead) {
php_error_docref(NULL, E_WARNING, "A tag should be provided when using AEAD mode");
zend_string_release_ex(outbuf, 0);
+1 -52
View File
@@ -108,58 +108,7 @@ $php_openssl_cipher_tests = array(
'01e4a9a4fba43c90ccdcb281d48c7c6f' .
'd62875d2aca417034c34aee5',
),
),
// First few test vectors from RFC 7253.
'aes-128-ocb' => array(
array(
'key' => '000102030405060708090A0B0C0D0E0F',
'iv' => 'BBAA99887766554433221100',
'aad' => '',
'pt' => '',
'tag' => '785407BFFFC8AD9EDCC5520AC9111EE6',
'ct' => '',
),
array(
'key' => '000102030405060708090A0B0C0D0E0F',
'iv' => 'BBAA99887766554433221101',
'aad' => '0001020304050607',
'pt' => '0001020304050607',
'tag' => '5725BDA0D3B4EB3A257C9AF1F8F03009',
'ct' => '6820B3657B6F615A',
),
array(
'key' => '000102030405060708090A0B0C0D0E0F',
'iv' => 'BBAA99887766554433221102',
'aad' => '0001020304050607',
'pt' => '',
'tag' => '81017F8203F081277152FADE694A0A00',
'ct' => '',
),
array(
'key' => '000102030405060708090A0B0C0D0E0F',
'iv' => 'BBAA99887766554433221103',
'aad' => '',
'pt' => '0001020304050607',
'tag' => '14054CD1F35D82760B2CD00D2F99BFA9',
'ct' => '45DD69F8F5AAE724',
),
array(
'key' => '000102030405060708090A0B0C0D0E0F',
'iv' => 'BBAA99887766554433221104',
'aad' => '000102030405060708090A0B0C0D0E0F',
'pt' => '000102030405060708090A0B0C0D0E0F',
'tag' => '3AD7A4FF3835B8C5701C1CCEC8FC3358',
'ct' => '571D535B60B277188BE5147170A9A22C',
),
array(
'key' => '0F0E0D0C0B0A09080706050403020100',
'iv' => 'BBAA9988776655443322110D',
'aad' => '000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627',
'pt' => '000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627',
'tag' => 'D0C515F4D1CDD4FDAC4F02AA',
'ct' => '1792A4E31E0755FB03E31B22116E6C2DDF9EFD6E33D536F1A0124B0A55BAE884ED93481529C76B6A',
),
),
)
);
function openssl_get_cipher_tests($method)
@@ -28,16 +28,9 @@ var_dump(rtrim($output));
$encrypted = openssl_encrypt($data, "bf-ecb", $password, OPENSSL_DONT_ZERO_PAD_KEY);
$output = openssl_decrypt($encrypted, "bf-ecb", $password, OPENSSL_DONT_ZERO_PAD_KEY);
var_dump($output);
// It's okay to pass $tag for a non-authenticated cipher.
// It will be populated with null in that case.
openssl_encrypt($data, $method, $password, 0, $iv, $tag);
var_dump($tag);
?>
--EXPECT--
string(45) "openssl_encrypt() and openssl_decrypt() tests"
string(45) "openssl_encrypt() and openssl_decrypt() tests"
string(45) "openssl_encrypt() and openssl_decrypt() tests"
string(45) "openssl_encrypt() and openssl_decrypt() tests"
NULL
@@ -23,6 +23,8 @@ var_dump(openssl_decrypt(array(), $method, $password));
var_dump(openssl_decrypt($encrypted, array(), $password));
var_dump(openssl_decrypt($encrypted, $method, array()));
// invalid using of an authentication tag
var_dump(openssl_encrypt($data, $method, $password, 0, $iv, $wrong));
?>
--EXPECTF--
Warning: openssl_encrypt(): Using an empty Initialization Vector (iv) is potentially insecure and not recommended in %s on line %d
@@ -51,3 +53,6 @@ NULL
Warning: openssl_decrypt() expects parameter 3 to be string, array given in %s on line %d
NULL
Warning: openssl_encrypt(): The authenticated tag cannot be provided for cipher that doesn not support AEAD in %s on line %d
string(44) "yof6cPPH4mLee6TOc0YQSrh4dvywMqxGUyjp0lV6+aM="
@@ -1,60 +0,0 @@
--TEST--
openssl_decrypt() with OCB cipher algorithm tests
--SKIPIF--
<?php
if (!extension_loaded("openssl"))
die("skip");
if (!in_array('aes-128-ocb', openssl_get_cipher_methods()))
die("skip: aes-128-ocb not available");
?>
--FILE--
<?php
require_once __DIR__ . "/cipher_tests.inc";
$method = 'aes-128-ocb';
$tests = openssl_get_cipher_tests($method);
foreach ($tests as $idx => $test) {
echo "TEST $idx\n";
$pt = openssl_decrypt($test['ct'], $method, $test['key'], OPENSSL_RAW_DATA,
$test['iv'], $test['tag'], $test['aad']);
var_dump($test['pt'] === $pt);
}
// no IV
var_dump(openssl_decrypt($test['ct'], $method, $test['key'], OPENSSL_RAW_DATA,
NULL, $test['tag'], $test['aad']));
// IV too long
var_dump(openssl_decrypt($test['ct'], $method, $test['key'], OPENSSL_RAW_DATA,
str_repeat('x', 32), $test['tag'], $test['aad']));
// failed because no AAD
var_dump(openssl_decrypt($test['ct'], $method, $test['key'], OPENSSL_RAW_DATA,
$test['iv'], $test['tag']));
// failed because wrong tag
var_dump(openssl_decrypt($test['ct'], $method, $test['key'], OPENSSL_RAW_DATA,
$test['iv'], str_repeat('x', 16), $test['aad']));
?>
--EXPECTF--
TEST 0
bool(true)
TEST 1
bool(true)
TEST 2
bool(true)
TEST 3
bool(true)
TEST 4
bool(true)
TEST 5
bool(true)
Warning: openssl_decrypt(): Setting of IV length for AEAD mode failed in %s on line %d
bool(false)
Warning: openssl_decrypt(): Setting of IV length for AEAD mode failed in %s on line %d
bool(false)
bool(false)
bool(false)
@@ -21,6 +21,9 @@ var_dump(openssl_encrypt($arr, $method, $object));
var_dump(openssl_encrypt($data, $arr, $object));
var_dump(openssl_encrypt($data, $method, $arr));
// invalid using of an authentication tag
var_dump(openssl_encrypt($data, $method, $password, 0, $iv, $wrong));
// padding of the key is disabled
var_dump(openssl_encrypt($data, $method, $password, OPENSSL_DONT_ZERO_PAD_KEY, $iv));
?>
@@ -46,5 +49,8 @@ NULL
Warning: openssl_encrypt() expects parameter 3 to be string, array given in %s on line %d
NULL
Warning: openssl_encrypt(): The authenticated tag cannot be provided for cipher that doesn not support AEAD in %s on line %d
string(44) "iPR4HulskuaP5Z6me5uImk6BqVyJG73+63tkPauVZYk="
Warning: openssl_encrypt(): Key length cannot be set for the cipher method in %s on line %d
bool(false)
@@ -1,60 +0,0 @@
--TEST--
openssl_encrypt() with OCB cipher algorithm tests
--SKIPIF--
<?php
if (!extension_loaded("openssl"))
die("skip");
if (!in_array('aes-128-ocb', openssl_get_cipher_methods()))
die("skip: aes-128-ocb not available");
?>
--FILE--
<?php
require_once __DIR__ . "/cipher_tests.inc";
$method = 'aes-128-ocb';
$tests = openssl_get_cipher_tests($method);
foreach ($tests as $idx => $test) {
echo "TEST $idx\n";
$ct = openssl_encrypt($test['pt'], $method, $test['key'], OPENSSL_RAW_DATA,
$test['iv'], $tag, $test['aad'], strlen($test['tag']));
var_dump($test['ct'] === $ct);
var_dump($test['tag'] === $tag);
}
// Empty IV error
var_dump(openssl_encrypt('data', $method, 'password', 0, NULL, $tag, ''));
// Failing to retrieve tag (must be at most 16 bytes)
var_dump(openssl_encrypt('data', $method, 'password', 0, str_repeat('x', 12), $tag, '', 20));
// Failing when no tag supplied
var_dump(openssl_encrypt('data', $method, 'password', 0, str_repeat('x', 12)));
?>
--EXPECTF--
TEST 0
bool(true)
bool(true)
TEST 1
bool(true)
bool(true)
TEST 2
bool(true)
bool(true)
TEST 3
bool(true)
bool(true)
TEST 4
bool(true)
bool(true)
TEST 5
bool(true)
bool(true)
Warning: openssl_encrypt(): Setting of IV length for AEAD mode failed in %s on line %d
bool(false)
Warning: openssl_encrypt(): Setting tag length for AEAD cipher failed in %s on line %d
bool(false)
Warning: openssl_encrypt(): A tag should be provided when using AEAD mode in %s on line %d
bool(false)
+3 -1
View File
@@ -829,7 +829,9 @@ static int pdo_dbh_attribute_set(pdo_dbh_t *dbh, zend_long attr, zval *value) /*
}
fail:
if (!dbh->methods->set_attribute) {
if (attr == PDO_ATTR_AUTOCOMMIT) {
zend_throw_exception_ex(php_pdo_get_exception(), 0, "The auto-commit mode cannot be changed for this driver");
} else if (!dbh->methods->set_attribute) {
pdo_raise_impl_error(dbh, NULL, "IM001", "driver does not support setting attributes");
} else {
PDO_HANDLE_DBH_ERR();
+4 -18
View File
@@ -351,11 +351,7 @@ static int mysql_handle_commit(pdo_dbh_t *dbh)
{
PDO_DBG_ENTER("mysql_handle_commit");
PDO_DBG_INF_FMT("dbh=%p", dbh);
if (mysql_commit(((pdo_mysql_db_handle *)dbh->driver_data)->server)) {
pdo_mysql_error(dbh);
PDO_DBG_RETURN(0);
}
PDO_DBG_RETURN(1);
PDO_DBG_RETURN(0 == mysql_commit(((pdo_mysql_db_handle *)dbh->driver_data)->server));
}
/* }}} */
@@ -364,11 +360,7 @@ static int mysql_handle_rollback(pdo_dbh_t *dbh)
{
PDO_DBG_ENTER("mysql_handle_rollback");
PDO_DBG_INF_FMT("dbh=%p", dbh);
if (mysql_rollback(((pdo_mysql_db_handle *)dbh->driver_data)->server)) {
pdo_mysql_error(dbh);
PDO_DBG_RETURN(0);
}
PDO_DBG_RETURN(1);
PDO_DBG_RETURN(0 <= mysql_rollback(((pdo_mysql_db_handle *)dbh->driver_data)->server));
}
/* }}} */
@@ -378,11 +370,7 @@ static inline int mysql_handle_autocommit(pdo_dbh_t *dbh)
PDO_DBG_ENTER("mysql_handle_autocommit");
PDO_DBG_INF_FMT("dbh=%p", dbh);
PDO_DBG_INF_FMT("dbh->autocommit=%d", dbh->auto_commit);
if (mysql_autocommit(((pdo_mysql_db_handle *)dbh->driver_data)->server, dbh->auto_commit)) {
pdo_mysql_error(dbh);
PDO_DBG_RETURN(0);
}
PDO_DBG_RETURN(1);
PDO_DBG_RETURN(0 <= mysql_autocommit(((pdo_mysql_db_handle *)dbh->driver_data)->server, dbh->auto_commit));
}
/* }}} */
@@ -399,9 +387,7 @@ static int pdo_mysql_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val)
/* ignore if the new value equals the old one */
if (dbh->auto_commit ^ bval) {
dbh->auto_commit = bval;
if (!mysql_handle_autocommit(dbh)) {
PDO_DBG_RETURN(0);
}
mysql_handle_autocommit(dbh);
}
PDO_DBG_RETURN(1);
+7 -9
View File
@@ -257,10 +257,7 @@ static int pdo_mysql_stmt_execute_prepared_libmysql(pdo_stmt_t *stmt) /* {{{ */
/* if buffered, pre-fetch all the data */
if (H->buffered) {
if (mysql_stmt_store_result(S->stmt)) {
pdo_mysql_error_stmt(stmt);
PDO_DBG_RETURN(0);
}
mysql_stmt_store_result(S->stmt);
}
}
}
@@ -303,7 +300,6 @@ static int pdo_mysql_stmt_execute_prepared_mysqlnd(pdo_stmt_t *stmt) /* {{{ */
/* if buffered, pre-fetch all the data */
if (H->buffered) {
if (mysql_stmt_store_result(S->stmt)) {
pdo_mysql_error_stmt(stmt);
PDO_DBG_RETURN(0);
}
}
@@ -392,8 +388,7 @@ static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt) /* {{{ */
/* if buffered, pre-fetch all the data */
if (H->buffered) {
if (mysql_stmt_store_result(S->stmt)) {
pdo_mysql_error_stmt(stmt);
PDO_DBG_RETURN(0);
PDO_DBG_RETURN(1);
}
}
}
@@ -628,7 +623,6 @@ static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt, enum pdo_fetch_orientation ori
PDO_DBG_INF_FMT("stmt=%p", S->stmt);
if (S->stmt) {
if (FAIL == mysqlnd_stmt_fetch(S->stmt, &fetched_anything) || fetched_anything == FALSE) {
pdo_mysql_error_stmt(stmt);
PDO_DBG_RETURN(0);
}
@@ -668,7 +662,11 @@ static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt, enum pdo_fetch_orientation ori
#endif /* PDO_USE_MYSQLND */
if ((S->current_data = mysql_fetch_row(S->result)) == NULL) {
if (!S->H->buffered && mysql_errno(S->H->server)) {
#if PDO_USE_MYSQLND
if (S->result->unbuf && !S->result->unbuf->eof_reached && mysql_errno(S->H->server)) {
#else
if (!S->result->eof && mysql_errno(S->H->server)) {
#endif
pdo_mysql_error_stmt(stmt);
}
PDO_DBG_RETURN(0);
-51
View File
@@ -1,51 +0,0 @@
--TEST--
Bug #66528: No PDOException or errorCode if database becomes unavailable before PDO::commit
--SKIPIF--
<?php
if (!extension_loaded('pdo') || !extension_loaded('pdo_mysql')) die('skip not loaded');
require_once(__DIR__ . DIRECTORY_SEPARATOR . 'skipif.inc');
require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
MySQLPDOTest::skip();
?>
--FILE--
<?php
require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
$dbh = MySQLPDOTest::factory();
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$dbh->exec('DROP TABLE IF EXISTS test');
$dbh->exec('CREATE TABLE test (a int) engine=innodb');
$dbh->beginTransaction();
$dbh->exec('INSERT INTO test (a) VALUES (1), (2)');
$stmt = $dbh->query('SELECT * FROM test');
try {
$dbh->commit();
} catch (PDOException $e) {
echo $e->getMessage(), "\n";
}
try {
$dbh->rollBack();
} catch (PDOException $e) {
echo $e->getMessage(), "\n";
}
try {
$dbh->setAttribute(PDO::ATTR_AUTOCOMMIT, false);
} catch (PDOException $e) {
echo $e->getMessage(), "\n";
}
?>
--CLEAN--
<?php
require __DIR__ . '/mysql_pdo_test.inc';
MySQLPDOTest::dropTestTable();
?>
--EXPECT--
SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
-113
View File
@@ -1,113 +0,0 @@
--TEST--
Bug #79375: mysqli_store_result does not report error from lock wait timeout
--SKIPIF--
<?php
if (!extension_loaded('pdo') || !extension_loaded('pdo_mysql')) die('skip not loaded');
require_once(__DIR__ . DIRECTORY_SEPARATOR . 'skipif.inc');
require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
MySQLPDOTest::skip();
?>
--FILE--
<?php
require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
function createDB(): PDO {
$db = MySQLPDOTest::factory();
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
return $db;
}
$db = createDB();
$db2 = createDB();
$db->query('DROP TABLE IF EXISTS test');
$db->query('CREATE TABLE test (first int) ENGINE = InnoDB');
$db->query('INSERT INTO test VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9)');
function testNormalQuery(PDO $db, string $name) {
$db->exec("SET innodb_lock_wait_timeout = 1");
$db->exec("START TRANSACTION");
$query = "SELECT first FROM test WHERE first = 1 FOR UPDATE";
echo "Running query on $name\n";
try {
$stmt = $db->query($query);
echo "Got {$stmt->rowCount()} for $name\n";
} catch (PDOException $e) {
echo $e->getMessage()."\n";
}
}
function testPrepareExecute(PDO $db, string $name) {
$db->exec("SET innodb_lock_wait_timeout = 1");
$db->exec("START TRANSACTION");
$query = "SELECT first FROM test WHERE first = 1 FOR UPDATE";
echo "Running query on $name\n";
$stmt = $db->prepare($query);
try {
$stmt->execute();
echo "Got {$stmt->rowCount()} for $name\n";
} catch (PDOException $e) {
echo $e->getMessage()."\n";
}
}
function testUnbuffered(PDO $db, string $name) {
$db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$db->exec("SET innodb_lock_wait_timeout = 1");
$db->exec("START TRANSACTION");
$query = "SELECT first FROM test WHERE first = 1 FOR UPDATE";
echo "Running query on $name\n";
$stmt = $db->prepare($query);
$stmt->execute();
try {
$rows = $stmt->fetchAll();
$count = count($rows);
echo "Got $count for $name\n";
} catch (PDOException $e) {
echo $e->getMessage()."\n";
}
}
testNormalQuery($db, 'first connection');
testNormalQuery($db2, 'second connection');
unset($db);
unset($db2);
echo "\n";
$db = createDB();
$db2 = createDB();
testPrepareExecute($db, 'first connection');
testPrepareExecute($db2, 'second connection');
unset($db);
unset($db2);
echo "\n";
$db = createDB();
$db2 = createDB();
testUnbuffered($db, 'first connection');
testUnbuffered($db2, 'second connection');
unset($db);
unset($db2);
echo "\n";
?>
--CLEAN--
<?php
require __DIR__ . '/mysql_pdo_test.inc';
MySQLPDOTest::dropTestTable();
?>
--EXPECT--
Running query on first connection
Got 1 for first connection
Running query on second connection
SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction
Running query on first connection
Got 1 for first connection
Running query on second connection
SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction
Running query on first connection
Got 1 for first connection
Running query on second connection
SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction
+1 -3
View File
@@ -23,7 +23,5 @@ $stmt = $db->query("select (select 1 union select 2)");
print "ok";
?>
--EXPECTF--
Warning: PDO::query(): SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row in %s on line %d
--EXPECT--
ok
+1 -4
View File
@@ -1204,13 +1204,10 @@ static int netsnmp_session_set_sec_level(struct snmp_session *s, char *level)
Set the authentication protocol in the snmpv3 session */
static int netsnmp_session_set_auth_protocol(struct snmp_session *s, char *prot)
{
#ifndef DISABLE_MD5
if (!strcasecmp(prot, "MD5")) {
s->securityAuthProto = usmHMACMD5AuthProtocol;
s->securityAuthProtoLen = USM_AUTH_PROTO_MD5_LEN;
} else
#endif
if (!strcasecmp(prot, "SHA")) {
} else if (!strcasecmp(prot, "SHA")) {
s->securityAuthProto = usmHMACSHA1AuthProtocol;
s->securityAuthProtoLen = USM_AUTH_PROTO_SHA_LEN;
} else {
-1
View File
@@ -37,6 +37,5 @@ EXTENSION("standard", "array.c base64.c basic_functions.c browscap.c \
user_filters.c uuencode.c filters.c proc_open.c password.c \
streamsfuncs.c http.c flock_compat.c random.c hrtime.c", false /* never shared */,
'/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1');
PHP_STANDARD = "yes";
ADD_MAKEFILE_FRAGMENT();
PHP_INSTALL_HEADERS("", "ext/standard");
@@ -859,13 +859,11 @@ echo "Done";
string(3) "%:x"
}
--> https://example.com:0/: array(4) {
--> https://example.com:0/: array(3) {
["scheme"]=>
string(5) "https"
["host"]=>
string(11) "example.com"
["port"]=>
int(0)
["path"]=>
string(1) "/"
}
@@ -112,7 +112,7 @@ echo "Done";
--> / : NULL
--> /rest/Users?filter={"id":"123"} : NULL
--> %:x : NULL
--> https://example.com:0/ : int(0)
--> https://example.com:0/ : NULL
--> http:///blah.com : bool(false)
--> http://:80 : bool(false)
--> http://user@:80 : bool(false)
@@ -861,13 +861,11 @@ echo "Done";
string(3) "%:x"
}
--> https://example.com:0/: array(4) {
--> https://example.com:0/: array(3) {
["scheme"]=>
string(5) "https"
["host"]=>
string(11) "example.com"
["port"]=>
int(0)
["path"]=>
string(1) "/"
}
+5 -15
View File
@@ -98,21 +98,14 @@ static const char *binary_strcspn(const char *s, const char *e, const char *char
return e;
}
PHPAPI php_url *php_url_parse_ex(char const *str, size_t length)
{
zend_bool has_port;
return php_url_parse_ex2(str, length, &has_port);
}
/* {{{ php_url_parse_ex2
/* {{{ php_url_parse
*/
PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, zend_bool *has_port)
PHPAPI php_url *php_url_parse_ex(char const *str, size_t length)
{
char port_buf[6];
php_url *ret = ecalloc(1, sizeof(php_url));
char const *s, *e, *p, *pp, *ue;
*has_port = 0;
s = str;
ue = s + length;
@@ -202,7 +195,6 @@ PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, zend_bool *has
port_buf[pp - p] = '\0';
port = ZEND_STRTOL(port_buf, &end, 10);
if (port >= 0 && port <= 65535 && end != port_buf) {
*has_port = 1;
ret->port = (unsigned short) port;
if (s + 1 < ue && *s == '/' && *(s + 1) == '/') { /* relative-scheme URL */
s += 2;
@@ -268,7 +260,6 @@ parse_host:
port_buf[e - p] = '\0';
port = ZEND_STRTOL(port_buf, &end, 10);
if (port >= 0 && port <= 65535 && end != port_buf) {
*has_port = 1;
ret->port = (unsigned short)port;
} else {
php_url_free(ret);
@@ -337,7 +328,6 @@ PHP_FUNCTION(parse_url)
php_url *resource;
zend_long key = -1;
zval tmp;
zend_bool has_port;
ZEND_PARSE_PARAMETERS_START(1, 2)
Z_PARAM_STRING(str, str_len)
@@ -345,7 +335,7 @@ PHP_FUNCTION(parse_url)
Z_PARAM_LONG(key)
ZEND_PARSE_PARAMETERS_END();
resource = php_url_parse_ex2(str, str_len, &has_port);
resource = php_url_parse_ex(str, str_len);
if (resource == NULL) {
/* @todo Find a method to determine why php_url_parse_ex() failed */
RETURN_FALSE;
@@ -360,7 +350,7 @@ PHP_FUNCTION(parse_url)
if (resource->host != NULL) RETVAL_STR_COPY(resource->host);
break;
case PHP_URL_PORT:
if (has_port) RETVAL_LONG(resource->port);
if (resource->port != 0) RETVAL_LONG(resource->port);
break;
case PHP_URL_USER:
if (resource->user != NULL) RETVAL_STR_COPY(resource->user);
@@ -396,7 +386,7 @@ PHP_FUNCTION(parse_url)
ZVAL_STR_COPY(&tmp, resource->host);
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_HOST), &tmp);
}
if (has_port) {
if (resource->port != 0) {
ZVAL_LONG(&tmp, resource->port);
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_PORT), &tmp);
}
-1
View File
@@ -33,7 +33,6 @@ typedef struct php_url {
PHPAPI void php_url_free(php_url *theurl);
PHPAPI php_url *php_url_parse(char const *str);
PHPAPI php_url *php_url_parse_ex(char const *str, size_t length);
PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, zend_bool *has_port);
PHPAPI size_t php_url_decode(char *str, size_t len); /* return value: length of decoded string */
PHPAPI size_t php_raw_url_decode(char *str, size_t len); /* return value: length of decoded string */
PHPAPI zend_string *php_url_encode(char const *s, size_t len);
-29
View File
@@ -1,29 +0,0 @@
--TEST--
Operations on uninitialized tidy object
--SKIPIF--
<?php if (!extension_loaded("tidy")) print "skip"; ?>
--FILE--
<?php
$tidy = new tidy;
try {
var_dump($tidy->getHtmlVer());
} catch (Error $e) {
echo $e->getMessage(), "\n";
}
try {
var_dump($tidy->isXhtml());
} catch (Error $e) {
echo $e->getMessage(), "\n";
}
try {
var_dump($tidy->isXml());
} catch (Error $e) {
echo $e->getMessage(), "\n";
}
?>
--EXPECT--
tidy object is not initialized
tidy object is not initialized
tidy object is not initialized
+3 -10
View File
@@ -66,13 +66,6 @@
} \
obj = Z_TIDY_P(object); \
#define TIDY_FETCH_INITIALIZED_OBJECT \
TIDY_FETCH_OBJECT; \
if (!obj->ptdoc->initialized) { \
zend_throw_error(NULL, "tidy object is not initialized"); \
return; \
}
#define TIDY_FETCH_ONLY_OBJECT \
PHPTidyObj *obj; \
TIDY_SET_CONTEXT; \
@@ -1493,7 +1486,7 @@ static PHP_FUNCTION(tidy_get_status)
Get the Detected HTML version for the specified document. */
static PHP_FUNCTION(tidy_get_html_ver)
{
TIDY_FETCH_INITIALIZED_OBJECT;
TIDY_FETCH_OBJECT;
RETURN_LONG(tidyDetectedHtmlVersion(obj->ptdoc->doc));
}
@@ -1503,7 +1496,7 @@ static PHP_FUNCTION(tidy_get_html_ver)
Indicates if the document is a XHTML document. */
static PHP_FUNCTION(tidy_is_xhtml)
{
TIDY_FETCH_INITIALIZED_OBJECT;
TIDY_FETCH_OBJECT;
RETURN_BOOL(tidyDetectedXhtml(obj->ptdoc->doc));
}
@@ -1513,7 +1506,7 @@ static PHP_FUNCTION(tidy_is_xhtml)
Indicates if the document is a generic (non HTML/XHTML) XML document. */
static PHP_FUNCTION(tidy_is_xml)
{
TIDY_FETCH_INITIALIZED_OBJECT;
TIDY_FETCH_OBJECT;
RETURN_BOOL(tidyDetectedGenericXml(obj->ptdoc->doc));
}
+2 -13
View File
@@ -37,18 +37,7 @@ struct bug79096 {
uint64_t b;
};
#ifdef PHP_WIN32
# define PHP_ZEND_TEST_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHP_ZEND_TEST_API __attribute__ ((visibility("default")))
#else
# define PHP_ZEND_TEST_API
#endif
PHP_ZEND_TEST_API struct bug79096 bug79096(void);
PHP_ZEND_TEST_API void bug79532(off_t *array, size_t elems);
extern PHP_ZEND_TEST_API int *(*bug79177_cb)(void);
PHP_ZEND_TEST_API void bug79177(void);
ZEND_API struct bug79096 bug79096(void);
ZEND_API void bug79532(off_t *array, size_t elems);
#endif
-6
View File
@@ -336,9 +336,3 @@ void bug79532(off_t *array, size_t elems)
array[i] = i;
}
}
PHP_ZEND_TEST_API int *(*bug79177_cb)(void);
void bug79177(void)
{
bug79177_cb();
}
+3 -3
View File
@@ -2,7 +2,7 @@
/* edit configure.ac to change version number */
#define PHP_MAJOR_VERSION 7
#define PHP_MINOR_VERSION 4
#define PHP_RELEASE_VERSION 13
#define PHP_RELEASE_VERSION 12
#define PHP_EXTRA_VERSION ""
#define PHP_VERSION "7.4.13"
#define PHP_VERSION_ID 70413
#define PHP_VERSION "7.4.12"
#define PHP_VERSION_ID 70412