mirror of
https://github.com/bdnugget/php-src.git
synced 2026-11-09 02:00:49 +00:00
Compare commits
5
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
caf3c64339 | ||
|
|
cee7e5769a | ||
|
|
9953bee136 | ||
|
|
611ef08c01 | ||
|
|
c73bab3f49 |
No files matched your search
@@ -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:
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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())
|
||||
Vendored
+5
-1
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,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
@@ -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 };
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
@@ -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
|
||||
|
||||
|
||||
"
|
||||
@@ -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,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,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==
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
@@ -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
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
@@ -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
|
||||
@@ -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
@@ -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 {
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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
@@ -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
|
||||
Reference in new issue
Block a user