From 3b2410ebf6216733410b3d12566ffba3a99519c7 Mon Sep 17 00:00:00 2001 From: Matteo Beccati Date: Wed, 16 Sep 2020 10:04:14 +0200 Subject: [PATCH 01/67] Fix test follow-up to 7a95e94 for MySQL < 5.6 --- ext/mysqli/tests/mysqli_report_wo_ps.phpt | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/ext/mysqli/tests/mysqli_report_wo_ps.phpt b/ext/mysqli/tests/mysqli_report_wo_ps.phpt index bf7d4500e5a0d..683c46c8f68b3 100644 --- a/ext/mysqli/tests/mysqli_report_wo_ps.phpt +++ b/ext/mysqli/tests/mysqli_report_wo_ps.phpt @@ -48,7 +48,11 @@ if (mysqli_get_server_version($link) >= 50600) mysqli_multi_query($link, "BAR; FOO;"); mysqli_query($link, "FOO"); mysqli_change_user($link, "0123456789-10-456789-20-456789-30-456789-40-456789-50-456789-60-456789-70-456789-80-456789-90-456789", "password", $db); - mysqli_kill($link, -1); + try { + mysqli_kill($link, -1); + } catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; + } // mysqli_ping() cannot be tested, because one would need to cause an error inside the C function to test it mysqli_real_query($link, "FOO"); @@ -64,7 +68,11 @@ if (mysqli_get_server_version($link) >= 50600) mysqli_multi_query($link, "BAR; FOO;"); mysqli_query($link, "FOO"); mysqli_change_user($link, "This might work if you accept anonymous users in your setup", "password", $db); - mysqli_kill($link, -1); + try { + mysqli_kill($link, -1); + } catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; + } mysqli_real_query($link, "FOO"); mysqli_select_db($link, "Oh lord, let this be an unknown database name"); @@ -106,12 +114,10 @@ Warning: mysqli_multi_query(): (%d/%d): You have an error in your SQL syntax; ch Warning: mysqli_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_change_user(): (%d/%d): Access denied for user '%s'@'%s' (using password: %s) in %s on line %d - -Warning: mysqli_kill(): processid should have positive value in %s on line %d +mysqli_kill(): Argument #2 ($connection_id) must be greater than 0 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_kill(): processid should have positive value in %s on line %d +mysqli_kill(): Argument #2 ($connection_id) must be greater than 0 [011] Access denied for user '%s'@'%s' (using password: YES) [014] Access denied for user '%s'@'%s' (using password: YES) done! From 392f0abf687c7519ba02d7d41b9622f0b3d1a8e2 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 16 Sep 2020 10:28:28 +0200 Subject: [PATCH 02/67] Avoid ubsan warning due to memcpy null This showed up in ext/mysqli/tests/mysqli_change_user.phpt on azure today. Not seeing it locally though, and also not sure why it decided to show up now... --- ext/mysqlnd/mysqlnd_wireprotocol.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c index ab7fc61f94771..515526d11df58 100644 --- a/ext/mysqlnd/mysqlnd_wireprotocol.c +++ b/ext/mysqlnd/mysqlnd_wireprotocol.c @@ -2144,7 +2144,9 @@ size_t php_mysqlnd_cached_sha2_result_write(MYSQLND_CONN_DATA * conn, void * _pa int1store(buffer + MYSQLND_HEADER_SIZE, '\2'); sent = pfc->data->m.send(pfc, vio, buffer, 1, stats, error_info); } else { - memcpy(buffer + MYSQLND_HEADER_SIZE, packet->password, packet->password_len); + if (packet->password_len != 0) { + memcpy(buffer + MYSQLND_HEADER_SIZE, packet->password, packet->password_len); + } sent = pfc->data->m.send(pfc, vio, buffer, packet->password_len, stats, error_info); } From f896b982cce6e458c78994c61aa13473e421b919 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 16 Sep 2020 12:04:29 +0300 Subject: [PATCH 03/67] Exclude trait methods from call-graph --- ext/opcache/Optimizer/zend_optimizer.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ext/opcache/Optimizer/zend_optimizer.c b/ext/opcache/Optimizer/zend_optimizer.c index c71e7c040ba6a..1c7f9aab293b7 100644 --- a/ext/opcache/Optimizer/zend_optimizer.c +++ b/ext/opcache/Optimizer/zend_optimizer.c @@ -844,7 +844,9 @@ zend_function *zend_optimizer_get_called_func( case ZEND_INIT_METHOD_CALL: if (opline->op1_type == IS_UNUSED && opline->op2_type == IS_CONST && Z_TYPE_P(CRT_CONSTANT(opline->op2)) == IS_STRING - && op_array->scope && !(op_array->scope->ce_flags & ZEND_ACC_TRAIT)) { + && op_array->scope + && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE) + && !(op_array->scope->ce_flags & ZEND_ACC_TRAIT)) { zend_string *method_name = Z_STR_P(CRT_CONSTANT(opline->op2) + 1); zend_function *fbc = zend_hash_find_ptr( &op_array->scope->function_table, method_name); From f08e666e4b804ae87dc0e5978cb7207fd7fd7d94 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 16 Sep 2020 10:42:10 +0200 Subject: [PATCH 04/67] Remove unused GMP_ABS() macro --- ext/gmp/gmp.c | 1 - 1 file changed, 1 deletion(-) diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c index 855513bf392d5..5cb4027d1e513 100644 --- a/ext/gmp/gmp.c +++ b/ext/gmp/gmp.c @@ -33,7 +33,6 @@ /* Needed for gmp_random() */ #include "ext/standard/php_rand.h" #include "ext/standard/php_lcg.h" -#define GMP_ABS(x) ((x) >= 0 ? (x) : -(x)) ZEND_DECLARE_MODULE_GLOBALS(gmp) static ZEND_GINIT_FUNCTION(gmp); From 0d99a5618f57f9bee25e1570962b8d7d83fce2b1 Mon Sep 17 00:00:00 2001 From: Dharman Date: Tue, 15 Sep 2020 18:42:38 +0100 Subject: [PATCH 05/67] Changed the wording of the error message "cannot be used in MYSQLI_USE_RESULT mode" sounds more correct than "cannot be used with MYSQLI_USE_RESULT" Closes GH-6137. --- ext/mysqli/mysqli_api.c | 6 +++--- ext/mysqli/tests/bug55582.phpt | 4 ++-- ext/mysqli/tests/mysqli_data_seek.phpt | 2 +- ext/mysqli/tests/mysqli_data_seek_oo.phpt | 2 +- ext/mysqli/tests/mysqli_num_rows.phpt | 2 +- ext/mysqli/tests/mysqli_use_result.phpt | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 88e6e91cd151a..e949053af0a40 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -740,9 +740,9 @@ PHP_FUNCTION(mysqli_data_seek) if (mysqli_result_is_unbuffered(result)) { if (getThis()) { - zend_throw_error(NULL, "mysqli_result::data_seek() cannot be used with MYSQLI_USE_RESULT"); + zend_throw_error(NULL, "mysqli_result::data_seek() cannot be used in MYSQLI_USE_RESULT mode"); } else { - zend_throw_error(NULL, "mysqli_data_seek() cannot be used with MYSQLI_USE_RESULT"); + zend_throw_error(NULL, "mysqli_data_seek() cannot be used in MYSQLI_USE_RESULT mode"); } RETURN_THROWS(); } @@ -1626,7 +1626,7 @@ PHP_FUNCTION(mysqli_num_rows) MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); if (mysqli_result_is_unbuffered_and_not_everything_is_fetched(result)) { - zend_throw_error(NULL, "mysqli_num_rows() cannot be used with MYSQLI_USE_RESULT"); + zend_throw_error(NULL, "mysqli_num_rows() cannot be used in MYSQLI_USE_RESULT mode"); RETURN_THROWS(); } diff --git a/ext/mysqli/tests/bug55582.phpt b/ext/mysqli/tests/bug55582.phpt index 817f7eecfe557..e66b4f14cfb5e 100644 --- a/ext/mysqli/tests/bug55582.phpt +++ b/ext/mysqli/tests/bug55582.phpt @@ -34,12 +34,12 @@ require_once("connect.inc"); ?> --EXPECT-- bool(true) -mysqli_num_rows() cannot be used with MYSQLI_USE_RESULT +mysqli_num_rows() cannot be used in MYSQLI_USE_RESULT mode array(1) { [1]=> string(1) "1" } -mysqli_num_rows() cannot be used with MYSQLI_USE_RESULT +mysqli_num_rows() cannot be used in MYSQLI_USE_RESULT mode NULL int(1) done diff --git a/ext/mysqli/tests/mysqli_data_seek.phpt b/ext/mysqli/tests/mysqli_data_seek.phpt index 2b477af3fd4b1..d467d3cf1a767 100644 --- a/ext/mysqli/tests/mysqli_data_seek.phpt +++ b/ext/mysqli/tests/mysqli_data_seek.phpt @@ -66,6 +66,6 @@ require_once('skipifconnectfailure.inc'); ?> --EXPECT-- mysqli_data_seek(): Argument #2 ($offset) must be greater than or equal to 0 -mysqli_data_seek() cannot be used with MYSQLI_USE_RESULT +mysqli_data_seek() cannot be used in MYSQLI_USE_RESULT mode mysqli_result object is already closed done! diff --git a/ext/mysqli/tests/mysqli_data_seek_oo.phpt b/ext/mysqli/tests/mysqli_data_seek_oo.phpt index ccbf86542ac59..e945199d1b7b1 100644 --- a/ext/mysqli/tests/mysqli_data_seek_oo.phpt +++ b/ext/mysqli/tests/mysqli_data_seek_oo.phpt @@ -78,6 +78,6 @@ require_once('skipifconnectfailure.inc'); --EXPECT-- mysqli_result object is already closed mysqli_result::data_seek(): Argument #1 ($offset) must be greater than or equal to 0 -mysqli_result::data_seek() cannot be used with MYSQLI_USE_RESULT +mysqli_result::data_seek() cannot be used in MYSQLI_USE_RESULT mode mysqli_result object is already closed done! diff --git a/ext/mysqli/tests/mysqli_num_rows.phpt b/ext/mysqli/tests/mysqli_num_rows.phpt index 4d09c256823a7..16b3aacd8096f 100644 --- a/ext/mysqli/tests/mysqli_num_rows.phpt +++ b/ext/mysqli/tests/mysqli_num_rows.phpt @@ -80,5 +80,5 @@ mysqli_result object is already closed mysqli_result object is already closed mysqli_result object is already closed run_tests.php don't fool me with your 'ungreedy' expression '.+?'! -mysqli_num_rows() cannot be used with MYSQLI_USE_RESULT +mysqli_num_rows() cannot be used in MYSQLI_USE_RESULT mode done! diff --git a/ext/mysqli/tests/mysqli_use_result.phpt b/ext/mysqli/tests/mysqli_use_result.phpt index c309d3e3910b5..a6d432d1fb443 100644 --- a/ext/mysqli/tests/mysqli_use_result.phpt +++ b/ext/mysqli/tests/mysqli_use_result.phpt @@ -56,6 +56,6 @@ require_once('skipifconnectfailure.inc'); require_once("clean_table.inc"); ?> --EXPECT-- -mysqli_data_seek() cannot be used with MYSQLI_USE_RESULT +mysqli_data_seek() cannot be used in MYSQLI_USE_RESULT mode mysqli object is already closed done! From f786c0e097f748b32a3aefb116c7d9dcc5bd3ee9 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 16 Sep 2020 14:22:36 +0300 Subject: [PATCH 06/67] Optimize code for FETCH_THIS + INIT_METHOD_CALL/ASSIGN_OBJ_OP/etc --- ext/opcache/jit/zend_jit_disasm_x86.c | 2 ++ ext/opcache/jit/zend_jit_helpers.c | 45 +++++++++++++++++---------- ext/opcache/jit/zend_jit_trace.c | 15 ++++++--- ext/opcache/jit/zend_jit_x86.dasc | 26 ++++++++++------ 4 files changed, 58 insertions(+), 30 deletions(-) diff --git a/ext/opcache/jit/zend_jit_disasm_x86.c b/ext/opcache/jit/zend_jit_disasm_x86.c index 07884ad03a52c..a470179917e6d 100644 --- a/ext/opcache/jit/zend_jit_disasm_x86.c +++ b/ext/opcache/jit/zend_jit_disasm_x86.c @@ -399,9 +399,11 @@ static int zend_jit_disasm_init(void) REGISTER_HELPER(zend_jit_find_func_helper); REGISTER_HELPER(zend_jit_find_ns_func_helper); REGISTER_HELPER(zend_jit_find_method_helper); + REGISTER_HELPER(zend_jit_find_method_tmp_helper); REGISTER_HELPER(zend_jit_push_static_metod_call_frame); REGISTER_HELPER(zend_jit_push_static_metod_call_frame_tmp); REGISTER_HELPER(zend_jit_invalid_method_call); + REGISTER_HELPER(zend_jit_invalid_method_call_tmp); REGISTER_HELPER(zend_jit_unref_helper); REGISTER_HELPER(zend_jit_extend_stack_helper); REGISTER_HELPER(zend_jit_int_extend_stack_helper); diff --git a/ext/opcache/jit/zend_jit_helpers.c b/ext/opcache/jit/zend_jit_helpers.c index 03e4041f0aab1..240311719dce1 100644 --- a/ext/opcache/jit/zend_jit_helpers.c +++ b/ext/opcache/jit/zend_jit_helpers.c @@ -107,9 +107,15 @@ static ZEND_COLD void ZEND_FASTCALL zend_jit_invalid_method_call(zval *object) } zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_zval_type_name(object)); - if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { - zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); - } +} + +static ZEND_COLD void ZEND_FASTCALL zend_jit_invalid_method_call_tmp(zval *object) +{ + zend_execute_data *execute_data = EG(current_execute_data); + const zend_op *opline = EX(opline); + + zend_jit_invalid_method_call(object); + zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); } static zend_never_inline ZEND_COLD void ZEND_FASTCALL zend_undefined_method(const zend_class_entry *ce, const zend_string *method) @@ -136,17 +142,13 @@ static zend_function* ZEND_FASTCALL zend_jit_find_method_helper(zend_object *obj zend_execute_data *execute_data = EG(current_execute_data); const zend_op *opline = EX(opline); zend_class_entry *called_scope = obj->ce; - zend_object *orig_obj = obj; zend_function *fbc; - fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), function_name + 1); + fbc = obj->handlers->get_method(obj_ptr, Z_STR_P(function_name), function_name + 1); if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(called_scope, Z_STR_P(function_name)); } - if ((opline->op1_type & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) { - zend_objects_store_del(orig_obj); - } return NULL; } @@ -154,14 +156,7 @@ static zend_function* ZEND_FASTCALL zend_jit_find_method_helper(zend_object *obj zend_init_func_run_time_cache(&fbc->op_array); } - if (UNEXPECTED(obj != orig_obj)) { - if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { - GC_ADDREF(obj); - if (GC_DELREF(orig_obj) == 0) { - zend_objects_store_del(orig_obj); - } - } - *obj_ptr = obj; + if (UNEXPECTED(obj != *obj_ptr)) { return fbc; } @@ -172,6 +167,24 @@ static zend_function* ZEND_FASTCALL zend_jit_find_method_helper(zend_object *obj return fbc; } +static zend_function* ZEND_FASTCALL zend_jit_find_method_tmp_helper(zend_object *obj, zval *function_name, zend_object **obj_ptr) +{ + zend_function *fbc; + + fbc = zend_jit_find_method_helper(obj, function_name, obj_ptr); + if (!fbc) { + if (GC_DELREF(obj) == 0) { + zend_objects_store_del(obj); + } + } else if (obj != *obj_ptr) { + GC_ADDREF(obj); + if (GC_DELREF(obj) == 0) { + zend_objects_store_del(obj); + } + } + return fbc; +} + static zend_execute_data* ZEND_FASTCALL zend_jit_push_static_metod_call_frame(zend_object *obj, zend_function *fbc, uint32_t num_args) { zend_class_entry *scope = obj->ce; diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index e8cc51cd7f3a7..8fa26e700bf2d 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -2827,7 +2827,10 @@ static zend_bool zend_jit_may_delay_fetch_this(zend_ssa *ssa, const zend_op **ss } opline = ssa_opcodes[use]; - if (opline->opcode == ZEND_FETCH_OBJ_FUNC_ARG) { + if (opline->opcode == ZEND_INIT_METHOD_CALL) { + return (opline->op2_type == IS_CONST && + Z_TYPE_P(RT_CONSTANT(opline, opline->op2)) == IS_STRING); + } else if (opline->opcode == ZEND_FETCH_OBJ_FUNC_ARG) { if (!JIT_G(current_frame) || !JIT_G(current_frame)->call || !JIT_G(current_frame)->call->func @@ -2837,7 +2840,12 @@ static zend_bool zend_jit_may_delay_fetch_this(zend_ssa *ssa, const zend_op **ss } else if (opline->opcode != ZEND_FETCH_OBJ_R && opline->opcode != ZEND_FETCH_OBJ_IS && opline->opcode != ZEND_FETCH_OBJ_W - && opline->opcode != ZEND_ASSIGN_OBJ) { + && opline->opcode != ZEND_ASSIGN_OBJ + && opline->opcode != ZEND_ASSIGN_OBJ_OP + && opline->opcode != ZEND_PRE_INC_OBJ + && opline->opcode != ZEND_PRE_DEC_OBJ + && opline->opcode != ZEND_POST_INC_OBJ + && opline->opcode != ZEND_POST_DEC_OBJ) { return 0; } @@ -5001,9 +5009,6 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par op1_addr = 0; } else { op1_info = OP1_INFO(); - if (!(op1_info & MAY_BE_OBJECT)) { - goto generic_dynamic_call; - } op1_addr = OP1_REG_ADDR(); if (orig_op1_type != IS_UNKNOWN && (orig_op1_type & IS_TRACE_REFERENCE)) { diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index 927ed9081f14a..4fccf22d38a6e 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -8477,7 +8477,7 @@ typedef struct _zend_closure { zif_handler orig_internal_handler; } zend_closure; -static int zend_jit_push_call_frame(dasm_State **Dst, const zend_op *opline, zend_function *func, zend_bool is_closure) +static int zend_jit_push_call_frame(dasm_State **Dst, const zend_op *opline, zend_function *func, zend_bool is_closure, zend_bool use_this) { uint32_t used_stack; @@ -8599,7 +8599,7 @@ static int zend_jit_push_call_frame(dasm_State **Dst, const zend_op *opline, zen | // Z_PTR(call->This) = obj; | mov r1, aword T1 | mov aword EX:RX->This.value.ptr, r1 - if (opline->op1_type == IS_UNUSED) { + if (opline->op1_type == IS_UNUSED || use_this) { | // call->call_info |= ZEND_CALL_HAS_THIS; if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { | mov dword EX:RX->This.u1.type_info, ZEND_CALL_HAS_THIS @@ -9038,7 +9038,7 @@ static int zend_jit_init_fcall(dasm_State **Dst, const zend_op *opline, uint32_t |3: } - if (!zend_jit_push_call_frame(Dst, opline, func, 0)) { + if (!zend_jit_push_call_frame(Dst, opline, func, 0, 0)) { return 0; } @@ -9116,7 +9116,11 @@ static int zend_jit_init_method_call(dasm_State **Dst, | LOAD_ZVAL_ADDR FCARG1a, op1_addr } | SET_EX_OPLINE opline, r0 - | EXT_CALL zend_jit_invalid_method_call, r0 + if ((opline->op1_type & (IS_VAR|IS_TMP_VAR)) && !use_this) { + | EXT_CALL zend_jit_invalid_method_call_tmp, r0 + } else { + | EXT_CALL zend_jit_invalid_method_call, r0 + } | jmp ->exception_handler |.code } @@ -9169,7 +9173,11 @@ static int zend_jit_init_method_call(dasm_State **Dst, | push r0 |.endif | SET_EX_OPLINE opline, r0 - | EXT_CALL zend_jit_find_method_helper, r0 + if ((opline->op1_type & (IS_VAR|IS_TMP_VAR)) && !use_this) { + | EXT_CALL zend_jit_find_method_tmp_helper, r0 + } else { + | EXT_CALL zend_jit_find_method_helper, r0 + } | test r0, r0 | jz ->exception_handler |.if not(X64) @@ -9247,7 +9255,7 @@ static int zend_jit_init_method_call(dasm_State **Dst, | sub r4, 12 | push opline->extended_value |.endif - if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { + if ((opline->op1_type & (IS_VAR|IS_TMP_VAR)) && !use_this) { | EXT_CALL zend_jit_push_static_metod_call_frame_tmp, r0 } else { | EXT_CALL zend_jit_push_static_metod_call_frame, r0 @@ -9255,7 +9263,7 @@ static int zend_jit_init_method_call(dasm_State **Dst, |.if not(X64) | add r4, 12 |.endif - if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { + if ((opline->op1_type & (IS_VAR|IS_TMP_VAR) && !use_this)) { | test r0, r0 | jz ->exception_handler } @@ -9268,7 +9276,7 @@ static int zend_jit_init_method_call(dasm_State **Dst, } if (!func || (func->common.fn_flags & ZEND_ACC_STATIC) == 0) { - if (!zend_jit_push_call_frame(Dst, opline, func, 0)) { + if (!zend_jit_push_call_frame(Dst, opline, func, 0, use_this)) { return 0; } } @@ -9366,7 +9374,7 @@ static int zend_jit_init_closure_call(dasm_State **Dst, } } - if (!zend_jit_push_call_frame(Dst, opline, func, 1)) { + if (!zend_jit_push_call_frame(Dst, opline, func, 1, 0)) { return 0; } From 7a48381e22668240b5a4f233cb4ba3f547d94107 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Wed, 16 Sep 2020 13:45:13 +0200 Subject: [PATCH 07/67] XMLReader::getAttributeNs() can no longer return false --- ext/xmlreader/php_xmlreader.stub.php | 2 +- ext/xmlreader/php_xmlreader_arginfo.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/xmlreader/php_xmlreader.stub.php b/ext/xmlreader/php_xmlreader.stub.php index 582919d49721f..7879114b88acd 100644 --- a/ext/xmlreader/php_xmlreader.stub.php +++ b/ext/xmlreader/php_xmlreader.stub.php @@ -13,7 +13,7 @@ public function getAttribute(string $name) {} /** @return string|null */ public function getAttributeNo(int $index) {} - /** @return string|null|false */ + /** @return string|null */ public function getAttributeNs(string $name, string $namespaceURI) {} /** @return bool */ diff --git a/ext/xmlreader/php_xmlreader_arginfo.h b/ext/xmlreader/php_xmlreader_arginfo.h index 0690d414163e5..438519d175c00 100644 --- a/ext/xmlreader/php_xmlreader_arginfo.h +++ b/ext/xmlreader/php_xmlreader_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 90e6d525ba87399c54f36965ebf18dbf65084617 */ + * Stub hash: 88fc95de4659089aa7ac11c43b4b9d3cc4ea11ad */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLReader_close, 0, 0, 0) ZEND_END_ARG_INFO() From 81d6ceedec637fb62e259daa76770af7b581cc73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Wed, 16 Sep 2020 13:47:58 +0200 Subject: [PATCH 08/67] Update php_xmlreader.stub.php --- ext/xmlreader/php_xmlreader.stub.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/xmlreader/php_xmlreader.stub.php b/ext/xmlreader/php_xmlreader.stub.php index 7879114b88acd..844a8fddca471 100644 --- a/ext/xmlreader/php_xmlreader.stub.php +++ b/ext/xmlreader/php_xmlreader.stub.php @@ -76,6 +76,6 @@ public function setRelaxNGSchemaSource(?string $source) {} /** @return bool|XMLReader */ public static function XML(string $source, ?string $encoding = null, int $options = 0) {} - /** @return DOMNode|bool */ + /** @return DOMNode|false|null */ public function expand(?DOMNode $basenode = null) {} } From e7e309929986091772bb06d6483cfe0a73bf9d7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Wed, 16 Sep 2020 13:51:36 +0200 Subject: [PATCH 09/67] Update xmlreader arginfo hash My git client (GitHub Desktop) decided to commit and push my staged changes, so arginfo generation was not done with the previous commit. --- ext/xmlreader/php_xmlreader_arginfo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/xmlreader/php_xmlreader_arginfo.h b/ext/xmlreader/php_xmlreader_arginfo.h index 438519d175c00..0d12174edf862 100644 --- a/ext/xmlreader/php_xmlreader_arginfo.h +++ b/ext/xmlreader/php_xmlreader_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 88fc95de4659089aa7ac11c43b4b9d3cc4ea11ad */ + * Stub hash: 65f093ef5916078c10dd4bff7e854561f153ab9c */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLReader_close, 0, 0, 0) ZEND_END_ARG_INFO() From 0286decdb4acdfedd6365ed46f06e43cfdbf3673 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 16 Sep 2020 11:04:56 +0200 Subject: [PATCH 10/67] Accept GMP|string|int union in GMP functions This changes GMP functions to accept a GMP|string|int union with standard semantics (and thus also uses it in function signatures). Relative to the previous behavior, this means that GMP functions in weak mode now also accept float and null, and in strict mode no longer accept bool, and have full type information. Closes GH-6139. --- ext/gmp/gmp.c | 29 ++- ext/gmp/gmp.stub.php | 287 ++++++++------------------ ext/gmp/gmp_arginfo.h | 68 +++--- ext/gmp/tests/gmp_abs.phpt | 4 +- ext/gmp/tests/gmp_and.phpt | 6 +- ext/gmp/tests/gmp_cmp.phpt | 2 +- ext/gmp/tests/gmp_com.phpt | 2 +- ext/gmp/tests/gmp_div_q.phpt | 4 +- ext/gmp/tests/gmp_div_qr.phpt | 4 +- ext/gmp/tests/gmp_div_r.phpt | 4 +- ext/gmp/tests/gmp_fact.phpt | 11 +- ext/gmp/tests/gmp_gcdext.phpt | 4 +- ext/gmp/tests/gmp_hamdist.phpt | 6 +- ext/gmp/tests/gmp_intval.phpt | 43 ++-- ext/gmp/tests/gmp_invert.phpt | 6 +- ext/gmp/tests/gmp_jacobi.phpt | 6 +- ext/gmp/tests/gmp_legendre.phpt | 6 +- ext/gmp/tests/gmp_mod.phpt | 2 +- ext/gmp/tests/gmp_neg.phpt | 2 +- ext/gmp/tests/gmp_nextprime.phpt | 4 +- ext/gmp/tests/gmp_or.phpt | 6 +- ext/gmp/tests/gmp_perfect_square.phpt | 2 +- ext/gmp/tests/gmp_popcount.phpt | 2 +- ext/gmp/tests/gmp_pow.phpt | 2 +- ext/gmp/tests/gmp_pown.phpt | 8 +- ext/gmp/tests/gmp_prob_prime.phpt | 2 +- ext/gmp/tests/gmp_scan0.phpt | 2 +- ext/gmp/tests/gmp_scan1.phpt | 2 +- ext/gmp/tests/gmp_sign.phpt | 2 +- ext/gmp/tests/gmp_sqrt.phpt | 2 +- ext/gmp/tests/gmp_sqrtrem.phpt | 2 +- ext/gmp/tests/gmp_strict_types.phpt | 55 +++++ ext/gmp/tests/gmp_strval.phpt | 6 +- ext/gmp/tests/gmp_sub.phpt | 6 +- ext/gmp/tests/gmp_xor.phpt | 6 +- ext/gmp/tests/overloading.phpt | 2 +- 36 files changed, 275 insertions(+), 332 deletions(-) create mode 100644 ext/gmp/tests/gmp_strict_types.phpt diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c index 5cb4027d1e513..8df61de51bdab 100644 --- a/ext/gmp/gmp.c +++ b/ext/gmp/gmp.c @@ -589,11 +589,8 @@ static int convert_to_gmp(mpz_t gmpnumber, zval *val, zend_long base, uint32_t a { switch (Z_TYPE_P(val)) { case IS_LONG: - case IS_FALSE: - case IS_TRUE: { - mpz_set_si(gmpnumber, zval_get_long(val)); + mpz_set_si(gmpnumber, Z_LVAL_P(val)); return SUCCESS; - } case IS_STRING: { char *numstr = Z_STRVAL_P(val); zend_bool skip_lead = 0; @@ -623,14 +620,16 @@ static int convert_to_gmp(mpz_t gmpnumber, zval *val, zend_long base, uint32_t a return SUCCESS; } - default: - /* if unserializing */ - if (arg_pos == 0) { - php_error_docref(NULL, E_WARNING, "Cannot convert variable of type %s to GMP", zend_zval_type_name(val)); + default: { + zend_long lval; + if (!zend_parse_arg_long_slow(val, &lval)) { + zend_argument_type_error(arg_pos, "must be of type GMP|string|int, %s given", zend_zval_type_name(val)); return FAILURE; } - zend_argument_type_error(arg_pos, "must be of type GMP|string|int|bool, %s given", zend_zval_type_name(val)); - return FAILURE; + + mpz_set_si(gmpnumber, lval); + return SUCCESS; + } } } /* }}} */ @@ -992,16 +991,16 @@ ZEND_FUNCTION(gmp_export) ZEND_FUNCTION(gmp_intval) { zval *gmpnumber_arg; + mpz_ptr gmpnum; + gmp_temp_t temp_a; if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &gmpnumber_arg) == FAILURE){ RETURN_THROWS(); } - if (IS_GMP(gmpnumber_arg)) { - RETVAL_LONG(mpz_get_si(GET_GMP_FROM_ZVAL(gmpnumber_arg))); - } else { - RETVAL_LONG(zval_get_long(gmpnumber_arg)); - } + FETCH_GMP_ZVAL(gmpnum, gmpnumber_arg, temp_a, 1); + RETVAL_LONG(mpz_get_si(gmpnum)); + FREE_GMP_TEMP(temp_a); } /* }}} */ diff --git a/ext/gmp/gmp.stub.php b/ext/gmp/gmp.stub.php index 6d4390ab411fb..8f2c6ed944fd2 100644 --- a/ext/gmp/gmp.stub.php +++ b/ext/gmp/gmp.stub.php @@ -6,222 +6,105 @@ class GMP { } -/** @param int|bool|string $number */ -function gmp_init($number, int $base = 0): GMP {} +function gmp_init(int|string $number, int $base = 0): GMP {} function gmp_import(string $data, int $word_size = 1, int $options = GMP_MSW_FIRST | GMP_NATIVE_ENDIAN): GMP {} -/** @param GMP|int|bool|string $gmpnumber */ -function gmp_export($gmpnumber, int $word_size = 1, int $options = GMP_MSW_FIRST | GMP_NATIVE_ENDIAN): string {} - -/** @param GMP|int|bool|string $gmpnumber */ -function gmp_intval($gmpnumber): int {} - -/** @param GMP|int|bool|string $gmpnumber */ -function gmp_strval($gmpnumber, int $base = 10): string {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_add($a, $b): GMP {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_sub($a, $b): GMP {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_mul($a, $b): GMP {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_div_qr($a, $b, int $round = GMP_ROUND_ZERO): array {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_div_q($a, $b, int $round = GMP_ROUND_ZERO): GMP {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_div_r($a, $b, int $round = GMP_ROUND_ZERO): GMP {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - * @alias gmp_div_q - */ -function gmp_div($a, $b, int $round = GMP_ROUND_ZERO): GMP {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_mod($a, $b): GMP {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_divexact($a, $b): GMP {} - -/** @param GMP|int|bool|string $a */ -function gmp_neg($a): GMP {} - -/** @param GMP|int|bool|string $a */ -function gmp_abs($a): GMP {} - -/** @param GMP|int|bool|string $a */ -function gmp_fact($a): GMP {} - -/** @param GMP|int|bool|string $a */ -function gmp_sqrt($a): GMP {} - -/** @param GMP|int|bool|string $a */ -function gmp_sqrtrem($a): array {} - -/** @param GMP|int|bool|string $a */ -function gmp_root($a, int $nth): GMP {} - -/** @param GMP|int|bool|string $a */ -function gmp_rootrem($a, int $nth): array {} - -/** @param GMP|int|bool|string $base */ -function gmp_pow($base, int $exp): GMP {} - -/** - * @param GMP|int|bool|string $base - * @param GMP|int|bool|string $exp - * @param GMP|int|bool|string $mod - */ -function gmp_powm($base, $exp, $mod): GMP {} - -/** @param GMP|int|bool|string $a */ -function gmp_perfect_square($a): bool {} - -/** @param GMP|int|bool|string $a */ -function gmp_perfect_power($a): bool {} - -/** @param GMP|int|bool|string $a */ -function gmp_prob_prime($a, int $reps = 10): int {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_gcd($a, $b): GMP {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_gcdext($a, $b): array {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_lcm($a, $b): GMP {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_invert($a, $b): GMP|false {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_jacobi($a, $b): int {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_legendre($a, $b): int {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_kronecker($a, $b): int {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_cmp($a, $b): int {} - -/** @param GMP|int|bool|string $a */ -function gmp_sign($a): int {} - -/** @param GMP|int|bool|string $seed */ -function gmp_random_seed($seed): void {} +function gmp_export(GMP|int|string $gmpnumber, int $word_size = 1, int $options = GMP_MSW_FIRST | GMP_NATIVE_ENDIAN): string {} + +function gmp_intval(GMP|int|string $gmpnumber): int {} + +function gmp_strval(GMP|int|string $gmpnumber, int $base = 10): string {} + +function gmp_add(GMP|int|string $a, GMP|int|string $b): GMP {} + +function gmp_sub(GMP|int|string $a, GMP|int|string $b): GMP {} + +function gmp_mul(GMP|int|string $a, GMP|int|string $b): GMP {} + +function gmp_div_qr(GMP|int|string $a, GMP|int|string $b, int $round = GMP_ROUND_ZERO): array {} + +function gmp_div_q(GMP|int|string $a, GMP|int|string $b, int $round = GMP_ROUND_ZERO): GMP {} + +function gmp_div_r(GMP|int|string $a, GMP|int|string $b, int $round = GMP_ROUND_ZERO): GMP {} + +/** @alias gmp_div_q */ +function gmp_div(GMP|int|string $a, GMP|int|string $b, int $round = GMP_ROUND_ZERO): GMP {} + +function gmp_mod(GMP|int|string $a, GMP|int|string $b): GMP {} + +function gmp_divexact(GMP|int|string $a, GMP|int|string $b): GMP {} + +function gmp_neg(GMP|int|string $a): GMP {} + +function gmp_abs(GMP|int|string $a): GMP {} + +function gmp_fact(GMP|int|string $a): GMP {} + +function gmp_sqrt(GMP|int|string $a): GMP {} + +function gmp_sqrtrem(GMP|int|string $a): array {} + +function gmp_root(GMP|int|string $a, int $nth): GMP {} + +function gmp_rootrem(GMP|int|string $a, int $nth): array {} + +function gmp_pow(GMP|int|string $base, int $exp): GMP {} + +function gmp_powm(GMP|int|string $base, GMP|int|string $exp, GMP|int|string $mod): GMP {} + +function gmp_perfect_square(GMP|int|string $a): bool {} + +function gmp_perfect_power(GMP|int|string $a): bool {} + +function gmp_prob_prime(GMP|int|string $a, int $reps = 10): int {} + +function gmp_gcd(GMP|int|string $a, GMP|int|string $b): GMP {} + +function gmp_gcdext(GMP|int|string $a, GMP|int|string $b): array {} + +function gmp_lcm(GMP|int|string $a, GMP|int|string $b): GMP {} + +function gmp_invert(GMP|int|string $a, GMP|int|string $b): GMP|false {} + +function gmp_jacobi(GMP|int|string $a, GMP|int|string $b): int {} + +function gmp_legendre(GMP|int|string $a, GMP|int|string $b): int {} + +function gmp_kronecker(GMP|int|string $a, GMP|int|string $b): int {} + +function gmp_cmp(GMP|int|string $a, GMP|int|string $b): int {} + +function gmp_sign(GMP|int|string $a): int {} + +function gmp_random_seed(GMP|int|string $seed): void {} function gmp_random_bits(int $bits): GMP {} -/** - * @param GMP|int|bool|string $min - * @param GMP|int|bool|string $max - **/ -function gmp_random_range($min, $max): GMP {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_and($a, $b): GMP {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_or($a, $b): GMP {} - -/** @param GMP|int|bool|string $a */ -function gmp_com($a): GMP {} - -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_xor($a, $b): GMP {} +function gmp_random_range(GMP|int|string $min, GMP|int|string $max): GMP {} + +function gmp_and(GMP|int|string $a, GMP|int|string $b): GMP {} + +function gmp_or(GMP|int|string $a, GMP|int|string $b): GMP {} + +function gmp_com(GMP|int|string $a): GMP {} + +function gmp_xor(GMP|int|string $a, GMP|int|string $b): GMP {} function gmp_setbit(GMP $a, int $index, bool $set_clear = true): void {} function gmp_clrbit(GMP $a, int $index): void {} -/** @param GMP|int|bool|string $a */ -function gmp_testbit($a, int $index): bool {} +function gmp_testbit(GMP|int|string $a, int $index): bool {} -/** @param GMP|int|bool|string $a */ -function gmp_scan0($a, int $start): int {} +function gmp_scan0(GMP|int|string $a, int $start): int {} -/** @param GMP|int|bool|string $a */ -function gmp_scan1($a, int $start): int {} +function gmp_scan1(GMP|int|string $a, int $start): int {} -/** @param GMP|int|bool|string $a */ -function gmp_popcount($a): int {} +function gmp_popcount(GMP|int|string $a): int {} -/** - * @param GMP|int|bool|string $a - * @param GMP|int|bool|string $b - */ -function gmp_hamdist($a, $b): int {} +function gmp_hamdist(GMP|int|string $a, GMP|int|string $b): int {} -/** @param GMP|int|bool|string $a */ -function gmp_nextprime($a): GMP {} +function gmp_nextprime(GMP|int|string $a): GMP {} -/** @param GMP|int|bool|string $a */ -function gmp_binomial($a, int $b): GMP {} +function gmp_binomial(GMP|int|string $a, int $b): GMP {} diff --git a/ext/gmp/gmp_arginfo.h b/ext/gmp/gmp_arginfo.h index e0fd4f8318635..9f4a44f6d7954 100644 --- a/ext/gmp/gmp_arginfo.h +++ b/ext/gmp/gmp_arginfo.h @@ -1,8 +1,8 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: b2bbdaeb1b396bd20eb59eefc92116be80ddb63b */ + * Stub hash: fe4ff47c3359705bf2b1a64a882659fabd370bab */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_gmp_init, 0, 1, GMP, 0) - ZEND_ARG_INFO(0, number) + ZEND_ARG_TYPE_MASK(0, number, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, base, IS_LONG, 0, "0") ZEND_END_ARG_INFO() @@ -13,23 +13,23 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_gmp_import, 0, 1, GMP, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gmp_export, 0, 1, IS_STRING, 0) - ZEND_ARG_INFO(0, gmpnumber) + ZEND_ARG_OBJ_TYPE_MASK(0, gmpnumber, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, word_size, IS_LONG, 0, "1") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "GMP_MSW_FIRST | GMP_NATIVE_ENDIAN") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gmp_intval, 0, 1, IS_LONG, 0) - ZEND_ARG_INFO(0, gmpnumber) + ZEND_ARG_OBJ_TYPE_MASK(0, gmpnumber, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gmp_strval, 0, 1, IS_STRING, 0) - ZEND_ARG_INFO(0, gmpnumber) + ZEND_ARG_OBJ_TYPE_MASK(0, gmpnumber, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, base, IS_LONG, 0, "10") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_gmp_add, 0, 2, GMP, 0) - ZEND_ARG_INFO(0, a) - ZEND_ARG_INFO(0, b) + ZEND_ARG_OBJ_TYPE_MASK(0, a, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) + ZEND_ARG_OBJ_TYPE_MASK(0, b, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() #define arginfo_gmp_sub arginfo_gmp_add @@ -37,14 +37,14 @@ ZEND_END_ARG_INFO() #define arginfo_gmp_mul arginfo_gmp_add ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gmp_div_qr, 0, 2, IS_ARRAY, 0) - ZEND_ARG_INFO(0, a) - ZEND_ARG_INFO(0, b) + ZEND_ARG_OBJ_TYPE_MASK(0, a, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) + ZEND_ARG_OBJ_TYPE_MASK(0, b, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, round, IS_LONG, 0, "GMP_ROUND_ZERO") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_gmp_div_q, 0, 2, GMP, 0) - ZEND_ARG_INFO(0, a) - ZEND_ARG_INFO(0, b) + ZEND_ARG_OBJ_TYPE_MASK(0, a, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) + ZEND_ARG_OBJ_TYPE_MASK(0, b, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, round, IS_LONG, 0, "GMP_ROUND_ZERO") ZEND_END_ARG_INFO() @@ -57,7 +57,7 @@ ZEND_END_ARG_INFO() #define arginfo_gmp_divexact arginfo_gmp_add ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_gmp_neg, 0, 1, GMP, 0) - ZEND_ARG_INFO(0, a) + ZEND_ARG_OBJ_TYPE_MASK(0, a, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() #define arginfo_gmp_abs arginfo_gmp_neg @@ -67,58 +67,58 @@ ZEND_END_ARG_INFO() #define arginfo_gmp_sqrt arginfo_gmp_neg ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gmp_sqrtrem, 0, 1, IS_ARRAY, 0) - ZEND_ARG_INFO(0, a) + ZEND_ARG_OBJ_TYPE_MASK(0, a, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_gmp_root, 0, 2, GMP, 0) - ZEND_ARG_INFO(0, a) + ZEND_ARG_OBJ_TYPE_MASK(0, a, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO(0, nth, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gmp_rootrem, 0, 2, IS_ARRAY, 0) - ZEND_ARG_INFO(0, a) + ZEND_ARG_OBJ_TYPE_MASK(0, a, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO(0, nth, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_gmp_pow, 0, 2, GMP, 0) - ZEND_ARG_INFO(0, base) + ZEND_ARG_OBJ_TYPE_MASK(0, base, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO(0, exp, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_gmp_powm, 0, 3, GMP, 0) - ZEND_ARG_INFO(0, base) - ZEND_ARG_INFO(0, exp) - ZEND_ARG_INFO(0, mod) + ZEND_ARG_OBJ_TYPE_MASK(0, base, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) + ZEND_ARG_OBJ_TYPE_MASK(0, exp, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) + ZEND_ARG_OBJ_TYPE_MASK(0, mod, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gmp_perfect_square, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, a) + ZEND_ARG_OBJ_TYPE_MASK(0, a, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() #define arginfo_gmp_perfect_power arginfo_gmp_perfect_square ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gmp_prob_prime, 0, 1, IS_LONG, 0) - ZEND_ARG_INFO(0, a) + ZEND_ARG_OBJ_TYPE_MASK(0, a, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, reps, IS_LONG, 0, "10") ZEND_END_ARG_INFO() #define arginfo_gmp_gcd arginfo_gmp_add ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gmp_gcdext, 0, 2, IS_ARRAY, 0) - ZEND_ARG_INFO(0, a) - ZEND_ARG_INFO(0, b) + ZEND_ARG_OBJ_TYPE_MASK(0, a, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) + ZEND_ARG_OBJ_TYPE_MASK(0, b, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() #define arginfo_gmp_lcm arginfo_gmp_add ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_gmp_invert, 0, 2, GMP, MAY_BE_FALSE) - ZEND_ARG_INFO(0, a) - ZEND_ARG_INFO(0, b) + ZEND_ARG_OBJ_TYPE_MASK(0, a, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) + ZEND_ARG_OBJ_TYPE_MASK(0, b, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gmp_jacobi, 0, 2, IS_LONG, 0) - ZEND_ARG_INFO(0, a) - ZEND_ARG_INFO(0, b) + ZEND_ARG_OBJ_TYPE_MASK(0, a, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) + ZEND_ARG_OBJ_TYPE_MASK(0, b, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() #define arginfo_gmp_legendre arginfo_gmp_jacobi @@ -128,11 +128,11 @@ ZEND_END_ARG_INFO() #define arginfo_gmp_cmp arginfo_gmp_jacobi ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gmp_sign, 0, 1, IS_LONG, 0) - ZEND_ARG_INFO(0, a) + ZEND_ARG_OBJ_TYPE_MASK(0, a, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gmp_random_seed, 0, 1, IS_VOID, 0) - ZEND_ARG_INFO(0, seed) + ZEND_ARG_OBJ_TYPE_MASK(0, seed, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_gmp_random_bits, 0, 1, GMP, 0) @@ -140,8 +140,8 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_gmp_random_bits, 0, 1, GMP, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_gmp_random_range, 0, 2, GMP, 0) - ZEND_ARG_INFO(0, min) - ZEND_ARG_INFO(0, max) + ZEND_ARG_OBJ_TYPE_MASK(0, min, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) + ZEND_ARG_OBJ_TYPE_MASK(0, max, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() #define arginfo_gmp_and arginfo_gmp_add @@ -164,12 +164,12 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gmp_clrbit, 0, 2, IS_VOID, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gmp_testbit, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, a) + ZEND_ARG_OBJ_TYPE_MASK(0, a, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gmp_scan0, 0, 2, IS_LONG, 0) - ZEND_ARG_INFO(0, a) + ZEND_ARG_OBJ_TYPE_MASK(0, a, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO(0, start, IS_LONG, 0) ZEND_END_ARG_INFO() @@ -182,7 +182,7 @@ ZEND_END_ARG_INFO() #define arginfo_gmp_nextprime arginfo_gmp_neg ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_gmp_binomial, 0, 2, GMP, 0) - ZEND_ARG_INFO(0, a) + ZEND_ARG_OBJ_TYPE_MASK(0, a, GMP, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO(0, b, IS_LONG, 0) ZEND_END_ARG_INFO() diff --git a/ext/gmp/tests/gmp_abs.phpt b/ext/gmp/tests/gmp_abs.phpt index 3b64004c89eda..0fb8ba5f1a291 100644 --- a/ext/gmp/tests/gmp_abs.phpt +++ b/ext/gmp/tests/gmp_abs.phpt @@ -47,11 +47,11 @@ echo "Done\n"; gmp_abs(): Argument #1 ($a) is not an integer string string(1) "0" string(1) "0" -gmp_abs(): Argument #1 ($a) must be of type GMP|string|int|bool, float given +gmp_abs(): Argument #1 ($a) must be of type GMP|string|int, float given string(21) "111111111111111111111" string(21) "111111111111111111111" string(1) "0" gmp_abs(): Argument #1 ($a) is not an integer string gmp_abs(): Argument #1 ($a) is not an integer string -gmp_abs(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_abs(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_and.phpt b/ext/gmp/tests/gmp_and.phpt index 90387e5f64635..26ed3dda3761b 100644 --- a/ext/gmp/tests/gmp_and.phpt +++ b/ext/gmp/tests/gmp_and.phpt @@ -50,7 +50,7 @@ string(4) "4544" gmp_and(): Argument #1 ($a) is not an integer string string(4) "1536" string(15) "424703623692768" -gmp_and(): Argument #1 ($a) must be of type GMP|string|int|bool, array given -gmp_and(): Argument #2 ($b) must be of type GMP|string|int|bool, array given -gmp_and(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_and(): Argument #1 ($a) must be of type GMP|string|int, array given +gmp_and(): Argument #2 ($b) must be of type GMP|string|int, array given +gmp_and(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_cmp.phpt b/ext/gmp/tests/gmp_cmp.phpt index 98e3c9ec3e994..35c2796ffaae2 100644 --- a/ext/gmp/tests/gmp_cmp.phpt +++ b/ext/gmp/tests/gmp_cmp.phpt @@ -34,5 +34,5 @@ int(1) int(-1) bool(true) int(0) -gmp_cmp(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_cmp(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_com.phpt b/ext/gmp/tests/gmp_com.phpt index 7f653f7ad3637..71f9f39e96a40 100644 --- a/ext/gmp/tests/gmp_com.phpt +++ b/ext/gmp/tests/gmp_com.phpt @@ -40,5 +40,5 @@ string(7) "-874654" string(4) "9875" string(9) "-98765468" string(12) "-98765463338" -gmp_com(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_com(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_div_q.phpt b/ext/gmp/tests/gmp_div_q.phpt index c86eb952fe8fe..08d82c6132c62 100644 --- a/ext/gmp/tests/gmp_div_q.phpt +++ b/ext/gmp/tests/gmp_div_q.phpt @@ -76,6 +76,6 @@ object(GMP)#1 (1) { ["num"]=> string(4) "9131" } -gmp_div_q(): Argument #1 ($a) must be of type GMP|string|int|bool, resource given -gmp_div_q(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_div_q(): Argument #1 ($a) must be of type GMP|string|int, resource given +gmp_div_q(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_div_qr.phpt b/ext/gmp/tests/gmp_div_qr.phpt index 7af729804e7aa..03c5facac2a48 100644 --- a/ext/gmp/tests/gmp_div_qr.phpt +++ b/ext/gmp/tests/gmp_div_qr.phpt @@ -159,6 +159,6 @@ array(2) { string(2) "10" } } -gmp_div_qr(): Argument #1 ($a) must be of type GMP|string|int|bool, resource given -gmp_div_qr(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_div_qr(): Argument #1 ($a) must be of type GMP|string|int, resource given +gmp_div_qr(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_div_r.phpt b/ext/gmp/tests/gmp_div_r.phpt index 1cf1e66252f50..eab9286fe763b 100644 --- a/ext/gmp/tests/gmp_div_r.phpt +++ b/ext/gmp/tests/gmp_div_r.phpt @@ -76,6 +76,6 @@ object(GMP)#3 (1) { ["num"]=> string(2) "10" } -gmp_div_r(): Argument #1 ($a) must be of type GMP|string|int|bool, resource given -gmp_div_r(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_div_r(): Argument #1 ($a) must be of type GMP|string|int, resource given +gmp_div_r(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_fact.phpt b/ext/gmp/tests/gmp_fact.phpt index 3829599788e11..81f16019f0928 100644 --- a/ext/gmp/tests/gmp_fact.phpt +++ b/ext/gmp/tests/gmp_fact.phpt @@ -23,12 +23,7 @@ try { echo $e->getMessage() . \PHP_EOL; } -try { - var_dump(gmp_strval(gmp_fact(1.1))); -} catch (\TypeError $e) { - echo $e->getMessage() . \PHP_EOL; -} - +var_dump(gmp_strval(gmp_fact(1.1))); var_dump(gmp_strval(gmp_fact(20))); var_dump(gmp_strval(gmp_fact("50"))); var_dump(gmp_strval(gmp_fact("10"))); @@ -57,12 +52,12 @@ gmp_fact(): Argument #1 ($a) is not an integer string string(1) "1" gmp_fact(): Argument #1 ($a) must be greater than or equal to 0 gmp_fact(): Argument #1 ($a) must be greater than or equal to 0 -gmp_fact(): Argument #1 ($a) must be of type GMP|string|int|bool, float given +string(1) "1" string(19) "2432902008176640000" string(65) "30414093201713378043612608166064768844377641568960512000000000000" string(7) "3628800" string(1) "1" string(9) "479001600" gmp_fact(): Argument #1 ($a) must be greater than or equal to 0 -gmp_fact(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_fact(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_gcdext.phpt b/ext/gmp/tests/gmp_gcdext.phpt index 9619ff755759d..abab8cdfdcd83 100644 --- a/ext/gmp/tests/gmp_gcdext.phpt +++ b/ext/gmp/tests/gmp_gcdext.phpt @@ -63,6 +63,6 @@ string(1) "1" string(1) "1" string(3) "195" string(3) "195" -gmp_gcdext(): Argument #2 ($b) must be of type GMP|string|int|bool, array given -gmp_gcdext(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_gcdext(): Argument #2 ($b) must be of type GMP|string|int, array given +gmp_gcdext(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_hamdist.phpt b/ext/gmp/tests/gmp_hamdist.phpt index ddaea9f0a4197..c4b28949411fd 100644 --- a/ext/gmp/tests/gmp_hamdist.phpt +++ b/ext/gmp/tests/gmp_hamdist.phpt @@ -42,7 +42,7 @@ int(-1) int(43) int(0) int(26) -gmp_hamdist(): Argument #2 ($b) must be of type GMP|string|int|bool, array given -gmp_hamdist(): Argument #1 ($a) must be of type GMP|string|int|bool, array given -gmp_hamdist(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_hamdist(): Argument #2 ($b) must be of type GMP|string|int, array given +gmp_hamdist(): Argument #1 ($a) must be of type GMP|string|int, array given +gmp_hamdist(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_intval.phpt b/ext/gmp/tests/gmp_intval.phpt index 019ab3d070c0e..9540f7a432ca1 100644 --- a/ext/gmp/tests/gmp_intval.phpt +++ b/ext/gmp/tests/gmp_intval.phpt @@ -5,36 +5,47 @@ gmp_intval() tests --FILE-- getMessage(), "\n"; +} +try { + var_dump(gmp_intval(new stdclass)); +} catch (TypeError $e) { + echo $e->getMessage(), "\n"; +} +try { + var_dump(gmp_intval(array())); +} catch (TypeError $e) { + echo $e->getMessage(), "\n"; +} +try { + var_dump(gmp_intval("1.0001")); +} catch (TypeError $e) { + echo $e->getMessage(), "\n"; +} + echo "Done\n"; ?> ---EXPECTF-- -int(0) -int(1) -int(1) +--EXPECT-- int(-1) int(-1) int(-2349828) int(2342344) - -Notice: Object of class stdClass could not be converted to int in %s on line %d int(1) -int(0) -int(%d) int(12345678) +gmp_intval(): Argument #1 ($gmpnumber) is not an integer string +gmp_intval(): Argument #1 ($gmpnumber) must be of type GMP|string|int, stdClass given +gmp_intval(): Argument #1 ($gmpnumber) must be of type GMP|string|int, array given +gmp_intval(): Argument #1 ($gmpnumber) is not an integer string Done diff --git a/ext/gmp/tests/gmp_invert.phpt b/ext/gmp/tests/gmp_invert.phpt index 8ea60b084789a..b5ab666061a25 100644 --- a/ext/gmp/tests/gmp_invert.phpt +++ b/ext/gmp/tests/gmp_invert.phpt @@ -53,7 +53,7 @@ string(1) "0" string(1) "0" string(22) "3498273496234234523441" string(1) "1" -gmp_invert(): Argument #1 ($a) must be of type GMP|string|int|bool, array given -gmp_invert(): Argument #2 ($b) must be of type GMP|string|int|bool, array given -gmp_invert(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_invert(): Argument #1 ($a) must be of type GMP|string|int, array given +gmp_invert(): Argument #2 ($b) must be of type GMP|string|int, array given +gmp_invert(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_jacobi.phpt b/ext/gmp/tests/gmp_jacobi.phpt index 4f40a94828cf7..116442457819b 100644 --- a/ext/gmp/tests/gmp_jacobi.phpt +++ b/ext/gmp/tests/gmp_jacobi.phpt @@ -56,7 +56,7 @@ string(1) "0" string(2) "-1" string(1) "0" string(2) "-1" -gmp_jacobi(): Argument #2 ($b) must be of type GMP|string|int|bool, array given -gmp_jacobi(): Argument #1 ($a) must be of type GMP|string|int|bool, array given -gmp_jacobi(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_jacobi(): Argument #2 ($b) must be of type GMP|string|int, array given +gmp_jacobi(): Argument #1 ($a) must be of type GMP|string|int, array given +gmp_jacobi(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_legendre.phpt b/ext/gmp/tests/gmp_legendre.phpt index e52686689e9ca..258e453e4de18 100644 --- a/ext/gmp/tests/gmp_legendre.phpt +++ b/ext/gmp/tests/gmp_legendre.phpt @@ -56,7 +56,7 @@ string(1) "0" string(2) "-1" string(1) "0" string(2) "-1" -gmp_legendre(): Argument #2 ($b) must be of type GMP|string|int|bool, array given -gmp_legendre(): Argument #1 ($a) must be of type GMP|string|int|bool, array given -gmp_legendre(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_legendre(): Argument #2 ($b) must be of type GMP|string|int, array given +gmp_legendre(): Argument #1 ($a) must be of type GMP|string|int, array given +gmp_legendre(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_mod.phpt b/ext/gmp/tests/gmp_mod.phpt index a8a56a4d37fb3..90868ab9d99da 100644 --- a/ext/gmp/tests/gmp_mod.phpt +++ b/ext/gmp/tests/gmp_mod.phpt @@ -43,7 +43,7 @@ object(GMP)#2 (1) { string(1) "0" } Modulo by zero -gmp_mod(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_mod(): Argument #1 ($a) must be of type GMP|string|int, array given object(GMP)#4 (1) { ["num"]=> string(5) "31161" diff --git a/ext/gmp/tests/gmp_neg.phpt b/ext/gmp/tests/gmp_neg.phpt index 0bded20758899..5d8e80cd5b620 100644 --- a/ext/gmp/tests/gmp_neg.phpt +++ b/ext/gmp/tests/gmp_neg.phpt @@ -40,5 +40,5 @@ gmp_neg(): Argument #1 ($a) is not an integer string int(0) int(0) string(21) "-12345678901234567890" -gmp_neg(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_neg(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_nextprime.phpt b/ext/gmp/tests/gmp_nextprime.phpt index 6f9e9bfaf6b8f..e2fa2703cbbc8 100644 --- a/ext/gmp/tests/gmp_nextprime.phpt +++ b/ext/gmp/tests/gmp_nextprime.phpt @@ -43,7 +43,7 @@ string(1) "2" string(1) "2" string(4) "1009" string(6) "100003" -gmp_nextprime(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_nextprime(): Argument #1 ($a) must be of type GMP|string|int, array given gmp_nextprime(): Argument #1 ($a) is not an integer string -gmp_nextprime(): Argument #1 ($a) must be of type GMP|string|int|bool, stdClass given +gmp_nextprime(): Argument #1 ($a) must be of type GMP|string|int, stdClass given Done diff --git a/ext/gmp/tests/gmp_or.phpt b/ext/gmp/tests/gmp_or.phpt index ad8f26a87afd2..5a34a82addf91 100644 --- a/ext/gmp/tests/gmp_or.phpt +++ b/ext/gmp/tests/gmp_or.phpt @@ -49,7 +49,7 @@ string(3) "-19" gmp_or(): Argument #1 ($a) is not an integer string string(15) "987657876576252" string(21) "987658441719689394144" -gmp_or(): Argument #1 ($a) must be of type GMP|string|int|bool, array given -gmp_or(): Argument #2 ($b) must be of type GMP|string|int|bool, array given -gmp_or(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_or(): Argument #1 ($a) must be of type GMP|string|int, array given +gmp_or(): Argument #2 ($b) must be of type GMP|string|int, array given +gmp_or(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_perfect_square.phpt b/ext/gmp/tests/gmp_perfect_square.phpt index 933b2fe9f9c32..d6cd09e40ef49 100644 --- a/ext/gmp/tests/gmp_perfect_square.phpt +++ b/ext/gmp/tests/gmp_perfect_square.phpt @@ -41,5 +41,5 @@ bool(false) bool(false) bool(true) bool(false) -gmp_perfect_square(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_perfect_square(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_popcount.phpt b/ext/gmp/tests/gmp_popcount.phpt index c38cb6f2b8d10..fa1a6172d4fb6 100644 --- a/ext/gmp/tests/gmp_popcount.phpt +++ b/ext/gmp/tests/gmp_popcount.phpt @@ -28,5 +28,5 @@ int(10) int(31) int(-1) int(20) -gmp_popcount(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_popcount(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_pow.phpt b/ext/gmp/tests/gmp_pow.phpt index b70226bb17e35..d4d20f2ce796a 100644 --- a/ext/gmp/tests/gmp_pow.phpt +++ b/ext/gmp/tests/gmp_pow.phpt @@ -57,5 +57,5 @@ gmp_pow(): Argument #2 ($exp) must be greater than or equal to 0 string(14) "10240000000000" string(14) "10240000000000" gmp_pow(): Argument #2 ($exp) must be of type int, array given -gmp_pow(): Argument #1 ($base) must be of type GMP|string|int|bool, array given +gmp_pow(): Argument #1 ($base) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_pown.phpt b/ext/gmp/tests/gmp_pown.phpt index ae3316b1adcdf..76d5576e47581 100644 --- a/ext/gmp/tests/gmp_pown.phpt +++ b/ext/gmp/tests/gmp_pown.phpt @@ -75,10 +75,10 @@ string(3) "171" string(3) "371" Modulo by zero Modulo by zero -gmp_powm(): Argument #1 ($base) must be of type GMP|string|int|bool, array given -gmp_powm(): Argument #2 ($exp) must be of type GMP|string|int|bool, array given -gmp_powm(): Argument #2 ($exp) must be of type GMP|string|int|bool, TypeError given -gmp_powm(): Argument #1 ($base) must be of type GMP|string|int|bool, array given +gmp_powm(): Argument #1 ($base) must be of type GMP|string|int, array given +gmp_powm(): Argument #2 ($exp) must be of type GMP|string|int, array given +gmp_powm(): Argument #2 ($exp) must be of type GMP|string|int, TypeError given +gmp_powm(): Argument #1 ($base) must be of type GMP|string|int, array given gmp_powm(): Argument #2 ($exp) must be greater than or equal to 0 object(GMP)#6 (1) { ["num"]=> diff --git a/ext/gmp/tests/gmp_prob_prime.phpt b/ext/gmp/tests/gmp_prob_prime.phpt index 15c7aaeaa554e..efc5cf4e165ae 100644 --- a/ext/gmp/tests/gmp_prob_prime.phpt +++ b/ext/gmp/tests/gmp_prob_prime.phpt @@ -75,5 +75,5 @@ int(0) int(0) int(0) int(0) -gmp_prob_prime(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_prob_prime(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_scan0.phpt b/ext/gmp/tests/gmp_scan0.phpt index e7b37d48667c2..017148c0119b0 100644 --- a/ext/gmp/tests/gmp_scan0.phpt +++ b/ext/gmp/tests/gmp_scan0.phpt @@ -34,5 +34,5 @@ int(0) int(5) int(200) int(13) -gmp_scan0(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_scan0(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_scan1.phpt b/ext/gmp/tests/gmp_scan1.phpt index 9274a659f4b27..ba480e3e9665e 100644 --- a/ext/gmp/tests/gmp_scan1.phpt +++ b/ext/gmp/tests/gmp_scan1.phpt @@ -34,5 +34,5 @@ int(12) int(9) int(-1) int(10) -gmp_scan1(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_scan1(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_sign.phpt b/ext/gmp/tests/gmp_sign.phpt index a660ed9e7631c..01567bb5c43f8 100644 --- a/ext/gmp/tests/gmp_sign.phpt +++ b/ext/gmp/tests/gmp_sign.phpt @@ -38,5 +38,5 @@ int(1) int(-1) gmp_sign(): Argument #1 ($a) is not an integer string gmp_init(): Argument #1 ($number) is not an integer string -gmp_sign(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_sign(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_sqrt.phpt b/ext/gmp/tests/gmp_sqrt.phpt index 78fa806ba37b6..19a44121b6593 100644 --- a/ext/gmp/tests/gmp_sqrt.phpt +++ b/ext/gmp/tests/gmp_sqrt.phpt @@ -48,5 +48,5 @@ string(2) "12" string(1) "0" gmp_sqrt(): Argument #1 ($a) must be greater than or equal to 0 string(2) "27" -gmp_sqrt(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_sqrt(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_sqrtrem.phpt b/ext/gmp/tests/gmp_sqrtrem.phpt index 819fe217c6077..0d63a54ff8e66 100644 --- a/ext/gmp/tests/gmp_sqrtrem.phpt +++ b/ext/gmp/tests/gmp_sqrtrem.phpt @@ -86,5 +86,5 @@ string(1) "1" gmp_sqrtrem(): Argument #1 ($a) must be greater than or equal to 0 string(4) "1000" string(1) "1" -gmp_sqrtrem(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_sqrtrem(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/gmp_strict_types.phpt b/ext/gmp/tests/gmp_strict_types.phpt new file mode 100644 index 0000000000000..8a2b5509a5c78 --- /dev/null +++ b/ext/gmp/tests/gmp_strict_types.phpt @@ -0,0 +1,55 @@ +--TEST-- +GMP functions with strict_types=1 +--FILE-- +getMessage(), "\n"; +} +try { + gmp_abs(false); +} catch (TypeError $e) { + echo $e->getMessage(), "\n"; +} +try { + gmp_abs(true); +} catch (TypeError $e) { + echo $e->getMessage(), "\n"; +} +try { + gmp_abs(null); +} catch (TypeError $e) { + echo $e->getMessage(), "\n"; +} +try { + gmp_abs([]); +} catch (TypeError $e) { + echo $e->getMessage(), "\n"; +} + +?> +--EXPECT-- +object(GMP)#2 (1) { + ["num"]=> + string(1) "1" +} +object(GMP)#2 (1) { + ["num"]=> + string(1) "1" +} +object(GMP)#2 (1) { + ["num"]=> + string(1) "1" +} +gmp_abs(): Argument #1 ($a) must be of type GMP|string|int, float given +gmp_abs(): Argument #1 ($a) must be of type GMP|string|int, bool given +gmp_abs(): Argument #1 ($a) must be of type GMP|string|int, bool given +gmp_abs(): Argument #1 ($a) must be of type GMP|string|int, null given +gmp_abs(): Argument #1 ($a) must be of type GMP|string|int, array given diff --git a/ext/gmp/tests/gmp_strval.phpt b/ext/gmp/tests/gmp_strval.phpt index 722cdfdd8f583..234465c294a6b 100644 --- a/ext/gmp/tests/gmp_strval.phpt +++ b/ext/gmp/tests/gmp_strval.phpt @@ -67,7 +67,7 @@ echo "Done\n"; --EXPECT-- gmp_strval(): Argument #1 ($gmpnumber) is not an integer string gmp_strval(): Argument #2 ($base) must be between 2 and 62, or -2 and -36 -gmp_strval(): Argument #1 ($gmpnumber) must be of type GMP|string|int|bool, resource given +gmp_strval(): Argument #1 ($gmpnumber) must be of type GMP|string|int, resource given string(7) "9765456" gmp_strval(): Argument #2 ($base) must be between 2 and 62, or -2 and -36 gmp_strval(): Argument #2 ($base) must be between 2 and 62, or -2 and -36 @@ -76,6 +76,6 @@ string(8) "-3373333" gmp_strval(): Argument #2 ($base) must be between 2 and 62, or -2 and -36 gmp_strval(): Argument #2 ($base) must be between 2 and 62, or -2 and -36 string(8) "-3373333" -gmp_strval(): Argument #1 ($gmpnumber) must be of type GMP|string|int|bool, array given -gmp_strval(): Argument #1 ($gmpnumber) must be of type GMP|string|int|bool, stdClass given +gmp_strval(): Argument #1 ($gmpnumber) must be of type GMP|string|int, array given +gmp_strval(): Argument #1 ($gmpnumber) must be of type GMP|string|int, stdClass given Done diff --git a/ext/gmp/tests/gmp_sub.phpt b/ext/gmp/tests/gmp_sub.phpt index 48b1c81092e5c..28a01f86ee640 100644 --- a/ext/gmp/tests/gmp_sub.phpt +++ b/ext/gmp/tests/gmp_sub.phpt @@ -38,7 +38,7 @@ echo "Done\n"; ?> --EXPECT-- gmp_sub(): Argument #1 ($a) is not an integer string -gmp_sub(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_sub(): Argument #1 ($a) must be of type GMP|string|int, array given object(GMP)#1 (1) { ["num"]=> string(2) "-1" @@ -49,6 +49,6 @@ object(GMP)#3 (1) { string(5) "10001" } string(5) "10001" -gmp_sub(): Argument #2 ($b) must be of type GMP|string|int|bool, stdClass given -gmp_sub(): Argument #1 ($a) must be of type GMP|string|int|bool, stdClass given +gmp_sub(): Argument #2 ($b) must be of type GMP|string|int, stdClass given +gmp_sub(): Argument #1 ($a) must be of type GMP|string|int, stdClass given Done diff --git a/ext/gmp/tests/gmp_xor.phpt b/ext/gmp/tests/gmp_xor.phpt index fadcd0086e32a..d81b5947fcbde 100644 --- a/ext/gmp/tests/gmp_xor.phpt +++ b/ext/gmp/tests/gmp_xor.phpt @@ -49,7 +49,7 @@ string(5) "-4563" gmp_xor(): Argument #1 ($a) is not an integer string string(15) "987657876574716" string(21) "987658017016065701376" -gmp_xor(): Argument #1 ($a) must be of type GMP|string|int|bool, array given -gmp_xor(): Argument #2 ($b) must be of type GMP|string|int|bool, array given -gmp_xor(): Argument #1 ($a) must be of type GMP|string|int|bool, array given +gmp_xor(): Argument #1 ($a) must be of type GMP|string|int, array given +gmp_xor(): Argument #2 ($b) must be of type GMP|string|int, array given +gmp_xor(): Argument #1 ($a) must be of type GMP|string|int, array given Done diff --git a/ext/gmp/tests/overloading.phpt b/ext/gmp/tests/overloading.phpt index e0fa6deb17cdd..75eafa3ee5b71 100644 --- a/ext/gmp/tests/overloading.phpt +++ b/ext/gmp/tests/overloading.phpt @@ -282,7 +282,7 @@ bool(false) bool(true) bool(false) bool(true) -main(): Argument #2 must be of type GMP|string|int|bool, stdClass given +main(): Argument #2 must be of type GMP|string|int, stdClass given object(GMP)#4 (1) { ["num"]=> string(2) "43" From c76910cd967f498065f50f17dcaad941792e8430 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Wed, 16 Sep 2020 21:19:36 +0200 Subject: [PATCH 11/67] Display types in stubs more uniformly In preparation for generating method signatures for the manual. This change gets rid of bogus false|null return types, a few unnecessary trailing backslashes, and settles on using ? when possible for nullable types. --- ext/dom/php_dom.stub.php | 5 ++--- ext/dom/php_dom_arginfo.h | 2 +- ext/imap/php_imap.stub.php | 12 ++++++------ ext/imap/php_imap_arginfo.h | 2 +- ext/intl/php_intl.stub.php | 2 +- ext/intl/php_intl_arginfo.h | 2 +- ext/oci8/oci8.stub.php | 4 ++-- ext/oci8/oci8_arginfo.h | 2 +- ext/pdo/pdo_stmt.stub.php | 2 +- ext/pdo/pdo_stmt_arginfo.h | 2 +- ext/sockets/sockets.stub.php | 2 +- ext/sockets/sockets_arginfo.h | 2 +- ext/spl/spl_directory.stub.php | 2 +- ext/spl/spl_directory_arginfo.h | 2 +- ext/standard/basic_functions.stub.php | 2 +- ext/standard/basic_functions_arginfo.h | 2 +- ext/zip/php_zip.stub.php | 8 ++++---- ext/zip/php_zip_arginfo.h | 2 +- 18 files changed, 28 insertions(+), 29 deletions(-) diff --git a/ext/dom/php_dom.stub.php b/ext/dom/php_dom.stub.php index 8ed6723250bf8..5f15f99e174e5 100644 --- a/ext/dom/php_dom.stub.php +++ b/ext/dom/php_dom.stub.php @@ -56,8 +56,7 @@ public function cloneNode(bool $deep = false) {} /** @return int */ public function getLineNo() {} - /** @return string|null - */ + /** @return string|null */ public function getNodePath() {} /** @return bool */ @@ -211,7 +210,7 @@ public function removeAttributeNode(string $qualifiedName) {} /** @return DOMAttr|bool */ public function setAttribute(string $qualifiedName, string $value) {} - /** @return null|false */ + /** @return bool|null */ public function setAttributeNS(?string $namespace, string $qualifiedName, string $value) {} /** @return DOMAttr|null|false */ diff --git a/ext/dom/php_dom_arginfo.h b/ext/dom/php_dom_arginfo.h index 7da82ba710fc1..d5da40e46393f 100644 --- a/ext/dom/php_dom_arginfo.h +++ b/ext/dom/php_dom_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 6d25769eb3f8686042dccc55d8d8bd5e3852676f */ + * Stub hash: 8ac9356f9b19b84e98d335bc9d091b022a0f549d */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_dom_import_simplexml, 0, 1, DOMElement, 1) ZEND_ARG_TYPE_INFO(0, node, IS_OBJECT, 0) diff --git a/ext/imap/php_imap.stub.php b/ext/imap/php_imap.stub.php index fb83dc6c5497f..d707af161c29a 100644 --- a/ext/imap/php_imap.stub.php +++ b/ext/imap/php_imap.stub.php @@ -35,7 +35,7 @@ function imap_headerinfo($stream_id, int $msg_no, int $from_length = 0, int $sub */ function imap_header($stream_id, int $msg_no, int $from_length = 0, int $subject_length = 0, string $default_host = UNKNOWN): stdClass|false {} -function imap_rfc822_parse_headers(string $headers, string $default_host = 'UNKNOWN'): \stdClass {} +function imap_rfc822_parse_headers(string $headers, string $default_host = 'UNKNOWN'): stdClass {} function imap_rfc822_write_address(string $mailbox, string $host, string $personal): string|false {} @@ -52,7 +52,7 @@ function imap_fetchtext($stream_id, int $msg_no, int $options = 0): string|false /** * @param resource $stream_id - * @return \stdClass|false + * @return stdClass|false */ function imap_bodystruct($stream_id, int $msg_no, string $section) {} @@ -166,12 +166,12 @@ function imap_utf8(string $mime_encoded_text): string {} /** * @param resource $stream_id - * @return \stdClass|false + * @return stdClass|false */ function imap_status($stream_id, string $mailbox, int $options) {} /** @param resource $stream_id */ -function imap_mailboxmsginfo($stream_id): \stdClass {} +function imap_mailboxmsginfo($stream_id): stdClass {} /** @param resource $stream_id */ function imap_setflag_full($stream_id, string $sequence, string $flag, int $options = 0): bool {} @@ -222,7 +222,7 @@ function imap_errors(): array|false {} function imap_last_error(): string|false {} /** @param resource $stream_id */ -function imap_search($stream_id, string $criteria, int $options = \SE_FREE, string $charset = ''): array|false {} +function imap_search($stream_id, string $criteria, int $options = SE_FREE, string $charset = ''): array|false {} function imap_utf7_decode(string $buf): string|false {} @@ -237,7 +237,7 @@ function imap_mutf7_to_utf8(string $in): string|false {} function imap_mime_header_decode(string $str): array|false {} /** @param resource $stream_id */ -function imap_thread($stream_id, int $options = \SE_FREE): array|false {} +function imap_thread($stream_id, int $options = SE_FREE): array|false {} function imap_timeout(int $timeout_type, int $timeout = -1): int|bool {} diff --git a/ext/imap/php_imap_arginfo.h b/ext/imap/php_imap_arginfo.h index fd679f99538d7..013ef9096c7aa 100644 --- a/ext/imap/php_imap_arginfo.h +++ b/ext/imap/php_imap_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 449bab2357a8a83cbe4f630a87776ebb5e0d65f6 */ + * Stub hash: 2c859e2e8d8de83dc517a245b5b34a6dd74e5dab */ ZEND_BEGIN_ARG_INFO_EX(arginfo_imap_open, 0, 0, 3) ZEND_ARG_TYPE_INFO(0, mailbox, IS_STRING, 0) diff --git a/ext/intl/php_intl.stub.php b/ext/intl/php_intl.stub.php index f2a1af1c2e2e0..67bd27be92a0f 100644 --- a/ext/intl/php_intl.stub.php +++ b/ext/intl/php_intl.stub.php @@ -5,7 +5,7 @@ /* calendar */ /** @param IntlTimeZone|DateTimeZone|string|null $timeZone */ -function intlcal_create_instance($timeZone = null, ?string $locale = null): IntlCalendar|null {} +function intlcal_create_instance($timeZone = null, ?string $locale = null): ?IntlCalendar {} function intlcal_get_keyword_values_for_locale(string $key, string $locale, bool $commonlyUsed): IntlIterator|false {} diff --git a/ext/intl/php_intl_arginfo.h b/ext/intl/php_intl_arginfo.h index 32f098d0bb878..1b1c0ea84dcf2 100644 --- a/ext/intl/php_intl_arginfo.h +++ b/ext/intl/php_intl_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 324b7ae3eaab4777117c1c6963bc841088e6b998 */ + * Stub hash: 943baf02eee2f720a45106e379534b3d4adc3072 */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_intlcal_create_instance, 0, 0, IntlCalendar, 1) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, timeZone, "null") diff --git a/ext/oci8/oci8.stub.php b/ext/oci8/oci8.stub.php index 917225f562655..58eb984f94c63 100644 --- a/ext/oci8/oci8.stub.php +++ b/ext/oci8/oci8.stub.php @@ -320,14 +320,14 @@ function ocifreecursor($statement_resource): bool {} /** * @param resource $connection_resource */ -function oci_close($connection_resource): bool|null {} +function oci_close($connection_resource): ?bool {} /** * @param resource $connection_resource * @alias oci_close * @deprecated */ -function ocilogoff($connection_resource): bool|null {} +function ocilogoff($connection_resource): ?bool {} /** * @return resource|false diff --git a/ext/oci8/oci8_arginfo.h b/ext/oci8/oci8_arginfo.h index 0bcc18f06a1fc..b385554bdfa58 100644 --- a/ext/oci8/oci8_arginfo.h +++ b/ext/oci8/oci8_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 6cdc7c967ce80c39eaef1c860ba8f8aa2cb3c979 */ + * Stub hash: 9c680329bc6159aae027df94230c6d2342021271 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_define_by_name, 0, 3, _IS_BOOL, 0) ZEND_ARG_INFO(0, statement_resource) diff --git a/ext/pdo/pdo_stmt.stub.php b/ext/pdo/pdo_stmt.stub.php index d0141ceb45eaf..b280f73ffdb3d 100644 --- a/ext/pdo/pdo_stmt.stub.php +++ b/ext/pdo/pdo_stmt.stub.php @@ -19,7 +19,7 @@ public function closeCursor() {} /** @return int|false */ public function columnCount() {} - /** @return false|null */ + /** @return bool|null */ public function debugDumpParams() {} /** @return string|false|null */ diff --git a/ext/pdo/pdo_stmt_arginfo.h b/ext/pdo/pdo_stmt_arginfo.h index c05606c6faac7..116449ad3aefe 100644 --- a/ext/pdo/pdo_stmt_arginfo.h +++ b/ext/pdo/pdo_stmt_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 18f2af62bebcbbbf0e298f781860c251cfa07930 */ + * Stub hash: a35e66ccff5e569f07ae8372e661e005943dfbc7 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_bindColumn, 0, 0, 2) ZEND_ARG_TYPE_MASK(0, column, MAY_BE_STRING|MAY_BE_LONG, NULL) diff --git a/ext/sockets/sockets.stub.php b/ext/sockets/sockets.stub.php index 547374fe97bd5..8acab114e563d 100644 --- a/ext/sockets/sockets.stub.php +++ b/ext/sockets/sockets.stub.php @@ -78,7 +78,7 @@ function socket_setopt(Socket $socket, int $level, int $optname, $optval): bool #ifdef HAVE_SOCKETPAIR /** @param array $fd */ -function socket_create_pair(int $domain, int $type, int $protocol, &$fd): bool|null {} +function socket_create_pair(int $domain, int $type, int $protocol, &$fd): ?bool {} #endif #ifdef HAVE_SHUTDOWN diff --git a/ext/sockets/sockets_arginfo.h b/ext/sockets/sockets_arginfo.h index e7f4c04799397..0923918a9419c 100644 --- a/ext/sockets/sockets_arginfo.h +++ b/ext/sockets/sockets_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: f2d1b412bf2e07c3e607aa6ebad25b19d882b98e */ + * Stub hash: f35790f5f703b37c45230e97e8f0ee736727b4bd */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_select, 0, 4, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(1, read_fds, IS_ARRAY, 1) diff --git a/ext/spl/spl_directory.stub.php b/ext/spl/spl_directory.stub.php index 4691378ca9b71..0e942a2e12bf5 100755 --- a/ext/spl/spl_directory.stub.php +++ b/ext/spl/spl_directory.stub.php @@ -211,7 +211,7 @@ public function fgetcsv(string $delimiter = ",", string $enclosure = '"', string /** @return int|false */ public function fputcsv(array $fields, string $delimiter = ',', string $enclosure = '"', string $escape = "\\") {} - /** @return null|false */ + /** @return bool|null */ public function setCsvControl(string $delimiter = ",", string $enclosure = "\"", string $escape = "\\") {} /** @return array */ diff --git a/ext/spl/spl_directory_arginfo.h b/ext/spl/spl_directory_arginfo.h index 7442c9c0e88e1..616f3f138fa8a 100644 --- a/ext/spl/spl_directory_arginfo.h +++ b/ext/spl/spl_directory_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 9127cb70a84f3e75ed16a17b15940b8a6b5f3937 */ + * Stub hash: fc41da9a307965e501bcc7e912470cf650a3d70d */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo___construct, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, file_name, IS_STRING, 0) diff --git a/ext/standard/basic_functions.stub.php b/ext/standard/basic_functions.stub.php index 0b771fbd49189..d0df30c0564c8 100755 --- a/ext/standard/basic_functions.stub.php +++ b/ext/standard/basic_functions.stub.php @@ -745,7 +745,7 @@ function exec(string $command, &$output = null, &$result_code = null): string|fa function system(string $command, &$result_code = null): string|false {} /** @param int $result_code */ -function passthru(string $command, &$result_code = null): bool|null {} +function passthru(string $command, &$result_code = null): ?bool {} function escapeshellcmd(string $command): string {} diff --git a/ext/standard/basic_functions_arginfo.h b/ext/standard/basic_functions_arginfo.h index e27c934c0371f..5717e5d336c29 100644 --- a/ext/standard/basic_functions_arginfo.h +++ b/ext/standard/basic_functions_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 0224dc521c4a8bd49fbcfd26cddb01a2e571cf74 */ + * Stub hash: 7cb3c95b61a57e5b88a37638dd90ff314cc89dd4 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_set_time_limit, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, seconds, IS_LONG, 0) diff --git a/ext/zip/php_zip.stub.php b/ext/zip/php_zip.stub.php index cde266261d640..6b81a623b0734 100644 --- a/ext/zip/php_zip.stub.php +++ b/ext/zip/php_zip.stub.php @@ -111,17 +111,17 @@ public function setArchiveComment(string $comment) {} /** @return string|false */ public function getArchiveComment(int $flags = 0) {} - /** @return null|false */ + /** @return bool|null */ public function setCommentIndex(int $index, string $comment) {} - /** @return null|false */ + /** @return bool|null */ public function setCommentName(string $name, string $comment) {} #ifdef HAVE_SET_MTIME - /** @return null|false */ + /** @return bool|null */ public function setMtimeIndex(int $index, int $timestamp, int $flags = 0) {} - /** @return null|false */ + /** @return bool|null */ public function setMtimeName(string $name, int $timestamp, int $flags = 0) {} #endif diff --git a/ext/zip/php_zip_arginfo.h b/ext/zip/php_zip_arginfo.h index c9f90d57f9873..e657511969e1f 100644 --- a/ext/zip/php_zip_arginfo.h +++ b/ext/zip/php_zip_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 49f168c537e48f8a3998d67812a5e2e6a2463533 */ + * Stub hash: d6e87c137cf1b372619b3890d04285d94d486c82 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_open, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) From de912821e0c2e154a4fca0479755c9e089b130b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Wed, 16 Sep 2020 21:27:01 +0200 Subject: [PATCH 12/67] Display string default values in stubs more uniformly Settling on using quoted string --- ext/hash/hash.stub.php | 2 +- ext/imap/php_imap.stub.php | 6 +++--- ext/ldap/ldap.stub.php | 6 +++--- ext/oci8/oci8.stub.php | 12 ++++++------ ext/odbc/odbc.stub.php | 2 +- ext/simplexml/simplexml.stub.php | 6 +++--- ext/snmp/snmp.stub.php | 2 +- ext/spl/spl_directory.stub.php | 8 ++++---- ext/sqlite3/sqlite3.stub.php | 4 ++-- ext/standard/basic_functions.stub.php | 8 ++++---- ext/xml/xml.stub.php | 2 +- ext/xmlwriter/php_xmlwriter.stub.php | 4 ++-- ext/zip/php_zip.stub.php | 2 +- 13 files changed, 32 insertions(+), 32 deletions(-) diff --git a/ext/hash/hash.stub.php b/ext/hash/hash.stub.php index d2e9d1aee1019..a8f90cd5ec98c 100644 --- a/ext/hash/hash.stub.php +++ b/ext/hash/hash.stub.php @@ -32,7 +32,7 @@ function hash_pbkdf2(string $algo, string $password, string $salt, int $iteratio function hash_equals(string $known_string, string $user_string): bool {} -function hash_hkdf(string $algo, string $ikm, int $length = 0, string $info = '', string $salt = ''): string {} +function hash_hkdf(string $algo, string $ikm, int $length = 0, string $info = "", string $salt = ""): string {} #ifdef PHP_MHASH_BC function mhash_get_block_size(int $hash): int|false {} diff --git a/ext/imap/php_imap.stub.php b/ext/imap/php_imap.stub.php index d707af161c29a..9d2e1082c1a7c 100644 --- a/ext/imap/php_imap.stub.php +++ b/ext/imap/php_imap.stub.php @@ -35,7 +35,7 @@ function imap_headerinfo($stream_id, int $msg_no, int $from_length = 0, int $sub */ function imap_header($stream_id, int $msg_no, int $from_length = 0, int $subject_length = 0, string $default_host = UNKNOWN): stdClass|false {} -function imap_rfc822_parse_headers(string $headers, string $default_host = 'UNKNOWN'): stdClass {} +function imap_rfc822_parse_headers(string $headers, string $default_host = "UNKNOWN"): stdClass {} function imap_rfc822_write_address(string $mailbox, string $host, string $personal): string|false {} @@ -66,7 +66,7 @@ function imap_fetchmime($stream_id, int $msg_no, string $section, int $options = * @param resource $stream_id * @param resource|string|int $file */ -function imap_savebody($stream_id, $file, int $msg_no, string $section = '', int $options = 0): bool {} +function imap_savebody($stream_id, $file, int $msg_no, string $section = "", int $options = 0): bool {} /** @param resource $stream_id */ function imap_fetchheader($stream_id, int $msg_no, int $options = 0): string|false {} @@ -222,7 +222,7 @@ function imap_errors(): array|false {} function imap_last_error(): string|false {} /** @param resource $stream_id */ -function imap_search($stream_id, string $criteria, int $options = SE_FREE, string $charset = ''): array|false {} +function imap_search($stream_id, string $criteria, int $options = SE_FREE, string $charset = ""): array|false {} function imap_utf7_decode(string $buf): string|false {} diff --git a/ext/ldap/ldap.stub.php b/ext/ldap/ldap.stub.php index e46d1405453e8..372458fe78b9e 100644 --- a/ext/ldap/ldap.stub.php +++ b/ext/ldap/ldap.stub.php @@ -193,7 +193,7 @@ function ldap_compare($link_identifier, string $dn, string $attribute, string $v * @param resource $link * @deprecated since 7.4 */ -function ldap_control_paged_result($link, int $pagesize, bool $iscritical = false, string $cookie = ''): bool {} +function ldap_control_paged_result($link, int $pagesize, bool $iscritical = false, string $cookie = ""): bool {} /** * @param resource $link @@ -281,7 +281,7 @@ function ldap_set_rebind_proc($link, ?callable $callback): bool {} function ldap_start_tls($link_identifier): bool {} #endif -function ldap_escape(string $value, string $ignore = '', int $flags = 0): string {} +function ldap_escape(string $value, string $ignore = "", int $flags = 0): string {} #ifdef STR_TRANSLATION function ldap_t61_to_8859(string $value): string|false {} @@ -305,7 +305,7 @@ function ldap_exop($link, string $reqoid, ?string $reqdata = null, ?array $serve * @param resource $link * @param array $serverctrls */ -function ldap_exop_passwd($link, string $user = '', string $oldpw = '', string $newpw = '', &$serverctrls = null): string|bool {} +function ldap_exop_passwd($link, string $user = "", string $oldpw = "", string $newpw = "", &$serverctrls = null): string|bool {} #endif diff --git a/ext/oci8/oci8.stub.php b/ext/oci8/oci8.stub.php index 58eb984f94c63..419df17be0956 100644 --- a/ext/oci8/oci8.stub.php +++ b/ext/oci8/oci8.stub.php @@ -332,38 +332,38 @@ function ocilogoff($connection_resource): ?bool {} /** * @return resource|false */ -function oci_new_connect(string $username, string $password, ?string $connection_string = null, string $character_set = '', int $session_mode = OCI_DEFAULT) {} +function oci_new_connect(string $username, string $password, ?string $connection_string = null, string $character_set = "", int $session_mode = OCI_DEFAULT) {} /** * @return resource|false * @alias oci_new_connect * @deprecated */ -function ocinlogon(string $username, string $password, ?string $connection_string = null, string $character_set = '', int $session_mode = OCI_DEFAULT) {} +function ocinlogon(string $username, string $password, ?string $connection_string = null, string $character_set = "", int $session_mode = OCI_DEFAULT) {} /** * @return resource|false */ -function oci_connect(string $username, string $password, ?string $connection_string = null, string $character_set = '', int $session_mode = OCI_DEFAULT) {} +function oci_connect(string $username, string $password, ?string $connection_string = null, string $character_set = "", int $session_mode = OCI_DEFAULT) {} /** * @return resource|false * @alias oci_connect * @deprecated */ -function ocilogon(string $username, string $password, ?string $connection_string = null, string $character_set = '', int $session_mode = OCI_DEFAULT) {} +function ocilogon(string $username, string $password, ?string $connection_string = null, string $character_set = "", int $session_mode = OCI_DEFAULT) {} /** * @return resource|false */ -function oci_pconnect(string $username, string $password, ?string $connection_string = null, string $character_set = '', int $session_mode = OCI_DEFAULT) {} +function oci_pconnect(string $username, string $password, ?string $connection_string = null, string $character_set = "", int $session_mode = OCI_DEFAULT) {} /** * @return resource|false * @alias oci_pconnect * @deprecated */ -function ociplogon(string $username, string $password, ?string $connection_string = null, string $character_set = '', int $session_mode = OCI_DEFAULT) {} +function ociplogon(string $username, string $password, ?string $connection_string = null, string $character_set = "", int $session_mode = OCI_DEFAULT) {} /** * @param resource|null $connection_or_statement_resource diff --git a/ext/odbc/odbc.stub.php b/ext/odbc/odbc.stub.php index cb318f7ac9d4f..9316f1d7e41ce 100644 --- a/ext/odbc/odbc.stub.php +++ b/ext/odbc/odbc.stub.php @@ -61,7 +61,7 @@ function odbc_fetch_row($result_id, int $row_number = UNKNOWN): bool {} function odbc_result($result_id, string|int $field): string|bool|null {} /** @param resource $result_id */ -function odbc_result_all($result_id, string $format = ''): int|false {} +function odbc_result_all($result_id, string $format = ""): int|false {} /** @param resource $result_id */ function odbc_free_result($result_id): bool {} diff --git a/ext/simplexml/simplexml.stub.php b/ext/simplexml/simplexml.stub.php index d068cb2d713cc..7d56de88e9fec 100644 --- a/ext/simplexml/simplexml.stub.php +++ b/ext/simplexml/simplexml.stub.php @@ -2,9 +2,9 @@ /** @generate-function-entries */ -function simplexml_load_file(string $filename, ?string $class_name = SimpleXMLElement::class, int $options = 0, string $namespace_or_prefix = '', bool $is_prefix = false): SimpleXMLElement|false {} +function simplexml_load_file(string $filename, ?string $class_name = SimpleXMLElement::class, int $options = 0, string $namespace_or_prefix = "", bool $is_prefix = false): SimpleXMLElement|false {} -function simplexml_load_string(string $data, ?string $class_name = SimpleXMLElement::class, int $options = 0, string $namespace_or_prefix = '', bool $is_prefix = false): SimpleXMLElement|false {} +function simplexml_load_string(string $data, ?string $class_name = SimpleXMLElement::class, int $options = 0, string $namespace_or_prefix = "", bool $is_prefix = false): SimpleXMLElement|false {} function simplexml_import_dom(DOMNode $node, ?string $class_name = SimpleXMLElement::class): ?SimpleXMLElement {} @@ -37,7 +37,7 @@ public function children(?string $namespaceOrPrefix = null, bool $isPrefix = fal /** @return SimpleXMLIterator */ public function attributes(?string $namespaceOrPrefix = null, bool $isPrefix = false) {} - public function __construct(string $data, int $options = 0, bool $dataIsURL = false, string $namespaceOrPrefix = '', bool $isPrefix = false) {} + public function __construct(string $data, int $options = 0, bool $dataIsURL = false, string $namespaceOrPrefix = "", bool $isPrefix = false) {} /** @return SimpleXMLElement */ public function addChild(string $qualifiedName, ?string $value = null, ?string $namespace = null) {} diff --git a/ext/snmp/snmp.stub.php b/ext/snmp/snmp.stub.php index e7592ee67b997..28cdd5f4f7155 100644 --- a/ext/snmp/snmp.stub.php +++ b/ext/snmp/snmp.stub.php @@ -60,7 +60,7 @@ public function __construct(int $version, string $host, string $community, int $ public function close() {} /** @return bool */ - public function setSecurity(string $sec_level, string $auth_protocol = '', string $auth_passphrase = '', string $priv_protocol = '', string $priv_passphrase = '', string $contextName = '', string $contextEngineID = '') {} + public function setSecurity(string $sec_level, string $auth_protocol = "", string $auth_passphrase = "", string $priv_protocol = "", string $priv_passphrase = "", string $contextName = "", string $contextEngineID = "") {} /** @return array|bool */ public function get(array|string $object_id, bool $use_orignames = false) {} diff --git a/ext/spl/spl_directory.stub.php b/ext/spl/spl_directory.stub.php index 0e942a2e12bf5..92c9f8813a2c1 100755 --- a/ext/spl/spl_directory.stub.php +++ b/ext/spl/spl_directory.stub.php @@ -82,7 +82,7 @@ public function getPathInfo(?string $class_name = null) {} * @param resource|null $context * @return SplFileObject */ - public function openFile(string $open_mode = 'r', bool $use_include_path = false, $context = null) {} + public function openFile(string $open_mode = "r", bool $use_include_path = false, $context = null) {} /** @return void */ public function setFileClass(string $class_name = SplFileObject::class) {} @@ -188,7 +188,7 @@ public function count() {} class SplFileObject extends SplFileInfo implements RecursiveIterator, SeekableIterator { /** @param resource|null $context */ - public function __construct(string $file_name, string $open_mode = 'r', bool $use_include_path = false, $context = null) {} + public function __construct(string $file_name, string $open_mode = "r", bool $use_include_path = false, $context = null) {} /** @return void */ public function rewind() {} @@ -206,10 +206,10 @@ public function fgets() {} public function fread(int $length) {} /** @return array|false */ - public function fgetcsv(string $delimiter = ",", string $enclosure = '"', string $escape = "\\") {} + public function fgetcsv(string $delimiter = ",", string $enclosure = "\"", string $escape = "\\") {} /** @return int|false */ - public function fputcsv(array $fields, string $delimiter = ',', string $enclosure = '"', string $escape = "\\") {} + public function fputcsv(array $fields, string $delimiter = ",", string $enclosure = "\"", string $escape = "\\") {} /** @return bool|null */ public function setCsvControl(string $delimiter = ",", string $enclosure = "\"", string $escape = "\\") {} diff --git a/ext/sqlite3/sqlite3.stub.php b/ext/sqlite3/sqlite3.stub.php index d2435051e14e0..132bd44cbb8e7 100644 --- a/ext/sqlite3/sqlite3.stub.php +++ b/ext/sqlite3/sqlite3.stub.php @@ -5,10 +5,10 @@ class SQLite3 { /** @alias SQLite3::open */ - public function __construct(string $filename, int $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, string $encryption_key = '') {} + public function __construct(string $filename, int $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, string $encryption_key = "") {} /** @return void */ - public function open(string $filename, int $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, string $encryption_key = '') {} + public function open(string $filename, int $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, string $encryption_key = "") {} /** @return bool */ public function close() {} diff --git a/ext/standard/basic_functions.stub.php b/ext/standard/basic_functions.stub.php index d0df30c0564c8..7304223bfb753 100755 --- a/ext/standard/basic_functions.stub.php +++ b/ext/standard/basic_functions.stub.php @@ -502,9 +502,9 @@ function header(string $string, bool $replace = true, int $http_response_code = function header_remove(?string $name = null): void {} -function setrawcookie(string $name, string $value = '', array|int $expires_or_options = 0, string $path = '', string $domain = '', bool $secure = false, bool $httponly = false): bool {} +function setrawcookie(string $name, string $value = "", array|int $expires_or_options = 0, string $path = "", string $domain = "", bool $secure = false, bool $httponly = false): bool {} -function setcookie(string $name, string $value = '', array|int $expires_or_options = 0, string $path = '', string $domain = '', bool $secure = false, bool $httponly = false): bool {} +function setcookie(string $name, string $value = "", array|int $expires_or_options = 0, string $path = "", string $domain = "", bool $secure = false, bool $httponly = false): bool {} function http_response_code(int $response_code = 0): int|bool {} @@ -660,7 +660,7 @@ function setlocale(int $category, $locales, ...$rest): string|false {} /** @param array $result */ function parse_str(string $encoded_string, &$result): void {} -function str_getcsv(string $string, string $delimiter = ',', string $enclosure = '"', string $escape = '\\'): array {} +function str_getcsv(string $string, string $delimiter = ",", string $enclosure = "\"", string $escape = '\\'): array {} function str_repeat(string $input, int $mult): string {} @@ -865,7 +865,7 @@ function file_put_contents(string $filename, mixed $content, int $flags = 0, $co function fputcsv($handle, array $fields, string $delimiter = ",", string $enclosure = "\"", string $escape = "\\"): int|false {} /** @param resource $handle */ -function fgetcsv($handle, ?int $length = null, string $delimiter = ",", string $enclosure = '"', string $escape = "\\"): array|false {} +function fgetcsv($handle, ?int $length = null, string $delimiter = ",", string $enclosure = "\"", string $escape = "\\"): array|false {} function realpath(string $path): string|false {} diff --git a/ext/xml/xml.stub.php b/ext/xml/xml.stub.php index 5f90d91fe4655..b5af23376146b 100644 --- a/ext/xml/xml.stub.php +++ b/ext/xml/xml.stub.php @@ -4,7 +4,7 @@ function xml_parser_create(?string $encoding = null): XmlParser {} -function xml_parser_create_ns(?string $encoding = null, string $sep = ':'): XmlParser {} +function xml_parser_create_ns(?string $encoding = null, string $sep = ":"): XmlParser {} function xml_set_object(XmlParser $parser, object $obj): bool {} diff --git a/ext/xmlwriter/php_xmlwriter.stub.php b/ext/xmlwriter/php_xmlwriter.stub.php index 5b3b4f512b1be..fd12e5bdbe4ef 100644 --- a/ext/xmlwriter/php_xmlwriter.stub.php +++ b/ext/xmlwriter/php_xmlwriter.stub.php @@ -52,7 +52,7 @@ function xmlwriter_text(XMLWriter $xmlwriter, string $content): bool {} function xmlwriter_write_raw(XMLWriter $xmlwriter, string $content): bool {} -function xmlwriter_start_document(XMLWriter $xmlwriter, ?string $version = '1.0', ?string $encoding = null, ?string $standalone = null): bool {} +function xmlwriter_start_document(XMLWriter $xmlwriter, ?string $version = "1.0", ?string $encoding = null, ?string $standalone = null): bool {} function xmlwriter_end_document(XMLWriter $xmlwriter): bool {} @@ -164,7 +164,7 @@ public function text(string $content): bool {} public function writeRaw(string $content): bool {} /** @alias xmlwriter_start_document */ - public function startDocument(?string $version = '1.0', ?string $encoding = null, ?string $standalone = null): bool {} + public function startDocument(?string $version = "1.0", ?string $encoding = null, ?string $standalone = null): bool {} /** @alias xmlwriter_end_document */ public function endDocument(): bool {} diff --git a/ext/zip/php_zip.stub.php b/ext/zip/php_zip.stub.php index 6b81a623b0734..7da7bfea39221 100644 --- a/ext/zip/php_zip.stub.php +++ b/ext/zip/php_zip.stub.php @@ -26,7 +26,7 @@ function zip_read($zip) {} * @param resource $zip_entry * @deprecated */ -function zip_entry_open($zip_dp, $zip_entry, string $mode = 'rb'): bool {} +function zip_entry_open($zip_dp, $zip_entry, string $mode = "rb"): bool {} /** * @param resource $zip_ent From 36fd95b52461d63f7eb5cdbea8f9a8f58cb8d0be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Wed, 16 Sep 2020 21:28:27 +0200 Subject: [PATCH 13/67] Generate arginfos --- ext/hash/hash_arginfo.h | 6 +++--- ext/imap/php_imap_arginfo.h | 8 ++++---- ext/ldap/ldap_arginfo.h | 12 ++++++------ ext/oci8/oci8_arginfo.h | 4 ++-- ext/odbc/odbc_arginfo.h | 4 ++-- ext/simplexml/simplexml_arginfo.h | 8 ++++---- ext/snmp/snmp_arginfo.h | 14 +++++++------- ext/spl/spl_directory_arginfo.h | 16 ++++++---------- ext/sqlite3/sqlite3_arginfo.h | 4 ++-- ext/standard/basic_functions_arginfo.h | 14 +++++++------- ext/xml/xml_arginfo.h | 4 ++-- ext/xmlwriter/php_xmlwriter_arginfo.h | 6 +++--- ext/zip/php_zip_arginfo.h | 4 ++-- 13 files changed, 50 insertions(+), 54 deletions(-) diff --git a/ext/hash/hash_arginfo.h b/ext/hash/hash_arginfo.h index 1315f3f118de5..a7837b28481c3 100644 --- a/ext/hash/hash_arginfo.h +++ b/ext/hash/hash_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 9280e94fe6bb8b86d0cc6f939996c6c0b0bb9241 */ + * Stub hash: 28ec46ceae7550c9a4103c98fd7c20364f078289 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_hash, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, algo, IS_STRING, 0) @@ -77,8 +77,8 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_hash_hkdf, 0, 2, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, algo, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, ikm, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 0, "0") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, info, IS_STRING, 0, "\'\'") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, salt, IS_STRING, 0, "\'\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, info, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, salt, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() #if defined(PHP_MHASH_BC) diff --git a/ext/imap/php_imap_arginfo.h b/ext/imap/php_imap_arginfo.h index 013ef9096c7aa..69fe25e4d0f4c 100644 --- a/ext/imap/php_imap_arginfo.h +++ b/ext/imap/php_imap_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 2c859e2e8d8de83dc517a245b5b34a6dd74e5dab */ + * Stub hash: 4991f82d78672ab23044864fa6dd75851952965c */ ZEND_BEGIN_ARG_INFO_EX(arginfo_imap_open, 0, 0, 3) ZEND_ARG_TYPE_INFO(0, mailbox, IS_STRING, 0) @@ -44,7 +44,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_imap_rfc822_parse_headers, 0, 1, stdClass, 0) ZEND_ARG_TYPE_INFO(0, headers, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, default_host, IS_STRING, 0, "\'UNKNOWN\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, default_host, IS_STRING, 0, "\"UNKNOWN\"") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_rfc822_write_address, 0, 3, MAY_BE_STRING|MAY_BE_FALSE) @@ -85,7 +85,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_savebody, 0, 3, _IS_BOOL, 0 ZEND_ARG_INFO(0, stream_id) ZEND_ARG_INFO(0, file) ZEND_ARG_TYPE_INFO(0, msg_no, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, section, IS_STRING, 0, "\'\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, section, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") ZEND_END_ARG_INFO() @@ -265,7 +265,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_search, 0, 2, MAY_BE_ARRAY| ZEND_ARG_INFO(0, stream_id) ZEND_ARG_TYPE_INFO(0, criteria, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "SE_FREE") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, charset, IS_STRING, 0, "\'\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, charset, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_utf7_decode, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) diff --git a/ext/ldap/ldap_arginfo.h b/ext/ldap/ldap_arginfo.h index 5e4cd4281c16d..d610408d97423 100644 --- a/ext/ldap/ldap_arginfo.h +++ b/ext/ldap/ldap_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: c247d438a69d40353a629b09c5200d33ed8218ee */ + * Stub hash: f07138972651411473c34c5ee2d0c2de94e01ada */ #if defined(HAVE_ORALDAP) ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_connect, 0, 0, 0) @@ -192,7 +192,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ldap_control_paged_result, 0, 2, ZEND_ARG_INFO(0, link) ZEND_ARG_TYPE_INFO(0, pagesize, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, iscritical, _IS_BOOL, 0, "false") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, cookie, IS_STRING, 0, "\'\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, cookie, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() #endif @@ -299,7 +299,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ldap_escape, 0, 1, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, ignore, IS_STRING, 0, "\'\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, ignore, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() @@ -327,9 +327,9 @@ ZEND_END_ARG_INFO() #if defined(HAVE_LDAP_PASSWD) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ldap_exop_passwd, 0, 1, MAY_BE_STRING|MAY_BE_BOOL) ZEND_ARG_INFO(0, link) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, user, IS_STRING, 0, "\'\'") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, oldpw, IS_STRING, 0, "\'\'") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, newpw, IS_STRING, 0, "\'\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, user, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, oldpw, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, newpw, IS_STRING, 0, "\"\"") ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, serverctrls, "null") ZEND_END_ARG_INFO() #endif diff --git a/ext/oci8/oci8_arginfo.h b/ext/oci8/oci8_arginfo.h index b385554bdfa58..bd6c7bc310d60 100644 --- a/ext/oci8/oci8_arginfo.h +++ b/ext/oci8/oci8_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 9c680329bc6159aae027df94230c6d2342021271 */ + * Stub hash: 154cd2128ba63d5d361b1f2f6ff55ae1659c59b9 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_define_by_name, 0, 3, _IS_BOOL, 0) ZEND_ARG_INFO(0, statement_resource) @@ -255,7 +255,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_oci_new_connect, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, username, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, password, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, connection_string, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, character_set, IS_STRING, 0, "\'\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, character_set, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, session_mode, IS_LONG, 0, "OCI_DEFAULT") ZEND_END_ARG_INFO() diff --git a/ext/odbc/odbc_arginfo.h b/ext/odbc/odbc_arginfo.h index 778ab242a0b10..7d42c63530a09 100644 --- a/ext/odbc/odbc_arginfo.h +++ b/ext/odbc/odbc_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: cf17952d8c3b88f218bbb8d1c21ba40079574c04 */ + * Stub hash: 57db79b23d127851f985d9b6280b113637384a68 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_close_all, 0, 0, IS_VOID, 0) ZEND_END_ARG_INFO() @@ -75,7 +75,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_result_all, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_INFO(0, result_id) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, format, IS_STRING, 0, "\'\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, format, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_free_result, 0, 1, _IS_BOOL, 0) diff --git a/ext/simplexml/simplexml_arginfo.h b/ext/simplexml/simplexml_arginfo.h index 14624870324ac..7da3c9f33c608 100644 --- a/ext/simplexml/simplexml_arginfo.h +++ b/ext/simplexml/simplexml_arginfo.h @@ -1,11 +1,11 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 38b23ba107bcd8a519a2aa70bacbbc6ace9aaa77 */ + * Stub hash: f8ca25a00ae1a5fed436851e88229b503c77bf31 */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_simplexml_load_file, 0, 1, SimpleXMLElement, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class_name, IS_STRING, 1, "SimpleXMLElement::class") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, namespace_or_prefix, IS_STRING, 0, "\'\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, namespace_or_prefix, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, is_prefix, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() @@ -13,7 +13,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_simplexml_load_string, 0, 1, ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class_name, IS_STRING, 1, "SimpleXMLElement::class") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, namespace_or_prefix, IS_STRING, 0, "\'\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, namespace_or_prefix, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, is_prefix, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() @@ -57,7 +57,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SimpleXMLElement___construct, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, dataIsURL, _IS_BOOL, 0, "false") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, namespaceOrPrefix, IS_STRING, 0, "\'\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, namespaceOrPrefix, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, isPrefix, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() diff --git a/ext/snmp/snmp_arginfo.h b/ext/snmp/snmp_arginfo.h index 8bfd40833ff8c..69d404bef733a 100644 --- a/ext/snmp/snmp_arginfo.h +++ b/ext/snmp/snmp_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 759c8a5e721d1c6c9cb63e59ae14f85831396a4d */ + * Stub hash: 31a125dde8e52e7849c8cd62ac410be9249a80df */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_snmpget, 0, 3, stdClass, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_BOOL) ZEND_ARG_TYPE_INFO(0, host, IS_STRING, 0) @@ -129,12 +129,12 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SNMP_setSecurity, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, sec_level, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, auth_protocol, IS_STRING, 0, "\'\'") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, auth_passphrase, IS_STRING, 0, "\'\'") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, priv_protocol, IS_STRING, 0, "\'\'") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, priv_passphrase, IS_STRING, 0, "\'\'") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, contextName, IS_STRING, 0, "\'\'") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, contextEngineID, IS_STRING, 0, "\'\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, auth_protocol, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, auth_passphrase, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, priv_protocol, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, priv_passphrase, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, contextName, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, contextEngineID, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SNMP_get, 0, 0, 1) diff --git a/ext/spl/spl_directory_arginfo.h b/ext/spl/spl_directory_arginfo.h index 616f3f138fa8a..4f1961345fd4f 100644 --- a/ext/spl/spl_directory_arginfo.h +++ b/ext/spl/spl_directory_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: fc41da9a307965e501bcc7e912470cf650a3d70d */ + * Stub hash: 4bf9a6a3687e5d14883d35b26c13b05216c86ac3 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo___construct, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, file_name, IS_STRING, 0) @@ -59,7 +59,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_SplFileInfo_getPathInfo arginfo_class_SplFileInfo_getFileInfo ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_openFile, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, open_mode, IS_STRING, 0, "\'r\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, open_mode, IS_STRING, 0, "\"r\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_include_path, _IS_BOOL, 0, "false") ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null") ZEND_END_ARG_INFO() @@ -153,7 +153,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject___construct, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, file_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, open_mode, IS_STRING, 0, "\'r\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, open_mode, IS_STRING, 0, "\"r\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_include_path, _IS_BOOL, 0, "false") ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null") ZEND_END_ARG_INFO() @@ -172,23 +172,19 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fgetcsv, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, delimiter, IS_STRING, 0, "\",\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\'\"\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\"\\\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, escape, IS_STRING, 0, "\"\\\\\"") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fputcsv, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, fields, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, delimiter, IS_STRING, 0, "\',\'") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\'\"\'") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, escape, IS_STRING, 0, "\"\\\\\"") -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_setCsvControl, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, delimiter, IS_STRING, 0, "\",\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\"\\\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, escape, IS_STRING, 0, "\"\\\\\"") ZEND_END_ARG_INFO() +#define arginfo_class_SplFileObject_setCsvControl arginfo_class_SplFileObject_fgetcsv + #define arginfo_class_SplFileObject_getCsvControl arginfo_class_SplFileInfo_getPath ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_flock, 0, 0, 1) diff --git a/ext/sqlite3/sqlite3_arginfo.h b/ext/sqlite3/sqlite3_arginfo.h index 7e0cf2ec175bb..ea462fb57ecf8 100644 --- a/ext/sqlite3/sqlite3_arginfo.h +++ b/ext/sqlite3/sqlite3_arginfo.h @@ -1,10 +1,10 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: d40496bbba4787b192a58896a9ca4858dc59dc76 */ + * Stub hash: 749f2c1a6b0bf3b889a294ad621995ba74e8ab39 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3___construct, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encryption_key, IS_STRING, 0, "\'\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encryption_key, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() #define arginfo_class_SQLite3_open arginfo_class_SQLite3___construct diff --git a/ext/standard/basic_functions_arginfo.h b/ext/standard/basic_functions_arginfo.h index 5717e5d336c29..fcce980c3a54d 100644 --- a/ext/standard/basic_functions_arginfo.h +++ b/ext/standard/basic_functions_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 7cb3c95b61a57e5b88a37638dd90ff314cc89dd4 */ + * Stub hash: 8f80246569ba9de48eebc8b68f476723f78b8f77 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_set_time_limit, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, seconds, IS_LONG, 0) @@ -742,10 +742,10 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_setrawcookie, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, value, IS_STRING, 0, "\'\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, value, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_MASK(0, expires_or_options, MAY_BE_ARRAY|MAY_BE_LONG, "0") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, path, IS_STRING, 0, "\'\'") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, domain, IS_STRING, 0, "\'\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, path, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, domain, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, secure, _IS_BOOL, 0, "false") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, httponly, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() @@ -1018,8 +1018,8 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_str_getcsv, 0, 1, IS_ARRAY, 0) ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, delimiter, IS_STRING, 0, "\',\'") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\'\"\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, delimiter, IS_STRING, 0, "\",\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\"\\\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, escape, IS_STRING, 0, "\'\\\\\'") ZEND_END_ARG_INFO() @@ -1341,7 +1341,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_fgetcsv, 0, 1, MAY_BE_ARRAY|MAY_ ZEND_ARG_INFO(0, handle) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, delimiter, IS_STRING, 0, "\",\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\'\"\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\"\\\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, escape, IS_STRING, 0, "\"\\\\\"") ZEND_END_ARG_INFO() diff --git a/ext/xml/xml_arginfo.h b/ext/xml/xml_arginfo.h index ea17fca77d8ec..cd05d403f63a5 100644 --- a/ext/xml/xml_arginfo.h +++ b/ext/xml/xml_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: b3c718c2aeba9a9c05b6cb281fd7ccaa3791d34e */ + * Stub hash: 5be46eaeaea40f3494a6bbad269f85256030f758 */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_xml_parser_create, 0, 0, XmlParser, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") @@ -7,7 +7,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_xml_parser_create_ns, 0, 0, XmlParser, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, sep, IS_STRING, 0, "\':\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, sep, IS_STRING, 0, "\":\"") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_set_object, 0, 2, _IS_BOOL, 0) diff --git a/ext/xmlwriter/php_xmlwriter_arginfo.h b/ext/xmlwriter/php_xmlwriter_arginfo.h index 31eeb140aad7e..ffd3ab51ca9ed 100644 --- a/ext/xmlwriter/php_xmlwriter_arginfo.h +++ b/ext/xmlwriter/php_xmlwriter_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 46bde559f165fc53d75690bfb4d86389202bb19e */ + * Stub hash: 7a12c6f16e2a21c8b57ec963ed7e5fa230e425aa */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_xmlwriter_open_uri, 0, 1, XMLWriter, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, uri, IS_STRING, 0) @@ -102,7 +102,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xmlwriter_start_document, 0, 1, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, xmlwriter, XMLWriter, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, version, IS_STRING, 1, "\'1.0\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, version, IS_STRING, 1, "\"1.0\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, standalone, IS_STRING, 1, "null") ZEND_END_ARG_INFO() @@ -262,7 +262,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_XMLWriter_writeRaw arginfo_class_XMLWriter_writeCdata ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_startDocument, 0, 0, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, version, IS_STRING, 1, "\'1.0\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, version, IS_STRING, 1, "\"1.0\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, standalone, IS_STRING, 1, "null") ZEND_END_ARG_INFO() diff --git a/ext/zip/php_zip_arginfo.h b/ext/zip/php_zip_arginfo.h index e657511969e1f..6274f6afefadf 100644 --- a/ext/zip/php_zip_arginfo.h +++ b/ext/zip/php_zip_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: d6e87c137cf1b372619b3890d04285d94d486c82 */ + * Stub hash: 58d4035ad8d21582e93091d5c14f78640c1a17c3 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_open, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) @@ -16,7 +16,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zip_entry_open, 0, 2, _IS_BOOL, 0) ZEND_ARG_INFO(0, zip_dp) ZEND_ARG_INFO(0, zip_entry) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_STRING, 0, "\'rb\'") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_STRING, 0, "\"rb\"") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zip_entry_close, 0, 1, _IS_BOOL, 0) From 46d22e435f43529aa55b54460dd265c4bd22409f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Wed, 16 Sep 2020 21:38:30 +0200 Subject: [PATCH 14/67] Change int parameter types to bool when the parameter behaves as bool Closes GH-6148 --- UPGRADING | 4 ++++ ext/standard/basic_functions.stub.php | 3 +-- ext/standard/basic_functions_arginfo.h | 4 ++-- ext/sysvsem/sysvsem.c | 7 ++++--- ext/sysvsem/sysvsem.stub.php | 5 +---- ext/sysvsem/sysvsem_arginfo.h | 4 ++-- main/output.c | 4 ++-- 7 files changed, 16 insertions(+), 15 deletions(-) diff --git a/UPGRADING b/UPGRADING index 632c50618f95d..090b221c712c3 100644 --- a/UPGRADING +++ b/UPGRADING @@ -598,6 +598,8 @@ PHP 8.0 UPGRADE NOTES . sem_get() will now return an SysvSemaphore object rather than a resource. Return value checks using is_resource() should be replaced with checks for `false`. + . The $auto_release parameter of sem_get() was changed to accept bool values + rather than int. - Sysvshm: . shm_attach() will now return an SysvSharedMemory object rather than a resource. @@ -786,6 +788,8 @@ PHP 8.0 UPGRADE NOTES array_diff($array, ...$excludes); // OK even if $arrays only contains a single array. array_intersect(...$arrays); + . The $flag parameter of ob_implicit_flush() was changed to accept bool + values rather than int. - Zip: . Extension updated to version 1.19.0 diff --git a/ext/standard/basic_functions.stub.php b/ext/standard/basic_functions.stub.php index 7304223bfb753..aae651df0240a 100755 --- a/ext/standard/basic_functions.stub.php +++ b/ext/standard/basic_functions.stub.php @@ -37,8 +37,7 @@ function ob_list_handlers(): array {} function ob_get_status(bool $full_status = false): array {} -// TODO: Shouldn't this be a bool argument? -function ob_implicit_flush(int $flag = 1): void {} +function ob_implicit_flush(bool $flag = true): void {} function output_reset_rewrite_vars(): bool {} diff --git a/ext/standard/basic_functions_arginfo.h b/ext/standard/basic_functions_arginfo.h index fcce980c3a54d..37f6d8c159c67 100644 --- a/ext/standard/basic_functions_arginfo.h +++ b/ext/standard/basic_functions_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 8f80246569ba9de48eebc8b68f476723f78b8f77 */ + * Stub hash: df6d5ebb0449274b94f1e8707ab54978fd4b7d2f */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_set_time_limit, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, seconds, IS_LONG, 0) @@ -45,7 +45,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ob_get_status, 0, 0, IS_ARRAY, 0 ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ob_implicit_flush, 0, 0, IS_VOID, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flag, IS_LONG, 0, "1") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flag, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() #define arginfo_output_reset_rewrite_vars arginfo_ob_flush diff --git a/ext/sysvsem/sysvsem.c b/ext/sysvsem/sysvsem.c index c277009f11e47..dbde858ab94ee 100644 --- a/ext/sysvsem/sysvsem.c +++ b/ext/sysvsem/sysvsem.c @@ -187,13 +187,14 @@ PHP_MINFO_FUNCTION(sysvsem) /* {{{ Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously */ PHP_FUNCTION(sem_get) { - zend_long key, max_acquire = 1, perm = 0666, auto_release = 1; + zend_long key, max_acquire = 1, perm = 0666; + zend_bool auto_release = 1; int semid; struct sembuf sop[3]; int count; sysvsem_sem *sem_ptr; - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS(), "l|lll", &key, &max_acquire, &perm, &auto_release)) { + if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS(), "l|llb", &key, &max_acquire, &perm, &auto_release)) { RETURN_THROWS(); } @@ -289,7 +290,7 @@ PHP_FUNCTION(sem_get) sem_ptr->key = key; sem_ptr->semid = semid; sem_ptr->count = 0; - sem_ptr->auto_release = auto_release; + sem_ptr->auto_release = (int) auto_release; } /* }}} */ diff --git a/ext/sysvsem/sysvsem.stub.php b/ext/sysvsem/sysvsem.stub.php index 095720df60103..3265984e70f9c 100644 --- a/ext/sysvsem/sysvsem.stub.php +++ b/ext/sysvsem/sysvsem.stub.php @@ -6,10 +6,7 @@ final class SysvSemaphore { } -/** - * @todo use bool for $auto_release - */ -function sem_get(int $key, int $max_acquire = 1, int $perm = 0666, int $auto_release = 1): SysvSemaphore|false {} +function sem_get(int $key, int $max_acquire = 1, int $perm = 0666, bool $auto_release = true): SysvSemaphore|false {} function sem_acquire(SysvSemaphore $semaphore, bool $nowait = false): bool {} diff --git a/ext/sysvsem/sysvsem_arginfo.h b/ext/sysvsem/sysvsem_arginfo.h index d4666d640122f..07ebe6bf545e0 100644 --- a/ext/sysvsem/sysvsem_arginfo.h +++ b/ext/sysvsem/sysvsem_arginfo.h @@ -1,11 +1,11 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: a9de9877facd28112e1fe21cf7c6f1c7fdc8014d */ + * Stub hash: d00524488977b77475f9aa78c132a6dd53ab4dd0 */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_sem_get, 0, 1, SysvSemaphore, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, key, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, max_acquire, IS_LONG, 0, "1") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, perm, IS_LONG, 0, "0666") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, auto_release, IS_LONG, 0, "1") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, auto_release, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sem_acquire, 0, 1, _IS_BOOL, 0) diff --git a/main/output.c b/main/output.c index aab080ba01090..c895d3856e441 100644 --- a/main/output.c +++ b/main/output.c @@ -1507,11 +1507,11 @@ PHP_FUNCTION(ob_implicit_flush) { zend_long flag = 1; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &flag) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|b", &flag) == FAILURE) { RETURN_THROWS(); } - php_output_set_implicit_flush(flag); + php_output_set_implicit_flush((int) flag); } /* }}} */ From 8f56b7a7555c7381ab4005ae56a76c23d5da226a Mon Sep 17 00:00:00 2001 From: Dharman Date: Wed, 16 Sep 2020 15:41:02 +0100 Subject: [PATCH 15/67] mysqli: Promote warning in field_seek Aligning the behaviour of fetch_field and field_seek. --- ext/mysqli/mysqli_api.c | 5 ++--- ext/mysqli/tests/mysqli_field_seek.phpt | 10 ++++++---- ext/mysqli/tests/mysqli_field_tell.phpt | 10 ++++++---- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index e949053af0a40..3af7654733bf8 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -1286,9 +1286,8 @@ PHP_FUNCTION(mysqli_field_seek) MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); if ((uint32_t)fieldnr >= mysql_num_fields(result)) { - // TODO ValueError? - php_error_docref(NULL, E_WARNING, "Invalid field offset"); - RETURN_FALSE; + zend_argument_value_error(ERROR_ARG_POS(2), "must be less than the number of fields for this result set"); + RETURN_THROWS(); } mysql_field_seek(result, fieldnr); diff --git a/ext/mysqli/tests/mysqli_field_seek.phpt b/ext/mysqli/tests/mysqli_field_seek.phpt index bcc1e29526c54..d4f160deb080b 100644 --- a/ext/mysqli/tests/mysqli_field_seek.phpt +++ b/ext/mysqli/tests/mysqli_field_seek.phpt @@ -92,7 +92,11 @@ require_once('skipifconnectfailure.inc'); } var_dump(mysqli_field_tell($res)); - var_dump(mysqli_field_seek($res, 2)); + try { + var_dump(mysqli_field_seek($res, 2)); + } catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; + } var_dump(mysqli_fetch_field($res)); mysqli_free_result($res); @@ -207,9 +211,7 @@ object(stdClass)#%d (13) { int(0) } int(2) - -Warning: mysqli_field_seek(): Invalid field offset in %s on line %d -bool(false) +mysqli_field_seek(): Argument #2 ($field_nr) must be less than the number of fields for this result set bool(false) bool(true) object(stdClass)#%d (13) { diff --git a/ext/mysqli/tests/mysqli_field_tell.phpt b/ext/mysqli/tests/mysqli_field_tell.phpt index e8c344ec956ff..1a2be4d70c2c1 100644 --- a/ext/mysqli/tests/mysqli_field_tell.phpt +++ b/ext/mysqli/tests/mysqli_field_tell.phpt @@ -21,7 +21,11 @@ require_once('skipifconnectfailure.inc'); var_dump(mysqli_fetch_field($res)); var_dump(mysqli_field_tell($res)); - var_dump(mysqli_field_seek($res, 2)); + try { + var_dump(mysqli_field_seek($res, 2)); + } catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; + } var_dump(mysqli_field_tell($res)); try { @@ -85,9 +89,7 @@ object(stdClass)#%d (13) { } bool(false) int(1) - -Warning: mysqli_field_seek(): Invalid field offset in %s on line %d -bool(false) +mysqli_field_seek(): Argument #2 ($field_nr) must be less than the number of fields for this result set int(1) mysqli_field_seek(): Argument #2 ($field_nr) must be greater than or equal to 0 int(1) From e3d0bc0a981f11970415ab3ac635b98f6740bfb4 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 17 Sep 2020 09:59:44 +0200 Subject: [PATCH 16/67] Fixed bug #80109 Skip over leading EXT_NOP, if it exists. --- NEWS | 3 +++ Zend/zend_execute.c | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 3d76a45011bce..8cb4a580f5d29 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 8.0.0RC1 +- Core: + . Fixed bug #80109 (Cannot skip arguments when extended debug is enabled). + (Nikita) 17 Sep 2020, PHP 8.0.0beta4 diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 3c1931109463d..22afd49c2e0c7 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -4452,15 +4452,16 @@ static void end_fake_frame(zend_execute_data *call, zend_execute_data *old_prev_ ZEND_API zend_result ZEND_FASTCALL zend_handle_undef_args(zend_execute_data *call) { zend_function *fbc = call->func; if (fbc->type == ZEND_USER_FUNCTION) { + zend_op_array *op_array = &fbc->op_array; uint32_t num_args = ZEND_CALL_NUM_ARGS(call); + uint32_t opline_offset = op_array->opcodes[0].opcode == ZEND_EXT_NOP; for (uint32_t i = 0; i < num_args; i++) { zval *arg = ZEND_CALL_VAR_NUM(call, i); if (!Z_ISUNDEF_P(arg)) { continue; } - zend_op_array *op_array = &fbc->op_array; - zend_op *opline = &op_array->opcodes[i]; + zend_op *opline = &op_array->opcodes[i + opline_offset]; if (EXPECTED(opline->opcode == ZEND_RECV_INIT)) { zval *default_value = RT_CONSTANT(opline, opline->op2); if (Z_OPT_TYPE_P(default_value) == IS_CONSTANT_AST) { From a4f806aa79c9d0e497866e86f750e87d9bd874f1 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 17 Sep 2020 10:12:10 +0200 Subject: [PATCH 17/67] Fixed bug #80083 Add db2_execute() to the list of functions accessing the local scope. Ideally the API wouldn't do that, but it seems most pragmatic to address this on the opcache side at this point. --- NEWS | 3 +++ ext/opcache/Optimizer/zend_optimizer.c | 2 ++ 2 files changed, 5 insertions(+) diff --git a/NEWS b/NEWS index 00878bde92fac..05fece0bf50e0 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 7.3.24 +- OPcache: + . Fixed bug #80083 (Optimizer pass 6 removes variables used for ibm_db2 data + binding). (Nikita) 01 Oct 2020, PHP 7.3.23 diff --git a/ext/opcache/Optimizer/zend_optimizer.c b/ext/opcache/Optimizer/zend_optimizer.c index 09e68cdbc4864..60d766f9d1dfb 100644 --- a/ext/opcache/Optimizer/zend_optimizer.c +++ b/ext/opcache/Optimizer/zend_optimizer.c @@ -1079,6 +1079,8 @@ uint32_t zend_optimizer_classify_function(zend_string *name, uint32_t num_args) return ZEND_FUNC_INDIRECT_VAR_ACCESS; } else if (zend_string_equals_literal(name, "assert")) { return ZEND_FUNC_INDIRECT_VAR_ACCESS; + } else if (zend_string_equals_literal(name, "db2_execute")) { + return ZEND_FUNC_INDIRECT_VAR_ACCESS; } else if (zend_string_equals_literal(name, "func_num_args")) { return ZEND_FUNC_VARARG; } else if (zend_string_equals_literal(name, "func_get_arg")) { From efc52f1754524327facffc9f7eea72560e1c03e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabr=C3=ADel=20Arth=C3=BAr=20P=C3=A9tursson?= Date: Wed, 16 Sep 2020 14:18:00 +0000 Subject: [PATCH 18/67] ext/soap: Compare Set-Cookie header case-insensitively Closes GH-6143. --- ext/soap/php_http.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/ext/soap/php_http.c b/ext/soap/php_http.c index b054d9ba9ebc6..75dbdf069ec72 100644 --- a/ext/soap/php_http.c +++ b/ext/soap/php_http.c @@ -23,6 +23,7 @@ #include "ext/standard/md5.h" #include "ext/standard/php_random.h" +static char *get_http_header_value_nodup(char *headers, char *type, size_t *len); static char *get_http_header_value(char *headers, char *type); static zend_string *get_http_body(php_stream *socketd, int close, char *headers); static zend_string *get_http_headers(php_stream *socketd); @@ -350,6 +351,7 @@ int make_http_soap_request(zval *this_ptr, int use_ssl; zend_string *http_body; char *content_type, *http_version, *cookie_itt; + size_t cookie_len; int http_close; zend_string *http_headers; char *connection; @@ -968,8 +970,9 @@ int make_http_soap_request(zval *this_ptr, we shouldn't be changing urls so path doesn't matter too much */ - cookie_itt = strstr(ZSTR_VAL(http_headers), "Set-Cookie: "); - while (cookie_itt) { + cookie_itt = ZSTR_VAL(http_headers); + + while ((cookie_itt = get_http_header_value_nodup(cookie_itt, "Set-Cookie: ", &cookie_len))) { char *cookie; char *eqpos, *sempos; zval *cookies; @@ -981,7 +984,7 @@ int make_http_soap_request(zval *this_ptr, cookies = zend_hash_str_update(Z_OBJPROP_P(this_ptr), "_cookies", sizeof("_cookies")-1, &tmp_cookies); } - cookie = get_http_header_value(cookie_itt,"Set-Cookie: "); + cookie = estrndup(cookie_itt, cookie_len); eqpos = strstr(cookie, "="); sempos = strstr(cookie, ";"); @@ -1039,7 +1042,7 @@ int make_http_soap_request(zval *this_ptr, smart_str_free(&name); } - cookie_itt = strstr(cookie_itt + sizeof("Set-Cookie: "), "Set-Cookie: "); + cookie_itt = cookie_itt + cookie_len; efree(cookie); } @@ -1357,7 +1360,7 @@ int make_http_soap_request(zval *this_ptr, return TRUE; } -static char *get_http_header_value(char *headers, char *type) +static char *get_http_header_value_nodup(char *headers, char *type, size_t *len) { char *pos, *tmp = NULL; int typelen, headerslen; @@ -1394,7 +1397,9 @@ static char *get_http_header_value(char *headers, char *type) eol--; } } - return estrndup(tmp, eol - tmp); + + *len = eol - tmp; + return tmp; } /* find next line */ @@ -1408,6 +1413,20 @@ static char *get_http_header_value(char *headers, char *type) return NULL; } +static char *get_http_header_value(char *headers, char *type) +{ + size_t len; + char *value; + + value = get_http_header_value_nodup(headers, type, &len); + + if (value) { + return estrndup(value, len); + } + + return NULL; +} + static zend_string* get_http_body(php_stream *stream, int close, char *headers) { zend_string *http_buf = NULL; From e9820bf470c125266abfd9fac1bb0e2f766db90f Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 17 Sep 2020 11:55:50 +0300 Subject: [PATCH 19/67] Fixed memory leak in ext/spl/tests/bug77263.phpt --- ext/opcache/jit/zend_jit_helpers.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/opcache/jit/zend_jit_helpers.c b/ext/opcache/jit/zend_jit_helpers.c index 240311719dce1..22904a8e1d3bc 100644 --- a/ext/opcache/jit/zend_jit_helpers.c +++ b/ext/opcache/jit/zend_jit_helpers.c @@ -177,7 +177,7 @@ static zend_function* ZEND_FASTCALL zend_jit_find_method_tmp_helper(zend_object zend_objects_store_del(obj); } } else if (obj != *obj_ptr) { - GC_ADDREF(obj); + GC_ADDREF(*obj_ptr); if (GC_DELREF(obj) == 0) { zend_objects_store_del(obj); } From 8d37c37bcdbf6fa99cd275413342457eeb2c664e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Wed, 16 Sep 2020 22:33:23 +0200 Subject: [PATCH 20/67] Fix a few UNKNOWN default values in ext/pgsql Closes GH-6149 --- ext/pgsql/pgsql.c | 56 ++++++++++++++------------------- ext/pgsql/pgsql.stub.php | 66 +++++++++++++++++++-------------------- ext/pgsql/pgsql_arginfo.h | 14 ++++----- 3 files changed, 63 insertions(+), 73 deletions(-) diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 314f28404a615..31bb83431474d 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -729,7 +729,7 @@ PHP_FUNCTION(pg_close) zval *pgsql_link = NULL; zend_resource *link; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|r", &pgsql_link) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|r!", &pgsql_link) == FAILURE) { RETURN_THROWS(); } @@ -769,16 +769,15 @@ static void php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type { zend_resource *link; zval *pgsql_link = NULL; - int argc = ZEND_NUM_ARGS(); PGconn *pgsql; char *msgbuf; char *result; - if (zend_parse_parameters(argc, "|r", &pgsql_link) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|r!", &pgsql_link) == FAILURE) { RETURN_THROWS(); } - if (argc == 0) { + if (!pgsql_link) { link = FETCH_DEFAULT_LINK(); CHECK_DEFAULT_LINK(link); } else { @@ -937,7 +936,7 @@ PHP_FUNCTION(pg_ping) PGresult *res; zend_resource *link; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|r", &pgsql_link) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|r!", &pgsql_link) == FAILURE) { RETURN_THROWS(); } @@ -983,13 +982,13 @@ PHP_FUNCTION(pg_query) ExecStatusType status; if (argc == 1) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &query, &query_len) == FAILURE) { + if (zend_parse_parameters(argc, "s", &query, &query_len) == FAILURE) { RETURN_THROWS(); } link = FETCH_DEFAULT_LINK(); CHECK_DEFAULT_LINK(link); } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &pgsql_link, &query, &query_len) == FAILURE) { + if (zend_parse_parameters(argc, "rs", &pgsql_link, &query, &query_len) == FAILURE) { RETURN_THROWS(); } link = Z_RES_P(pgsql_link); @@ -2227,17 +2226,16 @@ PHP_FUNCTION(pg_trace) char *z_filename, *mode = "w"; size_t z_filename_len, mode_len; zval *pgsql_link = NULL; - int argc = ZEND_NUM_ARGS(); PGconn *pgsql; FILE *fp = NULL; php_stream *stream; zend_resource *link; - if (zend_parse_parameters(argc, "p|sr", &z_filename, &z_filename_len, &mode, &mode_len, &pgsql_link) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "p|sr!", &z_filename, &z_filename_len, &mode, &mode_len, &pgsql_link) == FAILURE) { RETURN_THROWS(); } - if (argc < 3) { + if (!pgsql_link) { link = FETCH_DEFAULT_LINK(); CHECK_DEFAULT_LINK(link); } else { @@ -2271,7 +2269,7 @@ PHP_FUNCTION(pg_untrace) PGconn *pgsql; zend_resource *link; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|r", &pgsql_link) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|r!", &pgsql_link) == FAILURE) { RETURN_THROWS(); } @@ -2622,16 +2620,16 @@ PHP_FUNCTION(pg_lo_write) zval *pgsql_id; char *str; zend_long z_len; + zend_bool z_len_is_null = 1; size_t str_len, nbytes; size_t len; pgLofp *pgsql; - int argc = ZEND_NUM_ARGS(); - if (zend_parse_parameters(argc, "rs|l", &pgsql_id, &str, &str_len, &z_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|l!", &pgsql_id, &str, &str_len, &z_len, &z_len_is_null) == FAILURE) { RETURN_THROWS(); } - if (argc > 2) { + if (!z_len_is_null) { if (z_len < 0) { zend_argument_value_error(3, "must be greater than or equal to 0"); RETURN_THROWS(); @@ -2840,9 +2838,8 @@ PHP_FUNCTION(pg_lo_seek) zval *pgsql_id = NULL; zend_long result, offset = 0, whence = SEEK_CUR; pgLofp *pgsql; - int argc = ZEND_NUM_ARGS(); - if (zend_parse_parameters(argc, "rl|l", &pgsql_id, &offset, &whence) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl|l", &pgsql_id, &offset, &whence) == FAILURE) { RETURN_THROWS(); } if (whence != SEEK_SET && whence != SEEK_CUR && whence != SEEK_END) { @@ -2877,9 +2874,8 @@ PHP_FUNCTION(pg_lo_tell) zval *pgsql_id = NULL; zend_long offset = 0; pgLofp *pgsql; - int argc = ZEND_NUM_ARGS(); - if (zend_parse_parameters(argc, "r", &pgsql_id) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &pgsql_id) == FAILURE) { RETURN_THROWS(); } @@ -2906,10 +2902,9 @@ PHP_FUNCTION(pg_lo_truncate) zval *pgsql_id = NULL; size_t size; pgLofp *pgsql; - int argc = ZEND_NUM_ARGS(); int result; - if (zend_parse_parameters(argc, "rl", &pgsql_id, &size) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl", &pgsql_id, &size) == FAILURE) { RETURN_THROWS(); } @@ -3006,7 +3001,7 @@ PHP_FUNCTION(pg_client_encoding) PGconn *pgsql; zend_resource *link; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|r", &pgsql_link) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|r!", &pgsql_link) == FAILURE) { RETURN_THROWS(); } @@ -3035,7 +3030,7 @@ PHP_FUNCTION(pg_end_copy) int result = 0; zend_resource *link; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|r", &pgsql_link) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|r!", &pgsql_link) == FAILURE) { RETURN_THROWS(); } @@ -3107,9 +3102,8 @@ PHP_FUNCTION(pg_copy_to) PGresult *pgsql_result; ExecStatusType status; char *csv = (char *)NULL; - int argc = ZEND_NUM_ARGS(); - if (zend_parse_parameters(argc, "rs|ss", + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|ss", &pgsql_link, &table_name, &table_name_len, &pg_delim, &pg_delim_len, &pg_null_as, &pg_null_as_len) == FAILURE) { RETURN_THROWS(); @@ -3198,9 +3192,8 @@ PHP_FUNCTION(pg_copy_from) PGconn *pgsql; PGresult *pgsql_result; ExecStatusType status; - int argc = ZEND_NUM_ARGS(); - if (zend_parse_parameters(argc, "rsa|ss", + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsa|ss", &pgsql_link, &table_name, &table_name_len, &pg_rows, &pg_delim, &pg_delim_len, &pg_null_as, &pg_null_as_len) == FAILURE) { RETURN_THROWS(); @@ -3372,7 +3365,7 @@ PHP_FUNCTION(pg_unescape_bytea) char *from = NULL, *to = NULL, *tmp = NULL; size_t to_len; size_t from_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", + if (zend_parse_parameters(ZEND_NUM_ARGS(), "s!", &from, &from_len) == FAILURE) { RETURN_THROWS(); } @@ -5461,9 +5454,8 @@ PHP_FUNCTION(pg_insert) PGresult *pg_result; ExecStatusType status; zend_string *sql = NULL; - int argc = ZEND_NUM_ARGS(); - if (zend_parse_parameters(argc, "rsa|l", + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsa|l", &pgsql_link, &table, &table_len, &values, &option) == FAILURE) { RETURN_THROWS(); } @@ -5678,9 +5670,8 @@ PHP_FUNCTION(pg_update) zend_ulong option = PGSQL_DML_EXEC; PGconn *pg_link; zend_string *sql = NULL; - int argc = ZEND_NUM_ARGS(); - if (zend_parse_parameters(argc, "rsaa|l", + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsaa|l", &pgsql_link, &table, &table_len, &values, &ids, &option) == FAILURE) { RETURN_THROWS(); } @@ -5775,9 +5766,8 @@ PHP_FUNCTION(pg_delete) zend_ulong option = PGSQL_DML_EXEC; PGconn *pg_link; zend_string *sql; - int argc = ZEND_NUM_ARGS(); - if (zend_parse_parameters(argc, "rsa|l", + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsa|l", &pgsql_link, &table, &table_len, &ids, &option) == FAILURE) { RETURN_THROWS(); } diff --git a/ext/pgsql/pgsql.stub.php b/ext/pgsql/pgsql.stub.php index 3d8ce3a701468..0995e0463ff9e 100644 --- a/ext/pgsql/pgsql.stub.php +++ b/ext/pgsql/pgsql.stub.php @@ -11,41 +11,41 @@ function pg_pconnect(string $connection_string, int $connection_type = 0) {} /** @param resource $connection */ function pg_connect_poll($connection): int {} -/** @param resource $connection */ -function pg_close($connection = UNKNOWN): bool {} +/** @param resource|null $connection */ +function pg_close($connection = null): bool {} -/** @param resource $connection */ -function pg_dbname($connection = UNKNOWN): string {} +/** @param resource|null $connection */ +function pg_dbname($connection = null): string {} -/** @param resource $connection */ -function pg_last_error($connection = UNKNOWN): string {} +/** @param resource|null $connection */ +function pg_last_error($connection = null): string {} /** - * @param resource $connection + * @param resource|null $connection * @alias pg_last_error */ -function pg_errormessage($connection = UNKNOWN): string {} +function pg_errormessage($connection = null): string {} -/** @param resource $connection */ -function pg_options($connection = UNKNOWN): string {} +/** @param resource|null $connection */ +function pg_options($connection = null): string {} -/** @param resource $connection */ -function pg_port($connection = UNKNOWN): string {} +/** @param resource|null $connection */ +function pg_port($connection = null): string {} -/** @param resource $connection */ -function pg_tty($connection = UNKNOWN): string {} +/** @param resource|null $connection */ +function pg_tty($connection = null): string {} -/** @param resource $connection */ -function pg_host($connection = UNKNOWN): string {} +/** @param resource|null $connection */ +function pg_host($connection = null): string {} -/** @param resource $connection */ -function pg_version($connection = UNKNOWN): array {} +/** @param resource|null $connection */ +function pg_version($connection = null): array {} /** @param resource|string $connection */ function pg_parameter_status($connection, string $param_name = UNKNOWN): string|false {} -/** @param resource $connection */ -function pg_ping($connection = UNKNOWN): bool {} +/** @param resource|null $connection */ +function pg_ping($connection = null): bool {} /** * @param resource|string $connection @@ -236,11 +236,11 @@ function pg_last_oid($result): string|int|false {} */ function pg_getlastoid($result): string|int|false {} -/** @param resource $connection */ -function pg_trace(string $filename, string $mode = "w", $connection = UNKNOWN): bool {} +/** @param resource|null $connection */ +function pg_trace(string $filename, string $mode = "w", $connection = null): bool {} -/** @param resource $connection */ -function pg_untrace($connection = UNKNOWN): bool {} +/** @param resource|null $connection */ +function pg_untrace($connection = null): bool {} /** * @param resource $connection @@ -302,13 +302,13 @@ function pg_lo_read($large_object, int $len = 8192): string|false {} function pg_loread($large_object, int $len = 8192): string|false {} /** @param resource $large_object */ -function pg_lo_write($large_object, string $buf, int $len = UNKNOWN): int|false {} +function pg_lo_write($large_object, string $buf, ?int $len = null): int|false {} /** * @param resource $large_object * @alias pg_lo_write */ -function pg_lowrite($large_object, string $buf, int $len = UNKNOWN): int|false {} +function pg_lowrite($large_object, string $buf, ?int $len = null): int|false {} /** @param resource $large_object */ function pg_lo_read_all($large_object): int {} @@ -374,17 +374,17 @@ function pg_set_client_encoding($connection, string $encoding = UNKNOWN): int {} */ function pg_setclientencoding($connection, string $encoding = UNKNOWN): int {} -/** @param resource $connection */ -function pg_client_encoding($connection = UNKNOWN): string {} +/** @param resource|null $connection */ +function pg_client_encoding($connection = null): string {} /** - * @param resource $connection + * @param resource|null $connection * @alias pg_client_encoding */ -function pg_clientencoding($connection = UNKNOWN): string {} +function pg_clientencoding($connection = null): string {} -/** @param resource $connection */ -function pg_end_copy($connection = UNKNOWN): bool {} +/** @param resource|null $connection */ +function pg_end_copy($connection = null): bool {} /** @param resource|string $connection */ function pg_put_line($connection, string $query = UNKNOWN): bool {} @@ -401,7 +401,7 @@ function pg_escape_string($connection, string $data = UNKNOWN): string {} /** @param resource|string $connection */ function pg_escape_bytea($connection, string $data = UNKNOWN): string {} -function pg_unescape_bytea(string $data = UNKNOWN): string|false {} +function pg_unescape_bytea(?string $data = null): string|false {} /** @param resource|string $connection */ function pg_escape_literal($connection, string $data = UNKNOWN): string|false {} diff --git a/ext/pgsql/pgsql_arginfo.h b/ext/pgsql/pgsql_arginfo.h index 0c9234acdc5c5..544e0ad4a6a2e 100644 --- a/ext/pgsql/pgsql_arginfo.h +++ b/ext/pgsql/pgsql_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 90dd576049fe13617343fe689000b94b20f47655 */ + * Stub hash: 907a616e7138369e6e3ccbbb10e6c0f2a380fe93 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_pg_connect, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, connection_string, IS_STRING, 0) @@ -13,11 +13,11 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_connect_poll, 0, 1, IS_LONG, ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_close, 0, 0, _IS_BOOL, 0) - ZEND_ARG_INFO(0, connection) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, connection, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_dbname, 0, 0, IS_STRING, 0) - ZEND_ARG_INFO(0, connection) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, connection, "null") ZEND_END_ARG_INFO() #define arginfo_pg_last_error arginfo_pg_dbname @@ -33,7 +33,7 @@ ZEND_END_ARG_INFO() #define arginfo_pg_host arginfo_pg_dbname ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_version, 0, 0, IS_ARRAY, 0) - ZEND_ARG_INFO(0, connection) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, connection, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_parameter_status, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) @@ -197,7 +197,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_trace, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_STRING, 0, "\"w\"") - ZEND_ARG_INFO(0, connection) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, connection, "null") ZEND_END_ARG_INFO() #define arginfo_pg_untrace arginfo_pg_close @@ -240,7 +240,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_lo_write, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_INFO(0, large_object) ZEND_ARG_TYPE_INFO(0, buf, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, len, IS_LONG, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, len, IS_LONG, 1, "null") ZEND_END_ARG_INFO() #define arginfo_pg_lowrite arginfo_pg_lo_write @@ -326,7 +326,7 @@ ZEND_END_ARG_INFO() #define arginfo_pg_escape_bytea arginfo_pg_escape_string ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_unescape_bytea, 0, 0, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, data, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_escape_literal, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) From 202a0697f3f1771f241e7dadbe1ecbb8cb72b6c9 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Sat, 29 Aug 2020 17:18:57 +1000 Subject: [PATCH 21/67] mysqli: use native api Tested with: * mysql-5.6.49-linux-glibc2.12-x86_64 * mysql-5.7.31-linux-glibc2.12-x86_64 * mysql-8.0.21-linux-glibc2.17-x86_64 * mariadb-10.5.6 configure --with-mysqli=/usr/local/$version/bin/mysql_config --with-pdo-mysql=/usr/local/$version MySQL-8.0 removed my_bool Some options where deprecated in mysql-8.0 MY_CHARSET_INFO used with exposed api mysql_get_character_set_info rather than internal structures. --- ext/mysqli/mysqli_api.c | 8 +++++--- ext/mysqli/mysqli_nonapi.c | 3 ++- ext/mysqli/php_mysqli_structs.h | 16 +++------------- 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 27cf68d70037f..0c17e1599e233 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -614,7 +614,7 @@ PHP_FUNCTION(mysqli_change_user) size_t user_len, password_len, dbname_len; zend_ulong rc; #if !defined(MYSQLI_USE_MYSQLND) && defined(HAVE_MYSQLI_SET_CHARSET) - const CHARSET_INFO * old_charset; + MY_CHARSET_INFO old_charset; #endif if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Osss!", &mysql_link, mysqli_link_class_entry, &user, &user_len, &password, &password_len, &dbname, &dbname_len) == FAILURE) { @@ -623,7 +623,7 @@ PHP_FUNCTION(mysqli_change_user) MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); #if !defined(MYSQLI_USE_MYSQLND) && defined(HAVE_MYSQLI_SET_CHARSET) - old_charset = mysql->mysql->charset; + mysql_get_character_set_info(mysql->mysql, &old_charset); #endif #if defined(MYSQLI_USE_MYSQLND) @@ -643,7 +643,7 @@ PHP_FUNCTION(mysqli_change_user) 5.0 doesn't support it. Support added in 5.1.23 by fixing the following bug : Bug #30472 libmysql doesn't reset charset, insert_id after succ. mysql_change_user() call */ - rc = mysql_set_character_set(mysql->mysql, old_charset->csname); + rc = mysql_set_character_set(mysql->mysql, old_charset.csname); } #endif @@ -1716,10 +1716,12 @@ static int mysqli_options_get_option_zval_type(int option) #endif /* MySQL 4.1.0 */ case MYSQL_OPT_READ_TIMEOUT: case MYSQL_OPT_WRITE_TIMEOUT: +#ifdef MYSQL_OPT_GUESS_CONNECTION /* removed in MySQL-8.0 */ case MYSQL_OPT_GUESS_CONNECTION: case MYSQL_OPT_USE_EMBEDDED_CONNECTION: case MYSQL_OPT_USE_REMOTE_CONNECTION: case MYSQL_SECURE_AUTH: +#endif #ifdef MYSQL_OPT_RECONNECT case MYSQL_OPT_RECONNECT: #endif /* MySQL 5.0.13 */ diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 4736e4fcb2a45..0d4a1704cd06b 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -303,7 +303,8 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql)); #if !defined(MYSQLI_USE_MYSQLND) - mysql->mysql->reconnect = MyG(reconnect); + char reconnect = MyG(reconnect); + mysql_options(mysql->mysql, MYSQL_OPT_RECONNECT, (char *)&reconnect); #endif unsigned int allow_local_infile = MyG(allow_local_infile); mysql_options(mysql->mysql, MYSQL_OPT_LOCAL_INFILE, (char *)&allow_local_infile); diff --git a/ext/mysqli/php_mysqli_structs.h b/ext/mysqli/php_mysqli_structs.h index 1b7ffddb1a5bd..e399ecaa36afc 100644 --- a/ext/mysqli/php_mysqli_structs.h +++ b/ext/mysqli/php_mysqli_structs.h @@ -58,8 +58,6 @@ #define HAVE_ULONG #endif -#include - #if !defined(HAVE_MBRLEN) && defined(WE_HAD_MBRLEN) #define HAVE_MBRLEN 1 #endif @@ -68,20 +66,12 @@ #define HAVE_MBSTATE_T 1 #endif -/* - We need more than mysql.h because we need CHARSET_INFO in one place. - This order has been borrowed from the ODBC driver. Nothing can be removed - from the list of headers :( -*/ - -#include #include +#ifndef my_bool +typedef char my_bool; +#endif #include -#include -#include #include -#include -#include #include "mysqli_libmysql.h" #endif /* MYSQLI_USE_MYSQLND */ From c9abb0c0ac8a9bce1d8d62e45dc3ff9fc9ea5308 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Sat, 12 Sep 2020 15:29:23 +1000 Subject: [PATCH 22/67] mysql: native mysql-8.0 uses _Bool MySQL-8.0 removes option MYSQLI_OPT_SSL_VERIFY_SERVER_CERT --- ext/mysqli/mysqli.c | 2 +- ext/mysqli/php_mysqli_structs.h | 4 ++-- ext/pdo_mysql/php_pdo_mysql_int.h | 3 +++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 73511b26393c6..bdab4b7d1e57c 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -686,7 +686,7 @@ PHP_MINIT_FUNCTION(mysqli) #ifdef MYSQLND_STRING_TO_INT_CONVERSION REGISTER_LONG_CONSTANT("MYSQLI_OPT_INT_AND_FLOAT_NATIVE", MYSQLND_OPT_INT_AND_FLOAT_NATIVE, CONST_CS | CONST_PERSISTENT); #endif -#if MYSQL_VERSION_ID > 50110 || defined(MYSQLI_USE_MYSQLND) +#if (MYSQL_VERSION_ID > 50110 && MYSQL_VERSION_ID < 80000) || (MYSQL_VERSION_ID >= 100000) || defined(MYSQLI_USE_MYSQLND) REGISTER_LONG_CONSTANT("MYSQLI_OPT_SSL_VERIFY_SERVER_CERT", MYSQL_OPT_SSL_VERIFY_SERVER_CERT, CONST_CS | CONST_PERSISTENT); #endif diff --git a/ext/mysqli/php_mysqli_structs.h b/ext/mysqli/php_mysqli_structs.h index e399ecaa36afc..143acbd5a10ed 100644 --- a/ext/mysqli/php_mysqli_structs.h +++ b/ext/mysqli/php_mysqli_structs.h @@ -67,8 +67,8 @@ #endif #include -#ifndef my_bool -typedef char my_bool; +#if MYSQL_VERSION_ID >= 80000 && MYSQL_VERSION_ID < 100000 +typedef _Bool my_bool; #endif #include #include diff --git a/ext/pdo_mysql/php_pdo_mysql_int.h b/ext/pdo_mysql/php_pdo_mysql_int.h index 486780acdcc8d..e7cabeeb15fa7 100644 --- a/ext/pdo_mysql/php_pdo_mysql_int.h +++ b/ext/pdo_mysql/php_pdo_mysql_int.h @@ -27,6 +27,9 @@ # define PDO_MYSQL_PARAM_BIND MYSQLND_PARAM_BIND #else # include +#if MYSQL_VERSION_ID >= 80000 && MYSQL_VERSION_ID < 100000 +typedef _Bool my_bool; +#endif # define PDO_MYSQL_PARAM_BIND MYSQL_BIND #endif From 1aab7db6c870441046007c792c7fc5ecdff2ea51 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Sun, 13 Sep 2020 14:09:49 +1000 Subject: [PATCH 23/67] pdo_mysql/mysqli (native) libmysqlclient_r no-longer used The mysqlclient_r library exists in mysql-5.6 for compatibility only. Later versions have it removed. --- ext/mysqli/config.m4 | 3 --- ext/pdo_mysql/config.m4 | 9 ++------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/ext/mysqli/config.m4 b/ext/mysqli/config.m4 index 38a130f4cd92e..7c02546266ce0 100644 --- a/ext/mysqli/config.m4 +++ b/ext/mysqli/config.m4 @@ -57,9 +57,6 @@ elif test "$PHP_MYSQLI" != "no"; then MYSQL_LIB_CFG='--libmysqld-libs' dnl mysqlnd doesn't support embedded, so we have to add some extra stuff mysqli_extra_sources="mysqli_embedded.c" - elif test "$enable_maintainer_zts" = "yes"; then - MYSQL_LIB_CFG='--libs_r' - MYSQL_LIB_NAME='mysqlclient_r' else MYSQL_LIB_CFG='--libs' fi diff --git a/ext/pdo_mysql/config.m4 b/ext/pdo_mysql/config.m4 index 3e37a6adec777..7efa814c541e9 100755 --- a/ext/pdo_mysql/config.m4 +++ b/ext/pdo_mysql/config.m4 @@ -66,13 +66,8 @@ if test "$PHP_PDO_MYSQL" != "no"; then if test "x$SED" = "x"; then AC_PATH_PROG(SED, sed) fi - if test "$enable_maintainer_zts" = "yes"; then - PDO_MYSQL_LIBNAME=mysqlclient_r - PDO_MYSQL_LIBS=`$PDO_MYSQL_CONFIG --libs_r | $SED -e "s/'//g"` - else - PDO_MYSQL_LIBNAME=mysqlclient - PDO_MYSQL_LIBS=`$PDO_MYSQL_CONFIG --libs | $SED -e "s/'//g"` - fi + PDO_MYSQL_LIBNAME=mysqlclient + PDO_MYSQL_LIBS=`$PDO_MYSQL_CONFIG --libs | $SED -e "s/'//g"` PDO_MYSQL_INCLUDE=`$PDO_MYSQL_CONFIG --cflags | $SED -e "s/'//g"` elif test -n "$PDO_MYSQL_DIR"; then AC_MSG_RESULT([not found]) From e7f98f82ac1fbcdcc4e75179ff99b23c7f02790d Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 17 Sep 2020 11:40:14 +0200 Subject: [PATCH 24/67] Add missing mysqlnd checks to stubs --- ext/mysqli/mysqli.stub.php | 12 ++++++ ext/mysqli/mysqli_arginfo.h | 84 +++++++++++++++++++++++++------------ 2 files changed, 70 insertions(+), 26 deletions(-) diff --git a/ext/mysqli/mysqli.stub.php b/ext/mysqli/mysqli.stub.php index de74bba8e128f..9d557fe7462e0 100644 --- a/ext/mysqli/mysqli.stub.php +++ b/ext/mysqli/mysqli.stub.php @@ -572,7 +572,9 @@ function mysqli_fetch_field_direct(mysqli_result $mysql_result, int $offset): ob function mysqli_fetch_lengths(mysqli_result $mysql_result): array|false {} +#if defined(MYSQLI_USE_MYSQLND) function mysqli_fetch_all(mysqli_result $mysql_result, int $mode = MYSQLI_NUM): array|false {} +#endif function mysqli_fetch_array(mysqli_result $mysql_result, int $fetchtype = MYSQLI_BOTH): array|null|false {} @@ -590,9 +592,11 @@ function mysqli_field_tell(mysqli_result $mysqli_result): int {} function mysqli_free_result(mysqli_result $mysqli_result): void {} +#if defined(MYSQLI_USE_MYSQLND) function mysqli_get_connection_stats(mysqli $mysqli_link): array {} function mysqli_get_client_stats(): array {} +#endif function mysqli_get_charset(mysqli $mysqli_link): ?object {} @@ -635,7 +639,9 @@ function mysqli_options(mysqli $mysqli_link, int $option, $value): bool {} function mysqli_ping(mysqli $mysqli_link): bool {} +#if defined(MYSQLI_USE_MYSQLND) function mysqli_poll(?array &$read, ?array &$write, array &$error, int $sec, int $usec = 0): int|false {} +#endif function mysqli_prepare(mysqli $mysqli_link, string $query): mysqli_stmt|false {} @@ -658,7 +664,9 @@ function mysqli_real_escape_string(mysqli $mysqli_link, string $string_to_escape function mysqli_real_query(mysqli $mysqli_link, string $query): bool {} +#if defined(MYSQLI_USE_MYSQLND) function mysqli_reap_async_query(mysqli $mysqli_link): mysqli_result|bool {} +#endif function mysqli_release_savepoint(mysqli $mysqli_link, string $name): bool {} @@ -696,7 +704,9 @@ function mysqli_stmt_field_count(mysqli_stmt $mysql_stmt): int {} function mysqli_stmt_free_result(mysqli_stmt $mysql_stmt): void {} +#if defined(MYSQLI_USE_MYSQLND) function mysqli_stmt_get_result(mysqli_stmt $mysql_stmt): mysqli_result|false {} +#endif function mysqli_stmt_get_warnings(mysqli_stmt $mysql_stmt): mysqli_warning|false {} @@ -704,9 +714,11 @@ function mysqli_stmt_init(mysqli $mysql_link): mysqli_stmt|false {} function mysqli_stmt_insert_id(mysqli_stmt $mysql_stmt): int|string {} +#if defined(MYSQLI_USE_MYSQLND) function mysqli_stmt_more_results(mysqli_stmt $mysql_stmt): bool {} function mysqli_stmt_next_result(mysqli_stmt $mysql_stmt): bool {} +#endif function mysqli_stmt_num_rows(mysqli_stmt $mysql_stmt): int|string {} diff --git a/ext/mysqli/mysqli_arginfo.h b/ext/mysqli/mysqli_arginfo.h index 15daa38426a18..a0228f56aea86 100644 --- a/ext/mysqli/mysqli_arginfo.h +++ b/ext/mysqli/mysqli_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: beb821b6e0b26f798d88f7b726a39084d856251f */ + * Stub hash: 7657a5373cc27d878b1ac1f11d371f77fe243a6a */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_mysqli_affected_rows, 0, 1, MAY_BE_LONG|MAY_BE_STRING) ZEND_ARG_OBJ_INFO(0, mysql_link, mysqli, 0) @@ -96,10 +96,12 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_mysqli_fetch_lengths, 0, 1, MAY_ ZEND_ARG_OBJ_INFO(0, mysql_result, mysqli_result, 0) ZEND_END_ARG_INFO() +#if defined(MYSQLI_USE_MYSQLND) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_mysqli_fetch_all, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, mysql_result, mysqli_result, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "MYSQLI_NUM") ZEND_END_ARG_INFO() +#endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_mysqli_fetch_array, 0, 1, MAY_BE_ARRAY|MAY_BE_NULL|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, mysql_result, mysqli_result, 0) @@ -137,12 +139,16 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_free_result, 0, 1, IS_VOI ZEND_ARG_OBJ_INFO(0, mysqli_result, mysqli_result, 0) ZEND_END_ARG_INFO() +#if defined(MYSQLI_USE_MYSQLND) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_get_connection_stats, 0, 1, IS_ARRAY, 0) ZEND_ARG_OBJ_INFO(0, mysqli_link, mysqli, 0) ZEND_END_ARG_INFO() +#endif +#if defined(MYSQLI_USE_MYSQLND) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_get_client_stats, 0, 0, IS_ARRAY, 0) ZEND_END_ARG_INFO() +#endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_get_charset, 0, 1, IS_OBJECT, 1) ZEND_ARG_OBJ_INFO(0, mysqli_link, mysqli, 0) @@ -154,7 +160,8 @@ ZEND_END_ARG_INFO() #define arginfo_mysqli_get_client_version arginfo_mysqli_connect_errno -#define arginfo_mysqli_get_links_stats arginfo_mysqli_get_client_stats +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_get_links_stats, 0, 0, IS_ARRAY, 0) +ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_get_host_info, 0, 1, IS_STRING, 0) ZEND_ARG_OBJ_INFO(0, mysqli_link, mysqli, 0) @@ -213,6 +220,7 @@ ZEND_END_ARG_INFO() #define arginfo_mysqli_ping arginfo_mysqli_more_results +#if defined(MYSQLI_USE_MYSQLND) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_mysqli_poll, 0, 4, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(1, read, IS_ARRAY, 1) ZEND_ARG_TYPE_INFO(1, write, IS_ARRAY, 1) @@ -220,6 +228,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_mysqli_poll, 0, 4, MAY_BE_LONG|M ZEND_ARG_TYPE_INFO(0, sec, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, usec, IS_LONG, 0, "0") ZEND_END_ARG_INFO() +#endif ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_mysqli_prepare, 0, 2, mysqli_stmt, MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, mysqli_link, mysqli, 0) @@ -254,9 +263,11 @@ ZEND_END_ARG_INFO() #define arginfo_mysqli_real_query arginfo_mysqli_multi_query +#if defined(MYSQLI_USE_MYSQLND) ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_mysqli_reap_async_query, 0, 1, mysqli_result, MAY_BE_BOOL) ZEND_ARG_OBJ_INFO(0, mysqli_link, mysqli, 0) ZEND_END_ARG_INFO() +#endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_release_savepoint, 0, 2, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, mysqli_link, mysqli, 0) @@ -336,9 +347,11 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_free_result, 0, 1, I ZEND_ARG_OBJ_INFO(0, mysql_stmt, mysqli_stmt, 0) ZEND_END_ARG_INFO() +#if defined(MYSQLI_USE_MYSQLND) ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_mysqli_stmt_get_result, 0, 1, mysqli_result, MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, mysql_stmt, mysqli_stmt, 0) ZEND_END_ARG_INFO() +#endif ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_mysqli_stmt_get_warnings, 0, 1, mysqli_warning, MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, mysql_stmt, mysqli_stmt, 0) @@ -350,9 +363,15 @@ ZEND_END_ARG_INFO() #define arginfo_mysqli_stmt_insert_id arginfo_mysqli_stmt_affected_rows -#define arginfo_mysqli_stmt_more_results arginfo_mysqli_stmt_execute +#if defined(MYSQLI_USE_MYSQLND) +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_more_results, 0, 1, _IS_BOOL, 0) + ZEND_ARG_OBJ_INFO(0, mysql_stmt, mysqli_stmt, 0) +ZEND_END_ARG_INFO() +#endif -#define arginfo_mysqli_stmt_next_result arginfo_mysqli_stmt_execute +#if defined(MYSQLI_USE_MYSQLND) +#define arginfo_mysqli_stmt_next_result arginfo_mysqli_stmt_more_results +#endif #define arginfo_mysqli_stmt_num_rows arginfo_mysqli_stmt_affected_rows @@ -365,7 +384,9 @@ ZEND_END_ARG_INFO() #define arginfo_mysqli_stmt_reset arginfo_mysqli_stmt_execute -#define arginfo_mysqli_stmt_result_metadata arginfo_mysqli_stmt_get_result +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_mysqli_stmt_result_metadata, 0, 1, mysqli_result, MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, mysql_stmt, mysqli_stmt, 0) +ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_send_long_data, 0, 3, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, mysql_stmt, mysqli_stmt, 0) @@ -711,7 +732,9 @@ ZEND_FUNCTION(mysqli_fetch_field); ZEND_FUNCTION(mysqli_fetch_fields); ZEND_FUNCTION(mysqli_fetch_field_direct); ZEND_FUNCTION(mysqli_fetch_lengths); +#if defined(MYSQLI_USE_MYSQLND) ZEND_FUNCTION(mysqli_fetch_all); +#endif ZEND_FUNCTION(mysqli_fetch_array); ZEND_FUNCTION(mysqli_fetch_assoc); ZEND_FUNCTION(mysqli_fetch_object); @@ -720,8 +743,12 @@ ZEND_FUNCTION(mysqli_field_count); ZEND_FUNCTION(mysqli_field_seek); ZEND_FUNCTION(mysqli_field_tell); ZEND_FUNCTION(mysqli_free_result); +#if defined(MYSQLI_USE_MYSQLND) ZEND_FUNCTION(mysqli_get_connection_stats); +#endif +#if defined(MYSQLI_USE_MYSQLND) ZEND_FUNCTION(mysqli_get_client_stats); +#endif ZEND_FUNCTION(mysqli_get_charset); ZEND_FUNCTION(mysqli_get_client_info); ZEND_FUNCTION(mysqli_get_client_version); @@ -742,14 +769,18 @@ ZEND_FUNCTION(mysqli_num_fields); ZEND_FUNCTION(mysqli_num_rows); ZEND_FUNCTION(mysqli_options); ZEND_FUNCTION(mysqli_ping); +#if defined(MYSQLI_USE_MYSQLND) ZEND_FUNCTION(mysqli_poll); +#endif ZEND_FUNCTION(mysqli_prepare); ZEND_FUNCTION(mysqli_report); ZEND_FUNCTION(mysqli_query); ZEND_FUNCTION(mysqli_real_connect); ZEND_FUNCTION(mysqli_real_escape_string); ZEND_FUNCTION(mysqli_real_query); +#if defined(MYSQLI_USE_MYSQLND) ZEND_FUNCTION(mysqli_reap_async_query); +#endif ZEND_FUNCTION(mysqli_release_savepoint); ZEND_FUNCTION(mysqli_rollback); ZEND_FUNCTION(mysqli_savepoint); @@ -768,12 +799,18 @@ ZEND_FUNCTION(mysqli_stmt_error_list); ZEND_FUNCTION(mysqli_stmt_fetch); ZEND_FUNCTION(mysqli_stmt_field_count); ZEND_FUNCTION(mysqli_stmt_free_result); +#if defined(MYSQLI_USE_MYSQLND) ZEND_FUNCTION(mysqli_stmt_get_result); +#endif ZEND_FUNCTION(mysqli_stmt_get_warnings); ZEND_FUNCTION(mysqli_stmt_init); ZEND_FUNCTION(mysqli_stmt_insert_id); +#if defined(MYSQLI_USE_MYSQLND) ZEND_FUNCTION(mysqli_stmt_more_results); +#endif +#if defined(MYSQLI_USE_MYSQLND) ZEND_FUNCTION(mysqli_stmt_next_result); +#endif ZEND_FUNCTION(mysqli_stmt_num_rows); ZEND_FUNCTION(mysqli_stmt_param_count); ZEND_FUNCTION(mysqli_stmt_prepare); @@ -792,31 +829,10 @@ ZEND_FUNCTION(mysqli_use_result); ZEND_FUNCTION(mysqli_warning_count); ZEND_FUNCTION(mysqli_refresh); ZEND_METHOD(mysqli, __construct); -#if defined(MYSQLI_USE_MYSQLND) -ZEND_FUNCTION(mysqli_get_connection_stats); -#endif ZEND_FUNCTION(mysqli_init_method); -#if defined(MYSQLI_USE_MYSQLND) -ZEND_FUNCTION(mysqli_poll); -#endif -#if defined(MYSQLI_USE_MYSQLND) -ZEND_FUNCTION(mysqli_reap_async_query); -#endif ZEND_METHOD(mysqli_result, __construct); -#if defined(MYSQLI_USE_MYSQLND) -ZEND_FUNCTION(mysqli_fetch_all); -#endif ZEND_METHOD(mysqli_result, getIterator); ZEND_METHOD(mysqli_stmt, __construct); -#if defined(MYSQLI_USE_MYSQLND) -ZEND_FUNCTION(mysqli_stmt_more_results); -#endif -#if defined(MYSQLI_USE_MYSQLND) -ZEND_FUNCTION(mysqli_stmt_next_result); -#endif -#if defined(MYSQLI_USE_MYSQLND) -ZEND_FUNCTION(mysqli_stmt_get_result); -#endif ZEND_METHOD(mysqli_warning, __construct); ZEND_METHOD(mysqli_warning, next); @@ -844,7 +860,9 @@ static const zend_function_entry ext_functions[] = { ZEND_FE(mysqli_fetch_fields, arginfo_mysqli_fetch_fields) ZEND_FE(mysqli_fetch_field_direct, arginfo_mysqli_fetch_field_direct) ZEND_FE(mysqli_fetch_lengths, arginfo_mysqli_fetch_lengths) +#if defined(MYSQLI_USE_MYSQLND) ZEND_FE(mysqli_fetch_all, arginfo_mysqli_fetch_all) +#endif ZEND_FE(mysqli_fetch_array, arginfo_mysqli_fetch_array) ZEND_FE(mysqli_fetch_assoc, arginfo_mysqli_fetch_assoc) ZEND_FE(mysqli_fetch_object, arginfo_mysqli_fetch_object) @@ -853,8 +871,12 @@ static const zend_function_entry ext_functions[] = { ZEND_FE(mysqli_field_seek, arginfo_mysqli_field_seek) ZEND_FE(mysqli_field_tell, arginfo_mysqli_field_tell) ZEND_FE(mysqli_free_result, arginfo_mysqli_free_result) +#if defined(MYSQLI_USE_MYSQLND) ZEND_FE(mysqli_get_connection_stats, arginfo_mysqli_get_connection_stats) +#endif +#if defined(MYSQLI_USE_MYSQLND) ZEND_FE(mysqli_get_client_stats, arginfo_mysqli_get_client_stats) +#endif ZEND_FE(mysqli_get_charset, arginfo_mysqli_get_charset) ZEND_FE(mysqli_get_client_info, arginfo_mysqli_get_client_info) ZEND_FE(mysqli_get_client_version, arginfo_mysqli_get_client_version) @@ -875,14 +897,18 @@ static const zend_function_entry ext_functions[] = { ZEND_FE(mysqli_num_rows, arginfo_mysqli_num_rows) ZEND_FE(mysqli_options, arginfo_mysqli_options) ZEND_FE(mysqli_ping, arginfo_mysqli_ping) +#if defined(MYSQLI_USE_MYSQLND) ZEND_FE(mysqli_poll, arginfo_mysqli_poll) +#endif ZEND_FE(mysqli_prepare, arginfo_mysqli_prepare) ZEND_FE(mysqli_report, arginfo_mysqli_report) ZEND_FE(mysqli_query, arginfo_mysqli_query) ZEND_FE(mysqli_real_connect, arginfo_mysqli_real_connect) ZEND_FE(mysqli_real_escape_string, arginfo_mysqli_real_escape_string) ZEND_FE(mysqli_real_query, arginfo_mysqli_real_query) +#if defined(MYSQLI_USE_MYSQLND) ZEND_FE(mysqli_reap_async_query, arginfo_mysqli_reap_async_query) +#endif ZEND_FE(mysqli_release_savepoint, arginfo_mysqli_release_savepoint) ZEND_FE(mysqli_rollback, arginfo_mysqli_rollback) ZEND_FE(mysqli_savepoint, arginfo_mysqli_savepoint) @@ -901,12 +927,18 @@ static const zend_function_entry ext_functions[] = { ZEND_FE(mysqli_stmt_fetch, arginfo_mysqli_stmt_fetch) ZEND_FE(mysqli_stmt_field_count, arginfo_mysqli_stmt_field_count) ZEND_FE(mysqli_stmt_free_result, arginfo_mysqli_stmt_free_result) +#if defined(MYSQLI_USE_MYSQLND) ZEND_FE(mysqli_stmt_get_result, arginfo_mysqli_stmt_get_result) +#endif ZEND_FE(mysqli_stmt_get_warnings, arginfo_mysqli_stmt_get_warnings) ZEND_FE(mysqli_stmt_init, arginfo_mysqli_stmt_init) ZEND_FE(mysqli_stmt_insert_id, arginfo_mysqli_stmt_insert_id) +#if defined(MYSQLI_USE_MYSQLND) ZEND_FE(mysqli_stmt_more_results, arginfo_mysqli_stmt_more_results) +#endif +#if defined(MYSQLI_USE_MYSQLND) ZEND_FE(mysqli_stmt_next_result, arginfo_mysqli_stmt_next_result) +#endif ZEND_FE(mysqli_stmt_num_rows, arginfo_mysqli_stmt_num_rows) ZEND_FE(mysqli_stmt_param_count, arginfo_mysqli_stmt_param_count) ZEND_FE(mysqli_stmt_prepare, arginfo_mysqli_stmt_prepare) From 5cb8b04646ed99c794c45f8c24fc5c3c7c59e320 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 17 Sep 2020 12:05:30 +0200 Subject: [PATCH 25/67] Drop support for libmysqlclient < 5.5 Given how little maintenance the libmysqlclient driver sees, be more aggressive in dropping old version support here. --- UPGRADING | 2 +- ext/mysqli/config.m4 | 10 ---------- ext/mysqli/mysqli.c | 4 ++-- ext/mysqli/mysqli_api.c | 24 +++--------------------- ext/mysqli/mysqli_mysqlnd.h | 2 -- 5 files changed, 6 insertions(+), 36 deletions(-) diff --git a/UPGRADING b/UPGRADING index 090b221c712c3..58a29ec81ccc1 100644 --- a/UPGRADING +++ b/UPGRADING @@ -1033,7 +1033,7 @@ PHP 8.0 UPGRADE NOTES - MySQLi / PDO MySQL: . When mysqlnd is not used (which is the default and recommended option), - the minimum supported libmysqlclient version is now 5.1. + the minimum supported libmysqlclient version is now 5.5. . mysqli_result now implements IteratorAggregate (instead of Traversable). - PGSQL / PDO PGSQL: diff --git a/ext/mysqli/config.m4 b/ext/mysqli/config.m4 index 744c9bf846737..b57ce197a946c 100644 --- a/ext/mysqli/config.m4 +++ b/ext/mysqli/config.m4 @@ -75,16 +75,6 @@ elif test "$PHP_MYSQLI" != "no"; then ],[ $MYSQLI_LIBLINE ]) - dnl - dnl Check the library for mysql_stmt_next_result - dnl - PHP_CHECK_LIBRARY($MYSQL_LIB_NAME, mysql_stmt_next_result, - [ - AC_DEFINE(HAVE_STMT_NEXT_RESULT, 1, [ ]) - ],[ - ],[ - $MYSQLI_LIBLINE - ]) fi dnl Build extension diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 7d47ef0756704..620e9f13924e9 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -659,7 +659,7 @@ PHP_MINIT_FUNCTION(mysqli) #ifdef MYSQLND_STRING_TO_INT_CONVERSION REGISTER_LONG_CONSTANT("MYSQLI_OPT_INT_AND_FLOAT_NATIVE", MYSQLND_OPT_INT_AND_FLOAT_NATIVE, CONST_CS | CONST_PERSISTENT); #endif -#if (MYSQL_VERSION_ID > 50110 && MYSQL_VERSION_ID < 80000) || (MYSQL_VERSION_ID >= 100000) || defined(MYSQLI_USE_MYSQLND) +#if MYSQL_VERSION_ID < 80000 || MYSQL_VERSION_ID >= 100000 || defined(MYSQLI_USE_MYSQLND) REGISTER_LONG_CONSTANT("MYSQLI_OPT_SSL_VERIFY_SERVER_CERT", MYSQL_OPT_SSL_VERIFY_SERVER_CERT, CONST_CS | CONST_PERSISTENT); #endif @@ -727,7 +727,7 @@ PHP_MINIT_FUNCTION(mysqli) REGISTER_LONG_CONSTANT("MYSQLI_BINARY_FLAG", BINARY_FLAG, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("MYSQLI_NO_DEFAULT_VALUE_FLAG", NO_DEFAULT_VALUE_FLAG, CONST_CS | CONST_PERSISTENT); -#if (MYSQL_VERSION_ID > 51122 && MYSQL_VERSION_ID < 60000) || (MYSQL_VERSION_ID > 60003) || defined(MYSQLI_USE_MYSQLND) +#if MYSQL_VERSION_ID < 60000 || MYSQL_VERSION_ID > 60003 || defined(MYSQLI_USE_MYSQLND) REGISTER_LONG_CONSTANT("MYSQLI_ON_UPDATE_NOW_FLAG", ON_UPDATE_NOW_FLAG, CONST_CS | CONST_PERSISTENT); #endif diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 34b83bb12a850..f559c3e8f9b84 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -457,12 +457,7 @@ mysqli_stmt_bind_result_do_bind(MY_STMT *stmt, zval *args, unsigned int argc) case MYSQL_TYPE_NEWDECIMAL: #endif { -#if MYSQL_VERSION_ID >= 50107 - /* Changed to my_bool in MySQL 5.1. See MySQL Bug #16144 */ my_bool tmp; -#else - zend_ulong tmp = 0; -#endif stmt->result.buf[ofs].type = IS_STRING; /* If the user has called $stmt->store_result() then we have asked @@ -1567,7 +1562,8 @@ PHP_FUNCTION(mysqli_next_result) { } /* }}} */ -#if defined(HAVE_STMT_NEXT_RESULT) && defined(MYSQLI_USE_MYSQLND) +/* TODO: Make these available without mysqlnd */ +#if defined(MYSQLI_USE_MYSQLND) /* {{{ check if there any more query results from a multi query */ PHP_FUNCTION(mysqli_stmt_more_results) { @@ -2244,9 +2240,7 @@ PHP_FUNCTION(mysqli_stmt_attr_set) MY_STMT *stmt; zval *mysql_stmt; zend_long mode_in; -#if MYSQL_VERSION_ID >= 50107 my_bool mode_b; -#endif unsigned long mode; zend_long attr; void *mode_p; @@ -2258,7 +2252,6 @@ PHP_FUNCTION(mysqli_stmt_attr_set) MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); switch (attr) { -#if MYSQL_VERSION_ID >= 50107 case STMT_ATTR_UPDATE_MAX_LENGTH: if (mode_in != 0 && mode_in != 1) { zend_argument_value_error(ERROR_ARG_POS(3), "must be 0 or 1 for attribute MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH"); @@ -2267,7 +2260,6 @@ PHP_FUNCTION(mysqli_stmt_attr_set) mode_b = (my_bool) mode_in; mode_p = &mode_b; break; -#endif case STMT_ATTR_CURSOR_TYPE: switch (mode_in) { case CURSOR_TYPE_NO_CURSOR: @@ -2294,9 +2286,7 @@ PHP_FUNCTION(mysqli_stmt_attr_set) break; default: zend_argument_value_error(ERROR_ARG_POS(2), "must be one of " -#if MYSQL_VERSION_ID >= 50107 "MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH, " -#endif "MYSQLI_STMT_ATTR_PREFETCH_ROWS, or STMT_ATTR_CURSOR_TYPE"); RETURN_THROWS(); } @@ -2332,18 +2322,14 @@ PHP_FUNCTION(mysqli_stmt_attr_get) /* Success corresponds to 0 return value and a non-zero value * should only happen if the attr/option is unknown */ zend_argument_value_error(ERROR_ARG_POS(2), "must be one of " -#if MYSQL_VERSION_ID >= 50107 "MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH, " -#endif "MYSQLI_STMT_ATTR_PREFETCH_ROWS, or STMT_ATTR_CURSOR_TYPE"); RETURN_THROWS(); } -#if MYSQL_VERSION_ID >= 50107 if (attr == STMT_ATTR_UPDATE_MAX_LENGTH) value = *((my_bool *)&value); -#endif RETURN_LONG((unsigned long)value); } /* }}} */ @@ -2488,11 +2474,7 @@ PHP_FUNCTION(mysqli_stmt_store_result) stmt->stmt->fields[i].type == MYSQL_TYPE_LONG_BLOB || stmt->stmt->fields[i].type == MYSQL_TYPE_GEOMETRY)) { -#if MYSQL_VERSION_ID >= 50107 - my_bool tmp=1; -#else - uint32_t tmp=1; -#endif + my_bool tmp = 1; mysql_stmt_attr_set(stmt->stmt, STMT_ATTR_UPDATE_MAX_LENGTH, &tmp); break; } diff --git a/ext/mysqli/mysqli_mysqlnd.h b/ext/mysqli/mysqli_mysqlnd.h index 48eae08258407..a2fcff3e21ac8 100644 --- a/ext/mysqli/mysqli_mysqlnd.h +++ b/ext/mysqli/mysqli_mysqlnd.h @@ -41,6 +41,4 @@ #define mysqli_async_query(c, q, l) mysqlnd_async_query((c), (q), (l)) #define mysqli_change_user_silent(c, u, p, d, p_len) mysqlnd_change_user_ex((c), (u), (p), (d), TRUE, (size_t)(p_len)) -#define HAVE_STMT_NEXT_RESULT - #endif From efdbc3688bd9c72f3f4d7785ff491377366fe5f5 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Thu, 17 Sep 2020 12:37:02 +0200 Subject: [PATCH 26/67] Fix #80115: mysqlnd.debug doesn't recognize absolute paths with slashes --- NEWS | 4 ++++ ext/mysqlnd/mysqlnd_debug.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 05fece0bf50e0..9d3d53aca1077 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,10 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 7.3.24 +- MySQLnd: + . Fixed bug #80115 (mysqlnd.debug doesn't recognize absolute paths with + slashes). (cmb) + - OPcache: . Fixed bug #80083 (Optimizer pass 6 removes variables used for ibm_db2 data binding). (Nikita) diff --git a/ext/mysqlnd/mysqlnd_debug.c b/ext/mysqlnd/mysqlnd_debug.c index 409097a559132..17b1d1ac48254 100644 --- a/ext/mysqlnd/mysqlnd_debug.c +++ b/ext/mysqlnd/mysqlnd_debug.c @@ -524,7 +524,7 @@ MYSQLND_METHOD(mysqlnd_debug, set_mode)(MYSQLND_DEBUG * self, const char * const if (i + 1 < mode_len && mode[i+1] == ',') { unsigned int j = i + 2; #ifdef PHP_WIN32 - if (i+4 < mode_len && mode[i+3] == ':' && (mode[i+4] == '\\' || mode[i+5] == '/')) { + if (i+4 < mode_len && mode[i+3] == ':' && (mode[i+4] == '\\' || mode[i+4] == '/')) { j = i + 5; } #endif From d4e5b5b6fc2f78224bb50ae51539389594cc41c9 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 17 Sep 2020 10:56:45 +0200 Subject: [PATCH 27/67] Fix compilation warnings in odbc SQLCHAR* cast all the things. --- ext/odbc/php_odbc.c | 103 ++++++++++++++++++++++---------------------- 1 file changed, 51 insertions(+), 52 deletions(-) diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c index 98b079c60310a..6636a810433d7 100644 --- a/ext/odbc/php_odbc.c +++ b/ext/odbc/php_odbc.c @@ -523,7 +523,7 @@ PHP_MINFO_FUNCTION(odbc) php_info_print_table_row(2, "Active Links", buf); php_info_print_table_row(2, "ODBC library", PHP_ODBC_TYPE); #ifdef ODBCVER - snprintf(buf, sizeof(buf), "0x%0.4x", ODBCVER); + snprintf(buf, sizeof(buf), "0x%.4x", ODBCVER); php_info_print_table_row(2, "ODBCVER", buf); #endif #ifndef PHP_WIN32 @@ -560,7 +560,7 @@ void odbc_sql_error(ODBC_SQL_ERROR_PARAMS) while(henv != SQL_NULL_HENV){ do { */ - rc = SQLError(henv, conn, stmt, ODBCG(laststate), &error, ODBCG(lasterrormsg), sizeof(ODBCG(lasterrormsg))-1, &errormsgsize); + rc = SQLError(henv, conn, stmt, (SQLCHAR *) ODBCG(laststate), &error, (SQLCHAR *) ODBCG(lasterrormsg), sizeof(ODBCG(lasterrormsg))-1, &errormsgsize); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { snprintf(ODBCG(laststate), sizeof(ODBCG(laststate)), "HY000"); snprintf(ODBCG(lasterrormsg), sizeof(ODBCG(lasterrormsg)), "Failed to fetch error message"); @@ -912,7 +912,7 @@ PHP_FUNCTION(odbc_prepare) } #endif - rc = SQLPrepare(result->stmt, query, SQL_NTS); + rc = SQLPrepare(result->stmt, (SQLCHAR *) query, SQL_NTS); switch (rc) { case SQL_SUCCESS: break; @@ -1197,7 +1197,7 @@ PHP_FUNCTION(odbc_cursor) if (max_len > 0) { cursorname = emalloc(max_len + 1); - rc = SQLGetCursorName(result->stmt,cursorname,(SQLSMALLINT)max_len,&len); + rc = SQLGetCursorName(result->stmt, (SQLCHAR *) cursorname, (SQLSMALLINT)max_len, &len); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { char state[6]; /* Not used */ SQLINTEGER error; /* Not used */ @@ -1205,11 +1205,11 @@ PHP_FUNCTION(odbc_cursor) SQLSMALLINT errormsgsize; /* Not used */ SQLError( result->conn_ptr->henv, result->conn_ptr->hdbc, - result->stmt, state, &error, errormsg, + result->stmt, (SQLCHAR *) state, &error, (SQLCHAR *) errormsg, sizeof(errormsg)-1, &errormsgsize); if (!strncmp(state,"S1015",5)) { snprintf(cursorname, max_len+1, "php_curs_" ZEND_ULONG_FMT, (zend_ulong)result->stmt); - if (SQLSetCursorName(result->stmt,cursorname,SQL_NTS) != SQL_SUCCESS) { + if (SQLSetCursorName(result->stmt, (SQLCHAR *) cursorname, SQL_NTS) != SQL_SUCCESS) { odbc_sql_error(result->conn_ptr, result->stmt, "SQLSetCursorName"); RETVAL_FALSE; } else { @@ -1282,8 +1282,8 @@ PHP_FUNCTION(odbc_data_source) array_init(return_value); - add_assoc_string_ex(return_value, "server", sizeof("server")-1, server_name); - add_assoc_string_ex(return_value, "description", sizeof("description")-1, desc); + add_assoc_string_ex(return_value, "server", sizeof("server")-1, (char *) server_name); + add_assoc_string_ex(return_value, "description", sizeof("description")-1, (char *) desc); } /* }}} */ @@ -1343,7 +1343,7 @@ PHP_FUNCTION(odbc_exec) } #endif - rc = SQLExecDirect(result->stmt, query, SQL_NTS); + rc = SQLExecDirect(result->stmt, (SQLCHAR *) query, SQL_NTS); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO && rc != SQL_NO_DATA_FOUND) { /* XXX FIXME we should really check out SQLSTATE with SQLError * in case rc is SQL_SUCCESS_WITH_INFO here. @@ -2131,7 +2131,7 @@ int odbc_sqlconnect(odbc_connection **conn, char *db, char *uid, char *pwd, int * #ifdef HAVE_EMPRESS */ { int direct = 0; - char dsnbuf[1024]; + SQLCHAR dsnbuf[1024]; short dsnbuflen; char *ldb = 0; int ldb_len = 0; @@ -2148,9 +2148,9 @@ int odbc_sqlconnect(odbc_connection **conn, char *db, char *uid, char *pwd, int } if (direct) { - rc = SQLDriverConnect((*conn)->hdbc, NULL, ldb, strlen(ldb), dsnbuf, sizeof(dsnbuf) - 1, &dsnbuflen, SQL_DRIVER_NOPROMPT); + rc = SQLDriverConnect((*conn)->hdbc, NULL, (SQLCHAR *) ldb, strlen(ldb), dsnbuf, sizeof(dsnbuf) - 1, &dsnbuflen, SQL_DRIVER_NOPROMPT); } else { - rc = SQLConnect((*conn)->hdbc, db, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS); + rc = SQLConnect((*conn)->hdbc, (SQLCHAR *) db, SQL_NTS, (SQLCHAR *) uid, SQL_NTS, (SQLCHAR *) pwd, SQL_NTS); } if (ldb) { @@ -2158,7 +2158,7 @@ int odbc_sqlconnect(odbc_connection **conn, char *db, char *uid, char *pwd, int } } #else - rc = SQLConnect((*conn)->hdbc, db, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS); + rc = SQLConnect((*conn)->hdbc, (SQLCHAR *) db, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS); #endif #endif if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { @@ -2787,10 +2787,10 @@ PHP_FUNCTION(odbc_tables) } rc = SQLTables(result->stmt, - cat, SAFE_SQL_NTS(cat), - schema, SAFE_SQL_NTS(schema), - table, SAFE_SQL_NTS(table), - type, SAFE_SQL_NTS(type)); + (SQLCHAR *) cat, SAFE_SQL_NTS(cat), + (SQLCHAR *) schema, SAFE_SQL_NTS(schema), + (SQLCHAR *) table, SAFE_SQL_NTS(table), + (SQLCHAR *) type, SAFE_SQL_NTS(type)); if (rc == SQL_ERROR) { odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLTables"); @@ -2857,10 +2857,10 @@ PHP_FUNCTION(odbc_columns) } rc = SQLColumns(result->stmt, - cat, (SQLSMALLINT) cat_len, - schema, (SQLSMALLINT) schema_len, - table, (SQLSMALLINT) table_len, - column, (SQLSMALLINT) column_len); + (SQLCHAR *) cat, (SQLSMALLINT) cat_len, + (SQLCHAR *) schema, (SQLSMALLINT) schema_len, + (SQLCHAR *) table, (SQLSMALLINT) table_len, + (SQLCHAR *) column, (SQLSMALLINT) column_len); if (rc == SQL_ERROR) { odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLColumns"); @@ -2921,10 +2921,10 @@ PHP_FUNCTION(odbc_columnprivileges) } rc = SQLColumnPrivileges(result->stmt, - cat, SAFE_SQL_NTS(cat), - schema, SAFE_SQL_NTS(schema), - table, SAFE_SQL_NTS(table), - column, SAFE_SQL_NTS(column)); + (SQLCHAR *) cat, SAFE_SQL_NTS(cat), + (SQLCHAR *) schema, SAFE_SQL_NTS(schema), + (SQLCHAR *) table, SAFE_SQL_NTS(table), + (SQLCHAR *) column, SAFE_SQL_NTS(column)); if (rc == SQL_ERROR) { odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLColumnPrivileges"); @@ -2998,12 +2998,12 @@ PHP_FUNCTION(odbc_foreignkeys) } rc = SQLForeignKeys(result->stmt, - pcat, SAFE_SQL_NTS(pcat), - pschema, SAFE_SQL_NTS(pschema), - ptable, SAFE_SQL_NTS(ptable), - fcat, SAFE_SQL_NTS(fcat), - fschema, SAFE_SQL_NTS(fschema), - ftable, SAFE_SQL_NTS(ftable) ); + (SQLCHAR *) pcat, SAFE_SQL_NTS(pcat), + (SQLCHAR *) pschema, SAFE_SQL_NTS(pschema), + (SQLCHAR *) ptable, SAFE_SQL_NTS(ptable), + (SQLCHAR *) fcat, SAFE_SQL_NTS(fcat), + (SQLCHAR *) fschema, SAFE_SQL_NTS(fschema), + (SQLCHAR *) ftable, SAFE_SQL_NTS(ftable) ); if (rc == SQL_ERROR) { odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLForeignKeys"); @@ -3123,9 +3123,9 @@ PHP_FUNCTION(odbc_primarykeys) } rc = SQLPrimaryKeys(result->stmt, - cat, SAFE_SQL_NTS(cat), - schema, SAFE_SQL_NTS(schema), - table, SAFE_SQL_NTS(table) ); + (SQLCHAR *) cat, SAFE_SQL_NTS(cat), + (SQLCHAR *) schema, SAFE_SQL_NTS(schema), + (SQLCHAR *) table, SAFE_SQL_NTS(table) ); if (rc == SQL_ERROR) { odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLPrimaryKeys"); @@ -3190,10 +3190,10 @@ PHP_FUNCTION(odbc_procedurecolumns) } rc = SQLProcedureColumns(result->stmt, - cat, SAFE_SQL_NTS(cat), - schema, SAFE_SQL_NTS(schema), - proc, SAFE_SQL_NTS(proc), - col, SAFE_SQL_NTS(col) ); + (SQLCHAR *) cat, SAFE_SQL_NTS(cat), + (SQLCHAR *) schema, SAFE_SQL_NTS(schema), + (SQLCHAR *) proc, SAFE_SQL_NTS(proc), + (SQLCHAR *) col, SAFE_SQL_NTS(col) ); if (rc == SQL_ERROR) { odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLProcedureColumns"); @@ -3258,9 +3258,9 @@ PHP_FUNCTION(odbc_procedures) } rc = SQLProcedures(result->stmt, - cat, SAFE_SQL_NTS(cat), - schema, SAFE_SQL_NTS(schema), - proc, SAFE_SQL_NTS(proc) ); + (SQLCHAR *) cat, SAFE_SQL_NTS(cat), + (SQLCHAR *) schema, SAFE_SQL_NTS(schema), + (SQLCHAR *) proc, SAFE_SQL_NTS(proc) ); if (rc == SQL_ERROR) { odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLProcedures"); @@ -3326,11 +3326,10 @@ PHP_FUNCTION(odbc_specialcolumns) RETURN_FALSE; } - rc = SQLSpecialColumns(result->stmt, - type, - cat, SAFE_SQL_NTS(cat), - schema, SAFE_SQL_NTS(schema), - name, SAFE_SQL_NTS(name), + rc = SQLSpecialColumns(result->stmt, type, + (SQLCHAR *) cat, SAFE_SQL_NTS(cat), + (SQLCHAR *) schema, SAFE_SQL_NTS(schema), + (SQLCHAR *) name, SAFE_SQL_NTS(name), scope, nullable); @@ -3397,9 +3396,9 @@ PHP_FUNCTION(odbc_statistics) } rc = SQLStatistics(result->stmt, - cat, SAFE_SQL_NTS(cat), - schema, SAFE_SQL_NTS(schema), - name, SAFE_SQL_NTS(name), + (SQLCHAR *) cat, SAFE_SQL_NTS(cat), + (SQLCHAR *) schema, SAFE_SQL_NTS(schema), + (SQLCHAR *) name, SAFE_SQL_NTS(name), unique, reserved); @@ -3461,9 +3460,9 @@ PHP_FUNCTION(odbc_tableprivileges) } rc = SQLTablePrivileges(result->stmt, - cat, SAFE_SQL_NTS(cat), - schema, SAFE_SQL_NTS(schema), - table, SAFE_SQL_NTS(table)); + (SQLCHAR *) cat, SAFE_SQL_NTS(cat), + (SQLCHAR *) schema, SAFE_SQL_NTS(schema), + (SQLCHAR *) table, SAFE_SQL_NTS(table)); if (rc == SQL_ERROR) { odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLTablePrivileges"); From ec08180738cee15032700be465816bbdd3c492dc Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 17 Sep 2020 10:44:26 +0200 Subject: [PATCH 28/67] Enable unixODBC in azure This only checks that it builds though. Closes GH-6150. --- azure/apt.yml | 1 + azure/configure.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/azure/apt.yml b/azure/apt.yml index 703e5753d3c40..bd3ba3308e01b 100644 --- a/azure/apt.yml +++ b/azure/apt.yml @@ -40,6 +40,7 @@ steps: postgresql-contrib \ snmpd \ snmp-mibs-downloader \ + unixodbc-dev \ llvm \ ${{ parameters.packages }} displayName: 'APT' diff --git a/azure/configure.yml b/azure/configure.yml index fd0191528bef6..dc7f754eae425 100644 --- a/azure/configure.yml +++ b/azure/configure.yml @@ -57,6 +57,7 @@ steps: --with-sodium \ --enable-dba \ --with-snmp \ + --with-unixODBC \ --enable-werror \ --with-config-file-path=/etc \ --with-config-file-scan-dir=/etc/php.d From 9f2d03952daf5348d7f18c18e82607979e28df12 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Thu, 17 Sep 2020 13:44:42 +0200 Subject: [PATCH 29/67] Update to PCRE2 10.35 We also backport the fix for bug #79846, and add a test case for the related bug #79363. --- NEWS | 3 + ext/pcre/pcre2lib/pcre2.h | 10 +- ext/pcre/pcre2lib/pcre2_auto_possess.c | 34 +- ext/pcre/pcre2lib/pcre2_chartables.c | 38 +- ext/pcre/pcre2lib/pcre2_compile.c | 194 +- ext/pcre/pcre2lib/pcre2_config.c | 10 +- ext/pcre/pcre2lib/pcre2_dfa_match.c | 38 +- ext/pcre/pcre2lib/pcre2_internal.h | 21 +- ext/pcre/pcre2lib/pcre2_jit_compile.c | 1119 +++-- ext/pcre/pcre2lib/pcre2_jit_misc.c | 5 + ext/pcre/pcre2lib/pcre2_jit_neon_inc.h | 2 +- ext/pcre/pcre2lib/pcre2_jit_simd_inc.h | 130 + ext/pcre/pcre2lib/pcre2_maketables.c | 64 +- ext/pcre/pcre2lib/pcre2_match.c | 160 +- ext/pcre/pcre2lib/pcre2_serialize.c | 16 +- ext/pcre/pcre2lib/pcre2_study.c | 94 +- ext/pcre/pcre2lib/pcre2_substitute.c | 195 +- ext/pcre/pcre2lib/pcre2_tables.c | 352 +- ext/pcre/pcre2lib/pcre2_ucd.c | 3959 +++++++++-------- ext/pcre/pcre2lib/pcre2_ucp.h | 7 +- ext/pcre/pcre2lib/pcre2_valid_utf.c | 4 +- ext/pcre/pcre2lib/sljit/sljitConfig.h | 17 +- ext/pcre/pcre2lib/sljit/sljitConfigInternal.h | 69 +- ext/pcre/pcre2lib/sljit/sljitExecAllocator.c | 17 +- ext/pcre/pcre2lib/sljit/sljitLir.c | 95 +- ext/pcre/pcre2lib/sljit/sljitLir.h | 98 +- ext/pcre/pcre2lib/sljit/sljitNativeARM_32.c | 70 +- ext/pcre/pcre2lib/sljit/sljitNativeARM_64.c | 79 +- .../pcre2lib/sljit/sljitNativeARM_T2_32.c | 58 +- ext/pcre/pcre2lib/sljit/sljitNativeMIPS_32.c | 31 +- ext/pcre/pcre2lib/sljit/sljitNativeMIPS_64.c | 21 +- .../pcre2lib/sljit/sljitNativeMIPS_common.c | 186 +- .../pcre2lib/sljit/sljitNativePPC_common.c | 58 +- .../pcre2lib/sljit/sljitNativeSPARC_common.c | 57 +- .../pcre2lib/sljit/sljitNativeTILEGX_64.c | 44 +- ext/pcre/pcre2lib/sljit/sljitNativeX86_32.c | 50 +- ext/pcre/pcre2lib/sljit/sljitNativeX86_64.c | 28 +- .../pcre2lib/sljit/sljitNativeX86_common.c | 219 +- .../pcre2lib/sljit/sljitProtExecAllocator.c | 66 +- ext/pcre/pcre2lib/sljit/sljitUtils.c | 161 +- ext/pcre/tests/bug79363.phpt | 11 + ext/pcre/tests/bug79846.phpt | 17 + 42 files changed, 4636 insertions(+), 3271 deletions(-) create mode 100644 ext/pcre/tests/bug79363.phpt create mode 100644 ext/pcre/tests/bug79846.phpt diff --git a/NEWS b/NEWS index 36fbfb6736bac..40ecf41b7abcf 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,9 @@ PHP NEWS . Fixed bug #80083 (Optimizer pass 6 removes variables used for ibm_db2 data binding). (Nikita) +- PCRE: + . Updated to PCRE 10.35. (cmb) + 01 Oct 2020, PHP 7.4.11 - Core: diff --git a/ext/pcre/pcre2lib/pcre2.h b/ext/pcre/pcre2lib/pcre2.h index cb9d61a35b14e..4a42a7975a8ed 100644 --- a/ext/pcre/pcre2lib/pcre2.h +++ b/ext/pcre/pcre2lib/pcre2.h @@ -5,7 +5,7 @@ /* This is the public header file for the PCRE library, second API, to be #included by applications that call PCRE2 functions. - Copyright (c) 2016-2019 University of Cambridge + Copyright (c) 2016-2020 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -42,9 +42,9 @@ POSSIBILITY OF SUCH DAMAGE. /* The current PCRE version information. */ #define PCRE2_MAJOR 10 -#define PCRE2_MINOR 34 +#define PCRE2_MINOR 35 #define PCRE2_PRERELEASE -#define PCRE2_DATE 2019-11-21 +#define PCRE2_DATE 2020-05-09 /* When an application links to a PCRE DLL in Windows, the symbols that are imported have to be identified as such. When building PCRE2, the appropriate @@ -181,6 +181,9 @@ pcre2_jit_match() ignores the latter since it bypasses all sanity checks). */ #define PCRE2_SUBSTITUTE_OVERFLOW_LENGTH 0x00001000u /* pcre2_substitute() only */ #define PCRE2_NO_JIT 0x00002000u /* Not for pcre2_dfa_match() */ #define PCRE2_COPY_MATCHED_SUBJECT 0x00004000u +#define PCRE2_SUBSTITUTE_LITERAL 0x00008000u /* pcre2_substitute() only */ +#define PCRE2_SUBSTITUTE_MATCHED 0x00010000u /* pcre2_substitute() only */ +#define PCRE2_SUBSTITUTE_REPLACEMENT_ONLY 0x00020000u /* pcre2_substitute() only */ /* Options for pcre2_pattern_convert(). */ @@ -445,6 +448,7 @@ released, the numbers must not be changed. */ #define PCRE2_CONFIG_HEAPLIMIT 12 #define PCRE2_CONFIG_NEVER_BACKSLASH_C 13 #define PCRE2_CONFIG_COMPILED_WIDTHS 14 +#define PCRE2_CONFIG_TABLES_LENGTH 15 /* Types for code units in patterns and subject strings. */ diff --git a/ext/pcre/pcre2lib/pcre2_auto_possess.c b/ext/pcre/pcre2lib/pcre2_auto_possess.c index 5b95b9b8a8b05..c64cf856d17b4 100644 --- a/ext/pcre/pcre2lib/pcre2_auto_possess.c +++ b/ext/pcre/pcre2lib/pcre2_auto_possess.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2019 University of Cambridge + New API code Copyright (c) 2016-2020 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -292,6 +292,7 @@ possessification, and if so, fills a list with its properties. Arguments: code points to start of expression utf TRUE if in UTF mode + ucp TRUE if in UCP mode fcc points to the case-flipping table list points to output list list[0] will be filled with the opcode @@ -304,7 +305,7 @@ Returns: points to the start of the next opcode if *code is accepted */ static PCRE2_SPTR -get_chr_property_list(PCRE2_SPTR code, BOOL utf, const uint8_t *fcc, +get_chr_property_list(PCRE2_SPTR code, BOOL utf, BOOL ucp, const uint8_t *fcc, uint32_t *list) { PCRE2_UCHAR c = *code; @@ -316,7 +317,8 @@ uint32_t chr; uint32_t *clist_dest; const uint32_t *clist_src; #else -(void)utf; /* Suppress "unused parameter" compiler warning */ +(void)utf; /* Suppress "unused parameter" compiler warnings */ +(void)ucp; #endif list[0] = c; @@ -396,7 +398,7 @@ switch(c) list[2] = chr; #ifdef SUPPORT_UNICODE - if (chr < 128 || (chr < 256 && !utf)) + if (chr < 128 || (chr < 256 && !utf && !ucp)) list[3] = fcc[chr]; else list[3] = UCD_OTHERCASE(chr); @@ -503,6 +505,7 @@ which case the base cannot be possessified. Arguments: code points to the byte code utf TRUE in UTF mode + ucp TRUE in UCP mode cb compile data block base_list the data list of the base opcode base_end the end of the base opcode @@ -512,7 +515,7 @@ Returns: TRUE if the auto-possessification is possible */ static BOOL -compare_opcodes(PCRE2_SPTR code, BOOL utf, const compile_block *cb, +compare_opcodes(PCRE2_SPTR code, BOOL utf, BOOL ucp, const compile_block *cb, const uint32_t *base_list, PCRE2_SPTR base_end, int *rec_limit) { PCRE2_UCHAR c; @@ -651,7 +654,7 @@ for(;;) while (*next_code == OP_ALT) { - if (!compare_opcodes(code, utf, cb, base_list, base_end, rec_limit)) + if (!compare_opcodes(code, utf, ucp, cb, base_list, base_end, rec_limit)) return FALSE; code = next_code + 1 + LINK_SIZE; next_code += GET(next_code, 1); @@ -672,7 +675,8 @@ for(;;) /* The bracket content will be checked by the OP_BRA/OP_CBRA case above. */ next_code += 1 + LINK_SIZE; - if (!compare_opcodes(next_code, utf, cb, base_list, base_end, rec_limit)) + if (!compare_opcodes(next_code, utf, ucp, cb, base_list, base_end, + rec_limit)) return FALSE; code += PRIV(OP_lengths)[c]; @@ -688,7 +692,7 @@ for(;;) /* We now have the next appropriate opcode to compare with the base. Check for a supported opcode, and load its properties. */ - code = get_chr_property_list(code, utf, cb->fcc, list); + code = get_chr_property_list(code, utf, ucp, cb->fcc, list); if (code == NULL) return FALSE; /* Unsupported */ /* If either opcode is a small character list, set pointers for comparing @@ -1100,7 +1104,6 @@ leaving the remainder of the pattern unpossessified. Arguments: code points to start of the byte code - utf TRUE in UTF mode cb compile data block Returns: 0 for success @@ -1108,13 +1111,15 @@ Returns: 0 for success */ int -PRIV(auto_possessify)(PCRE2_UCHAR *code, BOOL utf, const compile_block *cb) +PRIV(auto_possessify)(PCRE2_UCHAR *code, const compile_block *cb) { PCRE2_UCHAR c; PCRE2_SPTR end; PCRE2_UCHAR *repeat_opcode; uint32_t list[8]; int rec_limit = 1000; /* Was 10,000 but clang+ASAN uses a lot of stack. */ +BOOL utf = (cb->external_options & PCRE2_UTF) != 0; +BOOL ucp = (cb->external_options & PCRE2_UCP) != 0; for (;;) { @@ -1126,10 +1131,11 @@ for (;;) { c -= get_repeat_base(c) - OP_STAR; end = (c <= OP_MINUPTO) ? - get_chr_property_list(code, utf, cb->fcc, list) : NULL; + get_chr_property_list(code, utf, ucp, cb->fcc, list) : NULL; list[1] = c == OP_STAR || c == OP_PLUS || c == OP_QUERY || c == OP_UPTO; - if (end != NULL && compare_opcodes(end, utf, cb, list, end, &rec_limit)) + if (end != NULL && compare_opcodes(end, utf, ucp, cb, list, end, + &rec_limit)) { switch(c) { @@ -1181,11 +1187,11 @@ for (;;) if (c >= OP_CRSTAR && c <= OP_CRMINRANGE) { /* end must not be NULL. */ - end = get_chr_property_list(code, utf, cb->fcc, list); + end = get_chr_property_list(code, utf, ucp, cb->fcc, list); list[1] = (c & 1) == 0; - if (compare_opcodes(end, utf, cb, list, end, &rec_limit)) + if (compare_opcodes(end, utf, ucp, cb, list, end, &rec_limit)) { switch (c) { diff --git a/ext/pcre/pcre2lib/pcre2_chartables.c b/ext/pcre/pcre2lib/pcre2_chartables.c index 0e07edb4943d8..861914d1ac3ac 100644 --- a/ext/pcre/pcre2lib/pcre2_chartables.c +++ b/ext/pcre/pcre2lib/pcre2_chartables.c @@ -2,17 +2,21 @@ * Perl-Compatible Regular Expressions * *************************************************/ -/* This file was automatically written by the dftables auxiliary +/* This file was automatically written by the pcre2_dftables auxiliary program. It contains character tables that are used when no external tables are passed to PCRE2 by the application that calls it. The tables are used only for characters whose code values are less than 256. */ -/*The dftables program (which is distributed with PCRE2) can be used to -build alternative versions of this file. This is necessary if you are +/* This set of tables was written in the C locale. */ + +/* The pcre2_ftables program (which is distributed with PCRE2) can be used +to build alternative versions of this file. This is necessary if you are running in an EBCDIC environment, or if you want to default to a different -encoding, for example ISO-8859-1. When dftables is run, it creates these -tables in the current locale. This happens automatically if PCRE2 is -configured with --enable-rebuild-chartables. */ +encoding, for example ISO-8859-1. When pcre2_dftables is run, it creates +these tables in the "C" locale by default. This happens automatically if +PCRE2 is configured with --enable-rebuild-chartables. However, you can run +pcre2_dftables manually with the -L option to build tables using the LC_ALL +locale. */ /* The following #include is present because without it gcc 4.x may remove the array definition from the final binary if PCRE2 is built into a static @@ -102,54 +106,54 @@ const uint8_t PRIV(default_tables)[] = { /* This table contains bit maps for various character classes. Each map is 32 bytes long and the bits run from the least significant end of each byte. The classes that have their own maps are: space, xdigit, digit, upper, lower, word, -graph print, punct, and cntrl. Other classes are built from combinations. */ +graph, print, punct, and cntrl. Other classes are built from combinations. */ - 0x00,0x3e,0x00,0x00,0x01,0x00,0x00,0x00, + 0x00,0x3e,0x00,0x00,0x01,0x00,0x00,0x00, /* space */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03, + 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03, /* xdigit */ 0x7e,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03, + 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03, /* digit */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* upper */ 0xfe,0xff,0xff,0x07,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* lower */ 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x07, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03, + 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03, /* word */ 0xfe,0xff,0xff,0x87,0xfe,0xff,0xff,0x07, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff, + 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff, /* graph */ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff, + 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff, /* print */ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfe,0xff,0x00,0xfc, + 0x00,0x00,0x00,0x00,0xfe,0xff,0x00,0xfc, /* punct */ 0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x78, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00, + 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00, /* cntrl */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, diff --git a/ext/pcre/pcre2lib/pcre2_compile.c b/ext/pcre/pcre2lib/pcre2_compile.c index f2e6b6b5bde42..62393bea74667 100644 --- a/ext/pcre/pcre2lib/pcre2_compile.c +++ b/ext/pcre/pcre2lib/pcre2_compile.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2019 University of Cambridge + New API code Copyright (c) 2016-2020 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -1202,7 +1202,7 @@ in the decoded tables. */ if ((code->flags & PCRE2_DEREF_TABLES) != 0) { - ref_count = (PCRE2_SIZE *)(code->tables + tables_length); + ref_count = (PCRE2_SIZE *)(code->tables + TABLES_LENGTH); (*ref_count)++; } @@ -1232,15 +1232,15 @@ if (newcode == NULL) return NULL; memcpy(newcode, code, code->blocksize); newcode->executable_jit = NULL; -newtables = code->memctl.malloc(tables_length + sizeof(PCRE2_SIZE), +newtables = code->memctl.malloc(TABLES_LENGTH + sizeof(PCRE2_SIZE), code->memctl.memory_data); if (newtables == NULL) { code->memctl.free((void *)newcode, code->memctl.memory_data); return NULL; } -memcpy(newtables, code->tables, tables_length); -ref_count = (PCRE2_SIZE *)(newtables + tables_length); +memcpy(newtables, code->tables, TABLES_LENGTH); +ref_count = (PCRE2_SIZE *)(newtables + TABLES_LENGTH); *ref_count = 1; newcode->tables = newtables; @@ -1270,7 +1270,7 @@ if (code != NULL) be freed when there are no more references to them. The *ref_count should always be > 0. */ - ref_count = (PCRE2_SIZE *)(code->tables + tables_length); + ref_count = (PCRE2_SIZE *)(code->tables + TABLES_LENGTH); if (*ref_count > 0) { (*ref_count)--; @@ -3653,7 +3653,7 @@ while (ptr < ptrend) if (ptr >= ptrend) goto UNCLOSED_PARENTHESIS; /* If ( is not followed by ? it is either a capture or a special verb or an - alpha assertion. */ + alpha assertion or a positive non-atomic lookahead. */ if (*ptr != CHAR_QUESTION_MARK) { @@ -3685,10 +3685,10 @@ while (ptr < ptrend) break; /* Handle "alpha assertions" such as (*pla:...). Most of these are - synonyms for the historical symbolic assertions, but the script run ones - are new. They are distinguished by starting with a lower case letter. - Checking both ends of the alphabet makes this work in all character - codes. */ + synonyms for the historical symbolic assertions, but the script run and + non-atomic lookaround ones are new. They are distinguished by starting + with a lower case letter. Checking both ends of the alphabet makes this + work in all character codes. */ else if (CHMAX_255(c) && (cb->ctypes[c] & ctype_lcletter) != 0) { @@ -3747,9 +3747,7 @@ while (ptr < ptrend) goto POSITIVE_LOOK_AHEAD; case META_LOOKAHEAD_NA: - *parsed_pattern++ = meta; - ptr++; - goto POST_ASSERTION; + goto POSITIVE_NONATOMIC_LOOK_AHEAD; case META_LOOKAHEADNOT: goto NEGATIVE_LOOK_AHEAD; @@ -4438,6 +4436,12 @@ while (ptr < ptrend) ptr++; goto POST_ASSERTION; + case CHAR_ASTERISK: + POSITIVE_NONATOMIC_LOOK_AHEAD: /* Come from (?* */ + *parsed_pattern++ = META_LOOKAHEAD_NA; + ptr++; + goto POST_ASSERTION; + case CHAR_EXCLAMATION_MARK: NEGATIVE_LOOK_AHEAD: /* Come from (*nla: */ *parsed_pattern++ = META_LOOKAHEADNOT; @@ -4447,20 +4451,23 @@ while (ptr < ptrend) /* ---- Lookbehind assertions ---- */ - /* (?< followed by = or ! is a lookbehind assertion. Otherwise (?< is the - start of the name of a capturing group. */ + /* (?< followed by = or ! or * is a lookbehind assertion. Otherwise (?< + is the start of the name of a capturing group. */ case CHAR_LESS_THAN_SIGN: if (ptrend - ptr <= 1 || - (ptr[1] != CHAR_EQUALS_SIGN && ptr[1] != CHAR_EXCLAMATION_MARK)) + (ptr[1] != CHAR_EQUALS_SIGN && + ptr[1] != CHAR_EXCLAMATION_MARK && + ptr[1] != CHAR_ASTERISK)) { terminator = CHAR_GREATER_THAN_SIGN; goto DEFINE_NAME; } *parsed_pattern++ = (ptr[1] == CHAR_EQUALS_SIGN)? - META_LOOKBEHIND : META_LOOKBEHINDNOT; + META_LOOKBEHIND : (ptr[1] == CHAR_EXCLAMATION_MARK)? + META_LOOKBEHINDNOT : META_LOOKBEHIND_NA; - POST_LOOKBEHIND: /* Come from (*plb: (*naplb: and (*nlb: */ + POST_LOOKBEHIND: /* Come from (*plb: (*naplb: and (*nlb: */ *has_lookbehind = TRUE; offset = (PCRE2_SIZE)(ptr - cb->start_pattern - 2); PUTOFFSET(offset, parsed_pattern); @@ -4633,8 +4640,6 @@ while (ptr < ptrend) *parsed_pattern++ = META_KET; } - - if (top_nest == (nest_save *)(cb->start_workspace)) top_nest = NULL; else top_nest--; } @@ -4899,7 +4904,7 @@ range. */ if ((options & PCRE2_CASELESS) != 0) { #ifdef SUPPORT_UNICODE - if ((options & PCRE2_UTF) != 0) + if ((options & (PCRE2_UTF|PCRE2_UCP)) != 0) { int rc; uint32_t oc, od; @@ -5314,7 +5319,8 @@ dynamically as we process the pattern. */ #ifdef SUPPORT_UNICODE BOOL utf = (options & PCRE2_UTF) != 0; -#else /* No UTF support */ +BOOL ucp = (options & PCRE2_UCP) != 0; +#else /* No Unicode support */ BOOL utf = FALSE; #endif @@ -5559,12 +5565,12 @@ for (;; pptr++) zerofirstcu = firstcu; zerofirstcuflags = firstcuflags; - /* For caseless UTF mode, check whether this character has more than - one other case. If so, generate a special OP_NOTPROP item instead of + /* For caseless UTF or UCP mode, check whether this character has more + than one other case. If so, generate a special OP_NOTPROP item instead of OP_NOTI. */ #ifdef SUPPORT_UNICODE - if (utf && (options & PCRE2_CASELESS) != 0 && + if ((utf||ucp) && (options & PCRE2_CASELESS) != 0 && (d = UCD_CASESET(c)) != 0) { *code++ = OP_NOTPROP; @@ -5597,7 +5603,7 @@ for (;; pptr++) uint32_t d; #ifdef SUPPORT_UNICODE - if (utf && c > 127) d = UCD_OTHERCASE(c); else + if ((utf || ucp) && c > 127) d = UCD_OTHERCASE(c); else #endif { #if PCRE2_CODE_UNIT_WIDTH != 8 @@ -6671,23 +6677,11 @@ for (;; pptr++) } /* For a back reference, update the back reference map and the - maximum back reference. Then, for each group, we must check to - see if it is recursive, that is, it is inside the group that it - references. A flag is set so that the group can be made atomic. - */ + maximum back reference. */ cb->backref_map |= (groupnumber < 32)? (1u << groupnumber) : 1; if (groupnumber > cb->top_backref) cb->top_backref = groupnumber; - - for (oc = cb->open_caps; oc != NULL; oc = oc->next) - { - if (oc->number == groupnumber) - { - oc->flag = TRUE; - break; - } - } } } @@ -7081,15 +7075,18 @@ for (;; pptr++) previous[GET(previous, 1)] != OP_ALT) goto END_REPEAT; - /* There is no sense in actually repeating assertions. The only - potential use of repetition is in cases when the assertion is optional. - Therefore, if the minimum is greater than zero, just ignore the repeat. - If the maximum is not zero or one, set it to 1. */ + /* Perl allows all assertions to be quantified, and when they contain + capturing parentheses and/or are optional there are potential uses for + this feature. PCRE2 used to force the maximum quantifier to 1 on the + invalid grounds that further repetition was never useful. This was + always a bit pointless, since an assertion could be wrapped with a + repeated group to achieve the effect. General repetition is now + permitted, but if the maximum is unlimited it is set to one more than + the minimum. */ if (op_previous < OP_ONCE) /* Assertion */ { - if (repeat_min > 0) goto END_REPEAT; - if (repeat_max > 1) repeat_max = 1; + if (repeat_max == REPEAT_UNLIMITED) repeat_max = repeat_min + 1; } /* The case of a zero minimum is special because of the need to stick @@ -7682,19 +7679,6 @@ for (;; pptr++) cb->backref_map |= (meta_arg < 32)? (1u << meta_arg) : 1; if (meta_arg > cb->top_backref) cb->top_backref = meta_arg; - - /* Check to see if this back reference is recursive, that it, it - is inside the group that it references. A flag is set so that the - group can be made atomic. */ - - for (oc = cb->open_caps; oc != NULL; oc = oc->next) - { - if (oc->number == meta_arg) - { - oc->flag = TRUE; - break; - } - } break; @@ -7840,11 +7824,12 @@ for (;; pptr++) NORMAL_CHAR_SET: /* Character is already in meta */ matched_char = TRUE; - /* For caseless UTF mode, check whether this character has more than one - other case. If so, generate a special OP_PROP item instead of OP_CHARI. */ + /* For caseless UTF or UCP mode, check whether this character has more than + one other case. If so, generate a special OP_PROP item instead of OP_CHARI. + */ #ifdef SUPPORT_UNICODE - if (utf && (options & PCRE2_CASELESS) != 0) + if ((utf||ucp) && (options & PCRE2_CASELESS) != 0) { uint32_t caseset = UCD_CASESET(meta); if (caseset != 0) @@ -8053,7 +8038,6 @@ if (*code == OP_CBRA) capnumber = GET2(code, 1 + LINK_SIZE); capitem.number = capnumber; capitem.next = cb->open_caps; - capitem.flag = FALSE; capitem.assert_depth = cb->assert_depth; cb->open_caps = &capitem; } @@ -8182,26 +8166,9 @@ for (;;) PUT(code, 1, (int)(code - start_bracket)); code += 1 + LINK_SIZE; - /* If it was a capturing subpattern, check to see if it contained any - recursive back references. If so, we must wrap it in atomic brackets. In - any event, remove the block from the chain. */ + /* If it was a capturing subpattern, remove the block from the chain. */ - if (capnumber > 0) - { - if (cb->open_caps->flag) - { - (void)memmove(start_bracket + 1 + LINK_SIZE, start_bracket, - CU2BYTES(code - start_bracket)); - *start_bracket = OP_ONCE; - code += 1 + LINK_SIZE; - PUT(start_bracket, 1, (int)(code - start_bracket)); - *code = OP_KET; - PUT(code, 1, (int)(code - start_bracket)); - code += 1 + LINK_SIZE; - length += 2 + 2*LINK_SIZE; - } - cb->open_caps = cb->open_caps->next; - } + if (capnumber > 0) cb->open_caps = cb->open_caps->next; /* Set values to pass back */ @@ -8836,9 +8803,10 @@ memset(slot + IMM2_SIZE + length, 0, /* This function is called to skip parts of the parsed pattern when finding the length of a lookbehind branch. It is called after (*ACCEPT) and (*FAIL) to find -the end of the branch, it is called to skip over an internal lookaround, and it -is also called to skip to the end of a class, during which it will never -encounter nested groups (but there's no need to have special code for that). +the end of the branch, it is called to skip over an internal lookaround or +(DEFINE) group, and it is also called to skip to the end of a class, during +which it will never encounter nested groups (but there's no need to have +special code for that). When called to find the end of a branch or group, pptr must point to the first meta code inside the branch, not the branch-starting code. In other cases it @@ -9316,14 +9284,21 @@ for (;; pptr++) itemlength = grouplength; break; - /* Check nested groups - advance past the initial data for each type and - then seek a fixed length with get_grouplength(). */ + /* A (DEFINE) group is never obeyed inline and so it does not contribute to + the length of this branch. Skip from the following item to the next + unpaired ket. */ + + case META_COND_DEFINE: + pptr = parsed_skip(pptr + 1, PSKIP_KET); + break; + + /* Check other nested groups - advance past the initial data for each type + and then seek a fixed length with get_grouplength(). */ case META_COND_NAME: case META_COND_NUMBER: case META_COND_RNAME: case META_COND_RNUMBER: - case META_COND_DEFINE: pptr += 2 + SIZEOFFSET; goto CHECK_GROUP; @@ -9580,6 +9555,10 @@ for (; *pptr != META_END; pptr++) break; case META_COND_DEFINE: + pptr += SIZEOFFSET; + nestlevel++; + break; + case META_COND_NAME: case META_COND_NUMBER: case META_COND_RNAME: @@ -9660,6 +9639,7 @@ pcre2_compile(PCRE2_SPTR pattern, PCRE2_SIZE patlen, uint32_t options, int *errorptr, PCRE2_SIZE *erroroffset, pcre2_compile_context *ccontext) { BOOL utf; /* Set TRUE for UTF mode */ +BOOL ucp; /* Set TRUE for UCP mode */ BOOL has_lookbehind = FALSE; /* Set TRUE if a lookbehind is found */ BOOL zero_terminated; /* Set TRUE for zero-terminated pattern */ pcre2_real_code *re = NULL; /* What we will return */ @@ -9947,8 +9927,8 @@ if (utf) /* Check UCP lockout. */ -if ((cb.external_options & (PCRE2_UCP|PCRE2_NEVER_UCP)) == - (PCRE2_UCP|PCRE2_NEVER_UCP)) +ucp = (cb.external_options & PCRE2_UCP) != 0; +if (ucp && (cb.external_options & PCRE2_NEVER_UCP) != 0) { errorcode = ERR75; goto HAD_EARLY_ERROR; @@ -10324,7 +10304,7 @@ function call. */ if (errorcode == 0 && (re->overall_options & PCRE2_NO_AUTO_POSSESS) == 0) { PCRE2_UCHAR *temp = (PCRE2_UCHAR *)codestart; - if (PRIV(auto_possessify)(temp, utf, &cb) != 0) errorcode = ERR80; + if (PRIV(auto_possessify)(temp, &cb) != 0) errorcode = ERR80; } /* Failed to compile, or error while post-processing. */ @@ -10372,21 +10352,25 @@ if ((re->overall_options & PCRE2_NO_START_OPTIMIZE) == 0) if ((firstcuflags & REQ_CASELESS) != 0) { - if (firstcu < 128 || (!utf && firstcu < 255)) + if (firstcu < 128 || (!utf && !ucp && firstcu < 255)) { if (cb.fcc[firstcu] != firstcu) re->flags |= PCRE2_FIRSTCASELESS; } - /* The first code unit is > 128 in UTF mode, or > 255 otherwise. In - 8-bit UTF mode, codepoints in the range 128-255 are introductory code - points and cannot have another case. In 16-bit and 32-bit modes, we can - check wide characters when UTF (and therefore UCP) is supported. */ + /* The first code unit is > 128 in UTF or UCP mode, or > 255 otherwise. + In 8-bit UTF mode, codepoints in the range 128-255 are introductory code + points and cannot have another case, but if UCP is set they may do. */ -#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 8 - else if (firstcu <= MAX_UTF_CODE_POINT && +#ifdef SUPPORT_UNICODE +#if PCRE2_CODE_UNIT_WIDTH == 8 + else if (ucp && !utf && UCD_OTHERCASE(firstcu) != firstcu) + re->flags |= PCRE2_FIRSTCASELESS; +#else + else if ((utf || ucp) && firstcu <= MAX_UTF_CODE_POINT && UCD_OTHERCASE(firstcu) != firstcu) re->flags |= PCRE2_FIRSTCASELESS; #endif +#endif /* SUPPORT_UNICODE */ } } @@ -10435,14 +10419,20 @@ if ((re->overall_options & PCRE2_NO_START_OPTIMIZE) == 0) if ((reqcuflags & REQ_CASELESS) != 0) { - if (reqcu < 128 || (!utf && reqcu < 255)) + if (reqcu < 128 || (!utf && !ucp && reqcu < 255)) { if (cb.fcc[reqcu] != reqcu) re->flags |= PCRE2_LASTCASELESS; } -#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 8 - else if (reqcu <= MAX_UTF_CODE_POINT && UCD_OTHERCASE(reqcu) != reqcu) - re->flags |= PCRE2_LASTCASELESS; +#ifdef SUPPORT_UNICODE +#if PCRE2_CODE_UNIT_WIDTH == 8 + else if (ucp && !utf && UCD_OTHERCASE(reqcu) != reqcu) + re->flags |= PCRE2_LASTCASELESS; +#else + else if ((utf || ucp) && reqcu <= MAX_UTF_CODE_POINT && + UCD_OTHERCASE(reqcu) != reqcu) + re->flags |= PCRE2_LASTCASELESS; #endif +#endif /* SUPPORT_UNICODE */ } } } diff --git a/ext/pcre/pcre2lib/pcre2_config.c b/ext/pcre/pcre2lib/pcre2_config.c index e487b1022070a..5ef103caf7925 100644 --- a/ext/pcre/pcre2lib/pcre2_config.c +++ b/ext/pcre/pcre2lib/pcre2_config.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2017 University of Cambridge + New API code Copyright (c) 2016-2020 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -43,7 +43,8 @@ POSSIBILITY OF SUCH DAMAGE. #endif /* Save the configured link size, which is in bytes. In 16-bit and 32-bit modes -its value gets changed by pcre2_internal.h to be in code units. */ +its value gets changed by pcre2_intmodedep.h (included by pcre2_internal.h) to +be in code units. */ static int configured_link_size = LINK_SIZE; @@ -94,6 +95,7 @@ if (where == NULL) /* Requests a length */ case PCRE2_CONFIG_NEWLINE: case PCRE2_CONFIG_PARENSLIMIT: case PCRE2_CONFIG_STACKRECURSE: /* Obsolete */ + case PCRE2_CONFIG_TABLES_LENGTH: case PCRE2_CONFIG_UNICODE: return sizeof(uint32_t); @@ -191,6 +193,10 @@ switch (what) *((uint32_t *)where) = 0; break; + case PCRE2_CONFIG_TABLES_LENGTH: + *((uint32_t *)where) = TABLES_LENGTH; + break; + case PCRE2_CONFIG_UNICODE_VERSION: { #if defined SUPPORT_UNICODE diff --git a/ext/pcre/pcre2lib/pcre2_dfa_match.c b/ext/pcre/pcre2lib/pcre2_dfa_match.c index 7d8ffe8a3ec35..625695b7cb0ed 100644 --- a/ext/pcre/pcre2lib/pcre2_dfa_match.c +++ b/ext/pcre/pcre2lib/pcre2_dfa_match.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2019 University of Cambridge + New API code Copyright (c) 2016-2020 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -548,6 +548,7 @@ PCRE2_SPTR start_code = mb->start_code; #ifdef SUPPORT_UNICODE BOOL utf = (mb->poptions & PCRE2_UTF) != 0; +BOOL utf_or_ucp = utf || (mb->poptions & PCRE2_UCP) != 0; #else BOOL utf = FALSE; #endif @@ -2190,7 +2191,7 @@ for (;;) if (clen == 0) break; #ifdef SUPPORT_UNICODE - if (utf) + if (utf_or_ucp) { if (c == d) { ADD_NEW(state_offset + dlen + 1, 0); } else { @@ -2204,7 +2205,7 @@ for (;;) } else #endif /* SUPPORT_UNICODE */ - /* Not UTF mode */ + /* Not UTF or UCP mode */ { if (TABLE_GET(c, lcc, c) == TABLE_GET(d, lcc, d)) { ADD_NEW(state_offset + 2, 0); } @@ -2339,7 +2340,7 @@ for (;;) { uint32_t otherd; #ifdef SUPPORT_UNICODE - if (utf && d >= 128) + if (utf_or_ucp && d >= 128) otherd = UCD_OTHERCASE(d); else #endif /* SUPPORT_UNICODE */ @@ -2374,7 +2375,7 @@ for (;;) if (caseless) { #ifdef SUPPORT_UNICODE - if (utf && d >= 128) + if (utf_or_ucp && d >= 128) otherd = UCD_OTHERCASE(d); else #endif /* SUPPORT_UNICODE */ @@ -2417,7 +2418,7 @@ for (;;) if (caseless) { #ifdef SUPPORT_UNICODE - if (utf && d >= 128) + if (utf_or_ucp && d >= 128) otherd = UCD_OTHERCASE(d); else #endif /* SUPPORT_UNICODE */ @@ -2458,7 +2459,7 @@ for (;;) if (caseless) { #ifdef SUPPORT_UNICODE - if (utf && d >= 128) + if (utf_or_ucp && d >= 128) otherd = UCD_OTHERCASE(d); else #endif /* SUPPORT_UNICODE */ @@ -2491,7 +2492,7 @@ for (;;) if (caseless) { #ifdef SUPPORT_UNICODE - if (utf && d >= 128) + if (utf_or_ucp && d >= 128) otherd = UCD_OTHERCASE(d); else #endif /* SUPPORT_UNICODE */ @@ -2531,7 +2532,7 @@ for (;;) if (caseless) { #ifdef SUPPORT_UNICODE - if (utf && d >= 128) + if (utf_or_ucp && d >= 128) otherd = UCD_OTHERCASE(d); else #endif /* SUPPORT_UNICODE */ @@ -3526,10 +3527,15 @@ if ((re->flags & PCRE2_FIRSTSET) != 0) if ((re->flags & PCRE2_FIRSTCASELESS) != 0) { first_cu2 = TABLE_GET(first_cu, mb->tables + fcc_offset, first_cu); -#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 8 - if (utf && first_cu > 127) +#ifdef SUPPORT_UNICODE +#if PCRE2_CODE_UNIT_WIDTH == 8 + if (first_cu > 127 && !utf && (re->overall_options & PCRE2_UCP) != 0) + first_cu2 = (PCRE2_UCHAR)UCD_OTHERCASE(first_cu); +#else + if (first_cu > 127 && (utf || (re->overall_options & PCRE2_UCP) != 0)) first_cu2 = (PCRE2_UCHAR)UCD_OTHERCASE(first_cu); #endif +#endif /* SUPPORT_UNICODE */ } } else @@ -3545,9 +3551,15 @@ if ((re->flags & PCRE2_LASTSET) != 0) if ((re->flags & PCRE2_LASTCASELESS) != 0) { req_cu2 = TABLE_GET(req_cu, mb->tables + fcc_offset, req_cu); -#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 8 - if (utf && req_cu > 127) req_cu2 = (PCRE2_UCHAR)UCD_OTHERCASE(req_cu); +#ifdef SUPPORT_UNICODE +#if PCRE2_CODE_UNIT_WIDTH == 8 + if (req_cu > 127 && !utf && (re->overall_options & PCRE2_UCP) != 0) + req_cu2 = (PCRE2_UCHAR)UCD_OTHERCASE(req_cu); +#else + if (req_cu > 127 && (utf || (re->overall_options & PCRE2_UCP) != 0)) + req_cu2 = (PCRE2_UCHAR)UCD_OTHERCASE(req_cu); #endif +#endif /* SUPPORT_UNICODE */ } } diff --git a/ext/pcre/pcre2lib/pcre2_internal.h b/ext/pcre/pcre2lib/pcre2_internal.h index fe8ffe5c80db0..d8fad1e93ba5f 100644 --- a/ext/pcre/pcre2lib/pcre2_internal.h +++ b/ext/pcre/pcre2lib/pcre2_internal.h @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2019 University of Cambridge + New API code Copyright (c) 2016-2020 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -76,6 +76,17 @@ typedef int BOOL; #include #endif +/* -ftrivial-auto-var-init support supports initializing all local variables +to avoid some classes of bug, but this can cause an unacceptable slowdown +for large on-stack arrays in hot functions. This macro lets us annotate +such arrays. */ + +#ifdef HAVE_ATTRIBUTE_UNINITIALIZED +#define PCRE2_KEEP_UNINITIALIZED __attribute__((uninitialized)) +#else +#define PCRE2_KEEP_UNINITIALIZED +#endif + /* Older versions of MSVC lack snprintf(). This define allows for warning/error-free compilation and testing with MSVC compilers back to at least MSVC 10/2010. Except for VC6 (which is missing some fundamentals and fails). */ @@ -579,7 +590,7 @@ total length of the tables. */ #define fcc_offset 256 /* Flip case */ #define cbits_offset 512 /* Character classes */ #define ctypes_offset (cbits_offset + cbit_length) /* Character types */ -#define tables_length (ctypes_offset + 256) +#define TABLES_LENGTH (ctypes_offset + 256) /* -------------------- Character and string names ------------------------ */ @@ -1759,13 +1770,11 @@ typedef struct pcre2_memctl { /* Structure for building a chain of open capturing subpatterns during compiling, so that instructions to close them can be compiled when (*ACCEPT) is -encountered. This is also used to identify subpatterns that contain recursive -back references to themselves, so that they can be made atomic. */ +encountered. */ typedef struct open_capitem { struct open_capitem *next; /* Chain link */ uint16_t number; /* Capture number */ - uint16_t flag; /* Set TRUE if recursive back ref */ uint16_t assert_depth; /* Assertion depth when opened */ } open_capitem; @@ -1954,7 +1963,7 @@ is available. */ #define _pcre2_was_newline PCRE2_SUFFIX(_pcre2_was_newline_) #define _pcre2_xclass PCRE2_SUFFIX(_pcre2_xclass_) -extern int _pcre2_auto_possessify(PCRE2_UCHAR *, BOOL, +extern int _pcre2_auto_possessify(PCRE2_UCHAR *, const compile_block *); extern int _pcre2_check_escape(PCRE2_SPTR *, PCRE2_SPTR, uint32_t *, int *, uint32_t, uint32_t, BOOL, compile_block *); diff --git a/ext/pcre/pcre2lib/pcre2_jit_compile.c b/ext/pcre/pcre2lib/pcre2_jit_compile.c index f564127c2ae24..8e51576ac68de 100644 --- a/ext/pcre/pcre2lib/pcre2_jit_compile.c +++ b/ext/pcre/pcre2lib/pcre2_jit_compile.c @@ -223,6 +223,12 @@ enum control_types { type_then_trap = 1 }; +enum early_fail_types { + type_skip = 0, + type_fail = 1, + type_fail_range = 2 +}; + typedef int (SLJIT_FUNC *jit_function)(jit_arguments *args); /* The following structure is the key data type for the recursive @@ -405,8 +411,8 @@ typedef struct compiler_common { /* Fast forward skipping byte code pointer. */ PCRE2_SPTR fast_forward_bc_ptr; /* Locals used by fast fail optimization. */ - sljit_s32 fast_fail_start_ptr; - sljit_s32 fast_fail_end_ptr; + sljit_s32 early_fail_start_ptr; + sljit_s32 early_fail_end_ptr; /* Flipped and lower case tables. */ const sljit_u8 *fcc; @@ -476,7 +482,7 @@ typedef struct compiler_common { #ifdef SUPPORT_UNICODE BOOL utf; BOOL invalid_utf; - BOOL use_ucp; + BOOL ucp; /* Points to saving area for iref. */ sljit_s32 iref_ptr; jump_list *getucd; @@ -607,6 +613,8 @@ the start pointers when the end of the capturing group has not yet reached. */ sljit_emit_op1(compiler, (op), (dst), (dstw), (src), (srcw)) #define OP2(op, dst, dstw, src1, src1w, src2, src2w) \ sljit_emit_op2(compiler, (op), (dst), (dstw), (src1), (src1w), (src2), (src2w)) +#define OP_SRC(op, src, srcw) \ + sljit_emit_op_src(compiler, (op), (src), (srcw)) #define LABEL() \ sljit_emit_label(compiler) #define JUMP(type) \ @@ -823,7 +831,7 @@ the start pointers when the end of the capturing group has not yet reached. */ static PCRE2_SPTR bracketend(PCRE2_SPTR cc) { -SLJIT_ASSERT((*cc >= OP_ASSERT && *cc <= OP_ASSERTBACK_NOT) || (*cc >= OP_ONCE && *cc <= OP_SCOND)); +SLJIT_ASSERT((*cc >= OP_ASSERT && *cc <= OP_ASSERTBACK_NA) || (*cc >= OP_ONCE && *cc <= OP_SCOND)); do cc += GET(cc, 1); while (*cc == OP_ALT); SLJIT_ASSERT(*cc >= OP_KET && *cc <= OP_KETRPOS); cc += 1 + LINK_SIZE; @@ -833,7 +841,7 @@ return cc; static int no_alternatives(PCRE2_SPTR cc) { int count = 0; -SLJIT_ASSERT((*cc >= OP_ASSERT && *cc <= OP_ASSERTBACK_NOT) || (*cc >= OP_ONCE && *cc <= OP_SCOND)); +SLJIT_ASSERT((*cc >= OP_ASSERT && *cc <= OP_ASSERTBACK_NA) || (*cc >= OP_ONCE && *cc <= OP_SCOND)); do { cc += GET(cc, 1); @@ -918,6 +926,8 @@ switch(*cc) case OP_ASSERT_NOT: case OP_ASSERTBACK: case OP_ASSERTBACK_NOT: + case OP_ASSERT_NA: + case OP_ASSERTBACK_NA: case OP_ONCE: case OP_SCRIPT_RUN: case OP_BRA: @@ -1050,8 +1060,7 @@ switch(*cc) return cc + 1 + 2 + cc[1]; default: - /* Unsupported opcodes: OP_ASSERT_NA and OP_ASSERTBACK_NA */ - /* SLJIT_UNREACHABLE(); */ + SLJIT_UNREACHABLE(); return NULL; } } @@ -1061,6 +1070,7 @@ static BOOL check_opcode_types(compiler_common *common, PCRE2_SPTR cc, PCRE2_SPT int count; PCRE2_SPTR slot; PCRE2_SPTR assert_back_end = cc - 1; +PCRE2_SPTR assert_na_end = cc - 1; /* Calculate important variables (like stack size) and checks whether all opcodes are supported. */ while (cc < ccend) @@ -1087,6 +1097,14 @@ while (cc < ccend) cc += 1 + IMM2_SIZE; break; + case OP_ASSERT_NA: + case OP_ASSERTBACK_NA: + slot = bracketend(cc); + if (slot > assert_na_end) + assert_na_end = slot; + cc += 1 + LINK_SIZE; + break; + case OP_CBRAPOS: case OP_SCBRAPOS: common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] = 0; @@ -1154,6 +1172,9 @@ while (cc < ccend) case OP_COMMIT_ARG: case OP_PRUNE_ARG: + if (cc < assert_na_end) + return FALSE; + /* Fall through */ case OP_MARK: if (common->mark_ptr == 0) { @@ -1172,6 +1193,8 @@ while (cc < ccend) case OP_SKIP: if (cc < assert_back_end) common->has_skip_in_assert_back = TRUE; + if (cc < assert_na_end) + return FALSE; cc += 1; break; @@ -1180,9 +1203,19 @@ while (cc < ccend) common->has_skip_arg = TRUE; if (cc < assert_back_end) common->has_skip_in_assert_back = TRUE; + if (cc < assert_na_end) + return FALSE; cc += 1 + 2 + cc[1]; break; + case OP_PRUNE: + case OP_COMMIT: + case OP_ASSERT_ACCEPT: + if (cc < assert_na_end) + return FALSE; + cc++; + break; + default: cc = next_opcode(common, cc); if (cc == NULL) @@ -1193,183 +1226,355 @@ while (cc < ccend) return TRUE; } -static BOOL is_accelerated_repeat(PCRE2_SPTR cc) +#define EARLY_FAIL_ENHANCE_MAX (1 + 1) + +/* +start: + 0 - skip / early fail allowed + 1 - only early fail with range allowed + >1 - (start - 1) early fail is processed + +return: current number of iterators enhanced with fast fail +*/ +static int detect_early_fail(compiler_common *common, PCRE2_SPTR cc, int *private_data_start, sljit_s32 depth, int start) { -switch(*cc) - { - case OP_TYPESTAR: - case OP_TYPEMINSTAR: - case OP_TYPEPLUS: - case OP_TYPEMINPLUS: - case OP_TYPEPOSSTAR: - case OP_TYPEPOSPLUS: - return (cc[1] != OP_ANYNL && cc[1] != OP_EXTUNI); +PCRE2_SPTR next_alt; +PCRE2_SPTR end; +PCRE2_SPTR accelerated_start; +int result = 0; +int count; +BOOL fast_forward_allowed = TRUE; - case OP_STAR: - case OP_MINSTAR: - case OP_PLUS: - case OP_MINPLUS: - case OP_POSSTAR: - case OP_POSPLUS: +SLJIT_ASSERT(*cc == OP_ONCE || *cc == OP_BRA || *cc == OP_CBRA); +SLJIT_ASSERT(*cc != OP_CBRA || common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] != 0); +SLJIT_ASSERT(start < EARLY_FAIL_ENHANCE_MAX); - case OP_STARI: - case OP_MINSTARI: - case OP_PLUSI: - case OP_MINPLUSI: - case OP_POSSTARI: - case OP_POSPLUSI: +do + { + count = start; + next_alt = cc + GET(cc, 1); + cc += 1 + LINK_SIZE + ((*cc == OP_CBRA) ? IMM2_SIZE : 0); - case OP_NOTSTAR: - case OP_NOTMINSTAR: - case OP_NOTPLUS: - case OP_NOTMINPLUS: - case OP_NOTPOSSTAR: - case OP_NOTPOSPLUS: + while (TRUE) + { + accelerated_start = NULL; - case OP_NOTSTARI: - case OP_NOTMINSTARI: - case OP_NOTPLUSI: - case OP_NOTMINPLUSI: - case OP_NOTPOSSTARI: - case OP_NOTPOSPLUSI: - return TRUE; + switch(*cc) + { + case OP_SOD: + case OP_SOM: + case OP_SET_SOM: + case OP_NOT_WORD_BOUNDARY: + case OP_WORD_BOUNDARY: + case OP_EODN: + case OP_EOD: + case OP_CIRC: + case OP_CIRCM: + case OP_DOLL: + case OP_DOLLM: + /* Zero width assertions. */ + cc++; + continue; + + case OP_NOT_DIGIT: + case OP_DIGIT: + case OP_NOT_WHITESPACE: + case OP_WHITESPACE: + case OP_NOT_WORDCHAR: + case OP_WORDCHAR: + case OP_ANY: + case OP_ALLANY: + case OP_ANYBYTE: + case OP_NOT_HSPACE: + case OP_HSPACE: + case OP_NOT_VSPACE: + case OP_VSPACE: + fast_forward_allowed = FALSE; + cc++; + continue; - case OP_CLASS: - case OP_NCLASS: -#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH != 8 - case OP_XCLASS: - cc += (*cc == OP_XCLASS) ? GET(cc, 1) : (int)(1 + (32 / sizeof(PCRE2_UCHAR))); -#else - cc += (1 + (32 / sizeof(PCRE2_UCHAR))); + case OP_ANYNL: + case OP_EXTUNI: + fast_forward_allowed = FALSE; + if (count == 0) + count = 1; + cc++; + continue; + + case OP_NOTPROP: + case OP_PROP: + fast_forward_allowed = FALSE; + cc += 1 + 2; + continue; + + case OP_CHAR: + case OP_CHARI: + case OP_NOT: + case OP_NOTI: + fast_forward_allowed = FALSE; + cc += 2; +#ifdef SUPPORT_UNICODE + if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); #endif + continue; - switch(*cc) - { - case OP_CRSTAR: - case OP_CRMINSTAR: - case OP_CRPLUS: - case OP_CRMINPLUS: - case OP_CRPOSSTAR: - case OP_CRPOSPLUS: - return TRUE; - } - break; - } -return FALSE; -} + case OP_TYPESTAR: + case OP_TYPEMINSTAR: + case OP_TYPEPLUS: + case OP_TYPEMINPLUS: + case OP_TYPEPOSSTAR: + case OP_TYPEPOSPLUS: + /* The type or prop opcode is skipped in the next iteration. */ + cc += 1; -static SLJIT_INLINE BOOL detect_fast_forward_skip(compiler_common *common, int *private_data_start) -{ -PCRE2_SPTR cc = common->start; -PCRE2_SPTR end; + if (cc[0] != OP_ANYNL && cc[0] != OP_EXTUNI) + { + accelerated_start = cc - 1; + break; + } -/* Skip not repeated brackets. */ -while (TRUE) - { - switch(*cc) - { - case OP_SOD: - case OP_SOM: - case OP_SET_SOM: - case OP_NOT_WORD_BOUNDARY: - case OP_WORD_BOUNDARY: - case OP_EODN: - case OP_EOD: - case OP_CIRC: - case OP_CIRCM: - case OP_DOLL: - case OP_DOLLM: - /* Zero width assertions. */ - cc++; - continue; - } + if (count == 0) + count = 1; + fast_forward_allowed = FALSE; + continue; - if (*cc != OP_BRA && *cc != OP_CBRA) - break; + case OP_TYPEUPTO: + case OP_TYPEMINUPTO: + case OP_TYPEEXACT: + case OP_TYPEPOSUPTO: + cc += IMM2_SIZE; + /* Fall through */ + + case OP_TYPEQUERY: + case OP_TYPEMINQUERY: + case OP_TYPEPOSQUERY: + /* The type or prop opcode is skipped in the next iteration. */ + fast_forward_allowed = FALSE; + if (count == 0) + count = 1; + cc += 1; + continue; + + case OP_STAR: + case OP_MINSTAR: + case OP_PLUS: + case OP_MINPLUS: + case OP_POSSTAR: + case OP_POSPLUS: + + case OP_STARI: + case OP_MINSTARI: + case OP_PLUSI: + case OP_MINPLUSI: + case OP_POSSTARI: + case OP_POSPLUSI: + + case OP_NOTSTAR: + case OP_NOTMINSTAR: + case OP_NOTPLUS: + case OP_NOTMINPLUS: + case OP_NOTPOSSTAR: + case OP_NOTPOSPLUS: + + case OP_NOTSTARI: + case OP_NOTMINSTARI: + case OP_NOTPLUSI: + case OP_NOTMINPLUSI: + case OP_NOTPOSSTARI: + case OP_NOTPOSPLUSI: + accelerated_start = cc; + cc += 2; +#ifdef SUPPORT_UNICODE + if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); +#endif + break; - end = cc + GET(cc, 1); - if (*end != OP_KET || PRIVATE_DATA(end) != 0) - return FALSE; - if (*cc == OP_CBRA) - { - if (common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0) - return FALSE; - cc += IMM2_SIZE; - } - cc += 1 + LINK_SIZE; - } + case OP_UPTO: + case OP_MINUPTO: + case OP_EXACT: + case OP_POSUPTO: + case OP_UPTOI: + case OP_MINUPTOI: + case OP_EXACTI: + case OP_POSUPTOI: + case OP_NOTUPTO: + case OP_NOTMINUPTO: + case OP_NOTEXACT: + case OP_NOTPOSUPTO: + case OP_NOTUPTOI: + case OP_NOTMINUPTOI: + case OP_NOTEXACTI: + case OP_NOTPOSUPTOI: + cc += IMM2_SIZE; + /* Fall through */ + + case OP_QUERY: + case OP_MINQUERY: + case OP_POSQUERY: + case OP_QUERYI: + case OP_MINQUERYI: + case OP_POSQUERYI: + case OP_NOTQUERY: + case OP_NOTMINQUERY: + case OP_NOTPOSQUERY: + case OP_NOTQUERYI: + case OP_NOTMINQUERYI: + case OP_NOTPOSQUERYI: + fast_forward_allowed = FALSE; + if (count == 0) + count = 1; + cc += 2; +#ifdef SUPPORT_UNICODE + if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); +#endif + continue; -if (is_accelerated_repeat(cc)) - { - common->fast_forward_bc_ptr = cc; - common->private_data_ptrs[(cc + 1) - common->start] = *private_data_start; - *private_data_start += sizeof(sljit_sw); - return TRUE; - } -return FALSE; -} + case OP_CLASS: + case OP_NCLASS: +#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH != 8 + case OP_XCLASS: + accelerated_start = cc; + cc += ((*cc == OP_XCLASS) ? GET(cc, 1) : (unsigned int)(1 + (32 / sizeof(PCRE2_UCHAR)))); +#else + accelerated_start = cc; + cc += (1 + (32 / sizeof(PCRE2_UCHAR))); +#endif -static SLJIT_INLINE void detect_fast_fail(compiler_common *common, PCRE2_SPTR cc, int *private_data_start, sljit_s32 depth) -{ - PCRE2_SPTR next_alt; + switch (*cc) + { + case OP_CRSTAR: + case OP_CRMINSTAR: + case OP_CRPLUS: + case OP_CRMINPLUS: + case OP_CRPOSSTAR: + case OP_CRPOSPLUS: + cc++; + break; - SLJIT_ASSERT(*cc == OP_BRA || *cc == OP_CBRA); + case OP_CRRANGE: + case OP_CRMINRANGE: + case OP_CRPOSRANGE: + cc += 2 * IMM2_SIZE; + /* Fall through */ + case OP_CRQUERY: + case OP_CRMINQUERY: + case OP_CRPOSQUERY: + cc++; + if (count == 0) + count = 1; + /* Fall through */ + default: + accelerated_start = NULL; + fast_forward_allowed = FALSE; + continue; + } + break; - if (*cc == OP_CBRA && common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0) - return; + case OP_ONCE: + case OP_BRA: + case OP_CBRA: + end = cc + GET(cc, 1); - next_alt = bracketend(cc) - (1 + LINK_SIZE); - if (*next_alt != OP_KET || PRIVATE_DATA(next_alt) != 0) - return; + if (*end == OP_KET && PRIVATE_DATA(end) == 0) + { + if (*cc == OP_CBRA) + { + if (common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0) + break; + cc += IMM2_SIZE; + } - do - { - next_alt = cc + GET(cc, 1); + cc += 1 + LINK_SIZE; + continue; + } + + fast_forward_allowed = FALSE; + if (depth >= 4) + break; - cc += 1 + LINK_SIZE + ((*cc == OP_CBRA) ? IMM2_SIZE : 0); + end = bracketend(cc) - (1 + LINK_SIZE); + if (*end != OP_KET || PRIVATE_DATA(end) != 0) + break; - while (TRUE) - { - switch(*cc) + if (*cc == OP_CBRA && common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0) + break; + + count = detect_early_fail(common, cc, private_data_start, depth + 1, count); + if (count < EARLY_FAIL_ENHANCE_MAX) { - case OP_SOD: - case OP_SOM: - case OP_SET_SOM: - case OP_NOT_WORD_BOUNDARY: - case OP_WORD_BOUNDARY: - case OP_EODN: - case OP_EOD: - case OP_CIRC: - case OP_CIRCM: - case OP_DOLL: - case OP_DOLLM: - /* Zero width assertions. */ - cc++; + cc = end + (1 + LINK_SIZE); continue; } break; - } - if (depth > 0 && (*cc == OP_BRA || *cc == OP_CBRA)) - detect_fast_fail(common, cc, private_data_start, depth - 1); + case OP_KET: + SLJIT_ASSERT(PRIVATE_DATA(cc) == 0); + if (cc >= next_alt) + break; + cc += 1 + LINK_SIZE; + continue; + } - if (is_accelerated_repeat(cc)) + if (accelerated_start != NULL) { - common->private_data_ptrs[(cc + 1) - common->start] = *private_data_start; + if (count == 0) + { + count++; - if (common->fast_fail_start_ptr == 0) - common->fast_fail_start_ptr = *private_data_start; + if (fast_forward_allowed && *next_alt == OP_KET) + { + common->fast_forward_bc_ptr = accelerated_start; + common->private_data_ptrs[(accelerated_start + 1) - common->start] = ((*private_data_start) << 3) | type_skip; + *private_data_start += sizeof(sljit_sw); + } + else + { + common->private_data_ptrs[(accelerated_start + 1) - common->start] = ((*private_data_start) << 3) | type_fail; - *private_data_start += sizeof(sljit_sw); - common->fast_fail_end_ptr = *private_data_start; + if (common->early_fail_start_ptr == 0) + common->early_fail_start_ptr = *private_data_start; - if (*private_data_start > SLJIT_MAX_LOCAL_SIZE) - return; + *private_data_start += sizeof(sljit_sw); + common->early_fail_end_ptr = *private_data_start; + + if (*private_data_start > SLJIT_MAX_LOCAL_SIZE) + return EARLY_FAIL_ENHANCE_MAX; + } + } + else + { + common->private_data_ptrs[(accelerated_start + 1) - common->start] = ((*private_data_start) << 3) | type_fail_range; + + if (common->early_fail_start_ptr == 0) + common->early_fail_start_ptr = *private_data_start; + + *private_data_start += 2 * sizeof(sljit_sw); + common->early_fail_end_ptr = *private_data_start; + + if (*private_data_start > SLJIT_MAX_LOCAL_SIZE) + return EARLY_FAIL_ENHANCE_MAX; + } + + count++; + + if (count < EARLY_FAIL_ENHANCE_MAX) + continue; } - cc = next_alt; + break; } - while (*cc == OP_ALT); + + if (*cc != OP_ALT && *cc != OP_KET) + result = EARLY_FAIL_ENHANCE_MAX; + else if (result < count) + result = count; + + fast_forward_allowed = FALSE; + cc = next_alt; + } +while (*cc == OP_ALT); + +return result; } static int get_class_iterator_size(PCRE2_SPTR cc) @@ -1586,6 +1791,8 @@ while (cc < ccend) case OP_ASSERT_NOT: case OP_ASSERTBACK: case OP_ASSERTBACK_NOT: + case OP_ASSERT_NA: + case OP_ASSERTBACK_NA: case OP_ONCE: case OP_SCRIPT_RUN: case OP_BRAPOS: @@ -1627,57 +1834,57 @@ while (cc < ccend) case OP_BRAZERO: case OP_BRAMINZERO: case OP_BRAPOSZERO: - repeat_check = FALSE; size = 1; + repeat_check = FALSE; break; CASE_ITERATOR_PRIVATE_DATA_1 - space = 1; size = -2; + space = 1; break; CASE_ITERATOR_PRIVATE_DATA_2A - space = 2; size = -2; + space = 2; break; CASE_ITERATOR_PRIVATE_DATA_2B - space = 2; size = -(2 + IMM2_SIZE); + space = 2; break; CASE_ITERATOR_TYPE_PRIVATE_DATA_1 - space = 1; size = 1; + space = 1; break; CASE_ITERATOR_TYPE_PRIVATE_DATA_2A + size = 1; if (cc[1] != OP_ANYNL && cc[1] != OP_EXTUNI) space = 2; - size = 1; break; case OP_TYPEUPTO: + size = 1 + IMM2_SIZE; if (cc[1 + IMM2_SIZE] != OP_ANYNL && cc[1 + IMM2_SIZE] != OP_EXTUNI) space = 2; - size = 1 + IMM2_SIZE; break; case OP_TYPEMINUPTO: - space = 2; size = 1 + IMM2_SIZE; + space = 2; break; case OP_CLASS: case OP_NCLASS: - space = get_class_iterator_size(cc + size); size = 1 + 32 / sizeof(PCRE2_UCHAR); + space = get_class_iterator_size(cc + size); break; #if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH != 8 case OP_XCLASS: - space = get_class_iterator_size(cc + size); size = GET(cc, 1); + space = get_class_iterator_size(cc + size); break; #endif @@ -2163,6 +2370,8 @@ while (cc < ccend) case OP_ASSERT_NOT: case OP_ASSERTBACK: case OP_ASSERTBACK_NOT: + case OP_ASSERT_NA: + case OP_ASSERTBACK_NA: case OP_ONCE: case OP_SCRIPT_RUN: case OP_BRAPOS: @@ -2487,6 +2696,8 @@ while (cc < ccend) case OP_ASSERT_NOT: case OP_ASSERTBACK: case OP_ASSERTBACK_NOT: + case OP_ASSERT_NA: + case OP_ASSERTBACK_NA: case OP_ONCE: case OP_SCRIPT_RUN: case OP_BRAPOS: @@ -2660,8 +2871,8 @@ while (cc < ccend) } if (common->control_head_ptr != 0 && !control_head_found) { - shared_srcw[0] = common->control_head_ptr; - shared_count = 1; + private_srcw[0] = common->control_head_ptr; + private_count = 1; control_head_found = TRUE; } cc += 1 + 2 + cc[1]; @@ -2671,8 +2882,8 @@ while (cc < ccend) SLJIT_ASSERT(common->control_head_ptr != 0); if (!control_head_found) { - shared_srcw[0] = common->control_head_ptr; - shared_count = 1; + private_srcw[0] = common->control_head_ptr; + private_count = 1; control_head_found = TRUE; } cc++; @@ -2756,7 +2967,7 @@ PCRE2_SPTR end = bracketend(cc); BOOL has_alternatives = cc[GET(cc, 1)] == OP_ALT; /* Assert captures then. */ -if (*cc >= OP_ASSERT && *cc <= OP_ASSERTBACK_NOT) +if (*cc >= OP_ASSERT && *cc <= OP_ASSERTBACK_NA) current_offset = NULL; /* Conditional block does not. */ if (*cc == OP_COND || *cc == OP_SCOND) @@ -2768,7 +2979,7 @@ if (has_alternatives) while (cc < end) { - if ((*cc >= OP_ASSERT && *cc <= OP_ASSERTBACK_NOT) || (*cc >= OP_ONCE && *cc <= OP_SCOND)) + if ((*cc >= OP_ASSERT && *cc <= OP_ASSERTBACK_NA) || (*cc >= OP_ONCE && *cc <= OP_SCOND)) cc = set_then_offsets(common, cc, current_offset); else { @@ -2938,16 +3149,54 @@ else } } -static SLJIT_INLINE void reset_fast_fail(compiler_common *common) +static SLJIT_INLINE void reset_early_fail(compiler_common *common) { DEFINE_COMPILER; +sljit_u32 size = (sljit_u32)(common->early_fail_end_ptr - common->early_fail_start_ptr); +sljit_u32 uncleared_size; +sljit_s32 src = SLJIT_IMM; sljit_s32 i; +struct sljit_label *loop; + +SLJIT_ASSERT(common->early_fail_start_ptr < common->early_fail_end_ptr); + +if (size == sizeof(sljit_sw)) + { + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->early_fail_start_ptr, SLJIT_IMM, 0); + return; + } + +if (sljit_get_register_index(TMP3) >= 0 && !sljit_has_cpu_feature(SLJIT_HAS_ZERO_REGISTER)) + { + OP1(SLJIT_MOV, TMP3, 0, SLJIT_IMM, 0); + src = TMP3; + } + +if (size <= 6 * sizeof(sljit_sw)) + { + for (i = common->early_fail_start_ptr; i < common->early_fail_end_ptr; i += sizeof(sljit_sw)) + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), i, src, 0); + return; + } + +GET_LOCAL_BASE(TMP1, 0, common->early_fail_start_ptr); + +uncleared_size = ((size / sizeof(sljit_sw)) % 3) * sizeof(sljit_sw); + +OP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, size - uncleared_size); + +loop = LABEL(); +OP1(SLJIT_MOV, SLJIT_MEM1(TMP1), 0, src, 0); +OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 3 * sizeof(sljit_sw)); +OP1(SLJIT_MOV, SLJIT_MEM1(TMP1), -2 * (sljit_sw)sizeof(sljit_sw), src, 0); +OP1(SLJIT_MOV, SLJIT_MEM1(TMP1), -1 * (sljit_sw)sizeof(sljit_sw), src, 0); +CMPTO(SLJIT_LESS, TMP1, 0, TMP2, 0, loop); -SLJIT_ASSERT(common->fast_fail_start_ptr < common->fast_fail_end_ptr); +if (uncleared_size >= sizeof(sljit_sw)) + OP1(SLJIT_MOV, SLJIT_MEM1(TMP1), 0, src, 0); -OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); -for (i = common->fast_fail_start_ptr; i < common->fast_fail_end_ptr; i += sizeof(sljit_sw)) - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), i, TMP1, 0); +if (uncleared_size >= 2 * sizeof(sljit_sw)) + OP1(SLJIT_MOV, SLJIT_MEM1(TMP1), sizeof(sljit_sw), src, 0); } static SLJIT_INLINE void do_reset_match(compiler_common *common, int length) @@ -3193,16 +3442,19 @@ static SLJIT_INLINE BOOL char_has_othercase(compiler_common *common, PCRE2_SPTR unsigned int c; #ifdef SUPPORT_UNICODE -if (common->utf) +if (common->utf || common->ucp) { - GETCHAR(c, cc); - if (c > 127) + if (common->utf) { - return c != UCD_OTHERCASE(c); + GETCHAR(c, cc); } -#if PCRE2_CODE_UNIT_WIDTH != 8 + else + c = *cc; + + if (c > 127) + return c != UCD_OTHERCASE(c); + return common->fcc[c] != c; -#endif } else #endif @@ -3214,10 +3466,8 @@ static SLJIT_INLINE unsigned int char_othercase(compiler_common *common, unsigne { /* Returns with the othercase. */ #ifdef SUPPORT_UNICODE -if (common->utf && c > 127) - { +if ((common->utf || common->ucp) && c > 127) return UCD_OTHERCASE(c); - } #endif return TABLE_GET(c, common->fcc, c); } @@ -3231,15 +3481,19 @@ int n; #endif #ifdef SUPPORT_UNICODE -if (common->utf) +if (common->utf || common->ucp) { - GETCHAR(c, cc); + if (common->utf) + { + GETCHAR(c, cc); + } + else + c = *cc; + if (c <= 127) oc = common->fcc[c]; else - { oc = UCD_OTHERCASE(c); - } } else { @@ -4083,7 +4337,7 @@ jump = JUMP(SLJIT_NOT_ZERO); /* Two byte sequence. */ OP2(SLJIT_XOR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x3000); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); JUMPHERE(jump); OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(1)); @@ -4096,7 +4350,7 @@ jump = JUMP(SLJIT_NOT_ZERO); /* Three byte sequence. */ OP2(SLJIT_XOR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xe0000); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2)); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); /* Four byte sequence. */ JUMPHERE(jump); @@ -4106,7 +4360,7 @@ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(3)); OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6); OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x3f); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } static void do_utfreadtype8(compiler_common *common) @@ -4131,18 +4385,18 @@ OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 6); OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x3f); OP2(SLJIT_OR, TMP2, 0, TMP2, 0, TMP1, 0); OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP2), common->ctypes); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); JUMPHERE(compare); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); /* We only have types for characters less than 256. */ JUMPHERE(jump); OP1(SLJIT_MOV_U8, TMP2, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(utf8_table4) - 0xc0); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } static void do_utfreadchar_invalid(compiler_common *common) @@ -4182,7 +4436,7 @@ OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); jump = JUMP(SLJIT_NOT_ZERO); OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2)); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); JUMPHERE(jump); @@ -4225,7 +4479,7 @@ if (has_cmov) } else exit_invalid[4] = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x800); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); JUMPHERE(jump); @@ -4254,7 +4508,7 @@ else exit_invalid[6] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x100000); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x10000); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); JUMPHERE(buffer_end_close); OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2)); @@ -4271,7 +4525,7 @@ exit_invalid[8] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40); OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); jump = JUMP(SLJIT_NOT_ZERO); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); /* Three-byte sequence. */ JUMPHERE(jump); @@ -4301,7 +4555,7 @@ for (i = 0; i < 11; i++) sljit_set_label(exit_invalid[i], exit_invalid_label); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } static void do_utfreadnewline_invalid(compiler_common *common) @@ -4332,7 +4586,7 @@ if (common->nltype != NLTYPE_ANY) JUMPHERE(jump[0]); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); - sljit_emit_fast_return(compiler, RETURN_ADDR, 0); + OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); return; } @@ -4363,14 +4617,14 @@ JUMPHERE(jump[0]); JUMPHERE(jump[4]); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); /* Two byte long newline: 0x85. */ JUMPHERE(jump[1]); CMPTO(SLJIT_NOT_EQUAL, TMP2, 0, SLJIT_IMM, 0x85, skip_start); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0x85); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); /* Three byte long newlines: 0x2028 and 0x2029. */ JUMPHERE(jump[2]); @@ -4385,7 +4639,7 @@ CMPTO(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x40, skip_start); OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, 0x2000); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } static void do_utfmoveback_invalid(compiler_common *common) @@ -4414,7 +4668,7 @@ jump = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x20); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 1); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2)); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); /* Three-byte sequence. */ JUMPHERE(jump); @@ -4427,7 +4681,7 @@ jump = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x10); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 1); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); /* Four-byte sequence. */ JUMPHERE(jump); @@ -4440,7 +4694,7 @@ exit_invalid[3] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x05); exit_ok_label = LABEL(); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 1); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); /* Two-byte sequence. */ JUMPHERE(buffer_start_close); @@ -4470,7 +4724,7 @@ sljit_set_label(exit_invalid[5], exit_invalid_label); sljit_set_label(exit_invalid[6], exit_invalid_label); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(3)); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); JUMPHERE(exit_invalid[4]); /* -2 + 4 = 2 */ @@ -4481,7 +4735,7 @@ for (i = 0; i < 4; i++) sljit_set_label(exit_invalid[i], exit_invalid_label); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(4)); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } static void do_utfpeakcharback(compiler_common *common) @@ -4518,7 +4772,7 @@ OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6); OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } static void do_utfpeakcharback_invalid(compiler_common *common) @@ -4548,7 +4802,7 @@ two_byte_entry = LABEL(); OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 6); /* If TMP1 is in 0x80-0xbf range, TMP1 is also increased by (0x2 << 6). */ OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); JUMPHERE(jump[1]); OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xc2 - 0x80); @@ -4586,7 +4840,7 @@ if (has_cmov) else exit_invalid[3] = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x800); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); JUMPHERE(jump[1]); OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xe0 - 0x80); @@ -4612,7 +4866,7 @@ else exit_invalid[5] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x100000); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x10000); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); JUMPHERE(jump[0]); OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, IN_UCHARS(1)); @@ -4635,7 +4889,7 @@ OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xe0); CMPTO(SLJIT_LESS, TMP2, 0, SLJIT_IMM, 0x10, three_byte_entry); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); JUMPHERE(jump[0]); exit_invalid[7] = CMP(SLJIT_GREATER, TMP2, 0, STR_PTR, 0); @@ -4650,7 +4904,7 @@ for (i = 0; i < 8; i++) sljit_set_label(exit_invalid[i], exit_invalid_label); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } #endif /* PCRE2_CODE_UNIT_WIDTH == 8 */ @@ -4680,13 +4934,13 @@ OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x10000); exit_invalid[2] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x400); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); JUMPHERE(exit_invalid[0]); JUMPHERE(exit_invalid[1]); JUMPHERE(exit_invalid[2]); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } static void do_utfreadnewline_invalid(compiler_common *common) @@ -4713,12 +4967,12 @@ OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0x10000); OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, UCHAR_SHIFT); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); JUMPHERE(exit_invalid[0]); JUMPHERE(exit_invalid[1]); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } static void do_utfmoveback_invalid(compiler_common *common) @@ -4738,7 +4992,7 @@ exit_invalid[2] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x400); OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 1); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); JUMPHERE(exit_invalid[0]); JUMPHERE(exit_invalid[1]); @@ -4746,7 +5000,7 @@ JUMPHERE(exit_invalid[2]); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } static void do_utfpeakcharback_invalid(compiler_common *common) @@ -4771,14 +5025,14 @@ OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 10); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); JUMPHERE(jump); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); JUMPHERE(exit_invalid[0]); JUMPHERE(exit_invalid[1]); JUMPHERE(exit_invalid[2]); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } #endif /* PCRE2_CODE_UNIT_WIDTH == 16 */ @@ -4824,7 +5078,7 @@ OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, UCD_BLOCK_SHIFT); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_stage2)); OP1(SLJIT_MOV_U16, TMP2, 0, SLJIT_MEM2(TMP2, TMP1), 1); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } static void do_getucdtype(compiler_common *common) @@ -4871,7 +5125,7 @@ OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 2); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM2(TMP1, TMP2), 1); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } #endif /* SUPPORT_UNICODE */ @@ -5159,6 +5413,8 @@ while (TRUE) case OP_ASSERT_NOT: case OP_ASSERTBACK: case OP_ASSERTBACK_NOT: + case OP_ASSERT_NA: + case OP_ASSERTBACK_NA: cc = bracketend(cc); continue; @@ -5458,7 +5714,12 @@ while (TRUE) #endif { chr = *cc; - othercase[0] = TABLE_GET(chr, common->fcc, chr); +#ifdef SUPPORT_UNICODE + if (common->ucp && chr > 127) + othercase[0] = UCD_OTHERCASE(chr); + else +#endif + othercase[0] = TABLE_GET(chr, common->fcc, chr); } } else @@ -5887,8 +6148,8 @@ oc = first_char; if ((common->re->flags & PCRE2_FIRSTCASELESS) != 0) { oc = TABLE_GET(first_char, common->fcc, first_char); -#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 8 - if (first_char > 127 && common->utf) +#if defined SUPPORT_UNICODE + if (first_char > 127 && (common->utf || common->ucp)) oc = UCD_OTHERCASE(first_char); #endif } @@ -6072,67 +6333,80 @@ if (common->match_end_ptr != 0) OP1(SLJIT_MOV, STR_END, 0, RETURN_ADDR, 0); } -static SLJIT_INLINE struct sljit_jump *search_requested_char(compiler_common *common, PCRE2_UCHAR req_char, BOOL caseless, BOOL has_firstchar) +static SLJIT_INLINE jump_list *search_requested_char(compiler_common *common, PCRE2_UCHAR req_char, BOOL caseless, BOOL has_firstchar) { DEFINE_COMPILER; struct sljit_label *loop; struct sljit_jump *toolong; -struct sljit_jump *alreadyfound; +struct sljit_jump *already_found; struct sljit_jump *found; -struct sljit_jump *foundoc = NULL; -struct sljit_jump *notfound; +struct sljit_jump *found_oc = NULL; +jump_list *not_found = NULL; sljit_u32 oc, bit; SLJIT_ASSERT(common->req_char_ptr != 0); -OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->req_char_ptr); -OP2(SLJIT_ADD, TMP1, 0, STR_PTR, 0, SLJIT_IMM, REQ_CU_MAX); -toolong = CMP(SLJIT_LESS, TMP1, 0, STR_END, 0); -alreadyfound = CMP(SLJIT_LESS, STR_PTR, 0, TMP2, 0); +OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(REQ_CU_MAX) * 100); +OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->req_char_ptr); +toolong = CMP(SLJIT_LESS, TMP2, 0, STR_END, 0); +already_found = CMP(SLJIT_LESS, STR_PTR, 0, TMP1, 0); if (has_firstchar) OP2(SLJIT_ADD, TMP1, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); else OP1(SLJIT_MOV, TMP1, 0, STR_PTR, 0); -loop = LABEL(); -notfound = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0); - -OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(TMP1), 0); oc = req_char; if (caseless) { oc = TABLE_GET(req_char, common->fcc, req_char); -#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 8 - if (req_char > 127 && common->utf) +#if defined SUPPORT_UNICODE + if (req_char > 127 && (common->utf || common->ucp)) oc = UCD_OTHERCASE(req_char); #endif } -if (req_char == oc) - found = CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, req_char); + +#ifdef JIT_HAS_FAST_REQUESTED_CHAR_SIMD +if (JIT_HAS_FAST_REQUESTED_CHAR_SIMD) + { + not_found = fast_requested_char_simd(common, req_char, oc); + } else +#endif { - bit = req_char ^ oc; - if (is_powerof2(bit)) - { - OP2(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_IMM, bit); - found = CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, req_char | bit); - } + loop = LABEL(); + add_jump(compiler, ¬_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0)); + + OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(TMP1), 0); + + if (req_char == oc) + found = CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, req_char); else { - found = CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, req_char); - foundoc = CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, oc); + bit = req_char ^ oc; + if (is_powerof2(bit)) + { + OP2(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_IMM, bit); + found = CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, req_char | bit); + } + else + { + found = CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, req_char); + found_oc = CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, oc); + } } + OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1)); + JUMPTO(SLJIT_JUMP, loop); + + JUMPHERE(found); + if (found_oc) + JUMPHERE(found_oc); } -OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1)); -JUMPTO(SLJIT_JUMP, loop); -JUMPHERE(found); -if (foundoc) - JUMPHERE(foundoc); OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->req_char_ptr, TMP1, 0); -JUMPHERE(alreadyfound); + +JUMPHERE(already_found); JUMPHERE(toolong); -return notfound; +return not_found; } static void do_revertframes(compiler_common *common) @@ -6170,7 +6444,7 @@ JUMPTO(SLJIT_JUMP, mainloop); JUMPHERE(jump); jump = CMP(SLJIT_NOT_ZERO /* SIG_LESS */, TMP2, 0, SLJIT_IMM, 0); /* End of reverting values. */ -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); JUMPHERE(jump); OP1(SLJIT_NEG, TMP2, 0, TMP2, 0); @@ -6240,7 +6514,7 @@ else /* Testing char type. */ #ifdef SUPPORT_UNICODE -if (common->use_ucp) +if (common->ucp) { OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, 1); jump = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_UNDERSCORE); @@ -6286,7 +6560,7 @@ peek_char(common, READ_CHAR_MAX, SLJIT_MEM1(SLJIT_SP), LOCALS1, &invalid_utf2); valid_utf = LABEL(); -if (common->use_ucp) +if (common->ucp) { OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, 1); jump = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_UNDERSCORE); @@ -6326,7 +6600,7 @@ set_jumps(skipread_list, LABEL()); OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0); OP2(SLJIT_XOR | SLJIT_SET_Z, TMP2, 0, TMP2, 0, TMP3, 0); -sljit_emit_fast_return(compiler, TMP1, 0); +OP_SRC(SLJIT_FAST_RETURN, TMP1, 0); #ifdef SUPPORT_UNICODE if (common->invalid_utf) @@ -6338,12 +6612,12 @@ if (common->invalid_utf) OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0); OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, -1); - sljit_emit_fast_return(compiler, TMP1, 0); + OP_SRC(SLJIT_FAST_RETURN, TMP1, 0); set_jumps(invalid_utf2, LABEL()); OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0); OP1(SLJIT_MOV, TMP2, 0, TMP3, 0); - sljit_emit_fast_return(compiler, TMP1, 0); + OP_SRC(SLJIT_FAST_RETURN, TMP1, 0); } #endif /* SUPPORT_UNICODE */ } @@ -6633,7 +6907,7 @@ if (common->utf) #endif #endif /* SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH == [16|32] */ OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_EQUAL); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } static void check_hspace(compiler_common *common) @@ -6672,7 +6946,7 @@ if (common->utf) #endif /* SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH == [16|32] */ OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_EQUAL); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } static void check_vspace(compiler_common *common) @@ -6700,7 +6974,7 @@ if (common->utf) #endif /* SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH == [16|32] */ OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_EQUAL); -sljit_emit_fast_return(compiler, RETURN_ADDR, 0); +OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } static void do_casefulcmp(compiler_common *common) @@ -6780,7 +7054,7 @@ if (char1_reg == STR_END) OP1(SLJIT_MOV, char2_reg, 0, RETURN_ADDR, 0); } -sljit_emit_fast_return(compiler, TMP1, 0); +OP_SRC(SLJIT_FAST_RETURN, TMP1, 0); } static void do_caselesscmp(compiler_common *common) @@ -6878,7 +7152,7 @@ if (char2_reg == STACK_TOP) } OP1(SLJIT_MOV, char1_reg, 0, SLJIT_MEM1(SLJIT_SP), LOCALS1); -sljit_emit_fast_return(compiler, TMP1, 0); +OP_SRC(SLJIT_FAST_RETURN, TMP1, 0); } static PCRE2_SPTR byte_sequence_compare(compiler_common *common, BOOL caseless, PCRE2_SPTR cc, @@ -7189,7 +7463,13 @@ cc = ccbegin; if ((cc[-1] & XCL_NOT) != 0) read_char(common, min, max, backtracks, READ_CHAR_UPDATE_STR_PTR); else + { +#ifdef SUPPORT_UNICODE + read_char(common, min, max, (needstype || needsscript) ? backtracks : NULL, 0); +#else /* !SUPPORT_UNICODE */ read_char(common, min, max, NULL, 0); +#endif /* SUPPORT_UNICODE */ + } if ((cc[-1] & XCL_HASPROP) == 0) { @@ -7275,16 +7555,11 @@ if (needstype || needsscript) /* Before anything else, we deal with scripts. */ if (needsscript) { -// PH hacking - OP2(SLJIT_SHL, TMP1, 0, TMP2, 0, SLJIT_IMM, 2); - OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 3); - OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0); - - OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, script)); - - OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM2(TMP1, TMP2), 0); + OP2(SLJIT_SHL, TMP1, 0, TMP2, 0, SLJIT_IMM, 3); + OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 2); + OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); - // OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM2(TMP1, TMP2), 3); + OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, script)); ccbegin = cc; @@ -7328,28 +7603,19 @@ if (needstype || needsscript) { if (!needschar) { -// PH hacking - OP2(SLJIT_SHL, TMP1, 0, TMP2, 0, SLJIT_IMM, 2); - OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 3); - OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0); - OP2(SLJIT_ADD, TMP1, 0, TMP2, 0, TMP1, 0); + OP2(SLJIT_SHL, TMP1, 0, TMP2, 0, SLJIT_IMM, 3); + OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 2); + OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); - OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, chartype)); - - OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM2(TMP1, TMP2), 0); - -// OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM2(TMP1, TMP2), 3); + OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, chartype)); } else { -// PH hacking - OP2(SLJIT_SHL, TMP1, 0, TMP2, 0, SLJIT_IMM, 2); - + OP2(SLJIT_SHL, TMP1, 0, TMP2, 0, SLJIT_IMM, 2); OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 3); + OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0); - OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0); - OP1(SLJIT_MOV, TMP1, 0, RETURN_ADDR, 0); - + OP1(SLJIT_MOV, TMP1, 0, RETURN_ADDR, 0); OP1(SLJIT_MOV_U8, RETURN_ADDR, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, chartype)); typereg = RETURN_ADDR; } @@ -8728,16 +8994,13 @@ if (common->utf && *cc == OP_REFI) CMPTO(SLJIT_EQUAL, TMP1, 0, char1_reg, 0, loop); -// PH hacking OP1(SLJIT_MOV, TMP3, 0, TMP1, 0); add_jump(compiler, &common->getucd, JUMP(SLJIT_FAST_CALL)); - OP2(SLJIT_SHL, TMP1, 0, TMP2, 0, SLJIT_IMM, 2); - + OP2(SLJIT_SHL, TMP1, 0, TMP2, 0, SLJIT_IMM, 2); OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 3); - - OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0); + OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0); OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_records)); @@ -9597,7 +9860,8 @@ if (opcode == OP_ASSERT || opcode == OP_ASSERTBACK) } else { - OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), 0); + SLJIT_ASSERT(extrasize == 3); + OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(-1)); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), bra == OP_BRAZERO ? STR_PTR : SLJIT_IMM, 0); } } @@ -9929,7 +10193,7 @@ if (opcode == OP_CBRA || opcode == OP_SCBRA) BACKTRACK_AS(bracket_backtrack)->private_data_ptr = private_data_ptr; matchingpath += IMM2_SIZE; } -else if (opcode == OP_ONCE || opcode == OP_SCRIPT_RUN || opcode == OP_SBRA || opcode == OP_SCOND) +else if (opcode == OP_ASSERT_NA || opcode == OP_ASSERTBACK_NA || opcode == OP_ONCE || opcode == OP_SCRIPT_RUN || opcode == OP_SBRA || opcode == OP_SCOND) { /* Other brackets simply allocate the next entry. */ private_data_ptr = PRIVATE_DATA(ccbegin); @@ -10114,7 +10378,7 @@ else if (opcode == OP_CBRA || opcode == OP_SCBRA) OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0); } } -else if (opcode == OP_SCRIPT_RUN || opcode == OP_SBRA || opcode == OP_SCOND) +else if (opcode == OP_ASSERT_NA || opcode == OP_ASSERTBACK_NA || opcode == OP_SCRIPT_RUN || opcode == OP_SBRA || opcode == OP_SCOND) { /* Saving the previous value. */ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); @@ -10240,6 +10504,9 @@ compile_matchingpath(common, matchingpath, cc, backtrack); if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler))) return NULL; +if (opcode == OP_ASSERT_NA || opcode == OP_ASSERTBACK_NA) + OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); + if (opcode == OP_ONCE) match_once_common(common, ket, BACKTRACK_AS(bracket_backtrack)->u.framesize, private_data_ptr, has_alternatives, needs_control_head); @@ -10840,8 +11107,8 @@ backtrack_common *backtrack; PCRE2_UCHAR opcode; PCRE2_UCHAR type; sljit_u32 max = 0, exact; -BOOL fast_fail; -sljit_s32 fast_str_ptr; +sljit_s32 early_fail_ptr = PRIVATE_DATA(cc + 1); +sljit_s32 early_fail_type; BOOL charpos_enabled; PCRE2_UCHAR charpos_char; unsigned int charpos_othercasebit; @@ -10855,21 +11122,27 @@ int base = (private_data_ptr == 0) ? SLJIT_MEM1(STACK_TOP) : SLJIT_MEM1(SLJIT_SP int offset0 = (private_data_ptr == 0) ? STACK(0) : private_data_ptr; int offset1 = (private_data_ptr == 0) ? STACK(1) : private_data_ptr + (int)sizeof(sljit_sw); int tmp_base, tmp_offset; +#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 +BOOL use_tmp; +#endif PUSH_BACKTRACK(sizeof(char_iterator_backtrack), cc, NULL); -fast_str_ptr = PRIVATE_DATA(cc + 1); -fast_fail = TRUE; +early_fail_type = (early_fail_ptr & 0x7); +early_fail_ptr >>= 3; -SLJIT_ASSERT(common->fast_forward_bc_ptr == NULL || fast_str_ptr == 0 || cc == common->fast_forward_bc_ptr); +/* During recursion, these optimizations are disabled. */ +if (common->early_fail_start_ptr == 0) + { + early_fail_ptr = 0; + early_fail_type = type_skip; + } -if (cc == common->fast_forward_bc_ptr) - fast_fail = FALSE; -else if (common->fast_fail_start_ptr == 0) - fast_str_ptr = 0; +SLJIT_ASSERT(common->fast_forward_bc_ptr != NULL || early_fail_ptr == 0 + || (early_fail_ptr >= common->early_fail_start_ptr && early_fail_ptr <= common->early_fail_end_ptr)); -SLJIT_ASSERT(common->fast_forward_bc_ptr != NULL || fast_str_ptr == 0 - || (fast_str_ptr >= common->fast_fail_start_ptr && fast_str_ptr <= common->fast_fail_end_ptr)); +if (early_fail_type == type_fail) + add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), early_fail_ptr)); cc = get_iterator_parameters(common, cc, &opcode, &type, &max, &exact, &end); @@ -10884,13 +11157,11 @@ else tmp_offset = POSSESSIVE0; } -if (fast_fail && fast_str_ptr != 0) - add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), fast_str_ptr)); - /* Handle fixed part first. */ if (exact > 1) { - SLJIT_ASSERT(fast_str_ptr == 0); + SLJIT_ASSERT(early_fail_ptr == 0); + if (common->mode == PCRE2_JIT_COMPLETE #ifdef SUPPORT_UNICODE && !common->utf @@ -10915,18 +11186,31 @@ if (exact > 1) } } else if (exact == 1) + { compile_char1_matchingpath(common, type, cc, &backtrack->topbacktracks, TRUE); + if (early_fail_type == type_fail_range) + { + OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), early_fail_ptr); + OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), early_fail_ptr + (int)sizeof(sljit_sw)); + OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, TMP2, 0); + OP2(SLJIT_SUB, TMP2, 0, STR_PTR, 0, TMP2, 0); + add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_LESS_EQUAL, TMP2, 0, TMP1, 0)); + + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr + (int)sizeof(sljit_sw), STR_PTR, 0); + } + } + switch(opcode) { case OP_STAR: case OP_UPTO: - SLJIT_ASSERT(fast_str_ptr == 0 || opcode == OP_STAR); + SLJIT_ASSERT(early_fail_ptr == 0 || opcode == OP_STAR); if (type == OP_ANYNL || type == OP_EXTUNI) { SLJIT_ASSERT(private_data_ptr == 0); - SLJIT_ASSERT(fast_str_ptr == 0); + SLJIT_ASSERT(early_fail_ptr == 0); allocate_stack(common, 2); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0); @@ -10945,7 +11229,7 @@ switch(opcode) OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), POSSESSIVE0, TMP1, 0); } - /* We cannot use TMP3 because of this allocate_stack. */ + /* We cannot use TMP3 because of allocate_stack. */ allocate_stack(common, 1); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0); JUMPTO(SLJIT_JUMP, label); @@ -10971,8 +11255,8 @@ switch(opcode) OP1(SLJIT_MOV, STR_PTR, 0, STR_END, 0); process_partial_match(common); - if (fast_str_ptr != 0) - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), fast_str_ptr, STR_END, 0); + if (early_fail_ptr != 0) + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_END, 0); BACKTRACK_AS(char_iterator_backtrack)->matchingpath = LABEL(); break; } @@ -11002,8 +11286,8 @@ switch(opcode) OP1(SLJIT_MOV, base, offset0, STR_PTR, 0); - if (fast_str_ptr != 0) - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), fast_str_ptr, STR_PTR, 0); + if (early_fail_ptr != 0) + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_PTR, 0); BACKTRACK_AS(char_iterator_backtrack)->matchingpath = LABEL(); break; } @@ -11030,7 +11314,7 @@ switch(opcode) if (charpos_enabled) { charpos_char = end[1]; - /* Consumpe the OP_CHAR opcode. */ + /* Consume the OP_CHAR opcode. */ end += 2; #if PCRE2_CODE_UNIT_WIDTH == 8 SLJIT_ASSERT((charpos_othercasebit >> 8) == 0); @@ -11062,8 +11346,8 @@ switch(opcode) add_jump(compiler, &backtrack->topbacktracks, JUMP(SLJIT_ZERO)); } compile_char1_matchingpath(common, type, cc, &backtrack->topbacktracks, FALSE); - if (fast_str_ptr != 0) - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), fast_str_ptr, STR_PTR, 0); + if (early_fail_ptr != 0) + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_PTR, 0); JUMPHERE(jump); detect_partial_match(common, &backtrack->topbacktracks); @@ -11076,6 +11360,7 @@ switch(opcode) allocate_stack(common, 2); OP1(SLJIT_MOV, base, offset0, STR_PTR, 0); OP1(SLJIT_MOV, base, offset1, STR_PTR, 0); + if (opcode == OP_UPTO) { OP2(SLJIT_SUB | SLJIT_SET_Z, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); @@ -11085,53 +11370,55 @@ switch(opcode) /* Search the last instance of charpos_char. */ label = LABEL(); compile_char1_matchingpath(common, type, cc, &no_match, FALSE); - if (fast_str_ptr != 0) - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), fast_str_ptr, STR_PTR, 0); + if (early_fail_ptr != 0) + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_PTR, 0); detect_partial_match(common, &no_match); OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0)); if (charpos_othercasebit != 0) OP2(SLJIT_OR, TMP1, 0, TMP1, 0, SLJIT_IMM, charpos_othercasebit); + if (opcode == OP_STAR) { CMPTO(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, charpos_char, label); OP1(SLJIT_MOV, base, offset0, STR_PTR, 0); + JUMPTO(SLJIT_JUMP, label); } else { jump = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, charpos_char); OP1(SLJIT_MOV, base, offset0, STR_PTR, 0); JUMPHERE(jump); - } - - if (opcode == OP_UPTO) - { OP2(SLJIT_SUB | SLJIT_SET_Z, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); JUMPTO(SLJIT_NOT_ZERO, label); } - else - JUMPTO(SLJIT_JUMP, label); set_jumps(no_match, LABEL()); - OP1(SLJIT_MOV, STR_PTR, 0, base, offset0); - OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); + OP2(SLJIT_ADD, STR_PTR, 0, base, offset0, SLJIT_IMM, IN_UCHARS(1)); OP1(SLJIT_MOV, base, offset0, STR_PTR, 0); } -#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 - else if (common->utf) + else { if (private_data_ptr == 0) allocate_stack(common, 2); - OP1(SLJIT_MOV, base, offset0, STR_PTR, 0); OP1(SLJIT_MOV, base, offset1, STR_PTR, 0); +#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 + use_tmp = (!HAS_VIRTUAL_REGISTERS && opcode == OP_STAR); + SLJIT_ASSERT(!use_tmp || tmp_base == TMP3); + if (common->utf) + OP1(SLJIT_MOV, use_tmp ? TMP3 : base, use_tmp ? 0 : offset0, STR_PTR, 0); +#endif if (opcode == OP_UPTO) OP1(SLJIT_MOV, tmp_base, tmp_offset, SLJIT_IMM, max); detect_partial_match(common, &no_match); label = LABEL(); - compile_char1_matchingpath(common, type, cc, &no_match, FALSE); - OP1(SLJIT_MOV, base, offset0, STR_PTR, 0); + compile_char1_matchingpath(common, type, cc, &no_char1_match, FALSE); +#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 + if (common->utf) + OP1(SLJIT_MOV, use_tmp ? TMP3 : base, use_tmp ? 0 : offset0, STR_PTR, 0); +#endif if (opcode == OP_UPTO) { @@ -11142,39 +11429,29 @@ switch(opcode) detect_partial_match_to(common, label); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); - set_jumps(no_match, LABEL()); - OP1(SLJIT_MOV, STR_PTR, 0, base, offset0); - if (fast_str_ptr != 0) - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), fast_str_ptr, STR_PTR, 0); - } + set_jumps(no_char1_match, LABEL()); +#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 + if (common->utf) + { + set_jumps(no_match, LABEL()); + if (use_tmp) + { + OP1(SLJIT_MOV, STR_PTR, 0, TMP3, 0); + OP1(SLJIT_MOV, base, offset0, TMP3, 0); + } + else + OP1(SLJIT_MOV, STR_PTR, 0, base, offset0); + } + else #endif - else - { - if (private_data_ptr == 0) - allocate_stack(common, 2); - - OP1(SLJIT_MOV, base, offset1, STR_PTR, 0); - if (opcode == OP_UPTO) - OP1(SLJIT_MOV, tmp_base, tmp_offset, SLJIT_IMM, max); - - detect_partial_match(common, &no_match); - label = LABEL(); - compile_char1_matchingpath(common, type, cc, &no_char1_match, FALSE); - if (opcode == OP_UPTO) { - OP2(SLJIT_SUB | SLJIT_SET_Z, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); - add_jump(compiler, &no_match, JUMP(SLJIT_ZERO)); + OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); + set_jumps(no_match, LABEL()); + OP1(SLJIT_MOV, base, offset0, STR_PTR, 0); } - detect_partial_match_to(common, label); - OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); - - set_jumps(no_char1_match, LABEL()); - OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); - set_jumps(no_match, LABEL()); - OP1(SLJIT_MOV, base, offset0, STR_PTR, 0); - if (fast_str_ptr != 0) - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), fast_str_ptr, STR_PTR, 0); + if (early_fail_ptr != 0) + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_PTR, 0); } BACKTRACK_AS(char_iterator_backtrack)->matchingpath = LABEL(); @@ -11185,12 +11462,12 @@ switch(opcode) allocate_stack(common, 1); OP1(SLJIT_MOV, base, offset0, STR_PTR, 0); BACKTRACK_AS(char_iterator_backtrack)->matchingpath = LABEL(); - if (fast_str_ptr != 0) - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), fast_str_ptr, STR_PTR, 0); + if (early_fail_ptr != 0) + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_PTR, 0); break; case OP_MINUPTO: - SLJIT_ASSERT(fast_str_ptr == 0); + SLJIT_ASSERT(early_fail_ptr == 0); if (private_data_ptr == 0) allocate_stack(common, 2); OP1(SLJIT_MOV, base, offset0, STR_PTR, 0); @@ -11200,7 +11477,7 @@ switch(opcode) case OP_QUERY: case OP_MINQUERY: - SLJIT_ASSERT(fast_str_ptr == 0); + SLJIT_ASSERT(early_fail_ptr == 0); if (private_data_ptr == 0) allocate_stack(common, 1); OP1(SLJIT_MOV, base, offset0, STR_PTR, 0); @@ -11221,8 +11498,8 @@ switch(opcode) { OP1(SLJIT_MOV, STR_PTR, 0, STR_END, 0); process_partial_match(common); - if (fast_str_ptr != 0) - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), fast_str_ptr, STR_END, 0); + if (early_fail_ptr != 0) + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_END, 0); break; } @@ -11238,16 +11515,17 @@ switch(opcode) set_jumps(no_match, LABEL()); OP1(SLJIT_MOV, STR_PTR, 0, tmp_base, tmp_offset); - if (fast_str_ptr != 0) + if (early_fail_ptr != 0) { - if (tmp_base == TMP3) - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), fast_str_ptr, TMP3, 0); + if (!HAS_VIRTUAL_REGISTERS && tmp_base == TMP3) + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, TMP3, 0); else - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), fast_str_ptr, STR_PTR, 0); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_PTR, 0); } break; } #endif + detect_partial_match(common, &no_match); label = LABEL(); compile_char1_matchingpath(common, type, cc, &no_char1_match, FALSE); @@ -11257,12 +11535,12 @@ switch(opcode) set_jumps(no_char1_match, LABEL()); OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); set_jumps(no_match, LABEL()); - if (fast_str_ptr != 0) - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), fast_str_ptr, STR_PTR, 0); + if (early_fail_ptr != 0) + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_PTR, 0); break; case OP_POSUPTO: - SLJIT_ASSERT(fast_str_ptr == 0); + SLJIT_ASSERT(early_fail_ptr == 0); #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 if (common->utf) { @@ -11298,9 +11576,6 @@ switch(opcode) process_partial_match(common); JUMPHERE(jump); } - - if (fast_str_ptr != 0) - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), fast_str_ptr, STR_PTR, 0); break; } @@ -11320,7 +11595,7 @@ switch(opcode) break; case OP_POSQUERY: - SLJIT_ASSERT(fast_str_ptr == 0); + SLJIT_ASSERT(early_fail_ptr == 0); OP1(SLJIT_MOV, tmp_base, tmp_offset, STR_PTR, 0); compile_char1_matchingpath(common, type, cc, &no_match, TRUE); OP1(SLJIT_MOV, tmp_base, tmp_offset, STR_PTR, 0); @@ -11695,6 +11970,8 @@ while (cc < ccend) count_match(common); break; + case OP_ASSERT_NA: + case OP_ASSERTBACK_NA: case OP_ONCE: case OP_SCRIPT_RUN: case OP_BRA: @@ -12232,6 +12509,7 @@ else if (has_alternatives) SLJIT_ASSERT(CURRENT_AS(bracket_backtrack)->u.matching_put_label); sljit_set_put_label(CURRENT_AS(bracket_backtrack)->u.matching_put_label, LABEL()); + sljit_emit_op0(compiler, SLJIT_ENDBR); } else next_alt = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, 0); @@ -12298,6 +12576,9 @@ if (has_alternatives) if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler))) return; + if (opcode == OP_ASSERT_NA || opcode == OP_ASSERTBACK_NA) + OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); + if (opcode == OP_SCRIPT_RUN) match_script_run_common(common, private_data_ptr, current); } @@ -12379,7 +12660,10 @@ if (has_alternatives) } } else + { sljit_set_put_label(put_label, LABEL()); + sljit_emit_op0(compiler, SLJIT_ENDBR); + } } COMPILE_BACKTRACKINGPATH(current->top); @@ -12427,7 +12711,7 @@ if (offset != 0) OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP1, 0); } } -else if (opcode == OP_SCRIPT_RUN || opcode == OP_SBRA || opcode == OP_SCOND) +else if (opcode == OP_ASSERT_NA || opcode == OP_ASSERTBACK_NA || opcode == OP_SCRIPT_RUN || opcode == OP_SBRA || opcode == OP_SCOND) { OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), STACK(0)); free_stack(common, 1); @@ -12775,6 +13059,8 @@ while (current) compile_assert_backtrackingpath(common, current); break; + case OP_ASSERT_NA: + case OP_ASSERTBACK_NA: case OP_ONCE: case OP_SCRIPT_RUN: case OP_BRA: @@ -12872,7 +13158,7 @@ jump_list *match = NULL; struct sljit_jump *next_alt = NULL; struct sljit_jump *accept_exit = NULL; struct sljit_label *quit; -struct sljit_put_label *put_label; +struct sljit_put_label *put_label = NULL; /* Recurse captures then. */ common->then_trap = NULL; @@ -12969,6 +13255,7 @@ while (1) { sljit_emit_ijump(compiler, SLJIT_JUMP, TMP1, 0); sljit_set_put_label(put_label, LABEL()); + sljit_emit_op0(compiler, SLJIT_ENDBR); } else next_alt = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, 0); @@ -12977,7 +13264,10 @@ while (1) free_stack(common, has_accept ? 2 : 1); } else if (alt_max > 3) + { sljit_set_put_label(put_label, LABEL()); + sljit_emit_op0(compiler, SLJIT_ENDBR); + } else { JUMPHERE(next_alt); @@ -13011,7 +13301,7 @@ copy_recurse_data(common, ccbegin, ccend, recurse_copy_private_to_global, local_ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(local_size - 1)); free_stack(common, private_data_size + local_size); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0); -sljit_emit_fast_return(compiler, TMP2, 0); +OP_SRC(SLJIT_FAST_RETURN, TMP2, 0); if (common->quit != NULL) { @@ -13036,7 +13326,7 @@ if (has_accept) OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(local_size - 1)); free_stack(common, private_data_size + local_size); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0); - sljit_emit_fast_return(compiler, TMP2, 0); + OP_SRC(SLJIT_FAST_RETURN, TMP2, 0); } if (common->accept != NULL) @@ -13060,7 +13350,7 @@ copy_recurse_data(common, ccbegin, ccend, recurse_swap_global, local_size, priva OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP2), STACK(local_size - 1)); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 1); -sljit_emit_fast_return(compiler, TMP2, 0); +OP_SRC(SLJIT_FAST_RETURN, TMP2, 0); } #undef COMPILE_BACKTRACKINGPATH @@ -13092,9 +13382,9 @@ struct sljit_label *reset_match_label; struct sljit_label *quit_label; struct sljit_jump *jump; struct sljit_jump *minlength_check_failed = NULL; -struct sljit_jump *reqbyte_notfound = NULL; struct sljit_jump *empty_match = NULL; struct sljit_jump *end_anchor_failed = NULL; +jump_list *reqcu_not_found = NULL; SLJIT_ASSERT(tables); @@ -13122,8 +13412,8 @@ common->read_only_data_head = NULL; common->fcc = tables + fcc_offset; common->lcc = (sljit_sw)(tables + lcc_offset); common->mode = mode; -common->might_be_empty = re->minlength == 0; -common->allow_empty_partial = (re->max_lookbehind > 0) || (re->flags & PCRE2_MATCH_EMPTY) != 0; +common->might_be_empty = (re->minlength == 0) || (re->flags & PCRE2_MATCH_EMPTY); +common->allow_empty_partial = (re->max_lookbehind > 0) || (re->flags & PCRE2_MATCH_EMPTY); common->nltype = NLTYPE_FIXED; switch(re->newline_convention) { @@ -13160,7 +13450,7 @@ common->alt_circumflex = (re->overall_options & PCRE2_ALT_CIRCUMFLEX) != 0; #ifdef SUPPORT_UNICODE /* PCRE_UTF[16|32] have the same value as PCRE_UTF8. */ common->utf = (re->overall_options & PCRE2_UTF) != 0; -common->use_ucp = (re->overall_options & PCRE2_UCP) != 0; +common->ucp = (re->overall_options & PCRE2_UCP) != 0; if (common->utf) { if (common->nltype == NLTYPE_ANY) @@ -13272,13 +13562,10 @@ memset(common->private_data_ptrs, 0, total_length * sizeof(sljit_s32)); private_data_size = common->cbra_ptr + (re->top_bracket + 1) * sizeof(sljit_sw); set_private_data_ptrs(common, &private_data_size, ccend); -if ((re->overall_options & PCRE2_ANCHORED) == 0 && (re->overall_options & PCRE2_NO_START_OPTIMIZE) == 0) - { - if (!detect_fast_forward_skip(common, &private_data_size) && !common->has_skip_in_assert_back) - detect_fast_fail(common, common->start, &private_data_size, 4); - } +if ((re->overall_options & PCRE2_ANCHORED) == 0 && (re->overall_options & PCRE2_NO_START_OPTIMIZE) == 0 && !common->has_skip_in_assert_back) + detect_early_fail(common, common->start, &private_data_size, 0, 0); -SLJIT_ASSERT(common->fast_fail_start_ptr <= common->fast_fail_end_ptr); +SLJIT_ASSERT(common->early_fail_start_ptr <= common->early_fail_end_ptr); if (private_data_size > SLJIT_MAX_LOCAL_SIZE) { @@ -13322,8 +13609,8 @@ OP1(SLJIT_MOV, STACK_LIMIT, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(struct sljit_sta OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 1); OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LIMIT_MATCH, TMP1, 0); -if (common->fast_fail_start_ptr < common->fast_fail_end_ptr) - reset_fast_fail(common); +if (common->early_fail_start_ptr < common->early_fail_end_ptr) + reset_early_fail(common); if (mode == PCRE2_JIT_PARTIAL_SOFT) OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->hit_start, SLJIT_IMM, -1); @@ -13360,7 +13647,7 @@ if (mode == PCRE2_JIT_COMPLETE && re->minlength > 0 && (re->overall_options & PC minlength_check_failed = CMP(SLJIT_GREATER, TMP2, 0, STR_END, 0); } if (common->req_char_ptr != 0) - reqbyte_notfound = search_requested_char(common, (PCRE2_UCHAR)(re->last_codeunit), (re->flags & PCRE2_LASTCASELESS) != 0, (re->flags & PCRE2_FIRSTSET) != 0); + reqcu_not_found = search_requested_char(common, (PCRE2_UCHAR)(re->last_codeunit), (re->flags & PCRE2_LASTCASELESS) != 0, (re->flags & PCRE2_FIRSTSET) != 0); /* Store the current STR_PTR in OVECTOR(0). */ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(0), STR_PTR, 0); @@ -13369,7 +13656,7 @@ OP1(SLJIT_MOV, COUNT_MATCH, 0, SLJIT_MEM1(SLJIT_SP), LIMIT_MATCH); if (common->capture_last_ptr != 0) OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr, SLJIT_IMM, 0); if (common->fast_forward_bc_ptr != NULL) - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), PRIVATE_DATA(common->fast_forward_bc_ptr + 1), STR_PTR, 0); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), PRIVATE_DATA(common->fast_forward_bc_ptr + 1) >> 3, STR_PTR, 0); if (common->start_ptr != OVECTOR(0)) OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->start_ptr, STR_PTR, 0); @@ -13416,6 +13703,8 @@ if (common->abort != NULL) set_jumps(common->abort, common->abort_label); if (minlength_check_failed != NULL) SET_LABEL(minlength_check_failed, common->abort_label); + +sljit_emit_op0(compiler, SLJIT_SKIP_FRAMES_BEFORE_RETURN); sljit_emit_return(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0); if (common->failed_match != NULL) @@ -13468,7 +13757,7 @@ if ((re->overall_options & PCRE2_ANCHORED) == 0 && common->match_end_ptr != 0) } OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), - (common->fast_forward_bc_ptr != NULL) ? (PRIVATE_DATA(common->fast_forward_bc_ptr + 1)) : common->start_ptr); + (common->fast_forward_bc_ptr != NULL) ? (PRIVATE_DATA(common->fast_forward_bc_ptr + 1) >> 3) : common->start_ptr); if ((re->overall_options & PCRE2_ANCHORED) == 0) { @@ -13493,8 +13782,8 @@ if ((re->overall_options & PCRE2_ANCHORED) == 0) } /* No more remaining characters. */ -if (reqbyte_notfound != NULL) - JUMPHERE(reqbyte_notfound); +if (reqcu_not_found != NULL) + set_jumps(reqcu_not_found, LABEL()); if (mode == PCRE2_JIT_PARTIAL_SOFT) CMPTO(SLJIT_NOT_EQUAL, SLJIT_MEM1(SLJIT_SP), common->hit_start, SLJIT_IMM, -1, common->partialmatchlabel); @@ -13519,8 +13808,8 @@ if (common->might_be_empty) } common->fast_forward_bc_ptr = NULL; -common->fast_fail_start_ptr = 0; -common->fast_fail_end_ptr = 0; +common->early_fail_start_ptr = 0; +common->early_fail_end_ptr = 0; common->currententry = common->entries; common->local_quit_available = TRUE; quit_label = common->quit_label; @@ -13563,7 +13852,7 @@ OP1(SLJIT_MOV, TMP2, 0, STACK_LIMIT, 0); OP1(SLJIT_MOV, STACK_LIMIT, 0, SLJIT_RETURN_REG, 0); OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0); OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), LOCALS1); -sljit_emit_fast_return(compiler, TMP1, 0); +OP_SRC(SLJIT_FAST_RETURN, TMP1, 0); /* Allocation failed. */ JUMPHERE(jump); @@ -13742,11 +14031,6 @@ pcre2_jit_compile(pcre2_code *code, uint32_t options) { pcre2_real_code *re = (pcre2_real_code *)code; -#ifdef SUPPORT_JIT -executable_functions *functions = (executable_functions *)re->executable_jit; -static int executable_allocator_is_working = 0; -#endif - if (code == NULL) return PCRE2_ERROR_NULL; @@ -13779,6 +14063,11 @@ actions are needed: avoid compiler warnings. */ +#ifdef SUPPORT_JIT +executable_functions *functions = (executable_functions *)re->executable_jit; +static int executable_allocator_is_working = 0; +#endif + if ((options & PCRE2_JIT_INVALID_UTF) != 0) { if ((re->overall_options & PCRE2_MATCH_INVALID_UTF) == 0) diff --git a/ext/pcre/pcre2lib/pcre2_jit_misc.c b/ext/pcre/pcre2lib/pcre2_jit_misc.c index efdb05580f565..36abdbaf9c536 100644 --- a/ext/pcre/pcre2lib/pcre2_jit_misc.c +++ b/ext/pcre/pcre2lib/pcre2_jit_misc.c @@ -145,6 +145,11 @@ maxsize = (maxsize + STACK_GROWTH_RATE - 1) & ~(STACK_GROWTH_RATE - 1); jit_stack = PRIV(memctl_malloc)(sizeof(pcre2_real_jit_stack), (pcre2_memctl *)gcontext); if (jit_stack == NULL) return NULL; jit_stack->stack = sljit_allocate_stack(startsize, maxsize, &jit_stack->memctl); +if (jit_stack->stack == NULL) + { + jit_stack->memctl.free(jit_stack, jit_stack->memctl.memory_data); + return NULL; + } return jit_stack; #endif diff --git a/ext/pcre/pcre2lib/pcre2_jit_neon_inc.h b/ext/pcre/pcre2lib/pcre2_jit_neon_inc.h index 0265f36a0b309..66373b6cb0e05 100644 --- a/ext/pcre/pcre2lib/pcre2_jit_neon_inc.h +++ b/ext/pcre/pcre2lib/pcre2_jit_neon_inc.h @@ -215,7 +215,7 @@ if (p1 < str_ptr) } else data2 = shift_left_n_lanes(data, offs1 - offs2); - + if (compare1_type == compare_match1) data = VCEQQ(data, cmp1a); else diff --git a/ext/pcre/pcre2lib/pcre2_jit_simd_inc.h b/ext/pcre/pcre2lib/pcre2_jit_simd_inc.h index f7d56b29f8d07..5673d338c016c 100644 --- a/ext/pcre/pcre2lib/pcre2_jit_simd_inc.h +++ b/ext/pcre/pcre2lib/pcre2_jit_simd_inc.h @@ -344,6 +344,136 @@ if (common->utf && offset > 0) #endif } +#define JIT_HAS_FAST_REQUESTED_CHAR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_SSE2)) + +static jump_list *fast_requested_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2) +{ +DEFINE_COMPILER; +struct sljit_label *start; +struct sljit_jump *quit; +jump_list *not_found = NULL; +sse2_compare_type compare_type = sse2_compare_match1; +sljit_u8 instruction[8]; +sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1); +sljit_s32 str_ptr_reg_ind = sljit_get_register_index(STR_PTR); +sljit_s32 data_ind = 0; +sljit_s32 tmp_ind = 1; +sljit_s32 cmp1_ind = 2; +sljit_s32 cmp2_ind = 3; +sljit_u32 bit = 0; +int i; + +if (char1 != char2) + { + bit = char1 ^ char2; + compare_type = sse2_compare_match1i; + + if (!is_powerof2(bit)) + { + bit = 0; + compare_type = sse2_compare_match2; + } + } + +add_jump(compiler, ¬_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0)); +OP1(SLJIT_MOV, TMP2, 0, TMP1, 0); +OP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0); + +/* First part (unaligned start) */ + +OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char1 | bit)); + +SLJIT_ASSERT(tmp1_reg_ind < 8); + +/* MOVD xmm, r/m32 */ +instruction[0] = 0x66; +instruction[1] = 0x0f; +instruction[2] = 0x6e; +instruction[3] = 0xc0 | (cmp1_ind << 3) | tmp1_reg_ind; +sljit_emit_op_custom(compiler, instruction, 4); + +if (char1 != char2) + { + OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(bit != 0 ? bit : char2)); + + /* MOVD xmm, r/m32 */ + instruction[3] = 0xc0 | (cmp2_ind << 3) | tmp1_reg_ind; + sljit_emit_op_custom(compiler, instruction, 4); + } + +OP1(SLJIT_MOV, STR_PTR, 0, TMP2, 0); + +/* PSHUFD xmm1, xmm2/m128, imm8 */ +/* instruction[0] = 0x66; */ +/* instruction[1] = 0x0f; */ +instruction[2] = 0x70; +instruction[3] = 0xc0 | (cmp1_ind << 3) | cmp1_ind; +instruction[4] = 0; +sljit_emit_op_custom(compiler, instruction, 5); + +if (char1 != char2) + { + /* PSHUFD xmm1, xmm2/m128, imm8 */ + instruction[3] = 0xc0 | (cmp2_ind << 3) | cmp2_ind; + sljit_emit_op_custom(compiler, instruction, 5); + } + +OP2(SLJIT_AND, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, ~0xf); +OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xf); + +load_from_mem_sse2(compiler, data_ind, str_ptr_reg_ind, 0); +for (i = 0; i < 4; i++) + fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + +/* PMOVMSKB reg, xmm */ +/* instruction[0] = 0x66; */ +/* instruction[1] = 0x0f; */ +instruction[2] = 0xd7; +instruction[3] = 0xc0 | (tmp1_reg_ind << 3) | data_ind; +sljit_emit_op_custom(compiler, instruction, 4); + +OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0); +OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, TMP2, 0); + +quit = CMP(SLJIT_NOT_ZERO, TMP1, 0, SLJIT_IMM, 0); + +OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0); + +/* Second part (aligned) */ +start = LABEL(); + +OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16); + +add_jump(compiler, ¬_found, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0)); + +load_from_mem_sse2(compiler, data_ind, str_ptr_reg_ind, 0); +for (i = 0; i < 4; i++) + fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + +/* PMOVMSKB reg, xmm */ +/* instruction[0] = 0x66; */ +/* instruction[1] = 0x0f; */ +instruction[2] = 0xd7; +instruction[3] = 0xc0 | (tmp1_reg_ind << 3) | data_ind; +sljit_emit_op_custom(compiler, instruction, 4); + +CMPTO(SLJIT_ZERO, TMP1, 0, SLJIT_IMM, 0, start); + +JUMPHERE(quit); + +/* BSF r32, r/m32 */ +instruction[0] = 0x0f; +instruction[1] = 0xbc; +instruction[2] = 0xc0 | (tmp1_reg_ind << 3) | tmp1_reg_ind; +sljit_emit_op_custom(compiler, instruction, 3); + +OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, STR_PTR, 0); +add_jump(compiler, ¬_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0)); + +OP1(SLJIT_MOV, STR_PTR, 0, TMP3, 0); +return not_found; +} + #ifndef _WIN64 static SLJIT_INLINE sljit_u32 max_fast_forward_char_pair_offset(void) diff --git a/ext/pcre/pcre2lib/pcre2_maketables.c b/ext/pcre/pcre2lib/pcre2_maketables.c index 8c93b4b57373e..56d24940232e1 100644 --- a/ext/pcre/pcre2lib/pcre2_maketables.c +++ b/ext/pcre/pcre2lib/pcre2_maketables.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2019 University of Cambridge + New API code Copyright (c) 2016-2020 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -41,10 +41,11 @@ POSSIBILITY OF SUCH DAMAGE. /* This module contains the external function pcre2_maketables(), which builds character tables for PCRE2 in the current locale. The file is compiled on its -own as part of the PCRE2 library. However, it is also included in the -compilation of dftables.c, in which case the macro DFTABLES is defined. */ +own as part of the PCRE2 library. It is also included in the compilation of +pcre2_dftables.c as a freestanding program, in which case the macro +PCRE2_DFTABLES is defined. */ -#ifndef DFTABLES +#ifndef PCRE2_DFTABLES /* Compiling the library */ # ifdef HAVE_CONFIG_H # include "config.h" # endif @@ -61,28 +62,29 @@ compilation of dftables.c, in which case the macro DFTABLES is defined. */ a pointer to them. They are build using the ctype functions, and consequently their contents will depend upon the current locale setting. When compiled as part of the library, the store is obtained via a general context malloc, if -supplied, but when DFTABLES is defined (when compiling the dftables auxiliary -program) malloc() is used, and the function has a different name so as not to -clash with the prototype in pcre2.h. +supplied, but when PCRE2_DFTABLES is defined (when compiling the pcre2_dftables +freestanding auxiliary program) malloc() is used, and the function has a +different name so as not to clash with the prototype in pcre2.h. -Arguments: none when DFTABLES is defined - else a PCRE2 general context or NULL +Arguments: none when PCRE2_DFTABLES is defined + else a PCRE2 general context or NULL Returns: pointer to the contiguous block of data + else NULL if memory allocation failed */ -#ifdef DFTABLES /* Included in freestanding dftables.c program */ +#ifdef PCRE2_DFTABLES /* Included in freestanding pcre2_dftables program */ static const uint8_t *maketables(void) { -uint8_t *yield = (uint8_t *)malloc(tables_length); +uint8_t *yield = (uint8_t *)malloc(TABLES_LENGTH); -#else /* Not DFTABLES, compiling the library */ +#else /* Not PCRE2_DFTABLES, that is, compiling the library */ PCRE2_EXP_DEFN const uint8_t * PCRE2_CALL_CONVENTION pcre2_maketables(pcre2_general_context *gcontext) { uint8_t *yield = (uint8_t *)((gcontext != NULL)? - gcontext->memctl.malloc(tables_length, gcontext->memctl.memory_data) : - malloc(tables_length)); -#endif /* DFTABLES */ + gcontext->memctl.malloc(TABLES_LENGTH, gcontext->memctl.memory_data) : + malloc(TABLES_LENGTH)); +#endif /* PCRE2_DFTABLES */ int i; uint8_t *p; @@ -103,8 +105,8 @@ exclusive ones - in some locales things may be different. Note that the table for "space" includes everything "isspace" gives, including VT in the default locale. This makes it work for the POSIX class [:space:]. -From release 8.34 is is also correct for Perl space, because Perl added VT at -release 5.18. +From PCRE1 release 8.34 and for all PCRE2 releases it is also correct for Perl +space, because Perl added VT at release 5.18. Note also that it is possible for a character to be alnum or alpha without being lower or upper, such as "male and female ordinals" (\xAA and \xBA) in the @@ -114,24 +116,24 @@ test for alnum specially. */ memset(p, 0, cbit_length); for (i = 0; i < 256; i++) { - if (isdigit(i)) p[cbit_digit + i/8] |= 1u << (i&7); - if (isupper(i)) p[cbit_upper + i/8] |= 1u << (i&7); - if (islower(i)) p[cbit_lower + i/8] |= 1u << (i&7); - if (isalnum(i)) p[cbit_word + i/8] |= 1u << (i&7); - if (i == '_') p[cbit_word + i/8] |= 1u << (i&7); - if (isspace(i)) p[cbit_space + i/8] |= 1u << (i&7); - if (isxdigit(i))p[cbit_xdigit + i/8] |= 1u << (i&7); - if (isgraph(i)) p[cbit_graph + i/8] |= 1u << (i&7); - if (isprint(i)) p[cbit_print + i/8] |= 1u << (i&7); - if (ispunct(i)) p[cbit_punct + i/8] |= 1u << (i&7); - if (iscntrl(i)) p[cbit_cntrl + i/8] |= 1u << (i&7); + if (isdigit(i)) p[cbit_digit + i/8] |= 1u << (i&7); + if (isupper(i)) p[cbit_upper + i/8] |= 1u << (i&7); + if (islower(i)) p[cbit_lower + i/8] |= 1u << (i&7); + if (isalnum(i)) p[cbit_word + i/8] |= 1u << (i&7); + if (i == '_') p[cbit_word + i/8] |= 1u << (i&7); + if (isspace(i)) p[cbit_space + i/8] |= 1u << (i&7); + if (isxdigit(i)) p[cbit_xdigit + i/8] |= 1u << (i&7); + if (isgraph(i)) p[cbit_graph + i/8] |= 1u << (i&7); + if (isprint(i)) p[cbit_print + i/8] |= 1u << (i&7); + if (ispunct(i)) p[cbit_punct + i/8] |= 1u << (i&7); + if (iscntrl(i)) p[cbit_cntrl + i/8] |= 1u << (i&7); } p += cbit_length; /* Finally, the character type table. In this, we used to exclude VT from the white space chars, because Perl didn't recognize it as such for \s and for -comments within regexes. However, Perl changed at release 5.18, so PCRE changed -at release 8.34. */ +comments within regexes. However, Perl changed at release 5.18, so PCRE1 +changed at release 8.34 and it's always been this way for PCRE2. */ for (i = 0; i < 256; i++) { @@ -147,7 +149,7 @@ for (i = 0; i < 256; i++) return yield; } -#ifndef DFTABLES +#ifndef PCRE2_DFTABLES /* Compiling the library */ PCRE2_EXP_DEFN void PCRE2_CALL_CONVENTION pcre2_maketables_free(pcre2_general_context *gcontext, const uint8_t *tables) { diff --git a/ext/pcre/pcre2lib/pcre2_match.c b/ext/pcre/pcre2lib/pcre2_match.c index 48e7b9dbb2c40..11289d575d08d 100644 --- a/ext/pcre/pcre2lib/pcre2_match.c +++ b/ext/pcre/pcre2lib/pcre2_match.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2015-2019 University of Cambridge + New API code Copyright (c) 2015-2020 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -381,8 +381,12 @@ length = Fovector[offset+1] - Fovector[offset]; if (caseless) { #if defined SUPPORT_UNICODE - if ((mb->poptions & PCRE2_UTF) != 0) + BOOL utf = (mb->poptions & PCRE2_UTF) != 0; + + if (utf || (mb->poptions & PCRE2_UCP) != 0) { + PCRE2_SPTR endptr = p + length; + /* Match characters up to the end of the reference. NOTE: the number of code units matched may differ, because in UTF-8 there are some characters whose upper and lower case codes have different numbers of bytes. For @@ -390,16 +394,25 @@ if (caseless) bytes in UTF-8); a sequence of 3 of the former uses 6 bytes, as does a sequence of two of the latter. It is important, therefore, to check the length along the reference, not along the subject (earlier code did this - wrong). */ + wrong). UCP without uses Unicode properties but without UTF encoding. */ - PCRE2_SPTR endptr = p + length; while (p < endptr) { uint32_t c, d; const ucd_record *ur; if (eptr >= mb->end_subject) return 1; /* Partial match */ - GETCHARINC(c, eptr); - GETCHARINC(d, p); + + if (utf) + { + GETCHARINC(c, eptr); + GETCHARINC(d, p); + } + else + { + c = *eptr++; + d = *p++; + } + ur = GET_UCD(d); if (c != d && c != (uint32_t)((int)d + ur->other_case)) { @@ -415,7 +428,7 @@ if (caseless) else #endif - /* Not in UTF mode */ + /* Not in UTF or UCP mode */ { for (; length > 0; length--) { @@ -432,7 +445,8 @@ if (caseless) } /* In the caseful case, we can just compare the code units, whether or not we -are in UTF mode. When partial matching, we have to do this unit-by-unit. */ +are in UTF and/or UCP mode. When partial matching, we have to do this unit by +unit. */ else { @@ -574,8 +588,8 @@ match(PCRE2_SPTR start_eptr, PCRE2_SPTR start_ecode, PCRE2_SIZE *ovector, heapframe *F; /* Current frame pointer */ heapframe *N = NULL; /* Temporary frame pointers */ heapframe *P = NULL; -heapframe *assert_accept_frame; /* For passing back the frame with captures */ -PCRE2_SIZE frame_copy_size; /* Amount to copy when creating a new frame */ +heapframe *assert_accept_frame = NULL; /* For passing back a frame with captures */ +PCRE2_SIZE frame_copy_size; /* Amount to copy when creating a new frame */ /* Local variables that do not need to be preserved over calls to RRMATCH(). */ @@ -598,12 +612,13 @@ BOOL condition; /* Used in conditional groups */ BOOL cur_is_word; /* Used in "word" tests */ BOOL prev_is_word; /* Used in "word" tests */ -/* UTF flag */ +/* UTF and UCP flags */ #ifdef SUPPORT_UNICODE BOOL utf = (mb->poptions & PCRE2_UTF) != 0; +BOOL ucp = (mb->poptions & PCRE2_UCP) != 0; #else -BOOL utf = FALSE; +BOOL utf = FALSE; /* Required for convenience even when no Unicode support */ #endif /* This is the length of the last part of a backtracking frame that must be @@ -928,6 +943,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); } else #endif + /* Not UTF mode */ { if (mb->end_subject - Feptr < 1) @@ -987,10 +1003,30 @@ fprintf(stderr, "++ op=%d\n", *Fecode); if (dc != fc && dc != UCD_OTHERCASE(fc)) RRETURN(MATCH_NOMATCH); } } + + /* If UCP is set without UTF we must do the same as above, but with one + character per code unit. */ + + else if (ucp) + { + uint32_t cc = UCHAR21(Feptr); + fc = Fecode[1]; + if (fc < 128) + { + if (mb->lcc[fc] != TABLE_GET(cc, mb->lcc, cc)) RRETURN(MATCH_NOMATCH); + } + else + { + if (cc != fc && cc != UCD_OTHERCASE(fc)) RRETURN(MATCH_NOMATCH); + } + Feptr++; + Fecode += 2; + } + else #endif /* SUPPORT_UNICODE */ - /* Not UTF mode; use the table for characters < 256. */ + /* Not UTF or UCP mode; use the table for characters < 256. */ { if (TABLE_GET(Fecode[1], mb->lcc, Fecode[1]) != TABLE_GET(*Feptr, mb->lcc, *Feptr)) RRETURN(MATCH_NOMATCH); @@ -1010,6 +1046,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } + #ifdef SUPPORT_UNICODE if (utf) { @@ -1026,15 +1063,42 @@ fprintf(stderr, "++ op=%d\n", *Fecode); if (ch > 127) ch = UCD_OTHERCASE(ch); else - ch = TABLE_GET(ch, mb->fcc, ch); + ch = (mb->fcc)[ch]; + if (ch == fc) RRETURN(MATCH_NOMATCH); + } + } + + /* UCP without UTF is as above, but with one character per code unit. */ + + else if (ucp) + { + uint32_t ch; + fc = UCHAR21INC(Feptr); + ch = Fecode[1]; + Fecode += 2; + + if (ch == fc) + { + RRETURN(MATCH_NOMATCH); /* Caseful match */ + } + else if (Fop == OP_NOTI) /* If caseless */ + { + if (ch > 127) + ch = UCD_OTHERCASE(ch); + else + ch = (mb->fcc)[ch]; if (ch == fc) RRETURN(MATCH_NOMATCH); } } + else #endif /* SUPPORT_UNICODE */ + + /* Neither UTF nor UCP is set */ + { uint32_t ch = Fecode[1]; - fc = *Feptr++; + fc = UCHAR21INC(Feptr); if (ch == fc || (Fop == OP_NOTI && TABLE_GET(ch, mb->fcc, ch) == fc)) RRETURN(MATCH_NOMATCH); Fecode += 2; @@ -1244,7 +1308,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); #endif /* SUPPORT_UNICODE */ /* When not in UTF mode, load a single-code-unit character. Then proceed as - above. */ + above, using Unicode casing if either UTF or UCP is set. */ Lc = *Fecode++; @@ -1253,11 +1317,15 @@ fprintf(stderr, "++ op=%d\n", *Fecode); if (Fop >= OP_STARI) { #if PCRE2_CODE_UNIT_WIDTH == 8 - /* Lc must be < 128 in UTF-8 mode. */ +#ifdef SUPPORT_UNICODE + if (ucp && !utf && Lc > 127) Loc = UCD_OTHERCASE(Lc); + else +#endif /* SUPPORT_UNICODE */ + /* Lc will be < 128 in UTF-8 mode. */ Loc = mb->fcc[Lc]; #else /* 16-bit & 32-bit */ #ifdef SUPPORT_UNICODE - if (utf && Lc > 127) Loc = UCD_OTHERCASE(Lc); + if ((utf || ucp) && Lc > 127) Loc = UCD_OTHERCASE(Lc); else #endif /* SUPPORT_UNICODE */ Loc = TABLE_GET(Lc, mb->fcc, Lc); @@ -1490,7 +1558,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); if (Fop >= OP_NOTSTARI) /* Caseless */ { #ifdef SUPPORT_UNICODE - if (utf && Lc > 127) + if ((utf || ucp) && Lc > 127) Loc = UCD_OTHERCASE(Lc); else #endif /* SUPPORT_UNICODE */ @@ -6045,7 +6113,6 @@ BOOL firstline; BOOL has_first_cu = FALSE; BOOL has_req_cu = FALSE; BOOL startline; -BOOL utf; #if PCRE2_CODE_UNIT_WIDTH == 8 BOOL memchr_not_found_first_cu = FALSE; @@ -6069,13 +6136,19 @@ PCRE2_SPTR match_partial; BOOL use_jit; #endif +/* This flag is needed even when Unicode is not supported for convenience +(it is used by the IS_NEWLINE macro). */ + +BOOL utf = FALSE; + #ifdef SUPPORT_UNICODE +BOOL ucp = FALSE; BOOL allow_invalid; uint32_t fragment_options = 0; #ifdef SUPPORT_JIT BOOL jit_checked_utf = FALSE; #endif -#endif +#endif /* SUPPORT_UNICODE */ PCRE2_SIZE frame_size; @@ -6091,7 +6164,8 @@ proves to be too small, it is replaced by a larger one on the heap. To get a vector of the size required that is aligned for pointers, allocate it as a vector of pointers. */ -PCRE2_SPTR stack_frames_vector[START_FRAMES_SIZE/sizeof(PCRE2_SPTR)]; +PCRE2_SPTR stack_frames_vector[START_FRAMES_SIZE/sizeof(PCRE2_SPTR)] + PCRE2_KEEP_UNINITIALIZED; mb->stack_frames = (heapframe *)stack_frames_vector; /* A length equal to PCRE2_ZERO_TERMINATED implies a zero-terminated @@ -6147,12 +6221,13 @@ use_jit = (re->executable_jit != NULL && (options & ~PUBLIC_JIT_MATCH_OPTIONS) == 0); #endif -/* Initialize UTF parameters. */ +/* Initialize UTF/UCP parameters. */ -utf = (re->overall_options & PCRE2_UTF) != 0; #ifdef SUPPORT_UNICODE +utf = (re->overall_options & PCRE2_UTF) != 0; allow_invalid = (re->overall_options & PCRE2_MATCH_INVALID_UTF) != 0; -#endif +ucp = (re->overall_options & PCRE2_UCP) != 0; +#endif /* SUPPORT_UNICODE */ /* Convert the partial matching flags into an integer. */ @@ -6589,9 +6664,13 @@ if ((re->flags & PCRE2_FIRSTSET) != 0) if ((re->flags & PCRE2_FIRSTCASELESS) != 0) { first_cu2 = TABLE_GET(first_cu, mb->fcc, first_cu); -#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 8 - if (utf && first_cu > 127) first_cu2 = UCD_OTHERCASE(first_cu); +#ifdef SUPPORT_UNICODE +#if PCRE2_CODE_UNIT_WIDTH == 8 + if (first_cu > 127 && ucp && !utf) first_cu2 = UCD_OTHERCASE(first_cu); +#else + if (first_cu > 127 && (utf || ucp)) first_cu2 = UCD_OTHERCASE(first_cu); #endif +#endif /* SUPPORT_UNICODE */ } } else @@ -6607,9 +6686,13 @@ if ((re->flags & PCRE2_LASTSET) != 0) if ((re->flags & PCRE2_LASTCASELESS) != 0) { req_cu2 = TABLE_GET(req_cu, mb->fcc, req_cu); -#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 8 - if (utf && req_cu > 127) req_cu2 = UCD_OTHERCASE(req_cu); +#ifdef SUPPORT_UNICODE +#if PCRE2_CODE_UNIT_WIDTH == 8 + if (req_cu > 127 && ucp && !utf) req_cu2 = UCD_OTHERCASE(req_cu); +#else + if (req_cu > 127 && (utf || ucp)) req_cu2 = UCD_OTHERCASE(req_cu); #endif +#endif /* SUPPORT_UNICODE */ } } @@ -6756,15 +6839,16 @@ for(;;) #endif } - /* If we can't find the required code unit, having reached the true end - of the subject, break the bumpalong loop, to force a match failure, - except when doing partial matching, when we let the next cycle run at - the end of the subject. To see why, consider the pattern /(?<=abc)def/, - which partially matches "abc", even though the string does not contain - the starting character "d". If we have not reached the true end of the - subject (PCRE2_FIRSTLINE caused end_subject to be temporarily modified) - we also let the cycle run, because the matching string is legitimately - allowed to start with the first code unit of a newline. */ + /* If we can't find the required first code unit, having reached the + true end of the subject, break the bumpalong loop, to force a match + failure, except when doing partial matching, when we let the next cycle + run at the end of the subject. To see why, consider the pattern + /(?<=abc)def/, which partially matches "abc", even though the string + does not contain the starting character "d". If we have not reached the + true end of the subject (PCRE2_FIRSTLINE caused end_subject to be + temporarily modified) we also let the cycle run, because the matching + string is legitimately allowed to start with the first code unit of a + newline. */ if (mb->partial == 0 && start_match >= mb->end_subject) { diff --git a/ext/pcre/pcre2lib/pcre2_serialize.c b/ext/pcre/pcre2lib/pcre2_serialize.c index cec1a035d19d1..ba17a26d2eeb2 100644 --- a/ext/pcre/pcre2lib/pcre2_serialize.c +++ b/ext/pcre/pcre2lib/pcre2_serialize.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2018 University of Cambridge + New API code Copyright (c) 2016-2020 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -90,7 +90,7 @@ if (codes == NULL || serialized_bytes == NULL || serialized_size == NULL) if (number_of_codes <= 0) return PCRE2_ERROR_BADDATA; /* Compute total size. */ -total_size = sizeof(pcre2_serialized_data) + tables_length; +total_size = sizeof(pcre2_serialized_data) + TABLES_LENGTH; tables = NULL; for (i = 0; i < number_of_codes; i++) @@ -121,8 +121,8 @@ data->number_of_codes = number_of_codes; /* Copy all compiled code data. */ dst_bytes = bytes + sizeof(pcre2_serialized_data); -memcpy(dst_bytes, tables, tables_length); -dst_bytes += tables_length; +memcpy(dst_bytes, tables, TABLES_LENGTH); +dst_bytes += TABLES_LENGTH; for (i = 0; i < number_of_codes; i++) { @@ -189,12 +189,12 @@ src_bytes = bytes + sizeof(pcre2_serialized_data); /* Decode tables. The reference count for the tables is stored immediately following them. */ -tables = memctl->malloc(tables_length + sizeof(PCRE2_SIZE), memctl->memory_data); +tables = memctl->malloc(TABLES_LENGTH + sizeof(PCRE2_SIZE), memctl->memory_data); if (tables == NULL) return PCRE2_ERROR_NOMEMORY; -memcpy(tables, src_bytes, tables_length); -*(PCRE2_SIZE *)(tables + tables_length) = number_of_codes; -src_bytes += tables_length; +memcpy(tables, src_bytes, TABLES_LENGTH); +*(PCRE2_SIZE *)(tables + TABLES_LENGTH) = number_of_codes; +src_bytes += TABLES_LENGTH; /* Decode the byte stream. We must not try to read the size from the compiled code block in the stream, because it might be unaligned, which causes errors on diff --git a/ext/pcre/pcre2lib/pcre2_study.c b/ext/pcre/pcre2lib/pcre2_study.c index 2883868618d9c..9bbb37570f8e7 100644 --- a/ext/pcre/pcre2lib/pcre2_study.c +++ b/ext/pcre/pcre2lib/pcre2_study.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2019 University of Cambridge + New API code Copyright (c) 2016-2020 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -58,7 +58,7 @@ collecting data (e.g. minimum matching length). */ /* Returns from set_start_bits() */ -enum { SSB_FAIL, SSB_DONE, SSB_CONTINUE, SSB_UNKNOWN }; +enum { SSB_FAIL, SSB_DONE, SSB_CONTINUE, SSB_UNKNOWN, SSB_TOODEEP }; /************************************************* @@ -772,15 +772,19 @@ corresponding bit for the other version of a letter if we are caseless. p points to the first code unit of the character caseless TRUE if caseless utf TRUE for UTF mode + ucp TRUE for UCP mode Returns: pointer after the character */ static PCRE2_SPTR -set_table_bit(pcre2_real_code *re, PCRE2_SPTR p, BOOL caseless, BOOL utf) +set_table_bit(pcre2_real_code *re, PCRE2_SPTR p, BOOL caseless, BOOL utf, + BOOL ucp) { uint32_t c = *p++; /* First code unit */ -(void)utf; /* Stop compiler warning when UTF not supported */ + +(void)utf; /* Stop compiler warnings when UTF not supported */ +(void)ucp; /* In 16-bit and 32-bit modes, code units greater than 0xff set the bit for 0xff. */ @@ -810,22 +814,26 @@ if (utf) if (caseless) { #ifdef SUPPORT_UNICODE - if (utf) + if (utf || ucp) { -#if PCRE2_CODE_UNIT_WIDTH == 8 - PCRE2_UCHAR buff[6]; c = UCD_OTHERCASE(c); - (void)PRIV(ord2utf)(c, buff); - SET_BIT(buff[0]); +#if PCRE2_CODE_UNIT_WIDTH == 8 + if (utf) + { + PCRE2_UCHAR buff[6]; + (void)PRIV(ord2utf)(c, buff); + SET_BIT(buff[0]); + } + else if (c < 256) SET_BIT(c); #else /* 16-bit or 32-bit mode */ - c = UCD_OTHERCASE(c); if (c > 0xff) SET_BIT(0xff); else SET_BIT(c); #endif } + else #endif /* SUPPORT_UNICODE */ - /* Not UTF */ + /* Not UTF or UCP */ if (MAX_255(c)) SET_BIT(re->tables[fcc_offset + c]); } @@ -924,19 +932,26 @@ The SSB_CONTINUE return is useful for parenthesized groups in patterns such as must continue at the outer level to find at least one mandatory code unit. At the outermost level, this function fails unless the result is SSB_DONE. +We restrict recursion (for nested groups) to 1000 to avoid stack overflow +issues. + Arguments: re points to the compiled regex block code points to an expression utf TRUE if in UTF mode + ucp TRUE if in UCP mode + depthptr pointer to recurse depth Returns: SSB_FAIL => Failed to find any starting code units SSB_DONE => Found mandatory starting code units SSB_CONTINUE => Found optional starting code units SSB_UNKNOWN => Hit an unrecognized opcode + SSB_TOODEEP => Recursion is too deep */ static int -set_start_bits(pcre2_real_code *re, PCRE2_SPTR code, BOOL utf) +set_start_bits(pcre2_real_code *re, PCRE2_SPTR code, BOOL utf, BOOL ucp, + int *depthptr) { uint32_t c; int yield = SSB_DONE; @@ -947,6 +962,9 @@ int table_limit = utf? 16:32; int table_limit = 32; #endif +*depthptr += 1; +if (*depthptr > 1000) return SSB_TOODEEP; + do { BOOL try_next = TRUE; @@ -1103,13 +1121,17 @@ do case OP_SCRIPT_RUN: case OP_ASSERT: case OP_ASSERT_NA: - rc = set_start_bits(re, tcode, utf); - if (rc == SSB_FAIL || rc == SSB_UNKNOWN) return rc; - if (rc == SSB_DONE) try_next = FALSE; else + rc = set_start_bits(re, tcode, utf, ucp, depthptr); + if (rc == SSB_DONE) + { + try_next = FALSE; + } + else if (rc == SSB_CONTINUE) { do tcode += GET(tcode, 1); while (*tcode == OP_ALT); tcode += 1 + LINK_SIZE; } + else return rc; /* FAIL, UNKNOWN, or TOODEEP */ break; /* If we hit ALT or KET, it means we haven't found anything mandatory in @@ -1155,8 +1177,8 @@ do case OP_BRAZERO: case OP_BRAMINZERO: case OP_BRAPOSZERO: - rc = set_start_bits(re, ++tcode, utf); - if (rc == SSB_FAIL || rc == SSB_UNKNOWN) return rc; + rc = set_start_bits(re, ++tcode, utf, ucp, depthptr); + if (rc == SSB_FAIL || rc == SSB_UNKNOWN || rc == SSB_TOODEEP) return rc; do tcode += GET(tcode,1); while (*tcode == OP_ALT); tcode += 1 + LINK_SIZE; break; @@ -1177,7 +1199,7 @@ do case OP_QUERY: case OP_MINQUERY: case OP_POSQUERY: - tcode = set_table_bit(re, tcode + 1, FALSE, utf); + tcode = set_table_bit(re, tcode + 1, FALSE, utf, ucp); break; case OP_STARI: @@ -1186,7 +1208,7 @@ do case OP_QUERYI: case OP_MINQUERYI: case OP_POSQUERYI: - tcode = set_table_bit(re, tcode + 1, TRUE, utf); + tcode = set_table_bit(re, tcode + 1, TRUE, utf, ucp); break; /* Single-char upto sets the bit and tries the next */ @@ -1194,13 +1216,13 @@ do case OP_UPTO: case OP_MINUPTO: case OP_POSUPTO: - tcode = set_table_bit(re, tcode + 1 + IMM2_SIZE, FALSE, utf); + tcode = set_table_bit(re, tcode + 1 + IMM2_SIZE, FALSE, utf, ucp); break; case OP_UPTOI: case OP_MINUPTOI: case OP_POSUPTOI: - tcode = set_table_bit(re, tcode + 1 + IMM2_SIZE, TRUE, utf); + tcode = set_table_bit(re, tcode + 1 + IMM2_SIZE, TRUE, utf, ucp); break; /* At least one single char sets the bit and stops */ @@ -1212,7 +1234,7 @@ do case OP_PLUS: case OP_MINPLUS: case OP_POSPLUS: - (void)set_table_bit(re, tcode + 1, FALSE, utf); + (void)set_table_bit(re, tcode + 1, FALSE, utf, ucp); try_next = FALSE; break; @@ -1223,7 +1245,7 @@ do case OP_PLUSI: case OP_MINPLUSI: case OP_POSPLUSI: - (void)set_table_bit(re, tcode + 1, TRUE, utf); + (void)set_table_bit(re, tcode + 1, TRUE, utf, ucp); try_next = FALSE; break; @@ -1652,6 +1674,7 @@ PRIV(study)(pcre2_real_code *re) int count = 0; PCRE2_UCHAR *code; BOOL utf = (re->overall_options & PCRE2_UTF) != 0; +BOOL ucp = (re->overall_options & PCRE2_UCP) != 0; /* Find start of compiled code */ @@ -1664,7 +1687,8 @@ code units. */ if ((re->flags & (PCRE2_FIRSTSET|PCRE2_STARTLINE)) == 0) { - int rc = set_start_bits(re, code, utf); + int depth = 0; + int rc = set_start_bits(re, code, utf, ucp, &depth); if (rc == SSB_UNKNOWN) return 1; /* If a list of starting code units was set up, scan the list to see if only @@ -1712,27 +1736,27 @@ if ((re->flags & (PCRE2_FIRSTSET|PCRE2_STARTLINE)) == 0) } /* c contains the code unit value, in the range 0-255. In 8-bit UTF - mode, only values < 128 can be used. */ + mode, only values < 128 can be used. In all the other cases, c is a + character value. */ #if PCRE2_CODE_UNIT_WIDTH == 8 - if (c > 127) goto DONE; + if (utf && c > 127) goto DONE; #endif - if (a < 0) a = c; /* First one found */ + if (a < 0) a = c; /* First one found, save in a */ else if (b < 0) /* Second one found */ { int d = TABLE_GET((unsigned int)c, re->tables + fcc_offset, c); #ifdef SUPPORT_UNICODE -#if PCRE2_CODE_UNIT_WIDTH == 8 - if (utf && UCD_CASESET(c) != 0) goto DONE; /* Multiple case set */ -#else /* 16-bit or 32-bit */ - if (UCD_CASESET(c) != 0) goto DONE; /* Multiple case set */ - if (utf && c > 127) d = UCD_OTHERCASE(c); -#endif /* Code width */ + if (utf || ucp) + { + if (UCD_CASESET(c) != 0) goto DONE; /* Multiple case set */ + if (c > 127) d = UCD_OTHERCASE(c); + } #endif /* SUPPORT_UNICODE */ - if (d != a) goto DONE; /* Not other case of a */ - b = c; + if (d != a) goto DONE; /* Not the other case of a */ + b = c; /* Save second in b */ } else goto DONE; /* More than two characters found */ } diff --git a/ext/pcre/pcre2lib/pcre2_substitute.c b/ext/pcre/pcre2lib/pcre2_substitute.c index ec3dd66df973c..981a106a9f732 100644 --- a/ext/pcre/pcre2lib/pcre2_substitute.c +++ b/ext/pcre/pcre2lib/pcre2_substitute.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2019 University of Cambridge + New API code Copyright (c) 2016-2020 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -49,8 +49,9 @@ POSSIBILITY OF SUCH DAMAGE. #define SUBSTITUTE_OPTIONS \ (PCRE2_SUBSTITUTE_EXTENDED|PCRE2_SUBSTITUTE_GLOBAL| \ - PCRE2_SUBSTITUTE_OVERFLOW_LENGTH|PCRE2_SUBSTITUTE_UNKNOWN_UNSET| \ - PCRE2_SUBSTITUTE_UNSET_EMPTY) + PCRE2_SUBSTITUTE_LITERAL|PCRE2_SUBSTITUTE_MATCHED| \ + PCRE2_SUBSTITUTE_OVERFLOW_LENGTH|PCRE2_SUBSTITUTE_REPLACEMENT_ONLY| \ + PCRE2_SUBSTITUTE_UNKNOWN_UNSET|PCRE2_SUBSTITUTE_UNSET_EMPTY) @@ -194,6 +195,7 @@ overflow, either give an error immediately, or keep on, accumulating the length. */ #define CHECKMEMCPY(from,length) \ + { \ if (!overflowed && lengthleft < length) \ { \ if ((suboptions & PCRE2_SUBSTITUTE_OVERFLOW_LENGTH) == 0) goto NOROOM; \ @@ -209,7 +211,8 @@ length. */ memcpy(buffer + buff_offset, from, CU2BYTES(length)); \ buff_offset += length; \ lengthleft -= length; \ - } + } \ + } /* Here's the function */ @@ -226,11 +229,14 @@ int forcecasereset = 0; uint32_t ovector_count; uint32_t goptions = 0; uint32_t suboptions; -BOOL match_data_created = FALSE; -BOOL literal = FALSE; +pcre2_match_data *internal_match_data = NULL; +BOOL escaped_literal = FALSE; BOOL overflowed = FALSE; +BOOL use_existing_match; +BOOL replacement_only; #ifdef SUPPORT_UNICODE BOOL utf = (code->overall_options & PCRE2_UTF) != 0; +BOOL ucp = (code->overall_options & PCRE2_UCP) != 0; #endif PCRE2_UCHAR temp[6]; PCRE2_SPTR ptr; @@ -248,23 +254,54 @@ lengthleft = buff_length = *blength; *blength = PCRE2_UNSET; ovecsave[0] = ovecsave[1] = ovecsave[2] = PCRE2_UNSET; -/* Partial matching is not valid. This must come after setting *blength to +/* Partial matching is not valid. This must come after setting *blength to PCRE2_UNSET, so as not to imply an offset in the replacement. */ if ((options & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) != 0) return PCRE2_ERROR_BADOPTION; -/* If no match data block is provided, create one. */ +/* Check for using a match that has already happened. Note that the subject +pointer in the match data may be NULL after a no-match. */ + +use_existing_match = ((options & PCRE2_SUBSTITUTE_MATCHED) != 0); +replacement_only = ((options & PCRE2_SUBSTITUTE_REPLACEMENT_ONLY) != 0); + +/* If starting from an existing match, there must be an externally provided +match data block. We create an internal match_data block in two cases: (a) an +external one is not supplied (and we are not starting from an existing match); +(b) an existing match is to be used for the first substitution. In the latter +case, we copy the existing match into the internal block. This ensures that no +changes are made to the existing match data block. */ if (match_data == NULL) + { + pcre2_general_context *gcontext; + if (use_existing_match) return PCRE2_ERROR_NULL; + gcontext = (mcontext == NULL)? + (pcre2_general_context *)code : + (pcre2_general_context *)mcontext; + match_data = internal_match_data = + pcre2_match_data_create_from_pattern(code, gcontext); + if (internal_match_data == NULL) return PCRE2_ERROR_NOMEMORY; + } + +else if (use_existing_match) { pcre2_general_context *gcontext = (mcontext == NULL)? (pcre2_general_context *)code : (pcre2_general_context *)mcontext; - match_data = pcre2_match_data_create_from_pattern(code, gcontext); - if (match_data == NULL) return PCRE2_ERROR_NOMEMORY; - match_data_created = TRUE; + int pairs = (code->top_bracket + 1 < match_data->oveccount)? + code->top_bracket + 1 : match_data->oveccount; + internal_match_data = pcre2_match_data_create(match_data->oveccount, + gcontext); + if (internal_match_data == NULL) return PCRE2_ERROR_NOMEMORY; + memcpy(internal_match_data, match_data, offsetof(pcre2_match_data, ovector) + + 2*pairs*sizeof(PCRE2_SIZE)); + match_data = internal_match_data; } + +/* Remember ovector details */ + ovector = pcre2_get_ovector_pointer(match_data); ovector_count = pcre2_get_ovector_count(match_data); @@ -286,7 +323,7 @@ repend = replacement + rlength; #ifdef SUPPORT_UNICODE if (utf && (options & PCRE2_NO_UTF_CHECK) == 0) { - rc = PRIV(valid_utf)(replacement, rlength, &(match_data->rightchar)); + rc = PRIV(valid_utf)(replacement, rlength, &(match_data->startchar)); if (rc != 0) { match_data->leftchar = 0; @@ -300,7 +337,7 @@ if (utf && (options & PCRE2_NO_UTF_CHECK) == 0) suboptions = options & SUBSTITUTE_OPTIONS; options &= ~SUBSTITUTE_OPTIONS; -/* Copy up to the start offset */ +/* Error if the start match offset is greater than the length of the subject. */ if (start_offset > length) { @@ -308,9 +345,13 @@ if (start_offset > length) rc = PCRE2_ERROR_BADOFFSET; goto EXIT; } -CHECKMEMCPY(subject, start_offset); -/* Loop for global substituting. */ +/* Copy up to the start offset, unless only the replacement is required. */ + +if (!replacement_only) CHECKMEMCPY(subject, start_offset); + +/* Loop for global substituting. If PCRE2_SUBSTITUTE_MATCHED is set, the first +match is taken from the match_data that was passed in. */ subs = 0; do @@ -318,7 +359,12 @@ do PCRE2_SPTR ptrstack[PTR_STACK_SIZE]; uint32_t ptrstackptr = 0; - rc = pcre2_match(code, subject, length, start_offset, options|goptions, + if (use_existing_match) + { + rc = match_data->rc; + use_existing_match = FALSE; + } + else rc = pcre2_match(code, subject, length, start_offset, options|goptions, match_data, mcontext); #ifdef SUPPORT_UNICODE @@ -364,44 +410,44 @@ do #endif } - /* Copy what we have advanced past, reset the special global options, and - continue to the next match. */ + /* Copy what we have advanced past (unless not required), reset the special + global options, and continue to the next match. */ fraglength = start_offset - save_start; - CHECKMEMCPY(subject + save_start, fraglength); + if (!replacement_only) CHECKMEMCPY(subject + save_start, fraglength); goptions = 0; continue; } /* Handle a successful match. Matches that use \K to end before they start or start before the current point in the subject are not supported. */ - + if (ovector[1] < ovector[0] || ovector[0] < start_offset) { rc = PCRE2_ERROR_BADSUBSPATTERN; goto EXIT; } - - /* Check for the same match as previous. This is legitimate after matching an + + /* Check for the same match as previous. This is legitimate after matching an empty string that starts after the initial match offset. We have tried again at the match point in case the pattern is one like /(?<=\G.)/ which can never match at its starting point, so running the match achieves the bumpalong. If we do get the same (null) match at the original match point, it isn't such a pattern, so we now do the empty string magic. In all other cases, a repeat match should never occur. */ - + if (ovecsave[0] == ovector[0] && ovecsave[1] == ovector[1]) - { - if (ovector[0] == ovector[1] && ovecsave[2] != start_offset) - { - goptions = PCRE2_NOTEMPTY_ATSTART | PCRE2_ANCHORED; - ovecsave[2] = start_offset; - continue; /* Back to the top of the loop */ + { + if (ovector[0] == ovector[1] && ovecsave[2] != start_offset) + { + goptions = PCRE2_NOTEMPTY_ATSTART | PCRE2_ANCHORED; + ovecsave[2] = start_offset; + continue; /* Back to the top of the loop */ } rc = PCRE2_ERROR_INTERNAL_DUPMATCH; - goto EXIT; - } - + goto EXIT; + } + /* Count substitutions with a paranoid check for integer overflow; surely no real call to this function would ever hit this! */ @@ -412,21 +458,30 @@ do } subs++; - /* Copy the text leading up to the match, and remember where the insert - begins and how many ovector pairs are set. */ + /* Copy the text leading up to the match (unless not required), and remember + where the insert begins and how many ovector pairs are set. */ if (rc == 0) rc = ovector_count; fraglength = ovector[0] - start_offset; - CHECKMEMCPY(subject + start_offset, fraglength); + if (!replacement_only) CHECKMEMCPY(subject + start_offset, fraglength); scb.output_offsets[0] = buff_offset; scb.oveccount = rc; - /* Process the replacement string. Literal mode is set by \Q, but only in - extended mode when backslashes are being interpreted. In extended mode we - must handle nested substrings that are to be reprocessed. */ + /* Process the replacement string. If the entire replacement is literal, just + copy it with length check. */ ptr = replacement; - for (;;) + if ((suboptions & PCRE2_SUBSTITUTE_LITERAL) != 0) + { + CHECKMEMCPY(ptr, rlength); + } + + /* Within a non-literal replacement, which must be scanned character by + character, local literal mode can be set by \Q, but only in extended mode + when backslashes are being interpreted. In extended mode we must handle + nested substrings that are to be reprocessed. */ + + else for (;;) { uint32_t ch; unsigned int chlen; @@ -443,11 +498,11 @@ do /* Handle the next character */ - if (literal) + if (escaped_literal) { if (ptr[0] == CHAR_BACKSLASH && ptr < repend - 1 && ptr[1] == CHAR_E) { - literal = FALSE; + escaped_literal = FALSE; ptr += 2; continue; } @@ -704,7 +759,7 @@ do if (forcecase != 0) { #ifdef SUPPORT_UNICODE - if (utf) + if (utf || ucp) { uint32_t type = UCD_CHARTYPE(ch); if (PRIV(ucp_gentype)[type] == ucp_L && @@ -784,7 +839,7 @@ do continue; case ESC_Q: - literal = TRUE; + escaped_literal = TRUE; continue; case 0: /* Data character */ @@ -806,7 +861,7 @@ do if (forcecase != 0) { #ifdef SUPPORT_UNICODE - if (utf) + if (utf || ucp) { uint32_t type = UCD_CHARTYPE(ch); if (PRIV(ucp_gentype)[type] == ucp_L && @@ -835,53 +890,59 @@ do } /* End handling a literal code unit */ } /* End of loop for scanning the replacement. */ - /* The replacement has been copied to the output, or its size has been - remembered. Do the callout if there is one and we have done an actual + /* The replacement has been copied to the output, or its size has been + remembered. Do the callout if there is one and we have done an actual replacement. */ - + if (!overflowed && mcontext != NULL && mcontext->substitute_callout != NULL) { - scb.subscount = subs; + scb.subscount = subs; scb.output_offsets[1] = buff_offset; - rc = mcontext->substitute_callout(&scb, mcontext->substitute_callout_data); + rc = mcontext->substitute_callout(&scb, mcontext->substitute_callout_data); - /* A non-zero return means cancel this substitution. Instead, copy the + /* A non-zero return means cancel this substitution. Instead, copy the matched string fragment. */ if (rc != 0) { PCRE2_SIZE newlength = scb.output_offsets[1] - scb.output_offsets[0]; PCRE2_SIZE oldlength = ovector[1] - ovector[0]; - + buff_offset -= newlength; lengthleft += newlength; - CHECKMEMCPY(subject + ovector[0], oldlength); - + if (!replacement_only) CHECKMEMCPY(subject + ovector[0], oldlength); + /* A negative return means do not do any more. */ - + if (rc < 0) suboptions &= (~PCRE2_SUBSTITUTE_GLOBAL); } - } - + } + /* Save the details of this match. See above for how this data is used. If we - matched an empty string, do the magic for global matches. Finally, update the - start offset to point to the rest of the subject string. */ - - ovecsave[0] = ovector[0]; - ovecsave[1] = ovector[1]; + matched an empty string, do the magic for global matches. Update the start + offset to point to the rest of the subject string. If we re-used an existing + match for the first match, switch to the internal match data block. */ + + ovecsave[0] = ovector[0]; + ovecsave[1] = ovector[1]; ovecsave[2] = start_offset; - + goptions = (ovector[0] != ovector[1] || ovector[0] > start_offset)? 0 : PCRE2_ANCHORED|PCRE2_NOTEMPTY_ATSTART; start_offset = ovector[1]; } while ((suboptions & PCRE2_SUBSTITUTE_GLOBAL) != 0); /* Repeat "do" loop */ -/* Copy the rest of the subject. */ +/* Copy the rest of the subject unless not required, and terminate the output +with a binary zero. */ + +if (!replacement_only) + { + fraglength = length - start_offset; + CHECKMEMCPY(subject + start_offset, fraglength); + } -fraglength = length - start_offset; -CHECKMEMCPY(subject + start_offset, fraglength); temp[0] = 0; -CHECKMEMCPY(temp , 1); +CHECKMEMCPY(temp, 1); /* If overflowed is set it means the PCRE2_SUBSTITUTE_OVERFLOW_LENGTH is set, and matching has carried on after a full buffer, in order to compute the length @@ -903,7 +964,7 @@ else } EXIT: -if (match_data_created) pcre2_match_data_free(match_data); +if (internal_match_data != NULL) pcre2_match_data_free(internal_match_data); else match_data->rc = rc; return rc; diff --git a/ext/pcre/pcre2lib/pcre2_tables.c b/ext/pcre/pcre2lib/pcre2_tables.c index 25531d98c6890..b10de45efbf97 100644 --- a/ext/pcre/pcre2lib/pcre2_tables.c +++ b/ext/pcre/pcre2lib/pcre2_tables.c @@ -265,6 +265,7 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */ #define STRING_Chakma0 STR_C STR_h STR_a STR_k STR_m STR_a "\0" #define STRING_Cham0 STR_C STR_h STR_a STR_m "\0" #define STRING_Cherokee0 STR_C STR_h STR_e STR_r STR_o STR_k STR_e STR_e "\0" +#define STRING_Chorasmian0 STR_C STR_h STR_o STR_r STR_a STR_s STR_m STR_i STR_a STR_n "\0" #define STRING_Cn0 STR_C STR_n "\0" #define STRING_Co0 STR_C STR_o "\0" #define STRING_Common0 STR_C STR_o STR_m STR_m STR_o STR_n "\0" @@ -275,6 +276,7 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */ #define STRING_Cyrillic0 STR_C STR_y STR_r STR_i STR_l STR_l STR_i STR_c "\0" #define STRING_Deseret0 STR_D STR_e STR_s STR_e STR_r STR_e STR_t "\0" #define STRING_Devanagari0 STR_D STR_e STR_v STR_a STR_n STR_a STR_g STR_a STR_r STR_i "\0" +#define STRING_Dives_Akuru0 STR_D STR_i STR_v STR_e STR_s STR_UNDERSCORE STR_A STR_k STR_u STR_r STR_u "\0" #define STRING_Dogra0 STR_D STR_o STR_g STR_r STR_a "\0" #define STRING_Duployan0 STR_D STR_u STR_p STR_l STR_o STR_y STR_a STR_n "\0" #define STRING_Egyptian_Hieroglyphs0 STR_E STR_g STR_y STR_p STR_t STR_i STR_a STR_n STR_UNDERSCORE STR_H STR_i STR_e STR_r STR_o STR_g STR_l STR_y STR_p STR_h STR_s "\0" @@ -306,6 +308,7 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */ #define STRING_Katakana0 STR_K STR_a STR_t STR_a STR_k STR_a STR_n STR_a "\0" #define STRING_Kayah_Li0 STR_K STR_a STR_y STR_a STR_h STR_UNDERSCORE STR_L STR_i "\0" #define STRING_Kharoshthi0 STR_K STR_h STR_a STR_r STR_o STR_s STR_h STR_t STR_h STR_i "\0" +#define STRING_Khitan_Small_Script0 STR_K STR_h STR_i STR_t STR_a STR_n STR_UNDERSCORE STR_S STR_m STR_a STR_l STR_l STR_UNDERSCORE STR_S STR_c STR_r STR_i STR_p STR_t "\0" #define STRING_Khmer0 STR_K STR_h STR_m STR_e STR_r "\0" #define STRING_Khojki0 STR_K STR_h STR_o STR_j STR_k STR_i "\0" #define STRING_Khudawadi0 STR_K STR_h STR_u STR_d STR_a STR_w STR_a STR_d STR_i "\0" @@ -429,6 +432,7 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */ #define STRING_Xsp0 STR_X STR_s STR_p "\0" #define STRING_Xuc0 STR_X STR_u STR_c "\0" #define STRING_Xwd0 STR_X STR_w STR_d "\0" +#define STRING_Yezidi0 STR_Y STR_e STR_z STR_i STR_d STR_i "\0" #define STRING_Yi0 STR_Y STR_i "\0" #define STRING_Z0 STR_Z "\0" #define STRING_Zanabazar_Square0 STR_Z STR_a STR_n STR_a STR_b STR_a STR_z STR_a STR_r STR_UNDERSCORE STR_S STR_q STR_u STR_a STR_r STR_e "\0" @@ -464,6 +468,7 @@ const char PRIV(utt_names)[] = STRING_Chakma0 STRING_Cham0 STRING_Cherokee0 + STRING_Chorasmian0 STRING_Cn0 STRING_Co0 STRING_Common0 @@ -474,6 +479,7 @@ const char PRIV(utt_names)[] = STRING_Cyrillic0 STRING_Deseret0 STRING_Devanagari0 + STRING_Dives_Akuru0 STRING_Dogra0 STRING_Duployan0 STRING_Egyptian_Hieroglyphs0 @@ -505,6 +511,7 @@ const char PRIV(utt_names)[] = STRING_Katakana0 STRING_Kayah_Li0 STRING_Kharoshthi0 + STRING_Khitan_Small_Script0 STRING_Khmer0 STRING_Khojki0 STRING_Khudawadi0 @@ -628,6 +635,7 @@ const char PRIV(utt_names)[] = STRING_Xsp0 STRING_Xuc0 STRING_Xwd0 + STRING_Yezidi0 STRING_Yi0 STRING_Z0 STRING_Zanabazar_Square0 @@ -663,176 +671,180 @@ const ucp_type_table PRIV(utt)[] = { { 203, PT_SC, ucp_Chakma }, { 210, PT_SC, ucp_Cham }, { 215, PT_SC, ucp_Cherokee }, - { 224, PT_PC, ucp_Cn }, - { 227, PT_PC, ucp_Co }, - { 230, PT_SC, ucp_Common }, - { 237, PT_SC, ucp_Coptic }, - { 244, PT_PC, ucp_Cs }, - { 247, PT_SC, ucp_Cuneiform }, - { 257, PT_SC, ucp_Cypriot }, - { 265, PT_SC, ucp_Cyrillic }, - { 274, PT_SC, ucp_Deseret }, - { 282, PT_SC, ucp_Devanagari }, - { 293, PT_SC, ucp_Dogra }, - { 299, PT_SC, ucp_Duployan }, - { 308, PT_SC, ucp_Egyptian_Hieroglyphs }, - { 329, PT_SC, ucp_Elbasan }, - { 337, PT_SC, ucp_Elymaic }, - { 345, PT_SC, ucp_Ethiopic }, - { 354, PT_SC, ucp_Georgian }, - { 363, PT_SC, ucp_Glagolitic }, - { 374, PT_SC, ucp_Gothic }, - { 381, PT_SC, ucp_Grantha }, - { 389, PT_SC, ucp_Greek }, - { 395, PT_SC, ucp_Gujarati }, - { 404, PT_SC, ucp_Gunjala_Gondi }, - { 418, PT_SC, ucp_Gurmukhi }, - { 427, PT_SC, ucp_Han }, - { 431, PT_SC, ucp_Hangul }, - { 438, PT_SC, ucp_Hanifi_Rohingya }, - { 454, PT_SC, ucp_Hanunoo }, - { 462, PT_SC, ucp_Hatran }, - { 469, PT_SC, ucp_Hebrew }, - { 476, PT_SC, ucp_Hiragana }, - { 485, PT_SC, ucp_Imperial_Aramaic }, - { 502, PT_SC, ucp_Inherited }, - { 512, PT_SC, ucp_Inscriptional_Pahlavi }, - { 534, PT_SC, ucp_Inscriptional_Parthian }, - { 557, PT_SC, ucp_Javanese }, - { 566, PT_SC, ucp_Kaithi }, - { 573, PT_SC, ucp_Kannada }, - { 581, PT_SC, ucp_Katakana }, - { 590, PT_SC, ucp_Kayah_Li }, - { 599, PT_SC, ucp_Kharoshthi }, - { 610, PT_SC, ucp_Khmer }, - { 616, PT_SC, ucp_Khojki }, - { 623, PT_SC, ucp_Khudawadi }, - { 633, PT_GC, ucp_L }, - { 635, PT_LAMP, 0 }, - { 638, PT_SC, ucp_Lao }, - { 642, PT_SC, ucp_Latin }, - { 648, PT_SC, ucp_Lepcha }, - { 655, PT_SC, ucp_Limbu }, - { 661, PT_SC, ucp_Linear_A }, - { 670, PT_SC, ucp_Linear_B }, - { 679, PT_SC, ucp_Lisu }, - { 684, PT_PC, ucp_Ll }, - { 687, PT_PC, ucp_Lm }, - { 690, PT_PC, ucp_Lo }, - { 693, PT_PC, ucp_Lt }, - { 696, PT_PC, ucp_Lu }, - { 699, PT_SC, ucp_Lycian }, - { 706, PT_SC, ucp_Lydian }, - { 713, PT_GC, ucp_M }, - { 715, PT_SC, ucp_Mahajani }, - { 724, PT_SC, ucp_Makasar }, - { 732, PT_SC, ucp_Malayalam }, - { 742, PT_SC, ucp_Mandaic }, - { 750, PT_SC, ucp_Manichaean }, - { 761, PT_SC, ucp_Marchen }, - { 769, PT_SC, ucp_Masaram_Gondi }, - { 783, PT_PC, ucp_Mc }, - { 786, PT_PC, ucp_Me }, - { 789, PT_SC, ucp_Medefaidrin }, - { 801, PT_SC, ucp_Meetei_Mayek }, - { 814, PT_SC, ucp_Mende_Kikakui }, - { 828, PT_SC, ucp_Meroitic_Cursive }, - { 845, PT_SC, ucp_Meroitic_Hieroglyphs }, - { 866, PT_SC, ucp_Miao }, - { 871, PT_PC, ucp_Mn }, - { 874, PT_SC, ucp_Modi }, - { 879, PT_SC, ucp_Mongolian }, - { 889, PT_SC, ucp_Mro }, - { 893, PT_SC, ucp_Multani }, - { 901, PT_SC, ucp_Myanmar }, - { 909, PT_GC, ucp_N }, - { 911, PT_SC, ucp_Nabataean }, - { 921, PT_SC, ucp_Nandinagari }, - { 933, PT_PC, ucp_Nd }, - { 936, PT_SC, ucp_New_Tai_Lue }, - { 948, PT_SC, ucp_Newa }, - { 953, PT_SC, ucp_Nko }, - { 957, PT_PC, ucp_Nl }, - { 960, PT_PC, ucp_No }, - { 963, PT_SC, ucp_Nushu }, - { 969, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, - { 992, PT_SC, ucp_Ogham }, - { 998, PT_SC, ucp_Ol_Chiki }, - { 1007, PT_SC, ucp_Old_Hungarian }, - { 1021, PT_SC, ucp_Old_Italic }, - { 1032, PT_SC, ucp_Old_North_Arabian }, - { 1050, PT_SC, ucp_Old_Permic }, - { 1061, PT_SC, ucp_Old_Persian }, - { 1073, PT_SC, ucp_Old_Sogdian }, - { 1085, PT_SC, ucp_Old_South_Arabian }, - { 1103, PT_SC, ucp_Old_Turkic }, - { 1114, PT_SC, ucp_Oriya }, - { 1120, PT_SC, ucp_Osage }, - { 1126, PT_SC, ucp_Osmanya }, - { 1134, PT_GC, ucp_P }, - { 1136, PT_SC, ucp_Pahawh_Hmong }, - { 1149, PT_SC, ucp_Palmyrene }, - { 1159, PT_SC, ucp_Pau_Cin_Hau }, - { 1171, PT_PC, ucp_Pc }, - { 1174, PT_PC, ucp_Pd }, - { 1177, PT_PC, ucp_Pe }, - { 1180, PT_PC, ucp_Pf }, - { 1183, PT_SC, ucp_Phags_Pa }, - { 1192, PT_SC, ucp_Phoenician }, - { 1203, PT_PC, ucp_Pi }, - { 1206, PT_PC, ucp_Po }, - { 1209, PT_PC, ucp_Ps }, - { 1212, PT_SC, ucp_Psalter_Pahlavi }, - { 1228, PT_SC, ucp_Rejang }, - { 1235, PT_SC, ucp_Runic }, - { 1241, PT_GC, ucp_S }, - { 1243, PT_SC, ucp_Samaritan }, - { 1253, PT_SC, ucp_Saurashtra }, - { 1264, PT_PC, ucp_Sc }, - { 1267, PT_SC, ucp_Sharada }, - { 1275, PT_SC, ucp_Shavian }, - { 1283, PT_SC, ucp_Siddham }, - { 1291, PT_SC, ucp_SignWriting }, - { 1303, PT_SC, ucp_Sinhala }, - { 1311, PT_PC, ucp_Sk }, - { 1314, PT_PC, ucp_Sm }, - { 1317, PT_PC, ucp_So }, - { 1320, PT_SC, ucp_Sogdian }, - { 1328, PT_SC, ucp_Sora_Sompeng }, - { 1341, PT_SC, ucp_Soyombo }, - { 1349, PT_SC, ucp_Sundanese }, - { 1359, PT_SC, ucp_Syloti_Nagri }, - { 1372, PT_SC, ucp_Syriac }, - { 1379, PT_SC, ucp_Tagalog }, - { 1387, PT_SC, ucp_Tagbanwa }, - { 1396, PT_SC, ucp_Tai_Le }, - { 1403, PT_SC, ucp_Tai_Tham }, - { 1412, PT_SC, ucp_Tai_Viet }, - { 1421, PT_SC, ucp_Takri }, - { 1427, PT_SC, ucp_Tamil }, - { 1433, PT_SC, ucp_Tangut }, - { 1440, PT_SC, ucp_Telugu }, - { 1447, PT_SC, ucp_Thaana }, - { 1454, PT_SC, ucp_Thai }, - { 1459, PT_SC, ucp_Tibetan }, - { 1467, PT_SC, ucp_Tifinagh }, - { 1476, PT_SC, ucp_Tirhuta }, - { 1484, PT_SC, ucp_Ugaritic }, - { 1493, PT_SC, ucp_Unknown }, - { 1501, PT_SC, ucp_Vai }, - { 1505, PT_SC, ucp_Wancho }, - { 1512, PT_SC, ucp_Warang_Citi }, - { 1524, PT_ALNUM, 0 }, - { 1528, PT_PXSPACE, 0 }, - { 1532, PT_SPACE, 0 }, - { 1536, PT_UCNC, 0 }, - { 1540, PT_WORD, 0 }, - { 1544, PT_SC, ucp_Yi }, - { 1547, PT_GC, ucp_Z }, - { 1549, PT_SC, ucp_Zanabazar_Square }, - { 1566, PT_PC, ucp_Zl }, - { 1569, PT_PC, ucp_Zp }, - { 1572, PT_PC, ucp_Zs } + { 224, PT_SC, ucp_Chorasmian }, + { 235, PT_PC, ucp_Cn }, + { 238, PT_PC, ucp_Co }, + { 241, PT_SC, ucp_Common }, + { 248, PT_SC, ucp_Coptic }, + { 255, PT_PC, ucp_Cs }, + { 258, PT_SC, ucp_Cuneiform }, + { 268, PT_SC, ucp_Cypriot }, + { 276, PT_SC, ucp_Cyrillic }, + { 285, PT_SC, ucp_Deseret }, + { 293, PT_SC, ucp_Devanagari }, + { 304, PT_SC, ucp_Dives_Akuru }, + { 316, PT_SC, ucp_Dogra }, + { 322, PT_SC, ucp_Duployan }, + { 331, PT_SC, ucp_Egyptian_Hieroglyphs }, + { 352, PT_SC, ucp_Elbasan }, + { 360, PT_SC, ucp_Elymaic }, + { 368, PT_SC, ucp_Ethiopic }, + { 377, PT_SC, ucp_Georgian }, + { 386, PT_SC, ucp_Glagolitic }, + { 397, PT_SC, ucp_Gothic }, + { 404, PT_SC, ucp_Grantha }, + { 412, PT_SC, ucp_Greek }, + { 418, PT_SC, ucp_Gujarati }, + { 427, PT_SC, ucp_Gunjala_Gondi }, + { 441, PT_SC, ucp_Gurmukhi }, + { 450, PT_SC, ucp_Han }, + { 454, PT_SC, ucp_Hangul }, + { 461, PT_SC, ucp_Hanifi_Rohingya }, + { 477, PT_SC, ucp_Hanunoo }, + { 485, PT_SC, ucp_Hatran }, + { 492, PT_SC, ucp_Hebrew }, + { 499, PT_SC, ucp_Hiragana }, + { 508, PT_SC, ucp_Imperial_Aramaic }, + { 525, PT_SC, ucp_Inherited }, + { 535, PT_SC, ucp_Inscriptional_Pahlavi }, + { 557, PT_SC, ucp_Inscriptional_Parthian }, + { 580, PT_SC, ucp_Javanese }, + { 589, PT_SC, ucp_Kaithi }, + { 596, PT_SC, ucp_Kannada }, + { 604, PT_SC, ucp_Katakana }, + { 613, PT_SC, ucp_Kayah_Li }, + { 622, PT_SC, ucp_Kharoshthi }, + { 633, PT_SC, ucp_Khitan_Small_Script }, + { 653, PT_SC, ucp_Khmer }, + { 659, PT_SC, ucp_Khojki }, + { 666, PT_SC, ucp_Khudawadi }, + { 676, PT_GC, ucp_L }, + { 678, PT_LAMP, 0 }, + { 681, PT_SC, ucp_Lao }, + { 685, PT_SC, ucp_Latin }, + { 691, PT_SC, ucp_Lepcha }, + { 698, PT_SC, ucp_Limbu }, + { 704, PT_SC, ucp_Linear_A }, + { 713, PT_SC, ucp_Linear_B }, + { 722, PT_SC, ucp_Lisu }, + { 727, PT_PC, ucp_Ll }, + { 730, PT_PC, ucp_Lm }, + { 733, PT_PC, ucp_Lo }, + { 736, PT_PC, ucp_Lt }, + { 739, PT_PC, ucp_Lu }, + { 742, PT_SC, ucp_Lycian }, + { 749, PT_SC, ucp_Lydian }, + { 756, PT_GC, ucp_M }, + { 758, PT_SC, ucp_Mahajani }, + { 767, PT_SC, ucp_Makasar }, + { 775, PT_SC, ucp_Malayalam }, + { 785, PT_SC, ucp_Mandaic }, + { 793, PT_SC, ucp_Manichaean }, + { 804, PT_SC, ucp_Marchen }, + { 812, PT_SC, ucp_Masaram_Gondi }, + { 826, PT_PC, ucp_Mc }, + { 829, PT_PC, ucp_Me }, + { 832, PT_SC, ucp_Medefaidrin }, + { 844, PT_SC, ucp_Meetei_Mayek }, + { 857, PT_SC, ucp_Mende_Kikakui }, + { 871, PT_SC, ucp_Meroitic_Cursive }, + { 888, PT_SC, ucp_Meroitic_Hieroglyphs }, + { 909, PT_SC, ucp_Miao }, + { 914, PT_PC, ucp_Mn }, + { 917, PT_SC, ucp_Modi }, + { 922, PT_SC, ucp_Mongolian }, + { 932, PT_SC, ucp_Mro }, + { 936, PT_SC, ucp_Multani }, + { 944, PT_SC, ucp_Myanmar }, + { 952, PT_GC, ucp_N }, + { 954, PT_SC, ucp_Nabataean }, + { 964, PT_SC, ucp_Nandinagari }, + { 976, PT_PC, ucp_Nd }, + { 979, PT_SC, ucp_New_Tai_Lue }, + { 991, PT_SC, ucp_Newa }, + { 996, PT_SC, ucp_Nko }, + { 1000, PT_PC, ucp_Nl }, + { 1003, PT_PC, ucp_No }, + { 1006, PT_SC, ucp_Nushu }, + { 1012, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, + { 1035, PT_SC, ucp_Ogham }, + { 1041, PT_SC, ucp_Ol_Chiki }, + { 1050, PT_SC, ucp_Old_Hungarian }, + { 1064, PT_SC, ucp_Old_Italic }, + { 1075, PT_SC, ucp_Old_North_Arabian }, + { 1093, PT_SC, ucp_Old_Permic }, + { 1104, PT_SC, ucp_Old_Persian }, + { 1116, PT_SC, ucp_Old_Sogdian }, + { 1128, PT_SC, ucp_Old_South_Arabian }, + { 1146, PT_SC, ucp_Old_Turkic }, + { 1157, PT_SC, ucp_Oriya }, + { 1163, PT_SC, ucp_Osage }, + { 1169, PT_SC, ucp_Osmanya }, + { 1177, PT_GC, ucp_P }, + { 1179, PT_SC, ucp_Pahawh_Hmong }, + { 1192, PT_SC, ucp_Palmyrene }, + { 1202, PT_SC, ucp_Pau_Cin_Hau }, + { 1214, PT_PC, ucp_Pc }, + { 1217, PT_PC, ucp_Pd }, + { 1220, PT_PC, ucp_Pe }, + { 1223, PT_PC, ucp_Pf }, + { 1226, PT_SC, ucp_Phags_Pa }, + { 1235, PT_SC, ucp_Phoenician }, + { 1246, PT_PC, ucp_Pi }, + { 1249, PT_PC, ucp_Po }, + { 1252, PT_PC, ucp_Ps }, + { 1255, PT_SC, ucp_Psalter_Pahlavi }, + { 1271, PT_SC, ucp_Rejang }, + { 1278, PT_SC, ucp_Runic }, + { 1284, PT_GC, ucp_S }, + { 1286, PT_SC, ucp_Samaritan }, + { 1296, PT_SC, ucp_Saurashtra }, + { 1307, PT_PC, ucp_Sc }, + { 1310, PT_SC, ucp_Sharada }, + { 1318, PT_SC, ucp_Shavian }, + { 1326, PT_SC, ucp_Siddham }, + { 1334, PT_SC, ucp_SignWriting }, + { 1346, PT_SC, ucp_Sinhala }, + { 1354, PT_PC, ucp_Sk }, + { 1357, PT_PC, ucp_Sm }, + { 1360, PT_PC, ucp_So }, + { 1363, PT_SC, ucp_Sogdian }, + { 1371, PT_SC, ucp_Sora_Sompeng }, + { 1384, PT_SC, ucp_Soyombo }, + { 1392, PT_SC, ucp_Sundanese }, + { 1402, PT_SC, ucp_Syloti_Nagri }, + { 1415, PT_SC, ucp_Syriac }, + { 1422, PT_SC, ucp_Tagalog }, + { 1430, PT_SC, ucp_Tagbanwa }, + { 1439, PT_SC, ucp_Tai_Le }, + { 1446, PT_SC, ucp_Tai_Tham }, + { 1455, PT_SC, ucp_Tai_Viet }, + { 1464, PT_SC, ucp_Takri }, + { 1470, PT_SC, ucp_Tamil }, + { 1476, PT_SC, ucp_Tangut }, + { 1483, PT_SC, ucp_Telugu }, + { 1490, PT_SC, ucp_Thaana }, + { 1497, PT_SC, ucp_Thai }, + { 1502, PT_SC, ucp_Tibetan }, + { 1510, PT_SC, ucp_Tifinagh }, + { 1519, PT_SC, ucp_Tirhuta }, + { 1527, PT_SC, ucp_Ugaritic }, + { 1536, PT_SC, ucp_Unknown }, + { 1544, PT_SC, ucp_Vai }, + { 1548, PT_SC, ucp_Wancho }, + { 1555, PT_SC, ucp_Warang_Citi }, + { 1567, PT_ALNUM, 0 }, + { 1571, PT_PXSPACE, 0 }, + { 1575, PT_SPACE, 0 }, + { 1579, PT_UCNC, 0 }, + { 1583, PT_WORD, 0 }, + { 1587, PT_SC, ucp_Yezidi }, + { 1594, PT_SC, ucp_Yi }, + { 1597, PT_GC, ucp_Z }, + { 1599, PT_SC, ucp_Zanabazar_Square }, + { 1616, PT_PC, ucp_Zl }, + { 1619, PT_PC, ucp_Zp }, + { 1622, PT_PC, ucp_Zs } }; const size_t PRIV(utt_size) = sizeof(PRIV(utt)) / sizeof(ucp_type_table); diff --git a/ext/pcre/pcre2lib/pcre2_ucd.c b/ext/pcre/pcre2lib/pcre2_ucd.c index 55ba03bd43304..46e23ff06b29f 100644 --- a/ext/pcre/pcre2lib/pcre2_ucd.c +++ b/ext/pcre/pcre2lib/pcre2_ucd.c @@ -20,7 +20,7 @@ needed. */ /* Unicode character database. */ /* This file was autogenerated by the MultiStage2.py script. */ -/* Total size: 99316 bytes, block size: 128. */ +/* Total size: 101044 bytes, block size: 128. */ /* The tables herein are needed only when UCP support is built, and in PCRE2 that happens automatically with UTF support. @@ -39,7 +39,7 @@ const uint16_t PRIV(ucd_stage2)[] = {0}; const uint32_t PRIV(ucd_caseless_sets)[] = {0}; #else -const char *PRIV(unicode_version) = "12.1.0"; +const char *PRIV(unicode_version) = "13.0.0"; /* If the 32-bit library is run in non-32-bit mode, character values greater than 0x10ffff may be encountered. For these we set up a @@ -116,15 +116,16 @@ set of decimal digits. It is used to ensure that all the digits in a script run come from the same set. */ const uint32_t PRIV(ucd_digit_sets)[] = { - 63, /* Number of subsequent values */ + 65, /* Number of subsequent values */ 0x00039, 0x00669, 0x006f9, 0x007c9, 0x0096f, 0x009ef, 0x00a6f, 0x00aef, 0x00b6f, 0x00bef, 0x00c6f, 0x00cef, 0x00d6f, 0x00def, 0x00e59, 0x00ed9, 0x00f29, 0x01049, 0x01099, 0x017e9, 0x01819, 0x0194f, 0x019d9, 0x01a89, 0x01a99, 0x01b59, 0x01bb9, 0x01c49, 0x01c59, 0x0a629, 0x0a8d9, 0x0a909, 0x0a9d9, 0x0a9f9, 0x0aa59, 0x0abf9, 0x0ff19, 0x104a9, 0x10d39, 0x1106f, 0x110f9, 0x1113f, 0x111d9, 0x112f9, 0x11459, 0x114d9, 0x11659, 0x116c9, - 0x11739, 0x118e9, 0x11c59, 0x11d59, 0x11da9, 0x16a69, 0x16b59, 0x1d7d7, - 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149, 0x1e2f9, 0x1e959, + 0x11739, 0x118e9, 0x11959, 0x11c59, 0x11d59, 0x11da9, 0x16a69, 0x16b59, + 0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149, 0x1e2f9, 0x1e959, + 0x1fbf9, }; /* This vector is a list of lists of scripts for the Script Extension @@ -136,14 +137,14 @@ const uint8_t PRIV(ucd_script_sets)[] = { /* 4 */ 1, 144, 0, /* 7 */ 1, 50, 0, /* 10 */ 1, 56, 0, - /* 13 */ 2, 17, 0, - /* 16 */ 3, 15, 0, - /* 19 */ 4, 23, 0, - /* 22 */ 6, 84, 0, - /* 25 */ 12, 36, 0, - /* 28 */ 13, 18, 0, - /* 31 */ 13, 34, 0, - /* 34 */ 13, 118, 0, + /* 13 */ 3, 15, 0, + /* 16 */ 4, 23, 0, + /* 19 */ 6, 84, 0, + /* 22 */ 12, 36, 0, + /* 25 */ 13, 18, 0, + /* 28 */ 13, 34, 0, + /* 31 */ 13, 118, 0, + /* 34 */ 13, 50, 0, /* 37 */ 15, 107, 0, /* 40 */ 15, 150, 0, /* 43 */ 15, 100, 0, @@ -152,35 +153,37 @@ const uint8_t PRIV(ucd_script_sets)[] = { /* 52 */ 107, 54, 0, /* 55 */ 21, 108, 0, /* 58 */ 22, 129, 0, - /* 61 */ 27, 30, 0, - /* 64 */ 29, 150, 0, - /* 67 */ 34, 38, 0, - /* 70 */ 38, 65, 0, - /* 73 */ 1, 50, 56, 0, - /* 77 */ 3, 96, 49, 0, - /* 81 */ 96, 39, 53, 0, - /* 85 */ 12, 110, 36, 0, - /* 89 */ 15, 107, 29, 0, - /* 93 */ 15, 107, 34, 0, - /* 97 */ 23, 27, 30, 0, - /* 101 */ 69, 34, 39, 0, - /* 105 */ 1, 144, 50, 56, 0, - /* 110 */ 3, 15, 107, 29, 0, - /* 115 */ 7, 25, 52, 51, 0, - /* 120 */ 15, 142, 85, 111, 0, - /* 125 */ 4, 24, 23, 27, 30, 0, - /* 131 */ 4, 24, 23, 27, 30, 61, 0, - /* 138 */ 15, 29, 37, 44, 54, 55, 0, - /* 145 */ 132, 1, 95, 112, 121, 144, 148, 50, 0, - /* 154 */ 3, 15, 107, 29, 150, 44, 55, 124, 0, - /* 163 */ 15, 142, 21, 22, 108, 85, 111, 114, 109, 102, 124, 0, - /* 175 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 54, 55, 124, 0, - /* 188 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 100, 54, 55, 124, 0, - /* 202 */ 15, 142, 21, 22, 108, 29, 85, 111, 114, 150, 109, 102, 124, 0, - /* 216 */ 15, 142, 21, 22, 108, 29, 85, 111, 37, 114, 150, 109, 102, 124, 0, - /* 231 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0, - /* 252 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 35, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0, - /* 274 */ + /* 61 */ 23, 34, 0, + /* 64 */ 27, 30, 0, + /* 67 */ 29, 150, 0, + /* 70 */ 34, 38, 0, + /* 73 */ 38, 65, 0, + /* 76 */ 1, 50, 56, 0, + /* 80 */ 1, 56, 156, 0, + /* 84 */ 3, 96, 49, 0, + /* 88 */ 96, 39, 53, 0, + /* 92 */ 12, 110, 36, 0, + /* 96 */ 15, 107, 29, 0, + /* 100 */ 15, 107, 34, 0, + /* 104 */ 23, 27, 30, 0, + /* 108 */ 69, 34, 39, 0, + /* 112 */ 3, 15, 107, 29, 0, + /* 117 */ 7, 25, 52, 51, 0, + /* 122 */ 15, 142, 85, 111, 0, + /* 127 */ 1, 144, 50, 56, 156, 0, + /* 133 */ 4, 24, 23, 27, 30, 0, + /* 139 */ 4, 24, 23, 27, 30, 61, 0, + /* 146 */ 15, 29, 37, 44, 54, 55, 0, + /* 153 */ 132, 1, 95, 112, 121, 144, 148, 50, 0, + /* 162 */ 3, 15, 107, 29, 150, 44, 55, 124, 0, + /* 171 */ 15, 142, 21, 22, 108, 85, 111, 114, 109, 102, 124, 0, + /* 183 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 54, 55, 124, 0, + /* 196 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 100, 54, 55, 124, 0, + /* 210 */ 15, 142, 21, 22, 108, 29, 85, 111, 114, 150, 109, 102, 124, 0, + /* 224 */ 15, 142, 21, 22, 108, 29, 85, 111, 37, 114, 150, 109, 102, 124, 0, + /* 239 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0, + /* 260 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 35, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0, + /* 282 */ }; /* These are the main two-stage UCD tables. The fields in each record are: @@ -189,7 +192,7 @@ offset to multichar other cases or zero (8 bits), offset to other case or zero (32 bits, signed), script extension (16 bits, signed), and a dummy 16-bit field to make the whole thing a multiple of 4 bytes. */ -const ucd_record PRIV(ucd_records)[] = { /* 11508 bytes, record size 12 */ +const ucd_record PRIV(ucd_records)[] = { /* 11700 bytes, record size 12 */ { 10, 0, 2, 0, 0, 10, 256, }, /* 0 */ { 10, 0, 2, 0, 0, 10, 0, }, /* 1 */ { 10, 0, 1, 0, 0, 10, 0, }, /* 2 */ @@ -387,9 +390,9 @@ const ucd_record PRIV(ucd_records)[] = { /* 11508 bytes, record size 12 */ { 13, 9, 12, 88, 1, 13, 0, }, /* 194 */ { 13, 5, 12, 88, -1, 13, 0, }, /* 195 */ { 13, 26, 12, 0, 0, 13, 0, }, /* 196 */ - { 13, 12, 3, 0, 0, -34, 0, }, /* 197 */ - { 13, 12, 3, 0, 0, -28, 0, }, /* 198 */ - { 28, 12, 3, 0, 0, -31, 0, }, /* 199 */ + { 13, 12, 3, 0, 0, -31, 0, }, /* 197 */ + { 13, 12, 3, 0, 0, -25, 0, }, /* 198 */ + { 28, 12, 3, 0, 0, -28, 0, }, /* 199 */ { 13, 11, 3, 0, 0, 13, 0, }, /* 200 */ { 13, 9, 12, 0, 15, 13, 0, }, /* 201 */ { 13, 5, 12, 0, -15, 13, 0, }, /* 202 */ @@ -398,281 +401,281 @@ const ucd_record PRIV(ucd_records)[] = { /* 11508 bytes, record size 12 */ { 2, 21, 12, 0, 0, 2, 0, }, /* 205 */ { 2, 5, 12, 0, 0, 2, 0, }, /* 206 */ { 2, 5, 12, 0, -48, 2, 0, }, /* 207 */ - { 10, 21, 12, 0, 0, -13, 0, }, /* 208 */ - { 2, 17, 12, 0, 0, 2, 0, }, /* 209 */ - { 2, 26, 12, 0, 0, 2, 0, }, /* 210 */ - { 2, 23, 12, 0, 0, 2, 0, }, /* 211 */ - { 26, 12, 3, 0, 0, 26, 0, }, /* 212 */ - { 26, 17, 12, 0, 0, 26, 0, }, /* 213 */ - { 26, 21, 12, 0, 0, 26, 0, }, /* 214 */ - { 26, 7, 12, 0, 0, 26, 0, }, /* 215 */ - { 1, 1, 4, 0, 0, 1, 0, }, /* 216 */ - { 10, 1, 4, 0, 0, 10, 0, }, /* 217 */ - { 1, 25, 12, 0, 0, 1, 0, }, /* 218 */ - { 1, 21, 12, 0, 0, 1, 0, }, /* 219 */ - { 1, 23, 12, 0, 0, 1, 0, }, /* 220 */ - { 10, 21, 12, 0, 0, -105, 0, }, /* 221 */ - { 1, 26, 12, 0, 0, 1, 0, }, /* 222 */ - { 1, 12, 3, 0, 0, 1, 0, }, /* 223 */ - { 1, 1, 2, 0, 0, -73, 0, }, /* 224 */ - { 1, 7, 12, 0, 0, 1, 0, }, /* 225 */ - { 10, 6, 12, 0, 0, -145, 0, }, /* 226 */ - { 28, 12, 3, 0, 0, -7, 0, }, /* 227 */ - { 1, 13, 12, 0, 0, -10, 0, }, /* 228 */ - { 1, 21, 12, 0, 0, -4, 0, }, /* 229 */ - { 1, 6, 12, 0, 0, 1, 0, }, /* 230 */ - { 1, 13, 12, 0, 0, 1, 0, }, /* 231 */ - { 50, 21, 12, 0, 0, 50, 0, }, /* 232 */ - { 50, 1, 4, 0, 0, 50, 0, }, /* 233 */ - { 50, 7, 12, 0, 0, 50, 0, }, /* 234 */ - { 50, 12, 3, 0, 0, 50, 0, }, /* 235 */ - { 56, 7, 12, 0, 0, 56, 0, }, /* 236 */ - { 56, 12, 3, 0, 0, 56, 0, }, /* 237 */ - { 64, 13, 12, 0, 0, 64, 0, }, /* 238 */ - { 64, 7, 12, 0, 0, 64, 0, }, /* 239 */ - { 64, 12, 3, 0, 0, 64, 0, }, /* 240 */ - { 64, 6, 12, 0, 0, 64, 0, }, /* 241 */ - { 64, 26, 12, 0, 0, 64, 0, }, /* 242 */ - { 64, 21, 12, 0, 0, 64, 0, }, /* 243 */ - { 64, 23, 12, 0, 0, 64, 0, }, /* 244 */ - { 90, 7, 12, 0, 0, 90, 0, }, /* 245 */ - { 90, 12, 3, 0, 0, 90, 0, }, /* 246 */ - { 90, 6, 12, 0, 0, 90, 0, }, /* 247 */ - { 90, 21, 12, 0, 0, 90, 0, }, /* 248 */ - { 95, 7, 12, 0, 0, 95, 0, }, /* 249 */ - { 95, 12, 3, 0, 0, 95, 0, }, /* 250 */ - { 95, 21, 12, 0, 0, 95, 0, }, /* 251 */ - { 15, 12, 3, 0, 0, 15, 0, }, /* 252 */ - { 15, 10, 5, 0, 0, 15, 0, }, /* 253 */ - { 15, 7, 12, 0, 0, 15, 0, }, /* 254 */ - { 28, 12, 3, 0, 0, -188, 0, }, /* 255 */ - { 28, 12, 3, 0, 0, -175, 0, }, /* 256 */ - { 10, 21, 12, 0, 0, -231, 0, }, /* 257 */ - { 10, 21, 12, 0, 0, -252, 0, }, /* 258 */ - { 15, 13, 12, 0, 0, -120, 0, }, /* 259 */ - { 15, 21, 12, 0, 0, 15, 0, }, /* 260 */ - { 15, 6, 12, 0, 0, 15, 0, }, /* 261 */ - { 3, 7, 12, 0, 0, 3, 0, }, /* 262 */ - { 3, 12, 3, 0, 0, 3, 0, }, /* 263 */ - { 3, 10, 5, 0, 0, 3, 0, }, /* 264 */ - { 3, 10, 3, 0, 0, 3, 0, }, /* 265 */ - { 3, 13, 12, 0, 0, -77, 0, }, /* 266 */ - { 3, 23, 12, 0, 0, 3, 0, }, /* 267 */ - { 3, 15, 12, 0, 0, 3, 0, }, /* 268 */ - { 3, 26, 12, 0, 0, 3, 0, }, /* 269 */ - { 3, 21, 12, 0, 0, 3, 0, }, /* 270 */ - { 22, 12, 3, 0, 0, 22, 0, }, /* 271 */ - { 22, 10, 5, 0, 0, 22, 0, }, /* 272 */ - { 22, 7, 12, 0, 0, 22, 0, }, /* 273 */ - { 22, 13, 12, 0, 0, -58, 0, }, /* 274 */ - { 22, 21, 12, 0, 0, 22, 0, }, /* 275 */ - { 21, 12, 3, 0, 0, 21, 0, }, /* 276 */ - { 21, 10, 5, 0, 0, 21, 0, }, /* 277 */ - { 21, 7, 12, 0, 0, 21, 0, }, /* 278 */ - { 21, 13, 12, 0, 0, -55, 0, }, /* 279 */ - { 21, 21, 12, 0, 0, 21, 0, }, /* 280 */ - { 21, 23, 12, 0, 0, 21, 0, }, /* 281 */ - { 44, 12, 3, 0, 0, 44, 0, }, /* 282 */ - { 44, 10, 5, 0, 0, 44, 0, }, /* 283 */ - { 44, 7, 12, 0, 0, 44, 0, }, /* 284 */ - { 44, 10, 3, 0, 0, 44, 0, }, /* 285 */ - { 44, 13, 12, 0, 0, 44, 0, }, /* 286 */ - { 44, 26, 12, 0, 0, 44, 0, }, /* 287 */ - { 44, 15, 12, 0, 0, 44, 0, }, /* 288 */ - { 54, 12, 3, 0, 0, 54, 0, }, /* 289 */ - { 54, 7, 12, 0, 0, 54, 0, }, /* 290 */ - { 54, 10, 3, 0, 0, 54, 0, }, /* 291 */ - { 54, 10, 5, 0, 0, 54, 0, }, /* 292 */ - { 54, 13, 12, 0, 0, -52, 0, }, /* 293 */ - { 54, 15, 12, 0, 0, -52, 0, }, /* 294 */ - { 54, 26, 12, 0, 0, -52, 0, }, /* 295 */ - { 54, 26, 12, 0, 0, 54, 0, }, /* 296 */ - { 54, 23, 12, 0, 0, 54, 0, }, /* 297 */ - { 55, 12, 3, 0, 0, 55, 0, }, /* 298 */ - { 55, 10, 5, 0, 0, 55, 0, }, /* 299 */ - { 55, 7, 12, 0, 0, 55, 0, }, /* 300 */ - { 55, 13, 12, 0, 0, 55, 0, }, /* 301 */ - { 55, 21, 12, 0, 0, 55, 0, }, /* 302 */ - { 55, 15, 12, 0, 0, 55, 0, }, /* 303 */ - { 55, 26, 12, 0, 0, 55, 0, }, /* 304 */ - { 29, 7, 12, 0, 0, 29, 0, }, /* 305 */ - { 29, 12, 3, 0, 0, 29, 0, }, /* 306 */ - { 29, 10, 5, 0, 0, 29, 0, }, /* 307 */ - { 29, 21, 12, 0, 0, 29, 0, }, /* 308 */ - { 29, 10, 3, 0, 0, 29, 0, }, /* 309 */ - { 29, 13, 12, 0, 0, -64, 0, }, /* 310 */ - { 37, 12, 3, 0, 0, 37, 0, }, /* 311 */ - { 37, 10, 5, 0, 0, 37, 0, }, /* 312 */ - { 37, 7, 12, 0, 0, 37, 0, }, /* 313 */ - { 37, 10, 3, 0, 0, 37, 0, }, /* 314 */ - { 37, 7, 4, 0, 0, 37, 0, }, /* 315 */ - { 37, 26, 12, 0, 0, 37, 0, }, /* 316 */ - { 37, 15, 12, 0, 0, 37, 0, }, /* 317 */ - { 37, 13, 12, 0, 0, 37, 0, }, /* 318 */ + { 2, 17, 12, 0, 0, 2, 0, }, /* 208 */ + { 2, 26, 12, 0, 0, 2, 0, }, /* 209 */ + { 2, 23, 12, 0, 0, 2, 0, }, /* 210 */ + { 26, 12, 3, 0, 0, 26, 0, }, /* 211 */ + { 26, 17, 12, 0, 0, 26, 0, }, /* 212 */ + { 26, 21, 12, 0, 0, 26, 0, }, /* 213 */ + { 26, 7, 12, 0, 0, 26, 0, }, /* 214 */ + { 1, 1, 4, 0, 0, 1, 0, }, /* 215 */ + { 10, 1, 4, 0, 0, 10, 0, }, /* 216 */ + { 1, 25, 12, 0, 0, 1, 0, }, /* 217 */ + { 1, 21, 12, 0, 0, 1, 0, }, /* 218 */ + { 1, 23, 12, 0, 0, 1, 0, }, /* 219 */ + { 10, 21, 12, 0, 0, -127, 0, }, /* 220 */ + { 1, 26, 12, 0, 0, 1, 0, }, /* 221 */ + { 1, 12, 3, 0, 0, 1, 0, }, /* 222 */ + { 1, 1, 2, 0, 0, -76, 0, }, /* 223 */ + { 1, 7, 12, 0, 0, 1, 0, }, /* 224 */ + { 10, 6, 12, 0, 0, -153, 0, }, /* 225 */ + { 28, 12, 3, 0, 0, -7, 0, }, /* 226 */ + { 1, 13, 12, 0, 0, -80, 0, }, /* 227 */ + { 1, 21, 12, 0, 0, -4, 0, }, /* 228 */ + { 1, 6, 12, 0, 0, 1, 0, }, /* 229 */ + { 1, 13, 12, 0, 0, 1, 0, }, /* 230 */ + { 50, 21, 12, 0, 0, 50, 0, }, /* 231 */ + { 50, 1, 4, 0, 0, 50, 0, }, /* 232 */ + { 50, 7, 12, 0, 0, 50, 0, }, /* 233 */ + { 50, 12, 3, 0, 0, 50, 0, }, /* 234 */ + { 56, 7, 12, 0, 0, 56, 0, }, /* 235 */ + { 56, 12, 3, 0, 0, 56, 0, }, /* 236 */ + { 64, 13, 12, 0, 0, 64, 0, }, /* 237 */ + { 64, 7, 12, 0, 0, 64, 0, }, /* 238 */ + { 64, 12, 3, 0, 0, 64, 0, }, /* 239 */ + { 64, 6, 12, 0, 0, 64, 0, }, /* 240 */ + { 64, 26, 12, 0, 0, 64, 0, }, /* 241 */ + { 64, 21, 12, 0, 0, 64, 0, }, /* 242 */ + { 64, 23, 12, 0, 0, 64, 0, }, /* 243 */ + { 90, 7, 12, 0, 0, 90, 0, }, /* 244 */ + { 90, 12, 3, 0, 0, 90, 0, }, /* 245 */ + { 90, 6, 12, 0, 0, 90, 0, }, /* 246 */ + { 90, 21, 12, 0, 0, 90, 0, }, /* 247 */ + { 95, 7, 12, 0, 0, 95, 0, }, /* 248 */ + { 95, 12, 3, 0, 0, 95, 0, }, /* 249 */ + { 95, 21, 12, 0, 0, 95, 0, }, /* 250 */ + { 15, 12, 3, 0, 0, 15, 0, }, /* 251 */ + { 15, 10, 5, 0, 0, 15, 0, }, /* 252 */ + { 15, 7, 12, 0, 0, 15, 0, }, /* 253 */ + { 28, 12, 3, 0, 0, -196, 0, }, /* 254 */ + { 28, 12, 3, 0, 0, -183, 0, }, /* 255 */ + { 10, 21, 12, 0, 0, -239, 0, }, /* 256 */ + { 10, 21, 12, 0, 0, -260, 0, }, /* 257 */ + { 15, 13, 12, 0, 0, -122, 0, }, /* 258 */ + { 15, 21, 12, 0, 0, 15, 0, }, /* 259 */ + { 15, 6, 12, 0, 0, 15, 0, }, /* 260 */ + { 3, 7, 12, 0, 0, 3, 0, }, /* 261 */ + { 3, 12, 3, 0, 0, 3, 0, }, /* 262 */ + { 3, 10, 5, 0, 0, 3, 0, }, /* 263 */ + { 3, 10, 3, 0, 0, 3, 0, }, /* 264 */ + { 3, 13, 12, 0, 0, -84, 0, }, /* 265 */ + { 3, 23, 12, 0, 0, 3, 0, }, /* 266 */ + { 3, 15, 12, 0, 0, 3, 0, }, /* 267 */ + { 3, 26, 12, 0, 0, 3, 0, }, /* 268 */ + { 3, 21, 12, 0, 0, 3, 0, }, /* 269 */ + { 22, 12, 3, 0, 0, 22, 0, }, /* 270 */ + { 22, 10, 5, 0, 0, 22, 0, }, /* 271 */ + { 22, 7, 12, 0, 0, 22, 0, }, /* 272 */ + { 22, 13, 12, 0, 0, -58, 0, }, /* 273 */ + { 22, 21, 12, 0, 0, 22, 0, }, /* 274 */ + { 21, 12, 3, 0, 0, 21, 0, }, /* 275 */ + { 21, 10, 5, 0, 0, 21, 0, }, /* 276 */ + { 21, 7, 12, 0, 0, 21, 0, }, /* 277 */ + { 21, 13, 12, 0, 0, -55, 0, }, /* 278 */ + { 21, 21, 12, 0, 0, 21, 0, }, /* 279 */ + { 21, 23, 12, 0, 0, 21, 0, }, /* 280 */ + { 44, 12, 3, 0, 0, 44, 0, }, /* 281 */ + { 44, 10, 5, 0, 0, 44, 0, }, /* 282 */ + { 44, 7, 12, 0, 0, 44, 0, }, /* 283 */ + { 44, 10, 3, 0, 0, 44, 0, }, /* 284 */ + { 44, 13, 12, 0, 0, 44, 0, }, /* 285 */ + { 44, 26, 12, 0, 0, 44, 0, }, /* 286 */ + { 44, 15, 12, 0, 0, 44, 0, }, /* 287 */ + { 54, 12, 3, 0, 0, 54, 0, }, /* 288 */ + { 54, 7, 12, 0, 0, 54, 0, }, /* 289 */ + { 54, 10, 3, 0, 0, 54, 0, }, /* 290 */ + { 54, 10, 5, 0, 0, 54, 0, }, /* 291 */ + { 54, 13, 12, 0, 0, -52, 0, }, /* 292 */ + { 54, 15, 12, 0, 0, -52, 0, }, /* 293 */ + { 54, 26, 12, 0, 0, -52, 0, }, /* 294 */ + { 54, 26, 12, 0, 0, 54, 0, }, /* 295 */ + { 54, 23, 12, 0, 0, 54, 0, }, /* 296 */ + { 55, 12, 3, 0, 0, 55, 0, }, /* 297 */ + { 55, 10, 5, 0, 0, 55, 0, }, /* 298 */ + { 55, 7, 12, 0, 0, 55, 0, }, /* 299 */ + { 55, 13, 12, 0, 0, 55, 0, }, /* 300 */ + { 55, 21, 12, 0, 0, 55, 0, }, /* 301 */ + { 55, 15, 12, 0, 0, 55, 0, }, /* 302 */ + { 55, 26, 12, 0, 0, 55, 0, }, /* 303 */ + { 29, 7, 12, 0, 0, 29, 0, }, /* 304 */ + { 29, 12, 3, 0, 0, 29, 0, }, /* 305 */ + { 29, 10, 5, 0, 0, 29, 0, }, /* 306 */ + { 29, 21, 12, 0, 0, 29, 0, }, /* 307 */ + { 29, 10, 3, 0, 0, 29, 0, }, /* 308 */ + { 29, 13, 12, 0, 0, -67, 0, }, /* 309 */ + { 37, 12, 3, 0, 0, 37, 0, }, /* 310 */ + { 37, 10, 5, 0, 0, 37, 0, }, /* 311 */ + { 37, 7, 12, 0, 0, 37, 0, }, /* 312 */ + { 37, 10, 3, 0, 0, 37, 0, }, /* 313 */ + { 37, 7, 4, 0, 0, 37, 0, }, /* 314 */ + { 37, 26, 12, 0, 0, 37, 0, }, /* 315 */ + { 37, 15, 12, 0, 0, 37, 0, }, /* 316 */ + { 37, 13, 12, 0, 0, 37, 0, }, /* 317 */ + { 48, 12, 3, 0, 0, 48, 0, }, /* 318 */ { 48, 10, 5, 0, 0, 48, 0, }, /* 319 */ { 48, 7, 12, 0, 0, 48, 0, }, /* 320 */ - { 48, 12, 3, 0, 0, 48, 0, }, /* 321 */ - { 48, 10, 3, 0, 0, 48, 0, }, /* 322 */ - { 48, 13, 12, 0, 0, 48, 0, }, /* 323 */ - { 48, 21, 12, 0, 0, 48, 0, }, /* 324 */ - { 57, 7, 12, 0, 0, 57, 0, }, /* 325 */ - { 57, 12, 3, 0, 0, 57, 0, }, /* 326 */ - { 57, 7, 5, 0, 0, 57, 0, }, /* 327 */ - { 57, 6, 12, 0, 0, 57, 0, }, /* 328 */ - { 57, 21, 12, 0, 0, 57, 0, }, /* 329 */ - { 57, 13, 12, 0, 0, 57, 0, }, /* 330 */ - { 33, 7, 12, 0, 0, 33, 0, }, /* 331 */ - { 33, 12, 3, 0, 0, 33, 0, }, /* 332 */ - { 33, 7, 5, 0, 0, 33, 0, }, /* 333 */ - { 33, 6, 12, 0, 0, 33, 0, }, /* 334 */ - { 33, 13, 12, 0, 0, 33, 0, }, /* 335 */ - { 58, 7, 12, 0, 0, 58, 0, }, /* 336 */ - { 58, 26, 12, 0, 0, 58, 0, }, /* 337 */ - { 58, 21, 12, 0, 0, 58, 0, }, /* 338 */ - { 58, 12, 3, 0, 0, 58, 0, }, /* 339 */ - { 58, 13, 12, 0, 0, 58, 0, }, /* 340 */ - { 58, 15, 12, 0, 0, 58, 0, }, /* 341 */ - { 58, 22, 12, 0, 0, 58, 0, }, /* 342 */ - { 58, 18, 12, 0, 0, 58, 0, }, /* 343 */ - { 58, 10, 5, 0, 0, 58, 0, }, /* 344 */ - { 39, 7, 12, 0, 0, 39, 0, }, /* 345 */ - { 39, 10, 12, 0, 0, 39, 0, }, /* 346 */ - { 39, 12, 3, 0, 0, 39, 0, }, /* 347 */ - { 39, 10, 5, 0, 0, 39, 0, }, /* 348 */ - { 39, 13, 12, 0, 0, -81, 0, }, /* 349 */ - { 39, 21, 12, 0, 0, 39, 0, }, /* 350 */ - { 39, 13, 12, 0, 0, 39, 0, }, /* 351 */ - { 39, 26, 12, 0, 0, 39, 0, }, /* 352 */ - { 17, 9, 12, 0, 7264, 17, 0, }, /* 353 */ - { 17, 5, 12, 0, 3008, 17, 0, }, /* 354 */ - { 10, 21, 12, 0, 0, -49, 0, }, /* 355 */ - { 17, 6, 12, 0, 0, 17, 0, }, /* 356 */ - { 24, 7, 6, 0, 0, 24, 0, }, /* 357 */ - { 24, 7, 7, 0, 0, 24, 0, }, /* 358 */ - { 24, 7, 8, 0, 0, 24, 0, }, /* 359 */ - { 16, 7, 12, 0, 0, 16, 0, }, /* 360 */ - { 16, 12, 3, 0, 0, 16, 0, }, /* 361 */ - { 16, 21, 12, 0, 0, 16, 0, }, /* 362 */ - { 16, 15, 12, 0, 0, 16, 0, }, /* 363 */ - { 16, 26, 12, 0, 0, 16, 0, }, /* 364 */ - { 9, 9, 12, 0, 38864, 9, 0, }, /* 365 */ - { 9, 9, 12, 0, 8, 9, 0, }, /* 366 */ - { 9, 5, 12, 0, -8, 9, 0, }, /* 367 */ - { 8, 17, 12, 0, 0, 8, 0, }, /* 368 */ - { 8, 7, 12, 0, 0, 8, 0, }, /* 369 */ - { 8, 26, 12, 0, 0, 8, 0, }, /* 370 */ - { 8, 21, 12, 0, 0, 8, 0, }, /* 371 */ - { 41, 29, 12, 0, 0, 41, 0, }, /* 372 */ - { 41, 7, 12, 0, 0, 41, 0, }, /* 373 */ - { 41, 22, 12, 0, 0, 41, 0, }, /* 374 */ - { 41, 18, 12, 0, 0, 41, 0, }, /* 375 */ - { 46, 7, 12, 0, 0, 46, 0, }, /* 376 */ - { 46, 14, 12, 0, 0, 46, 0, }, /* 377 */ - { 51, 7, 12, 0, 0, 51, 0, }, /* 378 */ - { 51, 12, 3, 0, 0, 51, 0, }, /* 379 */ - { 25, 7, 12, 0, 0, 25, 0, }, /* 380 */ - { 25, 12, 3, 0, 0, 25, 0, }, /* 381 */ - { 10, 21, 12, 0, 0, -115, 0, }, /* 382 */ - { 7, 7, 12, 0, 0, 7, 0, }, /* 383 */ - { 7, 12, 3, 0, 0, 7, 0, }, /* 384 */ - { 52, 7, 12, 0, 0, 52, 0, }, /* 385 */ - { 52, 12, 3, 0, 0, 52, 0, }, /* 386 */ - { 32, 7, 12, 0, 0, 32, 0, }, /* 387 */ - { 32, 12, 3, 0, 0, 32, 0, }, /* 388 */ - { 32, 10, 5, 0, 0, 32, 0, }, /* 389 */ - { 32, 21, 12, 0, 0, 32, 0, }, /* 390 */ - { 32, 6, 12, 0, 0, 32, 0, }, /* 391 */ - { 32, 23, 12, 0, 0, 32, 0, }, /* 392 */ - { 32, 13, 12, 0, 0, 32, 0, }, /* 393 */ - { 32, 15, 12, 0, 0, 32, 0, }, /* 394 */ - { 38, 21, 12, 0, 0, 38, 0, }, /* 395 */ - { 10, 21, 12, 0, 0, -70, 0, }, /* 396 */ - { 38, 17, 12, 0, 0, 38, 0, }, /* 397 */ - { 38, 12, 3, 0, 0, 38, 0, }, /* 398 */ - { 38, 1, 2, 0, 0, 38, 0, }, /* 399 */ - { 38, 13, 12, 0, 0, 38, 0, }, /* 400 */ - { 38, 7, 12, 0, 0, 38, 0, }, /* 401 */ - { 38, 6, 12, 0, 0, 38, 0, }, /* 402 */ - { 35, 7, 12, 0, 0, 35, 0, }, /* 403 */ - { 35, 12, 3, 0, 0, 35, 0, }, /* 404 */ - { 35, 10, 5, 0, 0, 35, 0, }, /* 405 */ - { 35, 26, 12, 0, 0, 35, 0, }, /* 406 */ - { 35, 21, 12, 0, 0, 35, 0, }, /* 407 */ - { 35, 13, 12, 0, 0, 35, 0, }, /* 408 */ - { 53, 7, 12, 0, 0, 53, 0, }, /* 409 */ - { 40, 7, 12, 0, 0, 40, 0, }, /* 410 */ - { 40, 13, 12, 0, 0, 40, 0, }, /* 411 */ - { 40, 15, 12, 0, 0, 40, 0, }, /* 412 */ - { 40, 26, 12, 0, 0, 40, 0, }, /* 413 */ - { 32, 26, 12, 0, 0, 32, 0, }, /* 414 */ - { 6, 7, 12, 0, 0, 6, 0, }, /* 415 */ - { 6, 12, 3, 0, 0, 6, 0, }, /* 416 */ - { 6, 10, 5, 0, 0, 6, 0, }, /* 417 */ - { 6, 21, 12, 0, 0, 6, 0, }, /* 418 */ - { 91, 7, 12, 0, 0, 91, 0, }, /* 419 */ - { 91, 10, 5, 0, 0, 91, 0, }, /* 420 */ - { 91, 12, 3, 0, 0, 91, 0, }, /* 421 */ - { 91, 10, 12, 0, 0, 91, 0, }, /* 422 */ - { 91, 13, 12, 0, 0, 91, 0, }, /* 423 */ - { 91, 21, 12, 0, 0, 91, 0, }, /* 424 */ - { 91, 6, 12, 0, 0, 91, 0, }, /* 425 */ - { 28, 11, 3, 0, 0, 28, 0, }, /* 426 */ - { 62, 12, 3, 0, 0, 62, 0, }, /* 427 */ - { 62, 10, 5, 0, 0, 62, 0, }, /* 428 */ - { 62, 7, 12, 0, 0, 62, 0, }, /* 429 */ - { 62, 10, 3, 0, 0, 62, 0, }, /* 430 */ - { 62, 13, 12, 0, 0, 62, 0, }, /* 431 */ - { 62, 21, 12, 0, 0, 62, 0, }, /* 432 */ - { 62, 26, 12, 0, 0, 62, 0, }, /* 433 */ - { 76, 12, 3, 0, 0, 76, 0, }, /* 434 */ - { 76, 10, 5, 0, 0, 76, 0, }, /* 435 */ - { 76, 7, 12, 0, 0, 76, 0, }, /* 436 */ - { 76, 13, 12, 0, 0, 76, 0, }, /* 437 */ - { 93, 7, 12, 0, 0, 93, 0, }, /* 438 */ - { 93, 12, 3, 0, 0, 93, 0, }, /* 439 */ - { 93, 10, 5, 0, 0, 93, 0, }, /* 440 */ - { 93, 21, 12, 0, 0, 93, 0, }, /* 441 */ - { 70, 7, 12, 0, 0, 70, 0, }, /* 442 */ - { 70, 10, 5, 0, 0, 70, 0, }, /* 443 */ - { 70, 12, 3, 0, 0, 70, 0, }, /* 444 */ - { 70, 21, 12, 0, 0, 70, 0, }, /* 445 */ - { 70, 13, 12, 0, 0, 70, 0, }, /* 446 */ - { 73, 13, 12, 0, 0, 73, 0, }, /* 447 */ - { 73, 7, 12, 0, 0, 73, 0, }, /* 448 */ - { 73, 6, 12, 0, 0, 73, 0, }, /* 449 */ - { 73, 21, 12, 0, 0, 73, 0, }, /* 450 */ - { 13, 5, 12, 63, -6222, 13, 0, }, /* 451 */ - { 13, 5, 12, 67, -6221, 13, 0, }, /* 452 */ - { 13, 5, 12, 71, -6212, 13, 0, }, /* 453 */ - { 13, 5, 12, 75, -6210, 13, 0, }, /* 454 */ - { 13, 5, 12, 79, -6210, 13, 0, }, /* 455 */ - { 13, 5, 12, 79, -6211, 13, 0, }, /* 456 */ - { 13, 5, 12, 84, -6204, 13, 0, }, /* 457 */ - { 13, 5, 12, 88, -6180, 13, 0, }, /* 458 */ - { 13, 5, 12, 108, 35267, 13, 0, }, /* 459 */ - { 17, 9, 12, 0, -3008, 17, 0, }, /* 460 */ - { 76, 21, 12, 0, 0, 76, 0, }, /* 461 */ - { 28, 12, 3, 0, 0, -110, 0, }, /* 462 */ - { 28, 12, 3, 0, 0, 15, 0, }, /* 463 */ - { 10, 21, 12, 0, 0, -37, 0, }, /* 464 */ - { 28, 12, 3, 0, 0, -16, 0, }, /* 465 */ - { 28, 12, 3, 0, 0, -43, 0, }, /* 466 */ - { 28, 12, 3, 0, 0, -138, 0, }, /* 467 */ - { 10, 10, 5, 0, 0, -16, 0, }, /* 468 */ - { 10, 7, 12, 0, 0, -40, 0, }, /* 469 */ - { 10, 7, 12, 0, 0, -16, 0, }, /* 470 */ - { 10, 7, 12, 0, 0, 15, 0, }, /* 471 */ - { 10, 7, 12, 0, 0, -154, 0, }, /* 472 */ - { 10, 7, 12, 0, 0, -37, 0, }, /* 473 */ - { 28, 12, 3, 0, 0, -89, 0, }, /* 474 */ - { 10, 10, 5, 0, 0, 3, 0, }, /* 475 */ - { 28, 12, 3, 0, 0, -37, 0, }, /* 476 */ - { 10, 7, 12, 0, 0, 150, 0, }, /* 477 */ - { 13, 5, 12, 0, 0, 13, 0, }, /* 478 */ - { 13, 6, 12, 0, 0, 13, 0, }, /* 479 */ - { 34, 5, 12, 0, 35332, 34, 0, }, /* 480 */ - { 34, 5, 12, 0, 3814, 34, 0, }, /* 481 */ - { 34, 5, 12, 0, 35384, 34, 0, }, /* 482 */ + { 48, 10, 3, 0, 0, 48, 0, }, /* 321 */ + { 48, 13, 12, 0, 0, 48, 0, }, /* 322 */ + { 48, 21, 12, 0, 0, 48, 0, }, /* 323 */ + { 57, 7, 12, 0, 0, 57, 0, }, /* 324 */ + { 57, 12, 3, 0, 0, 57, 0, }, /* 325 */ + { 57, 7, 5, 0, 0, 57, 0, }, /* 326 */ + { 57, 6, 12, 0, 0, 57, 0, }, /* 327 */ + { 57, 21, 12, 0, 0, 57, 0, }, /* 328 */ + { 57, 13, 12, 0, 0, 57, 0, }, /* 329 */ + { 33, 7, 12, 0, 0, 33, 0, }, /* 330 */ + { 33, 12, 3, 0, 0, 33, 0, }, /* 331 */ + { 33, 7, 5, 0, 0, 33, 0, }, /* 332 */ + { 33, 6, 12, 0, 0, 33, 0, }, /* 333 */ + { 33, 13, 12, 0, 0, 33, 0, }, /* 334 */ + { 58, 7, 12, 0, 0, 58, 0, }, /* 335 */ + { 58, 26, 12, 0, 0, 58, 0, }, /* 336 */ + { 58, 21, 12, 0, 0, 58, 0, }, /* 337 */ + { 58, 12, 3, 0, 0, 58, 0, }, /* 338 */ + { 58, 13, 12, 0, 0, 58, 0, }, /* 339 */ + { 58, 15, 12, 0, 0, 58, 0, }, /* 340 */ + { 58, 22, 12, 0, 0, 58, 0, }, /* 341 */ + { 58, 18, 12, 0, 0, 58, 0, }, /* 342 */ + { 58, 10, 5, 0, 0, 58, 0, }, /* 343 */ + { 39, 7, 12, 0, 0, 39, 0, }, /* 344 */ + { 39, 10, 12, 0, 0, 39, 0, }, /* 345 */ + { 39, 12, 3, 0, 0, 39, 0, }, /* 346 */ + { 39, 10, 5, 0, 0, 39, 0, }, /* 347 */ + { 39, 13, 12, 0, 0, -88, 0, }, /* 348 */ + { 39, 21, 12, 0, 0, 39, 0, }, /* 349 */ + { 39, 13, 12, 0, 0, 39, 0, }, /* 350 */ + { 39, 26, 12, 0, 0, 39, 0, }, /* 351 */ + { 17, 9, 12, 0, 7264, 17, 0, }, /* 352 */ + { 17, 5, 12, 0, 3008, 17, 0, }, /* 353 */ + { 10, 21, 12, 0, 0, -49, 0, }, /* 354 */ + { 17, 6, 12, 0, 0, 17, 0, }, /* 355 */ + { 24, 7, 6, 0, 0, 24, 0, }, /* 356 */ + { 24, 7, 7, 0, 0, 24, 0, }, /* 357 */ + { 24, 7, 8, 0, 0, 24, 0, }, /* 358 */ + { 16, 7, 12, 0, 0, 16, 0, }, /* 359 */ + { 16, 12, 3, 0, 0, 16, 0, }, /* 360 */ + { 16, 21, 12, 0, 0, 16, 0, }, /* 361 */ + { 16, 15, 12, 0, 0, 16, 0, }, /* 362 */ + { 16, 26, 12, 0, 0, 16, 0, }, /* 363 */ + { 9, 9, 12, 0, 38864, 9, 0, }, /* 364 */ + { 9, 9, 12, 0, 8, 9, 0, }, /* 365 */ + { 9, 5, 12, 0, -8, 9, 0, }, /* 366 */ + { 8, 17, 12, 0, 0, 8, 0, }, /* 367 */ + { 8, 7, 12, 0, 0, 8, 0, }, /* 368 */ + { 8, 26, 12, 0, 0, 8, 0, }, /* 369 */ + { 8, 21, 12, 0, 0, 8, 0, }, /* 370 */ + { 41, 29, 12, 0, 0, 41, 0, }, /* 371 */ + { 41, 7, 12, 0, 0, 41, 0, }, /* 372 */ + { 41, 22, 12, 0, 0, 41, 0, }, /* 373 */ + { 41, 18, 12, 0, 0, 41, 0, }, /* 374 */ + { 46, 7, 12, 0, 0, 46, 0, }, /* 375 */ + { 46, 14, 12, 0, 0, 46, 0, }, /* 376 */ + { 51, 7, 12, 0, 0, 51, 0, }, /* 377 */ + { 51, 12, 3, 0, 0, 51, 0, }, /* 378 */ + { 25, 7, 12, 0, 0, 25, 0, }, /* 379 */ + { 25, 12, 3, 0, 0, 25, 0, }, /* 380 */ + { 10, 21, 12, 0, 0, -117, 0, }, /* 381 */ + { 7, 7, 12, 0, 0, 7, 0, }, /* 382 */ + { 7, 12, 3, 0, 0, 7, 0, }, /* 383 */ + { 52, 7, 12, 0, 0, 52, 0, }, /* 384 */ + { 52, 12, 3, 0, 0, 52, 0, }, /* 385 */ + { 32, 7, 12, 0, 0, 32, 0, }, /* 386 */ + { 32, 12, 3, 0, 0, 32, 0, }, /* 387 */ + { 32, 10, 5, 0, 0, 32, 0, }, /* 388 */ + { 32, 21, 12, 0, 0, 32, 0, }, /* 389 */ + { 32, 6, 12, 0, 0, 32, 0, }, /* 390 */ + { 32, 23, 12, 0, 0, 32, 0, }, /* 391 */ + { 32, 13, 12, 0, 0, 32, 0, }, /* 392 */ + { 32, 15, 12, 0, 0, 32, 0, }, /* 393 */ + { 38, 21, 12, 0, 0, 38, 0, }, /* 394 */ + { 10, 21, 12, 0, 0, -73, 0, }, /* 395 */ + { 38, 17, 12, 0, 0, 38, 0, }, /* 396 */ + { 38, 12, 3, 0, 0, 38, 0, }, /* 397 */ + { 38, 1, 2, 0, 0, 38, 0, }, /* 398 */ + { 38, 13, 12, 0, 0, 38, 0, }, /* 399 */ + { 38, 7, 12, 0, 0, 38, 0, }, /* 400 */ + { 38, 6, 12, 0, 0, 38, 0, }, /* 401 */ + { 35, 7, 12, 0, 0, 35, 0, }, /* 402 */ + { 35, 12, 3, 0, 0, 35, 0, }, /* 403 */ + { 35, 10, 5, 0, 0, 35, 0, }, /* 404 */ + { 35, 26, 12, 0, 0, 35, 0, }, /* 405 */ + { 35, 21, 12, 0, 0, 35, 0, }, /* 406 */ + { 35, 13, 12, 0, 0, 35, 0, }, /* 407 */ + { 53, 7, 12, 0, 0, 53, 0, }, /* 408 */ + { 40, 7, 12, 0, 0, 40, 0, }, /* 409 */ + { 40, 13, 12, 0, 0, 40, 0, }, /* 410 */ + { 40, 15, 12, 0, 0, 40, 0, }, /* 411 */ + { 40, 26, 12, 0, 0, 40, 0, }, /* 412 */ + { 32, 26, 12, 0, 0, 32, 0, }, /* 413 */ + { 6, 7, 12, 0, 0, 6, 0, }, /* 414 */ + { 6, 12, 3, 0, 0, 6, 0, }, /* 415 */ + { 6, 10, 5, 0, 0, 6, 0, }, /* 416 */ + { 6, 21, 12, 0, 0, 6, 0, }, /* 417 */ + { 91, 7, 12, 0, 0, 91, 0, }, /* 418 */ + { 91, 10, 5, 0, 0, 91, 0, }, /* 419 */ + { 91, 12, 3, 0, 0, 91, 0, }, /* 420 */ + { 91, 10, 12, 0, 0, 91, 0, }, /* 421 */ + { 91, 13, 12, 0, 0, 91, 0, }, /* 422 */ + { 91, 21, 12, 0, 0, 91, 0, }, /* 423 */ + { 91, 6, 12, 0, 0, 91, 0, }, /* 424 */ + { 28, 11, 3, 0, 0, 28, 0, }, /* 425 */ + { 62, 12, 3, 0, 0, 62, 0, }, /* 426 */ + { 62, 10, 5, 0, 0, 62, 0, }, /* 427 */ + { 62, 7, 12, 0, 0, 62, 0, }, /* 428 */ + { 62, 10, 3, 0, 0, 62, 0, }, /* 429 */ + { 62, 13, 12, 0, 0, 62, 0, }, /* 430 */ + { 62, 21, 12, 0, 0, 62, 0, }, /* 431 */ + { 62, 26, 12, 0, 0, 62, 0, }, /* 432 */ + { 76, 12, 3, 0, 0, 76, 0, }, /* 433 */ + { 76, 10, 5, 0, 0, 76, 0, }, /* 434 */ + { 76, 7, 12, 0, 0, 76, 0, }, /* 435 */ + { 76, 13, 12, 0, 0, 76, 0, }, /* 436 */ + { 93, 7, 12, 0, 0, 93, 0, }, /* 437 */ + { 93, 12, 3, 0, 0, 93, 0, }, /* 438 */ + { 93, 10, 5, 0, 0, 93, 0, }, /* 439 */ + { 93, 21, 12, 0, 0, 93, 0, }, /* 440 */ + { 70, 7, 12, 0, 0, 70, 0, }, /* 441 */ + { 70, 10, 5, 0, 0, 70, 0, }, /* 442 */ + { 70, 12, 3, 0, 0, 70, 0, }, /* 443 */ + { 70, 21, 12, 0, 0, 70, 0, }, /* 444 */ + { 70, 13, 12, 0, 0, 70, 0, }, /* 445 */ + { 73, 13, 12, 0, 0, 73, 0, }, /* 446 */ + { 73, 7, 12, 0, 0, 73, 0, }, /* 447 */ + { 73, 6, 12, 0, 0, 73, 0, }, /* 448 */ + { 73, 21, 12, 0, 0, 73, 0, }, /* 449 */ + { 13, 5, 12, 63, -6222, 13, 0, }, /* 450 */ + { 13, 5, 12, 67, -6221, 13, 0, }, /* 451 */ + { 13, 5, 12, 71, -6212, 13, 0, }, /* 452 */ + { 13, 5, 12, 75, -6210, 13, 0, }, /* 453 */ + { 13, 5, 12, 79, -6210, 13, 0, }, /* 454 */ + { 13, 5, 12, 79, -6211, 13, 0, }, /* 455 */ + { 13, 5, 12, 84, -6204, 13, 0, }, /* 456 */ + { 13, 5, 12, 88, -6180, 13, 0, }, /* 457 */ + { 13, 5, 12, 108, 35267, 13, 0, }, /* 458 */ + { 17, 9, 12, 0, -3008, 17, 0, }, /* 459 */ + { 76, 21, 12, 0, 0, 76, 0, }, /* 460 */ + { 28, 12, 3, 0, 0, -112, 0, }, /* 461 */ + { 28, 12, 3, 0, 0, 15, 0, }, /* 462 */ + { 10, 21, 12, 0, 0, -37, 0, }, /* 463 */ + { 28, 12, 3, 0, 0, -13, 0, }, /* 464 */ + { 28, 12, 3, 0, 0, -43, 0, }, /* 465 */ + { 28, 12, 3, 0, 0, -146, 0, }, /* 466 */ + { 10, 10, 5, 0, 0, -13, 0, }, /* 467 */ + { 10, 7, 12, 0, 0, -40, 0, }, /* 468 */ + { 10, 7, 12, 0, 0, -13, 0, }, /* 469 */ + { 10, 7, 12, 0, 0, 15, 0, }, /* 470 */ + { 10, 7, 12, 0, 0, -162, 0, }, /* 471 */ + { 10, 7, 12, 0, 0, -37, 0, }, /* 472 */ + { 28, 12, 3, 0, 0, -96, 0, }, /* 473 */ + { 10, 10, 5, 0, 0, 3, 0, }, /* 474 */ + { 28, 12, 3, 0, 0, -37, 0, }, /* 475 */ + { 10, 7, 12, 0, 0, 150, 0, }, /* 476 */ + { 13, 5, 12, 0, 0, 13, 0, }, /* 477 */ + { 13, 6, 12, 0, 0, 13, 0, }, /* 478 */ + { 34, 5, 12, 0, 35332, 34, 0, }, /* 479 */ + { 34, 5, 12, 0, 3814, 34, 0, }, /* 480 */ + { 34, 5, 12, 0, 35384, 34, 0, }, /* 481 */ + { 28, 12, 3, 0, 0, -34, 0, }, /* 482 */ { 34, 9, 12, 92, 1, 34, 0, }, /* 483 */ { 34, 5, 12, 92, -1, 34, 0, }, /* 484 */ { 34, 5, 12, 92, -58, 34, 0, }, /* 485 */ @@ -699,10 +702,10 @@ const ucd_record PRIV(ucd_records)[] = { /* 11508 bytes, record size 12 */ { 28, 1, 13, 0, 0, 28, 0, }, /* 506 */ { 10, 27, 2, 0, 0, 10, 0, }, /* 507 */ { 10, 28, 2, 0, 0, 10, 0, }, /* 508 */ - { 10, 29, 12, 0, 0, -67, 0, }, /* 509 */ + { 10, 29, 12, 0, 0, -70, 0, }, /* 509 */ { 10, 21, 14, 0, 0, 10, 0, }, /* 510 */ { 0, 2, 2, 0, 0, 0, 0, }, /* 511 */ - { 28, 12, 3, 0, 0, -93, 0, }, /* 512 */ + { 28, 12, 3, 0, 0, -100, 0, }, /* 512 */ { 10, 9, 12, 0, 0, 10, 0, }, /* 513 */ { 10, 5, 12, 0, 0, 10, 0, }, /* 514 */ { 20, 9, 12, 96, -7517, 20, 0, }, /* 515 */ @@ -743,31 +746,31 @@ const ucd_record PRIV(ucd_records)[] = { /* 11508 bytes, record size 12 */ { 59, 21, 12, 0, 0, 59, 0, }, /* 550 */ { 59, 12, 3, 0, 0, 59, 0, }, /* 551 */ { 13, 12, 3, 0, 0, 13, 0, }, /* 552 */ - { 10, 21, 12, 0, 0, -28, 0, }, /* 553 */ + { 10, 21, 12, 0, 0, -25, 0, }, /* 553 */ { 23, 26, 12, 0, 0, 23, 0, }, /* 554 */ - { 10, 21, 12, 0, 0, -131, 0, }, /* 555 */ - { 10, 21, 12, 0, 0, -125, 0, }, /* 556 */ + { 10, 21, 12, 0, 0, -139, 0, }, /* 555 */ + { 10, 21, 12, 0, 0, -133, 0, }, /* 556 */ { 23, 6, 12, 0, 0, 23, 0, }, /* 557 */ { 10, 7, 12, 0, 0, 23, 0, }, /* 558 */ { 23, 14, 12, 0, 0, 23, 0, }, /* 559 */ - { 10, 22, 12, 0, 0, -131, 0, }, /* 560 */ - { 10, 18, 12, 0, 0, -131, 0, }, /* 561 */ - { 10, 26, 12, 0, 0, -125, 0, }, /* 562 */ - { 10, 17, 12, 0, 0, -125, 0, }, /* 563 */ - { 10, 22, 12, 0, 0, -125, 0, }, /* 564 */ - { 10, 18, 12, 0, 0, -125, 0, }, /* 565 */ - { 28, 12, 3, 0, 0, -19, 0, }, /* 566 */ + { 10, 22, 12, 0, 0, -139, 0, }, /* 560 */ + { 10, 18, 12, 0, 0, -139, 0, }, /* 561 */ + { 10, 26, 12, 0, 0, -133, 0, }, /* 562 */ + { 10, 17, 12, 0, 0, -133, 0, }, /* 563 */ + { 10, 22, 12, 0, 0, -133, 0, }, /* 564 */ + { 10, 18, 12, 0, 0, -133, 0, }, /* 565 */ + { 28, 12, 3, 0, 0, -16, 0, }, /* 566 */ { 24, 10, 3, 0, 0, 24, 0, }, /* 567 */ - { 10, 17, 14, 0, 0, -125, 0, }, /* 568 */ - { 10, 6, 12, 0, 0, -61, 0, }, /* 569 */ - { 10, 7, 12, 0, 0, -97, 0, }, /* 570 */ - { 10, 21, 14, 0, 0, -97, 0, }, /* 571 */ + { 10, 17, 14, 0, 0, -133, 0, }, /* 568 */ + { 10, 6, 12, 0, 0, -64, 0, }, /* 569 */ + { 10, 7, 12, 0, 0, -104, 0, }, /* 570 */ + { 10, 21, 14, 0, 0, -104, 0, }, /* 571 */ { 10, 26, 12, 0, 0, 23, 0, }, /* 572 */ { 27, 7, 12, 0, 0, 27, 0, }, /* 573 */ - { 28, 12, 3, 0, 0, -61, 0, }, /* 574 */ - { 10, 24, 12, 0, 0, -61, 0, }, /* 575 */ + { 28, 12, 3, 0, 0, -64, 0, }, /* 574 */ + { 10, 24, 12, 0, 0, -64, 0, }, /* 575 */ { 27, 6, 12, 0, 0, 27, 0, }, /* 576 */ - { 10, 17, 12, 0, 0, -61, 0, }, /* 577 */ + { 10, 17, 12, 0, 0, -64, 0, }, /* 577 */ { 30, 7, 12, 0, 0, 30, 0, }, /* 578 */ { 30, 6, 12, 0, 0, 30, 0, }, /* 579 */ { 4, 7, 12, 0, 0, 4, 0, }, /* 580 */ @@ -795,360 +798,376 @@ const ucd_record PRIV(ucd_records)[] = { /* 11508 bytes, record size 12 */ { 79, 14, 12, 0, 0, 79, 0, }, /* 602 */ { 79, 12, 3, 0, 0, 79, 0, }, /* 603 */ { 79, 21, 12, 0, 0, 79, 0, }, /* 604 */ - { 34, 9, 12, 0, -35332, 34, 0, }, /* 605 */ - { 34, 9, 12, 0, -42280, 34, 0, }, /* 606 */ - { 34, 5, 12, 0, 48, 34, 0, }, /* 607 */ - { 34, 9, 12, 0, -42308, 34, 0, }, /* 608 */ - { 34, 9, 12, 0, -42319, 34, 0, }, /* 609 */ - { 34, 9, 12, 0, -42315, 34, 0, }, /* 610 */ - { 34, 9, 12, 0, -42305, 34, 0, }, /* 611 */ - { 34, 9, 12, 0, -42258, 34, 0, }, /* 612 */ - { 34, 9, 12, 0, -42282, 34, 0, }, /* 613 */ - { 34, 9, 12, 0, -42261, 34, 0, }, /* 614 */ - { 34, 9, 12, 0, 928, 34, 0, }, /* 615 */ - { 34, 9, 12, 0, -48, 34, 0, }, /* 616 */ - { 34, 9, 12, 0, -42307, 34, 0, }, /* 617 */ - { 34, 9, 12, 0, -35384, 34, 0, }, /* 618 */ - { 49, 7, 12, 0, 0, 49, 0, }, /* 619 */ - { 49, 12, 3, 0, 0, 49, 0, }, /* 620 */ - { 49, 10, 5, 0, 0, 49, 0, }, /* 621 */ - { 49, 26, 12, 0, 0, 49, 0, }, /* 622 */ - { 10, 15, 12, 0, 0, -216, 0, }, /* 623 */ - { 10, 15, 12, 0, 0, -202, 0, }, /* 624 */ - { 10, 26, 12, 0, 0, -163, 0, }, /* 625 */ - { 10, 23, 12, 0, 0, -163, 0, }, /* 626 */ - { 65, 7, 12, 0, 0, 65, 0, }, /* 627 */ - { 65, 21, 12, 0, 0, 65, 0, }, /* 628 */ - { 75, 10, 5, 0, 0, 75, 0, }, /* 629 */ - { 75, 7, 12, 0, 0, 75, 0, }, /* 630 */ - { 75, 12, 3, 0, 0, 75, 0, }, /* 631 */ - { 75, 21, 12, 0, 0, 75, 0, }, /* 632 */ - { 75, 13, 12, 0, 0, 75, 0, }, /* 633 */ - { 15, 12, 3, 0, 0, -16, 0, }, /* 634 */ - { 15, 7, 12, 0, 0, -46, 0, }, /* 635 */ - { 69, 13, 12, 0, 0, 69, 0, }, /* 636 */ - { 69, 7, 12, 0, 0, 69, 0, }, /* 637 */ - { 69, 12, 3, 0, 0, 69, 0, }, /* 638 */ - { 10, 21, 12, 0, 0, -101, 0, }, /* 639 */ - { 69, 21, 12, 0, 0, 69, 0, }, /* 640 */ - { 74, 7, 12, 0, 0, 74, 0, }, /* 641 */ - { 74, 12, 3, 0, 0, 74, 0, }, /* 642 */ - { 74, 10, 5, 0, 0, 74, 0, }, /* 643 */ - { 74, 21, 12, 0, 0, 74, 0, }, /* 644 */ - { 84, 12, 3, 0, 0, 84, 0, }, /* 645 */ - { 84, 10, 5, 0, 0, 84, 0, }, /* 646 */ - { 84, 7, 12, 0, 0, 84, 0, }, /* 647 */ - { 84, 21, 12, 0, 0, 84, 0, }, /* 648 */ - { 10, 6, 12, 0, 0, -22, 0, }, /* 649 */ - { 84, 13, 12, 0, 0, 84, 0, }, /* 650 */ - { 39, 6, 12, 0, 0, 39, 0, }, /* 651 */ - { 68, 7, 12, 0, 0, 68, 0, }, /* 652 */ - { 68, 12, 3, 0, 0, 68, 0, }, /* 653 */ - { 68, 10, 5, 0, 0, 68, 0, }, /* 654 */ - { 68, 13, 12, 0, 0, 68, 0, }, /* 655 */ - { 68, 21, 12, 0, 0, 68, 0, }, /* 656 */ - { 92, 7, 12, 0, 0, 92, 0, }, /* 657 */ - { 92, 12, 3, 0, 0, 92, 0, }, /* 658 */ - { 92, 6, 12, 0, 0, 92, 0, }, /* 659 */ - { 92, 21, 12, 0, 0, 92, 0, }, /* 660 */ - { 87, 7, 12, 0, 0, 87, 0, }, /* 661 */ - { 87, 10, 5, 0, 0, 87, 0, }, /* 662 */ - { 87, 12, 3, 0, 0, 87, 0, }, /* 663 */ - { 87, 21, 12, 0, 0, 87, 0, }, /* 664 */ - { 87, 6, 12, 0, 0, 87, 0, }, /* 665 */ - { 34, 5, 12, 0, -928, 34, 0, }, /* 666 */ - { 9, 5, 12, 0, -38864, 9, 0, }, /* 667 */ - { 87, 13, 12, 0, 0, 87, 0, }, /* 668 */ - { 24, 7, 9, 0, 0, 24, 0, }, /* 669 */ - { 24, 7, 10, 0, 0, 24, 0, }, /* 670 */ - { 0, 4, 12, 0, 0, 0, 0, }, /* 671 */ - { 0, 3, 12, 0, 0, 0, 0, }, /* 672 */ - { 26, 25, 12, 0, 0, 26, 0, }, /* 673 */ - { 1, 24, 12, 0, 0, 1, 0, }, /* 674 */ - { 1, 7, 12, 0, 0, -10, 0, }, /* 675 */ - { 1, 26, 12, 0, 0, -10, 0, }, /* 676 */ - { 10, 6, 3, 0, 0, -61, 0, }, /* 677 */ - { 36, 7, 12, 0, 0, 36, 0, }, /* 678 */ - { 10, 21, 12, 0, 0, -25, 0, }, /* 679 */ - { 10, 15, 12, 0, 0, -85, 0, }, /* 680 */ - { 10, 26, 12, 0, 0, -25, 0, }, /* 681 */ - { 20, 14, 12, 0, 0, 20, 0, }, /* 682 */ - { 20, 15, 12, 0, 0, 20, 0, }, /* 683 */ - { 20, 26, 12, 0, 0, 20, 0, }, /* 684 */ - { 71, 7, 12, 0, 0, 71, 0, }, /* 685 */ - { 67, 7, 12, 0, 0, 67, 0, }, /* 686 */ - { 28, 12, 3, 0, 0, -1, 0, }, /* 687 */ - { 10, 15, 12, 0, 0, -1, 0, }, /* 688 */ - { 42, 7, 12, 0, 0, 42, 0, }, /* 689 */ - { 42, 15, 12, 0, 0, 42, 0, }, /* 690 */ - { 19, 7, 12, 0, 0, 19, 0, }, /* 691 */ - { 19, 14, 12, 0, 0, 19, 0, }, /* 692 */ - { 118, 7, 12, 0, 0, 118, 0, }, /* 693 */ - { 118, 12, 3, 0, 0, 118, 0, }, /* 694 */ - { 60, 7, 12, 0, 0, 60, 0, }, /* 695 */ - { 60, 21, 12, 0, 0, 60, 0, }, /* 696 */ - { 43, 7, 12, 0, 0, 43, 0, }, /* 697 */ - { 43, 21, 12, 0, 0, 43, 0, }, /* 698 */ - { 43, 14, 12, 0, 0, 43, 0, }, /* 699 */ - { 14, 9, 12, 0, 40, 14, 0, }, /* 700 */ - { 14, 5, 12, 0, -40, 14, 0, }, /* 701 */ - { 47, 7, 12, 0, 0, 47, 0, }, /* 702 */ - { 45, 7, 12, 0, 0, 45, 0, }, /* 703 */ - { 45, 13, 12, 0, 0, 45, 0, }, /* 704 */ - { 136, 9, 12, 0, 40, 136, 0, }, /* 705 */ - { 136, 5, 12, 0, -40, 136, 0, }, /* 706 */ - { 106, 7, 12, 0, 0, 106, 0, }, /* 707 */ - { 104, 7, 12, 0, 0, 104, 0, }, /* 708 */ - { 104, 21, 12, 0, 0, 104, 0, }, /* 709 */ - { 110, 7, 12, 0, 0, 110, 0, }, /* 710 */ - { 12, 7, 12, 0, 0, 12, 0, }, /* 711 */ - { 81, 7, 12, 0, 0, 81, 0, }, /* 712 */ - { 81, 21, 12, 0, 0, 81, 0, }, /* 713 */ - { 81, 15, 12, 0, 0, 81, 0, }, /* 714 */ - { 120, 7, 12, 0, 0, 120, 0, }, /* 715 */ - { 120, 26, 12, 0, 0, 120, 0, }, /* 716 */ - { 120, 15, 12, 0, 0, 120, 0, }, /* 717 */ - { 116, 7, 12, 0, 0, 116, 0, }, /* 718 */ - { 116, 15, 12, 0, 0, 116, 0, }, /* 719 */ - { 128, 7, 12, 0, 0, 128, 0, }, /* 720 */ - { 128, 15, 12, 0, 0, 128, 0, }, /* 721 */ - { 66, 7, 12, 0, 0, 66, 0, }, /* 722 */ - { 66, 15, 12, 0, 0, 66, 0, }, /* 723 */ - { 66, 21, 12, 0, 0, 66, 0, }, /* 724 */ - { 72, 7, 12, 0, 0, 72, 0, }, /* 725 */ - { 72, 21, 12, 0, 0, 72, 0, }, /* 726 */ - { 98, 7, 12, 0, 0, 98, 0, }, /* 727 */ - { 97, 7, 12, 0, 0, 97, 0, }, /* 728 */ - { 97, 15, 12, 0, 0, 97, 0, }, /* 729 */ - { 31, 7, 12, 0, 0, 31, 0, }, /* 730 */ - { 31, 12, 3, 0, 0, 31, 0, }, /* 731 */ - { 31, 15, 12, 0, 0, 31, 0, }, /* 732 */ - { 31, 21, 12, 0, 0, 31, 0, }, /* 733 */ - { 88, 7, 12, 0, 0, 88, 0, }, /* 734 */ - { 88, 15, 12, 0, 0, 88, 0, }, /* 735 */ - { 88, 21, 12, 0, 0, 88, 0, }, /* 736 */ - { 117, 7, 12, 0, 0, 117, 0, }, /* 737 */ - { 117, 15, 12, 0, 0, 117, 0, }, /* 738 */ - { 112, 7, 12, 0, 0, 112, 0, }, /* 739 */ - { 112, 26, 12, 0, 0, 112, 0, }, /* 740 */ - { 112, 12, 3, 0, 0, 112, 0, }, /* 741 */ - { 112, 15, 12, 0, 0, 112, 0, }, /* 742 */ - { 112, 21, 12, 0, 0, 112, 0, }, /* 743 */ - { 78, 7, 12, 0, 0, 78, 0, }, /* 744 */ - { 78, 21, 12, 0, 0, 78, 0, }, /* 745 */ - { 83, 7, 12, 0, 0, 83, 0, }, /* 746 */ - { 83, 15, 12, 0, 0, 83, 0, }, /* 747 */ - { 82, 7, 12, 0, 0, 82, 0, }, /* 748 */ - { 82, 15, 12, 0, 0, 82, 0, }, /* 749 */ - { 121, 7, 12, 0, 0, 121, 0, }, /* 750 */ - { 121, 21, 12, 0, 0, 121, 0, }, /* 751 */ - { 121, 15, 12, 0, 0, 121, 0, }, /* 752 */ - { 89, 7, 12, 0, 0, 89, 0, }, /* 753 */ - { 130, 9, 12, 0, 64, 130, 0, }, /* 754 */ - { 130, 5, 12, 0, -64, 130, 0, }, /* 755 */ - { 130, 15, 12, 0, 0, 130, 0, }, /* 756 */ - { 144, 7, 12, 0, 0, 144, 0, }, /* 757 */ - { 144, 12, 3, 0, 0, 144, 0, }, /* 758 */ - { 144, 13, 12, 0, 0, 144, 0, }, /* 759 */ - { 1, 15, 12, 0, 0, 1, 0, }, /* 760 */ - { 147, 7, 12, 0, 0, 147, 0, }, /* 761 */ - { 147, 15, 12, 0, 0, 147, 0, }, /* 762 */ - { 148, 7, 12, 0, 0, 148, 0, }, /* 763 */ - { 148, 12, 3, 0, 0, 148, 0, }, /* 764 */ - { 148, 15, 12, 0, 0, 148, 0, }, /* 765 */ - { 148, 21, 12, 0, 0, 148, 0, }, /* 766 */ - { 149, 7, 12, 0, 0, 149, 0, }, /* 767 */ - { 94, 10, 5, 0, 0, 94, 0, }, /* 768 */ - { 94, 12, 3, 0, 0, 94, 0, }, /* 769 */ - { 94, 7, 12, 0, 0, 94, 0, }, /* 770 */ - { 94, 21, 12, 0, 0, 94, 0, }, /* 771 */ - { 94, 15, 12, 0, 0, 94, 0, }, /* 772 */ - { 94, 13, 12, 0, 0, 94, 0, }, /* 773 */ - { 85, 12, 3, 0, 0, 85, 0, }, /* 774 */ - { 85, 10, 5, 0, 0, 85, 0, }, /* 775 */ - { 85, 7, 12, 0, 0, 85, 0, }, /* 776 */ - { 85, 21, 12, 0, 0, 85, 0, }, /* 777 */ - { 85, 1, 4, 0, 0, 85, 0, }, /* 778 */ - { 101, 7, 12, 0, 0, 101, 0, }, /* 779 */ - { 101, 13, 12, 0, 0, 101, 0, }, /* 780 */ - { 96, 12, 3, 0, 0, 96, 0, }, /* 781 */ - { 96, 7, 12, 0, 0, 96, 0, }, /* 782 */ - { 96, 10, 5, 0, 0, 96, 0, }, /* 783 */ - { 96, 13, 12, 0, 0, 96, 0, }, /* 784 */ - { 96, 21, 12, 0, 0, 96, 0, }, /* 785 */ - { 111, 7, 12, 0, 0, 111, 0, }, /* 786 */ - { 111, 12, 3, 0, 0, 111, 0, }, /* 787 */ - { 111, 21, 12, 0, 0, 111, 0, }, /* 788 */ - { 100, 12, 3, 0, 0, 100, 0, }, /* 789 */ - { 100, 10, 5, 0, 0, 100, 0, }, /* 790 */ - { 100, 7, 12, 0, 0, 100, 0, }, /* 791 */ - { 100, 7, 4, 0, 0, 100, 0, }, /* 792 */ - { 100, 21, 12, 0, 0, 100, 0, }, /* 793 */ - { 100, 13, 12, 0, 0, 100, 0, }, /* 794 */ - { 48, 15, 12, 0, 0, 48, 0, }, /* 795 */ - { 108, 7, 12, 0, 0, 108, 0, }, /* 796 */ - { 108, 10, 5, 0, 0, 108, 0, }, /* 797 */ - { 108, 12, 3, 0, 0, 108, 0, }, /* 798 */ - { 108, 21, 12, 0, 0, 108, 0, }, /* 799 */ - { 129, 7, 12, 0, 0, 129, 0, }, /* 800 */ - { 129, 21, 12, 0, 0, 129, 0, }, /* 801 */ - { 109, 7, 12, 0, 0, 109, 0, }, /* 802 */ - { 109, 12, 3, 0, 0, 109, 0, }, /* 803 */ - { 109, 10, 5, 0, 0, 109, 0, }, /* 804 */ - { 109, 13, 12, 0, 0, 109, 0, }, /* 805 */ - { 107, 12, 3, 0, 0, 107, 0, }, /* 806 */ - { 107, 12, 3, 0, 0, -52, 0, }, /* 807 */ - { 107, 10, 5, 0, 0, 107, 0, }, /* 808 */ - { 107, 10, 5, 0, 0, -52, 0, }, /* 809 */ - { 107, 7, 12, 0, 0, 107, 0, }, /* 810 */ - { 28, 12, 3, 0, 0, -52, 0, }, /* 811 */ - { 107, 10, 3, 0, 0, 107, 0, }, /* 812 */ - { 135, 7, 12, 0, 0, 135, 0, }, /* 813 */ - { 135, 10, 5, 0, 0, 135, 0, }, /* 814 */ - { 135, 12, 3, 0, 0, 135, 0, }, /* 815 */ - { 135, 21, 12, 0, 0, 135, 0, }, /* 816 */ - { 135, 13, 12, 0, 0, 135, 0, }, /* 817 */ - { 124, 7, 12, 0, 0, 124, 0, }, /* 818 */ - { 124, 10, 3, 0, 0, 124, 0, }, /* 819 */ - { 124, 10, 5, 0, 0, 124, 0, }, /* 820 */ - { 124, 12, 3, 0, 0, 124, 0, }, /* 821 */ - { 124, 21, 12, 0, 0, 124, 0, }, /* 822 */ - { 124, 13, 12, 0, 0, 124, 0, }, /* 823 */ - { 123, 7, 12, 0, 0, 123, 0, }, /* 824 */ - { 123, 10, 3, 0, 0, 123, 0, }, /* 825 */ - { 123, 10, 5, 0, 0, 123, 0, }, /* 826 */ - { 123, 12, 3, 0, 0, 123, 0, }, /* 827 */ - { 123, 21, 12, 0, 0, 123, 0, }, /* 828 */ - { 114, 7, 12, 0, 0, 114, 0, }, /* 829 */ - { 114, 10, 5, 0, 0, 114, 0, }, /* 830 */ - { 114, 12, 3, 0, 0, 114, 0, }, /* 831 */ - { 114, 21, 12, 0, 0, 114, 0, }, /* 832 */ - { 114, 13, 12, 0, 0, 114, 0, }, /* 833 */ - { 102, 7, 12, 0, 0, 102, 0, }, /* 834 */ - { 102, 12, 3, 0, 0, 102, 0, }, /* 835 */ - { 102, 10, 5, 0, 0, 102, 0, }, /* 836 */ - { 102, 13, 12, 0, 0, 102, 0, }, /* 837 */ - { 126, 7, 12, 0, 0, 126, 0, }, /* 838 */ - { 126, 12, 3, 0, 0, 126, 0, }, /* 839 */ - { 126, 10, 5, 0, 0, 126, 0, }, /* 840 */ - { 126, 13, 12, 0, 0, 126, 0, }, /* 841 */ - { 126, 15, 12, 0, 0, 126, 0, }, /* 842 */ - { 126, 21, 12, 0, 0, 126, 0, }, /* 843 */ - { 126, 26, 12, 0, 0, 126, 0, }, /* 844 */ - { 142, 7, 12, 0, 0, 142, 0, }, /* 845 */ - { 142, 10, 5, 0, 0, 142, 0, }, /* 846 */ - { 142, 12, 3, 0, 0, 142, 0, }, /* 847 */ - { 142, 21, 12, 0, 0, 142, 0, }, /* 848 */ - { 125, 9, 12, 0, 32, 125, 0, }, /* 849 */ - { 125, 5, 12, 0, -32, 125, 0, }, /* 850 */ - { 125, 13, 12, 0, 0, 125, 0, }, /* 851 */ - { 125, 15, 12, 0, 0, 125, 0, }, /* 852 */ - { 125, 7, 12, 0, 0, 125, 0, }, /* 853 */ - { 150, 7, 12, 0, 0, 150, 0, }, /* 854 */ - { 150, 10, 5, 0, 0, 150, 0, }, /* 855 */ - { 150, 12, 3, 0, 0, 150, 0, }, /* 856 */ - { 150, 21, 12, 0, 0, 150, 0, }, /* 857 */ - { 141, 7, 12, 0, 0, 141, 0, }, /* 858 */ - { 141, 12, 3, 0, 0, 141, 0, }, /* 859 */ - { 141, 10, 5, 0, 0, 141, 0, }, /* 860 */ - { 141, 7, 4, 0, 0, 141, 0, }, /* 861 */ - { 141, 21, 12, 0, 0, 141, 0, }, /* 862 */ - { 140, 7, 12, 0, 0, 140, 0, }, /* 863 */ - { 140, 12, 3, 0, 0, 140, 0, }, /* 864 */ - { 140, 10, 5, 0, 0, 140, 0, }, /* 865 */ - { 140, 7, 4, 0, 0, 140, 0, }, /* 866 */ - { 140, 21, 12, 0, 0, 140, 0, }, /* 867 */ - { 122, 7, 12, 0, 0, 122, 0, }, /* 868 */ - { 133, 7, 12, 0, 0, 133, 0, }, /* 869 */ - { 133, 10, 5, 0, 0, 133, 0, }, /* 870 */ - { 133, 12, 3, 0, 0, 133, 0, }, /* 871 */ - { 133, 21, 12, 0, 0, 133, 0, }, /* 872 */ - { 133, 13, 12, 0, 0, 133, 0, }, /* 873 */ - { 133, 15, 12, 0, 0, 133, 0, }, /* 874 */ - { 134, 21, 12, 0, 0, 134, 0, }, /* 875 */ - { 134, 7, 12, 0, 0, 134, 0, }, /* 876 */ - { 134, 12, 3, 0, 0, 134, 0, }, /* 877 */ - { 134, 10, 5, 0, 0, 134, 0, }, /* 878 */ - { 138, 7, 12, 0, 0, 138, 0, }, /* 879 */ - { 138, 12, 3, 0, 0, 138, 0, }, /* 880 */ - { 138, 7, 4, 0, 0, 138, 0, }, /* 881 */ - { 138, 13, 12, 0, 0, 138, 0, }, /* 882 */ - { 143, 7, 12, 0, 0, 143, 0, }, /* 883 */ - { 143, 10, 5, 0, 0, 143, 0, }, /* 884 */ - { 143, 12, 3, 0, 0, 143, 0, }, /* 885 */ - { 143, 13, 12, 0, 0, 143, 0, }, /* 886 */ - { 145, 7, 12, 0, 0, 145, 0, }, /* 887 */ - { 145, 12, 3, 0, 0, 145, 0, }, /* 888 */ - { 145, 10, 5, 0, 0, 145, 0, }, /* 889 */ - { 145, 21, 12, 0, 0, 145, 0, }, /* 890 */ - { 54, 15, 12, 0, 0, 54, 0, }, /* 891 */ - { 54, 21, 12, 0, 0, 54, 0, }, /* 892 */ - { 63, 7, 12, 0, 0, 63, 0, }, /* 893 */ - { 63, 14, 12, 0, 0, 63, 0, }, /* 894 */ - { 63, 21, 12, 0, 0, 63, 0, }, /* 895 */ - { 80, 7, 12, 0, 0, 80, 0, }, /* 896 */ - { 80, 1, 2, 0, 0, 80, 0, }, /* 897 */ - { 127, 7, 12, 0, 0, 127, 0, }, /* 898 */ - { 115, 7, 12, 0, 0, 115, 0, }, /* 899 */ - { 115, 13, 12, 0, 0, 115, 0, }, /* 900 */ - { 115, 21, 12, 0, 0, 115, 0, }, /* 901 */ - { 103, 7, 12, 0, 0, 103, 0, }, /* 902 */ - { 103, 12, 3, 0, 0, 103, 0, }, /* 903 */ - { 103, 21, 12, 0, 0, 103, 0, }, /* 904 */ - { 119, 7, 12, 0, 0, 119, 0, }, /* 905 */ - { 119, 12, 3, 0, 0, 119, 0, }, /* 906 */ - { 119, 21, 12, 0, 0, 119, 0, }, /* 907 */ - { 119, 26, 12, 0, 0, 119, 0, }, /* 908 */ - { 119, 6, 12, 0, 0, 119, 0, }, /* 909 */ - { 119, 13, 12, 0, 0, 119, 0, }, /* 910 */ - { 119, 15, 12, 0, 0, 119, 0, }, /* 911 */ - { 146, 9, 12, 0, 32, 146, 0, }, /* 912 */ - { 146, 5, 12, 0, -32, 146, 0, }, /* 913 */ - { 146, 15, 12, 0, 0, 146, 0, }, /* 914 */ - { 146, 21, 12, 0, 0, 146, 0, }, /* 915 */ - { 99, 7, 12, 0, 0, 99, 0, }, /* 916 */ - { 99, 12, 3, 0, 0, 99, 0, }, /* 917 */ - { 99, 10, 5, 0, 0, 99, 0, }, /* 918 */ - { 99, 6, 12, 0, 0, 99, 0, }, /* 919 */ - { 137, 6, 12, 0, 0, 137, 0, }, /* 920 */ - { 139, 6, 12, 0, 0, 139, 0, }, /* 921 */ - { 137, 7, 12, 0, 0, 137, 0, }, /* 922 */ - { 139, 7, 12, 0, 0, 139, 0, }, /* 923 */ - { 105, 7, 12, 0, 0, 105, 0, }, /* 924 */ - { 105, 26, 12, 0, 0, 105, 0, }, /* 925 */ - { 105, 12, 3, 0, 0, 105, 0, }, /* 926 */ - { 105, 21, 12, 0, 0, 105, 0, }, /* 927 */ - { 10, 1, 2, 0, 0, 105, 0, }, /* 928 */ - { 10, 10, 3, 0, 0, 10, 0, }, /* 929 */ - { 10, 10, 5, 0, 0, 10, 0, }, /* 930 */ - { 20, 12, 3, 0, 0, 20, 0, }, /* 931 */ - { 131, 26, 12, 0, 0, 131, 0, }, /* 932 */ - { 131, 12, 3, 0, 0, 131, 0, }, /* 933 */ - { 131, 21, 12, 0, 0, 131, 0, }, /* 934 */ - { 18, 12, 3, 0, 0, 18, 0, }, /* 935 */ - { 151, 7, 12, 0, 0, 151, 0, }, /* 936 */ - { 151, 12, 3, 0, 0, 151, 0, }, /* 937 */ - { 151, 6, 12, 0, 0, 151, 0, }, /* 938 */ - { 151, 13, 12, 0, 0, 151, 0, }, /* 939 */ - { 151, 26, 12, 0, 0, 151, 0, }, /* 940 */ - { 152, 7, 12, 0, 0, 152, 0, }, /* 941 */ - { 152, 12, 3, 0, 0, 152, 0, }, /* 942 */ - { 152, 13, 12, 0, 0, 152, 0, }, /* 943 */ - { 152, 23, 12, 0, 0, 152, 0, }, /* 944 */ - { 113, 7, 12, 0, 0, 113, 0, }, /* 945 */ - { 113, 15, 12, 0, 0, 113, 0, }, /* 946 */ - { 113, 12, 3, 0, 0, 113, 0, }, /* 947 */ - { 132, 9, 12, 0, 34, 132, 0, }, /* 948 */ - { 132, 5, 12, 0, -34, 132, 0, }, /* 949 */ - { 132, 12, 3, 0, 0, 132, 0, }, /* 950 */ - { 132, 6, 12, 0, 0, 132, 0, }, /* 951 */ - { 132, 13, 12, 0, 0, 132, 0, }, /* 952 */ - { 132, 21, 12, 0, 0, 132, 0, }, /* 953 */ - { 0, 2, 14, 0, 0, 0, 0, }, /* 954 */ - { 10, 26, 11, 0, 0, 10, 0, }, /* 955 */ - { 27, 26, 12, 0, 0, 27, 0, }, /* 956 */ - { 10, 24, 3, 0, 0, 10, 0, }, /* 957 */ - { 10, 1, 3, 0, 0, 10, 0, }, /* 958 */ + { 10, 24, 12, 0, 0, -61, 0, }, /* 605 */ + { 34, 9, 12, 0, -35332, 34, 0, }, /* 606 */ + { 34, 9, 12, 0, -42280, 34, 0, }, /* 607 */ + { 34, 5, 12, 0, 48, 34, 0, }, /* 608 */ + { 34, 9, 12, 0, -42308, 34, 0, }, /* 609 */ + { 34, 9, 12, 0, -42319, 34, 0, }, /* 610 */ + { 34, 9, 12, 0, -42315, 34, 0, }, /* 611 */ + { 34, 9, 12, 0, -42305, 34, 0, }, /* 612 */ + { 34, 9, 12, 0, -42258, 34, 0, }, /* 613 */ + { 34, 9, 12, 0, -42282, 34, 0, }, /* 614 */ + { 34, 9, 12, 0, -42261, 34, 0, }, /* 615 */ + { 34, 9, 12, 0, 928, 34, 0, }, /* 616 */ + { 34, 9, 12, 0, -48, 34, 0, }, /* 617 */ + { 34, 9, 12, 0, -42307, 34, 0, }, /* 618 */ + { 34, 9, 12, 0, -35384, 34, 0, }, /* 619 */ + { 49, 7, 12, 0, 0, 49, 0, }, /* 620 */ + { 49, 12, 3, 0, 0, 49, 0, }, /* 621 */ + { 49, 10, 5, 0, 0, 49, 0, }, /* 622 */ + { 49, 26, 12, 0, 0, 49, 0, }, /* 623 */ + { 10, 15, 12, 0, 0, -224, 0, }, /* 624 */ + { 10, 15, 12, 0, 0, -210, 0, }, /* 625 */ + { 10, 26, 12, 0, 0, -171, 0, }, /* 626 */ + { 10, 23, 12, 0, 0, -171, 0, }, /* 627 */ + { 65, 7, 12, 0, 0, 65, 0, }, /* 628 */ + { 65, 21, 12, 0, 0, 65, 0, }, /* 629 */ + { 75, 10, 5, 0, 0, 75, 0, }, /* 630 */ + { 75, 7, 12, 0, 0, 75, 0, }, /* 631 */ + { 75, 12, 3, 0, 0, 75, 0, }, /* 632 */ + { 75, 21, 12, 0, 0, 75, 0, }, /* 633 */ + { 75, 13, 12, 0, 0, 75, 0, }, /* 634 */ + { 15, 12, 3, 0, 0, -13, 0, }, /* 635 */ + { 15, 7, 12, 0, 0, -46, 0, }, /* 636 */ + { 69, 13, 12, 0, 0, 69, 0, }, /* 637 */ + { 69, 7, 12, 0, 0, 69, 0, }, /* 638 */ + { 69, 12, 3, 0, 0, 69, 0, }, /* 639 */ + { 10, 21, 12, 0, 0, -108, 0, }, /* 640 */ + { 69, 21, 12, 0, 0, 69, 0, }, /* 641 */ + { 74, 7, 12, 0, 0, 74, 0, }, /* 642 */ + { 74, 12, 3, 0, 0, 74, 0, }, /* 643 */ + { 74, 10, 5, 0, 0, 74, 0, }, /* 644 */ + { 74, 21, 12, 0, 0, 74, 0, }, /* 645 */ + { 84, 12, 3, 0, 0, 84, 0, }, /* 646 */ + { 84, 10, 5, 0, 0, 84, 0, }, /* 647 */ + { 84, 7, 12, 0, 0, 84, 0, }, /* 648 */ + { 84, 21, 12, 0, 0, 84, 0, }, /* 649 */ + { 10, 6, 12, 0, 0, -19, 0, }, /* 650 */ + { 84, 13, 12, 0, 0, 84, 0, }, /* 651 */ + { 39, 6, 12, 0, 0, 39, 0, }, /* 652 */ + { 68, 7, 12, 0, 0, 68, 0, }, /* 653 */ + { 68, 12, 3, 0, 0, 68, 0, }, /* 654 */ + { 68, 10, 5, 0, 0, 68, 0, }, /* 655 */ + { 68, 13, 12, 0, 0, 68, 0, }, /* 656 */ + { 68, 21, 12, 0, 0, 68, 0, }, /* 657 */ + { 92, 7, 12, 0, 0, 92, 0, }, /* 658 */ + { 92, 12, 3, 0, 0, 92, 0, }, /* 659 */ + { 92, 6, 12, 0, 0, 92, 0, }, /* 660 */ + { 92, 21, 12, 0, 0, 92, 0, }, /* 661 */ + { 87, 7, 12, 0, 0, 87, 0, }, /* 662 */ + { 87, 10, 5, 0, 0, 87, 0, }, /* 663 */ + { 87, 12, 3, 0, 0, 87, 0, }, /* 664 */ + { 87, 21, 12, 0, 0, 87, 0, }, /* 665 */ + { 87, 6, 12, 0, 0, 87, 0, }, /* 666 */ + { 34, 5, 12, 0, -928, 34, 0, }, /* 667 */ + { 9, 5, 12, 0, -38864, 9, 0, }, /* 668 */ + { 87, 13, 12, 0, 0, 87, 0, }, /* 669 */ + { 24, 7, 9, 0, 0, 24, 0, }, /* 670 */ + { 24, 7, 10, 0, 0, 24, 0, }, /* 671 */ + { 0, 4, 12, 0, 0, 0, 0, }, /* 672 */ + { 0, 3, 12, 0, 0, 0, 0, }, /* 673 */ + { 26, 25, 12, 0, 0, 26, 0, }, /* 674 */ + { 1, 24, 12, 0, 0, 1, 0, }, /* 675 */ + { 1, 7, 12, 0, 0, -10, 0, }, /* 676 */ + { 1, 26, 12, 0, 0, -10, 0, }, /* 677 */ + { 10, 6, 3, 0, 0, -64, 0, }, /* 678 */ + { 36, 7, 12, 0, 0, 36, 0, }, /* 679 */ + { 10, 21, 12, 0, 0, -22, 0, }, /* 680 */ + { 10, 15, 12, 0, 0, -92, 0, }, /* 681 */ + { 10, 26, 12, 0, 0, -22, 0, }, /* 682 */ + { 20, 14, 12, 0, 0, 20, 0, }, /* 683 */ + { 20, 15, 12, 0, 0, 20, 0, }, /* 684 */ + { 20, 26, 12, 0, 0, 20, 0, }, /* 685 */ + { 71, 7, 12, 0, 0, 71, 0, }, /* 686 */ + { 67, 7, 12, 0, 0, 67, 0, }, /* 687 */ + { 28, 12, 3, 0, 0, -1, 0, }, /* 688 */ + { 10, 15, 12, 0, 0, -1, 0, }, /* 689 */ + { 42, 7, 12, 0, 0, 42, 0, }, /* 690 */ + { 42, 15, 12, 0, 0, 42, 0, }, /* 691 */ + { 19, 7, 12, 0, 0, 19, 0, }, /* 692 */ + { 19, 14, 12, 0, 0, 19, 0, }, /* 693 */ + { 118, 7, 12, 0, 0, 118, 0, }, /* 694 */ + { 118, 12, 3, 0, 0, 118, 0, }, /* 695 */ + { 60, 7, 12, 0, 0, 60, 0, }, /* 696 */ + { 60, 21, 12, 0, 0, 60, 0, }, /* 697 */ + { 43, 7, 12, 0, 0, 43, 0, }, /* 698 */ + { 43, 21, 12, 0, 0, 43, 0, }, /* 699 */ + { 43, 14, 12, 0, 0, 43, 0, }, /* 700 */ + { 14, 9, 12, 0, 40, 14, 0, }, /* 701 */ + { 14, 5, 12, 0, -40, 14, 0, }, /* 702 */ + { 47, 7, 12, 0, 0, 47, 0, }, /* 703 */ + { 45, 7, 12, 0, 0, 45, 0, }, /* 704 */ + { 45, 13, 12, 0, 0, 45, 0, }, /* 705 */ + { 136, 9, 12, 0, 40, 136, 0, }, /* 706 */ + { 136, 5, 12, 0, -40, 136, 0, }, /* 707 */ + { 106, 7, 12, 0, 0, 106, 0, }, /* 708 */ + { 104, 7, 12, 0, 0, 104, 0, }, /* 709 */ + { 104, 21, 12, 0, 0, 104, 0, }, /* 710 */ + { 110, 7, 12, 0, 0, 110, 0, }, /* 711 */ + { 12, 7, 12, 0, 0, 12, 0, }, /* 712 */ + { 81, 7, 12, 0, 0, 81, 0, }, /* 713 */ + { 81, 21, 12, 0, 0, 81, 0, }, /* 714 */ + { 81, 15, 12, 0, 0, 81, 0, }, /* 715 */ + { 120, 7, 12, 0, 0, 120, 0, }, /* 716 */ + { 120, 26, 12, 0, 0, 120, 0, }, /* 717 */ + { 120, 15, 12, 0, 0, 120, 0, }, /* 718 */ + { 116, 7, 12, 0, 0, 116, 0, }, /* 719 */ + { 116, 15, 12, 0, 0, 116, 0, }, /* 720 */ + { 128, 7, 12, 0, 0, 128, 0, }, /* 721 */ + { 128, 15, 12, 0, 0, 128, 0, }, /* 722 */ + { 66, 7, 12, 0, 0, 66, 0, }, /* 723 */ + { 66, 15, 12, 0, 0, 66, 0, }, /* 724 */ + { 66, 21, 12, 0, 0, 66, 0, }, /* 725 */ + { 72, 7, 12, 0, 0, 72, 0, }, /* 726 */ + { 72, 21, 12, 0, 0, 72, 0, }, /* 727 */ + { 98, 7, 12, 0, 0, 98, 0, }, /* 728 */ + { 97, 7, 12, 0, 0, 97, 0, }, /* 729 */ + { 97, 15, 12, 0, 0, 97, 0, }, /* 730 */ + { 31, 7, 12, 0, 0, 31, 0, }, /* 731 */ + { 31, 12, 3, 0, 0, 31, 0, }, /* 732 */ + { 31, 15, 12, 0, 0, 31, 0, }, /* 733 */ + { 31, 21, 12, 0, 0, 31, 0, }, /* 734 */ + { 88, 7, 12, 0, 0, 88, 0, }, /* 735 */ + { 88, 15, 12, 0, 0, 88, 0, }, /* 736 */ + { 88, 21, 12, 0, 0, 88, 0, }, /* 737 */ + { 117, 7, 12, 0, 0, 117, 0, }, /* 738 */ + { 117, 15, 12, 0, 0, 117, 0, }, /* 739 */ + { 112, 7, 12, 0, 0, 112, 0, }, /* 740 */ + { 112, 26, 12, 0, 0, 112, 0, }, /* 741 */ + { 112, 12, 3, 0, 0, 112, 0, }, /* 742 */ + { 112, 15, 12, 0, 0, 112, 0, }, /* 743 */ + { 112, 21, 12, 0, 0, 112, 0, }, /* 744 */ + { 78, 7, 12, 0, 0, 78, 0, }, /* 745 */ + { 78, 21, 12, 0, 0, 78, 0, }, /* 746 */ + { 83, 7, 12, 0, 0, 83, 0, }, /* 747 */ + { 83, 15, 12, 0, 0, 83, 0, }, /* 748 */ + { 82, 7, 12, 0, 0, 82, 0, }, /* 749 */ + { 82, 15, 12, 0, 0, 82, 0, }, /* 750 */ + { 121, 7, 12, 0, 0, 121, 0, }, /* 751 */ + { 121, 21, 12, 0, 0, 121, 0, }, /* 752 */ + { 121, 15, 12, 0, 0, 121, 0, }, /* 753 */ + { 89, 7, 12, 0, 0, 89, 0, }, /* 754 */ + { 130, 9, 12, 0, 64, 130, 0, }, /* 755 */ + { 130, 5, 12, 0, -64, 130, 0, }, /* 756 */ + { 130, 15, 12, 0, 0, 130, 0, }, /* 757 */ + { 144, 7, 12, 0, 0, 144, 0, }, /* 758 */ + { 144, 12, 3, 0, 0, 144, 0, }, /* 759 */ + { 144, 13, 12, 0, 0, 144, 0, }, /* 760 */ + { 1, 15, 12, 0, 0, 1, 0, }, /* 761 */ + { 156, 7, 12, 0, 0, 156, 0, }, /* 762 */ + { 156, 12, 3, 0, 0, 156, 0, }, /* 763 */ + { 156, 17, 12, 0, 0, 156, 0, }, /* 764 */ + { 147, 7, 12, 0, 0, 147, 0, }, /* 765 */ + { 147, 15, 12, 0, 0, 147, 0, }, /* 766 */ + { 148, 7, 12, 0, 0, 148, 0, }, /* 767 */ + { 148, 12, 3, 0, 0, 148, 0, }, /* 768 */ + { 148, 15, 12, 0, 0, 148, 0, }, /* 769 */ + { 148, 21, 12, 0, 0, 148, 0, }, /* 770 */ + { 153, 7, 12, 0, 0, 153, 0, }, /* 771 */ + { 153, 15, 12, 0, 0, 153, 0, }, /* 772 */ + { 149, 7, 12, 0, 0, 149, 0, }, /* 773 */ + { 94, 10, 5, 0, 0, 94, 0, }, /* 774 */ + { 94, 12, 3, 0, 0, 94, 0, }, /* 775 */ + { 94, 7, 12, 0, 0, 94, 0, }, /* 776 */ + { 94, 21, 12, 0, 0, 94, 0, }, /* 777 */ + { 94, 15, 12, 0, 0, 94, 0, }, /* 778 */ + { 94, 13, 12, 0, 0, 94, 0, }, /* 779 */ + { 85, 12, 3, 0, 0, 85, 0, }, /* 780 */ + { 85, 10, 5, 0, 0, 85, 0, }, /* 781 */ + { 85, 7, 12, 0, 0, 85, 0, }, /* 782 */ + { 85, 21, 12, 0, 0, 85, 0, }, /* 783 */ + { 85, 1, 4, 0, 0, 85, 0, }, /* 784 */ + { 101, 7, 12, 0, 0, 101, 0, }, /* 785 */ + { 101, 13, 12, 0, 0, 101, 0, }, /* 786 */ + { 96, 12, 3, 0, 0, 96, 0, }, /* 787 */ + { 96, 7, 12, 0, 0, 96, 0, }, /* 788 */ + { 96, 10, 5, 0, 0, 96, 0, }, /* 789 */ + { 96, 13, 12, 0, 0, 96, 0, }, /* 790 */ + { 96, 21, 12, 0, 0, 96, 0, }, /* 791 */ + { 111, 7, 12, 0, 0, 111, 0, }, /* 792 */ + { 111, 12, 3, 0, 0, 111, 0, }, /* 793 */ + { 111, 21, 12, 0, 0, 111, 0, }, /* 794 */ + { 100, 12, 3, 0, 0, 100, 0, }, /* 795 */ + { 100, 10, 5, 0, 0, 100, 0, }, /* 796 */ + { 100, 7, 12, 0, 0, 100, 0, }, /* 797 */ + { 100, 7, 4, 0, 0, 100, 0, }, /* 798 */ + { 100, 21, 12, 0, 0, 100, 0, }, /* 799 */ + { 100, 13, 12, 0, 0, 100, 0, }, /* 800 */ + { 48, 15, 12, 0, 0, 48, 0, }, /* 801 */ + { 108, 7, 12, 0, 0, 108, 0, }, /* 802 */ + { 108, 10, 5, 0, 0, 108, 0, }, /* 803 */ + { 108, 12, 3, 0, 0, 108, 0, }, /* 804 */ + { 108, 21, 12, 0, 0, 108, 0, }, /* 805 */ + { 129, 7, 12, 0, 0, 129, 0, }, /* 806 */ + { 129, 21, 12, 0, 0, 129, 0, }, /* 807 */ + { 109, 7, 12, 0, 0, 109, 0, }, /* 808 */ + { 109, 12, 3, 0, 0, 109, 0, }, /* 809 */ + { 109, 10, 5, 0, 0, 109, 0, }, /* 810 */ + { 109, 13, 12, 0, 0, 109, 0, }, /* 811 */ + { 107, 12, 3, 0, 0, 107, 0, }, /* 812 */ + { 107, 12, 3, 0, 0, -52, 0, }, /* 813 */ + { 107, 10, 5, 0, 0, 107, 0, }, /* 814 */ + { 107, 10, 5, 0, 0, -52, 0, }, /* 815 */ + { 107, 7, 12, 0, 0, 107, 0, }, /* 816 */ + { 28, 12, 3, 0, 0, -52, 0, }, /* 817 */ + { 107, 10, 3, 0, 0, 107, 0, }, /* 818 */ + { 135, 7, 12, 0, 0, 135, 0, }, /* 819 */ + { 135, 10, 5, 0, 0, 135, 0, }, /* 820 */ + { 135, 12, 3, 0, 0, 135, 0, }, /* 821 */ + { 135, 21, 12, 0, 0, 135, 0, }, /* 822 */ + { 135, 13, 12, 0, 0, 135, 0, }, /* 823 */ + { 124, 7, 12, 0, 0, 124, 0, }, /* 824 */ + { 124, 10, 3, 0, 0, 124, 0, }, /* 825 */ + { 124, 10, 5, 0, 0, 124, 0, }, /* 826 */ + { 124, 12, 3, 0, 0, 124, 0, }, /* 827 */ + { 124, 21, 12, 0, 0, 124, 0, }, /* 828 */ + { 124, 13, 12, 0, 0, 124, 0, }, /* 829 */ + { 123, 7, 12, 0, 0, 123, 0, }, /* 830 */ + { 123, 10, 3, 0, 0, 123, 0, }, /* 831 */ + { 123, 10, 5, 0, 0, 123, 0, }, /* 832 */ + { 123, 12, 3, 0, 0, 123, 0, }, /* 833 */ + { 123, 21, 12, 0, 0, 123, 0, }, /* 834 */ + { 114, 7, 12, 0, 0, 114, 0, }, /* 835 */ + { 114, 10, 5, 0, 0, 114, 0, }, /* 836 */ + { 114, 12, 3, 0, 0, 114, 0, }, /* 837 */ + { 114, 21, 12, 0, 0, 114, 0, }, /* 838 */ + { 114, 13, 12, 0, 0, 114, 0, }, /* 839 */ + { 102, 7, 12, 0, 0, 102, 0, }, /* 840 */ + { 102, 12, 3, 0, 0, 102, 0, }, /* 841 */ + { 102, 10, 5, 0, 0, 102, 0, }, /* 842 */ + { 102, 13, 12, 0, 0, 102, 0, }, /* 843 */ + { 126, 7, 12, 0, 0, 126, 0, }, /* 844 */ + { 126, 12, 3, 0, 0, 126, 0, }, /* 845 */ + { 126, 10, 5, 0, 0, 126, 0, }, /* 846 */ + { 126, 13, 12, 0, 0, 126, 0, }, /* 847 */ + { 126, 15, 12, 0, 0, 126, 0, }, /* 848 */ + { 126, 21, 12, 0, 0, 126, 0, }, /* 849 */ + { 126, 26, 12, 0, 0, 126, 0, }, /* 850 */ + { 142, 7, 12, 0, 0, 142, 0, }, /* 851 */ + { 142, 10, 5, 0, 0, 142, 0, }, /* 852 */ + { 142, 12, 3, 0, 0, 142, 0, }, /* 853 */ + { 142, 21, 12, 0, 0, 142, 0, }, /* 854 */ + { 125, 9, 12, 0, 32, 125, 0, }, /* 855 */ + { 125, 5, 12, 0, -32, 125, 0, }, /* 856 */ + { 125, 13, 12, 0, 0, 125, 0, }, /* 857 */ + { 125, 15, 12, 0, 0, 125, 0, }, /* 858 */ + { 125, 7, 12, 0, 0, 125, 0, }, /* 859 */ + { 154, 7, 12, 0, 0, 154, 0, }, /* 860 */ + { 154, 10, 3, 0, 0, 154, 0, }, /* 861 */ + { 154, 10, 5, 0, 0, 154, 0, }, /* 862 */ + { 154, 12, 3, 0, 0, 154, 0, }, /* 863 */ + { 154, 7, 4, 0, 0, 154, 0, }, /* 864 */ + { 154, 21, 12, 0, 0, 154, 0, }, /* 865 */ + { 154, 13, 12, 0, 0, 154, 0, }, /* 866 */ + { 150, 7, 12, 0, 0, 150, 0, }, /* 867 */ + { 150, 10, 5, 0, 0, 150, 0, }, /* 868 */ + { 150, 12, 3, 0, 0, 150, 0, }, /* 869 */ + { 150, 21, 12, 0, 0, 150, 0, }, /* 870 */ + { 141, 7, 12, 0, 0, 141, 0, }, /* 871 */ + { 141, 12, 3, 0, 0, 141, 0, }, /* 872 */ + { 141, 10, 5, 0, 0, 141, 0, }, /* 873 */ + { 141, 7, 4, 0, 0, 141, 0, }, /* 874 */ + { 141, 21, 12, 0, 0, 141, 0, }, /* 875 */ + { 140, 7, 12, 0, 0, 140, 0, }, /* 876 */ + { 140, 12, 3, 0, 0, 140, 0, }, /* 877 */ + { 140, 10, 5, 0, 0, 140, 0, }, /* 878 */ + { 140, 7, 4, 0, 0, 140, 0, }, /* 879 */ + { 140, 21, 12, 0, 0, 140, 0, }, /* 880 */ + { 122, 7, 12, 0, 0, 122, 0, }, /* 881 */ + { 133, 7, 12, 0, 0, 133, 0, }, /* 882 */ + { 133, 10, 5, 0, 0, 133, 0, }, /* 883 */ + { 133, 12, 3, 0, 0, 133, 0, }, /* 884 */ + { 133, 21, 12, 0, 0, 133, 0, }, /* 885 */ + { 133, 13, 12, 0, 0, 133, 0, }, /* 886 */ + { 133, 15, 12, 0, 0, 133, 0, }, /* 887 */ + { 134, 21, 12, 0, 0, 134, 0, }, /* 888 */ + { 134, 7, 12, 0, 0, 134, 0, }, /* 889 */ + { 134, 12, 3, 0, 0, 134, 0, }, /* 890 */ + { 134, 10, 5, 0, 0, 134, 0, }, /* 891 */ + { 138, 7, 12, 0, 0, 138, 0, }, /* 892 */ + { 138, 12, 3, 0, 0, 138, 0, }, /* 893 */ + { 138, 7, 4, 0, 0, 138, 0, }, /* 894 */ + { 138, 13, 12, 0, 0, 138, 0, }, /* 895 */ + { 143, 7, 12, 0, 0, 143, 0, }, /* 896 */ + { 143, 10, 5, 0, 0, 143, 0, }, /* 897 */ + { 143, 12, 3, 0, 0, 143, 0, }, /* 898 */ + { 143, 13, 12, 0, 0, 143, 0, }, /* 899 */ + { 145, 7, 12, 0, 0, 145, 0, }, /* 900 */ + { 145, 12, 3, 0, 0, 145, 0, }, /* 901 */ + { 145, 10, 5, 0, 0, 145, 0, }, /* 902 */ + { 145, 21, 12, 0, 0, 145, 0, }, /* 903 */ + { 54, 15, 12, 0, 0, 54, 0, }, /* 904 */ + { 54, 21, 12, 0, 0, 54, 0, }, /* 905 */ + { 63, 7, 12, 0, 0, 63, 0, }, /* 906 */ + { 63, 14, 12, 0, 0, 63, 0, }, /* 907 */ + { 63, 21, 12, 0, 0, 63, 0, }, /* 908 */ + { 80, 7, 12, 0, 0, 80, 0, }, /* 909 */ + { 80, 1, 2, 0, 0, 80, 0, }, /* 910 */ + { 127, 7, 12, 0, 0, 127, 0, }, /* 911 */ + { 115, 7, 12, 0, 0, 115, 0, }, /* 912 */ + { 115, 13, 12, 0, 0, 115, 0, }, /* 913 */ + { 115, 21, 12, 0, 0, 115, 0, }, /* 914 */ + { 103, 7, 12, 0, 0, 103, 0, }, /* 915 */ + { 103, 12, 3, 0, 0, 103, 0, }, /* 916 */ + { 103, 21, 12, 0, 0, 103, 0, }, /* 917 */ + { 119, 7, 12, 0, 0, 119, 0, }, /* 918 */ + { 119, 12, 3, 0, 0, 119, 0, }, /* 919 */ + { 119, 21, 12, 0, 0, 119, 0, }, /* 920 */ + { 119, 26, 12, 0, 0, 119, 0, }, /* 921 */ + { 119, 6, 12, 0, 0, 119, 0, }, /* 922 */ + { 119, 13, 12, 0, 0, 119, 0, }, /* 923 */ + { 119, 15, 12, 0, 0, 119, 0, }, /* 924 */ + { 146, 9, 12, 0, 32, 146, 0, }, /* 925 */ + { 146, 5, 12, 0, -32, 146, 0, }, /* 926 */ + { 146, 15, 12, 0, 0, 146, 0, }, /* 927 */ + { 146, 21, 12, 0, 0, 146, 0, }, /* 928 */ + { 99, 7, 12, 0, 0, 99, 0, }, /* 929 */ + { 99, 12, 3, 0, 0, 99, 0, }, /* 930 */ + { 99, 10, 5, 0, 0, 99, 0, }, /* 931 */ + { 99, 6, 12, 0, 0, 99, 0, }, /* 932 */ + { 137, 6, 12, 0, 0, 137, 0, }, /* 933 */ + { 139, 6, 12, 0, 0, 139, 0, }, /* 934 */ + { 155, 12, 3, 0, 0, 155, 0, }, /* 935 */ + { 23, 10, 5, 0, 0, 23, 0, }, /* 936 */ + { 137, 7, 12, 0, 0, 137, 0, }, /* 937 */ + { 155, 7, 12, 0, 0, 155, 0, }, /* 938 */ + { 139, 7, 12, 0, 0, 139, 0, }, /* 939 */ + { 105, 7, 12, 0, 0, 105, 0, }, /* 940 */ + { 105, 26, 12, 0, 0, 105, 0, }, /* 941 */ + { 105, 12, 3, 0, 0, 105, 0, }, /* 942 */ + { 105, 21, 12, 0, 0, 105, 0, }, /* 943 */ + { 10, 1, 2, 0, 0, 105, 0, }, /* 944 */ + { 10, 10, 3, 0, 0, 10, 0, }, /* 945 */ + { 10, 10, 5, 0, 0, 10, 0, }, /* 946 */ + { 20, 12, 3, 0, 0, 20, 0, }, /* 947 */ + { 131, 26, 12, 0, 0, 131, 0, }, /* 948 */ + { 131, 12, 3, 0, 0, 131, 0, }, /* 949 */ + { 131, 21, 12, 0, 0, 131, 0, }, /* 950 */ + { 18, 12, 3, 0, 0, 18, 0, }, /* 951 */ + { 151, 7, 12, 0, 0, 151, 0, }, /* 952 */ + { 151, 12, 3, 0, 0, 151, 0, }, /* 953 */ + { 151, 6, 12, 0, 0, 151, 0, }, /* 954 */ + { 151, 13, 12, 0, 0, 151, 0, }, /* 955 */ + { 151, 26, 12, 0, 0, 151, 0, }, /* 956 */ + { 152, 7, 12, 0, 0, 152, 0, }, /* 957 */ + { 152, 12, 3, 0, 0, 152, 0, }, /* 958 */ + { 152, 13, 12, 0, 0, 152, 0, }, /* 959 */ + { 152, 23, 12, 0, 0, 152, 0, }, /* 960 */ + { 113, 7, 12, 0, 0, 113, 0, }, /* 961 */ + { 113, 15, 12, 0, 0, 113, 0, }, /* 962 */ + { 113, 12, 3, 0, 0, 113, 0, }, /* 963 */ + { 132, 9, 12, 0, 34, 132, 0, }, /* 964 */ + { 132, 5, 12, 0, -34, 132, 0, }, /* 965 */ + { 132, 12, 3, 0, 0, 132, 0, }, /* 966 */ + { 132, 6, 12, 0, 0, 132, 0, }, /* 967 */ + { 132, 13, 12, 0, 0, 132, 0, }, /* 968 */ + { 132, 21, 12, 0, 0, 132, 0, }, /* 969 */ + { 0, 2, 14, 0, 0, 0, 0, }, /* 970 */ + { 10, 26, 11, 0, 0, 10, 0, }, /* 971 */ + { 27, 26, 12, 0, 0, 27, 0, }, /* 972 */ + { 10, 24, 3, 0, 0, 10, 0, }, /* 973 */ + { 10, 1, 3, 0, 0, 10, 0, }, /* 974 */ }; const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ @@ -1185,37 +1204,37 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F000 */ 126,126, 98, 98,127,128,129,130,131,131,132,133,134,135,136,137, /* U+F800 */ 138,139,140,141,142,143,144,145,146,147,148,142,149,149,150,142, /* U+10000 */ -151,152,153,154,155,156,157,158,159,160,161,142,162,142,163,164, /* U+10800 */ -165,166,167,168,169,170,171,142,172,173,142,174,175,176,177,142, /* U+11000 */ -178,179,142,180,181,182,142,142,183,184,185,186,142,187,142,188, /* U+11800 */ -189,189,189,189,189,189,189,190,191,189,192,142,142,142,142,142, /* U+12000 */ +151,152,153,154,155,156,157,158,159,160,161,142,162,163,164,165, /* U+10800 */ +166,167,168,169,170,171,172,142,173,174,142,175,176,177,178,142, /* U+11000 */ +179,180,181,182,183,184,142,142,185,186,187,188,142,189,142,190, /* U+11800 */ +191,191,191,191,191,191,191,192,193,191,194,142,142,142,142,142, /* U+12000 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+12800 */ -193,193,193,193,193,193,193,193,194,142,142,142,142,142,142,142, /* U+13000 */ +195,195,195,195,195,195,195,195,196,142,142,142,142,142,142,142, /* U+13000 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+13800 */ -142,142,142,142,142,142,142,142,195,195,195,195,196,142,142,142, /* U+14000 */ +142,142,142,142,142,142,142,142,197,197,197,197,198,142,142,142, /* U+14000 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+14800 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+15000 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+15800 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+16000 */ -197,197,197,197,198,199,200,201,142,142,142,142,202,203,204,205, /* U+16800 */ -206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, /* U+17000 */ -206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, /* U+17800 */ -206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,207, /* U+18000 */ -206,206,206,206,206,208,142,142,142,142,142,142,142,142,142,142, /* U+18800 */ +199,199,199,199,200,201,202,203,142,142,142,142,204,205,206,207, /* U+16800 */ +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, /* U+17000 */ +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, /* U+17800 */ +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,209, /* U+18000 */ +208,208,208,208,208,208,210,210,210,211,212,142,142,142,142,142, /* U+18800 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+19000 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+19800 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1A000 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1A800 */ -209,210,211,212,212,213,142,142,142,142,142,142,142,142,142,142, /* U+1B000 */ -142,142,142,142,142,142,142,142,214,215,142,142,142,142,142,142, /* U+1B800 */ +213,214,215,216,216,217,142,142,142,142,142,142,142,142,142,142, /* U+1B000 */ +142,142,142,142,142,142,142,142,218,219,142,142,142,142,142,142, /* U+1B800 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1C000 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1C800 */ - 71,216,217,218,219,220,221,142,222,223,224,225,226,227,228,229, /* U+1D000 */ -230,230,230,230,231,232,142,142,142,142,142,142,142,142,142,142, /* U+1D800 */ -233,142,234,142,142,235,142,142,142,142,142,142,142,142,142,142, /* U+1E000 */ -236,237,238,142,142,142,142,142,239,240,241,142,242,243,142,142, /* U+1E800 */ -244,245,246,247,248,249,250,251,250,250,252,250,253,254,255,256, /* U+1F000 */ -257,258,259,260,261,262,249,249,249,249,249,249,249,249,249,263, /* U+1F800 */ + 71,220,221,222,223,224,225,142,226,227,228,229,230,231,232,233, /* U+1D000 */ +234,234,234,234,235,236,142,142,142,142,142,142,142,142,142,142, /* U+1D800 */ +237,142,238,142,142,239,142,142,142,142,142,142,142,142,142,142, /* U+1E000 */ +240,241,242,142,142,142,142,142,243,244,245,142,246,247,142,142, /* U+1E800 */ +248,249,250,251,252,253,254,255,254,254,256,254,257,258,259,260, /* U+1F000 */ +261,262,263,264,265,266, 71,267,253,253,253,253,253,253,253,268, /* U+1F800 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+20000 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+20800 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+21000 */ @@ -1236,21 +1255,21 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+28800 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+29000 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+29800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,264, 98, 98, /* U+2A000 */ + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,269, 98, 98, /* U+2A000 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2A800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,265, 98, /* U+2B000 */ -266, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2B800 */ + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,270, 98, /* U+2B000 */ +271, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2B800 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2C000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,267, 98, 98, /* U+2C800 */ + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,272, 98, 98, /* U+2C800 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2D000 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2D800 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2E000 */ - 98, 98, 98, 98, 98, 98, 98,268,142,142,142,142,142,142,142,142, /* U+2E800 */ + 98, 98, 98, 98, 98, 98, 98,273,142,142,142,142,142,142,142,142, /* U+2E800 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+2F000 */ - 98, 98, 98, 98,269,142,142,142,142,142,142,142,142,142,142,142, /* U+2F800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+30000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+30800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+31000 */ + 98, 98, 98, 98,274,142,142,142,142,142,142,142,142,142,142,142, /* U+2F800 */ + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+30000 */ + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+30800 */ + 98, 98, 98, 98, 98, 98,275,142,142,142,142,142,142,142,142,142, /* U+31000 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+31800 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+32000 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+32800 */ @@ -1600,8 +1619,8 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DE800 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DF000 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DF800 */ -270,271,272,273,271,271,271,271,271,271,271,271,271,271,271,271, /* U+E0000 */ -271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271, /* U+E0800 */ +276,277,278,279,277,277,277,277,277,277,277,277,277,277,277,277, /* U+E0000 */ +277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277, /* U+E0800 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E1000 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E1800 */ 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E2000 */ @@ -1663,7 +1682,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FE000 */ 126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FE800 */ 126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FF000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,274, /* U+FF800 */ +126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,280, /* U+FF800 */ 126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+100000 */ 126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+100800 */ 126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+101000 */ @@ -1695,10 +1714,10 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10E000 */ 126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10E800 */ 126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10F000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,274, /* U+10F800 */ +126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,280, /* U+10F800 */ }; -const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ +const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ /* block 0 */ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1810,474 +1829,474 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, /* block 11 */ -207,207,207,207,207,207,207,206,206,208,209,120,120,210,210,211, -120,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, -212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, -212,212,212,212,212,212,212,212,212,212,212,212,212,212,213,212, -214,212,212,214,212,212,214,212,120,120,120,120,120,120,120,120, -215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, -215,215,215,215,215,215,215,215,215,215,215,120,120,120,120,215, -215,215,215,214,214,120,120,120,120,120,120,120,120,120,120,120, +207,207,207,207,207,207,207,206,206,205,208,120,120,209,209,210, +120,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,212,211, +213,211,211,213,211,211,213,211,120,120,120,120,120,120,120,120, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,120,120,120,120,214, +214,214,214,213,213,120,120,120,120,120,120,120,120,120,120,120, /* block 12 */ -216,216,216,216,216,217,218,218,218,219,219,220,221,219,222,222, -223,223,223,223,223,223,223,223,223,223,223,221,224,120,219,221, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -226,225,225,225,225,225,225,225,225,225,225,227,227,227,227,227, -227,227,227,227,227,227,223,223,223,223,223,223,223,223,223,223, -228,228,228,228,228,228,228,228,228,228,219,219,219,219,225,225, -227,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +215,215,215,215,215,216,217,217,217,218,218,219,220,218,221,221, +222,222,222,222,222,222,222,222,222,222,222,220,223,120,218,220, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +225,224,224,224,224,224,224,224,224,224,224,226,226,226,226,226, +226,226,226,226,226,226,222,222,222,222,222,222,222,222,222,222, +227,227,227,227,227,227,227,227,227,227,218,218,218,218,224,224, +226,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, /* block 13 */ -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,229,225,223,223,223,223,223,223,223,217,222,223, -223,223,223,223,223,230,230,223,223,222,223,223,223,223,225,225, -231,231,231,231,231,231,231,231,231,231,225,225,225,222,222,225, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,228,224,222,222,222,222,222,222,222,216,221,222, +222,222,222,222,222,229,229,222,222,221,222,222,222,222,224,224, +230,230,230,230,230,230,230,230,230,230,224,224,224,221,221,224, /* block 14 */ -232,232,232,232,232,232,232,232,232,232,232,232,232,232,120,233, -234,235,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,120,232, +233,234,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, 234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, -235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, -235,235,235,235,235,235,235,235,235,235,235,120,120,234,234,234, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +234,234,234,234,234,234,234,234,234,234,234,120,120,233,233,233, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, /* block 15 */ -236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, -236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, -236,236,236,236,236,236,237,237,237,237,237,237,237,237,237,237, -237,236,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -238,238,238,238,238,238,238,238,238,238,239,239,239,239,239,239, -239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, -239,239,239,239,239,239,239,239,239,239,239,240,240,240,240,240, -240,240,240,240,241,241,242,243,243,243,241,120,120,240,244,244, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,236,236,236,236,236,236,236,236,236,236, +236,235,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +237,237,237,237,237,237,237,237,237,237,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,239,239,239,239,239, +239,239,239,239,240,240,241,242,242,242,240,120,120,239,243,243, /* block 16 */ -245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, -245,245,245,245,245,245,246,246,246,246,247,246,246,246,246,246, -246,246,246,246,247,246,246,246,247,246,246,246,246,246,120,120, -248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,120, -249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, -249,249,249,249,249,249,249,249,249,250,250,250,120,120,251,120, -234,234,234,234,234,234,234,234,234,234,234,120,120,120,120,120, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,245,245,245,245,246,245,245,245,245,245, +245,245,245,245,246,245,245,245,246,245,245,245,245,245,120,120, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,120, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,249,249,249,120,120,250,120, +233,233,233,233,233,233,233,233,233,233,233,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 17 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,120,225,225,225,225,225,225,225,225,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,223,223,223,223,223,223,223,223,223,223,223,223,223, -223,223,217,223,223,223,223,223,223,223,223,223,223,223,223,223, -223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,120,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,120,120,120,120,120,120,120,120, +120,120,120,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,216,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, /* block 18 */ -252,252,252,253,254,254,254,254,254,254,254,254,254,254,254,254, -254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, -254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, -254,254,254,254,254,254,254,254,254,254,252,253,252,254,253,253, -253,252,252,252,252,252,252,252,252,253,253,253,253,252,253,253, -254,255,256,113,113,252,252,252,254,254,254,254,254,254,254,254, -254,254,252,252,257,258,259,259,259,259,259,259,259,259,259,259, -260,261,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +251,251,251,252,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,251,252,251,253,252,252, +252,251,251,251,251,251,251,251,251,252,252,252,252,251,252,252, +253,254,255,113,113,251,251,251,253,253,253,253,253,253,253,253, +253,253,251,251,256,257,258,258,258,258,258,258,258,258,258,258, +259,260,253,253,253,253,253,253,253,253,253,253,253,253,253,253, /* block 19 */ -262,263,264,264,120,262,262,262,262,262,262,262,262,120,120,262, -262,120,120,262,262,262,262,262,262,262,262,262,262,262,262,262, -262,262,262,262,262,262,262,262,262,120,262,262,262,262,262,262, -262,120,262,120,120,120,262,262,262,262,120,120,263,262,265,264, -264,263,263,263,263,120,120,264,264,120,120,264,264,263,262,120, -120,120,120,120,120,120,120,265,120,120,120,120,262,262,120,262, -262,262,263,263,120,120,266,266,266,266,266,266,266,266,266,266, -262,262,267,267,268,268,268,268,268,268,269,267,262,270,263,120, +261,262,263,263,120,261,261,261,261,261,261,261,261,120,120,261, +261,120,120,261,261,261,261,261,261,261,261,261,261,261,261,261, +261,261,261,261,261,261,261,261,261,120,261,261,261,261,261,261, +261,120,261,120,120,120,261,261,261,261,120,120,262,261,264,263, +263,262,262,262,262,120,120,263,263,120,120,263,263,262,261,120, +120,120,120,120,120,120,120,264,120,120,120,120,261,261,120,261, +261,261,262,262,120,120,265,265,265,265,265,265,265,265,265,265, +261,261,266,266,267,267,267,267,267,267,268,266,261,269,262,120, /* block 20 */ -120,271,271,272,120,273,273,273,273,273,273,120,120,120,120,273, -273,120,120,273,273,273,273,273,273,273,273,273,273,273,273,273, -273,273,273,273,273,273,273,273,273,120,273,273,273,273,273,273, -273,120,273,273,120,273,273,120,273,273,120,120,271,120,272,272, -272,271,271,120,120,120,120,271,271,120,120,271,271,271,120,120, -120,271,120,120,120,120,120,120,120,273,273,273,273,120,273,120, -120,120,120,120,120,120,274,274,274,274,274,274,274,274,274,274, -271,271,273,273,273,271,275,120,120,120,120,120,120,120,120,120, +120,270,270,271,120,272,272,272,272,272,272,120,120,120,120,272, +272,120,120,272,272,272,272,272,272,272,272,272,272,272,272,272, +272,272,272,272,272,272,272,272,272,120,272,272,272,272,272,272, +272,120,272,272,120,272,272,120,272,272,120,120,270,120,271,271, +271,270,270,120,120,120,120,270,270,120,120,270,270,270,120,120, +120,270,120,120,120,120,120,120,120,272,272,272,272,120,272,120, +120,120,120,120,120,120,273,273,273,273,273,273,273,273,273,273, +270,270,272,272,272,270,274,120,120,120,120,120,120,120,120,120, /* block 21 */ -120,276,276,277,120,278,278,278,278,278,278,278,278,278,120,278, -278,278,120,278,278,278,278,278,278,278,278,278,278,278,278,278, -278,278,278,278,278,278,278,278,278,120,278,278,278,278,278,278, -278,120,278,278,120,278,278,278,278,278,120,120,276,278,277,277, -277,276,276,276,276,276,120,276,276,277,120,277,277,276,120,120, -278,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -278,278,276,276,120,120,279,279,279,279,279,279,279,279,279,279, -280,281,120,120,120,120,120,120,120,278,276,276,276,276,276,276, +120,275,275,276,120,277,277,277,277,277,277,277,277,277,120,277, +277,277,120,277,277,277,277,277,277,277,277,277,277,277,277,277, +277,277,277,277,277,277,277,277,277,120,277,277,277,277,277,277, +277,120,277,277,120,277,277,277,277,277,120,120,275,277,276,276, +276,275,275,275,275,275,120,275,275,276,120,276,276,275,120,120, +277,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +277,277,275,275,120,120,278,278,278,278,278,278,278,278,278,278, +279,280,120,120,120,120,120,120,120,277,275,275,275,275,275,275, /* block 22 */ -120,282,283,283,120,284,284,284,284,284,284,284,284,120,120,284, -284,120,120,284,284,284,284,284,284,284,284,284,284,284,284,284, -284,284,284,284,284,284,284,284,284,120,284,284,284,284,284,284, -284,120,284,284,120,284,284,284,284,284,120,120,282,284,285,282, -283,282,282,282,282,120,120,283,283,120,120,283,283,282,120,120, -120,120,120,120,120,120,282,285,120,120,120,120,284,284,120,284, -284,284,282,282,120,120,286,286,286,286,286,286,286,286,286,286, -287,284,288,288,288,288,288,288,120,120,120,120,120,120,120,120, +120,281,282,282,120,283,283,283,283,283,283,283,283,120,120,283, +283,120,120,283,283,283,283,283,283,283,283,283,283,283,283,283, +283,283,283,283,283,283,283,283,283,120,283,283,283,283,283,283, +283,120,283,283,120,283,283,283,283,283,120,120,281,283,284,281, +282,281,281,281,281,120,120,282,282,120,120,282,282,281,120,120, +120,120,120,120,120,281,281,284,120,120,120,120,283,283,120,283, +283,283,281,281,120,120,285,285,285,285,285,285,285,285,285,285, +286,283,287,287,287,287,287,287,120,120,120,120,120,120,120,120, /* block 23 */ -120,120,289,290,120,290,290,290,290,290,290,120,120,120,290,290, -290,120,290,290,290,290,120,120,120,290,290,120,290,120,290,290, -120,120,120,290,290,120,120,120,290,290,290,120,120,120,290,290, -290,290,290,290,290,290,290,290,290,290,120,120,120,120,291,292, -289,292,292,120,120,120,292,292,292,120,292,292,292,289,120,120, -290,120,120,120,120,120,120,291,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,293,293,293,293,293,293,293,293,293,293, -294,294,294,295,296,296,296,296,296,297,296,120,120,120,120,120, +120,120,288,289,120,289,289,289,289,289,289,120,120,120,289,289, +289,120,289,289,289,289,120,120,120,289,289,120,289,120,289,289, +120,120,120,289,289,120,120,120,289,289,289,120,120,120,289,289, +289,289,289,289,289,289,289,289,289,289,120,120,120,120,290,291, +288,291,291,120,120,120,291,291,291,120,291,291,291,288,120,120, +289,120,120,120,120,120,120,290,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,292,292,292,292,292,292,292,292,292,292, +293,293,293,294,295,295,295,295,295,296,295,120,120,120,120,120, /* block 24 */ -298,299,299,299,298,300,300,300,300,300,300,300,300,120,300,300, -300,120,300,300,300,300,300,300,300,300,300,300,300,300,300,300, -300,300,300,300,300,300,300,300,300,120,300,300,300,300,300,300, -300,300,300,300,300,300,300,300,300,300,120,120,120,300,298,298, -298,299,299,299,299,120,298,298,298,120,298,298,298,298,120,120, -120,120,120,120,120,298,298,120,300,300,300,120,120,120,120,120, -300,300,298,298,120,120,301,301,301,301,301,301,301,301,301,301, -120,120,120,120,120,120,120,302,303,303,303,303,303,303,303,304, +297,298,298,298,297,299,299,299,299,299,299,299,299,120,299,299, +299,120,299,299,299,299,299,299,299,299,299,299,299,299,299,299, +299,299,299,299,299,299,299,299,299,120,299,299,299,299,299,299, +299,299,299,299,299,299,299,299,299,299,120,120,120,299,297,297, +297,298,298,298,298,120,297,297,297,120,297,297,297,297,120,120, +120,120,120,120,120,297,297,120,299,299,299,120,120,120,120,120, +299,299,297,297,120,120,300,300,300,300,300,300,300,300,300,300, +120,120,120,120,120,120,120,301,302,302,302,302,302,302,302,303, /* block 25 */ -305,306,307,307,308,305,305,305,305,305,305,305,305,120,305,305, -305,120,305,305,305,305,305,305,305,305,305,305,305,305,305,305, -305,305,305,305,305,305,305,305,305,120,305,305,305,305,305,305, -305,305,305,305,120,305,305,305,305,305,120,120,306,305,307,306, -307,307,309,307,307,120,306,307,307,120,307,307,306,306,120,120, -120,120,120,120,120,309,309,120,120,120,120,120,120,120,305,120, -305,305,306,306,120,120,310,310,310,310,310,310,310,310,310,310, -120,305,305,120,120,120,120,120,120,120,120,120,120,120,120,120, +304,305,306,306,307,304,304,304,304,304,304,304,304,120,304,304, +304,120,304,304,304,304,304,304,304,304,304,304,304,304,304,304, +304,304,304,304,304,304,304,304,304,120,304,304,304,304,304,304, +304,304,304,304,120,304,304,304,304,304,120,120,305,304,306,305, +306,306,308,306,306,120,305,306,306,120,306,306,305,305,120,120, +120,120,120,120,120,308,308,120,120,120,120,120,120,120,304,120, +304,304,305,305,120,120,309,309,309,309,309,309,309,309,309,309, +120,304,304,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 26 */ -311,311,312,312,120,313,313,313,313,313,313,313,313,120,313,313, -313,120,313,313,313,313,313,313,313,313,313,313,313,313,313,313, -313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313, -313,313,313,313,313,313,313,313,313,313,313,311,311,313,314,312, -312,311,311,311,311,120,312,312,312,120,312,312,312,311,315,316, -120,120,120,120,313,313,313,314,317,317,317,317,317,317,317,313, -313,313,311,311,120,120,318,318,318,318,318,318,318,318,318,318, -317,317,317,317,317,317,317,317,317,316,313,313,313,313,313,313, +310,310,311,311,312,312,312,312,312,312,312,312,312,120,312,312, +312,120,312,312,312,312,312,312,312,312,312,312,312,312,312,312, +312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312, +312,312,312,312,312,312,312,312,312,312,312,310,310,312,313,311, +311,310,310,310,310,120,311,311,311,120,311,311,311,310,314,315, +120,120,120,120,312,312,312,313,316,316,316,316,316,316,316,312, +312,312,310,310,120,120,317,317,317,317,317,317,317,317,317,317, +316,316,316,316,316,316,316,316,316,315,312,312,312,312,312,312, /* block 27 */ -120,120,319,319,120,320,320,320,320,320,320,320,320,320,320,320, +120,318,319,319,120,320,320,320,320,320,320,320,320,320,320,320, 320,320,320,320,320,320,320,120,120,120,320,320,320,320,320,320, 320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320, 320,320,120,320,320,320,320,320,320,320,320,320,120,320,120,120, -320,320,320,320,320,320,320,120,120,120,321,120,120,120,120,322, -319,319,321,321,321,120,321,120,319,319,319,319,319,319,319,322, -120,120,120,120,120,120,323,323,323,323,323,323,323,323,323,323, -120,120,319,319,324,120,120,120,120,120,120,120,120,120,120,120, +320,320,320,320,320,320,320,120,120,120,318,120,120,120,120,321, +319,319,318,318,318,120,318,120,319,319,319,319,319,319,319,321, +120,120,120,120,120,120,322,322,322,322,322,322,322,322,322,322, +120,120,319,319,323,120,120,120,120,120,120,120,120,120,120,120, /* block 28 */ -120,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325, -325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325, -325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325, -325,326,325,327,326,326,326,326,326,326,326,120,120,120,120, 6, -325,325,325,325,325,325,328,326,326,326,326,326,326,326,326,329, -330,330,330,330,330,330,330,330,330,330,329,329,120,120,120,120, +120,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324, +324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324, +324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324, +324,325,324,326,325,325,325,325,325,325,325,120,120,120,120, 6, +324,324,324,324,324,324,327,325,325,325,325,325,325,325,325,328, +329,329,329,329,329,329,329,329,329,329,328,328,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 29 */ -120,331,331,120,331,120,331,331,331,331,331,120,331,331,331,331, -331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331, -331,331,331,331,120,331,120,331,331,331,331,331,331,331,331,331, -331,332,331,333,332,332,332,332,332,332,332,332,332,331,120,120, -331,331,331,331,331,120,334,120,332,332,332,332,332,332,120,120, -335,335,335,335,335,335,335,335,335,335,120,120,331,331,331,331, +120,330,330,120,330,120,330,330,330,330,330,120,330,330,330,330, +330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330, +330,330,330,330,120,330,120,330,330,330,330,330,330,330,330,330, +330,331,330,332,331,331,331,331,331,331,331,331,331,330,120,120, +330,330,330,330,330,120,333,120,331,331,331,331,331,331,120,120, +334,334,334,334,334,334,334,334,334,334,120,120,330,330,330,330, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 30 */ -336,337,337,337,338,338,338,338,338,338,338,338,338,338,338,338, -338,338,338,337,338,337,337,337,339,339,337,337,337,337,337,337, -340,340,340,340,340,340,340,340,340,340,341,341,341,341,341,341, -341,341,341,341,337,339,337,339,337,339,342,343,342,343,344,344, -336,336,336,336,336,336,336,336,120,336,336,336,336,336,336,336, -336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336, -336,336,336,336,336,336,336,336,336,336,336,336,336,120,120,120, -120,339,339,339,339,339,339,339,339,339,339,339,339,339,339,344, +335,336,336,336,337,337,337,337,337,337,337,337,337,337,337,337, +337,337,337,336,337,336,336,336,338,338,336,336,336,336,336,336, +339,339,339,339,339,339,339,339,339,339,340,340,340,340,340,340, +340,340,340,340,336,338,336,338,336,338,341,342,341,342,343,343, +335,335,335,335,335,335,335,335,120,335,335,335,335,335,335,335, +335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335, +335,335,335,335,335,335,335,335,335,335,335,335,335,120,120,120, +120,338,338,338,338,338,338,338,338,338,338,338,338,338,338,343, /* block 31 */ -339,339,339,339,339,338,339,339,336,336,336,336,336,339,339,339, -339,339,339,339,339,339,339,339,120,339,339,339,339,339,339,339, -339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339, -339,339,339,339,339,339,339,339,339,339,339,339,339,120,337,337, -337,337,337,337,337,337,339,337,337,337,337,337,337,120,337,337, -338,338,338,338,338, 20, 20, 20, 20,338,338,120,120,120,120,120, +338,338,338,338,338,337,338,338,335,335,335,335,335,338,338,338, +338,338,338,338,338,338,338,338,120,338,338,338,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,120,336,336, +336,336,336,336,336,336,338,336,336,336,336,336,336,120,336,336, +337,337,337,337,337, 20, 20, 20, 20,337,337,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 32 */ -345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345, -345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345, -345,345,345,345,345,345,345,345,345,345,345,346,346,347,347,347, -347,348,347,347,347,347,347,347,346,347,347,348,348,347,347,345, -349,349,349,349,349,349,349,349,349,349,350,350,350,350,350,350, -345,345,345,345,345,345,348,348,347,347,345,345,345,345,347,347, -347,345,346,346,346,345,345,346,346,346,346,346,346,346,345,345, -345,347,347,347,347,345,345,345,345,345,345,345,345,345,345,345, +344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344, +344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344, +344,344,344,344,344,344,344,344,344,344,344,345,345,346,346,346, +346,347,346,346,346,346,346,346,345,346,346,347,347,346,346,344, +348,348,348,348,348,348,348,348,348,348,349,349,349,349,349,349, +344,344,344,344,344,344,347,347,346,346,344,344,344,344,346,346, +346,344,345,345,345,344,344,345,345,345,345,345,345,345,344,344, +344,346,346,346,346,344,344,344,344,344,344,344,344,344,344,344, /* block 33 */ -345,345,347,346,348,347,347,346,346,346,346,346,346,347,345,346, -351,351,351,351,351,351,351,351,351,351,346,346,346,347,352,352, +344,344,346,345,347,346,346,345,345,345,345,345,345,346,344,345, +350,350,350,350,350,350,350,350,350,350,345,345,345,346,351,351, +352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352, +352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352, +352,352,352,352,352,352,120,352,120,120,120,120,120,352,120,120, 353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353, 353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353, -353,353,353,353,353,353,120,353,120,120,120,120,120,353,120,120, -354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354, -354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354, -354,354,354,354,354,354,354,354,354,354,354,355,356,354,354,354, +353,353,353,353,353,353,353,353,353,353,353,354,355,353,353,353, /* block 34 */ +356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356, +356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356, +356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356, +356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356, +356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356, +356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356, 357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357, 357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357, + +/* block 35 */ 357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357, 357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357, -357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357, -357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357, +357,357,357,357,357,357,357,357,358,358,358,358,358,358,358,358, 358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, 358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, - -/* block 35 */ 358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, 358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, -358,358,358,358,358,358,358,358,359,359,359,359,359,359,359,359, +358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, + +/* block 36 */ 359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, 359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, 359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, 359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, +359,359,359,359,359,359,359,359,359,120,359,359,359,359,120,120, +359,359,359,359,359,359,359,120,359,120,359,359,359,359,120,120, +359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, 359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, - -/* block 36 */ -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,120,360,360,360,360,120,120, -360,360,360,360,360,360,360,120,360,120,360,360,360,360,120,120, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, /* block 37 */ -360,360,360,360,360,360,360,360,360,120,360,360,360,360,120,120, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,120,360,360,360,360,120,120,360,360,360,360,360,360,360,120, -360,120,360,360,360,360,120,120,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,120,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, +359,359,359,359,359,359,359,359,359,120,359,359,359,359,120,120, +359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, +359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, +359,120,359,359,359,359,120,120,359,359,359,359,359,359,359,120, +359,120,359,359,359,359,120,120,359,359,359,359,359,359,359,359, +359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,359, +359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, +359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, /* block 38 */ -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,120,360,360,360,360,120,120,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,120,120,361,361,361, -362,362,362,362,362,362,362,362,362,363,363,363,363,363,363,363, -363,363,363,363,363,363,363,363,363,363,363,363,363,120,120,120, +359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, +359,120,359,359,359,359,120,120,359,359,359,359,359,359,359,359, +359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, +359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, +359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, +359,359,359,359,359,359,359,359,359,359,359,120,120,360,360,360, +361,361,361,361,361,361,361,361,361,362,362,362,362,362,362,362, +362,362,362,362,362,362,362,362,362,362,362,362,362,120,120,120, /* block 39 */ -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -364,364,364,364,364,364,364,364,364,364,120,120,120,120,120,120, -365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365, -365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365, -365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365, -365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365, -365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365, -366,366,366,366,366,366,120,120,367,367,367,367,367,367,120,120, +359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, +363,363,363,363,363,363,363,363,363,363,120,120,120,120,120,120, +364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364, +364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364, +364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364, +364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364, +364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364, +365,365,365,365,365,365,120,120,366,366,366,366,366,366,120,120, /* block 40 */ -368,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, +367,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, /* block 41 */ -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, /* block 42 */ -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,370,371,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,369,370,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, /* block 43 */ -372,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373, -373,373,373,373,373,373,373,373,373,373,373,374,375,120,120,120, -376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376, -376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376, -376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376, -376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376, -376,376,376,376,376,376,376,376,376,376,376, 5, 5, 5,377,377, -377,376,376,376,376,376,376,376,376,120,120,120,120,120,120,120, +371,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372, +372,372,372,372,372,372,372,372,372,372,372,373,374,120,120,120, +375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375, +375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375, +375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375, +375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375, +375,375,375,375,375,375,375,375,375,375,375, 5, 5, 5,376,376, +376,375,375,375,375,375,375,375,375,120,120,120,120,120,120,120, /* block 44 */ -378,378,378,378,378,378,378,378,378,378,378,378,378,120,378,378, -378,378,379,379,379,120,120,120,120,120,120,120,120,120,120,120, -380,380,380,380,380,380,380,380,380,380,380,380,380,380,380,380, -380,380,381,381,381,382,382,120,120,120,120,120,120,120,120,120, -383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383, -383,383,384,384,120,120,120,120,120,120,120,120,120,120,120,120, -385,385,385,385,385,385,385,385,385,385,385,385,385,120,385,385, -385,120,386,386,120,120,120,120,120,120,120,120,120,120,120,120, +377,377,377,377,377,377,377,377,377,377,377,377,377,120,377,377, +377,377,378,378,378,120,120,120,120,120,120,120,120,120,120,120, +379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379, +379,379,380,380,380,381,381,120,120,120,120,120,120,120,120,120, +382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382, +382,382,383,383,120,120,120,120,120,120,120,120,120,120,120,120, +384,384,384,384,384,384,384,384,384,384,384,384,384,120,384,384, +384,120,385,385,120,120,120,120,120,120,120,120,120,120,120,120, /* block 45 */ -387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387, -387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387, -387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387, -387,387,387,387,388,388,389,388,388,388,388,388,388,388,389,389, -389,389,389,389,389,389,388,389,389,388,388,388,388,388,388,388, -388,388,388,388,390,390,390,391,390,390,390,392,387,388,120,120, +386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386, +386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386, +386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386, +386,386,386,386,387,387,388,387,387,387,387,387,387,387,388,388, +388,388,388,388,388,388,387,388,388,387,387,387,387,387,387,387, +387,387,387,387,389,389,389,390,389,389,389,391,386,387,120,120, +392,392,392,392,392,392,392,392,392,392,120,120,120,120,120,120, 393,393,393,393,393,393,393,393,393,393,120,120,120,120,120,120, -394,394,394,394,394,394,394,394,394,394,120,120,120,120,120,120, /* block 46 */ -395,395,396,396,395,396,397,395,395,395,395,398,398,398,399,120, -400,400,400,400,400,400,400,400,400,400,120,120,120,120,120,120, -401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401, -401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401, -401,401,401,402,401,401,401,401,401,401,401,401,401,401,401,401, -401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401, -401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401, -401,401,401,401,401,401,401,401,401,120,120,120,120,120,120,120, +394,394,395,395,394,395,396,394,394,394,394,397,397,397,398,120, +399,399,399,399,399,399,399,399,399,399,120,120,120,120,120,120, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, +400,400,400,401,400,400,400,400,400,400,400,400,400,400,400,400, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, +400,400,400,400,400,400,400,400,400,120,120,120,120,120,120,120, /* block 47 */ -401,401,401,401,401,398,398,401,401,401,401,401,401,401,401,401, -401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401, -401,401,401,401,401,401,401,401,401,398,401,120,120,120,120,120, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369, -369,369,369,369,369,369,120,120,120,120,120,120,120,120,120,120, +400,400,400,400,400,397,397,400,400,400,400,400,400,400,400,400, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, +400,400,400,400,400,400,400,400,400,397,400,120,120,120,120,120, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,368,368,368,120,120,120,120,120,120,120,120,120,120, /* block 48 */ -403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403, -403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,120, -404,404,404,405,405,405,405,404,404,405,405,405,120,120,120,120, -405,405,404,405,405,405,405,405,405,404,404,404,120,120,120,120, -406,120,120,120,407,407,408,408,408,408,408,408,408,408,408,408, -409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409, -409,409,409,409,409,409,409,409,409,409,409,409,409,409,120,120, -409,409,409,409,409,120,120,120,120,120,120,120,120,120,120,120, +402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402, +402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,120, +403,403,403,404,404,404,404,403,403,404,404,404,120,120,120,120, +404,404,403,404,404,404,404,404,404,403,403,403,120,120,120,120, +405,120,120,120,406,406,407,407,407,407,407,407,407,407,407,407, +408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408, +408,408,408,408,408,408,408,408,408,408,408,408,408,408,120,120, +408,408,408,408,408,120,120,120,120,120,120,120,120,120,120,120, /* block 49 */ -410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410, -410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410, -410,410,410,410,410,410,410,410,410,410,410,410,120,120,120,120, -410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410, -410,410,410,410,410,410,410,410,410,410,120,120,120,120,120,120, -411,411,411,411,411,411,411,411,411,411,412,120,120,120,413,413, -414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414, -414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414, +409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409, +409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409, +409,409,409,409,409,409,409,409,409,409,409,409,120,120,120,120, +409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409, +409,409,409,409,409,409,409,409,409,409,120,120,120,120,120,120, +410,410,410,410,410,410,410,410,410,410,411,120,120,120,412,412, +413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413, +413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413, /* block 50 */ -415,415,415,415,415,415,415,415,415,415,415,415,415,415,415,415, -415,415,415,415,415,415,415,416,416,417,417,416,120,120,418,418, -419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419, -419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419, -419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419, -419,419,419,419,419,420,421,420,421,421,421,421,421,421,421,120, -421,422,421,422,422,421,421,421,421,421,421,421,421,420,420,420, -420,420,420,421,421,421,421,421,421,421,421,421,421,120,120,421, +414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414, +414,414,414,414,414,414,414,415,415,416,416,415,120,120,417,417, +418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418, +418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418, +418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418, +418,418,418,418,418,419,420,419,420,420,420,420,420,420,420,120, +420,421,420,421,421,420,420,420,420,420,420,420,420,419,419,419, +419,419,419,420,420,420,420,420,420,420,420,420,420,120,120,420, /* block 51 */ -423,423,423,423,423,423,423,423,423,423,120,120,120,120,120,120, -423,423,423,423,423,423,423,423,423,423,120,120,120,120,120,120, -424,424,424,424,424,424,424,425,424,424,424,424,424,424,120,120, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,426,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +422,422,422,422,422,422,422,422,422,422,120,120,120,120,120,120, +422,422,422,422,422,422,422,422,422,422,120,120,120,120,120,120, +423,423,423,423,423,423,423,424,423,423,423,423,423,423,120,120, +113,113,113,113,113,113,113,113,113,113,113,113,113,113,425,113, +113,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 52 */ -427,427,427,427,428,429,429,429,429,429,429,429,429,429,429,429, -429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429, -429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429, -429,429,429,429,427,430,427,427,427,427,427,428,427,428,428,428, -428,428,427,428,428,429,429,429,429,429,429,429,120,120,120,120, -431,431,431,431,431,431,431,431,431,431,432,432,432,432,432,432, -432,433,433,433,433,433,433,433,433,433,433,427,427,427,427,427, -427,427,427,427,433,433,433,433,433,433,433,433,433,120,120,120, +426,426,426,426,427,428,428,428,428,428,428,428,428,428,428,428, +428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428, +428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428, +428,428,428,428,426,429,426,426,426,426,426,427,426,427,427,427, +427,427,426,427,427,428,428,428,428,428,428,428,120,120,120,120, +430,430,430,430,430,430,430,430,430,430,431,431,431,431,431,431, +431,432,432,432,432,432,432,432,432,432,432,426,426,426,426,426, +426,426,426,426,432,432,432,432,432,432,432,432,432,120,120,120, /* block 53 */ -434,434,435,436,436,436,436,436,436,436,436,436,436,436,436,436, -436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436, -436,435,434,434,434,434,435,435,434,434,435,434,434,434,436,436, -437,437,437,437,437,437,437,437,437,437,436,436,436,436,436,436, -438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438, -438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438, -438,438,438,438,438,438,439,440,439,439,440,440,440,439,440,439, -439,439,440,440,120,120,120,120,120,120,120,120,441,441,441,441, +433,433,434,435,435,435,435,435,435,435,435,435,435,435,435,435, +435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435, +435,434,433,433,433,433,434,434,433,433,434,433,433,433,435,435, +436,436,436,436,436,436,436,436,436,436,435,435,435,435,435,435, +437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437, +437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437, +437,437,437,437,437,437,438,439,438,438,439,439,439,438,439,438, +438,438,439,439,120,120,120,120,120,120,120,120,440,440,440,440, /* block 54 */ -442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442, -442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442, -442,442,442,442,443,443,443,443,443,443,443,443,444,444,444,444, -444,444,444,444,443,443,444,444,120,120,120,445,445,445,445,445, -446,446,446,446,446,446,446,446,446,446,120,120,120,442,442,442, -447,447,447,447,447,447,447,447,447,447,448,448,448,448,448,448, -448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448, -448,448,448,448,448,448,448,448,449,449,449,449,449,449,450,450, +441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441, +441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441, +441,441,441,441,442,442,442,442,442,442,442,442,443,443,443,443, +443,443,443,443,442,442,443,443,120,120,120,444,444,444,444,444, +445,445,445,445,445,445,445,445,445,445,120,120,120,441,441,441, +446,446,446,446,446,446,446,446,446,446,447,447,447,447,447,447, +447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447, +447,447,447,447,447,447,447,447,448,448,448,448,448,448,449,449, /* block 55 */ -451,452,453,454,455,456,457,458,459,120,120,120,120,120,120,120, -460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, -460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, -460,460,460,460,460,460,460,460,460,460,460,120,120,460,460,460, -461,461,461,461,461,461,461,461,120,120,120,120,120,120,120,120, -462,463,462,464,463,465,465,466,465,466,467,463,466,466,463,463, -466,468,463,463,463,463,463,463,463,469,470,471,471,465,471,471, -471,471,472,473,474,470,470,475,476,476,477,120,120,120,120,120, +450,451,452,453,454,455,456,457,458,120,120,120,120,120,120,120, +459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459, +459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459, +459,459,459,459,459,459,459,459,459,459,459,120,120,459,459,459, +460,460,460,460,460,460,460,460,120,120,120,120,120,120,120,120, +461,462,461,463,462,464,464,465,464,465,466,462,465,465,462,462, +465,467,462,462,462,462,462,462,462,468,469,470,470,464,470,470, +470,470,471,472,473,469,469,474,475,475,476,120,120,120,120,120, /* block 56 */ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35,128,128,128,128,128,478,110,110,110,110, + 35, 35, 35, 35, 35, 35,128,128,128,128,128,477,110,110,110,110, 110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, 110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, 110,110,110,110,110,110,110,110,110,110,110,110,110,121,121,121, 121,121,110,110,110,110,121,121,121,121,121, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35,479,480, 35, 35, 35,481, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35,478,479, 35, 35, 35,480, 35, 35, /* block 57 */ - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,482, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,481, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,110,110,110,110,110, 110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, 110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,121, 114,114,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,120,113,113,113,113,113, +113,113,113,113,113,113,113,113,482,113,120,113,113,113,113,113, /* block 58 */ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, @@ -2335,8 +2354,8 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -113,113,113,113,113,113,113,113,113,113,113,113,113,426,426,426, -426,113,426,426,426,113,113,113,113,113,113,113,113,113,113,113, +113,113,113,113,113,113,113,113,113,113,113,113,113,425,425,425, +425,113,425,425,425,113,113,113,113,113,113,113,113,113,113,113, 512,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 64 */ @@ -2511,7 +2530,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ /* block 81 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20,120,120, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, @@ -2550,12 +2569,12 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 550,120,120,120,120,120,120,120,120,120,120,120,120,120,120,551, /* block 85 */ -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,120,120,120,120,120,120,120,120,120, -360,360,360,360,360,360,360,120,360,360,360,360,360,360,360,120, -360,360,360,360,360,360,360,120,360,360,360,360,360,360,360,120, -360,360,360,360,360,360,360,120,360,360,360,360,360,360,360,120, -360,360,360,360,360,360,360,120,360,360,360,360,360,360,360,120, +359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, +359,359,359,359,359,359,359,120,120,120,120,120,120,120,120,120, +359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120, +359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120, +359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120, +359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120, 552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, 552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, @@ -2565,7 +2584,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 23, 27, 7, 8, 7, 8, 7, 8, 7, 8, 5, 5, 5, 5, 5,111, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 10, 5, 5, 5, 5, 10, 5, 7,553, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, + 20, 20, 5,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -2633,7 +2652,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,120, 572,572,582,582,582,582,572,572,572,572,572,572,572,572,572,572, 580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580, -580,580,580,580,580,580,580,580,580,580,580,120,120,120,120,120, +580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580, 572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572, 572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572, 572,572,572,572,120,120,120,120,120,120,120,120,120,120,120,120, @@ -2693,7 +2712,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,120,120,120,120,120,120,120,120,120,120, +586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, @@ -2707,7 +2726,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +586,586,586,586,586,586,586,586,586,586,586,586,586,120,120,120, /* block 101 */ 587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, @@ -2757,11 +2776,11 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 192,193,192,193,192,193,192,193,192,193,597,598,192,193,192,193, 192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193, 192,193,192,193,192,193,192,193,192,193,192,193,192,193,599,198, -200,200,200,600,552,552,552,552,552,552,552,552,552,552,600,479, +200,200,200,600,552,552,552,552,552,552,552,552,552,552,600,478, /* block 106 */ 192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193, -192,193,192,193,192,193,192,193,192,193,192,193,479,479,552,552, +192,193,192,193,192,193,192,193,192,193,192,193,478,478,552,552, 601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, 601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, 601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, @@ -2770,196 +2789,186 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 603,603,604,604,604,604,604,604,120,120,120,120,120,120,120,120, /* block 107 */ - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +605,605,605,605,605,605,605,605, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,111,111,111,111,111,111,111,111,111, 15, 15, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 35, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, -110, 35, 35, 35, 35, 35, 35, 35, 35, 32, 33, 32, 33,605, 32, 33, +110, 35, 35, 35, 35, 35, 35, 35, 35, 32, 33, 32, 33,606, 32, 33, /* block 108 */ - 32, 33, 32, 33, 32, 33, 32, 33,111, 15, 15, 32, 33,606, 35, 22, - 32, 33, 32, 33,607, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,608,609,610,611,608, 35, -612,613,614,615, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, -120,120, 32, 33,616,617,618,120,120,120,120,120,120,120,120,120, + 32, 33, 32, 33, 32, 33, 32, 33,111, 15, 15, 32, 33,607, 35, 22, + 32, 33, 32, 33,608, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, + 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,609,610,611,612,609, 35, +613,614,615,616, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, +120,120, 32, 33,617,618,619, 32, 33, 32, 33,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120, 22,110,110, 35, 22, 22, 22, 22, 22, +120,120,120,120,120, 32, 33, 22,110,110, 35, 22, 22, 22, 22, 22, /* block 109 */ -619,619,620,619,619,619,620,619,619,619,619,620,619,619,619,619, -619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619, -619,619,619,621,621,620,620,621,622,622,622,622,120,120,120,120, -623,623,623,624,624,624,625,625,626,625,120,120,120,120,120,120, -627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627, -627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627, -627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627, -627,627,627,627,628,628,628,628,120,120,120,120,120,120,120,120, +620,620,621,620,620,620,621,620,620,620,620,621,620,620,620,620, +620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620, +620,620,620,622,622,621,621,622,623,623,623,623,621,120,120,120, +624,624,624,625,625,625,626,626,627,626,120,120,120,120,120,120, +628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628, +628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628, +628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628, +628,628,628,628,629,629,629,629,120,120,120,120,120,120,120,120, /* block 110 */ -629,629,630,630,630,630,630,630,630,630,630,630,630,630,630,630, -630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630, -630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630, -630,630,630,630,629,629,629,629,629,629,629,629,629,629,629,629, -629,629,629,629,631,631,120,120,120,120,120,120,120,120,632,632, -633,633,633,633,633,633,633,633,633,633,120,120,120,120,120,120, -252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, -252,634,254,635,254,254,254,254,260,260,260,254,260,254,254,252, +630,630,631,631,631,631,631,631,631,631,631,631,631,631,631,631, +631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631, +631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631, +631,631,631,631,630,630,630,630,630,630,630,630,630,630,630,630, +630,630,630,630,632,632,120,120,120,120,120,120,120,120,633,633, +634,634,634,634,634,634,634,634,634,634,120,120,120,120,120,120, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,635,253,636,253,253,253,253,259,259,259,253,259,253,253,251, /* block 111 */ -636,636,636,636,636,636,636,636,636,636,637,637,637,637,637,637, -637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637, -637,637,637,637,637,637,638,638,638,638,638,638,638,638,639,640, -641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641, -641,641,641,641,641,641,641,642,642,642,642,642,642,642,642,642, -642,642,643,643,120,120,120,120,120,120,120,120,120,120,120,644, -357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357, -357,357,357,357,357,357,357,357,357,357,357,357,357,120,120,120, +637,637,637,637,637,637,637,637,637,637,638,638,638,638,638,638, +638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638, +638,638,638,638,638,638,639,639,639,639,639,639,639,639,640,641, +642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642, +642,642,642,642,642,642,642,643,643,643,643,643,643,643,643,643, +643,643,644,644,120,120,120,120,120,120,120,120,120,120,120,645, +356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356, +356,356,356,356,356,356,356,356,356,356,356,356,356,120,120,120, /* block 112 */ -645,645,645,646,647,647,647,647,647,647,647,647,647,647,647,647, -647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647, -647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647, -647,647,647,645,646,646,645,645,645,645,646,646,645,645,646,646, -646,648,648,648,648,648,648,648,648,648,648,648,648,648,120,649, -650,650,650,650,650,650,650,650,650,650,120,120,120,120,648,648, -345,345,345,345,345,347,651,345,345,345,345,345,345,345,345,345, -351,351,351,351,351,351,351,351,351,351,345,345,345,345,345,120, +646,646,646,647,648,648,648,648,648,648,648,648,648,648,648,648, +648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648, +648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648, +648,648,648,646,647,647,646,646,646,646,647,647,646,646,647,647, +647,649,649,649,649,649,649,649,649,649,649,649,649,649,120,650, +651,651,651,651,651,651,651,651,651,651,120,120,120,120,649,649, +344,344,344,344,344,346,652,344,344,344,344,344,344,344,344,344, +350,350,350,350,350,350,350,350,350,350,344,344,344,344,344,120, /* block 113 */ -652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652, -652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652, -652,652,652,652,652,652,652,652,652,653,653,653,653,653,653,654, -654,653,653,654,654,653,653,120,120,120,120,120,120,120,120,120, -652,652,652,653,652,652,652,652,652,652,652,652,653,654,120,120, -655,655,655,655,655,655,655,655,655,655,120,120,656,656,656,656, -345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345, -651,345,345,345,345,345,345,352,352,352,345,346,347,346,345,345, +653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653, +653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653, +653,653,653,653,653,653,653,653,653,654,654,654,654,654,654,655, +655,654,654,655,655,654,654,120,120,120,120,120,120,120,120,120, +653,653,653,654,653,653,653,653,653,653,653,653,654,655,120,120, +656,656,656,656,656,656,656,656,656,656,120,120,657,657,657,657, +344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344, +652,344,344,344,344,344,344,351,351,351,344,345,346,345,344,344, /* block 114 */ -657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657, -657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657, -657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657, -658,657,658,658,658,657,657,658,658,657,657,657,657,657,658,658, -657,658,657,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,657,657,659,660,660, -661,661,661,661,661,661,661,661,661,661,661,662,663,663,662,662, -664,664,661,665,665,662,663,120,120,120,120,120,120,120,120,120, +658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658, +658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658, +658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658, +659,658,659,659,659,658,658,659,659,658,658,658,658,658,659,659, +658,659,658,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,658,658,660,661,661, +662,662,662,662,662,662,662,662,662,662,662,663,664,664,663,663, +665,665,662,666,666,663,664,120,120,120,120,120,120,120,120,120, /* block 115 */ -120,360,360,360,360,360,360,120,120,360,360,360,360,360,360,120, -120,360,360,360,360,360,360,120,120,120,120,120,120,120,120,120, -360,360,360,360,360,360,360,120,360,360,360,360,360,360,360,120, +120,359,359,359,359,359,359,120,120,359,359,359,359,359,359,120, +120,359,359,359,359,359,359,120,120,120,120,120,120,120,120,120, +359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35,666, 35, 35, 35, 35, 35, 35, 35, 15,110,110,110,110, - 35, 35, 35, 35, 35,128, 35, 35,120,120,120,120,120,120,120,120, -667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667, + 35, 35, 35,667, 35, 35, 35, 35, 35, 35, 35, 15,110,110,110,110, + 35, 35, 35, 35, 35,128, 35, 35, 35,110, 15, 15,120,120,120,120, +668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668, /* block 116 */ -667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667, -667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667, -667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667, -667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667, -661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661, -661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661, -661,661,661,662,662,663,662,662,663,662,662,664,662,663,120,120, -668,668,668,668,668,668,668,668,668,668,120,120,120,120,120,120, +668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668, +668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668, +668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668, +668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668, +662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662, +662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662, +662,662,662,663,663,664,663,663,664,663,663,665,663,664,120,120, +669,669,669,669,669,669,669,669,669,669,120,120,120,120,120,120, /* block 117 */ -669,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,669,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,669,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,669,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -669,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, +670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, /* block 118 */ -670,670,670,670,670,670,670,670,670,670,670,670,669,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,669,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,669,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -669,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,669,670,670,670, +671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671, /* block 119 */ -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,669,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,669,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -669,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,669,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, /* block 120 */ -670,670,670,670,670,670,670,670,669,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,669,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -669,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,669,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,669,670,670,670,670,670,670,670, +671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, /* block 121 */ -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,669,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -669,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,669,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,669,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, /* block 122 */ -670,670,670,670,669,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -669,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,669,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,669,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,669,670,670,670,670,670,670,670,670,670,670,670, - -/* block 123 */ -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -669,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,669,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,669,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,669,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, - -/* block 124 */ -670,670,670,670,670,670,670,670,669,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,120,120,120,120,120,120,120,120,120,120,120,120, -358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, -358,358,358,358,358,358,358,120,120,120,120,359,359,359,359,359, -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,359,359,359,359,359,359,120,120,120,120, - -/* block 125 */ +671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671, 671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671, 671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, 671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671, + +/* block 123 */ 671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671, 671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, 671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671, 671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, + +/* block 124 */ +671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, 671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,120,120,120,120,120,120,120,120,120,120,120,120, +357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357, +357,357,357,357,357,357,357,120,120,120,120,358,358,358,358,358, +358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, +358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, +358,358,358,358,358,358,358,358,358,358,358,358,120,120,120,120, -/* block 126 */ +/* block 125 */ 672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, 672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, 672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, @@ -2969,6 +2978,16 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, 672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, +/* block 126 */ +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, + /* block 127 */ 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, @@ -2991,53 +3010,53 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ /* block 129 */ 35, 35, 35, 35, 35, 35, 35,120,120,120,120,120,120,120,120,120, -120,120,120,206,206,206,206,206,120,120,120,120,120,215,212,215, -215,215,215,215,215,215,215,215,215,673,215,215,215,215,215,215, -215,215,215,215,215,215,215,120,215,215,215,215,215,120,215,120, -215,215,120,215,215,120,215,215,215,215,215,215,215,215,215,215, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +120,120,120,206,206,206,206,206,120,120,120,120,120,214,211,214, +214,214,214,214,214,214,214,214,214,674,214,214,214,214,214,214, +214,214,214,214,214,214,214,120,214,214,214,214,214,120,214,120, +214,214,120,214,214,120,214,214,214,214,214,214,214,214,214,214, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, /* block 130 */ -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,674,674,674,674,674,674,674,674,674,674,674,674,674,674, -674,674,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,675,675,675,675,675,675,675,675,675,675,675,675,675,675, +675,675,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, /* block 131 */ -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, /* block 132 */ -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225, 8, 7, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224, 8, 7, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, /* block 133 */ -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -120,120,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,120,120,120,120,120,120,120,120, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +120,120,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -225,225,675,225,225,225,225,225,225,225,225,225,220,676,120,120, +224,224,676,224,224,224,224,224,224,224,224,224,219,677,120,120, /* block 134 */ 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, @@ -3047,17 +3066,17 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 8, 7, 8, 7, 8,556,556, 7, 8, 5, 5, 5, 5, 16, 16, 16, 5, 5, 5,120, 5, 5, 5, 5, 10, 7, 8, 7, 8, 7, 8, 5, 5, 5, 9, 10, 9, 9, 9,120, 5, 6, 5, 5,120,120,120,120, -225,225,225,225,225,120,225,225,225,225,225,225,225,225,225,225, +224,224,224,224,224,120,224,224,224,224,224,224,224,224,224,224, /* block 135 */ -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,120,120, 24, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,120,120, 24, /* block 136 */ 120, 5, 5, 5, 6, 5, 5, 5, 7, 8, 5, 9, 5, 10, 5, 5, @@ -3071,7 +3090,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ /* block 137 */ 578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,677,677, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,678,678, 581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581, 581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,120, 120,120,581,581,581,581,581,581,120,120,581,581,581,581,581,581, @@ -3080,39 +3099,39 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 511,511,511,511,511,511,511,511,511, 24, 24, 24, 20, 20,120,120, /* block 138 */ -678,678,678,678,678,678,678,678,678,678,678,678,120,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,120,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,120,678,678,120,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,120,120, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,120,120, +679,679,679,679,679,679,679,679,679,679,679,679,120,679,679,679, +679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679, +679,679,679,679,679,679,679,120,679,679,679,679,679,679,679,679, +679,679,679,679,679,679,679,679,679,679,679,120,679,679,120,679, +679,679,679,679,679,679,679,679,679,679,679,679,679,679,120,120, +679,679,679,679,679,679,679,679,679,679,679,679,679,679,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 139 */ -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,120,120,120,120,120, +679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679, +679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679, +679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679, +679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679, +679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679, +679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679, +679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679, +679,679,679,679,679,679,679,679,679,679,679,120,120,120,120,120, /* block 140 */ -679,679,679,120,120,120,120,680,680,680,680,680,680,680,680,680, -680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680, -680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680, -680,680,680,680,120,120,120,681,681,681,681,681,681,681,681,681, -682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682, -682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682, -682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682, -682,682,682,682,682,683,683,683,683,684,684,684,684,684,684,684, +680,680,680,120,120,120,120,681,681,681,681,681,681,681,681,681, +681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681, +681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681, +681,681,681,681,120,120,120,682,682,682,682,682,682,682,682,682, +683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683, +683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683, +683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683, +683,683,683,683,683,684,684,684,684,685,685,685,685,685,685,685, /* block 141 */ -684,684,684,684,684,684,684,684,684,684,683,683,684,684,684,120, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120, -684,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +685,685,685,685,685,685,685,685,685,685,684,684,685,685,685,120, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120, +685,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, @@ -3130,159 +3149,159 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 143 */ -685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, -685,685,685,685,685,685,685,685,685,685,685,685,685,120,120,120, -686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686, 686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686, -686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686, -686,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -687,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688, -688,688,688,688,688,688,688,688,688,688,688,688,120,120,120,120, +686,686,686,686,686,686,686,686,686,686,686,686,686,120,120,120, +687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687, +687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687, +687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687, +687,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +688,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689, +689,689,689,689,689,689,689,689,689,689,689,689,120,120,120,120, /* block 144 */ -689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689, -689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689, -690,690,690,690,120,120,120,120,120,120,120,120,120,689,689,689, -691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691, -691,692,691,691,691,691,691,691,691,691,692,120,120,120,120,120, -693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693, -693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693, -693,693,693,693,693,693,694,694,694,694,694,120,120,120,120,120, +690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690, +690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690, +691,691,691,691,120,120,120,120,120,120,120,120,120,690,690,690, +692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692, +692,693,692,692,692,692,692,692,692,692,693,120,120,120,120,120, +694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694, +694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694, +694,694,694,694,694,694,695,695,695,695,695,120,120,120,120,120, /* block 145 */ -695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695, -695,695,695,695,695,695,695,695,695,695,695,695,695,695,120,696, -697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697, -697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697, -697,697,697,697,120,120,120,120,697,697,697,697,697,697,697,697, -698,699,699,699,699,699,120,120,120,120,120,120,120,120,120,120, +696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696, +696,696,696,696,696,696,696,696,696,696,696,696,696,696,120,697, +698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698, +698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698, +698,698,698,698,120,120,120,120,698,698,698,698,698,698,698,698, +699,700,700,700,700,700,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 146 */ -700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700, -700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700, -700,700,700,700,700,700,700,700,701,701,701,701,701,701,701,701, 701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701, 701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701, +701,701,701,701,701,701,701,701,702,702,702,702,702,702,702,702, 702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702, 702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702, -702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702, +703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703, +703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703, +703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703, /* block 147 */ -703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703, -703,703,703,703,703,703,703,703,703,703,703,703,703,703,120,120, -704,704,704,704,704,704,704,704,704,704,120,120,120,120,120,120, -705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705, -705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705, -705,705,705,705,120,120,120,120,706,706,706,706,706,706,706,706, +704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704, +704,704,704,704,704,704,704,704,704,704,704,704,704,704,120,120, +705,705,705,705,705,705,705,705,705,705,120,120,120,120,120,120, +706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706, 706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706, -706,706,706,706,706,706,706,706,706,706,706,706,120,120,120,120, +706,706,706,706,120,120,120,120,707,707,707,707,707,707,707,707, +707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707, +707,707,707,707,707,707,707,707,707,707,707,707,120,120,120,120, /* block 148 */ -707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707, -707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707, -707,707,707,707,707,707,707,707,120,120,120,120,120,120,120,120, -708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708, 708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708, 708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708, -708,708,708,708,120,120,120,120,120,120,120,120,120,120,120,709, +708,708,708,708,708,708,708,708,120,120,120,120,120,120,120,120, +709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709, +709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709, +709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709, +709,709,709,709,120,120,120,120,120,120,120,120,120,120,120,710, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 149 */ -710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, -710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, -710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, -710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, -710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, -710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, -710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, -710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, +711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, +711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, +711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, +711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, +711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, +711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, +711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, +711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, /* block 150 */ -710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, -710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, -710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, -710,710,710,710,710,710,710,120,120,120,120,120,120,120,120,120, -710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, -710,710,710,710,710,710,120,120,120,120,120,120,120,120,120,120, -710,710,710,710,710,710,710,710,120,120,120,120,120,120,120,120, +711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, +711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, +711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, +711,711,711,711,711,711,711,120,120,120,120,120,120,120,120,120, +711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, +711,711,711,711,711,711,120,120,120,120,120,120,120,120,120,120, +711,711,711,711,711,711,711,711,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 151 */ -711,711,711,711,711,711,120,120,711,120,711,711,711,711,711,711, -711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, -711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, -711,711,711,711,711,711,120,711,711,120,120,120,711,120,120,711, +712,712,712,712,712,712,120,120,712,120,712,712,712,712,712,712, +712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712, 712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712, -712,712,712,712,712,712,120,713,714,714,714,714,714,714,714,714, -715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715, -715,715,715,715,715,715,715,716,716,717,717,717,717,717,717,717, +712,712,712,712,712,712,120,712,712,120,120,120,712,120,120,712, +713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713, +713,713,713,713,713,713,120,714,715,715,715,715,715,715,715,715, +716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716, +716,716,716,716,716,716,716,717,717,718,718,718,718,718,718,718, /* block 152 */ -718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718, -718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,120, -120,120,120,120,120,120,120,719,719,719,719,719,719,719,719,719, +719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719, +719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,120, +120,120,120,120,120,120,120,720,720,720,720,720,720,720,720,720, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, -720,720,720,120,720,720,120,120,120,120,120,721,721,721,721,721, +721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721, +721,721,721,120,721,721,120,120,120,120,120,722,722,722,722,722, /* block 153 */ -722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722, -722,722,722,722,722,722,723,723,723,723,723,723,120,120,120,724, -725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725, -725,725,725,725,725,725,725,725,725,725,120,120,120,120,120,726, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,724,724,724,724,724,724,120,120,120,725, +726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726, +726,726,726,726,726,726,726,726,726,726,120,120,120,120,120,727, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 154 */ -727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727, -727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727, 728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728, -728,728,728,728,728,728,728,728,120,120,120,120,729,729,728,728, -729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729, -120,120,729,729,729,729,729,729,729,729,729,729,729,729,729,729, -729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729, +728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728, 729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729, +729,729,729,729,729,729,729,729,120,120,120,120,730,730,729,729, +730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730, +120,120,730,730,730,730,730,730,730,730,730,730,730,730,730,730, +730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730, +730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730, /* block 155 */ -730,731,731,731,120,731,731,120,120,120,120,120,731,731,731,731, -730,730,730,730,120,730,730,730,120,730,730,730,730,730,730,730, -730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730, -730,730,730,730,730,730,120,120,731,731,731,120,120,120,120,731, -732,732,732,732,732,732,732,732,732,120,120,120,120,120,120,120, +731,732,732,732,120,732,732,120,120,120,120,120,732,732,732,732, +731,731,731,731,120,731,731,731,120,731,731,731,731,731,731,731, +731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731, +731,731,731,731,731,731,120,120,732,732,732,120,120,120,120,732, 733,733,733,733,733,733,733,733,733,120,120,120,120,120,120,120, -734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734, -734,734,734,734,734,734,734,734,734,734,734,734,734,735,735,736, +734,734,734,734,734,734,734,734,734,120,120,120,120,120,120,120, +735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735, +735,735,735,735,735,735,735,735,735,735,735,735,735,736,736,737, /* block 156 */ -737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737, -737,737,737,737,737,737,737,737,737,737,737,737,737,738,738,738, +738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738, +738,738,738,738,738,738,738,738,738,738,738,738,738,739,739,739, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -739,739,739,739,739,739,739,739,740,739,739,739,739,739,739,739, -739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739, -739,739,739,739,739,741,741,120,120,120,120,742,742,742,742,742, -743,743,743,743,743,743,743,120,120,120,120,120,120,120,120,120, +740,740,740,740,740,740,740,740,741,740,740,740,740,740,740,740, +740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740, +740,740,740,740,740,742,742,120,120,120,120,743,743,743,743,743, +744,744,744,744,744,744,744,120,120,120,120,120,120,120,120,120, /* block 157 */ -744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744, -744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744, -744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744, -744,744,744,744,744,744,120,120,120,745,745,745,745,745,745,745, -746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746, -746,746,746,746,746,746,120,120,747,747,747,747,747,747,747,747, -748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748, -748,748,748,120,120,120,120,120,749,749,749,749,749,749,749,749, +745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745, +745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745, +745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745, +745,745,745,745,745,745,120,120,120,746,746,746,746,746,746,746, +747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747, +747,747,747,747,747,747,120,120,748,748,748,748,748,748,748,748, +749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749, +749,749,749,120,120,120,120,120,750,750,750,750,750,750,750,750, /* block 158 */ -750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750, -750,750,120,120,120,120,120,120,120,751,751,751,751,120,120,120, -120,120,120,120,120,120,120,120,120,752,752,752,752,752,752,752, +751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751, +751,751,120,120,120,120,120,120,120,752,752,752,752,120,120,120, +120,120,120,120,120,120,120,120,120,753,753,753,753,753,753,753, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -3290,30 +3309,30 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 159 */ -753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753, -753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753, -753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753, -753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753, -753,753,753,753,753,753,753,753,753,120,120,120,120,120,120,120, +754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754, +754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754, +754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754, +754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754, +754,754,754,754,754,754,754,754,754,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 160 */ -754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754, -754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754, -754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754, -754,754,754,120,120,120,120,120,120,120,120,120,120,120,120,120, 755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755, 755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755, 755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755, -755,755,755,120,120,120,120,120,120,120,756,756,756,756,756,756, +755,755,755,120,120,120,120,120,120,120,120,120,120,120,120,120, +756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756, +756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756, +756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756, +756,756,756,120,120,120,120,120,120,120,757,757,757,757,757,757, /* block 161 */ -757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757, -757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757, -757,757,757,757,758,758,758,758,120,120,120,120,120,120,120,120, -759,759,759,759,759,759,759,759,759,759,120,120,120,120,120,120, +758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758, +758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758, +758,758,758,758,759,759,759,759,120,120,120,120,120,120,120,120, +760,760,760,760,760,760,760,760,760,760,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -3326,350 +3345,370 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760, -760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,120, +761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761, +761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,120, /* block 163 */ -761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761, -761,761,761,761,761,761,761,761,761,761,761,761,761,762,762,762, -762,762,762,762,762,762,762,761,120,120,120,120,120,120,120,120, -763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763, -763,763,763,763,763,763,764,764,764,764,764,764,764,764,764,764, -764,765,765,765,765,766,766,766,766,766,120,120,120,120,120,120, +762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762, +762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762, +762,762,762,762,762,762,762,762,762,762,120,763,763,764,120,120, +762,762,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 164 */ +765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, +765,765,765,765,765,765,765,765,765,765,765,765,765,766,766,766, +766,766,766,766,766,766,766,765,120,120,120,120,120,120,120,120, +767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767, +767,767,767,767,767,767,768,768,768,768,768,768,768,768,768,768, +768,769,769,769,769,770,770,770,770,770,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, + +/* block 165 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,772,772,772,772,772,772,772,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767, -767,767,767,767,767,767,767,120,120,120,120,120,120,120,120,120, - -/* block 165 */ -768,769,768,770,770,770,770,770,770,770,770,770,770,770,770,770, -770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770, -770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770, -770,770,770,770,770,770,770,770,769,769,769,769,769,769,769,769, -769,769,769,769,769,769,769,771,771,771,771,771,771,771,120,120, -120,120,772,772,772,772,772,772,772,772,772,772,772,772,772,772, -772,772,772,772,772,772,773,773,773,773,773,773,773,773,773,773, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,769, +773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773, +773,773,773,773,773,773,773,120,120,120,120,120,120,120,120,120, /* block 166 */ -774,774,775,776,776,776,776,776,776,776,776,776,776,776,776,776, +774,775,774,776,776,776,776,776,776,776,776,776,776,776,776,776, 776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776, 776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776, -775,775,775,774,774,774,774,775,775,774,774,777,777,778,777,777, -777,777,120,120,120,120,120,120,120,120,120,120,120,778,120,120, -779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779, -779,779,779,779,779,779,779,779,779,120,120,120,120,120,120,120, -780,780,780,780,780,780,780,780,780,780,120,120,120,120,120,120, +776,776,776,776,776,776,776,776,775,775,775,775,775,775,775,775, +775,775,775,775,775,775,775,777,777,777,777,777,777,777,120,120, +120,120,778,778,778,778,778,778,778,778,778,778,778,778,778,778, +778,778,778,778,778,778,779,779,779,779,779,779,779,779,779,779, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,775, /* block 167 */ -781,781,781,782,782,782,782,782,782,782,782,782,782,782,782,782, +780,780,781,782,782,782,782,782,782,782,782,782,782,782,782,782, 782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,781,781,781,781,781,783,781,781,781, -781,781,781,781,781,120,784,784,784,784,784,784,784,784,784,784, -785,785,785,785,782,783,783,120,120,120,120,120,120,120,120,120, -786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786, -786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786, -786,786,786,787,788,788,786,120,120,120,120,120,120,120,120,120, +782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, +781,781,781,780,780,780,780,781,781,780,780,783,783,784,783,783, +783,783,120,120,120,120,120,120,120,120,120,120,120,784,120,120, +785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785, +785,785,785,785,785,785,785,785,785,120,120,120,120,120,120,120, +786,786,786,786,786,786,786,786,786,786,120,120,120,120,120,120, /* block 168 */ -789,789,790,791,791,791,791,791,791,791,791,791,791,791,791,791, -791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791, -791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791, -791,791,791,790,790,790,789,789,789,789,789,789,789,789,789,790, -790,791,792,792,791,793,793,793,793,789,789,789,789,793,120,120, -794,794,794,794,794,794,794,794,794,794,791,793,791,793,793,793, -120,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795, -795,795,795,795,795,120,120,120,120,120,120,120,120,120,120,120, +787,787,787,788,788,788,788,788,788,788,788,788,788,788,788,788, +788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788, +788,788,788,788,788,788,788,787,787,787,787,787,789,787,787,787, +787,787,787,787,787,120,790,790,790,790,790,790,790,790,790,790, +791,791,791,791,788,789,789,788,120,120,120,120,120,120,120,120, +792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792, +792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792, +792,792,792,793,794,794,792,120,120,120,120,120,120,120,120,120, /* block 169 */ -796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796, -796,796,120,796,796,796,796,796,796,796,796,796,796,796,796,796, -796,796,796,796,796,796,796,796,796,796,796,796,797,797,797,798, -798,798,797,797,798,797,798,798,799,799,799,799,799,799,798,120, +795,795,796,797,797,797,797,797,797,797,797,797,797,797,797,797, +797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797, +797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797, +797,797,797,796,796,796,795,795,795,795,795,795,795,795,795,796, +796,797,798,798,797,799,799,799,799,795,795,795,795,799,796,795, +800,800,800,800,800,800,800,800,800,800,797,799,797,799,799,799, +120,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801, +801,801,801,801,801,120,120,120,120,120,120,120,120,120,120,120, + +/* block 170 */ +802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802, +802,802,120,802,802,802,802,802,802,802,802,802,802,802,802,802, +802,802,802,802,802,802,802,802,802,802,802,802,803,803,803,804, +804,804,803,803,804,803,804,804,805,805,805,805,805,805,804,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 170 */ -800,800,800,800,800,800,800,120,800,120,800,800,800,800,120,800, -800,800,800,800,800,800,800,800,800,800,800,800,800,800,120,800, -800,800,800,800,800,800,800,800,800,801,120,120,120,120,120,120, -802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802, -802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802, -802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,803, -804,804,804,803,803,803,803,803,803,803,803,120,120,120,120,120, -805,805,805,805,805,805,805,805,805,805,120,120,120,120,120,120, - /* block 171 */ -806,807,808,809,120,810,810,810,810,810,810,810,810,120,120,810, -810,120,120,810,810,810,810,810,810,810,810,810,810,810,810,810, -810,810,810,810,810,810,810,810,810,120,810,810,810,810,810,810, -810,120,810,810,120,810,810,810,810,810,120,811,807,810,812,808, -806,808,808,808,808,120,120,808,808,120,120,808,808,808,120,120, -810,120,120,120,120,120,120,812,120,120,120,120,120,810,810,810, -810,810,808,808,120,120,806,806,806,806,806,806,806,120,120,120, -806,806,806,806,806,120,120,120,120,120,120,120,120,120,120,120, +806,806,806,806,806,806,806,120,806,120,806,806,806,806,120,806, +806,806,806,806,806,806,806,806,806,806,806,806,806,806,120,806, +806,806,806,806,806,806,806,806,806,807,120,120,120,120,120,120, +808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808, +808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808, +808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,809, +810,810,810,809,809,809,809,809,809,809,809,120,120,120,120,120, +811,811,811,811,811,811,811,811,811,811,120,120,120,120,120,120, /* block 172 */ -813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813, -813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813, -813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813, -813,813,813,813,813,814,814,814,815,815,815,815,815,815,815,815, -814,814,815,815,815,814,815,813,813,813,813,816,816,816,816,816, -817,817,817,817,817,817,817,817,817,817,120,816,120,816,815,813, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +812,813,814,815,120,816,816,816,816,816,816,816,816,120,120,816, +816,120,120,816,816,816,816,816,816,816,816,816,816,816,816,816, +816,816,816,816,816,816,816,816,816,120,816,816,816,816,816,816, +816,120,816,816,120,816,816,816,816,816,120,817,813,816,818,814, +812,814,814,814,814,120,120,814,814,120,120,814,814,814,120,120, +816,120,120,120,120,120,120,818,120,120,120,120,120,816,816,816, +816,816,814,814,120,120,812,812,812,812,812,812,812,120,120,120, +812,812,812,812,812,120,120,120,120,120,120,120,120,120,120,120, /* block 173 */ -818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818, -818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818, -818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818, -819,820,820,821,821,821,821,821,821,820,821,820,820,819,820,821, -821,820,821,821,818,818,822,818,120,120,120,120,120,120,120,120, -823,823,823,823,823,823,823,823,823,823,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,820,820,820,821,821,821,821,821,821,821,821, +820,820,821,821,821,820,821,819,819,819,819,822,822,822,822,822, +823,823,823,823,823,823,823,823,823,823,822,822,120,822,821,819, +819,819,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 174 */ 824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, 824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,825, -826,826,827,827,827,827,120,120,826,826,826,826,827,827,826,827, -827,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, -828,828,828,828,828,828,828,828,824,824,824,824,827,827,120,120, +824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, +825,826,826,827,827,827,827,827,827,826,827,826,826,825,826,827, +827,826,827,827,824,824,828,824,120,120,120,120,120,120,120,120, +829,829,829,829,829,829,829,829,829,829,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 175 */ -829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829, -829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829, -829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829, -830,830,830,831,831,831,831,831,831,831,831,830,830,831,830,831, -831,832,832,832,829,120,120,120,120,120,120,120,120,120,120,120, -833,833,833,833,833,833,833,833,833,833,120,120,120,120,120,120, -395,395,395,395,395,395,395,395,395,395,395,395,395,120,120,120, +830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830, +830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830, +830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,831, +832,832,833,833,833,833,120,120,832,832,832,832,833,833,832,833, +833,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834, +834,834,834,834,834,834,834,834,830,830,830,830,833,833,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 176 */ -834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834, -834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834, -834,834,834,834,834,834,834,834,834,834,834,835,836,835,836,836, -835,835,835,835,835,835,836,835,834,120,120,120,120,120,120,120, -837,837,837,837,837,837,837,837,837,837,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835, +835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835, +835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835, +836,836,836,837,837,837,837,837,837,837,837,836,836,837,836,837, +837,838,838,838,835,120,120,120,120,120,120,120,120,120,120,120, +839,839,839,839,839,839,839,839,839,839,120,120,120,120,120,120, +394,394,394,394,394,394,394,394,394,394,394,394,394,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 177 */ -838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, -838,838,838,838,838,838,838,838,838,838,838,120,120,839,839,839, -840,840,839,839,839,839,840,839,839,839,839,839,120,120,120,120, -841,841,841,841,841,841,841,841,841,841,842,842,843,843,843,844, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840, +840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840, +840,840,840,840,840,840,840,840,840,840,840,841,842,841,842,842, +841,841,841,841,841,841,842,841,840,120,120,120,120,120,120,120, +843,843,843,843,843,843,843,843,843,843,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 178 */ -845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845, -845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845, -845,845,845,845,845,845,845,845,845,845,845,845,846,846,846,847, -847,847,847,847,847,847,847,847,846,847,847,848,120,120,120,120, +844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844, +844,844,844,844,844,844,844,844,844,844,844,120,120,845,845,845, +846,846,845,845,845,845,846,845,845,845,845,845,120,120,120,120, +847,847,847,847,847,847,847,847,847,847,848,848,849,849,849,850, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 179 */ +851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851, +851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851, +851,851,851,851,851,851,851,851,851,851,851,851,852,852,852,853, +853,853,853,853,853,853,853,853,852,853,853,854,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849, -849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849, -850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850, -850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850, -851,851,851,851,851,851,851,851,851,851,852,852,852,852,852,852, -852,852,852,120,120,120,120,120,120,120,120,120,120,120,120,853, /* block 180 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -854,854,854,854,854,854,854,854,120,120,854,854,854,854,854,854, -854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854, -854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854, -854,855,855,855,856,856,856,856,120,120,856,856,855,855,855,855, -856,854,857,854,855,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855, +855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855, +856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856, +856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856, +857,857,857,857,857,857,857,857,857,857,858,858,858,858,858,858, +858,858,858,120,120,120,120,120,120,120,120,120,120,120,120,859, /* block 181 */ -858,859,859,859,859,859,859,859,859,859,859,858,858,858,858,858, -858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, -858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, -858,858,858,859,859,859,859,859,859,860,861,859,859,859,859,862, -862,862,862,862,862,862,862,859,120,120,120,120,120,120,120,120, -863,864,864,864,864,864,864,865,865,864,864,864,863,863,863,863, -863,863,863,863,863,863,863,863,863,863,863,863,863,863,863,863, -863,863,863,863,863,863,863,863,863,863,863,863,863,863,863,863, +860,860,860,860,860,860,860,120,120,860,120,120,860,860,860,860, +860,860,860,860,120,860,860,120,860,860,860,860,860,860,860,860, +860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, +861,862,862,862,862,862,120,862,862,120,120,863,863,862,863,864, +862,864,862,863,865,865,865,120,120,120,120,120,120,120,120,120, +866,866,866,866,866,866,866,866,866,866,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 182 */ -863,863,863,863,866,866,866,866,866,866,864,864,864,864,864,864, -864,864,864,864,864,864,864,865,864,864,867,867,867,863,867,867, -867,867,867,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -868,868,868,868,868,868,868,868,868,868,868,868,868,868,868,868, -868,868,868,868,868,868,868,868,868,868,868,868,868,868,868,868, -868,868,868,868,868,868,868,868,868,868,868,868,868,868,868,868, -868,868,868,868,868,868,868,868,868,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +867,867,867,867,867,867,867,867,120,120,867,867,867,867,867,867, +867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,867, +867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,867, +867,868,868,868,869,869,869,869,120,120,869,869,868,868,868,868, +869,867,870,867,868,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 183 */ -869,869,869,869,869,869,869,869,869,120,869,869,869,869,869,869, -869,869,869,869,869,869,869,869,869,869,869,869,869,869,869,869, -869,869,869,869,869,869,869,869,869,869,869,869,869,869,869,870, -871,871,871,871,871,871,871,120,871,871,871,871,871,871,870,871, -869,872,872,872,872,872,120,120,120,120,120,120,120,120,120,120, -873,873,873,873,873,873,873,873,873,873,874,874,874,874,874,874, -874,874,874,874,874,874,874,874,874,874,874,874,874,120,120,120, -875,875,876,876,876,876,876,876,876,876,876,876,876,876,876,876, +871,872,872,872,872,872,872,872,872,872,872,871,871,871,871,871, +871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871, +871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871, +871,871,871,872,872,872,872,872,872,873,874,872,872,872,872,875, +875,875,875,875,875,875,875,872,120,120,120,120,120,120,120,120, +876,877,877,877,877,877,877,878,878,877,877,877,876,876,876,876, +876,876,876,876,876,876,876,876,876,876,876,876,876,876,876,876, +876,876,876,876,876,876,876,876,876,876,876,876,876,876,876,876, /* block 184 */ -876,876,876,876,876,876,876,876,876,876,876,876,876,876,876,876, -120,120,877,877,877,877,877,877,877,877,877,877,877,877,877,877, -877,877,877,877,877,877,877,877,120,878,877,877,877,877,877,877, -877,878,877,877,878,877,877,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +876,876,876,876,879,879,879,879,879,879,877,877,877,877,877,877, +877,877,877,877,877,877,877,878,877,877,880,880,880,876,880,880, +880,880,880,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,881, +881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,881, +881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,881, +881,881,881,881,881,881,881,881,881,120,120,120,120,120,120,120, /* block 185 */ -879,879,879,879,879,879,879,120,879,879,120,879,879,879,879,879, -879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879, -879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879, -879,880,880,880,880,880,880,120,120,120,880,120,880,880,120,880, -880,880,880,880,880,880,881,880,120,120,120,120,120,120,120,120, -882,882,882,882,882,882,882,882,882,882,120,120,120,120,120,120, -883,883,883,883,883,883,120,883,883,120,883,883,883,883,883,883, -883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883, +882,882,882,882,882,882,882,882,882,120,882,882,882,882,882,882, +882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,882, +882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,883, +884,884,884,884,884,884,884,120,884,884,884,884,884,884,883,884, +882,885,885,885,885,885,120,120,120,120,120,120,120,120,120,120, +886,886,886,886,886,886,886,886,886,886,887,887,887,887,887,887, +887,887,887,887,887,887,887,887,887,887,887,887,887,120,120,120, +888,888,889,889,889,889,889,889,889,889,889,889,889,889,889,889, /* block 186 */ -883,883,883,883,883,883,883,883,883,883,884,884,884,884,884,120, -885,885,120,884,884,885,884,885,883,120,120,120,120,120,120,120, -886,886,886,886,886,886,886,886,886,886,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889, +120,120,890,890,890,890,890,890,890,890,890,890,890,890,890,890, +890,890,890,890,890,890,890,890,120,891,890,890,890,890,890,890, +890,891,890,890,891,890,890,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 187 */ +892,892,892,892,892,892,892,120,892,892,120,892,892,892,892,892, +892,892,892,892,892,892,892,892,892,892,892,892,892,892,892,892, +892,892,892,892,892,892,892,892,892,892,892,892,892,892,892,892, +892,893,893,893,893,893,893,120,120,120,893,120,893,893,120,893, +893,893,893,893,893,893,894,893,120,120,120,120,120,120,120,120, +895,895,895,895,895,895,895,895,895,895,120,120,120,120,120,120, +896,896,896,896,896,896,120,896,896,120,896,896,896,896,896,896, +896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, + +/* block 188 */ +896,896,896,896,896,896,896,896,896,896,897,897,897,897,897,120, +898,898,120,897,897,898,897,898,896,120,120,120,120,120,120,120, +899,899,899,899,899,899,899,899,899,899,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -887,887,887,887,887,887,887,887,887,887,887,887,887,887,887,887, -887,887,887,888,888,889,889,890,890,120,120,120,120,120,120,120, -/* block 188 */ -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +/* block 189 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -294,294,891,294,891,296,296,296,296,296,296,296,296,297,297,297, -297,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296, -296,296,120,120,120,120,120,120,120,120,120,120,120,120,120,892, - -/* block 189 */ -893,893,893,893,893,893,893,893,893,893,893,893,893,893,893,893, -893,893,893,893,893,893,893,893,893,893,893,893,893,893,893,893, -893,893,893,893,893,893,893,893,893,893,893,893,893,893,893,893, -893,893,893,893,893,893,893,893,893,893,893,893,893,893,893,893, -893,893,893,893,893,893,893,893,893,893,893,893,893,893,893,893, -893,893,893,893,893,893,893,893,893,893,893,893,893,893,893,893, -893,893,893,893,893,893,893,893,893,893,893,893,893,893,893,893, -893,893,893,893,893,893,893,893,893,893,893,893,893,893,893,893, - -/* block 190 */ -893,893,893,893,893,893,893,893,893,893,893,893,893,893,893,893, -893,893,893,893,893,893,893,893,893,893,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, +900,900,900,901,901,902,902,903,903,120,120,120,120,120,120,120, + +/* block 190 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +590,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, +293,293,904,293,904,295,295,295,295,295,295,295,295,296,296,296, +296,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295, +295,295,120,120,120,120,120,120,120,120,120,120,120,120,120,905, /* block 191 */ -894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,894, -894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,894, -894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,894, -894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,894, -894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,894, -894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,894, -894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,120, -895,895,895,895,895,120,120,120,120,120,120,120,120,120,120,120, +906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, +906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, +906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, +906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, +906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, +906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, +906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, +906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, /* block 192 */ -893,893,893,893,893,893,893,893,893,893,893,893,893,893,893,893, -893,893,893,893,893,893,893,893,893,893,893,893,893,893,893,893, -893,893,893,893,893,893,893,893,893,893,893,893,893,893,893,893, -893,893,893,893,893,893,893,893,893,893,893,893,893,893,893,893, -893,893,893,893,120,120,120,120,120,120,120,120,120,120,120,120, +906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, +906,906,906,906,906,906,906,906,906,906,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 193 */ -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,120, +908,908,908,908,908,120,120,120,120,120,120,120,120,120,120,120, /* block 194 */ -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,120, -897,897,897,897,897,897,897,897,897,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, +906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, +906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, +906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, +906,906,906,906,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 195 */ -898,898,898,898,898,898,898,898,898,898,898,898,898,898,898,898, -898,898,898,898,898,898,898,898,898,898,898,898,898,898,898,898, -898,898,898,898,898,898,898,898,898,898,898,898,898,898,898,898, -898,898,898,898,898,898,898,898,898,898,898,898,898,898,898,898, -898,898,898,898,898,898,898,898,898,898,898,898,898,898,898,898, -898,898,898,898,898,898,898,898,898,898,898,898,898,898,898,898, -898,898,898,898,898,898,898,898,898,898,898,898,898,898,898,898, -898,898,898,898,898,898,898,898,898,898,898,898,898,898,898,898, +909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, +909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, +909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, +909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, +909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, +909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, +909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, +909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, /* block 196 */ -898,898,898,898,898,898,898,898,898,898,898,898,898,898,898,898, -898,898,898,898,898,898,898,898,898,898,898,898,898,898,898,898, -898,898,898,898,898,898,898,898,898,898,898,898,898,898,898,898, -898,898,898,898,898,898,898,898,898,898,898,898,898,898,898,898, -898,898,898,898,898,898,898,120,120,120,120,120,120,120,120,120, +909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, +909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, +909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,120, +910,910,910,910,910,910,910,910,910,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 197 */ +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, + +/* block 198 */ +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +911,911,911,911,911,911,911,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, + +/* block 199 */ 601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, 601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, 601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, @@ -3679,38 +3718,38 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, 601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, -/* block 198 */ +/* block 200 */ 601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, 601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, 601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, 601,601,601,601,601,601,601,601,601,120,120,120,120,120,120,120, -899,899,899,899,899,899,899,899,899,899,899,899,899,899,899,899, -899,899,899,899,899,899,899,899,899,899,899,899,899,899,899,120, -900,900,900,900,900,900,900,900,900,900,120,120,120,120,901,901, +912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,912, +912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,120, +913,913,913,913,913,913,913,913,913,913,120,120,120,120,914,914, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 199 */ +/* block 201 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -902,902,902,902,902,902,902,902,902,902,902,902,902,902,902,902, -902,902,902,902,902,902,902,902,902,902,902,902,902,902,120,120, -903,903,903,903,903,904,120,120,120,120,120,120,120,120,120,120, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,120,120, +916,916,916,916,916,917,120,120,120,120,120,120,120,120,120,120, -/* block 200 */ -905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, -905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, -905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, -906,906,906,906,906,906,906,907,907,907,907,907,908,908,908,908, -909,909,909,909,907,908,120,120,120,120,120,120,120,120,120,120, -910,910,910,910,910,910,910,910,910,910,120,911,911,911,911,911, -911,911,120,905,905,905,905,905,905,905,905,905,905,905,905,905, -905,905,905,905,905,905,905,905,120,120,120,120,120,905,905,905, +/* block 202 */ +918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, +918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, +918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, +919,919,919,919,919,919,919,920,920,920,920,920,921,921,921,921, +922,922,922,922,920,921,120,120,120,120,120,120,120,120,120,120, +923,923,923,923,923,923,923,923,923,923,120,924,924,924,924,924, +924,924,120,918,918,918,918,918,918,918,918,918,918,918,918,918, +918,918,918,918,918,918,918,918,120,120,120,120,120,918,918,918, -/* block 201 */ -905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, +/* block 203 */ +918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -3719,19 +3758,19 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 202 */ +/* block 204 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,912, -912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,912, -913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, -913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +925,925,925,925,925,925,925,925,925,925,925,925,925,925,925,925, +925,925,925,925,925,925,925,925,925,925,925,925,925,925,925,925, +926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, +926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, -/* block 203 */ -914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, -914,914,914,914,914,914,914,915,915,915,915,120,120,120,120,120, +/* block 205 */ +927,927,927,927,927,927,927,927,927,927,927,927,927,927,927,927, +927,927,927,927,927,927,927,928,928,928,928,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -3739,57 +3778,77 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 204 */ -916,916,916,916,916,916,916,916,916,916,916,916,916,916,916,916, -916,916,916,916,916,916,916,916,916,916,916,916,916,916,916,916, -916,916,916,916,916,916,916,916,916,916,916,916,916,916,916,916, -916,916,916,916,916,916,916,916,916,916,916,916,916,916,916,916, -916,916,916,916,916,916,916,916,916,916,916,120,120,120,120,917, -916,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, +/* block 206 */ +929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929, +929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929, +929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929, +929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929, +929,929,929,929,929,929,929,929,929,929,929,120,120,120,120,930, +929,931,931,931,931,931,931,931,931,931,931,931,931,931,931,931, +931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,931, +931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,931, -/* block 205 */ -918,918,918,918,918,918,918,918,120,120,120,120,120,120,120,917, -917,917,917,919,919,919,919,919,919,919,919,919,919,919,919,919, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +/* block 207 */ +931,931,931,931,931,931,931,931,120,120,120,120,120,120,120,930, +930,930,930,932,932,932,932,932,932,932,932,932,932,932,932,932, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -920,921, 5,111,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, - -/* block 206 */ -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, - -/* block 207 */ -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,120,120,120,120,120,120,120,120, +933,934, 5,111,935,120,120,120,120,120,120,120,120,120,120,120, +936,936,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 208 */ -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,120,120,120,120,120,120,120,120,120,120,120,120,120, +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, /* block 209 */ +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, +937,937,937,937,937,937,937,937,120,120,120,120,120,120,120,120, + +/* block 210 */ +938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, +938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, +938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, +938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, +938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, +938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, +938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, +938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, + +/* block 211 */ +938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, +938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, +938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, +938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, +938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, +938,938,938,938,938,938,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, + +/* block 212 */ +937,937,937,937,937,937,937,937,937,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, + +/* block 213 */ 578,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, 573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, 573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, @@ -3799,7 +3858,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, 573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -/* block 210 */ +/* block 214 */ 573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, 573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, 573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, @@ -3809,7 +3868,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, 573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -/* block 211 */ +/* block 215 */ 573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, 573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -3817,49 +3876,49 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 573,573,573,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,578,578,578,578,120,120,120,120,120,120,120,120, -923,923,923,923,923,923,923,923,923,923,923,923,923,923,923,923, +939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, -/* block 212 */ -923,923,923,923,923,923,923,923,923,923,923,923,923,923,923,923, -923,923,923,923,923,923,923,923,923,923,923,923,923,923,923,923, -923,923,923,923,923,923,923,923,923,923,923,923,923,923,923,923, -923,923,923,923,923,923,923,923,923,923,923,923,923,923,923,923, -923,923,923,923,923,923,923,923,923,923,923,923,923,923,923,923, -923,923,923,923,923,923,923,923,923,923,923,923,923,923,923,923, -923,923,923,923,923,923,923,923,923,923,923,923,923,923,923,923, -923,923,923,923,923,923,923,923,923,923,923,923,923,923,923,923, +/* block 216 */ +939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, +939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, +939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, +939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, +939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, +939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, +939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, +939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, -/* block 213 */ -923,923,923,923,923,923,923,923,923,923,923,923,923,923,923,923, -923,923,923,923,923,923,923,923,923,923,923,923,923,923,923,923, -923,923,923,923,923,923,923,923,923,923,923,923,923,923,923,923, -923,923,923,923,923,923,923,923,923,923,923,923,923,923,923,923, -923,923,923,923,923,923,923,923,923,923,923,923,923,923,923,923, -923,923,923,923,923,923,923,923,923,923,923,923,923,923,923,923, -923,923,923,923,923,923,923,923,923,923,923,923,923,923,923,923, -923,923,923,923,923,923,923,923,923,923,923,923,120,120,120,120, +/* block 217 */ +939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, +939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, +939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, +939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, +939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, +939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, +939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, +939,939,939,939,939,939,939,939,939,939,939,939,120,120,120,120, -/* block 214 */ -924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, -924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, -924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, -924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, -924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, -924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, -924,924,924,924,924,924,924,924,924,924,924,120,120,120,120,120, -924,924,924,924,924,924,924,924,924,924,924,924,924,120,120,120, +/* block 218 */ +940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940, +940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940, +940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940, +940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940, +940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940, +940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940, +940,940,940,940,940,940,940,940,940,940,940,120,120,120,120,120, +940,940,940,940,940,940,940,940,940,940,940,940,940,120,120,120, -/* block 215 */ -924,924,924,924,924,924,924,924,924,120,120,120,120,120,120,120, -924,924,924,924,924,924,924,924,924,924,120,120,925,926,926,927, -928,928,928,928,120,120,120,120,120,120,120,120,120,120,120,120, +/* block 219 */ +940,940,940,940,940,940,940,940,940,120,120,120,120,120,120,120, +940,940,940,940,940,940,940,940,940,940,120,120,941,942,942,943, +944,944,944,944,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 216 */ +/* block 220 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, @@ -3869,17 +3928,17 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,120, -/* block 217 */ +/* block 221 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20,929,930,113,113,113, 20, 20, 20,930,929,929, -929,929,929, 24, 24, 24, 24, 24, 24, 24, 24,113,113,113,113,113, + 20, 20, 20, 20, 20,945,946,113,113,113, 20, 20, 20,946,945,945, +945,945,945, 24, 24, 24, 24, 24, 24, 24, 24,113,113,113,113,113, -/* block 218 */ +/* block 222 */ 113,113,113, 20, 20,113,113,113,113,113,113,113, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,113,113,113,113, 20, 20, @@ -3889,17 +3948,17 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 219 */ -684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684, -684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684, -684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684, -684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684, -684,684,931,931,931,684,120,120,120,120,120,120,120,120,120,120, +/* block 223 */ +685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, +685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, +685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, +685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, +685,685,947,947,947,685,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 220 */ +/* block 224 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -3909,7 +3968,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 221 */ +/* block 225 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, @@ -3919,7 +3978,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582, 582,582, 25, 25, 25, 25, 25, 25, 25,120,120,120,120,120,120,120, -/* block 222 */ +/* block 226 */ 513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, 513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514, 514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, @@ -3929,7 +3988,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 514,514,514,514,514,514,514,514,513,513,513,513,513,513,513,513, 513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, -/* block 223 */ +/* block 227 */ 513,513,514,514,514,514,514,514,514,514,514,514,514,514,514,514, 514,514,514,514,514,514,514,514,514,514,514,514,513,120,513,513, 120,120,513,120,120,513,513,120,120,513,513,513,513,120,513,513, @@ -3939,7 +3998,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514, 514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, -/* block 224 */ +/* block 228 */ 514,514,514,514,513,513,120,513,513,513,513,120,120,513,513,513, 513,513,513,513,513,120,513,513,513,513,513,513,513,120,514,514, 514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, @@ -3949,7 +4008,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 514,514,514,514,514,514,514,514,514,514,514,514,513,513,513,513, 513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, -/* block 225 */ +/* block 229 */ 513,513,513,513,513,513,514,514,514,514,514,514,514,514,514,514, 514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, 513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, @@ -3959,7 +4018,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 513,513,513,513,513,513,513,513,513,513,513,513,513,513,514,514, 514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, -/* block 226 */ +/* block 230 */ 514,514,514,514,514,514,514,514,513,513,513,513,513,513,513,513, 513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, 513,513,514,514,514,514,514,514,514,514,514,514,514,514,514,514, @@ -3969,7 +4028,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, 513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, -/* block 227 */ +/* block 231 */ 513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514, 514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, 514,514,514,514,514,514,120,120,513,513,513,513,513,513,513,513, @@ -3979,7 +4038,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 514,514,513,513,513,513,513,513,513,513,513,513,513,513,513,513, 513,513,513,513,513,513,513,513,513,513,513, 9,514,514,514,514, -/* block 228 */ +/* block 232 */ 514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, 514,514,514,514,514, 9,514,514,514,514,514,514,513,513,513,513, 513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, @@ -3989,7 +4048,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, 9, 514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, -/* block 229 */ +/* block 233 */ 514,514,514,514,514,514,514,514,514, 9,514,514,514,514,514,514, 513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, 513,513,513,513,513,513,513,513,513, 9,514,514,514,514,514,514, @@ -3999,97 +4058,97 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, -/* block 230 */ -932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932, -932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932, -932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932, -932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932, -932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932, -932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932, -932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932, -932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932, +/* block 234 */ +948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, +948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, +948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, +948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, +948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, +948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, +948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, +948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, -/* block 231 */ -933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933, -933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933, -933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933, -933,933,933,933,933,933,933,932,932,932,932,933,933,933,933,933, -933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933, -933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933, -933,933,933,933,933,933,933,933,933,933,933,933,933,932,932,932, -932,932,932,932,932,933,932,932,932,932,932,932,932,932,932,932, +/* block 235 */ +949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949, +949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949, +949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949, +949,949,949,949,949,949,949,948,948,948,948,949,949,949,949,949, +949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949, +949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949, +949,949,949,949,949,949,949,949,949,949,949,949,949,948,948,948, +948,948,948,948,948,949,948,948,948,948,948,948,948,948,948,948, -/* block 232 */ -932,932,932,932,933,932,932,934,934,934,934,934,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,933,933,933,933,933, -120,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933, +/* block 236 */ +948,948,948,948,949,948,948,950,950,950,950,950,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,949,949,949,949,949, +120,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 233 */ -935,935,935,935,935,935,935,120,935,935,935,935,935,935,935,935, -935,935,935,935,935,935,935,935,935,120,120,935,935,935,935,935, -935,935,120,935,935,120,935,935,935,935,935,120,120,120,120,120, +/* block 237 */ +951,951,951,951,951,951,951,120,951,951,951,951,951,951,951,951, +951,951,951,951,951,951,951,951,951,120,120,951,951,951,951,951, +951,951,120,951,951,120,951,951,951,951,951,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 234 */ -936,936,936,936,936,936,936,936,936,936,936,936,936,936,936,936, -936,936,936,936,936,936,936,936,936,936,936,936,936,936,936,936, -936,936,936,936,936,936,936,936,936,936,936,936,936,120,120,120, -937,937,937,937,937,937,937,938,938,938,938,938,938,938,120,120, -939,939,939,939,939,939,939,939,939,939,120,120,120,120,936,940, +/* block 238 */ +952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, +952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, +952,952,952,952,952,952,952,952,952,952,952,952,952,120,120,120, +953,953,953,953,953,953,953,954,954,954,954,954,954,954,120,120, +955,955,955,955,955,955,955,955,955,955,120,120,120,120,952,956, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 235 */ +/* block 239 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941, -941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941, -941,941,941,941,941,941,941,941,941,941,941,941,942,942,942,942, -943,943,943,943,943,943,943,943,943,943,120,120,120,120,120,944, +957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, +957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, +957,957,957,957,957,957,957,957,957,957,957,957,958,958,958,958, +959,959,959,959,959,959,959,959,959,959,120,120,120,120,120,960, -/* block 236 */ -945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945, -945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945, -945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945, -945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945, -945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945, -945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945, -945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945, -945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945, +/* block 240 */ +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, -/* block 237 */ -945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945, -945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945, -945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945, -945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945, -945,945,945,945,945,120,120,946,946,946,946,946,946,946,946,946, -947,947,947,947,947,947,947,120,120,120,120,120,120,120,120,120, +/* block 241 */ +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,120,120,962,962,962,962,962,962,962,962,962, +963,963,963,963,963,963,963,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 238 */ -948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, -948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, -948,948,949,949,949,949,949,949,949,949,949,949,949,949,949,949, -949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949, -949,949,949,949,950,950,950,950,950,950,950,951,120,120,120,120, -952,952,952,952,952,952,952,952,952,952,120,120,120,120,953,953, +/* block 242 */ +964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964, +964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964, +964,964,965,965,965,965,965,965,965,965,965,965,965,965,965,965, +965,965,965,965,965,965,965,965,965,965,965,965,965,965,965,965, +965,965,965,965,966,966,966,966,966,966,966,967,120,120,120,120, +968,968,968,968,968,968,968,968,968,968,120,120,120,120,969,969, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 239 */ +/* block 243 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -4099,7 +4158,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, -/* block 240 */ +/* block 244 */ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 20, 25, 25, 25, @@ -4109,7 +4168,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 241 */ +/* block 245 */ 120, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 20, 25, @@ -4119,87 +4178,87 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 242 */ -225,225,225,225,120,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -120,225,225,120,225,120,120,225,120,225,225,225,225,225,225,225, -225,225,225,120,225,225,225,225,120,225,120,225,120,120,120,120, -120,120,225,120,120,120,120,225,120,225,120,225,120,225,225,225, -120,225,225,120,225,120,120,225,120,225,120,225,120,225,120,225, -120,225,225,120,225,120,120,225,225,225,225,120,225,225,225,225, -225,225,225,120,225,225,225,225,120,225,225,225,225,120,225,120, +/* block 246 */ +224,224,224,224,120,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +120,224,224,120,224,120,120,224,120,224,224,224,224,224,224,224, +224,224,224,120,224,224,224,224,120,224,120,224,120,120,120,120, +120,120,224,120,120,120,120,224,120,224,120,224,120,224,224,224, +120,224,224,120,224,120,120,224,120,224,120,224,120,224,120,224, +120,224,224,120,224,120,120,224,224,224,224,120,224,224,224,224, +224,224,224,120,224,224,224,224,120,224,224,224,224,120,224,120, -/* block 243 */ -225,225,225,225,225,225,225,225,225,225,120,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,120,120,120,120, -120,225,225,225,120,225,225,225,225,225,120,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,120,120,120,120, +/* block 247 */ +224,224,224,224,224,224,224,224,224,224,120,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,120,120,120,120, +120,224,224,224,120,224,224,224,224,224,120,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -218,218,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +217,217,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 244 */ +/* block 248 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,954,954,954,954, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, -/* block 245 */ +/* block 249 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21,954,954,954,954,954,954,954,954,954,954,954,954, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,954, -954, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, -954, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, -954, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970, +970, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, +970, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, +970, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21,954,954,954,954,954,954,954,954,954,954, + 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970, -/* block 246 */ - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,954,954,954, +/* block 250 */ + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,954,954,954, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, -/* block 247 */ +/* block 251 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,955,955,955,955,955,955,955,955,955,955, -955,955,955,955,955,955,955,955,955,955,955,955,955,955,955,955, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,971,971,971,971,971,971,971,971,971,971, +971,971,971,971,971,971,971,971,971,971,971,971,971,971,971,971, -/* block 248 */ -956, 21, 21,954,954,954,954,954,954,954,954,954,954,954,954,954, +/* block 252 */ +972, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,970, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, - 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20,954,954,954,954, - 20, 20, 20, 20, 20, 20, 20, 20, 20,954,954,954,954,954,954,954, -584,584,954,954,954,954,954,954,954,954,954,954,954,954,954,954, - 21, 21, 21, 21, 21, 21,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, + 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20,970,970,970,970, + 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,970, +584,584,970,970,970,970,970,970,970,970,970,970,970,970,970,970, + 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -/* block 249 */ -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, +/* block 253 */ +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -/* block 250 */ +/* block 254 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, @@ -4209,7 +4268,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, -/* block 251 */ +/* block 255 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, @@ -4217,9 +4276,9 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,957,957,957,957,957, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,973,973,973,973,973, -/* block 252 */ +/* block 256 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, @@ -4229,7 +4288,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, -/* block 253 */ +/* block 257 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, @@ -4239,17 +4298,17 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, -/* block 254 */ +/* block 258 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21,954,954,954,954,954,954,954,954,954,954, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,954,954,954, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,954,954,954,954,954, + 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970, -/* block 255 */ +/* block 259 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, @@ -4257,99 +4316,109 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20,954,954,954,954,954,954,954,954,954,954,954,954, + 20, 20, 20, 20,970,970,970,970,970,970,970,970,970,970,970,970, -/* block 256 */ +/* block 260 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 21, 21, 21, 21,954,954,954,954,954,954,954, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, + 20, 20, 20, 20, 20, 21, 21, 21, 21,970,970,970,970,970,970,970, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -/* block 257 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,954,954,954,954, +/* block 261 */ + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20,954,954,954,954,954,954,954,954, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,954,954,954,954,954,954, + 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,970,970, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, -/* block 258 */ - 20, 20, 20, 20, 20, 20, 20, 20,954,954,954,954,954,954,954,954, +/* block 262 */ + 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,970,970, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970, + 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -/* block 259 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,954, 21, 21, 21, +/* block 263 */ + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21,954, 21, 21, 21, 21,954,954,954, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21,970, 21, 21, 21, 21, 21, 21, -/* block 260 */ +/* block 264 */ + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21,954,954, 21, 21, 21, 21, 21, 21,954,954,954, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,954,954, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, -/* block 261 */ +/* block 265 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21,954,954,954,954,954,954,954,954,954,954,954,954, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,954,954, - 21, 21, 21, 21,954,954,954,954, 21, 21, 21,954,954,954,954,954, + 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970, + 21, 21, 21, 21, 21,970,970,970, 21, 21, 21,970,970,970,970,970, -/* block 262 */ - 21, 21, 21,954,954,954,954,954,954,954,954,954,954,954,954,954, - 21, 21, 21, 21, 21, 21,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, +/* block 266 */ + 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970, + 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970, + 21, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,970, + 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -/* block 263 */ -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,120,120, +/* block 267 */ + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,120,120,120,120,120,120, -/* block 264 */ +/* block 268 */ +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +970,970,970,970,970,970,970,970,970,970,970,970,970,970,120,120, + +/* block 269 */ 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,120,120,120,120,120,120,120,120,120, +586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 265 */ +/* block 270 */ 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, @@ -4359,7 +4428,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -/* block 266 */ +/* block 271 */ 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, @@ -4369,7 +4438,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -/* block 267 */ +/* block 272 */ 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -4379,7 +4448,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -/* block 268 */ +/* block 273 */ 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, @@ -4389,7 +4458,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 586,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 269 */ +/* block 274 */ 586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, 586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -4399,17 +4468,27 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 270 */ +/* block 275 */ +586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, +586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, +586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, +586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, +586,586,586,586,586,586,586,586,586,586,586,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, + +/* block 276 */ 511, 24,511,511,511,511,511,511,511,511,511,511,511,511,511,511, 511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, - -/* block 271 */ +974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974, +974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974, +974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974, +974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974, +974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974, +974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974, + +/* block 277 */ 511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, 511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, 511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, @@ -4419,7 +4498,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, 511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -/* block 272 */ +/* block 278 */ 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, @@ -4429,7 +4508,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -/* block 273 */ +/* block 279 */ 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, @@ -4439,15 +4518,15 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 70400 bytes, block = 128 */ 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -/* block 274 */ -672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, -672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, -672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, -672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, -672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, -672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, -672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, -672,672,672,672,672,672,672,672,672,672,672,672,672,672,120,120, +/* block 280 */ +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,120,120, }; diff --git a/ext/pcre/pcre2lib/pcre2_ucp.h b/ext/pcre/pcre2lib/pcre2_ucp.h index 84b22fb06494c..9538062c710c7 100644 --- a/ext/pcre/pcre2lib/pcre2_ucp.h +++ b/ext/pcre/pcre2lib/pcre2_ucp.h @@ -286,7 +286,12 @@ enum { ucp_Elymaic, ucp_Nandinagari, ucp_Nyiakeng_Puachue_Hmong, - ucp_Wancho + ucp_Wancho, + /* New for Unicode 13.0.0 */ + ucp_Chorasmian, + ucp_Dives_Akuru, + ucp_Khitan_Small_Script, + ucp_Yezidi }; #endif /* PCRE2_UCP_H_IDEMPOTENT_GUARD */ diff --git a/ext/pcre/pcre2lib/pcre2_valid_utf.c b/ext/pcre/pcre2lib/pcre2_valid_utf.c index 96e8bff99307b..e47ea78f161aa 100644 --- a/ext/pcre/pcre2lib/pcre2_valid_utf.c +++ b/ext/pcre/pcre2lib/pcre2_valid_utf.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2017 University of Cambridge + New API code Copyright (c) 2016-2020 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -347,7 +347,7 @@ for (p = string; length > 0; p++) length--; if ((*p & 0xfc00) != 0xdc00) { - *erroroffset = p - string; + *erroroffset = p - string - 1; return PCRE2_ERROR_UTF16_ERR2; } } diff --git a/ext/pcre/pcre2lib/sljit/sljitConfig.h b/ext/pcre/pcre2lib/sljit/sljitConfig.h index d54b5e6f5440e..4560450c1c0dc 100644 --- a/ext/pcre/pcre2lib/sljit/sljitConfig.h +++ b/ext/pcre/pcre2lib/sljit/sljitConfig.h @@ -27,6 +27,10 @@ #ifndef _SLJIT_CONFIG_H_ #define _SLJIT_CONFIG_H_ +#ifdef __cplusplus +extern "C" { +#endif + /* --------------------------------------------------------------------- */ /* Custom defines */ /* --------------------------------------------------------------------- */ @@ -65,12 +69,19 @@ #define SLJIT_UTIL_GLOBAL_LOCK 1 #endif -/* Implements a stack like data structure (by using mmap / VirtualAlloc). */ +/* Implements a stack like data structure (by using mmap / VirtualAlloc */ +/* or a custom allocator). */ #ifndef SLJIT_UTIL_STACK /* Enabled by default */ #define SLJIT_UTIL_STACK 1 #endif +/* Uses user provided allocator to allocate the stack (see SLJIT_UTIL_STACK) */ +#ifndef SLJIT_UTIL_SIMPLE_STACK_ALLOCATION +/* Disabled by default */ +#define SLJIT_UTIL_SIMPLE_STACK_ALLOCATION 0 +#endif + /* Single threaded application. Does not require any locks. */ #ifndef SLJIT_SINGLE_THREADED /* Disabled by default. */ @@ -144,4 +155,8 @@ /* For further configurations, see the beginning of sljitConfigInternal.h */ +#ifdef __cplusplus +} /* extern "C" */ +#endif + #endif diff --git a/ext/pcre/pcre2lib/sljit/sljitConfigInternal.h b/ext/pcre/pcre2lib/sljit/sljitConfigInternal.h index acba9da4be4d8..049ed2fe91ce6 100644 --- a/ext/pcre/pcre2lib/sljit/sljitConfigInternal.h +++ b/ext/pcre/pcre2lib/sljit/sljitConfigInternal.h @@ -27,6 +27,20 @@ #ifndef _SLJIT_CONFIG_INTERNAL_H_ #define _SLJIT_CONFIG_INTERNAL_H_ +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_DEBUG && SLJIT_DEBUG && (!defined(SLJIT_ASSERT) || !defined(SLJIT_UNREACHABLE))) +#include +#endif + +#if (defined SLJIT_DEBUG && SLJIT_DEBUG \ + && (!defined(SLJIT_ASSERT) || !defined(SLJIT_UNREACHABLE) || !defined(SLJIT_HALT_PROCESS))) +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + /* SLJIT defines the following architecture dependent types and macros: @@ -191,6 +205,24 @@ #define SLJIT_CONFIG_SPARC 1 #endif +/***********************************************************/ +/* Intel Control-flow Enforcement Technology (CET) spport. */ +/***********************************************************/ + +#ifdef SLJIT_CONFIG_X86 +#if defined(__CET__) +#define SLJIT_CONFIG_X86_CET 1 +#endif +#if (defined SLJIT_CONFIG_X86_CET && SLJIT_CONFIG_X86_CET) +#if defined(__GNUC__) +#if !defined (__SHSTK__) +#error "-mshstk is needed to compile with -fcf-protection" +#endif +#include +#endif +#endif +#endif + /**********************************/ /* External function definitions. */ /**********************************/ @@ -265,6 +297,7 @@ /* Type of public API functions. */ /*********************************/ +#ifndef SLJIT_API_FUNC_ATTRIBUTE #if (defined SLJIT_CONFIG_STATIC && SLJIT_CONFIG_STATIC) /* Static ABI functions. For all-in-one programs. */ @@ -278,6 +311,7 @@ #else #define SLJIT_API_FUNC_ATTRIBUTE #endif /* (defined SLJIT_CONFIG_STATIC && SLJIT_CONFIG_STATIC) */ +#endif /* defined SLJIT_API_FUNC_ATTRIBUTE */ /****************************/ /* Instruction cache flush. */ @@ -287,7 +321,7 @@ #if __has_builtin(__builtin___clear_cache) #define SLJIT_CACHE_FLUSH(from, to) \ - __builtin___clear_cache((char*)from, (char*)to) + __builtin___clear_cache((char*)(from), (char*)(to)) #endif /* __has_builtin(__builtin___clear_cache) */ #endif /* (!defined SLJIT_CACHE_FLUSH && defined __has_builtin) */ @@ -318,7 +352,7 @@ #elif (defined(__GNUC__) && (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) #define SLJIT_CACHE_FLUSH(from, to) \ - __builtin___clear_cache((char*)from, (char*)to) + __builtin___clear_cache((char*)(from), (char*)(to)) #elif defined __ANDROID__ @@ -451,6 +485,25 @@ typedef double sljit_f64; #define SLJIT_BIG_ENDIAN 1 #endif +#ifndef SLJIT_MIPS_REV + +/* Auto detecting mips revision. */ +#if (defined __mips_isa_rev) && (__mips_isa_rev >= 6) +#define SLJIT_MIPS_REV 6 +#elif (defined __mips_isa_rev && __mips_isa_rev >= 1) \ + || (defined __clang__ && defined _MIPS_ARCH_OCTEON) \ + || (defined __clang__ && defined _MIPS_ARCH_P5600) +/* clang either forgets to define (clang-7) __mips_isa_rev at all + * or sets it to zero (clang-8,-9) for -march=octeon (MIPS64 R2+) + * and -march=p5600 (MIPS32 R5). + * It also sets the __mips macro to 64 or 32 for -mipsN when N <= 5 + * (should be set to N exactly) so we cannot rely on this too. + */ +#define SLJIT_MIPS_REV 1 +#endif + +#endif /* !SLJIT_MIPS_REV */ + #elif (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) #define SLJIT_BIG_ENDIAN 1 @@ -679,24 +732,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr); /* Debug and verbose related macros. */ /*************************************/ -#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) -#include -#endif - #if (defined SLJIT_DEBUG && SLJIT_DEBUG) #if !defined(SLJIT_ASSERT) || !defined(SLJIT_UNREACHABLE) /* SLJIT_HALT_PROCESS must halt the process. */ #ifndef SLJIT_HALT_PROCESS -#include - #define SLJIT_HALT_PROCESS() \ abort(); #endif /* !SLJIT_HALT_PROCESS */ -#include - #endif /* !SLJIT_ASSERT || !SLJIT_UNREACHABLE */ /* Feel free to redefine these two macros. */ @@ -742,4 +787,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr); #endif /* !SLJIT_COMPILE_ASSERT */ +#ifdef __cplusplus +} /* extern "C" */ +#endif + #endif diff --git a/ext/pcre/pcre2lib/sljit/sljitExecAllocator.c b/ext/pcre/pcre2lib/sljit/sljitExecAllocator.c index 92ddb94914382..76539072fef4a 100644 --- a/ext/pcre/pcre2lib/sljit/sljitExecAllocator.c +++ b/ext/pcre/pcre2lib/sljit/sljitExecAllocator.c @@ -106,10 +106,10 @@ static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size) static SLJIT_INLINE int get_map_jit_flag() { +/* On macOS systems, returns MAP_JIT if it is defined _and_ we're running on a version + of macOS where it's OK to have more than one JIT block. + On non-macOS systems, returns MAP_JIT if it is defined. */ #if TARGET_OS_OSX - /* On macOS systems, returns MAP_JIT if it is defined _and_ we're running on a version - of macOS where it's OK to have more than one JIT block. On non-macOS systems, returns - MAP_JIT if it is defined. */ static int map_jit_flag = -1; /* The following code is thread safe because multiple initialization @@ -124,12 +124,19 @@ static SLJIT_INLINE int get_map_jit_flag() /* Kernel version for 10.14.0 (Mojave) */ if (atoi(name.release) >= 18) { /* Only use MAP_JIT if a hardened runtime is used, because MAP_JIT is incompatible with fork(). */ - void *ptr = mmap(NULL, getpagesize(), PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + + /* mirroring page size detection from sljit_allocate_stack */ + long page_size = sysconf(_SC_PAGESIZE); + /* Should never happen */ + if (page_size < 0) + page_size = 4096; + + void *ptr = mmap(NULL, page_size, PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANON, -1, 0); if (ptr == MAP_FAILED) { map_jit_flag = MAP_JIT; } else { - munmap(ptr, getpagesize()); + munmap(ptr, page_size); } } } diff --git a/ext/pcre/pcre2lib/sljit/sljitLir.c b/ext/pcre/pcre2lib/sljit/sljitLir.c index 9bab0c3ec66ba..86772cc1a5f45 100644 --- a/ext/pcre/pcre2lib/sljit/sljitLir.c +++ b/ext/pcre/pcre2lib/sljit/sljitLir.c @@ -926,7 +926,8 @@ static void sljit_verbose_fparam(struct sljit_compiler *compiler, sljit_s32 p, s static const char* op0_names[] = { (char*)"breakpoint", (char*)"nop", (char*)"lmul.uw", (char*)"lmul.sw", - (char*)"divmod.u", (char*)"divmod.s", (char*)"div.u", (char*)"div.s" + (char*)"divmod.u", (char*)"divmod.s", (char*)"div.u", (char*)"div.s", + (char*)"endbr", (char*)"skip_frames_before_return" }; static const char* op1_names[] = { @@ -943,6 +944,12 @@ static const char* op2_names[] = { (char*)"shl", (char*)"lshr", (char*)"ashr", }; +static const char* op_src_names[] = { + (char*)"fast_return", (char*)"skip_frames_before_fast_return", + (char*)"prefetch_l1", (char*)"prefetch_l2", + (char*)"prefetch_l3", (char*)"prefetch_once", +}; + static const char* fop1_names[] = { (char*)"mov", (char*)"conv", (char*)"conv", (char*)"conv", (char*)"conv", (char*)"conv", (char*)"cmp", (char*)"neg", @@ -1152,37 +1159,21 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fast_enter(struct sljit_c CHECK_RETURN_OK; } -static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw) -{ -#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - FUNCTION_CHECK_SRC(src, srcw); - CHECK_ARGUMENT(src != SLJIT_IMM); - compiler->last_flags = 0; -#endif -#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) - if (SLJIT_UNLIKELY(!!compiler->verbose)) { - fprintf(compiler->verbose, " fast_return "); - sljit_verbose_param(compiler, src, srcw); - fprintf(compiler->verbose, "\n"); - } -#endif - CHECK_RETURN_OK; -} - static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) CHECK_ARGUMENT((op >= SLJIT_BREAKPOINT && op <= SLJIT_LMUL_SW) - || ((op & ~SLJIT_I32_OP) >= SLJIT_DIVMOD_UW && (op & ~SLJIT_I32_OP) <= SLJIT_DIV_SW)); - CHECK_ARGUMENT(op < SLJIT_LMUL_UW || compiler->scratches >= 2); - if (op >= SLJIT_LMUL_UW) + || ((op & ~SLJIT_I32_OP) >= SLJIT_DIVMOD_UW && (op & ~SLJIT_I32_OP) <= SLJIT_DIV_SW) + || (op >= SLJIT_ENDBR && op <= SLJIT_SKIP_FRAMES_BEFORE_RETURN)); + CHECK_ARGUMENT(GET_OPCODE(op) < SLJIT_LMUL_UW || GET_OPCODE(op) >= SLJIT_ENDBR || compiler->scratches >= 2); + if ((GET_OPCODE(op) >= SLJIT_LMUL_UW && GET_OPCODE(op) <= SLJIT_DIV_SW) || op == SLJIT_SKIP_FRAMES_BEFORE_RETURN) compiler->last_flags = 0; #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { fprintf(compiler->verbose, " %s", op0_names[GET_OPCODE(op) - SLJIT_OP0_BASE]); - if (GET_OPCODE(op) >= SLJIT_DIVMOD_UW) { + if (GET_OPCODE(op) >= SLJIT_DIVMOD_UW && GET_OPCODE(op) <= SLJIT_DIV_SW) { fprintf(compiler->verbose, (op & SLJIT_I32_OP) ? "32" : "w"); } fprintf(compiler->verbose, "\n"); @@ -1224,7 +1215,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op1(struct sljit_compiler break; } - FUNCTION_CHECK_DST(dst, dstw, 1); + FUNCTION_CHECK_DST(dst, dstw, HAS_FLAGS(op)); FUNCTION_CHECK_SRC(src, srcw); if (GET_OPCODE(op) >= SLJIT_NOT) { @@ -1304,7 +1295,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op2(struct sljit_compiler break; } - FUNCTION_CHECK_DST(dst, dstw, 1); + FUNCTION_CHECK_DST(dst, dstw, HAS_FLAGS(op)); FUNCTION_CHECK_SRC(src1, src1w); FUNCTION_CHECK_SRC(src2, src2w); compiler->last_flags = GET_FLAG_TYPE(op) | (op & (SLJIT_I32_OP | SLJIT_SET_Z)); @@ -1325,6 +1316,33 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op2(struct sljit_compiler CHECK_RETURN_OK; } +static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src, sljit_sw srcw) +{ +#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + CHECK_ARGUMENT(op >= SLJIT_FAST_RETURN && op <= SLJIT_PREFETCH_ONCE); + FUNCTION_CHECK_SRC(src, srcw); + + if (op == SLJIT_FAST_RETURN || op == SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN) + { + CHECK_ARGUMENT(src != SLJIT_IMM); + compiler->last_flags = 0; + } + else if (op >= SLJIT_PREFETCH_L1 && op <= SLJIT_PREFETCH_ONCE) + { + CHECK_ARGUMENT(src & SLJIT_MEM); + } +#endif +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) + if (SLJIT_UNLIKELY(!!compiler->verbose)) { + fprintf(compiler->verbose, " %s ", op_src_names[op - SLJIT_OP_SRC_BASE]); + sljit_verbose_param(compiler, src, srcw); + fprintf(compiler->verbose, "\n"); + } +#endif + CHECK_RETURN_OK; +} + static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_get_register_index(sljit_s32 reg) { SLJIT_UNUSED_ARG(reg); @@ -2016,7 +2034,7 @@ static SLJIT_INLINE sljit_s32 emit_mov_before_return(struct sljit_compiler *comp #if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) \ || (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) \ || (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) \ - || ((defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) && !(defined SLJIT_MIPS_R1 && SLJIT_MIPS_R1)) + || ((defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) && !(defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1)) static SLJIT_INLINE sljit_s32 sljit_emit_cmov_generic(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 dst_reg, @@ -2381,15 +2399,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * return SLJIT_ERR_UNSUPPORTED; } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw) -{ - SLJIT_UNUSED_ARG(compiler); - SLJIT_UNUSED_ARG(src); - SLJIT_UNUSED_ARG(srcw); - SLJIT_UNREACHABLE(); - return SLJIT_ERR_UNSUPPORTED; -} - SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op) { SLJIT_UNUSED_ARG(compiler); @@ -2429,6 +2438,17 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_ERR_UNSUPPORTED; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src, sljit_sw srcw) +{ + SLJIT_UNUSED_ARG(compiler); + SLJIT_UNUSED_ARG(op); + SLJIT_UNUSED_ARG(src); + SLJIT_UNUSED_ARG(srcw); + SLJIT_UNREACHABLE(); + return SLJIT_ERR_UNSUPPORTED; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 reg) { SLJIT_UNREACHABLE(); @@ -2549,6 +2569,13 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_target(struct sljit_jump *jump, sljit_uw SLJIT_UNREACHABLE(); } +SLJIT_API_FUNC_ATTRIBUTE void sljit_set_put_label(struct sljit_put_label *put_label, struct sljit_label *label) +{ + SLJIT_UNUSED_ARG(put_label); + SLJIT_UNUSED_ARG(label); + SLJIT_UNREACHABLE(); +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 src, sljit_sw srcw) { SLJIT_UNUSED_ARG(compiler); diff --git a/ext/pcre/pcre2lib/sljit/sljitLir.h b/ext/pcre/pcre2lib/sljit/sljitLir.h index 836d25cf71a53..72595bb271115 100644 --- a/ext/pcre/pcre2lib/sljit/sljitLir.h +++ b/ext/pcre/pcre2lib/sljit/sljitLir.h @@ -80,6 +80,10 @@ of sljitConfigInternal.h */ #include "sljitConfigInternal.h" +#ifdef __cplusplus +extern "C" { +#endif + /* --------------------------------------------------------------------- */ /* Error codes */ /* --------------------------------------------------------------------- */ @@ -154,10 +158,10 @@ of sljitConfigInternal.h */ */ /* When SLJIT_UNUSED is specified as the destination of sljit_emit_op1 - or sljit_emit_op2 operations the result is discarded. If no status - flags are set, no instructions are emitted for these operations. Data - prefetch is a special exception, see SLJIT_MOV operation. Other SLJIT - operations do not support SLJIT_UNUSED as a destination operand. */ + or sljit_emit_op2 operations the result is discarded. Some status + flags must be set when the destination is SLJIT_UNUSED, because the + operation would have no effect otherwise. Other SLJIT operations do + not support SLJIT_UNUSED as a destination operand. */ #define SLJIT_UNUSED 0 /* Scratch registers. */ @@ -567,10 +571,14 @@ static SLJIT_INLINE sljit_uw sljit_get_generated_code_size(struct sljit_compiler #define SLJIT_HAS_FPU 0 /* [Limitation] Some registers are virtual registers. */ #define SLJIT_HAS_VIRTUAL_REGISTERS 1 +/* [Emulated] Has zero register (setting a memory location to zero is efficient). */ +#define SLJIT_HAS_ZERO_REGISTER 2 /* [Emulated] Count leading zero is supported. */ -#define SLJIT_HAS_CLZ 2 +#define SLJIT_HAS_CLZ 3 +/* [Emulated] Conditional move is supported. */ +#define SLJIT_HAS_CMOV 4 /* [Emulated] Conditional move is supported. */ -#define SLJIT_HAS_CMOV 3 +#define SLJIT_HAS_PREFETCH 5 #if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) /* [Not emulated] SSE2 support is available on x86. */ @@ -658,10 +666,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *comp sljit_s32 src, sljit_sw srcw); /* Generating entry and exit points for fast call functions (see SLJIT_FAST_CALL). - Both sljit_emit_fast_enter and sljit_emit_fast_return functions preserve the + Both sljit_emit_fast_enter and SLJIT_FAST_RETURN operations preserve the values of all registers and stack frame. The return address is stored in the dst argument of sljit_emit_fast_enter, and this return address can be passed - to sljit_emit_fast_return to continue the execution after the fast call. + to SLJIT_FAST_RETURN to continue the execution after the fast call. Fast calls are cheap operations (usually only a single call instruction is emitted) but they do not preserve any registers. However the callee function @@ -669,16 +677,15 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *comp efficiently exploited by various optimizations. Registers can be saved manually by the callee function if needed. - Although returning to different address by sljit_emit_fast_return is possible, + Although returning to different address by SLJIT_FAST_RETURN is possible, this address usually cannot be predicted by the return address predictor of - modern CPUs which may reduce performance. Furthermore using sljit_emit_ijump - to return is also inefficient since return address prediction is usually - triggered by a specific form of ijump. + modern CPUs which may reduce performance. Furthermore certain security + enhancement technologies such as Intel Control-flow Enforcement Technology + (CET) may disallow returning to a different address. Flags: - (does not modify flags). */ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw); -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw); /* Source and destination operands for arithmetical instructions @@ -887,6 +894,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_return(struct sljit_compiler the behaviour is undefined. */ #define SLJIT_DIV_SW (SLJIT_OP0_BASE + 7) #define SLJIT_DIV_S32 (SLJIT_DIV_SW | SLJIT_I32_OP) +/* Flags: - (does not modify flags) + ENDBR32 instruction for x86-32 and ENDBR64 instruction for x86-64 + when Intel Control-flow Enforcement Technology (CET) is enabled. + No instruction for other architectures. */ +#define SLJIT_ENDBR (SLJIT_OP0_BASE + 8) +/* Flags: - (may destroy flags) + Skip stack frames before return. */ +#define SLJIT_SKIP_FRAMES_BEFORE_RETURN (SLJIT_OP0_BASE + 9) SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op); @@ -904,15 +919,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile U32 - unsigned int (32 bit) data transfer S32 - signed int (32 bit) data transfer P - pointer (sljit_p) data transfer - - If the destination of a MOV instruction is SLJIT_UNUSED and the source - operand is a memory address the compiler emits a prefetch instruction - if this instruction is supported by the current CPU. Higher data sizes - bring the data closer to the core: a MOV with word size loads the data - into a higher level cache than a byte size. Otherwise the type does not - affect the prefetch instruction. Furthermore a prefetch instruction - never fails, so it can be used to prefetch a data from an address and - check whether that address is NULL afterwards. */ /* Flags: - (does not modify flags) */ @@ -1017,8 +1023,46 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w); +/* Starting index of opcodes for sljit_emit_op2. */ +#define SLJIT_OP_SRC_BASE 128 + +/* Note: src cannot be an immedate value + Flags: - (does not modify flags) */ +#define SLJIT_FAST_RETURN (SLJIT_OP_SRC_BASE + 0) +/* Skip stack frames before fast return. + Note: src cannot be an immedate value + Flags: may destroy flags. */ +#define SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN (SLJIT_OP_SRC_BASE + 1) +/* Prefetch value into the level 1 data cache + Note: if the target CPU does not support data prefetch, + no instructions are emitted. + Note: this instruction never fails, even if the memory address is invalid. + Flags: - (does not modify flags) */ +#define SLJIT_PREFETCH_L1 (SLJIT_OP_SRC_BASE + 2) +/* Prefetch value into the level 2 data cache + Note: same as SLJIT_PREFETCH_L1 if the target CPU + does not support this instruction form. + Note: this instruction never fails, even if the memory address is invalid. + Flags: - (does not modify flags) */ +#define SLJIT_PREFETCH_L2 (SLJIT_OP_SRC_BASE + 3) +/* Prefetch value into the level 3 data cache + Note: same as SLJIT_PREFETCH_L2 if the target CPU + does not support this instruction form. + Note: this instruction never fails, even if the memory address is invalid. + Flags: - (does not modify flags) */ +#define SLJIT_PREFETCH_L3 (SLJIT_OP_SRC_BASE + 4) +/* Prefetch a value which is only used once (and can be discarded afterwards) + Note: same as SLJIT_PREFETCH_L1 if the target CPU + does not support this instruction form. + Note: this instruction never fails, even if the memory address is invalid. + Flags: - (does not modify flags) */ +#define SLJIT_PREFETCH_ONCE (SLJIT_OP_SRC_BASE + 5) + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src, sljit_sw srcw); + /* Starting index of opcodes for sljit_emit_fop1. */ -#define SLJIT_FOP1_BASE 128 +#define SLJIT_FOP1_BASE 160 /* Flags: - (does not modify flags) */ #define SLJIT_MOV_F64 (SLJIT_FOP1_BASE + 0) @@ -1057,7 +1101,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil sljit_s32 src, sljit_sw srcw); /* Starting index of opcodes for sljit_emit_fop2. */ -#define SLJIT_FOP2_BASE 160 +#define SLJIT_FOP2_BASE 192 /* Flags: - (does not modify flags) */ #define SLJIT_ADD_F64 (SLJIT_FOP2_BASE + 0) @@ -1161,7 +1205,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi /* Unconditional jump types. */ #define SLJIT_JUMP 24 - /* Fast calling method. See sljit_emit_fast_enter / sljit_emit_fast_return. */ + /* Fast calling method. See sljit_emit_fast_enter / SLJIT_FAST_RETURN. */ #define SLJIT_FAST_CALL 25 /* Called function must be declared with the SLJIT_FUNC attribute. */ #define SLJIT_CALL 26 @@ -1490,4 +1534,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *c SLJIT_API_FUNC_ATTRIBUTE void sljit_set_current_flags(struct sljit_compiler *compiler, sljit_s32 current_flags); +#ifdef __cplusplus +} /* extern "C" */ +#endif + #endif /* _SLJIT_LIR_H_ */ diff --git a/ext/pcre/pcre2lib/sljit/sljitNativeARM_32.c b/ext/pcre/pcre2lib/sljit/sljitNativeARM_32.c index 71f7bcdadbef8..5d180c2e2f724 100644 --- a/ext/pcre/pcre2lib/sljit/sljitNativeARM_32.c +++ b/ext/pcre/pcre2lib/sljit/sljitNativeARM_32.c @@ -666,6 +666,8 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); label->size = code_ptr - code; label = label->next; + + next_addr = compute_next_addr(label, jump, const_, put_label); } } } @@ -870,6 +872,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) case SLJIT_HAS_CLZ: case SLJIT_HAS_CMOV: +#if (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7) + case SLJIT_HAS_PREFETCH: +#endif return 1; default: @@ -1676,6 +1681,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile | (saved_reg_list[0] << 12) /* ldr rX, [sp], #8/16 */); } return SLJIT_SUCCESS; + case SLJIT_ENDBR: + case SLJIT_SKIP_FRAMES_BEFORE_RETURN: + return SLJIT_SUCCESS; } return SLJIT_SUCCESS; @@ -1690,14 +1698,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src, srcw); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) { -#if (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7) - if (op <= SLJIT_MOV_P && (src & SLJIT_MEM)) - return emit_op_mem(compiler, PRELOAD | LOAD_DATA, TMP_PC, src, srcw, TMP_REG1); -#endif - return SLJIT_SUCCESS; - } - switch (GET_OPCODE(op)) { case SLJIT_MOV: case SLJIT_MOV_U32: @@ -1779,6 +1779,40 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src, sljit_sw srcw) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op_src(compiler, op, src, srcw)); + ADJUST_LOCAL_OFFSET(src, srcw); + + switch (op) { + case SLJIT_FAST_RETURN: + SLJIT_ASSERT(reg_map[TMP_REG2] == 14); + + if (FAST_IS_REG(src)) + FAIL_IF(push_inst(compiler, MOV | RD(TMP_REG2) | RM(src))); + else + FAIL_IF(emit_op_mem(compiler, WORD_SIZE | LOAD_DATA, TMP_REG2, src, srcw, TMP_REG1)); + + return push_inst(compiler, BX | RM(TMP_REG2)); + case SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN: + return SLJIT_SUCCESS; + case SLJIT_PREFETCH_L1: + case SLJIT_PREFETCH_L2: + case SLJIT_PREFETCH_L3: + case SLJIT_PREFETCH_ONCE: +#if (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7) + SLJIT_ASSERT(src & SLJIT_MEM); + return emit_op_mem(compiler, PRELOAD | LOAD_DATA, TMP_PC, src, srcw, TMP_REG1); +#else /* !SLJIT_CONFIG_ARM_V7 */ + return SLJIT_SUCCESS; +#endif /* SLJIT_CONFIG_ARM_V7 */ + } + + return SLJIT_SUCCESS; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 reg) { CHECK_REG_INDEX(check_sljit_get_register_index(reg)); @@ -2041,22 +2075,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * return emit_op_mem(compiler, WORD_SIZE, TMP_REG2, dst, dstw, TMP_REG1); } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw) -{ - CHECK_ERROR(); - CHECK(check_sljit_emit_fast_return(compiler, src, srcw)); - ADJUST_LOCAL_OFFSET(src, srcw); - - SLJIT_ASSERT(reg_map[TMP_REG2] == 14); - - if (FAST_IS_REG(src)) - FAIL_IF(push_inst(compiler, MOV | RD(TMP_REG2) | RM(src))); - else - FAIL_IF(emit_op_mem(compiler, WORD_SIZE | LOAD_DATA, TMP_REG2, src, srcw, TMP_REG1)); - - return push_inst(compiler, BX | RM(TMP_REG2)); -} - /* --------------------------------------------------------------------- */ /* Conditional instructions */ /* --------------------------------------------------------------------- */ @@ -2615,11 +2633,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile } else { if (is_type1_transfer) { - if (memw > 4095 && memw < -4095) + if (memw > 4095 || memw < -4095) return SLJIT_ERR_UNSUPPORTED; } else { - if (memw > 255 && memw < -255) + if (memw > 255 || memw < -255) return SLJIT_ERR_UNSUPPORTED; } } diff --git a/ext/pcre/pcre2lib/sljit/sljitNativeARM_64.c b/ext/pcre/pcre2lib/sljit/sljitNativeARM_64.c index e15b3451e8022..eaca095a2b50d 100644 --- a/ext/pcre/pcre2lib/sljit/sljitNativeARM_64.c +++ b/ext/pcre/pcre2lib/sljit/sljitNativeARM_64.c @@ -396,6 +396,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) case SLJIT_HAS_CLZ: case SLJIT_HAS_CMOV: + case SLJIT_HAS_PREFETCH: return 1; default: @@ -1154,6 +1155,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile case SLJIT_DIV_UW: case SLJIT_DIV_SW: return push_inst(compiler, ((op == SLJIT_DIV_UW ? UDIV : SDIV) ^ inv_bits) | RD(SLJIT_R0) | RN(SLJIT_R0) | RM(SLJIT_R1)); + case SLJIT_ENDBR: + case SLJIT_SKIP_FRAMES_BEFORE_RETURN: + return SLJIT_SUCCESS; } return SLJIT_SUCCESS; @@ -1171,23 +1175,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src, srcw); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) { - if (op <= SLJIT_MOV_P && (src & SLJIT_MEM)) { - SLJIT_ASSERT(reg_map[1] == 0 && reg_map[3] == 2 && reg_map[5] == 4); - - if (op >= SLJIT_MOV_U8 && op <= SLJIT_MOV_S8) - dst = 5; - else if (op >= SLJIT_MOV_U16 && op <= SLJIT_MOV_S16) - dst = 3; - else - dst = 1; - - /* Signed word sized load is the prefetch instruction. */ - return emit_op_mem(compiler, WORD_SIZE | SIGNED, dst, src, srcw, TMP_REG1); - } - return SLJIT_SUCCESS; - } - dst_r = SLOW_IS_REG(dst) ? dst : TMP_REG1; op = GET_OPCODE(op); @@ -1327,6 +1314,46 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src, sljit_sw srcw) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op_src(compiler, op, src, srcw)); + ADJUST_LOCAL_OFFSET(src, srcw); + + switch (op) { + case SLJIT_FAST_RETURN: + if (FAST_IS_REG(src)) + FAIL_IF(push_inst(compiler, ORR | RD(TMP_LR) | RN(TMP_ZERO) | RM(src))); + else + FAIL_IF(emit_op_mem(compiler, WORD_SIZE, TMP_LR, src, srcw, TMP_REG1)); + + return push_inst(compiler, RET | RN(TMP_LR)); + case SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN: + return SLJIT_SUCCESS; + case SLJIT_PREFETCH_L1: + case SLJIT_PREFETCH_L2: + case SLJIT_PREFETCH_L3: + case SLJIT_PREFETCH_ONCE: + SLJIT_ASSERT(reg_map[1] == 0 && reg_map[3] == 2 && reg_map[5] == 4); + + /* The reg_map[op] should provide the appropriate constant. */ + if (op == SLJIT_PREFETCH_L1) + op = 1; + else if (op == SLJIT_PREFETCH_L2) + op = 3; + else if (op == SLJIT_PREFETCH_L3) + op = 5; + else + op = 2; + + /* Signed word sized load is the prefetch instruction. */ + return emit_op_mem(compiler, WORD_SIZE | SIGNED, op, src, srcw, TMP_REG1); + } + + return SLJIT_SUCCESS; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 reg) { CHECK_REG_INDEX(check_sljit_get_register_index(reg)); @@ -1578,20 +1605,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * return emit_op_mem(compiler, WORD_SIZE | STORE, TMP_LR, dst, dstw, TMP_REG1); } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw) -{ - CHECK_ERROR(); - CHECK(check_sljit_emit_fast_return(compiler, src, srcw)); - ADJUST_LOCAL_OFFSET(src, srcw); - - if (FAST_IS_REG(src)) - FAIL_IF(push_inst(compiler, ORR | RD(TMP_LR) | RN(TMP_ZERO) | RM(src))); - else - FAIL_IF(emit_op_mem(compiler, WORD_SIZE, TMP_LR, src, srcw, TMP_REG1)); - - return push_inst(compiler, RET | RN(TMP_LR)); -} - /* --------------------------------------------------------------------- */ /* Conditional instructions */ /* --------------------------------------------------------------------- */ @@ -1865,7 +1878,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile CHECK_ERROR(); CHECK(check_sljit_emit_mem(compiler, type, reg, mem, memw)); - if ((mem & OFFS_REG_MASK) || (memw > 255 && memw < -256)) + if ((mem & OFFS_REG_MASK) || (memw > 255 || memw < -256)) return SLJIT_ERR_UNSUPPORTED; if (type & SLJIT_MEM_SUPP) @@ -1915,7 +1928,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem(struct sljit_compiler *compil CHECK_ERROR(); CHECK(check_sljit_emit_fmem(compiler, type, freg, mem, memw)); - if ((mem & OFFS_REG_MASK) || (memw > 255 && memw < -256)) + if ((mem & OFFS_REG_MASK) || (memw > 255 || memw < -256)) return SLJIT_ERR_UNSUPPORTED; if (type & SLJIT_MEM_SUPP) diff --git a/ext/pcre/pcre2lib/sljit/sljitNativeARM_T2_32.c b/ext/pcre/pcre2lib/sljit/sljitNativeARM_T2_32.c index cdfe4a4d24a93..a81e008a8b4cb 100644 --- a/ext/pcre/pcre2lib/sljit/sljitNativeARM_T2_32.c +++ b/ext/pcre/pcre2lib/sljit/sljitNativeARM_T2_32.c @@ -480,6 +480,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) case SLJIT_HAS_CLZ: case SLJIT_HAS_CMOV: + case SLJIT_HAS_PREFETCH: return 1; default: @@ -1328,6 +1329,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile } return SLJIT_SUCCESS; #endif /* __ARM_FEATURE_IDIV || __ARM_ARCH_EXT_IDIV__ */ + case SLJIT_ENDBR: + case SLJIT_SKIP_FRAMES_BEFORE_RETURN: + return SLJIT_SUCCESS; } return SLJIT_SUCCESS; @@ -1345,13 +1349,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src, srcw); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) { - /* Since TMP_PC has index 15, IS_2_LO_REGS and IS_3_LO_REGS checks always fail. */ - if (op <= SLJIT_MOV_P && (src & SLJIT_MEM)) - return emit_op_mem(compiler, PRELOAD, TMP_PC, src, srcw, TMP_REG1); - return SLJIT_SUCCESS; - } - dst_r = SLOW_IS_REG(dst) ? dst : TMP_REG1; op = GET_OPCODE(op); @@ -1475,6 +1472,35 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return emit_op_mem(compiler, WORD_SIZE | STORE, dst_reg, dst, dstw, TMP_REG2); } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src, sljit_sw srcw) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op_src(compiler, op, src, srcw)); + ADJUST_LOCAL_OFFSET(src, srcw); + + switch (op) { + case SLJIT_FAST_RETURN: + SLJIT_ASSERT(reg_map[TMP_REG2] == 14); + + if (FAST_IS_REG(src)) + FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(TMP_REG2, src))); + else + FAIL_IF(emit_op_mem(compiler, WORD_SIZE, TMP_REG2, src, srcw, TMP_REG2)); + + return push_inst16(compiler, BX | RN3(TMP_REG2)); + case SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN: + return SLJIT_SUCCESS; + case SLJIT_PREFETCH_L1: + case SLJIT_PREFETCH_L2: + case SLJIT_PREFETCH_L3: + case SLJIT_PREFETCH_ONCE: + return emit_op_mem(compiler, PRELOAD, TMP_PC, src, srcw, TMP_REG1); + } + + return SLJIT_SUCCESS; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 reg) { CHECK_REG_INDEX(check_sljit_get_register_index(reg)); @@ -1728,22 +1754,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * return emit_op_mem(compiler, WORD_SIZE | STORE, TMP_REG2, dst, dstw, TMP_REG1); } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw) -{ - CHECK_ERROR(); - CHECK(check_sljit_emit_fast_return(compiler, src, srcw)); - ADJUST_LOCAL_OFFSET(src, srcw); - - SLJIT_ASSERT(reg_map[TMP_REG2] == 14); - - if (FAST_IS_REG(src)) - FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(TMP_REG2, src))); - else - FAIL_IF(emit_op_mem(compiler, WORD_SIZE, TMP_REG2, src, srcw, TMP_REG2)); - - return push_inst16(compiler, BX | RN3(TMP_REG2)); -} - /* --------------------------------------------------------------------- */ /* Conditional instructions */ /* --------------------------------------------------------------------- */ @@ -2264,7 +2274,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile CHECK_ERROR(); CHECK(check_sljit_emit_mem(compiler, type, reg, mem, memw)); - if ((mem & OFFS_REG_MASK) || (memw > 255 && memw < -255)) + if ((mem & OFFS_REG_MASK) || (memw > 255 || memw < -255)) return SLJIT_ERR_UNSUPPORTED; if (type & SLJIT_MEM_SUPP) diff --git a/ext/pcre/pcre2lib/sljit/sljitNativeMIPS_32.c b/ext/pcre/pcre2lib/sljit/sljitNativeMIPS_32.c index 16dec052fe75f..777627bb7f04a 100644 --- a/ext/pcre/pcre2lib/sljit/sljitNativeMIPS_32.c +++ b/ext/pcre/pcre2lib/sljit/sljitNativeMIPS_32.c @@ -86,12 +86,12 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) { if (op == SLJIT_MOV_S8) { -#if (defined SLJIT_MIPS_R1 && SLJIT_MIPS_R1) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) return push_inst(compiler, SEB | T(src2) | D(dst), DR(dst)); -#else +#else /* SLJIT_MIPS_REV < 1 */ FAIL_IF(push_inst(compiler, SLL | T(src2) | D(dst) | SH_IMM(24), DR(dst))); return push_inst(compiler, SRA | T(dst) | D(dst) | SH_IMM(24), DR(dst)); -#endif +#endif /* SLJIT_MIPS_REV >= 1 */ } return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xff), DR(dst)); } @@ -105,12 +105,12 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) { if (op == SLJIT_MOV_S16) { -#if (defined SLJIT_MIPS_R1 && SLJIT_MIPS_R1) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) return push_inst(compiler, SEH | T(src2) | D(dst), DR(dst)); -#else +#else /* SLJIT_MIPS_REV < 1 */ FAIL_IF(push_inst(compiler, SLL | T(src2) | D(dst) | SH_IMM(16), DR(dst))); return push_inst(compiler, SRA | T(dst) | D(dst) | SH_IMM(16), DR(dst)); -#endif +#endif /* SLJIT_MIPS_REV >= 1 */ } return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xffff), DR(dst)); } @@ -129,12 +129,12 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl case SLJIT_CLZ: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); -#if (defined SLJIT_MIPS_R1 && SLJIT_MIPS_R1) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) if (op & SLJIT_SET_Z) FAIL_IF(push_inst(compiler, CLZ | S(src2) | TA(EQUAL_FLAG) | DA(EQUAL_FLAG), EQUAL_FLAG)); if (!(flags & UNUSED_DEST)) FAIL_IF(push_inst(compiler, CLZ | S(src2) | T(dst) | D(dst), DR(dst))); -#else +#else /* SLJIT_MIPS_REV < 1 */ if (SLJIT_UNLIKELY(flags & UNUSED_DEST)) { FAIL_IF(push_inst(compiler, SRL | T(src2) | DA(EQUAL_FLAG) | SH_IMM(31), EQUAL_FLAG)); return push_inst(compiler, XORI | SA(EQUAL_FLAG) | TA(EQUAL_FLAG) | IMM(1), EQUAL_FLAG); @@ -149,7 +149,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl FAIL_IF(push_inst(compiler, ADDIU | S(dst) | T(dst) | IMM(1), DR(dst))); FAIL_IF(push_inst(compiler, BGEZ | S(TMP_REG1) | IMM(-2), UNMOVABLE_INS)); FAIL_IF(push_inst(compiler, SLL | T(TMP_REG1) | D(TMP_REG1) | SH_IMM(1), UNMOVABLE_INS)); -#endif +#endif /* SLJIT_MIPS_REV >= 1 */ return SLJIT_SUCCESS; case SLJIT_ADD: @@ -368,21 +368,22 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl SLJIT_ASSERT(!(flags & SRC2_IMM)); if (GET_FLAG_TYPE(op) != SLJIT_MUL_OVERFLOW) { -#if (defined SLJIT_MIPS_R1 && SLJIT_MIPS_R1) || (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) return push_inst(compiler, MUL | S(src1) | T(src2) | D(dst), DR(dst)); -#else /* !SLJIT_MIPS_R1 && !SLJIT_MIPS_R6 */ +#else /* SLJIT_MIPS_REV < 1 */ FAIL_IF(push_inst(compiler, MULT | S(src1) | T(src2), MOVABLE_INS)); return push_inst(compiler, MFLO | D(dst), DR(dst)); -#endif /* SLJIT_MIPS_R1 || SLJIT_MIPS_R6 */ +#endif /* SLJIT_MIPS_REV >= 1 */ } -#if (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) + +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) FAIL_IF(push_inst(compiler, MUL | S(src1) | T(src2) | D(dst), DR(dst))); FAIL_IF(push_inst(compiler, MUH | S(src1) | T(src2) | DA(EQUAL_FLAG), EQUAL_FLAG)); -#else /* !SLJIT_MIPS_R6 */ +#else /* SLJIT_MIPS_REV < 6 */ FAIL_IF(push_inst(compiler, MULT | S(src1) | T(src2), MOVABLE_INS)); FAIL_IF(push_inst(compiler, MFHI | DA(EQUAL_FLAG), EQUAL_FLAG)); FAIL_IF(push_inst(compiler, MFLO | D(dst), DR(dst))); -#endif /* SLJIT_MIPS_R6 */ +#endif /* SLJIT_MIPS_REV >= 6 */ FAIL_IF(push_inst(compiler, SRA | T(dst) | DA(OTHER_FLAG) | SH_IMM(31), OTHER_FLAG)); return push_inst(compiler, SUBU | SA(EQUAL_FLAG) | TA(OTHER_FLAG) | DA(OTHER_FLAG), OTHER_FLAG); diff --git a/ext/pcre/pcre2lib/sljit/sljitNativeMIPS_64.c b/ext/pcre/pcre2lib/sljit/sljitNativeMIPS_64.c index a6a2bcc0c9aa2..479244d707bac 100644 --- a/ext/pcre/pcre2lib/sljit/sljitNativeMIPS_64.c +++ b/ext/pcre/pcre2lib/sljit/sljitNativeMIPS_64.c @@ -220,12 +220,12 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl case SLJIT_CLZ: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); -#if (defined SLJIT_MIPS_R1 && SLJIT_MIPS_R1) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) if (op & SLJIT_SET_Z) FAIL_IF(push_inst(compiler, SELECT_OP(DCLZ, CLZ) | S(src2) | TA(EQUAL_FLAG) | DA(EQUAL_FLAG), EQUAL_FLAG)); if (!(flags & UNUSED_DEST)) FAIL_IF(push_inst(compiler, SELECT_OP(DCLZ, CLZ) | S(src2) | T(dst) | D(dst), DR(dst))); -#else +#else /* SLJIT_MIPS_REV < 1 */ if (SLJIT_UNLIKELY(flags & UNUSED_DEST)) { FAIL_IF(push_inst(compiler, SELECT_OP(DSRL32, SRL) | T(src2) | DA(EQUAL_FLAG) | SH_IMM(31), EQUAL_FLAG)); return push_inst(compiler, XORI | SA(EQUAL_FLAG) | TA(EQUAL_FLAG) | IMM(1), EQUAL_FLAG); @@ -240,7 +240,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl FAIL_IF(push_inst(compiler, SELECT_OP(DADDIU, ADDIU) | S(dst) | T(dst) | IMM(1), DR(dst))); FAIL_IF(push_inst(compiler, BGEZ | S(TMP_REG1) | IMM(-2), UNMOVABLE_INS)); FAIL_IF(push_inst(compiler, SELECT_OP(DSLL, SLL) | T(TMP_REG1) | D(TMP_REG1) | SH_IMM(1), UNMOVABLE_INS)); -#endif +#endif /* SLJIT_MIPS_REV >= 1 */ return SLJIT_SUCCESS; case SLJIT_ADD: @@ -459,26 +459,27 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl SLJIT_ASSERT(!(flags & SRC2_IMM)); if (GET_FLAG_TYPE(op) != SLJIT_MUL_OVERFLOW) { -#if (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) return push_inst(compiler, SELECT_OP(DMUL, MUL) | S(src1) | T(src2) | D(dst), DR(dst)); -#elif (defined SLJIT_MIPS_R1 && SLJIT_MIPS_R1) +#elif (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) if (op & SLJIT_I32_OP) return push_inst(compiler, MUL | S(src1) | T(src2) | D(dst), DR(dst)); FAIL_IF(push_inst(compiler, DMULT | S(src1) | T(src2), MOVABLE_INS)); return push_inst(compiler, MFLO | D(dst), DR(dst)); -#else /* !SLJIT_MIPS_R6 && !SLJIT_MIPS_R1 */ +#else /* SLJIT_MIPS_REV < 1 */ FAIL_IF(push_inst(compiler, SELECT_OP(DMULT, MULT) | S(src1) | T(src2), MOVABLE_INS)); return push_inst(compiler, MFLO | D(dst), DR(dst)); -#endif /* SLJIT_MIPS_R6 */ +#endif /* SLJIT_MIPS_REV >= 6 */ } -#if (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) + +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) FAIL_IF(push_inst(compiler, SELECT_OP(DMUL, MUL) | S(src1) | T(src2) | D(dst), DR(dst))); FAIL_IF(push_inst(compiler, SELECT_OP(DMUH, MUH) | S(src1) | T(src2) | DA(EQUAL_FLAG), EQUAL_FLAG)); -#else /* !SLJIT_MIPS_R6 */ +#else /* SLJIT_MIPS_REV < 6 */ FAIL_IF(push_inst(compiler, SELECT_OP(DMULT, MULT) | S(src1) | T(src2), MOVABLE_INS)); FAIL_IF(push_inst(compiler, MFHI | DA(EQUAL_FLAG), EQUAL_FLAG)); FAIL_IF(push_inst(compiler, MFLO | D(dst), DR(dst))); -#endif /* SLJIT_MIPS_R6 */ +#endif /* SLJIT_MIPS_REV >= 6 */ FAIL_IF(push_inst(compiler, SELECT_OP(DSRA32, SRA) | T(dst) | DA(OTHER_FLAG) | SH_IMM(31), OTHER_FLAG)); return push_inst(compiler, SELECT_OP(DSUBU, SUBU) | SA(EQUAL_FLAG) | TA(OTHER_FLAG) | DA(OTHER_FLAG), OTHER_FLAG); diff --git a/ext/pcre/pcre2lib/sljit/sljitNativeMIPS_common.c b/ext/pcre/pcre2lib/sljit/sljitNativeMIPS_common.c index 7d1d08749693c..88df904e24a77 100644 --- a/ext/pcre/pcre2lib/sljit/sljitNativeMIPS_common.c +++ b/ext/pcre/pcre2lib/sljit/sljitNativeMIPS_common.c @@ -25,15 +25,16 @@ */ /* Latest MIPS architecture. */ -/* Automatically detect SLJIT_MIPS_R1 */ -#if (defined __mips_isa_rev) && (__mips_isa_rev >= 6) -#define SLJIT_MIPS_R6 1 +#ifndef __mips_hard_float +/* Disable automatic detection, covers both -msoft-float and -mno-float */ +#undef SLJIT_IS_FPU_AVAILABLE +#define SLJIT_IS_FPU_AVAILABLE 0 #endif SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void) { -#if (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) return "MIPS32-R6" SLJIT_CPUINFO; @@ -41,7 +42,7 @@ SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void) return "MIPS64-R6" SLJIT_CPUINFO; #endif /* SLJIT_CONFIG_MIPS_32 */ -#elif (defined SLJIT_MIPS_R1 && SLJIT_MIPS_R1) +#elif (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) return "MIPS32-R1" SLJIT_CPUINFO; @@ -49,9 +50,9 @@ SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void) return "MIPS64-R1" SLJIT_CPUINFO; #endif /* SLJIT_CONFIG_MIPS_32 */ -#else /* SLJIT_MIPS_R1 */ +#else /* SLJIT_MIPS_REV < 1 */ return "MIPS III" SLJIT_CPUINFO; -#endif /* SLJIT_MIPS_R6 */ +#endif /* SLJIT_MIPS_REV >= 6 */ } /* Length of an instruction word @@ -117,11 +118,11 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 4] = { #define FR(dr) (freg_map[dr]) #define HI(opcode) ((opcode) << 26) #define LO(opcode) (opcode) -#if (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) /* CMP.cond.fmt */ /* S = (20 << 21) D = (21 << 21) */ #define CMP_FMT_S (20 << 21) -#endif /* SLJIT_MIPS_R6 */ +#endif /* SLJIT_MIPS_REV >= 6 */ /* S = (16 << 21) D = (17 << 21) */ #define FMT_S (16 << 21) #define FMT_D (17 << 21) @@ -134,13 +135,13 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 4] = { #define ANDI (HI(12)) #define B (HI(4)) #define BAL (HI(1) | (17 << 16)) -#if (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) #define BC1EQZ (HI(17) | (9 << 21) | FT(TMP_FREG3)) #define BC1NEZ (HI(17) | (13 << 21) | FT(TMP_FREG3)) -#else /* !SLJIT_MIPS_R6 */ +#else /* SLJIT_MIPS_REV < 6 */ #define BC1F (HI(17) | (8 << 21)) #define BC1T (HI(17) | (8 << 21) | (1 << 16)) -#endif /* SLJIT_MIPS_R6 */ +#endif /* SLJIT_MIPS_REV >= 6 */ #define BEQ (HI(4)) #define BGEZ (HI(1) | (1 << 16)) #define BGTZ (HI(7)) @@ -149,23 +150,23 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 4] = { #define BNE (HI(5)) #define BREAK (HI(0) | LO(13)) #define CFC1 (HI(17) | (2 << 21)) -#if (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) #define C_UEQ_S (HI(17) | CMP_FMT_S | LO(3)) #define C_ULE_S (HI(17) | CMP_FMT_S | LO(7)) #define C_ULT_S (HI(17) | CMP_FMT_S | LO(5)) #define C_UN_S (HI(17) | CMP_FMT_S | LO(1)) #define C_FD (FD(TMP_FREG3)) -#else /* !SLJIT_MIPS_R6 */ +#else /* SLJIT_MIPS_REV < 6 */ #define C_UEQ_S (HI(17) | FMT_S | LO(51)) #define C_ULE_S (HI(17) | FMT_S | LO(55)) #define C_ULT_S (HI(17) | FMT_S | LO(53)) #define C_UN_S (HI(17) | FMT_S | LO(49)) #define C_FD (0) -#endif /* SLJIT_MIPS_R6 */ +#endif /* SLJIT_MIPS_REV >= 6 */ #define CVT_S_S (HI(17) | FMT_S | LO(32)) #define DADDIU (HI(25)) #define DADDU (HI(0) | LO(45)) -#if (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) #define DDIV (HI(0) | (2 << 6) | LO(30)) #define DDIVU (HI(0) | (2 << 6) | LO(31)) #define DMOD (HI(0) | (3 << 6) | LO(30)) @@ -176,14 +177,14 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 4] = { #define DMUHU (HI(0) | (3 << 6) | LO(29)) #define DMUL (HI(0) | (2 << 6) | LO(28)) #define DMULU (HI(0) | (2 << 6) | LO(29)) -#else /* !SLJIT_MIPS_R6 */ +#else /* SLJIT_MIPS_REV < 6 */ #define DDIV (HI(0) | LO(30)) #define DDIVU (HI(0) | LO(31)) #define DIV (HI(0) | LO(26)) #define DIVU (HI(0) | LO(27)) #define DMULT (HI(0) | LO(28)) #define DMULTU (HI(0) | LO(29)) -#endif /* SLJIT_MIPS_R6 */ +#endif /* SLJIT_MIPS_REV >= 6 */ #define DIV_S (HI(17) | FMT_S | LO(3)) #define DSLL (HI(0) | LO(56)) #define DSLL32 (HI(0) | LO(60)) @@ -198,33 +199,33 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 4] = { #define J (HI(2)) #define JAL (HI(3)) #define JALR (HI(0) | LO(9)) -#if (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) #define JR (HI(0) | LO(9)) -#else /* !SLJIT_MIPS_R6 */ +#else /* SLJIT_MIPS_REV < 6 */ #define JR (HI(0) | LO(8)) -#endif /* SLJIT_MIPS_R6 */ +#endif /* SLJIT_MIPS_REV >= 6 */ #define LD (HI(55)) #define LUI (HI(15)) #define LW (HI(35)) #define MFC1 (HI(17)) -#if !(defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) -#define MFHI (HI(0) | LO(16)) -#define MFLO (HI(0) | LO(18)) -#else /* SLJIT_MIPS_R6 */ +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) #define MOD (HI(0) | (3 << 6) | LO(26)) #define MODU (HI(0) | (3 << 6) | LO(27)) -#endif /* !SLJIT_MIPS_R6 */ +#else /* SLJIT_MIPS_REV < 6 */ +#define MFHI (HI(0) | LO(16)) +#define MFLO (HI(0) | LO(18)) +#endif /* SLJIT_MIPS_REV >= 6 */ #define MOV_S (HI(17) | FMT_S | LO(6)) #define MTC1 (HI(17) | (4 << 21)) -#if (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) #define MUH (HI(0) | (3 << 6) | LO(24)) #define MUHU (HI(0) | (3 << 6) | LO(25)) #define MUL (HI(0) | (2 << 6) | LO(24)) #define MULU (HI(0) | (2 << 6) | LO(25)) -#else /* !SLJIT_MIPS_R6 */ +#else /* SLJIT_MIPS_REV < 6 */ #define MULT (HI(0) | LO(24)) #define MULTU (HI(0) | LO(25)) -#endif /* SLJIT_MIPS_R6 */ +#endif /* SLJIT_MIPS_REV >= 6 */ #define MUL_S (HI(17) | FMT_S | LO(2)) #define NEG_S (HI(17) | FMT_S | LO(7)) #define NOP (HI(0) | LO(0)) @@ -251,23 +252,23 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 4] = { #define XOR (HI(0) | LO(38)) #define XORI (HI(14)) -#if (defined SLJIT_MIPS_R1 && SLJIT_MIPS_R1) || (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) #define CLZ (HI(28) | LO(32)) -#if (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) #define DCLZ (LO(18)) -#else /* !SLJIT_MIPS_R6 */ +#else /* SLJIT_MIPS_REV < 6 */ #define DCLZ (HI(28) | LO(36)) #define MOVF (HI(0) | (0 << 16) | LO(1)) #define MOVN (HI(0) | LO(11)) #define MOVT (HI(0) | (1 << 16) | LO(1)) #define MOVZ (HI(0) | LO(10)) #define MUL (HI(28) | LO(2)) -#endif /* SLJIT_MIPS_R6 */ +#endif /* SLJIT_MIPS_REV >= 6 */ #define PREF (HI(51)) #define PREFX (HI(19) | LO(15)) #define SEB (HI(31) | (16 << 6) | LO(32)) #define SEH (HI(31) | (24 << 6) | LO(32)) -#endif +#endif /* SLJIT_MIPS_REV >= 1 */ #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) #define ADDU_W ADDU @@ -303,10 +304,10 @@ static SLJIT_INLINE sljit_ins invert_branch(sljit_s32 flags) { if (flags & IS_BIT26_COND) return (1 << 26); -#if (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) if (flags & IS_BIT23_COND) return (1 << 23); -#endif /* SLJIT_MIPS_R6 */ +#endif /* SLJIT_MIPS_REV >= 6 */ return (1 << 16); } @@ -683,12 +684,15 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) #else #error "FIR check is not implemented for this architecture" #endif + case SLJIT_HAS_ZERO_REGISTER: + return 1; -#if (defined SLJIT_MIPS_R1 && SLJIT_MIPS_R1) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) case SLJIT_HAS_CLZ: case SLJIT_HAS_CMOV: + case SLJIT_HAS_PREFETCH: return 1; -#endif +#endif /* SLJIT_MIPS_REV >= 1 */ default: return fir; @@ -1230,7 +1234,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile return push_inst(compiler, NOP, UNMOVABLE_INS); case SLJIT_LMUL_UW: case SLJIT_LMUL_SW: -#if (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) #if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) FAIL_IF(push_inst(compiler, (op == SLJIT_LMUL_UW ? DMULU : DMUL) | S(SLJIT_R0) | T(SLJIT_R1) | D(TMP_REG3), DR(TMP_REG3))); FAIL_IF(push_inst(compiler, (op == SLJIT_LMUL_UW ? DMUHU : DMUH) | S(SLJIT_R0) | T(SLJIT_R1) | D(TMP_REG1), DR(TMP_REG1))); @@ -1240,7 +1244,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile #endif /* SLJIT_CONFIG_MIPS_64 */ FAIL_IF(push_inst(compiler, ADDU_W | S(TMP_REG3) | TA(0) | D(SLJIT_R0), DR(SLJIT_R0))); return push_inst(compiler, ADDU_W | S(TMP_REG1) | TA(0) | D(SLJIT_R1), DR(SLJIT_R1)); -#else /* !SLJIT_MIPS_R6 */ +#else /* SLJIT_MIPS_REV < 6 */ #if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) FAIL_IF(push_inst(compiler, (op == SLJIT_LMUL_UW ? DMULTU : DMULT) | S(SLJIT_R0) | T(SLJIT_R1), MOVABLE_INS)); #else /* !SLJIT_CONFIG_MIPS_64 */ @@ -1248,13 +1252,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile #endif /* SLJIT_CONFIG_MIPS_64 */ FAIL_IF(push_inst(compiler, MFLO | D(SLJIT_R0), DR(SLJIT_R0))); return push_inst(compiler, MFHI | D(SLJIT_R1), DR(SLJIT_R1)); -#endif /* SLJIT_MIPS_R6 */ +#endif /* SLJIT_MIPS_REV >= 6 */ case SLJIT_DIVMOD_UW: case SLJIT_DIVMOD_SW: case SLJIT_DIV_UW: case SLJIT_DIV_SW: SLJIT_COMPILE_ASSERT((SLJIT_DIVMOD_UW & 0x2) == 0 && SLJIT_DIV_UW - 0x2 == SLJIT_DIVMOD_UW, bad_div_opcode_assignments); -#if (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) #if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) if (int_op) { FAIL_IF(push_inst(compiler, ((op | 0x2) == SLJIT_DIV_UW ? DIVU : DIV) | S(SLJIT_R0) | T(SLJIT_R1) | D(TMP_REG3), DR(TMP_REG3))); @@ -1270,11 +1274,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile #endif /* SLJIT_CONFIG_MIPS_64 */ FAIL_IF(push_inst(compiler, ADDU_W | S(TMP_REG3) | TA(0) | D(SLJIT_R0), DR(SLJIT_R0))); return (op >= SLJIT_DIV_UW) ? SLJIT_SUCCESS : push_inst(compiler, ADDU_W | S(TMP_REG1) | TA(0) | D(SLJIT_R1), DR(SLJIT_R1)); -#else /* !SLJIT_MIPS_R6 */ -#if !(defined SLJIT_MIPS_R1 && SLJIT_MIPS_R1) +#else /* SLJIT_MIPS_REV < 6 */ +#if !(defined SLJIT_MIPS_REV) FAIL_IF(push_inst(compiler, NOP, UNMOVABLE_INS)); FAIL_IF(push_inst(compiler, NOP, UNMOVABLE_INS)); -#endif /* !SLJIT_MIPS_R1 */ +#endif /* !SLJIT_MIPS_REV */ #if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) if (int_op) FAIL_IF(push_inst(compiler, ((op | 0x2) == SLJIT_DIV_UW ? DIVU : DIV) | S(SLJIT_R0) | T(SLJIT_R1), MOVABLE_INS)); @@ -1285,13 +1289,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile #endif /* SLJIT_CONFIG_MIPS_64 */ FAIL_IF(push_inst(compiler, MFLO | D(SLJIT_R0), DR(SLJIT_R0))); return (op >= SLJIT_DIV_UW) ? SLJIT_SUCCESS : push_inst(compiler, MFHI | D(SLJIT_R1), DR(SLJIT_R1)); -#endif /* SLJIT_MIPS_R6 */ +#endif /* SLJIT_MIPS_REV >= 6 */ + case SLJIT_ENDBR: + case SLJIT_SKIP_FRAMES_BEFORE_RETURN: + return SLJIT_SUCCESS; } return SLJIT_SUCCESS; } -#if (defined SLJIT_MIPS_R1 && SLJIT_MIPS_R1) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) static sljit_s32 emit_prefetch(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw) { @@ -1312,7 +1319,7 @@ static sljit_s32 emit_prefetch(struct sljit_compiler *compiler, return push_inst(compiler, PREFX | S(src & REG_MASK) | T(OFFS_REG(src)), MOVABLE_INS); } -#endif +#endif /* SLJIT_MIPS_REV >= 1 */ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, @@ -1329,14 +1336,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src, srcw); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) { -#if (defined SLJIT_MIPS_R1 && SLJIT_MIPS_R1) - if (op <= SLJIT_MOV_P && (src & SLJIT_MEM)) - return emit_prefetch(compiler, src, srcw); -#endif - return SLJIT_SUCCESS; - } - #if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) if ((op & SLJIT_I32_OP) && GET_OPCODE(op) >= SLJIT_NOT) flags |= INT_DATA | SIGNED_DATA; @@ -1463,6 +1462,38 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile #endif } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src, sljit_sw srcw) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op_src(compiler, op, src, srcw)); + ADJUST_LOCAL_OFFSET(src, srcw); + + switch (op) { + case SLJIT_FAST_RETURN: + if (FAST_IS_REG(src)) + FAIL_IF(push_inst(compiler, ADDU_W | S(src) | TA(0) | DA(RETURN_ADDR_REG), RETURN_ADDR_REG)); + else + FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, RETURN_ADDR_REG, src, srcw)); + + FAIL_IF(push_inst(compiler, JR | SA(RETURN_ADDR_REG), UNMOVABLE_INS)); + return push_inst(compiler, NOP, UNMOVABLE_INS); + case SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN: + return SLJIT_SUCCESS; + case SLJIT_PREFETCH_L1: + case SLJIT_PREFETCH_L2: + case SLJIT_PREFETCH_L3: + case SLJIT_PREFETCH_ONCE: +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) + return emit_prefetch(compiler, src, srcw); +#else /* SLJIT_MIPS_REV < 1 */ + return SLJIT_SUCCESS; +#endif /* SLJIT_MIPS_REV >= 1 */ + } + + return SLJIT_SUCCESS; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 reg) { CHECK_REG_INDEX(check_sljit_get_register_index(reg)); @@ -1732,25 +1763,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * ADJUST_LOCAL_OFFSET(dst, dstw); if (FAST_IS_REG(dst)) - return push_inst(compiler, ADDU_W | SA(RETURN_ADDR_REG) | TA(0) | D(dst), DR(dst)); + return push_inst(compiler, ADDU_W | SA(RETURN_ADDR_REG) | TA(0) | D(dst), UNMOVABLE_INS); /* Memory. */ - return emit_op_mem(compiler, WORD_DATA, RETURN_ADDR_REG, dst, dstw); -} - -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw) -{ - CHECK_ERROR(); - CHECK(check_sljit_emit_fast_return(compiler, src, srcw)); - ADJUST_LOCAL_OFFSET(src, srcw); - - if (FAST_IS_REG(src)) - FAIL_IF(push_inst(compiler, ADDU_W | S(src) | TA(0) | DA(RETURN_ADDR_REG), RETURN_ADDR_REG)); - else - FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, RETURN_ADDR_REG, src, srcw)); - - FAIL_IF(push_inst(compiler, JR | SA(RETURN_ADDR_REG), UNMOVABLE_INS)); - return push_inst(compiler, NOP, UNMOVABLE_INS); + FAIL_IF(emit_op_mem(compiler, WORD_DATA, RETURN_ADDR_REG, dst, dstw)); + compiler->delay_slot = UNMOVABLE_INS; + return SLJIT_SUCCESS; } /* --------------------------------------------------------------------- */ @@ -1790,7 +1808,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi flags = IS_BIT26_COND; \ delay_check = src; -#if (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) #define BR_T() \ inst = BC1NEZ; \ @@ -1801,7 +1819,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi flags = IS_BIT23_COND; \ delay_check = FCSR_FCC; -#else /* !SLJIT_MIPS_R6 */ +#else /* SLJIT_MIPS_REV < 6 */ #define BR_T() \ inst = BC1T | JUMP_LENGTH; \ @@ -1812,7 +1830,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi flags = IS_BIT16_COND; \ delay_check = FCSR_FCC; -#endif /* SLJIT_MIPS_R6 */ +#endif /* SLJIT_MIPS_REV >= 6 */ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_s32 type) { @@ -2123,11 +2141,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co case SLJIT_GREATER_EQUAL_F64: case SLJIT_UNORDERED_F64: case SLJIT_ORDERED_F64: -#if (defined SLJIT_MIPS_R6 && SLJIT_MIPS_R6) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) FAIL_IF(push_inst(compiler, MFC1 | TA(dst_ar) | FS(TMP_FREG3), dst_ar)); -#else /* !SLJIT_MIPS_R6 */ +#else /* SLJIT_MIPS_REV < 6 */ FAIL_IF(push_inst(compiler, CFC1 | TA(dst_ar) | DA(FCSR_REG), dst_ar)); -#endif /* SLJIT_MIPS_R6 */ +#endif /* SLJIT_MIPS_REV >= 6 */ FAIL_IF(push_inst(compiler, SRL | TA(dst_ar) | DA(dst_ar) | SH_IMM(23), dst_ar)); FAIL_IF(push_inst(compiler, ANDI | SA(dst_ar) | TA(dst_ar) | IMM(1), dst_ar)); src_ar = dst_ar; @@ -2167,14 +2185,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil sljit_s32 dst_reg, sljit_s32 src, sljit_sw srcw) { -#if (defined SLJIT_MIPS_R1 && SLJIT_MIPS_R1) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) sljit_ins ins; -#endif +#endif /* SLJIT_MIPS_REV >= 1 */ CHECK_ERROR(); CHECK(check_sljit_emit_cmov(compiler, type, dst_reg, src, srcw)); -#if (defined SLJIT_MIPS_R1 && SLJIT_MIPS_R1) +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) if (SLJIT_UNLIKELY(src & SLJIT_IMM)) { #if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) @@ -2231,9 +2249,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil return push_inst(compiler, ins | S(src) | D(dst_reg), DR(dst_reg)); -#else +#else /* SLJIT_MIPS_REV < 1 */ return sljit_emit_cmov_generic(compiler, type, dst_reg, src, srcw); -#endif +#endif /* SLJIT_MIPS_REV >= 1 */ } SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw, sljit_sw init_value) diff --git a/ext/pcre/pcre2lib/sljit/sljitNativePPC_common.c b/ext/pcre/pcre2lib/sljit/sljitNativePPC_common.c index e8275143153d0..590f91c2588d1 100644 --- a/ext/pcre/pcre2lib/sljit/sljitNativePPC_common.c +++ b/ext/pcre/pcre2lib/sljit/sljitNativePPC_common.c @@ -626,7 +626,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) return 1; #endif + /* A saved register is set to a zero value. */ + case SLJIT_HAS_ZERO_REGISTER: case SLJIT_HAS_CLZ: + case SLJIT_HAS_PREFETCH: return 1; default: @@ -1158,6 +1161,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile #else return push_inst(compiler, (op == SLJIT_DIV_UW ? DIVWU : DIVW) | D(SLJIT_R0) | A(SLJIT_R0) | B(SLJIT_R1)); #endif + case SLJIT_ENDBR: + case SLJIT_SKIP_FRAMES_BEFORE_RETURN: + return SLJIT_SUCCESS; } return SLJIT_SUCCESS; @@ -1203,13 +1209,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src, srcw); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) { - if (op <= SLJIT_MOV_P && (src & SLJIT_MEM)) - return emit_prefetch(compiler, src, srcw); - - return SLJIT_SUCCESS; - } - op = GET_OPCODE(op); if ((src & SLJIT_IMM) && srcw == 0) src = TMP_ZERO; @@ -1536,6 +1535,35 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src, sljit_sw srcw) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op_src(compiler, op, src, srcw)); + ADJUST_LOCAL_OFFSET(src, srcw); + + switch (op) { + case SLJIT_FAST_RETURN: + if (FAST_IS_REG(src)) + FAIL_IF(push_inst(compiler, MTLR | S(src))); + else { + FAIL_IF(emit_op(compiler, SLJIT_MOV, WORD_DATA, TMP_REG2, 0, TMP_REG1, 0, src, srcw)); + FAIL_IF(push_inst(compiler, MTLR | S(TMP_REG2))); + } + + return push_inst(compiler, BLR); + case SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN: + return SLJIT_SUCCESS; + case SLJIT_PREFETCH_L1: + case SLJIT_PREFETCH_L2: + case SLJIT_PREFETCH_L3: + case SLJIT_PREFETCH_ONCE: + return emit_prefetch(compiler, src, srcw); + } + + return SLJIT_SUCCESS; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 reg) { CHECK_REG_INDEX(check_sljit_get_register_index(reg)); @@ -1854,22 +1882,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * return emit_op(compiler, SLJIT_MOV, WORD_DATA, dst, dstw, TMP_REG1, 0, TMP_REG2, 0); } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw) -{ - CHECK_ERROR(); - CHECK(check_sljit_emit_fast_return(compiler, src, srcw)); - ADJUST_LOCAL_OFFSET(src, srcw); - - if (FAST_IS_REG(src)) - FAIL_IF(push_inst(compiler, MTLR | S(src))); - else { - FAIL_IF(emit_op(compiler, SLJIT_MOV, WORD_DATA, TMP_REG2, 0, TMP_REG1, 0, src, srcw)); - FAIL_IF(push_inst(compiler, MTLR | S(TMP_REG2))); - } - - return push_inst(compiler, BLR); -} - /* --------------------------------------------------------------------- */ /* Conditional instructions */ /* --------------------------------------------------------------------- */ diff --git a/ext/pcre/pcre2lib/sljit/sljitNativeSPARC_common.c b/ext/pcre/pcre2lib/sljit/sljitNativeSPARC_common.c index bfa4ecede2f84..7d6be6ca3c161 100644 --- a/ext/pcre/pcre2lib/sljit/sljitNativeSPARC_common.c +++ b/ext/pcre/pcre2lib/sljit/sljitNativeSPARC_common.c @@ -451,6 +451,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) return 1; #endif + case SLJIT_HAS_ZERO_REGISTER: + return 1; + #if (defined SLJIT_CONFIG_SPARC_64 && SLJIT_CONFIG_SPARC_64) case SLJIT_HAS_CMOV: return 1; @@ -872,6 +875,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile #else #error "Implementation required" #endif + case SLJIT_ENDBR: + case SLJIT_SKIP_FRAMES_BEFORE_RETURN: + return SLJIT_SUCCESS; } return SLJIT_SUCCESS; @@ -888,9 +894,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src, srcw); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; - op = GET_OPCODE(op); switch (op) { case SLJIT_MOV: @@ -971,6 +974,33 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src, sljit_sw srcw) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op_src(compiler, op, src, srcw)); + ADJUST_LOCAL_OFFSET(src, srcw); + + switch (op) { + case SLJIT_FAST_RETURN: + if (FAST_IS_REG(src)) + FAIL_IF(push_inst(compiler, OR | D(TMP_LINK) | S1(0) | S2(src), DR(TMP_LINK))); + else + FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, TMP_LINK, src, srcw)); + + FAIL_IF(push_inst(compiler, JMPL | D(0) | S1(TMP_LINK) | IMM(8), UNMOVABLE_INS)); + return push_inst(compiler, NOP, UNMOVABLE_INS); + case SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN: + case SLJIT_PREFETCH_L1: + case SLJIT_PREFETCH_L2: + case SLJIT_PREFETCH_L3: + case SLJIT_PREFETCH_ONCE: + return SLJIT_SUCCESS; + } + + return SLJIT_SUCCESS; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 reg) { CHECK_REG_INDEX(check_sljit_get_register_index(reg)); @@ -1215,25 +1245,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * ADJUST_LOCAL_OFFSET(dst, dstw); if (FAST_IS_REG(dst)) - return push_inst(compiler, OR | D(dst) | S1(0) | S2(TMP_LINK), DR(dst)); + return push_inst(compiler, OR | D(dst) | S1(0) | S2(TMP_LINK), UNMOVABLE_INS); /* Memory. */ - return emit_op_mem(compiler, WORD_DATA, TMP_LINK, dst, dstw); -} - -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw) -{ - CHECK_ERROR(); - CHECK(check_sljit_emit_fast_return(compiler, src, srcw)); - ADJUST_LOCAL_OFFSET(src, srcw); - - if (FAST_IS_REG(src)) - FAIL_IF(push_inst(compiler, OR | D(TMP_LINK) | S1(0) | S2(src), DR(TMP_LINK))); - else - FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, TMP_LINK, src, srcw)); - - FAIL_IF(push_inst(compiler, JMPL | D(0) | S1(TMP_LINK) | IMM(8), UNMOVABLE_INS)); - return push_inst(compiler, NOP, UNMOVABLE_INS); + FAIL_IF(emit_op_mem(compiler, WORD_DATA, TMP_LINK, dst, dstw)); + compiler->delay_slot = UNMOVABLE_INS; + return SLJIT_SUCCESS; } /* --------------------------------------------------------------------- */ diff --git a/ext/pcre/pcre2lib/sljit/sljitNativeTILEGX_64.c b/ext/pcre/pcre2lib/sljit/sljitNativeTILEGX_64.c index 003f43a79091d..d69ecd6170759 100644 --- a/ext/pcre/pcre2lib/sljit/sljitNativeTILEGX_64.c +++ b/ext/pcre/pcre2lib/sljit/sljitNativeTILEGX_64.c @@ -1564,24 +1564,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * return emit_op_mem(compiler, WORD_DATA, RA, dst, dstw); } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw) -{ - CHECK_ERROR(); - CHECK(check_sljit_emit_fast_return(compiler, src, srcw)); - ADJUST_LOCAL_OFFSET(src, srcw); - - if (FAST_IS_REG(src)) - FAIL_IF(ADD(RA, reg_map[src], ZERO)); - - else if (src & SLJIT_MEM) - FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, RA, src, srcw)); - - else if (src & SLJIT_IMM) - FAIL_IF(load_immediate(compiler, RA, srcw)); - - return JR(RA); -} - static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags, sljit_s32 dst, sljit_s32 src1, sljit_sw src2) { sljit_s32 overflow_ra = 0; @@ -2184,6 +2166,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile case SLJIT_DIV_UW: case SLJIT_DIV_SW: SLJIT_UNREACHABLE(); + case SLJIT_ENDBR: + case SLJIT_SKIP_FRAMES_BEFORE_RETURN: + return SLJIT_SUCCESS; } return SLJIT_SUCCESS; @@ -2293,6 +2278,29 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src, sljit_sw srcw) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op_src(compiler, op, src, srcw)); + ADJUST_LOCAL_OFFSET(src, srcw); + + switch (op) { + case SLJIT_FAST_RETURN: + if (FAST_IS_REG(src)) + FAIL_IF(ADD(RA, reg_map[src], ZERO)); + + else + FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, RA, src, srcw)); + + return JR(RA); + case SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN: + return SLJIT_SUCCESS; + } + + return SLJIT_SUCCESS; +} + SLJIT_API_FUNC_ATTRIBUTE struct sljit_label * sljit_emit_label(struct sljit_compiler *compiler) { struct sljit_label *label; diff --git a/ext/pcre/pcre2lib/sljit/sljitNativeX86_32.c b/ext/pcre/pcre2lib/sljit/sljitNativeX86_32.c index 34a3a3d940247..79a7e8bba59e5 100644 --- a/ext/pcre/pcre2lib/sljit/sljitNativeX86_32.c +++ b/ext/pcre/pcre2lib/sljit/sljitNativeX86_32.c @@ -76,6 +76,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); + /* Emit ENDBR32 at function entry if needed. */ + FAIL_IF(emit_endbranch(compiler)); + args = get_arg_count(arg_types); compiler->args = args; @@ -307,14 +310,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *comp SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, compiler->local_size)); #endif - size = 2 + (compiler->scratches > 7 ? (compiler->scratches - 7) : 0) + + size = 2 + (compiler->scratches > 9 ? (compiler->scratches - 9) : 0) + (compiler->saveds <= 3 ? compiler->saveds : 3); #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) if (compiler->args > 2) size += 2; -#else - if (compiler->args > 0) - size += 2; #endif inst = (sljit_u8*)ensure_buf(compiler, 1 + size); FAIL_IF(!inst); @@ -367,6 +367,8 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 SLJIT_ASSERT((flags & (EX86_PREF_F2 | EX86_PREF_F3)) != (EX86_PREF_F2 | EX86_PREF_F3) && (flags & (EX86_PREF_F2 | EX86_PREF_66)) != (EX86_PREF_F2 | EX86_PREF_66) && (flags & (EX86_PREF_F3 | EX86_PREF_66)) != (EX86_PREF_F3 | EX86_PREF_66)); + /* We don't support (%ebp). */ + SLJIT_ASSERT(!(b & SLJIT_MEM) || immb || reg_map[b & REG_MASK] != 5); size &= 0xf; inst_size = size; @@ -863,14 +865,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * return SLJIT_SUCCESS; } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw) +static sljit_s32 emit_fast_return(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw) { sljit_u8 *inst; - CHECK_ERROR(); - CHECK(check_sljit_emit_fast_return(compiler, src, srcw)); - ADJUST_LOCAL_OFFSET(src, srcw); - CHECK_EXTRA_REGS(src, srcw, (void)0); if (FAST_IS_REG(src)) { @@ -894,3 +892,37 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_return(struct sljit_compiler RET(); return SLJIT_SUCCESS; } + +static sljit_s32 skip_frames_before_return(struct sljit_compiler *compiler) +{ + sljit_s32 size, saved_size; + sljit_s32 has_f64_aligment; + + /* Don't adjust shadow stack if it isn't enabled. */ + if (!cpu_has_shadow_stack ()) + return SLJIT_SUCCESS; + + SLJIT_ASSERT(compiler->args >= 0); + SLJIT_ASSERT(compiler->local_size > 0); + +#if !defined(__APPLE__) + has_f64_aligment = compiler->options & SLJIT_F64_ALIGNMENT; +#else + has_f64_aligment = 0; +#endif + + size = compiler->local_size; + saved_size = (1 + (compiler->scratches > 9 ? (compiler->scratches - 9) : 0) + (compiler->saveds <= 3 ? compiler->saveds : 3)) * sizeof(sljit_uw); + if (has_f64_aligment) { + /* mov TMP_REG1, [esp + local_size]. */ + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), size); + /* mov TMP_REG1, [TMP_REG1+ saved_size]. */ + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(TMP_REG1), saved_size); + /* Move return address to [esp]. */ + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), 0, TMP_REG1, 0); + size = 0; + } else + size += saved_size; + + return adjust_shadow_stack(compiler, SLJIT_UNUSED, 0, SLJIT_SP, size); +} diff --git a/ext/pcre/pcre2lib/sljit/sljitNativeX86_64.c b/ext/pcre/pcre2lib/sljit/sljitNativeX86_64.c index 5758711954047..e85b56a61a50b 100644 --- a/ext/pcre/pcre2lib/sljit/sljitNativeX86_64.c +++ b/ext/pcre/pcre2lib/sljit/sljitNativeX86_64.c @@ -135,6 +135,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); + /* Emit ENDBR64 at function entry if needed. */ + FAIL_IF(emit_endbranch(compiler)); + compiler->mode32 = 0; #ifdef _WIN64 @@ -796,14 +799,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * return SLJIT_SUCCESS; } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw) +static sljit_s32 emit_fast_return(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw) { sljit_u8 *inst; - CHECK_ERROR(); - CHECK(check_sljit_emit_fast_return(compiler, src, srcw)); - ADJUST_LOCAL_OFFSET(src, srcw); - if (FAST_IS_REG(src)) { if (reg_map[src] < 8) { inst = (sljit_u8*)ensure_buf(compiler, 1 + 1 + 1); @@ -898,3 +897,22 @@ static sljit_s32 emit_mov_int(struct sljit_compiler *compiler, sljit_s32 sign, return SLJIT_SUCCESS; } + +static sljit_s32 skip_frames_before_return(struct sljit_compiler *compiler) +{ + sljit_s32 tmp, size; + + /* Don't adjust shadow stack if it isn't enabled. */ + if (!cpu_has_shadow_stack ()) + return SLJIT_SUCCESS; + + size = compiler->local_size; + tmp = compiler->scratches; + if (tmp >= SLJIT_FIRST_SAVED_REG) + size += (tmp - SLJIT_FIRST_SAVED_REG + 1) * sizeof(sljit_uw); + tmp = compiler->saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - compiler->saveds) : SLJIT_FIRST_SAVED_REG; + if (SLJIT_S0 >= tmp) + size += (SLJIT_S0 - tmp + 1) * sizeof(sljit_uw); + + return adjust_shadow_stack(compiler, SLJIT_UNUSED, 0, SLJIT_SP, size); +} diff --git a/ext/pcre/pcre2lib/sljit/sljitNativeX86_common.c b/ext/pcre/pcre2lib/sljit/sljitNativeX86_common.c index 6296da5382251..74965e32515f2 100644 --- a/ext/pcre/pcre2lib/sljit/sljitNativeX86_common.c +++ b/ext/pcre/pcre2lib/sljit/sljitNativeX86_common.c @@ -657,6 +657,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) get_cpu_features(); return cpu_has_cmov; + case SLJIT_HAS_PREFETCH: + return 1; + case SLJIT_HAS_SSE2: #if (defined SLJIT_DETECT_SSE2 && SLJIT_DETECT_SSE2) if (cpu_has_sse2 == -1) @@ -702,6 +705,171 @@ static SLJIT_INLINE sljit_s32 emit_sse2_store(struct sljit_compiler *compiler, static SLJIT_INLINE sljit_s32 emit_sse2_load(struct sljit_compiler *compiler, sljit_s32 single, sljit_s32 dst, sljit_s32 src, sljit_sw srcw); +static sljit_s32 emit_cmp_binary(struct sljit_compiler *compiler, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w); + +static SLJIT_INLINE sljit_s32 emit_endbranch(struct sljit_compiler *compiler) +{ +#if (defined SLJIT_CONFIG_X86_CET && SLJIT_CONFIG_X86_CET) + /* Emit endbr32/endbr64 when CET is enabled. */ + sljit_u8 *inst; + inst = (sljit_u8*)ensure_buf(compiler, 1 + 4); + FAIL_IF(!inst); + INC_SIZE(4); + *inst++ = 0xf3; + *inst++ = 0x0f; + *inst++ = 0x1e; +#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) + *inst = 0xfb; +#else + *inst = 0xfa; +#endif +#else + SLJIT_UNUSED_ARG(compiler); +#endif + return SLJIT_SUCCESS; +} + +static SLJIT_INLINE sljit_s32 emit_rdssp(struct sljit_compiler *compiler, sljit_s32 reg) +{ +#if (defined SLJIT_CONFIG_X86_CET && SLJIT_CONFIG_X86_CET) + sljit_u8 *inst; + sljit_s32 size; + +#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) + size = 5; +#else + size = 4; +#endif + + inst = (sljit_u8*)ensure_buf(compiler, 1 + size); + FAIL_IF(!inst); + INC_SIZE(size); + *inst++ = 0xf3; +#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) + *inst++ = REX_W | (reg_map[reg] <= 7 ? 0 : REX_B); +#endif + *inst++ = 0x0f; + *inst++ = 0x1e; + *inst = (0x3 << 6) | (0x1 << 3) | (reg_map[reg] & 0x7); +#else + SLJIT_UNUSED_ARG(compiler); + SLJIT_UNUSED_ARG(reg); +#endif + return SLJIT_SUCCESS; +} + +static SLJIT_INLINE sljit_s32 emit_incssp(struct sljit_compiler *compiler, sljit_s32 reg) +{ +#if (defined SLJIT_CONFIG_X86_CET && SLJIT_CONFIG_X86_CET) + sljit_u8 *inst; + sljit_s32 size; + +#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) + size = 5; +#else + size = 4; +#endif + + inst = (sljit_u8*)ensure_buf(compiler, 1 + size); + FAIL_IF(!inst); + INC_SIZE(size); + *inst++ = 0xf3; +#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) + *inst++ = REX_W | (reg_map[reg] <= 7 ? 0 : REX_B); +#endif + *inst++ = 0x0f; + *inst++ = 0xae; + *inst = (0x3 << 6) | (0x5 << 3) | (reg_map[reg] & 0x7); +#else + SLJIT_UNUSED_ARG(compiler); + SLJIT_UNUSED_ARG(reg); +#endif + return SLJIT_SUCCESS; +} + +static SLJIT_INLINE sljit_s32 cpu_has_shadow_stack(void) +{ +#if (defined SLJIT_CONFIG_X86_CET && SLJIT_CONFIG_X86_CET) + return _get_ssp() != 0; +#else + return 0; +#endif +} + +static SLJIT_INLINE sljit_s32 adjust_shadow_stack(struct sljit_compiler *compiler, + sljit_s32 src, sljit_sw srcw, sljit_s32 base, sljit_sw disp) +{ +#if (defined SLJIT_CONFIG_X86_CET && SLJIT_CONFIG_X86_CET) + sljit_u8 *inst; + + sljit_s32 size_before_rdssp_inst = compiler->size; + + /* Generate "RDSSP TMP_REG1". */ + FAIL_IF(emit_rdssp(compiler, TMP_REG1)); + + /* Load return address on shadow stack into TMP_REG1. */ +#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) + SLJIT_ASSERT(reg_map[TMP_REG1] == 5); + + /* Hand code unsupported "mov 0x0(%ebp),%ebp". */ + inst = (sljit_u8*)ensure_buf(compiler, 1 + 3); + FAIL_IF(!inst); + INC_SIZE(3); + *inst++ = 0x8b; + *inst++ = 0x6d; + *inst = 0; +#else /* !SLJIT_CONFIG_X86_32 */ + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(TMP_REG1), 0); +#endif /* SLJIT_CONFIG_X86_32 */ + + if (src == SLJIT_UNUSED) { + /* Return address is on stack. */ + src = SLJIT_MEM1(base); + srcw = disp; + } + + /* Compare return address against TMP_REG1. */ + FAIL_IF(emit_cmp_binary (compiler, TMP_REG1, 0, src, srcw)); + + /* Generate JZ to skip shadow stack ajdustment when shadow + stack matches normal stack. */ + inst = (sljit_u8*)ensure_buf(compiler, 1 + 2); + FAIL_IF(!inst); + INC_SIZE(2); + *inst++ = get_jump_code(SLJIT_EQUAL) - 0x10; + sljit_uw size_jz_after_cmp_inst = compiler->size; + sljit_u8 *jz_after_cmp_inst = inst; + +#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) + /* REX_W is not necessary. */ + compiler->mode32 = 1; +#endif + /* Load 1 into TMP_REG1. */ + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_IMM, 1); + + /* Generate "INCSSP TMP_REG1". */ + FAIL_IF(emit_incssp(compiler, TMP_REG1)); + + /* Jump back to "RDSSP TMP_REG1" to check shadow stack again. */ + inst = (sljit_u8*)ensure_buf(compiler, 1 + 2); + FAIL_IF(!inst); + INC_SIZE(2); + *inst++ = JMP_i8; + *inst = size_before_rdssp_inst - compiler->size; + + *jz_after_cmp_inst = compiler->size - size_jz_after_cmp_inst; +#else /* SLJIT_CONFIG_X86_CET */ + SLJIT_UNUSED_ARG(compiler); + SLJIT_UNUSED_ARG(src); + SLJIT_UNUSED_ARG(srcw); + SLJIT_UNUSED_ARG(base); + SLJIT_UNUSED_ARG(disp); +#endif /* SLJIT_CONFIG_X86_CET */ + return SLJIT_SUCCESS; +} + #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) #include "sljitNativeX86_32.c" #else @@ -905,6 +1073,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile EMIT_MOV(compiler, SLJIT_R1, 0, TMP_REG1, 0); #endif break; + case SLJIT_ENDBR: + return emit_endbranch(compiler); + case SLJIT_SKIP_FRAMES_BEFORE_RETURN: + return skip_frames_before_return(compiler); } return SLJIT_SUCCESS; @@ -1074,12 +1246,12 @@ static sljit_s32 emit_prefetch(struct sljit_compiler *compiler, sljit_s32 op, *inst++ = GROUP_0F; *inst++ = PREFETCH; - if (op >= SLJIT_MOV_U8 && op <= SLJIT_MOV_S8) - *inst |= (3 << 3); - else if (op >= SLJIT_MOV_U16 && op <= SLJIT_MOV_S16) - *inst |= (2 << 3); - else + if (op == SLJIT_PREFETCH_L1) *inst |= (1 << 3); + else if (op == SLJIT_PREFETCH_L2) + *inst |= (2 << 3); + else if (op == SLJIT_PREFETCH_L3) + *inst |= (3 << 3); return SLJIT_SUCCESS; } @@ -1284,12 +1456,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile compiler->mode32 = op_flags & SLJIT_I32_OP; #endif - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) { - if (op <= SLJIT_MOV_P && (src & SLJIT_MEM)) - return emit_prefetch(compiler, op, src, srcw); - return SLJIT_SUCCESS; - } - op = GET_OPCODE(op); if (op >= SLJIT_MOV && op <= SLJIT_MOV_P) { @@ -2150,6 +2316,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile if (!HAS_FLAGS(op)) { if ((src2 & SLJIT_IMM) && emit_lea_binary(compiler, dst, dstw, src1, src1w, SLJIT_IMM, -src2w) != SLJIT_ERR_UNSUPPORTED) return compiler->error; + if (SLOW_IS_REG(dst) && src2 == dst) { + FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), dst, 0, dst, 0, src1, src1w)); + return emit_unary(compiler, NEG_rm, dst, 0, dst, 0); + } } if (dst == SLJIT_UNUSED) @@ -2186,6 +2356,33 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src, sljit_sw srcw) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op_src(compiler, op, src, srcw)); + ADJUST_LOCAL_OFFSET(src, srcw); + + CHECK_EXTRA_REGS(src, srcw, (void)0); + + switch (op) { + case SLJIT_FAST_RETURN: + return emit_fast_return(compiler, src, srcw); + case SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN: + /* Don't adjust shadow stack if it isn't enabled. */ + if (!cpu_has_shadow_stack ()) + return SLJIT_SUCCESS; + return adjust_shadow_stack(compiler, src, srcw, SLJIT_UNUSED, 0); + case SLJIT_PREFETCH_L1: + case SLJIT_PREFETCH_L2: + case SLJIT_PREFETCH_L3: + case SLJIT_PREFETCH_ONCE: + return emit_prefetch(compiler, op, src, srcw); + } + + return SLJIT_SUCCESS; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 reg) { CHECK_REG_INDEX(check_sljit_get_register_index(reg)); diff --git a/ext/pcre/pcre2lib/sljit/sljitProtExecAllocator.c b/ext/pcre/pcre2lib/sljit/sljitProtExecAllocator.c index 8a5b2b3cfe699..3f412fe68f793 100644 --- a/ext/pcre/pcre2lib/sljit/sljitProtExecAllocator.c +++ b/ext/pcre/pcre2lib/sljit/sljitProtExecAllocator.c @@ -70,7 +70,6 @@ struct chunk_header { void *executable; - int fd; }; /* @@ -96,8 +95,20 @@ struct chunk_header { #endif #endif +#if !(defined(__NetBSD__) && defined(MAP_REMAPDUP)) int mkostemp(char *template, int flags); + +#ifdef __NetBSD__ +/* + * this is a workaround for NetBSD < 8 that lacks a system provided + * secure_getenv function. + * ideally this should never be used, as the standard allocator is + * a preferred option for those systems and should be used instead. + */ +#define secure_getenv(name) issetugid() ? NULL : getenv(name) +#else char *secure_getenv(const char *name); +#endif static SLJIT_INLINE int create_tempfile(void) { @@ -108,6 +119,13 @@ static SLJIT_INLINE int create_tempfile(void) char *dir; size_t len; +#ifdef HAVE_MEMFD_CREATE + /* this is a GNU extension, make sure to use -D_GNU_SOURCE */ + fd = memfd_create("sljit", MFD_CLOEXEC); + if (fd != -1) + return fd; +#endif + #ifdef P_tmpdir len = (P_tmpdir != NULL) ? strlen(P_tmpdir) : 0; @@ -125,6 +143,7 @@ static SLJIT_INLINE int create_tempfile(void) #endif dir = secure_getenv("TMPDIR"); + if (dir) { len = strlen(dir); if (len > 0 && len < sizeof(tmp_name)) { @@ -189,23 +208,50 @@ static SLJIT_INLINE struct chunk_header* alloc_chunk(sljit_uw size) retval->executable = mmap(NULL, size, PROT_READ | PROT_EXEC, MAP_SHARED, fd, 0); if (retval->executable == MAP_FAILED) { - munmap(retval, size); + munmap((void *)retval, size); close(fd); return NULL; } - retval->fd = fd; + close(fd); + return retval; +} +#else +static SLJIT_INLINE struct chunk_header* alloc_chunk(sljit_uw size) +{ + struct chunk_header *retval; + void *maprx; + + retval = (struct chunk_header *)mmap(NULL, size, + PROT_MPROTECT(PROT_EXEC|PROT_WRITE|PROT_READ), + MAP_ANON, -1, 0); + + if (retval == MAP_FAILED) + return NULL; + + maprx = mremap(retval, size, NULL, size, MAP_REMAPDUP); + if (maprx == MAP_FAILED) { + munmap((void *)retval, size); + return NULL; + } + + if (mprotect(retval, size, PROT_READ | PROT_WRITE) == -1 || + mprotect(maprx, size, PROT_READ | PROT_EXEC) == -1) { + munmap(maprx, size); + munmap((void *)retval, size); + return NULL; + } + retval->executable = maprx; return retval; } +#endif /* NetBSD >= 8 */ static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size) { struct chunk_header *header = ((struct chunk_header *)chunk) - 1; - int fd = header->fd; munmap(header->executable, size); - munmap(header, size); - close(fd); + munmap((void *)header, size); } /* --------------------------------------------------------------------- */ @@ -385,7 +431,9 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr) if (total_size - free_block->size > (allocated_size * 3 / 2)) { total_size -= free_block->size; sljit_remove_free_block(free_block); - free_chunk(free_block, free_block->size + sizeof(struct block_header)); + free_chunk(free_block, free_block->size + + sizeof(struct chunk_header) + + sizeof(struct block_header)); } } @@ -406,7 +454,9 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void) AS_BLOCK_HEADER(free_block, free_block->size)->size == 1) { total_size -= free_block->size; sljit_remove_free_block(free_block); - free_chunk(free_block, free_block->size + sizeof(struct block_header)); + free_chunk(free_block, free_block->size + + sizeof(struct chunk_header) + + sizeof(struct block_header)); } free_block = next_free_block; } diff --git a/ext/pcre/pcre2lib/sljit/sljitUtils.c b/ext/pcre/pcre2lib/sljit/sljitUtils.c index 857492a174811..0276fa1b8b8d4 100644 --- a/ext/pcre/pcre2lib/sljit/sljitUtils.c +++ b/ext/pcre/pcre2lib/sljit/sljitUtils.c @@ -152,15 +152,23 @@ SLJIT_API_FUNC_ATTRIBUTE void SLJIT_FUNC sljit_release_lock(void) #ifdef _WIN32 #include "windows.h" -#else +#else /* !_WIN32 */ /* Provides mmap function. */ #include #include + #ifndef MAP_ANON #ifdef MAP_ANONYMOUS #define MAP_ANON MAP_ANONYMOUS -#endif -#endif +#endif /* MAP_ANONYMOUS */ +#endif /* !MAP_ANON */ + +#ifndef MADV_DONTNEED +#ifdef POSIX_MADV_DONTNEED +#define MADV_DONTNEED POSIX_MADV_DONTNEED +#endif /* POSIX_MADV_DONTNEED */ +#endif /* !MADV_DONTNEED */ + /* For detecting the page size. */ #include @@ -198,35 +206,85 @@ static SLJIT_INLINE sljit_s32 open_dev_zero(void) #endif /* SLJIT_SINGLE_THREADED */ -#endif +#endif /* !MAP_ANON */ -#endif +#endif /* _WIN32 */ #endif /* SLJIT_UTIL_STACK || SLJIT_EXECUTABLE_ALLOCATOR */ +#endif /* SLJIT_EXECUTABLE_ALLOCATOR || SLJIT_UTIL_GLOBAL_LOCK */ + #if (defined SLJIT_UTIL_STACK && SLJIT_UTIL_STACK) -/* Planning to make it even more clever in the future. */ -static sljit_sw sljit_page_align = 0; +#if (defined SLJIT_UTIL_SIMPLE_STACK_ALLOCATION && SLJIT_UTIL_SIMPLE_STACK_ALLOCATION) SLJIT_API_FUNC_ATTRIBUTE struct sljit_stack* SLJIT_FUNC sljit_allocate_stack(sljit_uw start_size, sljit_uw max_size, void *allocator_data) { struct sljit_stack *stack; void *ptr; -#ifdef _WIN32 - SYSTEM_INFO si; -#endif SLJIT_UNUSED_ARG(allocator_data); + if (start_size > max_size || start_size < 1) return NULL; + stack = (struct sljit_stack*)SLJIT_MALLOC(sizeof(struct sljit_stack), allocator_data); + if (stack == NULL) + return NULL; + + ptr = SLJIT_MALLOC(max_size, allocator_data); + if (ptr == NULL) { + SLJIT_FREE(stack, allocator_data); + return NULL; + } + + stack->min_start = (sljit_u8 *)ptr; + stack->end = stack->min_start + max_size; + stack->start = stack->end - start_size; + stack->top = stack->end; + return stack; +} + +SLJIT_API_FUNC_ATTRIBUTE void SLJIT_FUNC sljit_free_stack(struct sljit_stack *stack, void *allocator_data) +{ + SLJIT_UNUSED_ARG(allocator_data); + SLJIT_FREE((void*)stack->min_start, allocator_data); + SLJIT_FREE(stack, allocator_data); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_u8 *SLJIT_FUNC sljit_stack_resize(struct sljit_stack *stack, sljit_u8 *new_start) +{ + if ((new_start < stack->min_start) || (new_start >= stack->end)) + return NULL; + stack->start = new_start; + return new_start; +} + +#else /* !SLJIT_UTIL_SIMPLE_STACK_ALLOCATION */ + #ifdef _WIN32 + +SLJIT_INLINE static sljit_sw get_page_alignment(void) { + SYSTEM_INFO si; + static sljit_sw sljit_page_align; if (!sljit_page_align) { GetSystemInfo(&si); sljit_page_align = si.dwPageSize - 1; } -#else + return sljit_page_align; +} + +SLJIT_API_FUNC_ATTRIBUTE void SLJIT_FUNC sljit_free_stack(struct sljit_stack *stack, void *allocator_data) +{ + SLJIT_UNUSED_ARG(allocator_data); + VirtualFree((void*)stack->min_start, 0, MEM_RELEASE); + SLJIT_FREE(stack, allocator_data); +} + +#else /* ! defined _WIN32 */ + +SLJIT_INLINE static sljit_sw get_page_alignment(void) { + static sljit_sw sljit_page_align; if (!sljit_page_align) { sljit_page_align = sysconf(_SC_PAGESIZE); /* Should never happen. */ @@ -234,14 +292,36 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_stack* SLJIT_FUNC sljit_allocate_stack(slj sljit_page_align = 4096; sljit_page_align--; } -#endif + return sljit_page_align; +} + +SLJIT_API_FUNC_ATTRIBUTE void SLJIT_FUNC sljit_free_stack(struct sljit_stack *stack, void *allocator_data) +{ + SLJIT_UNUSED_ARG(allocator_data); + munmap((void*)stack->min_start, stack->end - stack->min_start); + SLJIT_FREE(stack, allocator_data); +} + +#endif /* defined _WIN32 */ + +SLJIT_API_FUNC_ATTRIBUTE struct sljit_stack* SLJIT_FUNC sljit_allocate_stack(sljit_uw start_size, sljit_uw max_size, void *allocator_data) +{ + struct sljit_stack *stack; + void *ptr; + sljit_sw page_align; + + SLJIT_UNUSED_ARG(allocator_data); + + if (start_size > max_size || start_size < 1) + return NULL; stack = (struct sljit_stack*)SLJIT_MALLOC(sizeof(struct sljit_stack), allocator_data); - if (!stack) + if (stack == NULL) return NULL; /* Align max_size. */ - max_size = (max_size + sljit_page_align) & ~sljit_page_align; + page_align = get_page_alignment(); + max_size = (max_size + page_align) & ~page_align; #ifdef _WIN32 ptr = VirtualAlloc(NULL, max_size, MEM_RESERVE, PAGE_READWRITE); @@ -258,18 +338,18 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_stack* SLJIT_FUNC sljit_allocate_stack(slj sljit_free_stack(stack, allocator_data); return NULL; } -#else +#else /* !_WIN32 */ #ifdef MAP_ANON ptr = mmap(NULL, max_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); -#else +#else /* !MAP_ANON */ if (dev_zero < 0) { - if (open_dev_zero()) { + if (open_dev_zero() != 0) { SLJIT_FREE(stack, allocator_data); return NULL; } } ptr = mmap(NULL, max_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, dev_zero, 0); -#endif +#endif /* MAP_ANON */ if (ptr == MAP_FAILED) { SLJIT_FREE(stack, allocator_data); return NULL; @@ -277,35 +357,28 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_stack* SLJIT_FUNC sljit_allocate_stack(slj stack->min_start = (sljit_u8 *)ptr; stack->end = stack->min_start + max_size; stack->start = stack->end - start_size; -#endif +#endif /* _WIN32 */ + stack->top = stack->end; return stack; } -#undef PAGE_ALIGN - -SLJIT_API_FUNC_ATTRIBUTE void SLJIT_FUNC sljit_free_stack(struct sljit_stack *stack, void *allocator_data) -{ - SLJIT_UNUSED_ARG(allocator_data); -#ifdef _WIN32 - VirtualFree((void*)stack->min_start, 0, MEM_RELEASE); -#else - munmap((void*)stack->min_start, stack->end - stack->min_start); -#endif - SLJIT_FREE(stack, allocator_data); -} - SLJIT_API_FUNC_ATTRIBUTE sljit_u8 *SLJIT_FUNC sljit_stack_resize(struct sljit_stack *stack, sljit_u8 *new_start) { +#if defined _WIN32 || defined(MADV_DONTNEED) sljit_uw aligned_old_start; sljit_uw aligned_new_start; + sljit_sw page_align; +#endif if ((new_start < stack->min_start) || (new_start >= stack->end)) return NULL; #ifdef _WIN32 - aligned_new_start = (sljit_uw)new_start & ~sljit_page_align; - aligned_old_start = ((sljit_uw)stack->start) & ~sljit_page_align; + page_align = get_page_alignment(); + + aligned_new_start = (sljit_uw)new_start & ~page_align; + aligned_old_start = ((sljit_uw)stack->start) & ~page_align; if (aligned_new_start != aligned_old_start) { if (aligned_new_start < aligned_old_start) { if (!VirtualAlloc((void*)aligned_new_start, aligned_old_start - aligned_new_start, MEM_COMMIT, PAGE_READWRITE)) @@ -316,24 +389,22 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_u8 *SLJIT_FUNC sljit_stack_resize(struct sljit_st return NULL; } } -#else +#elif defined(MADV_DONTNEED) if (stack->start < new_start) { - aligned_new_start = (sljit_uw)new_start & ~sljit_page_align; - aligned_old_start = ((sljit_uw)stack->start) & ~sljit_page_align; + page_align = get_page_alignment(); + + aligned_new_start = (sljit_uw)new_start & ~page_align; + aligned_old_start = ((sljit_uw)stack->start) & ~page_align; /* If madvise is available, we release the unnecessary space. */ -#if defined(MADV_DONTNEED) if (aligned_new_start > aligned_old_start) madvise((void*)aligned_old_start, aligned_new_start - aligned_old_start, MADV_DONTNEED); -#elif defined(POSIX_MADV_DONTNEED) - if (aligned_new_start > aligned_old_start) - posix_madvise((void*)aligned_old_start, aligned_new_start - aligned_old_start, POSIX_MADV_DONTNEED); -#endif } -#endif +#endif /* _WIN32 */ + stack->start = new_start; return new_start; } -#endif /* SLJIT_UTIL_STACK */ +#endif /* SLJIT_UTIL_SIMPLE_STACK_ALLOCATION */ -#endif +#endif /* SLJIT_UTIL_STACK */ diff --git a/ext/pcre/tests/bug79363.phpt b/ext/pcre/tests/bug79363.phpt new file mode 100644 index 0000000000000..fffeb50e3c207 --- /dev/null +++ b/ext/pcre/tests/bug79363.phpt @@ -0,0 +1,11 @@ +--TEST-- +Bug #79363 (\p{L} doesn't work alongside \p{Arabic} in a character class) +--FILE-- + +--EXPECT-- +string(11) "00000 00000" +string(11) "lower0UPPER" diff --git a/ext/pcre/tests/bug79846.phpt b/ext/pcre/tests/bug79846.phpt new file mode 100644 index 0000000000000..b995c38794e13 --- /dev/null +++ b/ext/pcre/tests/bug79846.phpt @@ -0,0 +1,17 @@ +--TEST-- +Bug #79846 (8c67c166996 broke simple regexp) +--FILE-- + +--EXPECT-- +array(3) { + [0]=> + string(17) "component_phase_1" + [1]=> + string(15) "component_phase" + [2]=> + string(1) "1" +} From b0661a96677bf2e1688852ab4260e159dc53d8ea Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 17 Sep 2020 14:23:25 +0200 Subject: [PATCH 30/67] Fix warnings when building against libmysqlclient At least for version 8.0 this is warning free now. --- ext/mysqli/mysqli_api.c | 7 +++---- ext/mysqli/php_mysqli_structs.h | 2 +- ext/pdo_mysql/mysql_driver.c | 16 ++++++++-------- ext/pdo_mysql/php_pdo_mysql_int.h | 2 +- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index f559c3e8f9b84..a22e710c75931 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -370,7 +370,7 @@ mysqli_stmt_bind_result_do_bind(MY_STMT *stmt, zval *args, unsigned int argc) int size; char *p = emalloc(size= var_cnt * (sizeof(char) + sizeof(VAR_BUFFER))); stmt->result.buf = (VAR_BUFFER *) p; - stmt->result.is_null = p + var_cnt * sizeof(VAR_BUFFER); + stmt->result.is_null = (my_bool *) (p + var_cnt * sizeof(VAR_BUFFER)); memset(p, 0, size); } @@ -903,7 +903,6 @@ void mysqli_stmt_fetch_libmysql(INTERNAL_FUNCTION_PARAMETERS) zval *mysql_stmt; unsigned int i; zend_ulong ret; - unsigned int uval; my_ulonglong llval; @@ -940,8 +939,8 @@ void mysqli_stmt_fetch_libmysql(INTERNAL_FUNCTION_PARAMETERS) && (stmt->stmt->fields[i].flags & UNSIGNED_FLAG)) { /* unsigned int (11) */ - uval= *(unsigned int *) stmt->result.buf[i].val; -#if SIZEOF_ZEND_LONG==4 +#if SIZEOF_ZEND_LONG == 4 + unsigned int uval = *(unsigned int *) stmt->result.buf[i].val; if (uval > INT_MAX) { char *tmp, *p; int j = 10; diff --git a/ext/mysqli/php_mysqli_structs.h b/ext/mysqli/php_mysqli_structs.h index 6becb9845f676..ad46511d04c22 100644 --- a/ext/mysqli/php_mysqli_structs.h +++ b/ext/mysqli/php_mysqli_structs.h @@ -68,7 +68,7 @@ typedef struct { unsigned int var_cnt; VAR_BUFFER *buf; zval *vars; - char *is_null; + my_bool *is_null; } BIND_BUFFER; typedef struct { diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c index 9596bdd04f45c..8c6f6a37f1d7b 100644 --- a/ext/pdo_mysql/mysql_driver.c +++ b/ext/pdo_mysql/mysql_driver.c @@ -353,7 +353,7 @@ static int mysql_handle_rollback(pdo_dbh_t *dbh) { PDO_DBG_ENTER("mysql_handle_rollback"); PDO_DBG_INF_FMT("dbh=%p", dbh); - PDO_DBG_RETURN(0 <= mysql_rollback(((pdo_mysql_db_handle *)dbh->driver_data)->server)); + PDO_DBG_RETURN(0 == mysql_rollback(((pdo_mysql_db_handle *)dbh->driver_data)->server)); } /* }}} */ @@ -363,7 +363,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); - PDO_DBG_RETURN(0 <= mysql_autocommit(((pdo_mysql_db_handle *)dbh->driver_data)->server, dbh->auto_commit)); + PDO_DBG_RETURN(0 == mysql_autocommit(((pdo_mysql_db_handle *)dbh->driver_data)->server, dbh->auto_commit)); } /* }}} */ @@ -515,11 +515,11 @@ static int pdo_mysql_check_liveness(pdo_dbh_t *dbh) /* {{{ pdo_mysql_request_shutdown */ static void pdo_mysql_request_shutdown(pdo_dbh_t *dbh) { - pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data; - PDO_DBG_ENTER("pdo_mysql_request_shutdown"); PDO_DBG_INF_FMT("dbh=%p", dbh); + #ifdef PDO_USE_MYSQLND + pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data; if (H->server) { mysqlnd_end_psession(H->server); } @@ -634,7 +634,6 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* handle MySQL options */ if (driver_options) { zend_long connect_timeout = pdo_attr_lval(driver_options, PDO_ATTR_TIMEOUT, 30); - unsigned int local_infile = (unsigned int) pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_LOCAL_INFILE, 0); zend_string *init_cmd = NULL; #ifndef PDO_USE_MYSQLND zend_string *default_file = NULL, *default_group = NULL; @@ -668,12 +667,13 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options) goto cleanup; } -#ifndef PDO_USE_MYSQLND +#if defined(MYSQL_OPT_LOCAL_INFILE) || defined(PDO_USE_MYSQLND) + unsigned int local_infile = (unsigned int) pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_LOCAL_INFILE, 0); +# ifndef PDO_USE_MYSQLND if (PG(open_basedir) && PG(open_basedir)[0] != '\0') { local_infile = 0; } -#endif -#if defined(MYSQL_OPT_LOCAL_INFILE) || defined(PDO_USE_MYSQLND) +# endif if (mysql_options(H->server, MYSQL_OPT_LOCAL_INFILE, (const char *)&local_infile)) { pdo_mysql_error(dbh); goto cleanup; diff --git a/ext/pdo_mysql/php_pdo_mysql_int.h b/ext/pdo_mysql/php_pdo_mysql_int.h index 3957a6c824fe8..cfe1d68e495de 100644 --- a/ext/pdo_mysql/php_pdo_mysql_int.h +++ b/ext/pdo_mysql/php_pdo_mysql_int.h @@ -123,7 +123,7 @@ typedef struct { #ifdef PDO_USE_MYSQLND const size_t *current_lengths; #else - zend_long *current_lengths; + unsigned long *current_lengths; #endif pdo_mysql_error_info einfo; #ifdef PDO_USE_MYSQLND From e2b3c0e291c6fb80e8057cc06bfe16567ea2c006 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 17 Sep 2020 14:58:20 +0200 Subject: [PATCH 31/67] Remove checks for old libmysqlclient versions in tests --- ext/mysqli/tests/013.phpt | 3 - ext/mysqli/tests/067.phpt | 12 +- ext/mysqli/tests/mysqli_constants.phpt | 46 ++-- ext/mysqli/tests/mysqli_fetch_array.phpt | 4 +- ext/mysqli/tests/mysqli_fetch_array_oo.phpt | 4 +- ext/mysqli/tests/mysqli_fetch_assoc_bit.phpt | 3 - .../tests/mysqli_fetch_field_types.phpt | 14 +- ext/mysqli/tests/mysqli_stmt_attr_get.phpt | 11 +- ext/mysqli/tests/mysqli_stmt_attr_set.phpt | 233 +++++++++--------- ext/mysqli/tests/mysqli_stmt_fetch_bit.phpt | 3 - .../tests/mysqli_stmt_get_result_bit.phpt | 3 - 11 files changed, 142 insertions(+), 194 deletions(-) diff --git a/ext/mysqli/tests/013.phpt b/ext/mysqli/tests/013.phpt index 2361622c46fa3..21cb6a949e873 100644 --- a/ext/mysqli/tests/013.phpt +++ b/ext/mysqli/tests/013.phpt @@ -46,9 +46,6 @@ require_once('skipifconnectfailure.inc'); $test .= ($c[$i] == $d[$i]) ? "1" : "0"; if ($test == "11111111") echo "ok\n"; - else if ($b_res == FALSE && mysqli_get_client_version() > 40100 && mysqli_get_client_version() < 50000 && - mysqli_get_server_version($link) > 50000) - echo "error (4.1 library with 5.x server)"; else echo "error"; diff --git a/ext/mysqli/tests/067.phpt b/ext/mysqli/tests/067.phpt index 8698b94c94794..1560f76522bfe 100644 --- a/ext/mysqli/tests/067.phpt +++ b/ext/mysqli/tests/067.phpt @@ -9,11 +9,10 @@ function test: nested selects (cursors) if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) die("skip Cannot connect to check required version"); - /* skip cursor test for versions < 50004 */ - if ((!$IS_MYSQLND && (mysqli_get_client_version() < 50009)) || - (mysqli_get_server_version($link) < 50009)) { - die(sprintf("skip Client library doesn't support cursors (%s/%s)", - mysqli_get_client_version(), mysqli_get_server_version($link))); + /* skip cursor test for server versions < 50009 */ + if (mysqli_get_server_version($link) < 50009) { + die(sprintf("skip Server doesn't support cursors (%s)", + mysqli_get_server_version($link))); } mysqli_close($link); ?> @@ -32,8 +31,7 @@ function test: nested selects (cursors) require_once("connect.inc"); $mysql = new my_mysqli($host, $user, $passwd, $db, $port, $socket); - if ((!$IS_MYSQLND && mysqli_get_client_version() < 50009) || - (mysqli_get_server_version($mysql) < 50009)) { + if (mysqli_get_server_version($mysql) < 50009) { /* we really want to skip it... */ die(var_dump(63)); } diff --git a/ext/mysqli/tests/mysqli_constants.phpt b/ext/mysqli/tests/mysqli_constants.phpt index b281a9c9c5dea..376dc4f93fe91 100644 --- a/ext/mysqli/tests/mysqli_constants.phpt +++ b/ext/mysqli/tests/mysqli_constants.phpt @@ -139,9 +139,7 @@ mysqli.allow_local_infile=1 $expected_constants['MYSQLI_SERVER_QUERY_WAS_SLOW'] = true; } - if ($version >= 50033 || $IS_MYSQLND) { - $expected_constants['MYSQLI_CLIENT_SSL_VERIFY_SERVER_CERT'] = true; - } + $expected_constants['MYSQLI_CLIENT_SSL_VERIFY_SERVER_CERT'] = true; if ($IS_MYSQLND) { $expected_constants['MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT'] = true; } @@ -151,36 +149,26 @@ mysqli.allow_local_infile=1 $expected_constants['MYSQLI_SERVER_PUBLIC_KEY'] = true; } - if ($version > 50002) { - $expected_constants = array_merge($expected_constants, array( - "MYSQLI_TYPE_NEWDECIMAL" => true, - "MYSQLI_TYPE_BIT" => true, - )); - } + $expected_constants = array_merge($expected_constants, array( + "MYSQLI_TYPE_NEWDECIMAL" => true, + "MYSQLI_TYPE_BIT" => true, + )); - if ($version > 50002 || $IS_MYSQLND) { - $expected_constants['MYSQLI_NO_DEFAULT_VALUE_FLAG'] = true; - } + $expected_constants['MYSQLI_NO_DEFAULT_VALUE_FLAG'] = true; - if ($version > 50003) { - $expected_constants = array_merge($expected_constants, array( - "MYSQLI_STMT_ATTR_CURSOR_TYPE" => true, - "MYSQLI_CURSOR_TYPE_NO_CURSOR" => true, - "MYSQLI_CURSOR_TYPE_READ_ONLY" => true, - "MYSQLI_CURSOR_TYPE_FOR_UPDATE" => true, - "MYSQLI_CURSOR_TYPE_SCROLLABLE" => true, - )); - } + $expected_constants = array_merge($expected_constants, array( + "MYSQLI_STMT_ATTR_CURSOR_TYPE" => true, + "MYSQLI_CURSOR_TYPE_NO_CURSOR" => true, + "MYSQLI_CURSOR_TYPE_READ_ONLY" => true, + "MYSQLI_CURSOR_TYPE_FOR_UPDATE" => true, + "MYSQLI_CURSOR_TYPE_SCROLLABLE" => true, + )); - if ($version > 50007) { - $expected_constants = array_merge($expected_constants, array( - "MYSQLI_STMT_ATTR_PREFETCH_ROWS" => true, - )); - } + $expected_constants = array_merge($expected_constants, array( + "MYSQLI_STMT_ATTR_PREFETCH_ROWS" => true, + )); - if ($version > 50110 || $IS_MYSQLND) { - $expected_constants['MYSQLI_OPT_SSL_VERIFY_SERVER_CERT'] = true; - } + $expected_constants['MYSQLI_OPT_SSL_VERIFY_SERVER_CERT'] = true; /* pretty dump test, but that is the best way to mimic mysql.c */ if (defined('MYSQLI_DATA_TRUNCATED')) diff --git a/ext/mysqli/tests/mysqli_fetch_array.phpt b/ext/mysqli/tests/mysqli_fetch_array.phpt index fe1c6b94cac8a..ce7053cfe1417 100644 --- a/ext/mysqli/tests/mysqli_fetch_array.phpt +++ b/ext/mysqli/tests/mysqli_fetch_array.phpt @@ -174,9 +174,7 @@ require_once('skipifconnectfailure.inc'); func_mysqli_fetch_array($link, $engine, "INTEGER UNSIGNED", "4294967295", "4294967295", 230); func_mysqli_fetch_array($link, $engine, "INTEGER UNSIGNED", NULL, NULL, 240); - if ($IS_MYSQLND || - ((mysqli_get_server_version($link) >= 51000) && - (mysqli_get_client_version($link) >= 51000))) { + if ($IS_MYSQLND || mysqli_get_server_version($link) >= 51000) { func_mysqli_fetch_array($link, $engine, "BIGINT", "-9223372036854775808", "-9223372036854775808", 250); func_mysqli_fetch_array($link, $engine, "BIGINT", NULL, NULL, 260); func_mysqli_fetch_array($link, $engine, "BIGINT UNSIGNED", "18446744073709551615", "18446744073709551615", 260); diff --git a/ext/mysqli/tests/mysqli_fetch_array_oo.phpt b/ext/mysqli/tests/mysqli_fetch_array_oo.phpt index 616be43e8b110..4ef3281203703 100644 --- a/ext/mysqli/tests/mysqli_fetch_array_oo.phpt +++ b/ext/mysqli/tests/mysqli_fetch_array_oo.phpt @@ -169,9 +169,7 @@ require_once('skipifconnectfailure.inc'); func_mysqli_fetch_array($mysqli, $engine, "INTEGER UNSIGNED", "4294967295", "4294967295", 230); func_mysqli_fetch_array($mysqli, $engine, "INTEGER UNSIGNED", NULL, NULL, 240); - if ($IS_MYSQLND || - ((mysqli_get_server_version($link) >= 51000) && - (mysqli_get_client_version($link) >= 51000))) { + if ($IS_MYSQLND || mysqli_get_server_version($link) >= 51000) { func_mysqli_fetch_array($mysqli, $engine, "BIGINT", "-9223372036854775808", "-9223372036854775808", 250); func_mysqli_fetch_array($mysqli, $engine, "BIGINT", NULL, NULL, 260); func_mysqli_fetch_array($mysqli, $engine, "BIGINT UNSIGNED", "18446744073709551615", "18446744073709551615", 270); diff --git a/ext/mysqli/tests/mysqli_fetch_assoc_bit.phpt b/ext/mysqli/tests/mysqli_fetch_assoc_bit.phpt index 60c635995a2b3..1116c38d45905 100644 --- a/ext/mysqli/tests/mysqli_fetch_assoc_bit.phpt +++ b/ext/mysqli/tests/mysqli_fetch_assoc_bit.phpt @@ -11,9 +11,6 @@ mysqli_fetch_assoc() - BIT if (mysqli_get_server_version($link) < 50003) // b'001' syntax not supported before 5.0.3 die("skip Syntax used for test not supported with MySQL Server before 5.0.3"); - if (!$IS_MYSQLND && (mysqli_get_client_version() < 50003)) - // better don't trust libmysql before 5.0.3 - die("skip Syntax used for test not supported with MySQL Server before 5.0.3"); ?> --FILE-- 'MYSQLI_TYPE_GEOMETRY - TODO add testing', ); - if ($IS_MYSQLND) { - $version = 50007 + 1; - } else { - $version = mysqli_get_client_version(); - } - - if ($version > 50002) { - $datatypes[MYSQLI_TYPE_NEWDECIMAL] = array('DECIMAL', '1.1'); - $datatypes[MYSQLI_TYPE_BIT] = array('BIT', 0); - } else { - $datatypes[MYSQLI_TYPE_DECIMAL] = array('DECIMAL', '1.1'); - } + $datatypes[MYSQLI_TYPE_NEWDECIMAL] = array('DECIMAL', '1.1'); + $datatypes[MYSQLI_TYPE_BIT] = array('BIT', 0); foreach ($datatypes as $php_type => $datatype) { if (is_array($datatype)) diff --git a/ext/mysqli/tests/mysqli_stmt_attr_get.phpt b/ext/mysqli/tests/mysqli_stmt_attr_get.phpt index 6179155e777b1..ec3cf3d8d0a5a 100644 --- a/ext/mysqli/tests/mysqli_stmt_attr_get.phpt +++ b/ext/mysqli/tests/mysqli_stmt_attr_get.phpt @@ -12,12 +12,11 @@ require_once('skipifconnectfailure.inc'); require('table.inc'); - $valid_attr = array("max_length" => MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH); - if (mysqli_get_client_version() > 50003) - $valid_attr["cursor_type"] = MYSQLI_STMT_ATTR_CURSOR_TYPE; - - if ($IS_MYSQLND && mysqli_get_client_version() > 50007) - $valid_attr["prefetch_rows"] = MYSQLI_STMT_ATTR_PREFETCH_ROWS; + $valid_attr = array( + "max_length" => MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH, + "cursor_type" => MYSQLI_STMT_ATTR_CURSOR_TYPE, + "prefetch_rows" => MYSQLI_STMT_ATTR_PREFETCH_ROWS, + ); $stmt = mysqli_stmt_init($link); mysqli_stmt_prepare($stmt, 'SELECT * FROM test'); diff --git a/ext/mysqli/tests/mysqli_stmt_attr_set.phpt b/ext/mysqli/tests/mysqli_stmt_attr_set.phpt index 870960e602f9a..6e4267e6fb054 100644 --- a/ext/mysqli/tests/mysqli_stmt_attr_set.phpt +++ b/ext/mysqli/tests/mysqli_stmt_attr_set.phpt @@ -13,16 +13,12 @@ require_once("connect.inc"); require('table.inc'); $valid_attr = array(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH); - if ((mysqli_get_client_version() > 50003) || $IS_MYSQLND) { - $valid_attr[] = MYSQLI_STMT_ATTR_CURSOR_TYPE; - $valid_attr[] = MYSQLI_CURSOR_TYPE_NO_CURSOR; - $valid_attr[] = MYSQLI_CURSOR_TYPE_READ_ONLY; - $valid_attr[] = MYSQLI_CURSOR_TYPE_FOR_UPDATE; - $valid_attr[] = MYSQLI_CURSOR_TYPE_SCROLLABLE; - } - - if ((mysqli_get_client_version() > 50007) || $IS_MYSQLND) - $valid_attr[] = MYSQLI_STMT_ATTR_PREFETCH_ROWS; + $valid_attr[] = MYSQLI_STMT_ATTR_CURSOR_TYPE; + $valid_attr[] = MYSQLI_CURSOR_TYPE_NO_CURSOR; + $valid_attr[] = MYSQLI_CURSOR_TYPE_READ_ONLY; + $valid_attr[] = MYSQLI_CURSOR_TYPE_FOR_UPDATE; + $valid_attr[] = MYSQLI_CURSOR_TYPE_SCROLLABLE; + $valid_attr[] = MYSQLI_STMT_ATTR_PREFETCH_ROWS; $stmt = mysqli_stmt_init($link); @@ -110,78 +106,75 @@ require_once("connect.inc"); // Cursors // - if (mysqli_get_client_version() > 50003) { - - $stmt = mysqli_stmt_init($link); - $stmt->prepare("SELECT id, label FROM test"); - // Invalid cursor type - try { - $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, -1); - } catch (\ValueError $e) { - echo $e->getMessage() . \PHP_EOL; - } + $stmt = mysqli_stmt_init($link); + $stmt->prepare("SELECT id, label FROM test"); - if (false !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_FOR_UPDATE))) - printf("[011] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); + // Invalid cursor type + try { + $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, -1); + } catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; + } - if (false !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_SCROLLABLE))) - printf("[012] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); + if (false !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_FOR_UPDATE))) + printf("[011] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); - if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_NO_CURSOR))) - printf("[013] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp); + if (false !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_SCROLLABLE))) + printf("[012] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); - if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY))) - printf("[014] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp); + if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_NO_CURSOR))) + printf("[013] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp); - $stmt->close(); + if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY))) + printf("[014] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp); - $stmt = mysqli_stmt_init($link); - $stmt->prepare("SELECT id, label FROM test"); - $stmt->execute(); - $id = $label = NULL; - $stmt->bind_result($id, $label); - $results = array(); - while ($stmt->fetch()) - $results[$id] = $label; - $stmt->close(); - if (empty($results)) - printf("[015] Results should not be empty, subsequent tests will probably fail!\n"); + $stmt->close(); - $stmt = mysqli_stmt_init($link); - $stmt->prepare("SELECT id, label FROM test"); - if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_NO_CURSOR))) - printf("[016] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp); - $stmt->execute(); - $id = $label = NULL; - $stmt->bind_result($id, $label); - $results2 = array(); - while ($stmt->fetch()) - $results2[$id] = $label; - $stmt->close(); - if ($results != $results2) { - printf("[017] Results should not differ. Dumping both result sets.\n"); - var_dump($results); - var_dump($results2); - } + $stmt = mysqli_stmt_init($link); + $stmt->prepare("SELECT id, label FROM test"); + $stmt->execute(); + $id = $label = NULL; + $stmt->bind_result($id, $label); + $results = array(); + while ($stmt->fetch()) + $results[$id] = $label; + $stmt->close(); + if (empty($results)) + printf("[015] Results should not be empty, subsequent tests will probably fail!\n"); - $stmt = mysqli_stmt_init($link); - $stmt->prepare("SELECT id, label FROM test"); - if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY))) - printf("[018] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp); - $stmt->execute(); - $id = $label = NULL; - $stmt->bind_result($id, $label); - $results2 = array(); - while ($stmt->fetch()) - $results2[$id] = $label; - $stmt->close(); - if ($results != $results2) { - printf("[019] Results should not differ. Dumping both result sets.\n"); - var_dump($results); - var_dump($results2); - } + $stmt = mysqli_stmt_init($link); + $stmt->prepare("SELECT id, label FROM test"); + if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_NO_CURSOR))) + printf("[016] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp); + $stmt->execute(); + $id = $label = NULL; + $stmt->bind_result($id, $label); + $results2 = array(); + while ($stmt->fetch()) + $results2[$id] = $label; + $stmt->close(); + if ($results != $results2) { + printf("[017] Results should not differ. Dumping both result sets.\n"); + var_dump($results); + var_dump($results2); + } + $stmt = mysqli_stmt_init($link); + $stmt->prepare("SELECT id, label FROM test"); + if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY))) + printf("[018] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp); + $stmt->execute(); + $id = $label = NULL; + $stmt->bind_result($id, $label); + $results2 = array(); + while ($stmt->fetch()) + $results2[$id] = $label; + $stmt->close(); + if ($results != $results2) { + printf("[019] Results should not differ. Dumping both result sets.\n"); + var_dump($results); + var_dump($results2); } @@ -189,61 +182,57 @@ require_once("connect.inc"); // MYSQLI_STMT_ATTR_PREFETCH_ROWS // - if (mysqli_get_client_version() > 50007) { - - $stmt = mysqli_stmt_init($link); - $stmt->prepare("SELECT id, label FROM test"); - // Invalid prefetch value - try { - $stmt->attr_set(MYSQLI_STMT_ATTR_PREFETCH_ROWS, 0); - } catch (\ValueError $e) { - echo $e->getMessage() . \PHP_EOL; - } - - if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_PREFETCH_ROWS, 1))) - printf("[020] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp); - $stmt->execute(); - $id = $label = NULL; - $stmt->bind_result($id, $label); - $results = array(); - while ($stmt->fetch()) - $results[$id] = $label; - $stmt->close(); - if (empty($results)) - printf("[021] Results should not be empty, subsequent tests will probably fail!\n"); + $stmt = mysqli_stmt_init($link); + $stmt->prepare("SELECT id, label FROM test"); + // Invalid prefetch value + try { + $stmt->attr_set(MYSQLI_STMT_ATTR_PREFETCH_ROWS, 0); + } catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; + } - /* prefetch is not supported - $stmt = mysqli_stmt_init($link); - $stmt->prepare("SELECT label FROM test"); - if (false !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_PREFETCH_ROWS, -1))) - printf("[022] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); - $stmt->close(); + if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_PREFETCH_ROWS, 1))) + printf("[020] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp); + $stmt->execute(); + $id = $label = NULL; + $stmt->bind_result($id, $label); + $results = array(); + while ($stmt->fetch()) + $results[$id] = $label; + $stmt->close(); + if (empty($results)) + printf("[021] Results should not be empty, subsequent tests will probably fail!\n"); - $stmt = mysqli_stmt_init($link); - $stmt->prepare("SELECT label FROM test"); - if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_PREFETCH_ROWS, PHP_INT_MAX))) - printf("[023] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp); - $stmt->close(); + /* prefetch is not supported + $stmt = mysqli_stmt_init($link); + $stmt->prepare("SELECT label FROM test"); + if (false !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_PREFETCH_ROWS, -1))) + printf("[022] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); + $stmt->close(); - $stmt = mysqli_stmt_init($link); - $stmt->prepare("SELECT id, label FROM test"); - if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_PREFETCH_ROWS, 2))) - printf("[024] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp); - $stmt->execute(); - $id = $label = NULL; - $stmt->bind_result($id, $label); - $results2 = array(); - while ($stmt->fetch()) - $results2[$id] = $label; - $stmt->close(); - if ($results != $results2) { - printf("[025] Results should not differ. Dumping both result sets.\n"); - var_dump($results); - var_dump($results2); - } - */ + $stmt = mysqli_stmt_init($link); + $stmt->prepare("SELECT label FROM test"); + if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_PREFETCH_ROWS, PHP_INT_MAX))) + printf("[023] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp); + $stmt->close(); + $stmt = mysqli_stmt_init($link); + $stmt->prepare("SELECT id, label FROM test"); + if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_PREFETCH_ROWS, 2))) + printf("[024] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp); + $stmt->execute(); + $id = $label = NULL; + $stmt->bind_result($id, $label); + $results2 = array(); + while ($stmt->fetch()) + $results2[$id] = $label; + $stmt->close(); + if ($results != $results2) { + printf("[025] Results should not differ. Dumping both result sets.\n"); + var_dump($results); + var_dump($results2); } + */ mysqli_close($link); print "done!"; diff --git a/ext/mysqli/tests/mysqli_stmt_fetch_bit.phpt b/ext/mysqli/tests/mysqli_stmt_fetch_bit.phpt index b3c74e4af2fdb..3cbe8e4ee28f4 100644 --- a/ext/mysqli/tests/mysqli_stmt_fetch_bit.phpt +++ b/ext/mysqli/tests/mysqli_stmt_fetch_bit.phpt @@ -10,9 +10,6 @@ Fetching BIT column values using the PS API if (mysqli_get_server_version($link) < 50003) // b'001' syntax not supported before 5.0.3 die("skip Syntax used for test not supported with MySQL Server before 5.0.3"); - if (!$IS_MYSQLND && (mysqli_get_client_version() < 50003)) - // better don't trust libmysql before 5.0.3 - die("skip Syntax used for test not supported with MySQL Server before 5.0.3"); ?> --FILE-- --FILE-- Date: Thu, 17 Sep 2020 14:49:25 +0200 Subject: [PATCH 32/67] Fix some tests for libmysql --- ext/mysqli/tests/bug51647.phpt | 3 +++ ext/mysqli/tests/bug55283.phpt | 3 +++ ext/mysqli/tests/bug74968.phpt | 2 +- ext/mysqli/tests/mysqli_constants.phpt | 4 +++- ext/mysqli/tests/mysqli_query.phpt | 4 ++-- ext/pdo_mysql/tests/bug70389.phpt | 4 ++-- 6 files changed, 14 insertions(+), 6 deletions(-) diff --git a/ext/mysqli/tests/bug51647.phpt b/ext/mysqli/tests/bug51647.phpt index 8fd107a95d598..ecae650c1ba28 100644 --- a/ext/mysqli/tests/bug51647.phpt +++ b/ext/mysqli/tests/bug51647.phpt @@ -6,6 +6,9 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); require_once("connect.inc"); +if (!defined('MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT')) + die("skip Requires MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT"); + if ($IS_MYSQLND && !extension_loaded("openssl")) die("skip PHP streams lack support for SSL. mysqli is compiled to use mysqlnd which uses PHP streams in turn."); diff --git a/ext/mysqli/tests/bug55283.phpt b/ext/mysqli/tests/bug55283.phpt index 306a4af156a33..023b9f424d022 100644 --- a/ext/mysqli/tests/bug55283.phpt +++ b/ext/mysqli/tests/bug55283.phpt @@ -6,6 +6,9 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); require_once("connect.inc"); +if (!defined('MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT')) + die("skip Requires MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT"); + if ($IS_MYSQLND && !extension_loaded("openssl")) die("skip PHP streams lack support for SSL. mysqli is compiled to use mysqlnd which uses PHP streams in turn."); diff --git a/ext/mysqli/tests/bug74968.phpt b/ext/mysqli/tests/bug74968.phpt index c009f864510ee..c563c2c56dcaf 100644 --- a/ext/mysqli/tests/bug74968.phpt +++ b/ext/mysqli/tests/bug74968.phpt @@ -9,7 +9,7 @@ require_once('skipifconnectfailure.inc'); true, )); - $expected_constants['MYSQLI_OPT_SSL_VERIFY_SERVER_CERT'] = true; + if ($version < 80000 || $version >= 100000 || $IS_MYSQLND) { + $expected_constants['MYSQLI_OPT_SSL_VERIFY_SERVER_CERT'] = true; + } /* pretty dump test, but that is the best way to mimic mysql.c */ if (defined('MYSQLI_DATA_TRUNCATED')) diff --git a/ext/mysqli/tests/mysqli_query.phpt b/ext/mysqli/tests/mysqli_query.phpt index daac374cf7976..b291306faff28 100644 --- a/ext/mysqli/tests/mysqli_query.phpt +++ b/ext/mysqli/tests/mysqli_query.phpt @@ -115,7 +115,7 @@ if (!mysqli_query($link, "DROP TABLE IF EXISTS test")) mysqli_close($link); ?> ---EXPECT-- +--EXPECTF-- mysqli_query(): Argument #2 ($query) cannot be empty array(1) { ["valid"]=> @@ -126,6 +126,6 @@ array(1) { string(1) "a" } string(1) "a" -mysqli_query(): Argument #3 ($result_mode) must be either MYSQLI_USE_RESULT, or MYSQLI_STORE_RESULT with MYSQLI_ASYNC as an optional bitmask flag +mysqli_query(): Argument #3 ($result_mode) must be either MYSQLI_USE_RESULT, or MYSQLI_STORE_RESULT%S mysqli object is already closed done! diff --git a/ext/pdo_mysql/tests/bug70389.phpt b/ext/pdo_mysql/tests/bug70389.phpt index f2be259543b22..7815b21255740 100644 --- a/ext/pdo_mysql/tests/bug70389.phpt +++ b/ext/pdo_mysql/tests/bug70389.phpt @@ -22,9 +22,9 @@ new PDO(PDO_MYSQL_TEST_DSN, PDO_MYSQL_TEST_USER, PDO_MYSQL_TEST_PASS, $flags); var_dump($flags); ?> ---EXPECT-- +--EXPECTF-- array(3) { - [1005]=> + [%d]=> bool(true) [1001]=> bool(true) From c3944c4c4f66188e6dd5a6ed0f9e1364c701b736 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 17 Sep 2020 15:59:09 +0200 Subject: [PATCH 33/67] Fix mysqli_release_savepoint() on mysqlnd mysqli_release_savepoint() was not actually releasing a savepoint... --- ext/mysqli/mysqli_nonapi.c | 2 +- ext/mysqli/tests/mysqli_release_savepoint.phpt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 0d4a1704cd06b..3d0240183a8dd 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -1234,7 +1234,7 @@ PHP_FUNCTION(mysqli_release_savepoint) #if !defined(MYSQLI_USE_MYSQLND) if (mysqli_savepoint_libmysql(mysql->mysql, name, TRUE)) { #else - if (FAIL == mysqlnd_savepoint(mysql->mysql, name)) { + if (FAIL == mysqlnd_release_savepoint(mysql->mysql, name)) { #endif RETURN_FALSE; } diff --git a/ext/mysqli/tests/mysqli_release_savepoint.phpt b/ext/mysqli/tests/mysqli_release_savepoint.phpt index e6417288d4d2e..8f395ef6f81e3 100644 --- a/ext/mysqli/tests/mysqli_release_savepoint.phpt +++ b/ext/mysqli/tests/mysqli_release_savepoint.phpt @@ -50,7 +50,7 @@ if (!have_innodb($link)) printf("[009] Cannot turn off autocommit, expecting true, got %s/%s\n", gettype($tmp), $tmp); /* note that there is no savepoint my... */ - if (true !== ($tmp = mysqli_release_savepoint($link, 'my'))) + if (false !== ($tmp = mysqli_release_savepoint($link, 'my'))) printf("[010] Got %s - [%d] %s\n", var_dump($tmp, true), mysqli_errno($link), mysqli_error($link)); if (!mysqli_query($link, 'INSERT INTO test(id) VALUES (1)')) From f3ea88bff7022bb3574578fcffe1ed334e17d8d3 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Thu, 17 Sep 2020 16:16:44 +0200 Subject: [PATCH 34/67] Fix bundled libpcre2 build regarding the `-fcf-protection` gcc flag Cf. . --- ext/pcre/config0.m4 | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/ext/pcre/config0.m4 b/ext/pcre/config0.m4 index 714a8d57e8a86..7e57201954885 100644 --- a/ext/pcre/config0.m4 +++ b/ext/pcre/config0.m4 @@ -68,9 +68,6 @@ else pcre2lib/pcre2_tables.c pcre2lib/pcre2_ucd.c pcre2lib/pcre2_valid_utf.c pcre2lib/pcre2_xclass.c \ pcre2lib/pcre2_find_bracket.c pcre2lib/pcre2_convert.c pcre2lib/pcre2_extuni.c pcre2lib/pcre2_script_run.c" PHP_PCRE_CFLAGS="-DHAVE_CONFIG_H -I@ext_srcdir@/pcre2lib -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1" - PHP_NEW_EXTENSION(pcre, $pcrelib_sources php_pcre.c, no,,$PHP_PCRE_CFLAGS) - PHP_ADD_BUILD_DIR($ext_builddir/pcre2lib) - PHP_INSTALL_HEADERS([ext/pcre], [php_pcre.h pcre2lib/]) AC_DEFINE(HAVE_BUNDLED_PCRE, 1, [ ]) AC_DEFINE(PCRE2_CODE_UNIT_WIDTH, 8, [ ]) @@ -78,10 +75,31 @@ else if test "$PHP_PCRE_JIT" != "no"; then AC_DEFINE(HAVE_PCRE_JIT_SUPPORT, 1, [ ]) AC_MSG_RESULT([yes]) + + AC_CACHE_CHECK([whether Intel CET is enabled], ac_cv_have_pcre2_intel_cet, [ + AC_COMPILE_IFELSE([ + AC_LANG_SOURCE([[ + #ifndef __CET__ + # error CET is not enabled + #endif + ]])], [ + ac_cv_have_pcre2_intel_cet=yes + ], [ + ac_cv_have_pcre2_intel_cet=no + ]) + if test "$ac_cv_have_pcre2_intel_cet" = yes; then + PHP_PCRE_CFLAGS="-mshstk $PHP_PCRE_CFLAGS" + fi + ]) + else AC_MSG_RESULT([no]) fi + PHP_NEW_EXTENSION(pcre, $pcrelib_sources php_pcre.c, no,,$PHP_PCRE_CFLAGS) + PHP_ADD_BUILD_DIR($ext_builddir/pcre2lib) + PHP_INSTALL_HEADERS([ext/pcre], [php_pcre.h pcre2lib/]) + if test "$PHP_VALGRIND" != "no" && test "$have_valgrind" = "yes"; then dnl Enable pcre valgrind support only in DEBUG build (it affects performance) if test "$ZEND_DEBUG" = "yes"; then From 95f2583743bdd758d8dbdc7e23e08a4a2d39e8da Mon Sep 17 00:00:00 2001 From: Sara Golemon Date: Tue, 15 Sep 2020 15:36:36 +0000 Subject: [PATCH 35/67] Allow http tests to run in parallel by using ephemeral ports --- ext/soap/tests/bug47021.phpt | 14 ++-- ext/standard/tests/http/CONFLICTS | 1 - ext/standard/tests/http/bug38802.phpt | 66 ++++++++++--------- ext/standard/tests/http/bug43510.phpt | 6 +- ext/standard/tests/http/bug47021.phpt | 8 +-- ext/standard/tests/http/bug48929.phpt | 10 +-- ext/standard/tests/http/bug53198.phpt | 10 +-- ext/standard/tests/http/bug60570.phpt | 12 ++-- ext/standard/tests/http/bug61548.phpt | 32 ++++----- ext/standard/tests/http/bug65634.phpt | 22 +++---- ext/standard/tests/http/bug67430.phpt | 14 ++-- ext/standard/tests/http/bug69337.phpt | 10 +-- ext/standard/tests/http/bug73297.phpt | 7 +- ext/standard/tests/http/bug75535.phpt | 8 +-- ext/standard/tests/http/bug75981.phpt | 6 +- ext/standard/tests/http/bug76342.phpt | 8 +-- ext/standard/tests/http/bug79265.phpt | 7 +- ext/standard/tests/http/bug79265_2.phpt | 11 ++-- .../tests/http/http_response_header_01.phpt | 15 ++--- .../tests/http/http_response_header_02.phpt | 19 +++--- .../tests/http/http_response_header_03.phpt | 21 +++--- .../tests/http/http_response_header_04.phpt | 15 ++--- .../tests/http/http_response_header_05.phpt | 15 ++--- ext/standard/tests/http/ignore_errors.phpt | 20 +++--- ext/standard/tests/http/server.inc | 38 ++++++----- ext/standard/tests/network/http-stream.phpt | 8 +-- 26 files changed, 193 insertions(+), 210 deletions(-) delete mode 100644 ext/standard/tests/http/CONFLICTS diff --git a/ext/soap/tests/bug47021.phpt b/ext/soap/tests/bug47021.phpt index 757e74ef15ee3..b05505dd19ed7 100644 --- a/ext/soap/tests/bug47021.phpt +++ b/ext/soap/tests/bug47021.phpt @@ -4,12 +4,9 @@ Bug #47021 SoapClient (SoapClient stumbles over WSDL delivered with "Transfer-En soap.wsdl_cache_enabled=0 --SKIPIF-- +require __DIR__.'/../../standard/tests/http/server.inc'; +http_server_skipif(); --FILE-- $pid, 'uri' => $uri] = http_server($responses); $options = [ 'trace' => true, - 'location' => 'http://127.0.0.1:12342/', + 'location' => $uri, ]; class BugSoapClient extends SoapClient @@ -68,13 +65,12 @@ class BugSoapClient extends SoapClient } } -$client = new BugSoapClient('http://127.0.0.1:12342/', $options); +$client = new BugSoapClient($uri, $options); var_dump(count($client->getItems())); http_server_kill($pid); -?> --EXPECT-- int(1291) int(10) diff --git a/ext/standard/tests/http/CONFLICTS b/ext/standard/tests/http/CONFLICTS deleted file mode 100644 index 254defddb53c5..0000000000000 --- a/ext/standard/tests/http/CONFLICTS +++ /dev/null @@ -1 +0,0 @@ -server diff --git a/ext/standard/tests/http/bug38802.phpt b/ext/standard/tests/http/bug38802.phpt index dc00a834c1807..1d7dc4d2d9928 100644 --- a/ext/standard/tests/http/bug38802.phpt +++ b/ext/standard/tests/http/bug38802.phpt @@ -3,25 +3,27 @@ Bug #38802 (ignore_errors and max_redirects) --INI-- allow_url_fopen=1 --SKIPIF-- - + $context_options)); - $responses = array( - "data://text/plain,HTTP/1.1 302 Moved Temporarily\r\nLocation: http://127.0.0.1:12342/foo/bar2\r\n\r\n1", - "data://text/plain,HTTP/1.1 301 Moved Permanently\r\nLocation: http://127.0.0.1:12342/foo/bar3\r\n\r\n", - "data://text/plain,HTTP/1.1 302 Moved Temporarily\r\nLocation: http://127.0.0.1:12342/foo/bar4\r\n\r\n3", - "data://text/plain,HTTP/1.1 200 OK\r\n\r\ndone.", - ); - - $pid = http_server("tcp://127.0.0.1:12342", $responses, $output); + $uri = null; + ['pid' => $pid, 'uri' => $uri ] = http_server('genResponses', $output); - $fd = fopen('http://127.0.0.1:12342/foo/bar', 'rb', false, $context); + $fd = fopen("$uri/foo/bar", 'rb', false, $context); var_dump($fd); if ($fd) { @@ -73,64 +75,64 @@ array(7) { [0]=> string(30) "HTTP/1.1 302 Moved Temporarily" [1]=> - string(41) "Location: http://127.0.0.1:12342/foo/bar2" + string(%d) "Location: http://%s:%d/foo/bar2" [2]=> string(30) "HTTP/1.1 301 Moved Permanently" [3]=> - string(41) "Location: http://127.0.0.1:12342/foo/bar3" + string(%d) "Location: http://%s:%d/foo/bar3" [4]=> string(30) "HTTP/1.1 302 Moved Temporarily" [5]=> - string(41) "Location: http://127.0.0.1:12342/foo/bar4" + string(%d) "Location: http://%s:%d/foo/bar4" [6]=> string(15) "HTTP/1.1 200 OK" } string(5) "done." string(%d) "GET /foo/bar HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close GET /foo/bar2 HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close GET /foo/bar3 HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close GET /foo/bar4 HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close " -- Test: fail after 2 redirections -- -Warning: fopen(http://127.0.0.1:12342/foo/bar): Failed to open stream: Redirection limit reached, aborting in %s +Warning: fopen(http://%s:%d/foo/bar): Failed to open stream: Redirection limit reached, aborting in %s bool(false) string(%d) "GET /foo/bar HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close GET /foo/bar2 HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close " -- Test: fail at first redirection -- -Warning: fopen(http://127.0.0.1:12342/foo/bar): Failed to open stream: Redirection limit reached, aborting in %s +Warning: fopen(http://%s:%d/foo/bar): Failed to open stream: Redirection limit reached, aborting in %s bool(false) string(%d) "GET /foo/bar HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close " -- Test: fail at first redirection (2) -- -Warning: fopen(http://127.0.0.1:12342/foo/bar): Failed to open stream: Redirection limit reached, aborting in %s +Warning: fopen(http://%s:%d/foo/bar): Failed to open stream: Redirection limit reached, aborting in %s bool(false) string(%d) "GET /foo/bar HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close " @@ -140,11 +142,11 @@ array(2) { [0]=> string(30) "HTTP/1.1 302 Moved Temporarily" [1]=> - string(41) "Location: http://127.0.0.1:12342/foo/bar2" + string(%d) "Location: http://%s:%d/foo/bar2" } string(1) "1" string(%d) "GET /foo/bar HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close " @@ -154,11 +156,11 @@ array(2) { [0]=> string(30) "HTTP/1.1 302 Moved Temporarily" [1]=> - string(41) "Location: http://127.0.0.1:12342/foo/bar2" + string(%d) "Location: http://%s:%d/foo/bar2" } string(1) "1" string(%d) "GET /foo/bar HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close " @@ -168,19 +170,19 @@ array(4) { [0]=> string(30) "HTTP/1.1 302 Moved Temporarily" [1]=> - string(41) "Location: http://127.0.0.1:12342/foo/bar2" + string(%d) "Location: http://%s:%d/foo/bar2" [2]=> string(30) "HTTP/1.1 301 Moved Permanently" [3]=> - string(41) "Location: http://127.0.0.1:12342/foo/bar3" + string(%d) "Location: http://%s:%d/foo/bar3" } string(0) "" string(%d) "GET /foo/bar HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close GET /foo/bar2 HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close " diff --git a/ext/standard/tests/http/bug43510.phpt b/ext/standard/tests/http/bug43510.phpt index 45ba4fb20f44f..bfb90e4d74775 100644 --- a/ext/standard/tests/http/bug43510.phpt +++ b/ext/standard/tests/http/bug43510.phpt @@ -3,7 +3,7 @@ Bug #43510 (stream_get_meta_data() does not return same mode as used in fopen) --INI-- allow_url_fopen=1 --SKIPIF-- - + --FILE-- $pid, 'uri' => $uri ] = http_server($responses, $output); foreach(array('r', 'rb') as $mode) { - $fd = fopen('http://127.0.0.1:12342/', $mode, false); + $fd = fopen($uri, $mode, false); $meta = stream_get_meta_data($fd); var_dump($meta['mode']); fclose($fd); diff --git a/ext/standard/tests/http/bug47021.phpt b/ext/standard/tests/http/bug47021.phpt index b3acd1bc3ad02..326eceb687a52 100644 --- a/ext/standard/tests/http/bug47021.phpt +++ b/ext/standard/tests/http/bug47021.phpt @@ -3,7 +3,7 @@ Bug #47021 (SoapClient stumbles over WSDL delivered with "Transfer-Encoding: chu --INI-- allow_url_fopen=1 --SKIPIF-- - + --FILE-- $pid, 'uri' => $uri] = http_server($responses); - echo file_get_contents('http://127.0.0.1:12342/', false, $ctx); + echo file_get_contents($uri, false, $ctx); echo "\n"; - echo file_get_contents('http://127.0.0.1:12342/', false, $ctx); + echo file_get_contents($uri, false, $ctx); echo "\n"; http_server_kill($pid); diff --git a/ext/standard/tests/http/bug48929.phpt b/ext/standard/tests/http/bug48929.phpt index fad8775b6a8e4..256b242f769e3 100644 --- a/ext/standard/tests/http/bug48929.phpt +++ b/ext/standard/tests/http/bug48929.phpt @@ -3,7 +3,7 @@ Bug #48929 (duplicate \r\n sent after last header line) --INI-- allow_url_fopen=1 --SKIPIF-- - + --FILE-- $pid, 'uri' => $uri] = http_server($responses, $output); foreach($responses as $r) { - $fd = fopen('http://127.0.0.1:12342/', 'rb', false, $context); + $fd = fopen($uri, 'rb', false, $context); fseek($output, 0, SEEK_SET); var_dump(stream_get_contents($output)); @@ -42,7 +42,7 @@ do_test(array('header' => "X-Foo: bar\r\nContent-Type: text/plain", 'method' => --EXPECTF-- -- Test: requests with 'header' as array -- string(%d) "POST / HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close Content-Length: 4 X-Foo: bar @@ -51,7 +51,7 @@ Content-Type: text/plain ohai" -- Test: requests with 'header' as string -- string(%d) "POST / HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close Content-Length: 4 X-Foo: bar diff --git a/ext/standard/tests/http/bug53198.phpt b/ext/standard/tests/http/bug53198.phpt index da2a4cf15f717..1d66218478170 100644 --- a/ext/standard/tests/http/bug53198.phpt +++ b/ext/standard/tests/http/bug53198.phpt @@ -1,7 +1,7 @@ --TEST-- Bug #53198 (From: header cannot be changed with ini_set) --SKIPIF-- - + --INI-- allow_url_fopen=1 from=teste@teste.pt @@ -15,11 +15,11 @@ function do_test() { "data://text/plain,HTTP/1.1 200 OK\r\n\r\n", ); - $pid = http_server("tcp://127.0.0.1:12342", $responses, $output); + ['pid' => $pid, 'uri' => $uri] = http_server($responses, $output); foreach($responses as $r) { - $fd = fopen('http://127.0.0.1:12342/', 'rb', false); + $fd = fopen($uri, 'rb', false); fseek($output, 0, SEEK_SET); var_dump(stream_get_contents($output)); @@ -45,14 +45,14 @@ do_test(); -- Test: leave default -- string(%d) "GET / HTTP/1.1 From: teste@teste.pt -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close " -- Test: after ini_set -- string(%d) "GET / HTTP/1.1 From: junk@junk.com -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close " diff --git a/ext/standard/tests/http/bug60570.phpt b/ext/standard/tests/http/bug60570.phpt index 98a6bf0d3bf2f..7b62bdaf0b3ce 100644 --- a/ext/standard/tests/http/bug60570.phpt +++ b/ext/standard/tests/http/bug60570.phpt @@ -1,7 +1,7 @@ --TEST-- Bug #60570 (Stream context leaks when http request fails) --SKIPIF-- - + --INI-- allow_url_fopen=1 --FILE-- @@ -16,14 +16,14 @@ function do_test() { "data://text/plain,HTTP/1.0 404 Not Found\r\n\r\n" ); - $pid = http_server("tcp://127.0.0.1:12342", $responses, $output); + ['pid' => $pid, 'uri' => $uri] = http_server($responses, $output); $a = $b = count(get_resources()); $i = 3; while ($i--) { $context = stream_context_create(array('http'=>array('timeout'=>1))); - file_get_contents('http://127.0.0.1:12342/', 0, $context); + file_get_contents($uri, 0, $context); unset($context); $b = $a; @@ -39,13 +39,13 @@ function do_test() { do_test(); ?> --EXPECTF-- -Warning: file_get_contents(http://127.0.0.1:12342/): Failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found +Warning: file_get_contents(http://%s:%d): Failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found in %s on line %d -Warning: file_get_contents(http://127.0.0.1:12342/): Failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found +Warning: file_get_contents(http://%s:%d): Failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found in %s on line %d -Warning: file_get_contents(http://127.0.0.1:12342/): Failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found +Warning: file_get_contents(http://%s:%d): Failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found in %s on line %d leak? penultimate iteration: %d, last one: %d bool(true) diff --git a/ext/standard/tests/http/bug61548.phpt b/ext/standard/tests/http/bug61548.phpt index 24e709bf36204..5f21b3769dd85 100644 --- a/ext/standard/tests/http/bug61548.phpt +++ b/ext/standard/tests/http/bug61548.phpt @@ -3,7 +3,7 @@ Bug #61548 (content-type must appear at the end of headers) --INI-- allow_url_fopen=1 --SKIPIF-- - + --FILE-- $pid, 'uri' => $uri] = http_server($responses, $output); - $fd = fopen('http://127.0.0.1:12342/', 'rb', false, $ctx); + $fd = fopen($uri, 'rb', false, $ctx); fseek($output, 0, SEEK_SET); echo stream_get_contents($output); @@ -41,37 +41,37 @@ do_test("First:1\nContent-type:text/plain\nSecond:2\nThird:"); ?> Done ---EXPECT-- +--EXPECTF-- POST / HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close First:1 Second:2 Content-type: text/plain GET /foo HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close First:1 Second:2 POST / HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close First:1 Second:2 Content-type: text/plain GET /foo HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close First:1 Second:2 POST / HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close First:1 Second:2 @@ -79,40 +79,40 @@ Content-type: text/plain Third: GET /foo HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close First:1 Second:2 Third: POST / HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close First:1 Content-type:text/plain Second:2 GET /foo HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close First:1 Second:2 POST / HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close First:1 Content-type:text/plain Second:2 GET /foo HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close First:1 Second:2 POST / HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close First:1 Content-type:text/plain @@ -120,7 +120,7 @@ Second:2 Third: GET /foo HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close First:1 Second:2 diff --git a/ext/standard/tests/http/bug65634.phpt b/ext/standard/tests/http/bug65634.phpt index 2d2b13989e541..196b6aa0e0b63 100644 --- a/ext/standard/tests/http/bug65634.phpt +++ b/ext/standard/tests/http/bug65634.phpt @@ -3,7 +3,7 @@ Bug #65634 (HTTP wrapper is very slow with protocol_version 1.1) --INI-- allow_url_fopen=1 --SKIPIF-- - + --FILE-- $pid, 'uri' => $uri] = http_server($responses, $output); - $fd = fopen('http://127.0.0.1:12342/', 'rb', false, $ctx); + $fd = fopen($uri, 'rb', false, $ctx); fseek($output, 0, SEEK_SET); echo stream_get_contents($output); @@ -48,34 +48,34 @@ do_test('1.1', 'close'); echo "HTTP/1.1, connection: keep-alive:\n"; do_test('1.1', 'keep-alive'); -?> ---EXPECT-- + +--EXPECTF-- HTTP/1.0, default behaviour: GET / HTTP/1.0 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close HTTP/1.0, connection: close: GET / HTTP/1.0 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close HTTP/1.0, connection: keep-alive: GET / HTTP/1.0 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: keep-alive HTTP/1.1, default behaviour: GET / HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close HTTP/1.1, connection: close: GET / HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close HTTP/1.1, connection: keep-alive: GET / HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: keep-alive diff --git a/ext/standard/tests/http/bug67430.phpt b/ext/standard/tests/http/bug67430.phpt index cf8db65cf163f..e72e419fc02ac 100644 --- a/ext/standard/tests/http/bug67430.phpt +++ b/ext/standard/tests/http/bug67430.phpt @@ -3,7 +3,7 @@ Bug #67430 (http:// wrapper doesn't follow 308 redirects) --INI-- allow_url_fopen=1 --SKIPIF-- - + --FILE-- $pid, 'uri' => $uri] = http_server($responses, $output); - $fd = fopen('http://127.0.0.1:12342/', 'rb', false, $ctx); + $fd = fopen($uri, 'rb', false, $ctx); fseek($output, 0, SEEK_SET); echo stream_get_contents($output); @@ -36,17 +36,17 @@ do_test(false); ?> Done ---EXPECT-- +--EXPECTF-- POST / HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close GET /foo HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close POST / HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close Done diff --git a/ext/standard/tests/http/bug69337.phpt b/ext/standard/tests/http/bug69337.phpt index 7136ff474d3cf..051108a094887 100644 --- a/ext/standard/tests/http/bug69337.phpt +++ b/ext/standard/tests/http/bug69337.phpt @@ -1,7 +1,7 @@ --TEST-- Bug #69337 (Stream context leaks when http request fails) --SKIPIF-- - + --INI-- allow_url_fopen=1 --FILE-- @@ -21,17 +21,17 @@ $ctx = stream_context_create(); stream_context_set_params($ctx, array("notification" => "stream_notification_callback")); $responses = array( - "data://text/plain,HTTP/1.0 302 Found\r\nLocation: http://127.0.0.1:22345/try-again\r\n\r\n", + "data://text/plain,HTTP/1.0 302 Found\r\nLocation: /try-again\r\n\r\n", "data://text/plain,HTTP/1.0 404 Not Found\r\n\r\n", ); -$pid = http_server("tcp://127.0.0.1:22345", $responses, $output); +['pid' => $pid, 'uri' => $uri] = http_server($responses, $output); -$f = file_get_contents('http://127.0.0.1:22345/', 0, $ctx); +$f = file_get_contents($uri, 0, $ctx); http_server_kill($pid); var_dump($f); ?> --EXPECTF-- -Warning: file_get_contents(http://127.0.0.1:22345/): Failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found%ain %s on line %d +Warning: file_get_contents(http://%s:%d): Failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found%ain %s on line %d bool(false) diff --git a/ext/standard/tests/http/bug73297.phpt b/ext/standard/tests/http/bug73297.phpt index 0b0e02f3fd028..a632ff4170e5a 100644 --- a/ext/standard/tests/http/bug73297.phpt +++ b/ext/standard/tests/http/bug73297.phpt @@ -3,7 +3,7 @@ Bug #73297 (Ignore 100 Continue returned by HTTP/1.1 servers) --INI-- allow_url_fopen=1 --SKIPIF-- - + --FILE-- $pid, 'uri' => $uri] = http_server($responses); -echo file_get_contents('http://127.0.0.1:12342/', false, $ctx); +echo file_get_contents($uri, false, $ctx); echo "\n"; http_server_kill($pid); -?> --EXPECT-- Hello diff --git a/ext/standard/tests/http/bug75535.phpt b/ext/standard/tests/http/bug75535.phpt index 236a96820c8c4..7b015890d2f51 100644 --- a/ext/standard/tests/http/bug75535.phpt +++ b/ext/standard/tests/http/bug75535.phpt @@ -1,7 +1,7 @@ --TEST-- Bug #75535: Inappropriately parsing HTTP response leads to PHP segment fault --SKIPIF-- - + --INI-- allow_url_fopen=1 --FILE-- @@ -12,13 +12,13 @@ $responses = array( "data://text/plain,HTTP/1.0 200 Ok\r\nContent-Length\r\n", ); -$pid = http_server("tcp://127.0.0.1:22351", $responses, $output); +['pid' => $pid, 'uri' => $uri] = http_server($responses, $output); -var_dump(file_get_contents('http://127.0.0.1:22351/')); +var_dump(file_get_contents($uri)); var_dump($http_response_header); http_server_kill($pid); -?> + --EXPECT-- string(0) "" array(2) { diff --git a/ext/standard/tests/http/bug75981.phpt b/ext/standard/tests/http/bug75981.phpt index 52a560cfbc206..078f276ff98b8 100644 --- a/ext/standard/tests/http/bug75981.phpt +++ b/ext/standard/tests/http/bug75981.phpt @@ -3,7 +3,7 @@ Bug #75981 (stack-buffer-overflow while parsing HTTP response) --INI-- allow_url_fopen=1 --SKIPIF-- - + --FILE-- $pid, 'uri' => $uri] = http_server($responses); -echo @file_get_contents('http://127.0.0.1:12342/', false, $ctx); +echo @file_get_contents($uri, false, $ctx); http_server_kill($pid); diff --git a/ext/standard/tests/http/bug76342.phpt b/ext/standard/tests/http/bug76342.phpt index 10de23fdf307a..f1464417f98a9 100644 --- a/ext/standard/tests/http/bug76342.phpt +++ b/ext/standard/tests/http/bug76342.phpt @@ -3,7 +3,7 @@ Bug #76342 (file_get_contents waits twice specified timeout) --INI-- allow_url_fopen=1 --SKIPIF-- - + --FILE-- $pid, 'uri' => $uri] = http_server_sleep(); $start = microtime(true); -file_get_contents('http://127.0.0.1:12342/', false, $ctx); +file_get_contents($uri, false, $ctx); $diff = microtime(true) - $start; if ($diff >= 2 * $timeout) { echo "FAIL: $diff\n"; @@ -31,5 +31,5 @@ http_server_kill($pid); ?> DONE --EXPECTF-- -Warning: file_get_contents(http://127.0.0.1:12342/): Failed to open stream: HTTP request failed! in %s on line %d +Warning: file_get_contents(http://%s:%d): Failed to open stream: HTTP request failed! in %s on line %d DONE diff --git a/ext/standard/tests/http/bug79265.phpt b/ext/standard/tests/http/bug79265.phpt index 25efdd089a11a..c100b9963a49d 100644 --- a/ext/standard/tests/http/bug79265.phpt +++ b/ext/standard/tests/http/bug79265.phpt @@ -3,7 +3,7 @@ Bug #79265 (Improper injection of Host header when using fopen for http requests --INI-- allow_url_fopen=1 --SKIPIF-- - + --FILE-- $pid, 'uri' => $uri] = http_server($responses, $output); $opts = array( 'http'=>array( @@ -23,14 +23,13 @@ $opts = array( ) ); $context = stream_context_create($opts); -$fd = fopen('http://127.0.0.1:12342/', 'rb', false, $context); +$fd = fopen($uri, 'rb', false, $context); fseek($output, 0, SEEK_SET); echo stream_get_contents($output); fclose($fd); http_server_kill($pid); -?> --EXPECT-- GET / HTTP/1.1 Connection: close diff --git a/ext/standard/tests/http/bug79265_2.phpt b/ext/standard/tests/http/bug79265_2.phpt index 0cdde1050152f..a7c27bada92fc 100644 --- a/ext/standard/tests/http/bug79265_2.phpt +++ b/ext/standard/tests/http/bug79265_2.phpt @@ -3,7 +3,7 @@ Bug #79265 variation: "host:" not at start of header --INI-- allow_url_fopen=1 --SKIPIF-- - + --FILE-- $pid, 'uri' => $uri] = http_server($responses, $output); $opts = array( 'http'=>array( @@ -22,17 +22,16 @@ $opts = array( ) ); $context = stream_context_create($opts); -$fd = fopen('http://127.0.0.1:12342/', 'rb', false, $context); +$fd = fopen($uri, 'rb', false, $context); fseek($output, 0, SEEK_SET); echo stream_get_contents($output); fclose($fd); http_server_kill($pid); -?> ---EXPECT-- +--EXPECTF-- GET / HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close RandomHeader: host:8080 Cookie: foo=bar diff --git a/ext/standard/tests/http/http_response_header_01.phpt b/ext/standard/tests/http/http_response_header_01.phpt index 05037f24b1f7e..16cac9b0e17f9 100644 --- a/ext/standard/tests/http/http_response_header_01.phpt +++ b/ext/standard/tests/http/http_response_header_01.phpt @@ -1,7 +1,7 @@ --TEST-- $http_reponse_header (no redirect) --SKIPIF-- - + --INI-- allow_url_fopen=1 --FILE-- @@ -12,17 +12,14 @@ $responses = array( "data://text/plain,HTTP/1.0 200 Ok\r\nSome: Header\r\nSome: Header\r\n\r\nBody", ); -$pid = http_server("tcp://127.0.0.1:22346", $responses, $output); +['pid' => $pid, 'uri' => $uri] = http_server($responses, $output); -function test() { - $f = file_get_contents('http://127.0.0.1:22346/'); - var_dump($f); - var_dump($http_response_header); -} -test(); +$f = file_get_contents($uri); +var_dump($f); +var_dump($http_response_header); http_server_kill($pid); -?> + --EXPECT-- string(4) "Body" array(3) { diff --git a/ext/standard/tests/http/http_response_header_02.phpt b/ext/standard/tests/http/http_response_header_02.phpt index 873a8621a516a..a35b1d308d2c9 100644 --- a/ext/standard/tests/http/http_response_header_02.phpt +++ b/ext/standard/tests/http/http_response_header_02.phpt @@ -1,7 +1,7 @@ --TEST-- $http_reponse_header (redirect) --SKIPIF-- - + --INI-- allow_url_fopen=1 --FILE-- @@ -10,21 +10,18 @@ require 'server.inc'; $responses = array( "data://text/plain,HTTP/1.0 302 Found\r\n" - . "Some: Header\r\nLocation: http://127.0.0.1:22347/try-again\r\n\r\n", + . "Some: Header\r\nLocation: /try-again\r\n\r\n", "data://test/plain,HTTP/1.0 200 Ok\r\nSome: Header\r\n\r\nBody", ); -$pid = http_server("tcp://127.0.0.1:22347", $responses, $output); +['pid' => $pid, 'uri' => $uri] = http_server($responses, $output); -function test() { - $f = file_get_contents('http://127.0.0.1:22347/'); - var_dump($f); - var_dump($http_response_header); -} -test(); +$f = file_get_contents($uri); +var_dump($f); +var_dump($http_response_header); http_server_kill($pid); -?> + --EXPECT-- string(4) "Body" array(5) { @@ -33,7 +30,7 @@ array(5) { [1]=> string(12) "Some: Header" [2]=> - string(42) "Location: http://127.0.0.1:22347/try-again" + string(20) "Location: /try-again" [3]=> string(15) "HTTP/1.0 200 Ok" [4]=> diff --git a/ext/standard/tests/http/http_response_header_03.phpt b/ext/standard/tests/http/http_response_header_03.phpt index 832382de237a0..dde13997eeed5 100644 --- a/ext/standard/tests/http/http_response_header_03.phpt +++ b/ext/standard/tests/http/http_response_header_03.phpt @@ -1,7 +1,7 @@ --TEST-- $http_reponse_header (redirect + not found) --SKIPIF-- - + --INI-- allow_url_fopen=1 --FILE-- @@ -10,23 +10,20 @@ require 'server.inc'; $responses = array( "data://text/plain,HTTP/1.0 302 Found\r\n" - . "Some: Header\r\nLocation: http://127.0.0.1:22348/try-again\r\n\r\n", + . "Some: Header\r\nLocation: /try-again\r\n\r\n", "data://test/plain,HTTP/1.0 404 Not Found\r\nSome: Header\r\n\r\nBody", ); -$pid = http_server("tcp://127.0.0.1:22348", $responses, $output); +['pid' => $pid, 'uri' => $uri] = http_server($responses, $output); -function test() { - $f = file_get_contents('http://127.0.0.1:22348/'); - var_dump($f); - var_dump($http_response_header); -} -test(); +$f = file_get_contents($uri); +var_dump($f); +var_dump($http_response_header); http_server_kill($pid); -?> + --EXPECTF-- -Warning: file_get_contents(http://127.0.0.1:22348/): Failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found%a +Warning: file_get_contents(http://%s:%d): Failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found%a bool(false) array(5) { [0]=> @@ -34,7 +31,7 @@ array(5) { [1]=> string(12) "Some: Header" [2]=> - string(42) "Location: http://127.0.0.1:22348/try-again" + string(20) "Location: /try-again" [3]=> string(22) "HTTP/1.0 404 Not Found" [4]=> diff --git a/ext/standard/tests/http/http_response_header_04.phpt b/ext/standard/tests/http/http_response_header_04.phpt index 89a4d466fd687..c313f7a75601a 100644 --- a/ext/standard/tests/http/http_response_header_04.phpt +++ b/ext/standard/tests/http/http_response_header_04.phpt @@ -1,7 +1,7 @@ --TEST-- $http_reponse_header (header with trailing whitespace) --SKIPIF-- - + --INI-- allow_url_fopen=1 --FILE-- @@ -12,17 +12,14 @@ $responses = array( "data://text/plain,HTTP/1.0 200 Ok\r\nSome: Header \r\n\r\nBody", ); -$pid = http_server("tcp://127.0.0.1:22349", $responses, $output); +['pid' => $pid, 'uri' => $uri] = http_server($responses, $output); -function test() { - $f = file_get_contents('http://127.0.0.1:22349/'); - var_dump($f); - var_dump($http_response_header); -} -test(); +$f = file_get_contents($uri); +var_dump($f); +var_dump($http_response_header); http_server_kill($pid); -?> + --EXPECT-- string(4) "Body" array(2) { diff --git a/ext/standard/tests/http/http_response_header_05.phpt b/ext/standard/tests/http/http_response_header_05.phpt index 372de1163d096..c5fe60fa612b7 100644 --- a/ext/standard/tests/http/http_response_header_05.phpt +++ b/ext/standard/tests/http/http_response_header_05.phpt @@ -1,7 +1,7 @@ --TEST-- $http_reponse_header (whitespace-only "header") --SKIPIF-- - + --INI-- allow_url_fopen=1 --FILE-- @@ -12,17 +12,14 @@ $responses = array( "data://text/plain,HTTP/1.0 200 Ok\r\n \r\n\r\nBody", ); -$pid = http_server("tcp://127.0.0.1:22350", $responses, $output); +['pid' => $pid, 'uri' => $uri] = http_server($responses, $output); -function test() { - $f = file_get_contents('http://127.0.0.1:22350/'); - var_dump($f); - var_dump($http_response_header); -} -test(); +$f = file_get_contents($uri); +var_dump($f); +var_dump($http_response_header); http_server_kill($pid); -?> + --EXPECT-- string(4) "Body" array(2) { diff --git a/ext/standard/tests/http/ignore_errors.phpt b/ext/standard/tests/http/ignore_errors.phpt index 436fceeef9035..9cd8cdc4509f8 100644 --- a/ext/standard/tests/http/ignore_errors.phpt +++ b/ext/standard/tests/http/ignore_errors.phpt @@ -3,7 +3,7 @@ http:// and ignore_errors --INI-- allow_url_fopen=1 --SKIPIF-- - + --FILE-- $pid, 'uri' => $uri] = http_server($responses, $output); foreach($responses as $r) { - $fd = fopen('http://127.0.0.1:12342/foo/bar', 'rb', false, $context); + $fd = fopen("$uri/foo/bar", 'rb', false, $context); var_dump($fd); if ($fd) { @@ -63,16 +63,16 @@ array(2) { } string(1) "1" string(%d) "GET /foo/bar HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close " -Warning: fopen(http://127.0.0.1:12342/foo/bar): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not found +Warning: fopen(http://%s:%d/foo/bar): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not found in %s on line %d bool(false) string(%d) "GET /foo/bar HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close " @@ -86,7 +86,7 @@ array(2) { } string(1) "1" string(%d) "GET /foo/bar HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close " @@ -99,7 +99,7 @@ array(2) { } string(1) "2" string(%d) "GET /foo/bar HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close " @@ -113,7 +113,7 @@ array(2) { } string(1) "1" string(%d) "GET /foo/bar HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close " @@ -126,7 +126,7 @@ array(2) { } string(1) "2" string(%d) "GET /foo/bar HTTP/1.1 -Host: 127.0.0.1:12342 +Host: %s:%d Connection: close " diff --git a/ext/standard/tests/http/server.inc b/ext/standard/tests/http/server.inc index 81cc131a8a565..5c636705e8ca6 100644 --- a/ext/standard/tests/http/server.inc +++ b/ext/standard/tests/http/server.inc @@ -1,16 +1,16 @@ - $pid, + 'uri' => 'http://' . stream_socket_get_name($server, false), + ]; } return $server; @@ -35,15 +38,20 @@ function http_server_init($socket_string, &$output = null) { /* Minimal HTTP server with predefined responses. * * $socket_string is the socket to create and listen on (e.g. tcp://127.0.0.1:1234) - * $files is an array of files containing N responses for N expected requests. Server dies after N requests. + * $files is an iterable of files or callable generator yielding files. + * containing N responses for N expected requests. Server dies after N requests. * $output is a stream on which everything sent by clients is written to */ -function http_server($socket_string, array $files, &$output = null) { +function http_server($files, &$output = null) { - if (!is_resource($server = http_server_init($socket_string, $output))) { + if (!is_resource($server = http_server_init($output))) { return $server; } + if (is_callable($files)) { + $files = $files($server); + } + foreach($files as $file) { $sock = stream_socket_accept($server); @@ -55,7 +63,7 @@ function http_server($socket_string, array $files, &$output = null) { $content_length = 0; - stream_set_blocking($sock, 0); + stream_set_blocking($sock, false); while (!feof($sock)) { list($r, $w, $e) = array(array($sock), null, null); @@ -73,7 +81,7 @@ function http_server($socket_string, array $files, &$output = null) { } } } - stream_set_blocking($sock, 1); + stream_set_blocking($sock, true); // read content @@ -92,9 +100,9 @@ function http_server($socket_string, array $files, &$output = null) { exit(0); } -function http_server_sleep($socket_string, $micro_seconds = 500000) +function http_server_sleep($micro_seconds = 500000) { - if (!is_resource($server = http_server_init($socket_string, $output))) { + if (!is_resource($server = http_server_init($output))) { return $server; } @@ -110,9 +118,7 @@ function http_server_sleep($socket_string, $micro_seconds = 500000) exit(0); } -function http_server_kill($pid) { +function http_server_kill(int $pid) { posix_kill($pid, SIGTERM); pcntl_waitpid($pid, $status); } - -?> diff --git a/ext/standard/tests/network/http-stream.phpt b/ext/standard/tests/network/http-stream.phpt index 45c5cb636b722..4c207ade770df 100644 --- a/ext/standard/tests/network/http-stream.phpt +++ b/ext/standard/tests/network/http-stream.phpt @@ -5,20 +5,18 @@ http-stream test if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); if (!extension_loaded("dom")) die("skip dom extension is not present"); require __DIR__.'/../http/server.inc'; -http_server_skipif('tcp://127.0.0.1:12342'); -?> +http_server_skipif(); --INI-- allow_url_fopen=1 --FILE-- $pid, 'uri' => $uri] = http_server([__DIR__."/news.rss"]); $d = new DomDocument; -$e = $d->load("http://127.0.0.1:12342/news.rss"); +$e = $d->load("$uri/news.rss"); echo "ALIVE\n"; http_server_kill($pid); -?> --EXPECT-- ALIVE From a61a9fe9a0d63734136f995451a1fd35b0176292 Mon Sep 17 00:00:00 2001 From: Sara Golemon Date: Mon, 14 Sep 2020 20:08:39 +0000 Subject: [PATCH 36/67] Support ephemeral ports in debug server --- NEWS | 2 + sapi/cli/php_cli_server.c | 100 +++++++++++++++++++++++++------------- 2 files changed, 67 insertions(+), 35 deletions(-) diff --git a/NEWS b/NEWS index 8cb4a580f5d29..c4926322db961 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,8 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 8.0.0RC1 +- CLI: + . Allow debug server binding to an ephemeral port via `-S localhost:0`. (Sara) - Core: . Fixed bug #80109 (Cannot skip arguments when extended debug is enabled). (Nikita) diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c index 337886bcd344a..a32b51e3d3649 100644 --- a/sapi/cli/php_cli_server.c +++ b/sapi/cli/php_cli_server.c @@ -2353,6 +2353,65 @@ static void php_cli_server_client_dtor_wrapper(zval *zv) /* {{{ */ pefree(p, 1); } /* }}} */ +/** + * Parse the host and port portions of an address specifier in + * one of the following forms: + * - hostOrIP:port + * - [hostOrIP]:port + */ +static char *php_cli_server_parse_addr(const char *addr, int *pport) { + const char *p, *end; + long port; + + if (addr[0] == '[') { + /* Encapsulated [hostOrIP]:port */ + const char *start = addr + 1; + end = strchr(start, ']'); + if (!end) { + /* No ending ] delimiter to match [ */ + return NULL; + } + + p = end + 1; + if (*p != ':') { + /* Invalid char following address/missing port */ + return NULL; + } + + port = strtol(p + 1, (char**)&p, 10); + if (p && *p) { + /* Non-numeric in port */ + return NULL; + } + if (port < 0 || port > 65535) { + /* Invalid port */ + return NULL; + } + + /* Full [hostOrIP]:port provided */ + *pport = (int)port; + return pestrndup(start, end - start, 1); + } + + end = strchr(addr, ':'); + if (!end) { + /* Missing port */ + return NULL; + } + + port = strtol(end + 1, (char**)&p, 10); + if (p && *p) { + /* Non-numeric port */ + return NULL; + } + if (port < 0 || port > 65535) { + /* Invalid port */ + return NULL; + } + *pport = (int)port; + return pestrndup(addr, end - addr, 1); +} + static int php_cli_server_ctor(php_cli_server *server, const char *addr, const char *document_root, const char *router) /* {{{ */ { int retval = SUCCESS; @@ -2363,40 +2422,9 @@ static int php_cli_server_ctor(php_cli_server *server, const char *addr, const c int err = 0; int port = 3000; php_socket_t server_sock = SOCK_ERR; - char *p = NULL; - if (addr[0] == '[') { - host = pestrdup(addr + 1, 1); - if (!host) { - return FAILURE; - } - p = strchr(host, ']'); - if (p) { - *p++ = '\0'; - if (*p == ':') { - port = strtol(p + 1, &p, 10); - if (port <= 0 || port > 65535) { - p = NULL; - } - } else if (*p != '\0') { - p = NULL; - } - } - } else { - host = pestrdup(addr, 1); - if (!host) { - return FAILURE; - } - p = strchr(host, ':'); - if (p) { - *p++ = '\0'; - port = strtol(p, &p, 10); - if (port <= 0 || port > 65535) { - p = NULL; - } - } - } - if (!p) { + host = php_cli_server_parse_addr(addr, &port); + if (!host) { fprintf(stderr, "Invalid address: %s\n", addr); retval = FAILURE; goto out; @@ -2720,10 +2748,12 @@ int do_cli_server(int argc, char **argv) /* {{{ */ sapi_module.phpinfo_as_text = 0; { + zend_bool ipv6 = strchr(server.host, ':'); php_cli_server_logf( PHP_CLI_SERVER_LOG_PROCESS, - "PHP %s Development Server (http://%s) started", - PHP_VERSION, server_bind_address); + "PHP %s Development Server (http://%s%s%s:%d) started", + PHP_VERSION, ipv6 ? "[" : "", server.host, + ipv6 ? "]" : "", server.port); } #if defined(SIGINT) From bfa8e42a5550cdd0545259cc34cf36152c3e1b08 Mon Sep 17 00:00:00 2001 From: Sara Golemon Date: Mon, 14 Sep 2020 20:45:39 +0000 Subject: [PATCH 37/67] Use ephemeral ports during curl tests with dev server --- ext/curl/tests/CONFLICTS | 1 - ext/curl/tests/bug79033.phpt | 2 +- ext/curl/tests/server.inc | 43 ++++++++++++++++++++++++++++-------- 3 files changed, 35 insertions(+), 11 deletions(-) delete mode 100644 ext/curl/tests/CONFLICTS diff --git a/ext/curl/tests/CONFLICTS b/ext/curl/tests/CONFLICTS deleted file mode 100644 index 254defddb53c5..0000000000000 --- a/ext/curl/tests/CONFLICTS +++ /dev/null @@ -1 +0,0 @@ -server diff --git a/ext/curl/tests/bug79033.phpt b/ext/curl/tests/bug79033.phpt index 454c3b2669dfe..c70611dda602f 100644 --- a/ext/curl/tests/bug79033.phpt +++ b/ext/curl/tests/bug79033.phpt @@ -21,7 +21,7 @@ var_dump(curl_getinfo($ch)["request_header"]); string(%d) "array(0) { } " -string(90) "POST /get.inc?test=post HTTP/1.1 +string(%d) "POST /get.inc?test=post HTTP/1.1 Host: localhost:%d Accept: */* Content-Length: 0 diff --git a/ext/curl/tests/server.inc b/ext/curl/tests/server.inc index 00eeb5ff76683..3051bf98a4c1d 100644 --- a/ext/curl/tests/server.inc +++ b/ext/curl/tests/server.inc @@ -1,8 +1,4 @@ - STDIN, 1 => STDOUT, - 2 => array("null"), + 2 => ['pipe', 'w'], ); $handle = proc_open($cmd, $descriptorspec, $pipes, $doc_root, null, array("suppress_errors" => true)); + // First, wait for the dev server to declare itself ready. + $bound = null; + stream_set_blocking($pipes[2], false); + for ($i = 0; $i < 60; $i++) { + usleep(50000); // 50ms per try + $status = proc_get_status($handle); + if (empty($status['running'])) { + echo "Server is not running\n"; + proc_terminate($handle); + exit(1); + } + + while (($line = fgets($pipes[2])) !== false) { + if (preg_match('@PHP \S* Development Server \(https?://(.*?:\d+)\) started@', $line, $matches)) { + $bound = $matches[1]; + // Now that we've identified the listen address, close STDERR. + // Otherwise the pipe may clog up with unread log messages. + fclose($pipes[2]); + break 2; + } + } + } + if ($bound === null) { + echo "Server did not output startup message"; + proc_terminate($handle); + exit(1); + } + + // Now wait for a connection to succeed. // note: even when server prints 'Listening on localhost:8964...Press Ctrl-C to quit.' // it might not be listening yet...need to wait until fsockopen() call returns $error = "Unable to connect to server\n"; for ($i=0; $i < 60; $i++) { usleep(50000); // 50ms per try $status = proc_get_status($handle); - $fp = @fsockopen(PHP_CURL_SERVER_HOSTNAME, PHP_CURL_SERVER_PORT); + $fp = @fsockopen("tcp://$bound"); // Failure, the server is no longer running if (!($status && $status['running'])) { $error = "Server is not running\n"; @@ -64,5 +89,5 @@ function curl_cli_server_start() { $handle ); - return PHP_CURL_SERVER_ADDRESS; + return $bound; } From 23429b58182f437cd84078364c20b12d14c70c08 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 17 Sep 2020 18:36:45 +0300 Subject: [PATCH 38/67] Fixed incorrect register allocation --- ext/opcache/jit/zend_jit_x86.dasc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index 4fccf22d38a6e..20fe88e9c11f8 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -15185,6 +15185,9 @@ static zend_regset zend_jit_get_scratch_regset(const zend_op *opline, const zend if (!(op1_info & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE))) && !(op2_info & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE)))) { regset = ZEND_REGSET_EMPTY; + if (!(opline->result_type & (IS_SMART_BRANCH_JMPZ|IS_SMART_BRANCH_JMPNZ))) { + ZEND_REGSET_INCL(regset, ZREG_R0); + } if ((op1_info & MAY_BE_LONG) && (op2_info & MAY_BE_LONG) && opline->op1_type != IS_CONST && opline->op2_type != IS_CONST) { if (ssa_op->op1_use != current_var && From 0f9aefa64f6668b571ac7c6fc9dbebb756fa1fc0 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 17 Sep 2020 19:39:44 +0300 Subject: [PATCH 39/67] Fixed incorrect live-range construction --- ext/opcache/jit/zend_jit.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/ext/opcache/jit/zend_jit.c b/ext/opcache/jit/zend_jit.c index 0ad3d3883eea7..3dad8e4f91115 100644 --- a/ext/opcache/jit/zend_jit.c +++ b/ext/opcache/jit/zend_jit.c @@ -120,8 +120,17 @@ static uint32_t zend_jit_trace_get_exit_point(const zend_op *to_opline, uint32_t static const void *zend_jit_trace_get_exit_addr(uint32_t n); static void zend_jit_trace_add_code(const void *start, uint32_t size); +static zend_bool dominates(const zend_basic_block *blocks, int a, int b) { + while (blocks[b].level > blocks[a].level) { + b = blocks[b].idom; + } + return a == b; +} + static zend_bool zend_ssa_is_last_use(const zend_op_array *op_array, const zend_ssa *ssa, int var, int use) { + int next_use; + if (ssa->vars[var].phi_use_chain) { zend_ssa_phi *phi = ssa->vars[var].phi_use_chain; do { @@ -132,8 +141,24 @@ static zend_bool zend_ssa_is_last_use(const zend_op_array *op_array, const zend_ } while (phi); } - use = zend_ssa_next_use(ssa->ops, var, use); - return use < 0 || zend_ssa_is_no_val_use(op_array->opcodes + use, ssa->ops + use, var); + next_use = zend_ssa_next_use(ssa->ops, var, use); + if (next_use < 0) { + int b = ssa->cfg.map[use]; + int prev_use = ssa->vars[var].use_chain; + + while (prev_use >= 0 && prev_use != use) { + if (b != ssa->cfg.map[prev_use] + && dominates(ssa->cfg.blocks, b, ssa->cfg.map[prev_use]) + && !zend_ssa_is_no_val_use(op_array->opcodes + prev_use, ssa->ops + prev_use, var)) { + return 0; + } + prev_use = zend_ssa_next_use(ssa->ops, var, prev_use); + } + return 1; + } else if (zend_ssa_is_no_val_use(op_array->opcodes + next_use, ssa->ops + next_use, var)) { + return 1; + } + return 0; } static zend_bool zend_ival_is_last_use(const zend_lifetime_interval *ival, int use) From a03c1ed7aa2325d91595dcf9371297ab45543517 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 17 Sep 2020 18:55:15 +0200 Subject: [PATCH 40/67] Remove vestiges of embedded mysql from tests --- ext/mysqli/mysqli.c | 1 - ext/mysqli/mysqli_driver.c | 1 + ext/mysqli/php_mysqli_structs.h | 1 - ext/mysqli/tests/001.phpt | 1 - ext/mysqli/tests/017.phpt | 1 - ext/mysqli/tests/033.phpt | 1 - ext/mysqli/tests/034.phpt | 1 - ext/mysqli/tests/045.phpt | 1 - ext/mysqli/tests/049.phpt | 1 - ext/mysqli/tests/071.phpt | 1 - ext/mysqli/tests/073.phpt | 2 +- ext/mysqli/tests/bug33263.phpt | 1 - ext/mysqli/tests/bug42378.phpt | 1 - ext/mysqli/tests/bug45019.phpt | 1 - ext/mysqli/tests/bug52082.phpt | 1 - ext/mysqli/tests/bug67839.phpt | 1 - ext/mysqli/tests/bug70384.phpt | 1 - ext/mysqli/tests/bug73462.phpt | 1 - ext/mysqli/tests/bug73949.phpt | 1 - ext/mysqli/tests/bug75448.phpt | 1 - ext/mysqli/tests/bug76386.phpt | 1 - ext/mysqli/tests/mysqli_affected_rows.phpt | 1 - ext/mysqli/tests/mysqli_affected_rows_oo.phpt | 1 - ext/mysqli/tests/mysqli_auth_pam.phpt | 1 - ext/mysqli/tests/mysqli_autocommit.phpt | 1 - ext/mysqli/tests/mysqli_autocommit_oo.phpt | 1 - .../tests/mysqli_begin_transaction.phpt | 1 - ext/mysqli/tests/mysqli_change_user.phpt | 1 - .../tests/mysqli_change_user_get_lock.phpt | 1 - .../tests/mysqli_change_user_insert_id.phpt | 1 - .../mysqli_change_user_locks_temporary.phpt | 1 - ext/mysqli/tests/mysqli_change_user_new.phpt | 1 - ext/mysqli/tests/mysqli_change_user_old.phpt | 1 - ext/mysqli/tests/mysqli_change_user_oo.phpt | 1 - ...ysqli_change_user_prepared_statements.phpt | 1 - .../tests/mysqli_change_user_rollback.phpt | 1 - .../tests/mysqli_change_user_set_names.phpt | 1 - ext/mysqli/tests/mysqli_character_set.phpt | 1 - .../tests/mysqli_character_set_name.phpt | 1 - .../tests/mysqli_character_set_name_oo.phpt | 1 - .../mysqli_class_mysqli_driver_interface.phpt | 1 - .../tests/mysqli_class_mysqli_interface.phpt | 1 - ...ysqli_class_mysqli_properties_no_conn.phpt | 1 - .../mysqli_class_mysqli_result_interface.phpt | 1 - .../mysqli_class_mysqli_stmt_interface.phpt | 1 - .../tests/mysqli_class_mysqli_warning.phpt | 1 - ext/mysqli/tests/mysqli_close.phpt | 1 - ext/mysqli/tests/mysqli_close_oo.phpt | 1 - ext/mysqli/tests/mysqli_commit.phpt | 1 - ext/mysqli/tests/mysqli_commit_oo.phpt | 1 - ext/mysqli/tests/mysqli_connect.phpt | 1 - ext/mysqli/tests/mysqli_connect_errno.phpt | 1 - ext/mysqli/tests/mysqli_connect_error.phpt | 1 - ext/mysqli/tests/mysqli_connect_oo.phpt | 1 - .../tests/mysqli_connect_oo_defaults.phpt | 1 - .../tests/mysqli_connect_oo_warnings.phpt | 1 - ext/mysqli/tests/mysqli_connect_twice.phpt | 1 - ext/mysqli/tests/mysqli_constants.phpt | 1 - .../tests/mysqli_constants_categories.phpt | 1 - ext/mysqli/tests/mysqli_data_seek.phpt | 1 - ext/mysqli/tests/mysqli_data_seek_oo.phpt | 1 - ext/mysqli/tests/mysqli_debug.phpt | 1 - ext/mysqli/tests/mysqli_debug_append.phpt | 1 - .../tests/mysqli_debug_control_string.phpt | 1 - ext/mysqli/tests/mysqli_debug_ini.phpt | 1 - .../mysqli_debug_mysqlnd_control_string.phpt | 1 - .../tests/mysqli_debug_mysqlnd_only.phpt | 1 - .../mysqli_disable_reads_from_master.phpt | 1 - ext/mysqli/tests/mysqli_driver.phpt | 1 - ext/mysqli/tests/mysqli_dump_debug_info.phpt | 1 - .../tests/mysqli_dump_debug_info_oo.phpt | 1 - ext/mysqli/tests/mysqli_embedded_connect.phpt | 32 ------------------- .../mysqli_enable_reads_from_master.phpt | 1 - ext/mysqli/tests/mysqli_errno.phpt | 1 - ext/mysqli/tests/mysqli_errno_oo.phpt | 1 - ext/mysqli/tests/mysqli_error.phpt | 1 - ext/mysqli/tests/mysqli_error_oo.phpt | 1 - ext/mysqli/tests/mysqli_error_unicode.phpt | 1 - ext/mysqli/tests/mysqli_expire_password.phpt | 1 - ext/mysqli/tests/mysqli_explain_metadata.phpt | 1 - ext/mysqli/tests/mysqli_fetch_all.phpt | 1 - ext/mysqli/tests/mysqli_fetch_all_oo.phpt | 1 - ext/mysqli/tests/mysqli_fetch_array.phpt | 1 - .../tests/mysqli_fetch_array_assoc.phpt | 1 - .../tests/mysqli_fetch_array_many_rows.phpt | 1 - ext/mysqli/tests/mysqli_fetch_array_oo.phpt | 1 - ext/mysqli/tests/mysqli_fetch_assoc.phpt | 1 - ext/mysqli/tests/mysqli_fetch_assoc_bit.phpt | 1 - .../tests/mysqli_fetch_assoc_no_alias.phpt | 1 - .../mysqli_fetch_assoc_no_alias_utf8.phpt | 1 - ext/mysqli/tests/mysqli_fetch_assoc_oo.phpt | 1 - .../tests/mysqli_fetch_assoc_zerofill.phpt | 1 - ext/mysqli/tests/mysqli_fetch_field.phpt | 1 - .../tests/mysqli_fetch_field_direct.phpt | 1 - .../tests/mysqli_fetch_field_direct_oo.phpt | 1 - .../tests/mysqli_fetch_field_flags.phpt | 1 - ext/mysqli/tests/mysqli_fetch_field_oo.phpt | 1 - .../tests/mysqli_fetch_field_types.phpt | 1 - ext/mysqli/tests/mysqli_fetch_fields.phpt | 1 - ext/mysqli/tests/mysqli_fetch_lengths.phpt | 1 - ext/mysqli/tests/mysqli_fetch_lengths_oo.phpt | 1 - ext/mysqli/tests/mysqli_fetch_object.phpt | 1 - .../mysqli_fetch_object_no_constructor.phpt | 1 - .../tests/mysqli_fetch_object_no_object.phpt | 1 - ext/mysqli/tests/mysqli_fetch_object_oo.phpt | 1 - ext/mysqli/tests/mysqli_fetch_row.phpt | 1 - ext/mysqli/tests/mysqli_field_count.phpt | 1 - ext/mysqli/tests/mysqli_field_seek.phpt | 1 - ext/mysqli/tests/mysqli_field_tell.phpt | 1 - ext/mysqli/tests/mysqli_fork.phpt | 1 - ext/mysqli/tests/mysqli_free_result.phpt | 1 - ext/mysqli/tests/mysqli_get_charset.phpt | 1 - ext/mysqli/tests/mysqli_get_client_info.phpt | 1 - ext/mysqli/tests/mysqli_get_client_stats.phpt | 1 - ...mysqli_get_client_stats_implicit_free.phpt | 1 - .../tests/mysqli_get_client_stats_off.phpt | 1 - .../tests/mysqli_get_client_stats_ps.phpt | 1 - .../mysqli_get_client_stats_skipped.phpt | 1 - .../tests/mysqli_get_connection_stats.phpt | 1 - .../mysqli_get_connection_stats_off.phpt | 1 - ext/mysqli/tests/mysqli_get_host_info.phpt | 1 - ext/mysqli/tests/mysqli_get_proto_info.phpt | 1 - ext/mysqli/tests/mysqli_get_server_info.phpt | 1 - .../tests/mysqli_get_server_version.phpt | 1 - ext/mysqli/tests/mysqli_get_warnings.phpt | 1 - ext/mysqli/tests/mysqli_info.phpt | 1 - ext/mysqli/tests/mysqli_init.phpt | 1 - ext/mysqli/tests/mysqli_insert_id.phpt | 1 - ext/mysqli/tests/mysqli_kill.phpt | 1 - ext/mysqli/tests/mysqli_max_links.phpt | 1 - ext/mysqli/tests/mysqli_more_results.phpt | 1 - ext/mysqli/tests/mysqli_multi_query.phpt | 1 - .../mysqli_mysqlnd_read_timeout_long.phpt | 1 - .../mysqli_mysqlnd_read_timeout_zero.phpt | 1 - ext/mysqli/tests/mysqli_next_result.phpt | 1 - ext/mysqli/tests/mysqli_no_reconnect.phpt | 1 - ext/mysqli/tests/mysqli_num_fields.phpt | 1 - ext/mysqli/tests/mysqli_num_rows.phpt | 1 - ext/mysqli/tests/mysqli_open_bug74432.phpt | 1 - ext/mysqli/tests/mysqli_options.phpt | 1 - .../tests/mysqli_options_init_command.phpt | 1 - .../mysqli_options_int_and_float_native.phpt | 1 - .../tests/mysqli_options_openbasedir.phpt | 1 - ext/mysqli/tests/mysqli_pam_sha256.phpt | 1 - .../mysqli_pam_sha256_public_key_ini.phpt | 1 - .../mysqli_pam_sha256_public_key_option.phpt | 1 - ..._pam_sha256_public_key_option_invalid.phpt | 1 - .../tests/mysqli_pconn_conn_multiple.phpt | 1 - ext/mysqli/tests/mysqli_pconn_disabled.phpt | 1 - ext/mysqli/tests/mysqli_pconn_kill.phpt | 1 - ext/mysqli/tests/mysqli_pconn_limits.phpt | 1 - ext/mysqli/tests/mysqli_pconn_max_links.phpt | 1 - ext/mysqli/tests/mysqli_pconn_reuse.phpt | 1 - ext/mysqli/tests/mysqli_pconn_twice.phpt | 1 - ext/mysqli/tests/mysqli_pconnect.phpt | 1 - ext/mysqli/tests/mysqli_phpinfo.phpt | 1 - ext/mysqli/tests/mysqli_ping.phpt | 1 - ext/mysqli/tests/mysqli_poll.phpt | 1 - ext/mysqli/tests/mysqli_poll_kill.phpt | 1 - .../mysqli_poll_mixing_insert_select.phpt | 1 - ext/mysqli/tests/mysqli_poll_reference.phpt | 1 - ext/mysqli/tests/mysqli_prepare.phpt | 1 - .../tests/mysqli_prepare_no_object.phpt | 1 - ext/mysqli/tests/mysqli_ps_select_union.phpt | 1 - ext/mysqli/tests/mysqli_query.phpt | 1 - ext/mysqli/tests/mysqli_query_iterators.phpt | 1 - ext/mysqli/tests/mysqli_query_unicode.phpt | 1 - ext/mysqli/tests/mysqli_real_connect.phpt | 1 - .../tests/mysqli_real_connect_pconn.phpt | 1 - .../tests/mysqli_real_escape_string.phpt | 1 - .../tests/mysqli_real_escape_string_big5.phpt | 1 - .../mysqli_real_escape_string_eucjpms.phpt | 1 - .../mysqli_real_escape_string_euckr.phpt | 1 - .../mysqli_real_escape_string_gb2312.phpt | 1 - .../tests/mysqli_real_escape_string_gbk.phpt | 1 - ...mysqli_real_escape_string_nobackslash.phpt | 1 - .../tests/mysqli_real_escape_string_sjis.phpt | 1 - .../mysqli_real_escape_string_unicode.phpt | 1 - ext/mysqli/tests/mysqli_reap_async_query.phpt | 1 - ext/mysqli/tests/mysqli_reconnect.phpt | 1 - .../tests/mysqli_release_savepoint.phpt | 1 - ext/mysqli/tests/mysqli_report.phpt | 1 - ext/mysqli/tests/mysqli_report_new.phpt | 1 - ext/mysqli/tests/mysqli_report_wo_ps.phpt | 1 - .../tests/mysqli_result_invalid_mode.phpt | 1 - .../tests/mysqli_result_references.phpt | 1 - .../mysqli_result_references_mysqlnd.phpt | 1 - .../tests/mysqli_result_unclonable.phpt | 1 - ext/mysqli/tests/mysqli_rollback.phpt | 1 - ext/mysqli/tests/mysqli_savepoint.phpt | 1 - ext/mysqli/tests/mysqli_select_db.phpt | 1 - ext/mysqli/tests/mysqli_send_query.phpt | 1 - ext/mysqli/tests/mysqli_set_charset.phpt | 1 - ext/mysqli/tests/mysqli_set_opt.phpt | 1 - ext/mysqli/tests/mysqli_sqlstate.phpt | 1 - ext/mysqli/tests/mysqli_ssl_set.phpt | 1 - ext/mysqli/tests/mysqli_stat.phpt | 1 - .../tests/mysqli_stmt_affected_rows.phpt | 1 - ext/mysqli/tests/mysqli_stmt_attr_get.phpt | 1 - .../tests/mysqli_stmt_attr_get_prefetch.phpt | 1 - ext/mysqli/tests/mysqli_stmt_attr_set.phpt | 1 - ext/mysqli/tests/mysqli_stmt_big_prepare.phpt | 1 - ext/mysqli/tests/mysqli_stmt_bind_limits.phpt | 1 - ext/mysqli/tests/mysqli_stmt_bind_param.phpt | 1 - ...mysqli_stmt_bind_param_call_user_func.phpt | 1 - ...stmt_bind_param_check_param_no_change.phpt | 1 - .../mysqli_stmt_bind_param_many_columns.phpt | 1 - .../mysqli_stmt_bind_param_references.phpt | 1 - .../mysqli_stmt_bind_param_type_juggling.phpt | 1 - ext/mysqli/tests/mysqli_stmt_bind_result.phpt | 1 - .../tests/mysqli_stmt_bind_result_bit.phpt | 1 - .../tests/mysqli_stmt_bind_result_format.phpt | 1 - .../mysqli_stmt_bind_result_references.phpt | 1 - .../mysqli_stmt_bind_result_zerofill.phpt | 1 - ext/mysqli/tests/mysqli_stmt_close.phpt | 1 - ext/mysqli/tests/mysqli_stmt_data_seek.phpt | 1 - .../tests/mysqli_stmt_datatype_change.phpt | 1 - ext/mysqli/tests/mysqli_stmt_errno.phpt | 1 - ext/mysqli/tests/mysqli_stmt_error.phpt | 1 - ext/mysqli/tests/mysqli_stmt_execute.phpt | 1 - ext/mysqli/tests/mysqli_stmt_fetch.phpt | 1 - ext/mysqli/tests/mysqli_stmt_fetch_bit.phpt | 1 - ...ysqli_stmt_fetch_fields_win32_unicode.phpt | 1 - ext/mysqli/tests/mysqli_stmt_fetch_geom.phpt | 1 - ext/mysqli/tests/mysqli_stmt_field_count.phpt | 1 - ext/mysqli/tests/mysqli_stmt_free_result.phpt | 1 - ext/mysqli/tests/mysqli_stmt_get_result.phpt | 1 - ext/mysqli/tests/mysqli_stmt_get_result2.phpt | 1 - .../tests/mysqli_stmt_get_result_bit.phpt | 1 - .../mysqli_stmt_get_result_field_count.phpt | 1 - .../tests/mysqli_stmt_get_result_geom.phpt | 1 - .../mysqli_stmt_get_result_metadata.phpt | 1 - ..._stmt_get_result_metadata_fetch_field.phpt | 1 - .../mysqli_stmt_get_result_non_select.phpt | 1 - .../tests/mysqli_stmt_get_result_seek.phpt | 1 - .../tests/mysqli_stmt_get_result_types.phpt | 1 - .../tests/mysqli_stmt_get_warnings.phpt | 1 - ext/mysqli/tests/mysqli_stmt_init.phpt | 1 - ext/mysqli/tests/mysqli_stmt_insert_id.phpt | 1 - ext/mysqli/tests/mysqli_stmt_num_rows.phpt | 1 - ext/mysqli/tests/mysqli_stmt_param_count.phpt | 1 - ext/mysqli/tests/mysqli_stmt_prepare.phpt | 1 - ext/mysqli/tests/mysqli_stmt_reset.phpt | 1 - .../tests/mysqli_stmt_result_metadata.phpt | 1 - .../mysqli_stmt_result_metadata_sqltests.phpt | 1 - .../tests/mysqli_stmt_send_long_data.phpt | 1 - ...t_send_long_data_packet_size_libmysql.phpt | 1 - ...mt_send_long_data_packet_size_mysqlnd.phpt | 1 - ext/mysqli/tests/mysqli_stmt_sqlstate.phpt | 1 - .../tests/mysqli_stmt_store_result.phpt | 1 - ext/mysqli/tests/mysqli_stmt_unclonable.phpt | 1 - ext/mysqli/tests/mysqli_store_result.phpt | 1 - .../tests/mysqli_store_result_buffered_c.phpt | 1 - .../tests/mysqli_store_result_copy.phpt | 1 - ext/mysqli/tests/mysqli_thread_id.phpt | 1 - ext/mysqli/tests/mysqli_thread_safe.phpt | 1 - ext/mysqli/tests/mysqli_unclonable.phpt | 1 - ext/mysqli/tests/mysqli_use_result.phpt | 1 - ext/mysqli/tests/mysqli_warning_count.phpt | 1 - .../tests/mysqli_warning_unclonable.phpt | 1 - ext/mysqli/tests/skipifnotemb.inc | 5 --- 261 files changed, 2 insertions(+), 295 deletions(-) delete mode 100644 ext/mysqli/tests/mysqli_embedded_connect.phpt delete mode 100644 ext/mysqli/tests/skipifnotemb.inc diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 620e9f13924e9..64601e66b4eda 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -521,7 +521,6 @@ static PHP_GINIT_FUNCTION(mysqli) mysqli_globals->report_mode = 0; mysqli_globals->report_ht = 0; mysqli_globals->allow_local_infile = 0; - mysqli_globals->embedded = 0; mysqli_globals->rollback_on_cached_plink = FALSE; } /* }}} */ diff --git a/ext/mysqli/mysqli_driver.c b/ext/mysqli/mysqli_driver.c index 6bcf5902df58f..c40ff00583137 100644 --- a/ext/mysqli/mysqli_driver.c +++ b/ext/mysqli/mysqli_driver.c @@ -81,6 +81,7 @@ static int driver_report_write(mysqli_object *obj, zval *value) /* {{{ property driver_embedded_read */ static int driver_embedded_read(mysqli_object *obj, zval *retval, zend_bool quiet) { + /* No longer supported */ ZVAL_FALSE(retval); return SUCCESS; diff --git a/ext/mysqli/php_mysqli_structs.h b/ext/mysqli/php_mysqli_structs.h index ad46511d04c22..16ed9ddefce5c 100644 --- a/ext/mysqli/php_mysqli_structs.h +++ b/ext/mysqli/php_mysqli_structs.h @@ -289,7 +289,6 @@ ZEND_BEGIN_MODULE_GLOBALS(mysqli) zend_long report_mode; HashTable *report_ht; zend_ulong multi_query; - zend_ulong embedded; zend_bool rollback_on_cached_plink; ZEND_END_MODULE_GLOBALS(mysqli) diff --git a/ext/mysqli/tests/001.phpt b/ext/mysqli/tests/001.phpt index f8ddc8a38dcc4..e9024105969cc 100644 --- a/ext/mysqli/tests/001.phpt +++ b/ext/mysqli/tests/001.phpt @@ -3,7 +3,6 @@ mysqli connect --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/017.phpt b/ext/mysqli/tests/017.phpt index 0a1903abf8f3e..cb825066cd279 100644 --- a/ext/mysqli/tests/017.phpt +++ b/ext/mysqli/tests/017.phpt @@ -3,7 +3,6 @@ mysqli fetch functions --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/033.phpt b/ext/mysqli/tests/033.phpt index b5c4e3046bfcf..387faa6de2aaa 100644 --- a/ext/mysqli/tests/033.phpt +++ b/ext/mysqli/tests/033.phpt @@ -3,7 +3,6 @@ function test: mysqli_get_host_info --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/034.phpt b/ext/mysqli/tests/034.phpt index f6e19ce5515d8..655871c96ffe3 100644 --- a/ext/mysqli/tests/034.phpt +++ b/ext/mysqli/tests/034.phpt @@ -3,7 +3,6 @@ function test: mysqli_get_proto_info --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/045.phpt b/ext/mysqli/tests/045.phpt index 10773ace1b7a6..af38b6786dea5 100644 --- a/ext/mysqli/tests/045.phpt +++ b/ext/mysqli/tests/045.phpt @@ -3,7 +3,6 @@ mysqli_stmt_bind_result (SHOW) --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/071.phpt b/ext/mysqli/tests/071.phpt index 0a1e4ce62e97e..a31832b42113e 100644 --- a/ext/mysqli/tests/071.phpt +++ b/ext/mysqli/tests/071.phpt @@ -3,7 +3,6 @@ mysqli thread_id & kill --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/073.phpt b/ext/mysqli/tests/073.phpt index 09156532d8b26..496beed114f43 100644 --- a/ext/mysqli/tests/073.phpt +++ b/ext/mysqli/tests/073.phpt @@ -15,7 +15,7 @@ mysqli_driver properties print "done!"; ?> --EXPECTF-- -bool(%s) +bool(false) int(%d) string(%d) "%s" int(%d) diff --git a/ext/mysqli/tests/bug33263.phpt b/ext/mysqli/tests/bug33263.phpt index 5df4065d25056..ccf619d09f375 100644 --- a/ext/mysqli/tests/bug33263.phpt +++ b/ext/mysqli/tests/bug33263.phpt @@ -3,7 +3,6 @@ Bug #33263 (mysqli_real_connect in __construct) --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/bug42378.phpt b/ext/mysqli/tests/bug42378.phpt index 3b0638c840a54..3019679e5dc01 100644 --- a/ext/mysqli/tests/bug42378.phpt +++ b/ext/mysqli/tests/bug42378.phpt @@ -3,7 +3,6 @@ Bug #42378 (bind_result memory exhaustion, SELECT column, FORMAT(...) AS _format --SKIPIF-- --INI-- diff --git a/ext/mysqli/tests/bug45019.phpt b/ext/mysqli/tests/bug45019.phpt index faad5b9b9012d..c3316133f129f 100644 --- a/ext/mysqli/tests/bug45019.phpt +++ b/ext/mysqli/tests/bug45019.phpt @@ -3,7 +3,6 @@ Bug #45019 (Segmentation fault with SELECT ? and UNION) --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/bug52082.phpt b/ext/mysqli/tests/bug52082.phpt index f601406e8fedd..666804dac442e 100644 --- a/ext/mysqli/tests/bug52082.phpt +++ b/ext/mysqli/tests/bug52082.phpt @@ -3,7 +3,6 @@ Bug #52082 (character_set_client & character_set_connection reset after mysqli_c --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/bug67839.phpt b/ext/mysqli/tests/bug67839.phpt index 4e8fd68ffdbc9..b4e92d839f03d 100644 --- a/ext/mysqli/tests/bug67839.phpt +++ b/ext/mysqli/tests/bug67839.phpt @@ -3,7 +3,6 @@ mysqli_float_handling - ensure 4 byte float is handled correctly --SKIPIF-- --INI-- diff --git a/ext/mysqli/tests/bug70384.phpt b/ext/mysqli/tests/bug70384.phpt index 27b9d16f25a65..5489905a0a67b 100644 --- a/ext/mysqli/tests/bug70384.phpt +++ b/ext/mysqli/tests/bug70384.phpt @@ -3,7 +3,6 @@ mysqli_float_handling - ensure 4 byte float is handled correctly --SKIPIF-- server_version < 50709) { diff --git a/ext/mysqli/tests/bug73462.phpt b/ext/mysqli/tests/bug73462.phpt index 1aa18d7fb6d5e..224c981dfa901 100644 --- a/ext/mysqli/tests/bug73462.phpt +++ b/ext/mysqli/tests/bug73462.phpt @@ -3,7 +3,6 @@ Bug #73462 (Persistent connections don't set $connect_errno) --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/bug73949.phpt b/ext/mysqli/tests/bug73949.phpt index e6bcc4ff627bd..d8b2f31d0b365 100644 --- a/ext/mysqli/tests/bug73949.phpt +++ b/ext/mysqli/tests/bug73949.phpt @@ -3,7 +3,6 @@ Bug #73949 (leak in mysqli_fetch_object) --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/bug75448.phpt b/ext/mysqli/tests/bug75448.phpt index 5900ee0565925..2d6926df2003b 100644 --- a/ext/mysqli/tests/bug75448.phpt +++ b/ext/mysqli/tests/bug75448.phpt @@ -3,7 +3,6 @@ mysqli_prepare() called on a closed connection should return FALSE (bug #75448) --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/bug76386.phpt b/ext/mysqli/tests/bug76386.phpt index 2f5ded1de474c..6173ebad8cd6c 100644 --- a/ext/mysqli/tests/bug76386.phpt +++ b/ext/mysqli/tests/bug76386.phpt @@ -3,7 +3,6 @@ Prepared Statement formatter truncates fractional seconds from date/time column --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_affected_rows_oo.phpt b/ext/mysqli/tests/mysqli_affected_rows_oo.phpt index 5a83d1cfb4960..384ecd5e62d03 100644 --- a/ext/mysqli/tests/mysqli_affected_rows_oo.phpt +++ b/ext/mysqli/tests/mysqli_affected_rows_oo.phpt @@ -3,7 +3,6 @@ mysqli->affected_rows --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_auth_pam.phpt b/ext/mysqli/tests/mysqli_auth_pam.phpt index cdbcf2947e379..a20851a4db7f9 100644 --- a/ext/mysqli/tests/mysqli_auth_pam.phpt +++ b/ext/mysqli/tests/mysqli_auth_pam.phpt @@ -3,7 +3,6 @@ PAM auth plugin --SKIPIF-- autocommit() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_change_user_get_lock.phpt b/ext/mysqli/tests/mysqli_change_user_get_lock.phpt index 75d0930a83b00..605a408146fae 100644 --- a/ext/mysqli/tests/mysqli_change_user_get_lock.phpt +++ b/ext/mysqli/tests/mysqli_change_user_get_lock.phpt @@ -3,7 +3,6 @@ mysqli_change_user() - GET_LOCK() --SKIPIF-- diff --git a/ext/mysqli/tests/mysqli_change_user_insert_id.phpt b/ext/mysqli/tests/mysqli_change_user_insert_id.phpt index 52e1c1c49109d..8fe529236b54b 100644 --- a/ext/mysqli/tests/mysqli_change_user_insert_id.phpt +++ b/ext/mysqli/tests/mysqli_change_user_insert_id.phpt @@ -3,7 +3,6 @@ mysqli_change_user() - LAST_INSERT_ID() - http://bugs.mysql.com/bug.php?id=45184 --SKIPIF-- diff --git a/ext/mysqli/tests/mysqli_change_user_new.phpt b/ext/mysqli/tests/mysqli_change_user_new.phpt index 1d6d2f59457d4..a9744ce98044c 100644 --- a/ext/mysqli/tests/mysqli_change_user_new.phpt +++ b/ext/mysqli/tests/mysqli_change_user_new.phpt @@ -3,7 +3,6 @@ mysqli_change_user(), MySQL 5.6+ --SKIPIF-- change_user() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_change_user_rollback.phpt b/ext/mysqli/tests/mysqli_change_user_rollback.phpt index 19c4e36375fce..184dd23aa6573 100644 --- a/ext/mysqli/tests/mysqli_change_user_rollback.phpt +++ b/ext/mysqli/tests/mysqli_change_user_rollback.phpt @@ -3,7 +3,6 @@ mysqli_change_user() - ROLLBACK --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_character_set_name_oo.phpt b/ext/mysqli/tests/mysqli_character_set_name_oo.phpt index 843fefed3160e..fc5253a8074c9 100644 --- a/ext/mysqli/tests/mysqli_character_set_name_oo.phpt +++ b/ext/mysqli/tests/mysqli_character_set_name_oo.phpt @@ -3,7 +3,6 @@ mysqli_chararcter_set_name(), mysql_client_encoding() [alias] --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_class_mysqli_driver_interface.phpt b/ext/mysqli/tests/mysqli_class_mysqli_driver_interface.phpt index 27cf9f0fc62ae..65b60367da3bb 100644 --- a/ext/mysqli/tests/mysqli_class_mysqli_driver_interface.phpt +++ b/ext/mysqli/tests/mysqli_class_mysqli_driver_interface.phpt @@ -3,7 +3,6 @@ Interface of the class mysqli_driver --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_class_mysqli_interface.phpt b/ext/mysqli/tests/mysqli_class_mysqli_interface.phpt index 794f8eb241c01..48706fcf6e107 100644 --- a/ext/mysqli/tests/mysqli_class_mysqli_interface.phpt +++ b/ext/mysqli/tests/mysqli_class_mysqli_interface.phpt @@ -3,7 +3,6 @@ Interface of the class mysqli --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_class_mysqli_properties_no_conn.phpt b/ext/mysqli/tests/mysqli_class_mysqli_properties_no_conn.phpt index fa7c7cd53dd8c..a9d54c43673c1 100644 --- a/ext/mysqli/tests/mysqli_class_mysqli_properties_no_conn.phpt +++ b/ext/mysqli/tests/mysqli_class_mysqli_properties_no_conn.phpt @@ -3,7 +3,6 @@ Interface of the class mysqli --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_class_mysqli_result_interface.phpt b/ext/mysqli/tests/mysqli_class_mysqli_result_interface.phpt index 2c368abeb629e..629697a50c521 100644 --- a/ext/mysqli/tests/mysqli_class_mysqli_result_interface.phpt +++ b/ext/mysqli/tests/mysqli_class_mysqli_result_interface.phpt @@ -3,7 +3,6 @@ Interface of the class mysqli_result --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_class_mysqli_stmt_interface.phpt b/ext/mysqli/tests/mysqli_class_mysqli_stmt_interface.phpt index 8c79d3529732a..40666a65bede5 100644 --- a/ext/mysqli/tests/mysqli_class_mysqli_stmt_interface.phpt +++ b/ext/mysqli/tests/mysqli_class_mysqli_stmt_interface.phpt @@ -3,7 +3,6 @@ Interface of the class mysqli_stmt --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_class_mysqli_warning.phpt b/ext/mysqli/tests/mysqli_class_mysqli_warning.phpt index f11984d0efb8b..0aedb50bb2272 100644 --- a/ext/mysqli/tests/mysqli_class_mysqli_warning.phpt +++ b/ext/mysqli/tests/mysqli_class_mysqli_warning.phpt @@ -3,7 +3,6 @@ Interface of the class mysqli_warning - TODO --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_close_oo.phpt b/ext/mysqli/tests/mysqli_close_oo.phpt index 351df66d94e81..2c29b02d486c1 100644 --- a/ext/mysqli/tests/mysqli_close_oo.phpt +++ b/ext/mysqli/tests/mysqli_close_oo.phpt @@ -3,7 +3,6 @@ mysqli_close() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_commit.phpt b/ext/mysqli/tests/mysqli_commit.phpt index 33bb2011cdb9b..a85b96229864b 100644 --- a/ext/mysqli/tests/mysqli_commit.phpt +++ b/ext/mysqli/tests/mysqli_commit.phpt @@ -3,7 +3,6 @@ mysqli_commit() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_connect_errno.phpt b/ext/mysqli/tests/mysqli_connect_errno.phpt index 2bc86de5ccb8b..7e786e3d87d82 100644 --- a/ext/mysqli/tests/mysqli_connect_errno.phpt +++ b/ext/mysqli/tests/mysqli_connect_errno.phpt @@ -3,7 +3,6 @@ mysqli_connect_errno() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_connect_error.phpt b/ext/mysqli/tests/mysqli_connect_error.phpt index 6643ed27f092d..801f18535ee99 100644 --- a/ext/mysqli/tests/mysqli_connect_error.phpt +++ b/ext/mysqli/tests/mysqli_connect_error.phpt @@ -3,7 +3,6 @@ mysqli_connect_error() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_connect_oo.phpt b/ext/mysqli/tests/mysqli_connect_oo.phpt index e39b4ac2dab1b..8b0fcfbd2f51f 100644 --- a/ext/mysqli/tests/mysqli_connect_oo.phpt +++ b/ext/mysqli/tests/mysqli_connect_oo.phpt @@ -3,7 +3,6 @@ new mysqli() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_connect_oo_defaults.phpt b/ext/mysqli/tests/mysqli_connect_oo_defaults.phpt index c5e65f761650d..4893b6d134ccf 100644 --- a/ext/mysqli/tests/mysqli_connect_oo_defaults.phpt +++ b/ext/mysqli/tests/mysqli_connect_oo_defaults.phpt @@ -3,7 +3,6 @@ new mysqli() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_connect_oo_warnings.phpt b/ext/mysqli/tests/mysqli_connect_oo_warnings.phpt index 5b410b746b111..8b5886bba28cf 100644 --- a/ext/mysqli/tests/mysqli_connect_oo_warnings.phpt +++ b/ext/mysqli/tests/mysqli_connect_oo_warnings.phpt @@ -3,7 +3,6 @@ new mysqli() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_constants.phpt b/ext/mysqli/tests/mysqli_constants.phpt index 7087ca0fcd577..22e3cd9d2ba5e 100644 --- a/ext/mysqli/tests/mysqli_constants.phpt +++ b/ext/mysqli/tests/mysqli_constants.phpt @@ -3,7 +3,6 @@ Constants exported by ext/mysqli --SKIPIF-- --INI-- diff --git a/ext/mysqli/tests/mysqli_constants_categories.phpt b/ext/mysqli/tests/mysqli_constants_categories.phpt index d02463e20a96c..29291fe203e71 100644 --- a/ext/mysqli/tests/mysqli_constants_categories.phpt +++ b/ext/mysqli/tests/mysqli_constants_categories.phpt @@ -3,7 +3,6 @@ Constants exported by ext/mysqli - checking category - PHP bug not mysqli bug (c --SKIPIF-- --FILE-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_data_seek_oo.phpt b/ext/mysqli/tests/mysqli_data_seek_oo.phpt index e945199d1b7b1..1a60d64a98333 100644 --- a/ext/mysqli/tests/mysqli_data_seek_oo.phpt +++ b/ext/mysqli/tests/mysqli_data_seek_oo.phpt @@ -3,7 +3,6 @@ mysqli_result->data_seek() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_debug.phpt b/ext/mysqli/tests/mysqli_debug.phpt index c701d765c2be9..14c95c2de35be 100644 --- a/ext/mysqli/tests/mysqli_debug.phpt +++ b/ext/mysqli/tests/mysqli_debug.phpt @@ -3,7 +3,6 @@ mysqli_debug() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_dump_debug_info.phpt b/ext/mysqli/tests/mysqli_dump_debug_info.phpt index 18399ee8a6f22..8b97304bc6e04 100644 --- a/ext/mysqli/tests/mysqli_dump_debug_info.phpt +++ b/ext/mysqli/tests/mysqli_dump_debug_info.phpt @@ -3,7 +3,6 @@ mysqli_dump_debug_info() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_dump_debug_info_oo.phpt b/ext/mysqli/tests/mysqli_dump_debug_info_oo.phpt index ae153a320aa1f..7fb7ba7963581 100644 --- a/ext/mysqli/tests/mysqli_dump_debug_info_oo.phpt +++ b/ext/mysqli/tests/mysqli_dump_debug_info_oo.phpt @@ -3,7 +3,6 @@ mysqli_dump_debug_info() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_embedded_connect.phpt b/ext/mysqli/tests/mysqli_embedded_connect.phpt deleted file mode 100644 index aa970aaf74f02..0000000000000 --- a/ext/mysqli/tests/mysqli_embedded_connect.phpt +++ /dev/null @@ -1,32 +0,0 @@ ---TEST-- -mysqli_embedded_connect() ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -Warning: mysqli_embedded_connect(): Argument #1 must be of type mysqli, null given in %s on line %d -done! diff --git a/ext/mysqli/tests/mysqli_enable_reads_from_master.phpt b/ext/mysqli/tests/mysqli_enable_reads_from_master.phpt index 0365b14e75cd3..d6e3088bc2d57 100644 --- a/ext/mysqli/tests/mysqli_enable_reads_from_master.phpt +++ b/ext/mysqli/tests/mysqli_enable_reads_from_master.phpt @@ -3,7 +3,6 @@ mysqli_enable_reads_from_master() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_errno_oo.phpt b/ext/mysqli/tests/mysqli_errno_oo.phpt index d35477b2c40d4..d2dab3cec0dcd 100644 --- a/ext/mysqli/tests/mysqli_errno_oo.phpt +++ b/ext/mysqli/tests/mysqli_errno_oo.phpt @@ -3,7 +3,6 @@ $mysqli->errno --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_error.phpt b/ext/mysqli/tests/mysqli_error.phpt index 7a35cd0dd143e..91b2f715a1426 100644 --- a/ext/mysqli/tests/mysqli_error.phpt +++ b/ext/mysqli/tests/mysqli_error.phpt @@ -3,7 +3,6 @@ mysqli_error() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_error_oo.phpt b/ext/mysqli/tests/mysqli_error_oo.phpt index 177e3a9f5ac75..d690a619951f1 100644 --- a/ext/mysqli/tests/mysqli_error_oo.phpt +++ b/ext/mysqli/tests/mysqli_error_oo.phpt @@ -3,7 +3,6 @@ $mysqli->error --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_error_unicode.phpt b/ext/mysqli/tests/mysqli_error_unicode.phpt index bea05179ea55e..1da3f5fd698ea 100644 --- a/ext/mysqli/tests/mysqli_error_unicode.phpt +++ b/ext/mysqli/tests/mysqli_error_unicode.phpt @@ -3,7 +3,6 @@ mysqli_error() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_expire_password.phpt b/ext/mysqli/tests/mysqli_expire_password.phpt index 18517e521a269..788a3571c5e28 100644 --- a/ext/mysqli/tests/mysqli_expire_password.phpt +++ b/ext/mysqli/tests/mysqli_expire_password.phpt @@ -3,7 +3,6 @@ MySQL 5.6 EXPIRE PASSWORD protocol change --SKIPIF-- fetch_all() (introduced with mysqlnd) --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_array_assoc.phpt b/ext/mysqli/tests/mysqli_fetch_array_assoc.phpt index 6899c0bfba6a8..defa5a541efe3 100644 --- a/ext/mysqli/tests/mysqli_fetch_array_assoc.phpt +++ b/ext/mysqli/tests/mysqli_fetch_array_assoc.phpt @@ -3,7 +3,6 @@ mysqli_fetch_array() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_array_many_rows.phpt b/ext/mysqli/tests/mysqli_fetch_array_many_rows.phpt index 5f86e3739af83..33330074df11b 100644 --- a/ext/mysqli/tests/mysqli_fetch_array_many_rows.phpt +++ b/ext/mysqli/tests/mysqli_fetch_array_many_rows.phpt @@ -3,7 +3,6 @@ mysqli_fetch_array() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_array_oo.phpt b/ext/mysqli/tests/mysqli_fetch_array_oo.phpt index 4ef3281203703..e4e39b9dc7601 100644 --- a/ext/mysqli/tests/mysqli_fetch_array_oo.phpt +++ b/ext/mysqli/tests/mysqli_fetch_array_oo.phpt @@ -3,7 +3,6 @@ mysqli->fetch_array() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_assoc.phpt b/ext/mysqli/tests/mysqli_fetch_assoc.phpt index 5372d6f1de4a4..62f2bf05e4662 100644 --- a/ext/mysqli/tests/mysqli_fetch_assoc.phpt +++ b/ext/mysqli/tests/mysqli_fetch_assoc.phpt @@ -3,7 +3,6 @@ mysqli_fetch_assoc() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_assoc_bit.phpt b/ext/mysqli/tests/mysqli_fetch_assoc_bit.phpt index 1116c38d45905..cc60a01b83a66 100644 --- a/ext/mysqli/tests/mysqli_fetch_assoc_bit.phpt +++ b/ext/mysqli/tests/mysqli_fetch_assoc_bit.phpt @@ -3,7 +3,6 @@ mysqli_fetch_assoc() - BIT --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_assoc_no_alias_utf8.phpt b/ext/mysqli/tests/mysqli_fetch_assoc_no_alias_utf8.phpt index e1ed5c5c87d78..d74fb4827010d 100644 --- a/ext/mysqli/tests/mysqli_fetch_assoc_no_alias_utf8.phpt +++ b/ext/mysqli/tests/mysqli_fetch_assoc_no_alias_utf8.phpt @@ -3,7 +3,6 @@ mysqli_fetch_assoc() - utf8 --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_assoc_zerofill.phpt b/ext/mysqli/tests/mysqli_fetch_assoc_zerofill.phpt index b06124a89c545..b6968ccbaead6 100644 --- a/ext/mysqli/tests/mysqli_fetch_assoc_zerofill.phpt +++ b/ext/mysqli/tests/mysqli_fetch_assoc_zerofill.phpt @@ -3,7 +3,6 @@ mysqli_fetch_assoc() - ZEROFILL --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_field.phpt b/ext/mysqli/tests/mysqli_fetch_field.phpt index 33a35c7005c81..f70f422534aad 100644 --- a/ext/mysqli/tests/mysqli_fetch_field.phpt +++ b/ext/mysqli/tests/mysqli_fetch_field.phpt @@ -3,7 +3,6 @@ mysqli_fetch_field() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_field_direct.phpt b/ext/mysqli/tests/mysqli_fetch_field_direct.phpt index 8b57cca094c81..b8544d87f40bf 100644 --- a/ext/mysqli/tests/mysqli_fetch_field_direct.phpt +++ b/ext/mysqli/tests/mysqli_fetch_field_direct.phpt @@ -3,7 +3,6 @@ mysqli_fetch_field_direct() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_field_direct_oo.phpt b/ext/mysqli/tests/mysqli_fetch_field_direct_oo.phpt index 5dedefcdab1b9..9c7992570184f 100644 --- a/ext/mysqli/tests/mysqli_fetch_field_direct_oo.phpt +++ b/ext/mysqli/tests/mysqli_fetch_field_direct_oo.phpt @@ -3,7 +3,6 @@ $res->fetch_field_direct(s) --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_field_flags.phpt b/ext/mysqli/tests/mysqli_fetch_field_flags.phpt index 5983075942398..14ca304aa42b8 100644 --- a/ext/mysqli/tests/mysqli_fetch_field_flags.phpt +++ b/ext/mysqli/tests/mysqli_fetch_field_flags.phpt @@ -3,7 +3,6 @@ mysqli_fetch_field() - flags/field->flags --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_field_types.phpt b/ext/mysqli/tests/mysqli_fetch_field_types.phpt index 70152212e370f..074d9ccd1c0d7 100644 --- a/ext/mysqli/tests/mysqli_fetch_field_types.phpt +++ b/ext/mysqli/tests/mysqli_fetch_field_types.phpt @@ -3,7 +3,6 @@ mysqli_fetch_field() - data types/field->type --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_fields.phpt b/ext/mysqli/tests/mysqli_fetch_fields.phpt index 5a16f736336de..114029ac101ca 100644 --- a/ext/mysqli/tests/mysqli_fetch_fields.phpt +++ b/ext/mysqli/tests/mysqli_fetch_fields.phpt @@ -3,7 +3,6 @@ mysqli_fetch_fields() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_lengths.phpt b/ext/mysqli/tests/mysqli_fetch_lengths.phpt index 707c3691d0178..371b300b17110 100644 --- a/ext/mysqli/tests/mysqli_fetch_lengths.phpt +++ b/ext/mysqli/tests/mysqli_fetch_lengths.phpt @@ -3,7 +3,6 @@ mysqli_fetch_lengths() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_lengths_oo.phpt b/ext/mysqli/tests/mysqli_fetch_lengths_oo.phpt index 18cc3839398af..1de60e0363061 100644 --- a/ext/mysqli/tests/mysqli_fetch_lengths_oo.phpt +++ b/ext/mysqli/tests/mysqli_fetch_lengths_oo.phpt @@ -3,7 +3,6 @@ mysqli_result->lengths --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_object.phpt b/ext/mysqli/tests/mysqli_fetch_object.phpt index 221ad6ab3d8d9..443b2663c7447 100644 --- a/ext/mysqli/tests/mysqli_fetch_object.phpt +++ b/ext/mysqli/tests/mysqli_fetch_object.phpt @@ -3,7 +3,6 @@ mysqli_fetch_object() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_object_no_constructor.phpt b/ext/mysqli/tests/mysqli_fetch_object_no_constructor.phpt index f773b7652816b..9aac03195ba01 100644 --- a/ext/mysqli/tests/mysqli_fetch_object_no_constructor.phpt +++ b/ext/mysqli/tests/mysqli_fetch_object_no_constructor.phpt @@ -3,7 +3,6 @@ mysqli_fetch_object() - calling constructor on class wo constructor --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_object_no_object.phpt b/ext/mysqli/tests/mysqli_fetch_object_no_object.phpt index c12b91e68edb2..75e62fd9406f8 100644 --- a/ext/mysqli/tests/mysqli_fetch_object_no_object.phpt +++ b/ext/mysqli/tests/mysqli_fetch_object_no_object.phpt @@ -3,7 +3,6 @@ mysqli_fetch_object() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_object_oo.phpt b/ext/mysqli/tests/mysqli_fetch_object_oo.phpt index 18aeb264ece95..674c68a4fd806 100644 --- a/ext/mysqli/tests/mysqli_fetch_object_oo.phpt +++ b/ext/mysqli/tests/mysqli_fetch_object_oo.phpt @@ -3,7 +3,6 @@ mysqli_fetch_object() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fetch_row.phpt b/ext/mysqli/tests/mysqli_fetch_row.phpt index ef52b5a48c375..a1a891d7029e6 100644 --- a/ext/mysqli/tests/mysqli_fetch_row.phpt +++ b/ext/mysqli/tests/mysqli_fetch_row.phpt @@ -3,7 +3,6 @@ mysqli_fetch_row() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_field_count.phpt b/ext/mysqli/tests/mysqli_field_count.phpt index fd2549ecb2ed0..26d1b8b1089f4 100644 --- a/ext/mysqli/tests/mysqli_field_count.phpt +++ b/ext/mysqli/tests/mysqli_field_count.phpt @@ -3,7 +3,6 @@ mysqli_field_count() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_field_seek.phpt b/ext/mysqli/tests/mysqli_field_seek.phpt index d4f160deb080b..1f5a6ee8fba74 100644 --- a/ext/mysqli/tests/mysqli_field_seek.phpt +++ b/ext/mysqli/tests/mysqli_field_seek.phpt @@ -3,7 +3,6 @@ mysqli_field_seek() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_field_tell.phpt b/ext/mysqli/tests/mysqli_field_tell.phpt index 1a2be4d70c2c1..3575d17d8b5a5 100644 --- a/ext/mysqli/tests/mysqli_field_tell.phpt +++ b/ext/mysqli/tests/mysqli_field_tell.phpt @@ -3,7 +3,6 @@ mysqli_field_tell() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_fork.phpt b/ext/mysqli/tests/mysqli_fork.phpt index af9f8a1f24aab..594e30178e969 100644 --- a/ext/mysqli/tests/mysqli_fork.phpt +++ b/ext/mysqli/tests/mysqli_fork.phpt @@ -3,7 +3,6 @@ Forking a child and using the same connection. --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_get_charset.phpt b/ext/mysqli/tests/mysqli_get_charset.phpt index 4c253ec551fd3..88aa0e471d3b9 100644 --- a/ext/mysqli/tests/mysqli_get_charset.phpt +++ b/ext/mysqli/tests/mysqli_get_charset.phpt @@ -3,7 +3,6 @@ mysqli_get_charset() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_get_client_stats.phpt b/ext/mysqli/tests/mysqli_get_client_stats.phpt index 49fd7470d6c3c..9ef1cc444898c 100644 --- a/ext/mysqli/tests/mysqli_get_client_stats.phpt +++ b/ext/mysqli/tests/mysqli_get_client_stats.phpt @@ -3,7 +3,6 @@ mysqli_get_client_stats() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_get_proto_info.phpt b/ext/mysqli/tests/mysqli_get_proto_info.phpt index 2eeae3d03aa5f..0091993d21be8 100644 --- a/ext/mysqli/tests/mysqli_get_proto_info.phpt +++ b/ext/mysqli/tests/mysqli_get_proto_info.phpt @@ -3,7 +3,6 @@ mysqli_get_proto_info() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_get_server_info.phpt b/ext/mysqli/tests/mysqli_get_server_info.phpt index 3a1e08e02902f..33e816f2e8a84 100644 --- a/ext/mysqli/tests/mysqli_get_server_info.phpt +++ b/ext/mysqli/tests/mysqli_get_server_info.phpt @@ -3,7 +3,6 @@ mysqli_get_server_info() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_get_server_version.phpt b/ext/mysqli/tests/mysqli_get_server_version.phpt index c249d708856f0..b28bd8f285ccf 100644 --- a/ext/mysqli/tests/mysqli_get_server_version.phpt +++ b/ext/mysqli/tests/mysqli_get_server_version.phpt @@ -3,7 +3,6 @@ mysqli_get_server_version() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_get_warnings.phpt b/ext/mysqli/tests/mysqli_get_warnings.phpt index 20b2607f39df9..23356db4e6bfe 100644 --- a/ext/mysqli/tests/mysqli_get_warnings.phpt +++ b/ext/mysqli/tests/mysqli_get_warnings.phpt @@ -3,7 +3,6 @@ mysqli_get_warnings() - TODO --SKIPIF-- --INI-- diff --git a/ext/mysqli/tests/mysqli_init.phpt b/ext/mysqli/tests/mysqli_init.phpt index c8f3ac8ec5c62..56a956900ab43 100644 --- a/ext/mysqli/tests/mysqli_init.phpt +++ b/ext/mysqli/tests/mysqli_init.phpt @@ -3,7 +3,6 @@ mysqli_init() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_insert_id.phpt b/ext/mysqli/tests/mysqli_insert_id.phpt index a9fc31998dcb6..431be0d293249 100644 --- a/ext/mysqli/tests/mysqli_insert_id.phpt +++ b/ext/mysqli/tests/mysqli_insert_id.phpt @@ -3,7 +3,6 @@ mysqli_insert_id() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_kill.phpt b/ext/mysqli/tests/mysqli_kill.phpt index e4be618fc7fa6..563a6ba19c64f 100644 --- a/ext/mysqli/tests/mysqli_kill.phpt +++ b/ext/mysqli/tests/mysqli_kill.phpt @@ -3,7 +3,6 @@ mysqli_kill() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_max_links.phpt b/ext/mysqli/tests/mysqli_max_links.phpt index 5dd7be9dccc74..21405199e5d40 100644 --- a/ext/mysqli/tests/mysqli_max_links.phpt +++ b/ext/mysqli/tests/mysqli_max_links.phpt @@ -3,7 +3,6 @@ Testing mysqli.max_links --SKIPIF-- --INI-- diff --git a/ext/mysqli/tests/mysqli_more_results.phpt b/ext/mysqli/tests/mysqli_more_results.phpt index 5963934b8428b..36a477fcf3de6 100644 --- a/ext/mysqli/tests/mysqli_more_results.phpt +++ b/ext/mysqli/tests/mysqli_more_results.phpt @@ -3,7 +3,6 @@ mysqli_more_results() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_multi_query.phpt b/ext/mysqli/tests/mysqli_multi_query.phpt index 5f29dc6f6aa1d..843298140ba70 100644 --- a/ext/mysqli/tests/mysqli_multi_query.phpt +++ b/ext/mysqli/tests/mysqli_multi_query.phpt @@ -3,7 +3,6 @@ mysqli_multi_query() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_mysqlnd_read_timeout_long.phpt b/ext/mysqli/tests/mysqli_mysqlnd_read_timeout_long.phpt index 3825cd6bd8e6d..403662829a711 100644 --- a/ext/mysqli/tests/mysqli_mysqlnd_read_timeout_long.phpt +++ b/ext/mysqli/tests/mysqli_mysqlnd_read_timeout_long.phpt @@ -3,7 +3,6 @@ mysqlnd.net_read_timeout > default_socket_timeout --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_no_reconnect.phpt b/ext/mysqli/tests/mysqli_no_reconnect.phpt index 1f7ca8d834052..5d54b02a2b78b 100644 --- a/ext/mysqli/tests/mysqli_no_reconnect.phpt +++ b/ext/mysqli/tests/mysqli_no_reconnect.phpt @@ -3,7 +3,6 @@ Trying implicit reconnect after wait_timeout and KILL using mysqli_ping() --SKIPIF-- --INI-- diff --git a/ext/mysqli/tests/mysqli_num_fields.phpt b/ext/mysqli/tests/mysqli_num_fields.phpt index df2161f685388..e1d61cf7853d4 100644 --- a/ext/mysqli/tests/mysqli_num_fields.phpt +++ b/ext/mysqli/tests/mysqli_num_fields.phpt @@ -3,7 +3,6 @@ mysqli_num_fields() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_num_rows.phpt b/ext/mysqli/tests/mysqli_num_rows.phpt index 16b3aacd8096f..04a5dec59aadc 100644 --- a/ext/mysqli/tests/mysqli_num_rows.phpt +++ b/ext/mysqli/tests/mysqli_num_rows.phpt @@ -3,7 +3,6 @@ mysqli_num_rows() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_open_bug74432.phpt b/ext/mysqli/tests/mysqli_open_bug74432.phpt index 9d529925e92fd..cb5d00a1e466f 100644 --- a/ext/mysqli/tests/mysqli_open_bug74432.phpt +++ b/ext/mysqli/tests/mysqli_open_bug74432.phpt @@ -3,7 +3,6 @@ Bug #74432, BC issue on undocumented connect string --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_options.phpt b/ext/mysqli/tests/mysqli_options.phpt index bec663a64a72c..ad129a41bbf6f 100644 --- a/ext/mysqli/tests/mysqli_options.phpt +++ b/ext/mysqli/tests/mysqli_options.phpt @@ -3,7 +3,6 @@ mysqli_options() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_options_init_command.phpt b/ext/mysqli/tests/mysqli_options_init_command.phpt index 35e98e7e47e7a..089f230538d01 100644 --- a/ext/mysqli/tests/mysqli_options_init_command.phpt +++ b/ext/mysqli/tests/mysqli_options_init_command.phpt @@ -3,7 +3,6 @@ mysqli_options() --SKIPIF-- diff --git a/ext/mysqli/tests/mysqli_options_int_and_float_native.phpt b/ext/mysqli/tests/mysqli_options_int_and_float_native.phpt index 8f81d4a3e450c..91bd38553c24c 100644 --- a/ext/mysqli/tests/mysqli_options_int_and_float_native.phpt +++ b/ext/mysqli/tests/mysqli_options_int_and_float_native.phpt @@ -3,7 +3,6 @@ mysqli_options() - MYSQLI_OPT_INT_AND_FLOAT_NATIVE --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_pam_sha256.phpt b/ext/mysqli/tests/mysqli_pam_sha256.phpt index 2085ab135a4cc..5d9591e0dc4eb 100644 --- a/ext/mysqli/tests/mysqli_pam_sha256.phpt +++ b/ext/mysqli/tests/mysqli_pam_sha256.phpt @@ -3,7 +3,6 @@ PAM: SHA-256 --SKIPIF-- --INI-- diff --git a/ext/mysqli/tests/mysqli_pconn_disabled.phpt b/ext/mysqli/tests/mysqli_pconn_disabled.phpt index a59a43cbd59a9..8320e250368c6 100644 --- a/ext/mysqli/tests/mysqli_pconn_disabled.phpt +++ b/ext/mysqli/tests/mysqli_pconn_disabled.phpt @@ -3,7 +3,6 @@ mysqli_pconnect() - mysqli.allow_persistent = 0 --SKIPIF-- diff --git a/ext/mysqli/tests/mysqli_pconn_limits.phpt b/ext/mysqli/tests/mysqli_pconn_limits.phpt index b00b99883aa5a..c78fda1a01594 100644 --- a/ext/mysqli/tests/mysqli_pconn_limits.phpt +++ b/ext/mysqli/tests/mysqli_pconn_limits.phpt @@ -3,7 +3,6 @@ Persistent connections - limits (-1, unlimited) --SKIPIF-- diff --git a/ext/mysqli/tests/mysqli_pconn_max_links.phpt b/ext/mysqli/tests/mysqli_pconn_max_links.phpt index a4f7558214b13..f6ee6aa5a07aa 100644 --- a/ext/mysqli/tests/mysqli_pconn_max_links.phpt +++ b/ext/mysqli/tests/mysqli_pconn_max_links.phpt @@ -3,7 +3,6 @@ Persistent connections and mysqli.max_links --SKIPIF-- --INI-- diff --git a/ext/mysqli/tests/mysqli_pconn_twice.phpt b/ext/mysqli/tests/mysqli_pconn_twice.phpt index e388847507e94..343c5f2e8ad23 100644 --- a/ext/mysqli/tests/mysqli_pconn_twice.phpt +++ b/ext/mysqli/tests/mysqli_pconn_twice.phpt @@ -3,7 +3,6 @@ Calling connect() on an open persistent connection to create a new persistent co --SKIPIF-- diff --git a/ext/mysqli/tests/mysqli_pconnect.phpt b/ext/mysqli/tests/mysqli_pconnect.phpt index 16fbb27e31f83..2fce47885326d 100644 --- a/ext/mysqli/tests/mysqli_pconnect.phpt +++ b/ext/mysqli/tests/mysqli_pconnect.phpt @@ -3,7 +3,6 @@ mysqli_pconnect() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_phpinfo.phpt b/ext/mysqli/tests/mysqli_phpinfo.phpt index d1ecdea7966e7..fd0edd4463ab0 100644 --- a/ext/mysqli/tests/mysqli_phpinfo.phpt +++ b/ext/mysqli/tests/mysqli_phpinfo.phpt @@ -3,7 +3,6 @@ phpinfo() mysqli section --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_ping.phpt b/ext/mysqli/tests/mysqli_ping.phpt index 40a3115f3d3f8..e4d184c6210af 100644 --- a/ext/mysqli/tests/mysqli_ping.phpt +++ b/ext/mysqli/tests/mysqli_ping.phpt @@ -3,7 +3,6 @@ mysqli_ping() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_poll.phpt b/ext/mysqli/tests/mysqli_poll.phpt index cc3cc36b2f8fb..d5527fcf02c06 100644 --- a/ext/mysqli/tests/mysqli_poll.phpt +++ b/ext/mysqli/tests/mysqli_poll.phpt @@ -3,7 +3,6 @@ int mysqli_poll() simple --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_prepare_no_object.phpt b/ext/mysqli/tests/mysqli_prepare_no_object.phpt index 2b6a07d2ac562..42021b1b88c58 100644 --- a/ext/mysqli/tests/mysqli_prepare_no_object.phpt +++ b/ext/mysqli/tests/mysqli_prepare_no_object.phpt @@ -3,7 +3,6 @@ mysqli_prepare() - no object on failure --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_ps_select_union.phpt b/ext/mysqli/tests/mysqli_ps_select_union.phpt index 8467690776647..f13254b449ab0 100644 --- a/ext/mysqli/tests/mysqli_ps_select_union.phpt +++ b/ext/mysqli/tests/mysqli_ps_select_union.phpt @@ -3,7 +3,6 @@ Prepared Statements and SELECT UNION --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_query.phpt b/ext/mysqli/tests/mysqli_query.phpt index b291306faff28..b3269689c1b19 100644 --- a/ext/mysqli/tests/mysqli_query.phpt +++ b/ext/mysqli/tests/mysqli_query.phpt @@ -3,7 +3,6 @@ mysqli_query() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_query_iterators.phpt b/ext/mysqli/tests/mysqli_query_iterators.phpt index 199cddbcc57d9..cb567affc2878 100644 --- a/ext/mysqli/tests/mysqli_query_iterators.phpt +++ b/ext/mysqli/tests/mysqli_query_iterators.phpt @@ -3,7 +3,6 @@ mysqli iterators --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_query_unicode.phpt b/ext/mysqli/tests/mysqli_query_unicode.phpt index 0cec3b398a846..6959346107bde 100644 --- a/ext/mysqli/tests/mysqli_query_unicode.phpt +++ b/ext/mysqli/tests/mysqli_query_unicode.phpt @@ -3,7 +3,6 @@ mysqli_query() - unicode (cyrillic) --SKIPIF-- --INI-- diff --git a/ext/mysqli/tests/mysqli_real_connect_pconn.phpt b/ext/mysqli/tests/mysqli_real_connect_pconn.phpt index 121504a8fd996..a7245e384e1ce 100644 --- a/ext/mysqli/tests/mysqli_real_connect_pconn.phpt +++ b/ext/mysqli/tests/mysqli_real_connect_pconn.phpt @@ -3,7 +3,6 @@ mysqli_real_connect() - persistent connections --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_real_escape_string_big5.phpt b/ext/mysqli/tests/mysqli_real_escape_string_big5.phpt index 97113b858e8e6..e6b60997c9a03 100644 --- a/ext/mysqli/tests/mysqli_real_escape_string_big5.phpt +++ b/ext/mysqli/tests/mysqli_real_escape_string_big5.phpt @@ -4,7 +4,6 @@ mysqli_real_escape_string() - big5 --FILE-- diff --git a/ext/mysqli/tests/mysqli_real_escape_string_sjis.phpt b/ext/mysqli/tests/mysqli_real_escape_string_sjis.phpt index 611590af27b82..c577215357e31 100644 --- a/ext/mysqli/tests/mysqli_real_escape_string_sjis.phpt +++ b/ext/mysqli/tests/mysqli_real_escape_string_sjis.phpt @@ -3,7 +3,6 @@ mysqli_real_escape_string() - sjis --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_reap_async_query.phpt b/ext/mysqli/tests/mysqli_reap_async_query.phpt index 8f9fd5cb1cc07..223befe9bc8fc 100644 --- a/ext/mysqli/tests/mysqli_reap_async_query.phpt +++ b/ext/mysqli/tests/mysqli_reap_async_query.phpt @@ -3,7 +3,6 @@ mysqli_reap_async_query() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_report_new.phpt b/ext/mysqli/tests/mysqli_report_new.phpt index 5bfa260c9e356..af951739c24b9 100644 --- a/ext/mysqli/tests/mysqli_report_new.phpt +++ b/ext/mysqli/tests/mysqli_report_new.phpt @@ -3,7 +3,6 @@ mysqli_report(), change user, MySQL 5.6+ --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_result_references.phpt b/ext/mysqli/tests/mysqli_result_references.phpt index 7084955380f25..f917d00ed3bd6 100644 --- a/ext/mysqli/tests/mysqli_result_references.phpt +++ b/ext/mysqli/tests/mysqli_result_references.phpt @@ -3,7 +3,6 @@ References to result sets --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_result_references_mysqlnd.phpt b/ext/mysqli/tests/mysqli_result_references_mysqlnd.phpt index d33c89b4dce69..a5c68ca73f049 100644 --- a/ext/mysqli/tests/mysqli_result_references_mysqlnd.phpt +++ b/ext/mysqli/tests/mysqli_result_references_mysqlnd.phpt @@ -3,7 +3,6 @@ References to result sets - mysqlnd (no copies but references) --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_rollback.phpt b/ext/mysqli/tests/mysqli_rollback.phpt index 92ab3e28b5c47..51060d6287a90 100644 --- a/ext/mysqli/tests/mysqli_rollback.phpt +++ b/ext/mysqli/tests/mysqli_rollback.phpt @@ -3,7 +3,6 @@ mysqli_rollback() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_send_query.phpt b/ext/mysqli/tests/mysqli_send_query.phpt index cf271c5d07017..4e257bd0a11d8 100644 --- a/ext/mysqli/tests/mysqli_send_query.phpt +++ b/ext/mysqli/tests/mysqli_send_query.phpt @@ -3,7 +3,6 @@ mysqli_send_query() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_sqlstate.phpt b/ext/mysqli/tests/mysqli_sqlstate.phpt index cf6097776350c..d8272828097b4 100644 --- a/ext/mysqli/tests/mysqli_sqlstate.phpt +++ b/ext/mysqli/tests/mysqli_sqlstate.phpt @@ -3,7 +3,6 @@ mysqli_sqlstate() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_ssl_set.phpt b/ext/mysqli/tests/mysqli_ssl_set.phpt index 7f079f21ea715..6ccfb4359df3d 100644 --- a/ext/mysqli/tests/mysqli_ssl_set.phpt +++ b/ext/mysqli/tests/mysqli_ssl_set.phpt @@ -3,7 +3,6 @@ mysqli_ssl_set() - test is a stub! --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_affected_rows.phpt b/ext/mysqli/tests/mysqli_stmt_affected_rows.phpt index 505acc68f1e8d..e3cf5dcbbc52c 100644 --- a/ext/mysqli/tests/mysqli_stmt_affected_rows.phpt +++ b/ext/mysqli/tests/mysqli_stmt_affected_rows.phpt @@ -3,7 +3,6 @@ mysqli_stmt_affected_rows() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_attr_get.phpt b/ext/mysqli/tests/mysqli_stmt_attr_get.phpt index ec3cf3d8d0a5a..5c246aaff8195 100644 --- a/ext/mysqli/tests/mysqli_stmt_attr_get.phpt +++ b/ext/mysqli/tests/mysqli_stmt_attr_get.phpt @@ -3,7 +3,6 @@ mysqli_stmt_attr_get() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_attr_get_prefetch.phpt b/ext/mysqli/tests/mysqli_stmt_attr_get_prefetch.phpt index 2781810d9b10c..80956e854f61e 100644 --- a/ext/mysqli/tests/mysqli_stmt_attr_get_prefetch.phpt +++ b/ext/mysqli/tests/mysqli_stmt_attr_get_prefetch.phpt @@ -3,7 +3,6 @@ mysqli_stmt_attr_get() - prefetch --SKIPIF-- diff --git a/ext/mysqli/tests/mysqli_stmt_attr_set.phpt b/ext/mysqli/tests/mysqli_stmt_attr_set.phpt index 6e4267e6fb054..a22704af509bb 100644 --- a/ext/mysqli/tests/mysqli_stmt_attr_set.phpt +++ b/ext/mysqli/tests/mysqli_stmt_attr_set.phpt @@ -3,7 +3,6 @@ mysqli_stmt_attr_set() - mysqlnd does not check for invalid codes --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_big_prepare.phpt b/ext/mysqli/tests/mysqli_stmt_big_prepare.phpt index afc34c27b4aa4..9479d233a950c 100644 --- a/ext/mysqli/tests/mysqli_stmt_big_prepare.phpt +++ b/ext/mysqli/tests/mysqli_stmt_big_prepare.phpt @@ -3,7 +3,6 @@ mysqli_stmt_prepare() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_bind_limits.phpt b/ext/mysqli/tests/mysqli_stmt_bind_limits.phpt index 44ab45c25748e..f9eca0f333919 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_limits.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_limits.phpt @@ -3,7 +3,6 @@ Bind limits --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_bind_param.phpt b/ext/mysqli/tests/mysqli_stmt_bind_param.phpt index a12e01dc4203a..9345bb5a0e619 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_param.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_param.phpt @@ -3,7 +3,6 @@ mysqli_stmt_bind_param() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_bind_param_call_user_func.phpt b/ext/mysqli/tests/mysqli_stmt_bind_param_call_user_func.phpt index 3de2910fd43be..e1e600229ca01 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_param_call_user_func.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_param_call_user_func.phpt @@ -3,7 +3,6 @@ mysqli_stmt_bind_param used with call_user_func_array() (see also bug #43568) --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt b/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt index 4b243ef3d6010..9b70f23639192 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt @@ -3,7 +3,6 @@ mysqli_stmt_bind_param() - checking whether the parameters are modified (bug#443 --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_bind_param_many_columns.phpt b/ext/mysqli/tests/mysqli_stmt_bind_param_many_columns.phpt index efe86972d98f9..137670235a6cc 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_param_many_columns.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_param_many_columns.phpt @@ -3,7 +3,6 @@ mysqli_stmt_bind_param() - Binding with very high number of columns --SKIPIF-- --INI-- diff --git a/ext/mysqli/tests/mysqli_stmt_bind_param_references.phpt b/ext/mysqli/tests/mysqli_stmt_bind_param_references.phpt index f05e46fe9ddd9..38f25336250c7 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_param_references.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_param_references.phpt @@ -3,7 +3,6 @@ mysqli_stmt_bind_param() - playing with references --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_bind_param_type_juggling.phpt b/ext/mysqli/tests/mysqli_stmt_bind_param_type_juggling.phpt index 5a8dd90577aab..b69dfe686e73d 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_param_type_juggling.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_param_type_juggling.phpt @@ -3,7 +3,6 @@ mysqli_stmt_bind_param() - binding variable twice --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_bind_result.phpt b/ext/mysqli/tests/mysqli_stmt_bind_result.phpt index f9556ad0f6380..99f2c8ef77122 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_result.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_result.phpt @@ -3,7 +3,6 @@ mysqli_stmt_bind_result() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_bind_result_bit.phpt b/ext/mysqli/tests/mysqli_stmt_bind_result_bit.phpt index 39a2f503f8b16..ecad1393531f5 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_result_bit.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_result_bit.phpt @@ -3,7 +3,6 @@ mysqli_stmt_bind_result() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_bind_result_format.phpt b/ext/mysqli/tests/mysqli_stmt_bind_result_format.phpt index 62a3e499aede9..ae778472ed1e8 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_result_format.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_result_format.phpt @@ -3,7 +3,6 @@ Playing with SELECT FORMAT(...) AS _format - see also bugs.php.net/42378 --SKIPIF-- --INI-- diff --git a/ext/mysqli/tests/mysqli_stmt_bind_result_references.phpt b/ext/mysqli/tests/mysqli_stmt_bind_result_references.phpt index 8040f35bcab58..05e75f7e23498 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_result_references.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_result_references.phpt @@ -3,7 +3,6 @@ mysqli_stmt_bind_result() - playing with references --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_bind_result_zerofill.phpt b/ext/mysqli/tests/mysqli_stmt_bind_result_zerofill.phpt index f1a68e3c0e099..a49d0d0ed994f 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_result_zerofill.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_result_zerofill.phpt @@ -3,7 +3,6 @@ mysqli_stmt_bind_result() - ZEROFILL --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_close.phpt b/ext/mysqli/tests/mysqli_stmt_close.phpt index fd91eaecd1289..dd27da85ab188 100644 --- a/ext/mysqli/tests/mysqli_stmt_close.phpt +++ b/ext/mysqli/tests/mysqli_stmt_close.phpt @@ -3,7 +3,6 @@ mysqli_stmt_close() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_data_seek.phpt b/ext/mysqli/tests/mysqli_stmt_data_seek.phpt index 5594600747792..ffd5960c06bfa 100644 --- a/ext/mysqli/tests/mysqli_stmt_data_seek.phpt +++ b/ext/mysqli/tests/mysqli_stmt_data_seek.phpt @@ -3,7 +3,6 @@ mysqli_stmt_data_seek() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_datatype_change.phpt b/ext/mysqli/tests/mysqli_stmt_datatype_change.phpt index 4bffb7cab75a3..2f18c6371fd73 100644 --- a/ext/mysqli/tests/mysqli_stmt_datatype_change.phpt +++ b/ext/mysqli/tests/mysqli_stmt_datatype_change.phpt @@ -3,7 +3,6 @@ Playing with datatype change between prepare and execute --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_errno.phpt b/ext/mysqli/tests/mysqli_stmt_errno.phpt index 9928d0c1f3f14..b5d741cd6e062 100644 --- a/ext/mysqli/tests/mysqli_stmt_errno.phpt +++ b/ext/mysqli/tests/mysqli_stmt_errno.phpt @@ -3,7 +3,6 @@ mysqli_stmt_errno() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_error.phpt b/ext/mysqli/tests/mysqli_stmt_error.phpt index 98e61026555dc..c8012b3434b54 100644 --- a/ext/mysqli/tests/mysqli_stmt_error.phpt +++ b/ext/mysqli/tests/mysqli_stmt_error.phpt @@ -3,7 +3,6 @@ mysqli_stmt_error() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_execute.phpt b/ext/mysqli/tests/mysqli_stmt_execute.phpt index d3f404aa3d3ac..1d1307e4b9551 100644 --- a/ext/mysqli/tests/mysqli_stmt_execute.phpt +++ b/ext/mysqli/tests/mysqli_stmt_execute.phpt @@ -3,7 +3,6 @@ mysqli_stmt_execute() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_fetch_bit.phpt b/ext/mysqli/tests/mysqli_stmt_fetch_bit.phpt index 3cbe8e4ee28f4..87757dcaa9ab4 100644 --- a/ext/mysqli/tests/mysqli_stmt_fetch_bit.phpt +++ b/ext/mysqli/tests/mysqli_stmt_fetch_bit.phpt @@ -3,7 +3,6 @@ Fetching BIT column values using the PS API --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_fetch_geom.phpt b/ext/mysqli/tests/mysqli_stmt_fetch_geom.phpt index 8c87199602b06..3d177d903ded4 100644 --- a/ext/mysqli/tests/mysqli_stmt_fetch_geom.phpt +++ b/ext/mysqli/tests/mysqli_stmt_fetch_geom.phpt @@ -3,7 +3,6 @@ mysqli_stmt_fetch - geometry / spatial types --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_free_result.phpt b/ext/mysqli/tests/mysqli_stmt_free_result.phpt index b43afce5c9cae..833970a8b5a23 100644 --- a/ext/mysqli/tests/mysqli_stmt_free_result.phpt +++ b/ext/mysqli/tests/mysqli_stmt_free_result.phpt @@ -3,7 +3,6 @@ mysqli_stmt_free_result() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_get_result.phpt b/ext/mysqli/tests/mysqli_stmt_get_result.phpt index 09c63ab7f8738..ca0b1ed03682c 100644 --- a/ext/mysqli/tests/mysqli_stmt_get_result.phpt +++ b/ext/mysqli/tests/mysqli_stmt_get_result.phpt @@ -3,7 +3,6 @@ mysqli_stmt_get_result() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_insert_id.phpt b/ext/mysqli/tests/mysqli_stmt_insert_id.phpt index fe5e794e57dbc..092c90c2a92a4 100644 --- a/ext/mysqli/tests/mysqli_stmt_insert_id.phpt +++ b/ext/mysqli/tests/mysqli_stmt_insert_id.phpt @@ -3,7 +3,6 @@ mysqli_stmt_insert_id() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_num_rows.phpt b/ext/mysqli/tests/mysqli_stmt_num_rows.phpt index 33d9dfe552e28..f006b974eb53a 100644 --- a/ext/mysqli/tests/mysqli_stmt_num_rows.phpt +++ b/ext/mysqli/tests/mysqli_stmt_num_rows.phpt @@ -3,7 +3,6 @@ mysqli_stmt_num_rows() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_param_count.phpt b/ext/mysqli/tests/mysqli_stmt_param_count.phpt index 421854a480f97..0d1fa5ca5560d 100644 --- a/ext/mysqli/tests/mysqli_stmt_param_count.phpt +++ b/ext/mysqli/tests/mysqli_stmt_param_count.phpt @@ -3,7 +3,6 @@ mysqli_stmt_param_count() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_prepare.phpt b/ext/mysqli/tests/mysqli_stmt_prepare.phpt index 0f89a705c9261..14929a9051b68 100644 --- a/ext/mysqli/tests/mysqli_stmt_prepare.phpt +++ b/ext/mysqli/tests/mysqli_stmt_prepare.phpt @@ -3,7 +3,6 @@ mysqli_stmt_prepare() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_reset.phpt b/ext/mysqli/tests/mysqli_stmt_reset.phpt index ac557b0c2023e..081a5f0855db6 100644 --- a/ext/mysqli/tests/mysqli_stmt_reset.phpt +++ b/ext/mysqli/tests/mysqli_stmt_reset.phpt @@ -3,7 +3,6 @@ mysqli_stmt_reset() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_result_metadata.phpt b/ext/mysqli/tests/mysqli_stmt_result_metadata.phpt index aedcc5d9aa392..0c77186efc9a3 100644 --- a/ext/mysqli/tests/mysqli_stmt_result_metadata.phpt +++ b/ext/mysqli/tests/mysqli_stmt_result_metadata.phpt @@ -3,7 +3,6 @@ mysqli_stmt_result_metadata() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_result_metadata_sqltests.phpt b/ext/mysqli/tests/mysqli_stmt_result_metadata_sqltests.phpt index a07719b906bb8..877bd0c713769 100644 --- a/ext/mysqli/tests/mysqli_stmt_result_metadata_sqltests.phpt +++ b/ext/mysqli/tests/mysqli_stmt_result_metadata_sqltests.phpt @@ -3,7 +3,6 @@ mysqli_stmt_result_metadata() - non SELECT statements --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_libmysql.phpt b/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_libmysql.phpt index 63c1f59bfe49b..c81e0c5d1a2d8 100644 --- a/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_libmysql.phpt +++ b/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_libmysql.phpt @@ -3,7 +3,6 @@ mysqli_stmt_send_long_data() - exceed packet size, libmysql - bug #26824 --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_store_result.phpt b/ext/mysqli/tests/mysqli_stmt_store_result.phpt index 3c6ebe66b47c6..e798ce8a3c433 100644 --- a/ext/mysqli/tests/mysqli_stmt_store_result.phpt +++ b/ext/mysqli/tests/mysqli_stmt_store_result.phpt @@ -3,7 +3,6 @@ mysqli_stmt_store_result() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_unclonable.phpt b/ext/mysqli/tests/mysqli_stmt_unclonable.phpt index 722295b177eb8..0d77780022814 100644 --- a/ext/mysqli/tests/mysqli_stmt_unclonable.phpt +++ b/ext/mysqli/tests/mysqli_stmt_unclonable.phpt @@ -3,7 +3,6 @@ Trying to clone mysqli_stmt object --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_store_result.phpt b/ext/mysqli/tests/mysqli_store_result.phpt index 2213047a6c932..7a0157106d057 100644 --- a/ext/mysqli/tests/mysqli_store_result.phpt +++ b/ext/mysqli/tests/mysqli_store_result.phpt @@ -3,7 +3,6 @@ mysqli_store_result() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_store_result_buffered_c.phpt b/ext/mysqli/tests/mysqli_store_result_buffered_c.phpt index 31645b026c54f..6fa69005d27b4 100644 --- a/ext/mysqli/tests/mysqli_store_result_buffered_c.phpt +++ b/ext/mysqli/tests/mysqli_store_result_buffered_c.phpt @@ -3,7 +3,6 @@ mysqli_store_result() --SKIPIF-- --INI-- diff --git a/ext/mysqli/tests/mysqli_store_result_copy.phpt b/ext/mysqli/tests/mysqli_store_result_copy.phpt index c431a05a60c26..51c76e7d3c001 100644 --- a/ext/mysqli/tests/mysqli_store_result_copy.phpt +++ b/ext/mysqli/tests/mysqli_store_result_copy.phpt @@ -3,7 +3,6 @@ mysqli_store_result() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_thread_safe.phpt b/ext/mysqli/tests/mysqli_thread_safe.phpt index 3f45127095cce..d4ab11a956e77 100644 --- a/ext/mysqli/tests/mysqli_thread_safe.phpt +++ b/ext/mysqli/tests/mysqli_thread_safe.phpt @@ -3,7 +3,6 @@ mysqli_thread_safe() --SKIPIF-- --FILE-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_use_result.phpt b/ext/mysqli/tests/mysqli_use_result.phpt index a6d432d1fb443..ddbd734153eb0 100644 --- a/ext/mysqli/tests/mysqli_use_result.phpt +++ b/ext/mysqli/tests/mysqli_use_result.phpt @@ -3,7 +3,6 @@ mysqli_use_result() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_warning_count.phpt b/ext/mysqli/tests/mysqli_warning_count.phpt index 18e80ac92d80d..1c1df0ccdfe58 100644 --- a/ext/mysqli/tests/mysqli_warning_count.phpt +++ b/ext/mysqli/tests/mysqli_warning_count.phpt @@ -3,7 +3,6 @@ mysqli_warning_count() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_warning_unclonable.phpt b/ext/mysqli/tests/mysqli_warning_unclonable.phpt index e68cd962126ce..5e3758be961c1 100644 --- a/ext/mysqli/tests/mysqli_warning_unclonable.phpt +++ b/ext/mysqli/tests/mysqli_warning_unclonable.phpt @@ -3,7 +3,6 @@ Trying to clone mysqli_warning object --SKIPIF-- embedded) - die("skip test for with embedded server only"); -?> From a9cbdafa69c4762a0f22271f18e9f4a76eaaf0fb Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 17 Sep 2020 23:19:28 +0300 Subject: [PATCH 41/67] Support for ZEND_COMPILE_EXTENDED_STMT --- ext/opcache/Optimizer/zend_cfg.c | 8 +++++++ ext/opcache/jit/zend_jit.c | 18 +++++++++++++- ext/opcache/jit/zend_jit_trace.c | 39 ++++++++++++++++++++----------- ext/opcache/jit/zend_jit_x86.dasc | 12 +++++++--- 4 files changed, 60 insertions(+), 17 deletions(-) diff --git a/ext/opcache/Optimizer/zend_cfg.c b/ext/opcache/Optimizer/zend_cfg.c index 127fca5dca879..f036950ffac4c 100644 --- a/ext/opcache/Optimizer/zend_cfg.c +++ b/ext/opcache/Optimizer/zend_cfg.c @@ -112,6 +112,10 @@ static void zend_mark_reachable_blocks(const zend_op_array *op_array, zend_cfg * zend_basic_block *blocks = cfg->blocks; blocks[start].flags = ZEND_BB_START; + if (op_array->opcodes[0].opcode == ZEND_EXT_NOP + && (cfg->flags & ZEND_CFG_RECV_ENTRY)) { + blocks[1].flags |= ZEND_BB_RECV_ENTRY; + } zend_mark_reachable(op_array->opcodes, cfg, blocks + start); if (op_array->last_try_catch) { @@ -287,6 +291,10 @@ int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t b /* Build CFG, Step 1: Find basic blocks starts, calculate number of blocks */ BB_START(0); + if (op_array->opcodes[0].opcode == ZEND_EXT_NOP + && (build_flags & ZEND_CFG_RECV_ENTRY)) { + BB_START(1); + } for (i = 0; i < op_array->last; i++) { zend_op *opline = op_array->opcodes + i; switch (opline->opcode) { diff --git a/ext/opcache/jit/zend_jit.c b/ext/opcache/jit/zend_jit.c index 3dad8e4f91115..7c9704954a354 100644 --- a/ext/opcache/jit/zend_jit.c +++ b/ext/opcache/jit/zend_jit.c @@ -2118,7 +2118,8 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op } recv_emitted = 1; } else if (opline->opcode == ZEND_RECV) { - if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { + if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) + && op_array->opcodes[0].opcode != ZEND_EXT_NOP) { /* skip */ continue; } else if (recv_emitted) { @@ -3539,6 +3540,9 @@ static void ZEND_FASTCALL zend_runtime_jit(void) /* restore original opcode handlers */ if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { + if (opline->opcode == ZEND_EXT_NOP) { + opline++; + } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } @@ -3572,6 +3576,9 @@ void zend_jit_check_funcs(HashTable *function_table, zend_bool is_method) { op_array = &func->op_array; opline = op_array->opcodes; if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { + if (opline->opcode == ZEND_EXT_NOP) { + opline++; + } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } @@ -3644,6 +3651,9 @@ static int zend_jit_setup_hot_counters(zend_op_array *op_array) if (JIT_G(hot_func)) { if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { + if (opline->opcode == ZEND_EXT_NOP) { + opline++; + } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } @@ -3682,6 +3692,9 @@ ZEND_EXT_API int zend_jit_op_array(zend_op_array *op_array, zend_script *script) /* Set run-time JIT handler */ ZEND_ASSERT(zend_jit_runtime_jit_handler != NULL); if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { + if (opline->opcode == ZEND_EXT_NOP) { + opline++; + } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } @@ -3701,6 +3714,9 @@ ZEND_EXT_API int zend_jit_op_array(zend_op_array *op_array, zend_script *script) ZEND_ASSERT(zend_jit_profile_jit_handler != NULL); if (op_array->function_name) { if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { + if (opline->opcode == ZEND_EXT_NOP) { + opline++; + } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index 8fa26e700bf2d..65b6f17c95799 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -1743,7 +1743,8 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin } } if (opline->opcode == ZEND_RECV_INIT - && !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { + && !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) + && op_array->opcodes[0].opcode != ZEND_EXT_NOP) { /* RECV_INIT always copy the constant */ ssa_var_info[ssa_ops[idx].result_def].type = _const_op_type(RT_CONSTANT(opline, opline->op2)); } else if ((opline->opcode == ZEND_FE_FETCH_R || opline->opcode == ZEND_FE_FETCH_RW) @@ -1805,7 +1806,8 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin } } if (opline->opcode == ZEND_RECV_INIT - && !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { + && !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) + && op_array->opcodes[0].opcode != ZEND_EXT_NOP) { /* RECV_INIT always copy the constant */ ssa_var_info[ssa_ops[idx].result_def].type = _const_op_type(RT_CONSTANT(opline, opline->op2)); } else { @@ -1885,6 +1887,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin ssa_var_info[v].type = MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF; } if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) + && op_array->opcodes[0].opcode != ZEND_EXT_NOP && i < op_array->num_args) { /* Propagate argument type */ ssa_var_info[v].type &= STACK_INFO(frame->stack, i); @@ -5309,17 +5312,24 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par frame->call_opline = opline; /* Check if SEND_UNPACK/SEND_ARRAY may cause enter at different opline */ - if (opline > op_array->opcodes - && ((opline-1)->opcode == ZEND_SEND_ARRAY - || (opline-1)->opcode == ZEND_SEND_UNPACK - || (opline-1)->opcode == ZEND_CHECK_UNDEF_ARGS) - && p->op_array->num_args - && (p->op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) == 0 - && ((p+1)->op == ZEND_JIT_TRACE_VM - || (p+1)->op == ZEND_JIT_TRACE_END) - && TRACE_FRAME_NUM_ARGS(call) < p->op_array->num_args - && !zend_jit_trace_opline_guard(&dasm_state, (p+1)->opline)) { - goto jit_failure; + if (opline > op_array->opcodes) { + const zend_op *prev_opline = opline - 1; + + while (prev_opline->opcode == ZEND_EXT_FCALL_BEGIN || prev_opline->opcode == ZEND_TICKS) { + prev_opline--; + } + if ((prev_opline->opcode == ZEND_SEND_ARRAY + || prev_opline->opcode == ZEND_SEND_UNPACK + || prev_opline->opcode == ZEND_CHECK_UNDEF_ARGS) + && p->op_array->num_args + && (p->op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) == 0 + && (p->op_array->opcodes[0].opcode != ZEND_EXT_NOP) + && ((p+1)->op == ZEND_JIT_TRACE_VM + || (p+1)->op == ZEND_JIT_TRACE_END) + && TRACE_FRAME_NUM_ARGS(call) < p->op_array->num_args + && !zend_jit_trace_opline_guard(&dasm_state, (p+1)->opline)) { + goto jit_failure; + } } } @@ -6804,6 +6814,9 @@ static int zend_jit_setup_hot_trace_counters(zend_op_array *op_array) ZEND_ASSERT(zend_jit_func_trace_counter_handler != NULL); opline = op_array->opcodes; if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { + if (opline->opcode == ZEND_EXT_NOP) { + opline++; + } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index 20fe88e9c11f8..befc6717d9d34 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -9433,6 +9433,7 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend uint32_t call_num_args = 0; zend_bool unknown_num_args = 0; const void *exit_addr = NULL; + const zend_op *prev_opline; if (RETURN_VALUE_USED(opline)) { res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); @@ -9441,8 +9442,12 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R4, TMP_ZVAL_OFFSET); } - if ((opline-1)->opcode == ZEND_SEND_UNPACK || (opline-1)->opcode == ZEND_SEND_ARRAY || - (opline-1)->opcode == ZEND_CHECK_UNDEF_ARGS) { + prev_opline = opline - 1; + while (prev_opline->opcode == ZEND_EXT_FCALL_BEGIN || prev_opline->opcode == ZEND_TICKS) { + prev_opline--; + } + if (prev_opline->opcode == ZEND_SEND_UNPACK || prev_opline->opcode == ZEND_SEND_ARRAY || + prev_opline->opcode == ZEND_CHECK_UNDEF_ARGS) { unknown_num_args = 1; } @@ -12194,7 +12199,8 @@ static int zend_jit_recv_init(dasm_State **Dst, const zend_op *opline, const zen zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); if (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || - (op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { + (op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) || + op_array->opcodes[0].opcode == ZEND_EXT_NOP) { | cmp dword EX->This.u2.num_args, arg_num | jae >5 } From 9e94bcfdbc8e4b0be0273896b4ea8fb2efdc0833 Mon Sep 17 00:00:00 2001 From: Sammy Kaye Powers Date: Fri, 18 Sep 2020 00:47:36 +0300 Subject: [PATCH 42/67] Remove specialization of SPEC(OBSERVER) handlers --- Zend/zend_vm_def.h | 6 + Zend/zend_vm_execute.h | 1524 +++++---------------------------------- Zend/zend_vm_gen.php | 34 + Zend/zend_vm_handlers.h | 44 +- 4 files changed, 255 insertions(+), 1353 deletions(-) diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 59a49cb4131ab..6af78eb3ae178 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -3988,6 +3988,9 @@ ZEND_VM_HOT_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL,OBSERVER)) } else { zval retval; ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); + if (IS_OBSERVER) { + ret = NULL; + } if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) { zend_deprecated_function(fbc); @@ -4087,6 +4090,9 @@ ZEND_VM_HOT_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL,OBSERVER)) } else { zval retval; ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); + if (IS_OBSERVER) { + ret = NULL; + } if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) { zend_deprecated_function(fbc); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 0b1795f3eee30..a6feaf02e0caa 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -1380,7 +1380,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETV ZEND_VM_ENTER_EX(); } -static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_execute_data *call = EX(call); @@ -1391,31 +1391,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RET EX(call) = call->prev_execute_data; ret = NULL; - if (0) { - ret = EX_VAR(opline->result.var); - } - - call->prev_execute_data = execute_data; - execute_data = call; - i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - zend_observer_maybe_fcall_call_begin(execute_data); - LOAD_OPLINE_EX(); - - ZEND_VM_ENTER_EX(); -} - -static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_USED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - zend_execute_data *call = EX(call); - zend_function *fbc = call->func; - zval *ret; - - SAVE_OPLINE(); - EX(call) = call->prev_execute_data; - - ret = NULL; - if (1) { + if (RETURN_VALUE_USED(opline)) { ret = EX_VAR(opline->result.var); } @@ -1454,6 +1430,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_S } else { zval retval; ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); + if (0) { + ret = NULL; + } if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) { zend_deprecated_function(fbc); @@ -1545,6 +1524,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_S } else { zval retval; ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); + if (0) { + ret = NULL; + } if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) { zend_deprecated_function(fbc); @@ -1610,7 +1592,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_S ZEND_VM_CONTINUE(); } -static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_execute_data *call = EX(call); @@ -1622,7 +1604,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_ if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) { ret = NULL; - if (0) { + if (RETURN_VALUE_USED(opline)) { ret = EX_VAR(opline->result.var); } @@ -1636,103 +1618,15 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_ } else { zval retval; ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); - - if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) { - zend_deprecated_function(fbc); - if (UNEXPECTED(EG(exception) != NULL)) { - UNDEF_RESULT(); - if (!0) { - ret = &retval; - ZVAL_UNDEF(ret); - } - goto fcall_by_name_end; - } - } - - call->prev_execute_data = execute_data; - EG(current_execute_data) = call; - -#if ZEND_DEBUG - zend_bool should_throw = zend_internal_call_should_throw(fbc, call); -#endif - - ret = 0 ? EX_VAR(opline->result.var) : &retval; - ZVAL_NULL(ret); - - fbc->internal_function.handler(call, ret); - -#if ZEND_DEBUG - if (!EG(exception) && call->func) { - if (should_throw) { - zend_internal_call_arginfo_violation(call->func); - } - ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) || - zend_verify_internal_return_type(call->func, ret)); - ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) - ? Z_ISREF_P(ret) : !Z_ISREF_P(ret)); - } -#endif - - EG(current_execute_data) = execute_data; - -fcall_by_name_end: - zend_vm_stack_free_args(call); - - uint32_t call_info = ZEND_CALL_INFO(call); - if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) { - if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) { - zend_free_extra_named_params(call->extra_named_params); - } - zend_vm_stack_free_call_frame_ex(call_info, call); - } else { - EG(vm_stack_top) = (zval*)call; - } - - if (!0) { - i_zval_ptr_dtor(ret); - } - } - - if (UNEXPECTED(EG(exception) != NULL)) { - zend_rethrow_exception(execute_data); - HANDLE_EXCEPTION(); - } - ZEND_VM_SET_OPCODE(opline + 1); - ZEND_VM_CONTINUE(); -} - -static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - zend_execute_data *call = EX(call); - zend_function *fbc = call->func; - zval *ret; - - SAVE_OPLINE(); - EX(call) = call->prev_execute_data; - - if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) { - ret = NULL; if (1) { - ret = EX_VAR(opline->result.var); + ret = NULL; } - call->prev_execute_data = execute_data; - execute_data = call; - i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - zend_observer_maybe_fcall_call_begin(execute_data); - LOAD_OPLINE_EX(); - - ZEND_VM_ENTER_EX(); - } else { - zval retval; - ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); - if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) { zend_deprecated_function(fbc); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); - if (!1) { + if (!RETURN_VALUE_USED(opline)) { ret = &retval; ZVAL_UNDEF(ret); } @@ -1747,7 +1641,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_ zend_bool should_throw = zend_internal_call_should_throw(fbc, call); #endif - ret = 1 ? EX_VAR(opline->result.var) : &retval; + ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval; ZVAL_NULL(ret); fbc->internal_function.handler(call, ret); @@ -1779,7 +1673,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_ EG(vm_stack_top) = (zval*)call; } - if (!1) { + if (!RETURN_VALUE_USED(opline)) { i_zval_ptr_dtor(ret); } } @@ -1825,6 +1719,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETV } else { zval retval; ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); + if (0) { + ret = NULL; + } if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) { zend_deprecated_function(fbc); @@ -1927,6 +1824,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETV } else { zval retval; ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); + if (0) { + ret = NULL; + } if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) { zend_deprecated_function(fbc); @@ -1996,7 +1896,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETV ZEND_VM_CONTINUE(); } -static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_execute_data *call = EX(call); @@ -2008,7 +1908,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RET if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) { ret = NULL; - if (0) { + if (RETURN_VALUE_USED(opline)) { ret = EX_VAR(opline->result.var); } @@ -2030,115 +1930,15 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RET } else { zval retval; ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); - - if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) { - zend_deprecated_function(fbc); - if (UNEXPECTED(EG(exception) != NULL)) { - UNDEF_RESULT(); - if (!0) { - ret = &retval; - ZVAL_UNDEF(ret); - } - goto fcall_end; - } - } - - call->prev_execute_data = execute_data; - EG(current_execute_data) = call; - -#if ZEND_DEBUG - zend_bool should_throw = zend_internal_call_should_throw(fbc, call); -#endif - - ret = 0 ? EX_VAR(opline->result.var) : &retval; - ZVAL_NULL(ret); - - if (!zend_execute_internal) { - /* saves one function call if zend_execute_internal is not used */ - fbc->internal_function.handler(call, ret); - } else { - zend_execute_internal(call, ret); - } - -#if ZEND_DEBUG - if (!EG(exception) && call->func) { - if (should_throw) { - zend_internal_call_arginfo_violation(call->func); - } - ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) || - zend_verify_internal_return_type(call->func, ret)); - ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) - ? Z_ISREF_P(ret) : !Z_ISREF_P(ret)); - } -#endif - - EG(current_execute_data) = execute_data; - -fcall_end: - zend_vm_stack_free_args(call); - if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) { - zend_free_extra_named_params(call->extra_named_params); - } - - if (!0) { - i_zval_ptr_dtor(ret); - } - } - - if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) { - OBJ_RELEASE(Z_OBJ(call->This)); - } - - zend_vm_stack_free_call_frame(call); - if (UNEXPECTED(EG(exception) != NULL)) { - zend_rethrow_exception(execute_data); - HANDLE_EXCEPTION(); - } - - ZEND_VM_SET_OPCODE(opline + 1); - ZEND_VM_CONTINUE(); -} - -static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - zend_execute_data *call = EX(call); - zend_function *fbc = call->func; - zval *ret; - - SAVE_OPLINE(); - EX(call) = call->prev_execute_data; - - if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) { - ret = NULL; if (1) { - ret = EX_VAR(opline->result.var); + ret = NULL; } - call->prev_execute_data = execute_data; - execute_data = call; - i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC); - zend_observer_maybe_fcall_call_begin(execute_data); - - if (EXPECTED(zend_execute_ex == execute_ex)) { - LOAD_OPLINE_EX(); - ZEND_VM_ENTER_EX(); - } else { - SAVE_OPLINE_EX(); - execute_data = EX(prev_execute_data); - LOAD_OPLINE(); - ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); - zend_execute_ex(call); - } - } else { - zval retval; - ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); - if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) { zend_deprecated_function(fbc); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); - if (!1) { + if (!RETURN_VALUE_USED(opline)) { ret = &retval; ZVAL_UNDEF(ret); } @@ -2153,7 +1953,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RET zend_bool should_throw = zend_internal_call_should_throw(fbc, call); #endif - ret = 1 ? EX_VAR(opline->result.var) : &retval; + ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval; ZVAL_NULL(ret); if (!zend_execute_internal) { @@ -2183,7 +1983,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RET zend_free_extra_named_params(call->extra_named_params); } - if (!1) { + if (!RETURN_VALUE_USED(opline)) { i_zval_ptr_dtor(ret); } } @@ -4324,36 +4124,36 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_ ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } -static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *retval_ptr; zval *return_value; - retval_ptr = RT_CONSTANT(opline, opline->op1); + retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R); return_value = EX(return_value); - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { + if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { SAVE_OPLINE(); retval_ptr = ZVAL_UNDEFINED_OP1(); if (return_value) { ZVAL_NULL(return_value); } } else if (!return_value) { - if (IS_CONST & (IS_VAR|IS_TMP_VAR)) { + if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { SAVE_OPLINE(); rc_dtor_func(Z_COUNTED_P(retval_ptr)); } } } else { - if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) { + if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) { ZVAL_COPY_VALUE(return_value, retval_ptr); - if (IS_CONST == IS_CONST) { + if (opline->op1_type == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { Z_ADDREF_P(return_value); } } - } else if (IS_CONST == IS_CV) { + } else if (opline->op1_type == IS_CV) { do { if (Z_OPT_REFCOUNTED_P(retval_ptr)) { if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { @@ -4377,7 +4177,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST } ZVAL_COPY_VALUE(return_value, retval_ptr); } while (0); - } else /* if (IS_CONST == IS_VAR) */ { + } else /* if (opline->op1_type == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); @@ -4456,7 +4256,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPE ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } -static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *retval_ptr; @@ -4464,38 +4264,38 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPE SAVE_OPLINE(); do { - if ((IS_CONST & (IS_CONST|IS_TMP_VAR)) || - (IS_CONST == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) { + if ((opline->op1_type & (IS_CONST|IS_TMP_VAR)) || + (opline->op1_type == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) { /* Not supposed to happen, but we'll allow it */ zend_error(E_NOTICE, "Only variable references should be returned by reference"); - retval_ptr = RT_CONSTANT(opline, opline->op1); + retval_ptr = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R); if (!EX(return_value)) { - + FREE_OP(opline->op1_type, opline->op1.var); } else { - if (IS_CONST == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) { + if (opline->op1_type == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) { ZVAL_COPY_VALUE(EX(return_value), retval_ptr); break; } ZVAL_NEW_REF(EX(return_value), retval_ptr); - if (IS_CONST == IS_CONST) { + if (opline->op1_type == IS_CONST) { Z_TRY_ADDREF_P(retval_ptr); } } break; } - retval_ptr = NULL; + retval_ptr = get_zval_ptr_ptr(opline->op1_type, opline->op1, BP_VAR_W); - if (IS_CONST == IS_VAR) { + if (opline->op1_type == IS_VAR) { ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval)); if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) { zend_error(E_NOTICE, "Only variable references should be returned by reference"); if (EX(return_value)) { ZVAL_NEW_REF(EX(return_value), retval_ptr); } else { - + if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));}; } break; } @@ -4510,6 +4310,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPE ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr)); } + if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));}; } while (0); zend_observer_maybe_fcall_call_end(execute_data, EX(return_value)); @@ -4559,7 +4360,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HA ZEND_VM_RETURN(); } -static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *retval; @@ -4567,19 +4368,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_OB zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); - retval = RT_CONSTANT(opline, opline->op1); + retval = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R); /* Copy return value into generator->retval */ - if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) { + if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) { ZVAL_COPY_VALUE(&generator->retval, retval); - if (IS_CONST == IS_CONST) { + if (opline->op1_type == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) { Z_ADDREF(generator->retval); } } - } else if (IS_CONST == IS_CV) { + } else if (opline->op1_type == IS_CV) { ZVAL_COPY_DEREF(&generator->retval, retval); - } else /* if (IS_CONST == IS_VAR) */ { + } else /* if (opline->op1_type == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval))) { zend_refcounted *ref = Z_COUNTED_P(retval); @@ -4955,17 +4756,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HAN ZEND_VM_NEXT_OPCODE(); } -static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_op_array *new_op_array; zval *inc_filename; SAVE_OPLINE(); - inc_filename = RT_CONSTANT(opline, opline->op1); + inc_filename = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R); new_op_array = zend_include_or_eval(inc_filename, opline->extended_value); if (UNEXPECTED(EG(exception) != NULL)) { - + FREE_OP(opline->op1_type, opline->op1.var); if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) { destroy_op_array(new_op_array); efree_size(new_op_array, sizeof(zend_op_array)); @@ -5001,7 +4802,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_OBS i_init_code_execute_data(call, new_op_array, return_value); zend_observer_maybe_fcall_call_begin(call); if (EXPECTED(zend_execute_ex == execute_ex)) { - + FREE_OP(opline->op1_type, opline->op1.var); ZEND_VM_ENTER(); } else { ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); @@ -5013,14 +4814,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_OBS efree_size(new_op_array, sizeof(zend_op_array)); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); - + FREE_OP(opline->op1_type, opline->op1.var); UNDEF_RESULT(); HANDLE_EXCEPTION(); } } else if (RETURN_VALUE_USED(opline)) { ZVAL_FALSE(EX_VAR(opline->result.var)); } - + FREE_OP(opline->op1_type, opline->op1.var); ZEND_VM_NEXT_OPCODE(); } @@ -14514,75 +14315,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HA ZEND_VM_NEXT_OPCODE(); } -static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - zend_op_array *new_op_array; - zval *inc_filename; - - SAVE_OPLINE(); - inc_filename = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC); - new_op_array = zend_include_or_eval(inc_filename, opline->extended_value); - if (UNEXPECTED(EG(exception) != NULL)) { - zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); - if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) { - destroy_op_array(new_op_array); - efree_size(new_op_array, sizeof(zend_op_array)); - } - UNDEF_RESULT(); - HANDLE_EXCEPTION(); - } else if (new_op_array == ZEND_FAKE_OP_ARRAY) { - if (RETURN_VALUE_USED(opline)) { - ZVAL_TRUE(EX_VAR(opline->result.var)); - } - } else if (EXPECTED(new_op_array != NULL)) { - zval *return_value = NULL; - zend_execute_data *call; - - if (RETURN_VALUE_USED(opline)) { - return_value = EX_VAR(opline->result.var); - } - - new_op_array->scope = EX(func)->op_array.scope; - - call = zend_vm_stack_push_call_frame( - (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE, - (zend_function*)new_op_array, 0, - Z_PTR(EX(This))); - - if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) { - call->symbol_table = EX(symbol_table); - } else { - call->symbol_table = zend_rebuild_symbol_table(); - } - - call->prev_execute_data = execute_data; - i_init_code_execute_data(call, new_op_array, return_value); - zend_observer_maybe_fcall_call_begin(call); - if (EXPECTED(zend_execute_ex == execute_ex)) { - zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); - ZEND_VM_ENTER(); - } else { - ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); - zend_execute_ex(call); - zend_vm_stack_free_call_frame(call); - } - - destroy_op_array(new_op_array); - efree_size(new_op_array, sizeof(zend_op_array)); - if (UNEXPECTED(EG(exception) != NULL)) { - zend_rethrow_exception(execute_data); - zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); - UNDEF_RESULT(); - HANDLE_EXCEPTION(); - } - } else if (RETURN_VALUE_USED(opline)) { - ZVAL_FALSE(EX_VAR(opline->result.var)); - } - zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); - ZEND_VM_NEXT_OPCODE(); -} - static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -18887,79 +18619,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HA ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } -static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - zval *retval_ptr; - zval *return_value; - - retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC); - return_value = EX(return_value); - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { - if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) { - if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { - SAVE_OPLINE(); - rc_dtor_func(Z_COUNTED_P(retval_ptr)); - } - } - } else { - if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (IS_TMP_VAR == IS_CONST) { - if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { - Z_ADDREF_P(return_value); - } - } - } else if (IS_TMP_VAR == IS_CV) { - do { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (GC_MAY_LEAK(ref)) { - gc_possible_root(ref); - } - ZVAL_NULL(retval_ptr); - break; - } else { - Z_ADDREF_P(retval_ptr); - } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - Z_ADDREF_P(retval_ptr); - } - } - } - ZVAL_COPY_VALUE(return_value, retval_ptr); - } while (0); - } else /* if (IS_TMP_VAR == IS_VAR) */ { - if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (UNEXPECTED(GC_DELREF(ref) == 0)) { - efree_size(ref, sizeof(zend_reference)); - } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - Z_ADDREF_P(retval_ptr); - } - } else { - ZVAL_COPY_VALUE(return_value, retval_ptr); - } - } - } - zend_observer_maybe_fcall_call_end(execute_data, return_value); - ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); -} - static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -19019,66 +18678,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } -static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - zval *retval_ptr; - - SAVE_OPLINE(); - - do { - if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) || - (IS_TMP_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) { - /* Not supposed to happen, but we'll allow it */ - zend_error(E_NOTICE, "Only variable references should be returned by reference"); - - retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC); - if (!EX(return_value)) { - zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); - } else { - if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(EX(return_value), retval_ptr); - break; - } - - ZVAL_NEW_REF(EX(return_value), retval_ptr); - if (IS_TMP_VAR == IS_CONST) { - Z_TRY_ADDREF_P(retval_ptr); - } - } - break; - } - - retval_ptr = NULL; - - if (IS_TMP_VAR == IS_VAR) { - ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval)); - if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) { - zend_error(E_NOTICE, "Only variable references should be returned by reference"); - if (EX(return_value)) { - ZVAL_NEW_REF(EX(return_value), retval_ptr); - } else { - - } - break; - } - } - - if (EX(return_value)) { - if (Z_ISREF_P(retval_ptr)) { - Z_ADDREF_P(retval_ptr); - } else { - ZVAL_MAKE_REF_EX(retval_ptr, 2); - } - ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr)); - } - - } while (0); - - zend_observer_maybe_fcall_call_end(execute_data, EX(return_value)); - ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); -} - static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -19122,51 +18721,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HAND ZEND_VM_RETURN(); } -static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - zval *retval; - - zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); - - SAVE_OPLINE(); - retval = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC); - - /* Copy return value into generator->retval */ - if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) { - ZVAL_COPY_VALUE(&generator->retval, retval); - if (IS_TMP_VAR == IS_CONST) { - if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) { - Z_ADDREF(generator->retval); - } - } - } else if (IS_TMP_VAR == IS_CV) { - ZVAL_COPY_DEREF(&generator->retval, retval); - } else /* if (IS_TMP_VAR == IS_VAR) */ { - if (UNEXPECTED(Z_ISREF_P(retval))) { - zend_refcounted *ref = Z_COUNTED_P(retval); - - retval = Z_REFVAL_P(retval); - ZVAL_COPY_VALUE(&generator->retval, retval); - if (UNEXPECTED(GC_DELREF(ref) == 0)) { - efree_size(ref, sizeof(zend_reference)); - } else if (Z_OPT_REFCOUNTED_P(retval)) { - Z_ADDREF_P(retval); - } - } else { - ZVAL_COPY_VALUE(&generator->retval, retval); - } - } - - zend_observer_maybe_fcall_call_end(generator->execute_data, &generator->retval); - - /* Close the generator to free up resources */ - zend_generator_close(generator, 1); - - /* Pass execution back to handling code */ - ZEND_VM_RETURN(); -} - static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -21612,79 +21166,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HA ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } -static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - zval *retval_ptr; - zval *return_value; - - retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC); - return_value = EX(return_value); - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { - if (IS_VAR & (IS_VAR|IS_TMP_VAR)) { - if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { - SAVE_OPLINE(); - rc_dtor_func(Z_COUNTED_P(retval_ptr)); - } - } - } else { - if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (IS_VAR == IS_CONST) { - if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { - Z_ADDREF_P(return_value); - } - } - } else if (IS_VAR == IS_CV) { - do { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (GC_MAY_LEAK(ref)) { - gc_possible_root(ref); - } - ZVAL_NULL(retval_ptr); - break; - } else { - Z_ADDREF_P(retval_ptr); - } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - Z_ADDREF_P(retval_ptr); - } - } - } - ZVAL_COPY_VALUE(return_value, retval_ptr); - } while (0); - } else /* if (IS_VAR == IS_VAR) */ { - if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (UNEXPECTED(GC_DELREF(ref) == 0)) { - efree_size(ref, sizeof(zend_reference)); - } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - Z_ADDREF_P(retval_ptr); - } - } else { - ZVAL_COPY_VALUE(return_value, retval_ptr); - } - } - } - zend_observer_maybe_fcall_call_end(execute_data, return_value); - ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); -} - static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -21745,67 +21226,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } -static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - zval *retval_ptr; - - SAVE_OPLINE(); - - do { - if ((IS_VAR & (IS_CONST|IS_TMP_VAR)) || - (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) { - /* Not supposed to happen, but we'll allow it */ - zend_error(E_NOTICE, "Only variable references should be returned by reference"); - - retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC); - if (!EX(return_value)) { - zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); - } else { - if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(EX(return_value), retval_ptr); - break; - } - - ZVAL_NEW_REF(EX(return_value), retval_ptr); - if (IS_VAR == IS_CONST) { - Z_TRY_ADDREF_P(retval_ptr); - } - } - break; - } - - retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC); - - if (IS_VAR == IS_VAR) { - ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval)); - if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) { - zend_error(E_NOTICE, "Only variable references should be returned by reference"); - if (EX(return_value)) { - ZVAL_NEW_REF(EX(return_value), retval_ptr); - } else { - zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); - } - break; - } - } - - if (EX(return_value)) { - if (Z_ISREF_P(retval_ptr)) { - Z_ADDREF_P(retval_ptr); - } else { - ZVAL_MAKE_REF_EX(retval_ptr, 2); - } - ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr)); - } - - zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); - } while (0); - - zend_observer_maybe_fcall_call_end(execute_data, EX(return_value)); - ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); -} - static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -21849,51 +21269,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HAND ZEND_VM_RETURN(); } -static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - zval *retval; - - zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); - - SAVE_OPLINE(); - retval = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC); - - /* Copy return value into generator->retval */ - if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) { - ZVAL_COPY_VALUE(&generator->retval, retval); - if (IS_VAR == IS_CONST) { - if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) { - Z_ADDREF(generator->retval); - } - } - } else if (IS_VAR == IS_CV) { - ZVAL_COPY_DEREF(&generator->retval, retval); - } else /* if (IS_VAR == IS_VAR) */ { - if (UNEXPECTED(Z_ISREF_P(retval))) { - zend_refcounted *ref = Z_COUNTED_P(retval); - - retval = Z_REFVAL_P(retval); - ZVAL_COPY_VALUE(&generator->retval, retval); - if (UNEXPECTED(GC_DELREF(ref) == 0)) { - efree_size(ref, sizeof(zend_reference)); - } else if (Z_OPT_REFCOUNTED_P(retval)) { - Z_ADDREF_P(retval); - } - } else { - ZVAL_COPY_VALUE(&generator->retval, retval); - } - } - - zend_observer_maybe_fcall_call_end(generator->execute_data, &generator->retval); - - /* Close the generator to free up resources */ - zend_generator_close(generator, 1); - - /* Pass execution back to handling code */ - ZEND_VM_RETURN(); -} - static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -38304,79 +37679,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HAN ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } -static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - zval *retval_ptr; - zval *return_value; - - retval_ptr = EX_VAR(opline->op1.var); - return_value = EX(return_value); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { - if (IS_CV & (IS_VAR|IS_TMP_VAR)) { - if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { - SAVE_OPLINE(); - rc_dtor_func(Z_COUNTED_P(retval_ptr)); - } - } - } else { - if ((IS_CV & (IS_CONST|IS_TMP_VAR))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (IS_CV == IS_CONST) { - if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { - Z_ADDREF_P(return_value); - } - } - } else if (IS_CV == IS_CV) { - do { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (GC_MAY_LEAK(ref)) { - gc_possible_root(ref); - } - ZVAL_NULL(retval_ptr); - break; - } else { - Z_ADDREF_P(retval_ptr); - } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - Z_ADDREF_P(retval_ptr); - } - } - } - ZVAL_COPY_VALUE(return_value, retval_ptr); - } while (0); - } else /* if (IS_CV == IS_VAR) */ { - if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (UNEXPECTED(GC_DELREF(ref) == 0)) { - efree_size(ref, sizeof(zend_reference)); - } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - Z_ADDREF_P(retval_ptr); - } - } else { - ZVAL_COPY_VALUE(return_value, retval_ptr); - } - } - } - zend_observer_maybe_fcall_call_end(execute_data, return_value); - ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); -} - static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -38436,66 +37738,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER( ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } -static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - zval *retval_ptr; - - SAVE_OPLINE(); - - do { - if ((IS_CV & (IS_CONST|IS_TMP_VAR)) || - (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) { - /* Not supposed to happen, but we'll allow it */ - zend_error(E_NOTICE, "Only variable references should be returned by reference"); - - retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); - if (!EX(return_value)) { - - } else { - if (IS_CV == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(EX(return_value), retval_ptr); - break; - } - - ZVAL_NEW_REF(EX(return_value), retval_ptr); - if (IS_CV == IS_CONST) { - Z_TRY_ADDREF_P(retval_ptr); - } - } - break; - } - - retval_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); - - if (IS_CV == IS_VAR) { - ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval)); - if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) { - zend_error(E_NOTICE, "Only variable references should be returned by reference"); - if (EX(return_value)) { - ZVAL_NEW_REF(EX(return_value), retval_ptr); - } else { - - } - break; - } - } - - if (EX(return_value)) { - if (Z_ISREF_P(retval_ptr)) { - Z_ADDREF_P(retval_ptr); - } else { - ZVAL_MAKE_REF_EX(retval_ptr, 2); - } - ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr)); - } - - } while (0); - - zend_observer_maybe_fcall_call_end(execute_data, EX(return_value)); - ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); -} - static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -38539,51 +37781,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDL ZEND_VM_RETURN(); } -static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - zval *retval; - - zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); - - SAVE_OPLINE(); - retval = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); - - /* Copy return value into generator->retval */ - if ((IS_CV & (IS_CONST|IS_TMP_VAR))) { - ZVAL_COPY_VALUE(&generator->retval, retval); - if (IS_CV == IS_CONST) { - if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) { - Z_ADDREF(generator->retval); - } - } - } else if (IS_CV == IS_CV) { - ZVAL_COPY_DEREF(&generator->retval, retval); - } else /* if (IS_CV == IS_VAR) */ { - if (UNEXPECTED(Z_ISREF_P(retval))) { - zend_refcounted *ref = Z_COUNTED_P(retval); - - retval = Z_REFVAL_P(retval); - ZVAL_COPY_VALUE(&generator->retval, retval); - if (UNEXPECTED(GC_DELREF(ref) == 0)) { - efree_size(ref, sizeof(zend_reference)); - } else if (Z_OPT_REFCOUNTED_P(retval)) { - Z_ADDREF_P(retval); - } - } else { - ZVAL_COPY_VALUE(&generator->retval, retval); - } - } - - zend_observer_maybe_fcall_call_end(generator->execute_data, &generator->retval); - - /* Close the generator to free up resources */ - zend_generator_close(generator, 1); - - /* Pass execution back to handling code */ - ZEND_VM_RETURN(); -} - static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -38884,75 +38081,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLE ZEND_VM_NEXT_OPCODE(); } -static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - zend_op_array *new_op_array; - zval *inc_filename; - - SAVE_OPLINE(); - inc_filename = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); - new_op_array = zend_include_or_eval(inc_filename, opline->extended_value); - if (UNEXPECTED(EG(exception) != NULL)) { - - if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) { - destroy_op_array(new_op_array); - efree_size(new_op_array, sizeof(zend_op_array)); - } - UNDEF_RESULT(); - HANDLE_EXCEPTION(); - } else if (new_op_array == ZEND_FAKE_OP_ARRAY) { - if (RETURN_VALUE_USED(opline)) { - ZVAL_TRUE(EX_VAR(opline->result.var)); - } - } else if (EXPECTED(new_op_array != NULL)) { - zval *return_value = NULL; - zend_execute_data *call; - - if (RETURN_VALUE_USED(opline)) { - return_value = EX_VAR(opline->result.var); - } - - new_op_array->scope = EX(func)->op_array.scope; - - call = zend_vm_stack_push_call_frame( - (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE, - (zend_function*)new_op_array, 0, - Z_PTR(EX(This))); - - if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) { - call->symbol_table = EX(symbol_table); - } else { - call->symbol_table = zend_rebuild_symbol_table(); - } - - call->prev_execute_data = execute_data; - i_init_code_execute_data(call, new_op_array, return_value); - zend_observer_maybe_fcall_call_begin(call); - if (EXPECTED(zend_execute_ex == execute_ex)) { - - ZEND_VM_ENTER(); - } else { - ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); - zend_execute_ex(call); - zend_vm_stack_free_call_frame(call); - } - - destroy_op_array(new_op_array); - efree_size(new_op_array, sizeof(zend_op_array)); - if (UNEXPECTED(EG(exception) != NULL)) { - zend_rethrow_exception(execute_data); - - UNDEF_RESULT(); - HANDLE_EXCEPTION(); - } - } else if (RETURN_VALUE_USED(opline)) { - ZVAL_FALSE(EX_VAR(opline->result.var)); - } - - ZEND_VM_NEXT_OPCODE(); -} - static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -53004,19 +52132,19 @@ ZEND_API void execute_ex(zend_execute_data *ex) (void*)&&ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_LABEL, (void*)&&ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_LABEL, (void*)&&ZEND_DO_FCALL_SPEC_RETVAL_USED_LABEL, - (void*)&&ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_OBSERVER_LABEL, - (void*)&&ZEND_DO_FCALL_SPEC_RETVAL_USED_OBSERVER_LABEL, + (void*)&&ZEND_DO_FCALL_SPEC_OBSERVER_LABEL, + (void*)&&ZEND_DO_FCALL_SPEC_OBSERVER_LABEL, (void*)&&ZEND_INIT_FCALL_SPEC_CONST_LABEL, (void*)&&ZEND_RETURN_SPEC_CONST_LABEL, - (void*)&&ZEND_RETURN_SPEC_CONST_OBSERVER_LABEL, + (void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL, (void*)&&ZEND_RETURN_SPEC_TMP_LABEL, - (void*)&&ZEND_RETURN_SPEC_TMP_OBSERVER_LABEL, + (void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL, (void*)&&ZEND_RETURN_SPEC_VAR_LABEL, - (void*)&&ZEND_RETURN_SPEC_VAR_OBSERVER_LABEL, + (void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_RETURN_SPEC_CV_LABEL, - (void*)&&ZEND_RETURN_SPEC_CV_OBSERVER_LABEL, + (void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL, (void*)&&ZEND_RECV_SPEC_UNUSED_LABEL, (void*)&&ZEND_RECV_INIT_SPEC_CONST_LABEL, (void*)&&ZEND_SEND_VAL_SPEC_CONST_CONST_LABEL, @@ -53177,15 +52305,15 @@ ZEND_API void execute_ex(zend_execute_data *ex) (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_LABEL, (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CONST_LABEL, - (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CONST_OBSERVER_LABEL, + (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL, (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL, - (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER_LABEL, + (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL, (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL, - (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER_LABEL, + (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CV_LABEL, - (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CV_OBSERVER_LABEL, + (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL, (void*)&&ZEND_UNSET_VAR_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL, @@ -53641,15 +52769,15 @@ ZEND_API void execute_ex(zend_execute_data *ex) (void*)&&ZEND_CLONE_SPEC_UNUSED_LABEL, (void*)&&ZEND_CLONE_SPEC_CV_LABEL, (void*)&&ZEND_RETURN_BY_REF_SPEC_CONST_LABEL, - (void*)&&ZEND_RETURN_BY_REF_SPEC_CONST_OBSERVER_LABEL, + (void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL, (void*)&&ZEND_RETURN_BY_REF_SPEC_TMP_LABEL, - (void*)&&ZEND_RETURN_BY_REF_SPEC_TMP_OBSERVER_LABEL, + (void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL, (void*)&&ZEND_RETURN_BY_REF_SPEC_VAR_LABEL, - (void*)&&ZEND_RETURN_BY_REF_SPEC_VAR_OBSERVER_LABEL, + (void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_RETURN_BY_REF_SPEC_CV_LABEL, - (void*)&&ZEND_RETURN_BY_REF_SPEC_CV_OBSERVER_LABEL, + (void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL, @@ -53848,12 +52976,12 @@ ZEND_API void execute_ex(zend_execute_data *ex) (void*)&&ZEND_DO_ICALL_SPEC_RETVAL_USED_LABEL, (void*)&&ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_LABEL, (void*)&&ZEND_DO_UCALL_SPEC_RETVAL_USED_LABEL, - (void*)&&ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_OBSERVER_LABEL, - (void*)&&ZEND_DO_UCALL_SPEC_RETVAL_USED_OBSERVER_LABEL, + (void*)&&ZEND_DO_UCALL_SPEC_OBSERVER_LABEL, + (void*)&&ZEND_DO_UCALL_SPEC_OBSERVER_LABEL, (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_LABEL, (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_LABEL, - (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_OBSERVER_LABEL, - (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_OBSERVER_LABEL, + (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_LABEL, + (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, @@ -54025,15 +53153,15 @@ ZEND_API void execute_ex(zend_execute_data *ex) (void*)&&ZEND_YIELD_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_YIELD_SPEC_CV_CV_LABEL, (void*)&&ZEND_GENERATOR_RETURN_SPEC_CONST_LABEL, - (void*)&&ZEND_GENERATOR_RETURN_SPEC_CONST_OBSERVER_LABEL, + (void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL, (void*)&&ZEND_GENERATOR_RETURN_SPEC_TMP_LABEL, - (void*)&&ZEND_GENERATOR_RETURN_SPEC_TMP_OBSERVER_LABEL, + (void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL, (void*)&&ZEND_GENERATOR_RETURN_SPEC_VAR_LABEL, - (void*)&&ZEND_GENERATOR_RETURN_SPEC_VAR_OBSERVER_LABEL, + (void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_GENERATOR_RETURN_SPEC_CV_LABEL, - (void*)&&ZEND_GENERATOR_RETURN_SPEC_CV_OBSERVER_LABEL, + (void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL, (void*)&&ZEND_FAST_CALL_SPEC_LABEL, (void*)&&ZEND_FAST_RET_SPEC_LABEL, (void*)&&ZEND_RECV_VARIADIC_SPEC_UNUSED_LABEL, @@ -55330,13 +54458,9 @@ ZEND_API void execute_ex(zend_execute_data *ex) VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_USED) ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); - HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_OBSERVER): - VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_OBSERVER) - ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - HYBRID_BREAK(); - HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_USED_OBSERVER): - VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_USED_OBSERVER) - ZEND_DO_UCALL_SPEC_RETVAL_USED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); + HYBRID_CASE(ZEND_DO_UCALL_SPEC_OBSERVER): + VM_TRACE(ZEND_DO_UCALL_SPEC_OBSERVER) + ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED): VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED) @@ -55346,13 +54470,9 @@ ZEND_API void execute_ex(zend_execute_data *ex) VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED) ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); - HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_OBSERVER): - VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_OBSERVER) - ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - HYBRID_BREAK(); - HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_OBSERVER): - VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_OBSERVER) - ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); + HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER): + VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER) + ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED): VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED) @@ -55362,13 +54482,9 @@ ZEND_API void execute_ex(zend_execute_data *ex) VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_USED) ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); - HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_OBSERVER): - VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_OBSERVER) - ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - HYBRID_BREAK(); - HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_USED_OBSERVER): - VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_USED_OBSERVER) - ZEND_DO_FCALL_SPEC_RETVAL_USED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); + HYBRID_CASE(ZEND_DO_FCALL_SPEC_OBSERVER): + VM_TRACE(ZEND_DO_FCALL_SPEC_OBSERVER) + ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_GENERATOR_CREATE_SPEC): VM_TRACE(ZEND_GENERATOR_CREATE_SPEC) @@ -55616,80 +54732,80 @@ ZEND_API void execute_ex(zend_execute_data *ex) } } } - - goto zend_leave_helper_SPEC_LABEL; -} - - HYBRID_CASE(ZEND_RETURN_SPEC_CONST_OBSERVER): - VM_TRACE(ZEND_RETURN_SPEC_CONST_OBSERVER) -{ - USE_OPLINE - zval *retval_ptr; - zval *return_value; - - retval_ptr = RT_CONSTANT(opline, opline->op1); - return_value = EX(return_value); - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { - if (IS_CONST & (IS_VAR|IS_TMP_VAR)) { - if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { - SAVE_OPLINE(); - rc_dtor_func(Z_COUNTED_P(retval_ptr)); - } - } - } else { - if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (IS_CONST == IS_CONST) { - if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { - Z_ADDREF_P(return_value); - } - } - } else if (IS_CONST == IS_CV) { - do { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (GC_MAY_LEAK(ref)) { - gc_possible_root(ref); - } - ZVAL_NULL(retval_ptr); - break; - } else { - Z_ADDREF_P(retval_ptr); - } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - Z_ADDREF_P(retval_ptr); - } - } - } - ZVAL_COPY_VALUE(return_value, retval_ptr); - } while (0); - } else /* if (IS_CONST == IS_VAR) */ { - if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (UNEXPECTED(GC_DELREF(ref) == 0)) { - efree_size(ref, sizeof(zend_reference)); - } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - Z_ADDREF_P(retval_ptr); - } - } else { - ZVAL_COPY_VALUE(return_value, retval_ptr); - } - } - } + + goto zend_leave_helper_SPEC_LABEL; +} + + HYBRID_CASE(ZEND_RETURN_SPEC_OBSERVER): + VM_TRACE(ZEND_RETURN_SPEC_OBSERVER) +{ + USE_OPLINE + zval *retval_ptr; + zval *return_value; + + retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R); + return_value = EX(return_value); + if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { + SAVE_OPLINE(); + retval_ptr = ZVAL_UNDEFINED_OP1(); + if (return_value) { + ZVAL_NULL(return_value); + } + } else if (!return_value) { + if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { + if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { + SAVE_OPLINE(); + rc_dtor_func(Z_COUNTED_P(retval_ptr)); + } + } + } else { + if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) { + ZVAL_COPY_VALUE(return_value, retval_ptr); + if (opline->op1_type == IS_CONST) { + if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { + Z_ADDREF_P(return_value); + } + } + } else if (opline->op1_type == IS_CV) { + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { + zend_refcounted *ref = Z_COUNTED_P(retval_ptr); + ZVAL_COPY_VALUE(return_value, retval_ptr); + if (GC_MAY_LEAK(ref)) { + gc_possible_root(ref); + } + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); + } + } else { + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } + } + } + ZVAL_COPY_VALUE(return_value, retval_ptr); + } while (0); + } else /* if (opline->op1_type == IS_VAR) */ { + if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { + zend_refcounted *ref = Z_COUNTED_P(retval_ptr); + + retval_ptr = Z_REFVAL_P(retval_ptr); + ZVAL_COPY_VALUE(return_value, retval_ptr); + if (UNEXPECTED(GC_DELREF(ref) == 0)) { + efree_size(ref, sizeof(zend_reference)); + } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } + } else { + ZVAL_COPY_VALUE(return_value, retval_ptr); + } + } + } zend_observer_maybe_fcall_call_end(execute_data, return_value); goto zend_leave_helper_SPEC_LABEL; } @@ -55698,17 +54814,17 @@ ZEND_API void execute_ex(zend_execute_data *ex) VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CONST) ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); - HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CONST_OBSERVER): - VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CONST_OBSERVER) - ZEND_RETURN_BY_REF_SPEC_CONST_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); + HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_OBSERVER): + VM_TRACE(ZEND_RETURN_BY_REF_SPEC_OBSERVER) + ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CONST): VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CONST) ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); - HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CONST_OBSERVER): - VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CONST_OBSERVER) - ZEND_GENERATOR_RETURN_SPEC_CONST_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); + HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_OBSERVER): + VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_OBSERVER) + ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_THROW_SPEC_CONST): VM_TRACE(ZEND_THROW_SPEC_CONST) @@ -55738,9 +54854,9 @@ ZEND_API void execute_ex(zend_execute_data *ex) VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST) ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); - HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST_OBSERVER): - VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST_OBSERVER) - ZEND_INCLUDE_OR_EVAL_SPEC_CONST_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); + HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER): + VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER) + ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CONST): VM_TRACE(ZEND_FE_RESET_R_SPEC_CONST) @@ -56842,10 +55958,6 @@ ZEND_API void execute_ex(zend_execute_data *ex) VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR) ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); - HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER): - VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER) - ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_FROM_SPEC_TMPVAR): VM_TRACE(ZEND_YIELD_FROM_SPEC_TMPVAR) ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); @@ -57229,80 +56341,6 @@ ZEND_API void execute_ex(zend_execute_data *ex) } } - goto zend_leave_helper_SPEC_LABEL; -} - - HYBRID_CASE(ZEND_RETURN_SPEC_TMP_OBSERVER): - VM_TRACE(ZEND_RETURN_SPEC_TMP_OBSERVER) -{ - USE_OPLINE - zval *retval_ptr; - zval *return_value; - - retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC); - return_value = EX(return_value); - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { - if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) { - if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { - SAVE_OPLINE(); - rc_dtor_func(Z_COUNTED_P(retval_ptr)); - } - } - } else { - if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (IS_TMP_VAR == IS_CONST) { - if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { - Z_ADDREF_P(return_value); - } - } - } else if (IS_TMP_VAR == IS_CV) { - do { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (GC_MAY_LEAK(ref)) { - gc_possible_root(ref); - } - ZVAL_NULL(retval_ptr); - break; - } else { - Z_ADDREF_P(retval_ptr); - } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - Z_ADDREF_P(retval_ptr); - } - } - } - ZVAL_COPY_VALUE(return_value, retval_ptr); - } while (0); - } else /* if (IS_TMP_VAR == IS_VAR) */ { - if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (UNEXPECTED(GC_DELREF(ref) == 0)) { - efree_size(ref, sizeof(zend_reference)); - } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - Z_ADDREF_P(retval_ptr); - } - } else { - ZVAL_COPY_VALUE(return_value, retval_ptr); - } - } - } - zend_observer_maybe_fcall_call_end(execute_data, return_value); goto zend_leave_helper_SPEC_LABEL; } @@ -57310,18 +56348,10 @@ ZEND_API void execute_ex(zend_execute_data *ex) VM_TRACE(ZEND_RETURN_BY_REF_SPEC_TMP) ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); - HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_TMP_OBSERVER): - VM_TRACE(ZEND_RETURN_BY_REF_SPEC_TMP_OBSERVER) - ZEND_RETURN_BY_REF_SPEC_TMP_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - HYBRID_BREAK(); HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_TMP): VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_TMP) ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); - HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_TMP_OBSERVER): - VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_TMP_OBSERVER) - ZEND_GENERATOR_RETURN_SPEC_TMP_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_USER_SPEC_TMP): VM_TRACE(ZEND_SEND_USER_SPEC_TMP) ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); @@ -57609,80 +56639,6 @@ ZEND_API void execute_ex(zend_execute_data *ex) } } - goto zend_leave_helper_SPEC_LABEL; -} - - HYBRID_CASE(ZEND_RETURN_SPEC_VAR_OBSERVER): - VM_TRACE(ZEND_RETURN_SPEC_VAR_OBSERVER) -{ - USE_OPLINE - zval *retval_ptr; - zval *return_value; - - retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC); - return_value = EX(return_value); - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { - if (IS_VAR & (IS_VAR|IS_TMP_VAR)) { - if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { - SAVE_OPLINE(); - rc_dtor_func(Z_COUNTED_P(retval_ptr)); - } - } - } else { - if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (IS_VAR == IS_CONST) { - if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { - Z_ADDREF_P(return_value); - } - } - } else if (IS_VAR == IS_CV) { - do { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (GC_MAY_LEAK(ref)) { - gc_possible_root(ref); - } - ZVAL_NULL(retval_ptr); - break; - } else { - Z_ADDREF_P(retval_ptr); - } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - Z_ADDREF_P(retval_ptr); - } - } - } - ZVAL_COPY_VALUE(return_value, retval_ptr); - } while (0); - } else /* if (IS_VAR == IS_VAR) */ { - if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (UNEXPECTED(GC_DELREF(ref) == 0)) { - efree_size(ref, sizeof(zend_reference)); - } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - Z_ADDREF_P(retval_ptr); - } - } else { - ZVAL_COPY_VALUE(return_value, retval_ptr); - } - } - } - zend_observer_maybe_fcall_call_end(execute_data, return_value); goto zend_leave_helper_SPEC_LABEL; } @@ -57690,18 +56646,10 @@ ZEND_API void execute_ex(zend_execute_data *ex) VM_TRACE(ZEND_RETURN_BY_REF_SPEC_VAR) ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); - HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_VAR_OBSERVER): - VM_TRACE(ZEND_RETURN_BY_REF_SPEC_VAR_OBSERVER) - ZEND_RETURN_BY_REF_SPEC_VAR_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - HYBRID_BREAK(); HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_VAR): VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_VAR) ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); - HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_VAR_OBSERVER): - VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_VAR_OBSERVER) - ZEND_GENERATOR_RETURN_SPEC_VAR_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_USER_SPEC_VAR): VM_TRACE(ZEND_SEND_USER_SPEC_VAR) ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); @@ -58805,80 +57753,6 @@ ZEND_API void execute_ex(zend_execute_data *ex) } } - goto zend_leave_helper_SPEC_LABEL; -} - - HYBRID_CASE(ZEND_RETURN_SPEC_CV_OBSERVER): - VM_TRACE(ZEND_RETURN_SPEC_CV_OBSERVER) -{ - USE_OPLINE - zval *retval_ptr; - zval *return_value; - - retval_ptr = EX_VAR(opline->op1.var); - return_value = EX(return_value); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { - if (IS_CV & (IS_VAR|IS_TMP_VAR)) { - if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { - SAVE_OPLINE(); - rc_dtor_func(Z_COUNTED_P(retval_ptr)); - } - } - } else { - if ((IS_CV & (IS_CONST|IS_TMP_VAR))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (IS_CV == IS_CONST) { - if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { - Z_ADDREF_P(return_value); - } - } - } else if (IS_CV == IS_CV) { - do { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (GC_MAY_LEAK(ref)) { - gc_possible_root(ref); - } - ZVAL_NULL(retval_ptr); - break; - } else { - Z_ADDREF_P(retval_ptr); - } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - Z_ADDREF_P(retval_ptr); - } - } - } - ZVAL_COPY_VALUE(return_value, retval_ptr); - } while (0); - } else /* if (IS_CV == IS_VAR) */ { - if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (UNEXPECTED(GC_DELREF(ref) == 0)) { - efree_size(ref, sizeof(zend_reference)); - } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - Z_ADDREF_P(retval_ptr); - } - } else { - ZVAL_COPY_VALUE(return_value, retval_ptr); - } - } - } - zend_observer_maybe_fcall_call_end(execute_data, return_value); goto zend_leave_helper_SPEC_LABEL; } @@ -58886,18 +57760,10 @@ ZEND_API void execute_ex(zend_execute_data *ex) VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CV) ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); - HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CV_OBSERVER): - VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CV_OBSERVER) - ZEND_RETURN_BY_REF_SPEC_CV_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - HYBRID_BREAK(); HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CV): VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CV) ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); - HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CV_OBSERVER): - VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CV_OBSERVER) - ZEND_GENERATOR_RETURN_SPEC_CV_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - HYBRID_BREAK(); HYBRID_CASE(ZEND_THROW_SPEC_CV): VM_TRACE(ZEND_THROW_SPEC_CV) ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); @@ -58922,10 +57788,6 @@ ZEND_API void execute_ex(zend_execute_data *ex) VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CV) ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); - HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CV_OBSERVER): - VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CV_OBSERVER) - ZEND_INCLUDE_OR_EVAL_SPEC_CV_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - HYBRID_BREAK(); HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CV): VM_TRACE(ZEND_FE_RESET_R_SPEC_CV) ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); @@ -61284,19 +60146,19 @@ void zend_vm_init(void) ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER, ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER, ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER, - ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER, - ZEND_DO_FCALL_SPEC_RETVAL_USED_OBSERVER_HANDLER, + ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER, + ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER, ZEND_INIT_FCALL_SPEC_CONST_HANDLER, ZEND_RETURN_SPEC_CONST_HANDLER, - ZEND_RETURN_SPEC_CONST_OBSERVER_HANDLER, + ZEND_RETURN_SPEC_OBSERVER_HANDLER, ZEND_RETURN_SPEC_TMP_HANDLER, - ZEND_RETURN_SPEC_TMP_OBSERVER_HANDLER, + ZEND_RETURN_SPEC_OBSERVER_HANDLER, ZEND_RETURN_SPEC_VAR_HANDLER, - ZEND_RETURN_SPEC_VAR_OBSERVER_HANDLER, + ZEND_RETURN_SPEC_OBSERVER_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_RETURN_SPEC_CV_HANDLER, - ZEND_RETURN_SPEC_CV_OBSERVER_HANDLER, + ZEND_RETURN_SPEC_OBSERVER_HANDLER, ZEND_RECV_SPEC_UNUSED_HANDLER, ZEND_RECV_INIT_SPEC_CONST_HANDLER, ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER, @@ -61457,15 +60319,15 @@ void zend_vm_init(void) ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER, ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_CONST_OBSERVER_HANDLER, + ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER_HANDLER, + ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER_HANDLER, + ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_CV_OBSERVER_HANDLER, + ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER, ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER, @@ -61921,15 +60783,15 @@ void zend_vm_init(void) ZEND_CLONE_SPEC_UNUSED_HANDLER, ZEND_CLONE_SPEC_CV_HANDLER, ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER, - ZEND_RETURN_BY_REF_SPEC_CONST_OBSERVER_HANDLER, + ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER, ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER, - ZEND_RETURN_BY_REF_SPEC_TMP_OBSERVER_HANDLER, + ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER, ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER, - ZEND_RETURN_BY_REF_SPEC_VAR_OBSERVER_HANDLER, + ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_RETURN_BY_REF_SPEC_CV_HANDLER, - ZEND_RETURN_BY_REF_SPEC_CV_OBSERVER_HANDLER, + ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER, @@ -62128,12 +60990,12 @@ void zend_vm_init(void) ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER, ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER, ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER, - ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER, - ZEND_DO_UCALL_SPEC_RETVAL_USED_OBSERVER_HANDLER, + ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER, + ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_OBSERVER_HANDLER, + ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER, + ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, @@ -62305,15 +61167,15 @@ void zend_vm_init(void) ZEND_YIELD_SPEC_CV_UNUSED_HANDLER, ZEND_YIELD_SPEC_CV_CV_HANDLER, ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER, - ZEND_GENERATOR_RETURN_SPEC_CONST_OBSERVER_HANDLER, + ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER, ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER, - ZEND_GENERATOR_RETURN_SPEC_TMP_OBSERVER_HANDLER, + ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER, ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER, - ZEND_GENERATOR_RETURN_SPEC_VAR_OBSERVER_HANDLER, + ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER, - ZEND_GENERATOR_RETURN_SPEC_CV_OBSERVER_HANDLER, + ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER, ZEND_FAST_CALL_SPEC_HANDLER, ZEND_FAST_RET_SPEC_HANDLER, ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER, diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php index 2c2a64b294ccb..e3dceaa829a1e 100755 --- a/Zend/zend_vm_gen.php +++ b/Zend/zend_vm_gen.php @@ -793,6 +793,7 @@ function gen_code($f, $spec, $kind, $code, $op1, $op2, $name, $extra_spec=null) "/opline->extended_value\s*&\s*~\s*ZEND_ISEMPTY/" => isset($extra_spec['ISSET']) ? ($extra_spec['ISSET'] == 0 ? "\\0" : "opline->extended_value") : "\\0", + "/IS_OBSERVER/" => isset($extra_spec['OBSERVER']) && $extra_spec['OBSERVER'] == 1 ? "1" : "0", "/OBSERVER_FCALL_BEGIN_HANDLERS\(\s*(.*)\s*\)/" => isset($extra_spec['OBSERVER']) ? ($extra_spec['OBSERVER'] == 0 ? "" : "zend_observer_maybe_fcall_call_begin(\\1)") : "", @@ -1004,6 +1005,8 @@ function is_inline_hybrid_handler($name, $hot, $op1, $op2, $extra_spec) { function gen_handler($f, $spec, $kind, $name, $op1, $op2, $use, $code, $lineno, $opcode, $extra_spec = null, &$switch_labels = array()) { global $definition_file, $prefix, $opnames, $gen_order; + static $used_observer_handlers = array(); + if (isset($opcode['alias']) && ($spec || $kind != ZEND_VM_KIND_SWITCH)) { return; } @@ -1037,6 +1040,26 @@ function gen_handler($f, $spec, $kind, $name, $op1, $op2, $use, $code, $lineno, } } + /* Skip all specialization for OBSERVER handlers */ + if (isset($extra_spec["OBSERVER"]) && $extra_spec["OBSERVER"] == 1) { + if (isset($extra_spec["RETVAL"])) { + if ($extra_spec["RETVAL"] == 0) { + unset($extra_spec["RETVAL"]); + } else { + return; + } + } + if ($op1 != "ANY" || $op2 != "ANY") { + if (!isset($used_observer_handlers[$kind][$opcode["op"]])) { + $used_observer_handlers[$kind][$opcode["op"]] = true; + $op1 = "ANY"; + $op2 = "ANY"; + } else { + return; + } + } + } + if (ZEND_VM_LINES) { out($f, "#line $lineno \"$definition_file\"\n"); } @@ -1364,6 +1387,17 @@ function gen_labels($f, $spec, $kind, $prolog, &$specs, $switch_labels = array() } } + /* Skip all specialization for OBSERVER handlers */ + if (isset($extra_spec["OBSERVER"]) && $extra_spec["OBSERVER"] == 1) { + if (isset($extra_spec["RETVAL"])) { + unset($extra_spec["RETVAL"]); + } + if ($op1 != "ANY" || $op2 != "ANY") { + $op1 = "ANY"; + $op2 = "ANY"; + } + } + // Emit pointer to specialized handler $spec_name = $dsc["op"]."_SPEC".$prefix[$op1].$prefix[$op2].extra_spec_name($extra_spec); switch ($kind) { diff --git a/Zend/zend_vm_handlers.h b/Zend/zend_vm_handlers.h index 8410c70e15ceb..fb1251a185321 100644 --- a/Zend/zend_vm_handlers.h +++ b/Zend/zend_vm_handlers.h @@ -637,17 +637,17 @@ _(1349, ZEND_INIT_FCALL_BY_NAME_SPEC_CONST) \ _(1350, ZEND_DO_FCALL_SPEC_RETVAL_UNUSED) \ _(1351, ZEND_DO_FCALL_SPEC_RETVAL_USED) \ - _(1352, ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_OBSERVER) \ - _(1353, ZEND_DO_FCALL_SPEC_RETVAL_USED_OBSERVER) \ + _(1352, ZEND_DO_FCALL_SPEC_OBSERVER) \ + _(1353, ZEND_DO_FCALL_SPEC_OBSERVER) \ _(1354, ZEND_INIT_FCALL_SPEC_CONST) \ _(1355, ZEND_RETURN_SPEC_CONST) \ - _(1356, ZEND_RETURN_SPEC_CONST_OBSERVER) \ + _(1356, ZEND_RETURN_SPEC_OBSERVER) \ _(1357, ZEND_RETURN_SPEC_TMP) \ - _(1358, ZEND_RETURN_SPEC_TMP_OBSERVER) \ + _(1358, ZEND_RETURN_SPEC_OBSERVER) \ _(1359, ZEND_RETURN_SPEC_VAR) \ - _(1360, ZEND_RETURN_SPEC_VAR_OBSERVER) \ + _(1360, ZEND_RETURN_SPEC_OBSERVER) \ _(1363, ZEND_RETURN_SPEC_CV) \ - _(1364, ZEND_RETURN_SPEC_CV_OBSERVER) \ + _(1364, ZEND_RETURN_SPEC_OBSERVER) \ _(1365, ZEND_RECV_SPEC_UNUSED) \ _(1366, ZEND_RECV_INIT_SPEC_CONST) \ _(1367, ZEND_SEND_VAL_SPEC_CONST_CONST) \ @@ -719,13 +719,13 @@ _(1522, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED) \ _(1523, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV) \ _(1524, ZEND_INCLUDE_OR_EVAL_SPEC_CONST) \ - _(1525, ZEND_INCLUDE_OR_EVAL_SPEC_CONST_OBSERVER) \ + _(1525, ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER) \ _(1526, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR) \ - _(1527, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER) \ + _(1527, ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER) \ _(1528, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR) \ - _(1529, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER) \ + _(1529, ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER) \ _(1532, ZEND_INCLUDE_OR_EVAL_SPEC_CV) \ - _(1533, ZEND_INCLUDE_OR_EVAL_SPEC_CV_OBSERVER) \ + _(1533, ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER) \ _(1534, ZEND_UNSET_VAR_SPEC_CONST_UNUSED) \ _(1535, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED) \ _(1536, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED) \ @@ -1000,13 +1000,13 @@ _(1986, ZEND_CLONE_SPEC_UNUSED) \ _(1987, ZEND_CLONE_SPEC_CV) \ _(1988, ZEND_RETURN_BY_REF_SPEC_CONST) \ - _(1989, ZEND_RETURN_BY_REF_SPEC_CONST_OBSERVER) \ + _(1989, ZEND_RETURN_BY_REF_SPEC_OBSERVER) \ _(1990, ZEND_RETURN_BY_REF_SPEC_TMP) \ - _(1991, ZEND_RETURN_BY_REF_SPEC_TMP_OBSERVER) \ + _(1991, ZEND_RETURN_BY_REF_SPEC_OBSERVER) \ _(1992, ZEND_RETURN_BY_REF_SPEC_VAR) \ - _(1993, ZEND_RETURN_BY_REF_SPEC_VAR_OBSERVER) \ + _(1993, ZEND_RETURN_BY_REF_SPEC_OBSERVER) \ _(1996, ZEND_RETURN_BY_REF_SPEC_CV) \ - _(1997, ZEND_RETURN_BY_REF_SPEC_CV_OBSERVER) \ + _(1997, ZEND_RETURN_BY_REF_SPEC_OBSERVER) \ _(1998, ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST) \ _(1999, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR) \ _(2000, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR) \ @@ -1111,12 +1111,12 @@ _(2193, ZEND_DO_ICALL_SPEC_RETVAL_USED) \ _(2194, ZEND_DO_UCALL_SPEC_RETVAL_UNUSED) \ _(2195, ZEND_DO_UCALL_SPEC_RETVAL_USED) \ - _(2196, ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_OBSERVER) \ - _(2197, ZEND_DO_UCALL_SPEC_RETVAL_USED_OBSERVER) \ + _(2196, ZEND_DO_UCALL_SPEC_OBSERVER) \ + _(2197, ZEND_DO_UCALL_SPEC_OBSERVER) \ _(2198, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED) \ _(2199, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED) \ - _(2200, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_OBSERVER) \ - _(2201, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_OBSERVER) \ + _(2200, ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER) \ + _(2201, ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER) \ _(2212, ZEND_PRE_INC_OBJ_SPEC_VAR_CONST) \ _(2213, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \ _(2214, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \ @@ -1233,13 +1233,13 @@ _(2370, ZEND_YIELD_SPEC_CV_UNUSED) \ _(2371, ZEND_YIELD_SPEC_CV_CV) \ _(2372, ZEND_GENERATOR_RETURN_SPEC_CONST) \ - _(2373, ZEND_GENERATOR_RETURN_SPEC_CONST_OBSERVER) \ + _(2373, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \ _(2374, ZEND_GENERATOR_RETURN_SPEC_TMP) \ - _(2375, ZEND_GENERATOR_RETURN_SPEC_TMP_OBSERVER) \ + _(2375, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \ _(2376, ZEND_GENERATOR_RETURN_SPEC_VAR) \ - _(2377, ZEND_GENERATOR_RETURN_SPEC_VAR_OBSERVER) \ + _(2377, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \ _(2380, ZEND_GENERATOR_RETURN_SPEC_CV) \ - _(2381, ZEND_GENERATOR_RETURN_SPEC_CV_OBSERVER) \ + _(2381, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \ _(2382, ZEND_FAST_CALL_SPEC) \ _(2383, ZEND_FAST_RET_SPEC) \ _(2384, ZEND_RECV_VARIADIC_SPEC_UNUSED) \ From 34bb5ba2ea1db1e4b4bad991fdcf436c688dd54d Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 18 Sep 2020 11:02:51 +0200 Subject: [PATCH 43/67] Remove support for EXT_NOP This is an annoying edge case that regularly gets broken. As we're not aware of significant users of this API, and there are other ways to hook this, remove support for EXT_NOP. --- UPGRADING.INTERNALS | 6 ++++++ Zend/zend_compile.c | 5 ----- Zend/zend_execute.c | 3 +-- ext/opcache/Optimizer/compact_literals.c | 2 +- ext/opcache/Optimizer/dce.c | 1 - ext/opcache/Optimizer/zend_cfg.c | 9 --------- ext/opcache/jit/zend_jit.c | 18 +----------------- ext/opcache/jit/zend_jit_trace.c | 11 ++--------- ext/opcache/jit/zend_jit_x86.dasc | 3 +-- sapi/phpdbg/phpdbg.c | 3 ++- 10 files changed, 14 insertions(+), 47 deletions(-) diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS index 249cd553bab53..1815a9c264b21 100644 --- a/UPGRADING.INTERNALS +++ b/UPGRADING.INTERNALS @@ -23,6 +23,8 @@ PHP 8.0 INTERNALS UPGRADE NOTES t. Signature changes u. Error Notification callbacks to replace zend_error_cb overwrite use-cases v. Removed Zend APIs + w. Renamed Zend APIs + x. ZEND_EXT_NOP no longer emitted 2. Build system changes a. Abstract @@ -395,6 +397,10 @@ PHP 8.0 INTERNALS UPGRADE NOTES w. The following APIs have been renamed: - _zend_ts_hash_init() to zend_ts_hash_init() + x. In COMPILE_EXTENDED_STMT mode, a ZEND_EXT_NOP opcode will no longer be + generated at the start of a function. Use the new observer APIs or hook + into zend_execute_ex instead. + ======================== 2. Build system changes ======================== diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 719e7aaffeff0..f42542c6b2611 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -6936,11 +6936,6 @@ void zend_compile_func_decl(znode *result, zend_ast *ast, zend_bool toplevel) /* zend_oparray_context_begin(&orig_oparray_context); - if (CG(compiler_options) & ZEND_COMPILE_EXTENDED_STMT) { - zend_op *opline_ext = zend_emit_op(NULL, ZEND_EXT_NOP, NULL, NULL); - opline_ext->lineno = decl->start_lineno; - } - { /* Push a separator to the loop variable stack */ zend_loop_var dummy_var; diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 22afd49c2e0c7..e2e5aa83915d7 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -4454,14 +4454,13 @@ ZEND_API zend_result ZEND_FASTCALL zend_handle_undef_args(zend_execute_data *cal if (fbc->type == ZEND_USER_FUNCTION) { zend_op_array *op_array = &fbc->op_array; uint32_t num_args = ZEND_CALL_NUM_ARGS(call); - uint32_t opline_offset = op_array->opcodes[0].opcode == ZEND_EXT_NOP; for (uint32_t i = 0; i < num_args; i++) { zval *arg = ZEND_CALL_VAR_NUM(call, i); if (!Z_ISUNDEF_P(arg)) { continue; } - zend_op *opline = &op_array->opcodes[i + opline_offset]; + zend_op *opline = &op_array->opcodes[i]; if (EXPECTED(opline->opcode == ZEND_RECV_INIT)) { zval *default_value = RT_CONSTANT(opline, opline->op2); if (Z_OPT_TYPE_P(default_value) == IS_CONSTANT_AST) { diff --git a/ext/opcache/Optimizer/compact_literals.c b/ext/opcache/Optimizer/compact_literals.c index 3feba98d033c6..0e1529d2bd195 100644 --- a/ext/opcache/Optimizer/compact_literals.c +++ b/ext/opcache/Optimizer/compact_literals.c @@ -815,7 +815,7 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx Z_CACHE_SLOT_P(val) = op_array->cache_size; op_array->cache_size += sizeof(zval); } - } else if (opline->opcode != ZEND_RECV && opline->opcode != ZEND_EXT_NOP) { + } else if (opline->opcode != ZEND_RECV) { break; } opline++; diff --git a/ext/opcache/Optimizer/dce.c b/ext/opcache/Optimizer/dce.c index c2f7550e91c68..91c9665d1daae 100644 --- a/ext/opcache/Optimizer/dce.c +++ b/ext/opcache/Optimizer/dce.c @@ -152,7 +152,6 @@ static inline zend_bool may_have_side_effects( case ZEND_EXT_STMT: case ZEND_EXT_FCALL_BEGIN: case ZEND_EXT_FCALL_END: - case ZEND_EXT_NOP: case ZEND_TICKS: case ZEND_YIELD: case ZEND_YIELD_FROM: diff --git a/ext/opcache/Optimizer/zend_cfg.c b/ext/opcache/Optimizer/zend_cfg.c index f036950ffac4c..0560bcf2d5caa 100644 --- a/ext/opcache/Optimizer/zend_cfg.c +++ b/ext/opcache/Optimizer/zend_cfg.c @@ -112,10 +112,6 @@ static void zend_mark_reachable_blocks(const zend_op_array *op_array, zend_cfg * zend_basic_block *blocks = cfg->blocks; blocks[start].flags = ZEND_BB_START; - if (op_array->opcodes[0].opcode == ZEND_EXT_NOP - && (cfg->flags & ZEND_CFG_RECV_ENTRY)) { - blocks[1].flags |= ZEND_BB_RECV_ENTRY; - } zend_mark_reachable(op_array->opcodes, cfg, blocks + start); if (op_array->last_try_catch) { @@ -291,10 +287,6 @@ int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t b /* Build CFG, Step 1: Find basic blocks starts, calculate number of blocks */ BB_START(0); - if (op_array->opcodes[0].opcode == ZEND_EXT_NOP - && (build_flags & ZEND_CFG_RECV_ENTRY)) { - BB_START(1); - } for (i = 0; i < op_array->last; i++) { zend_op *opline = op_array->opcodes + i; switch (opline->opcode) { @@ -434,7 +426,6 @@ int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t b case ZEND_FUNC_GET_ARGS: flags |= ZEND_FUNC_VARARG; break; - case ZEND_EXT_NOP: case ZEND_EXT_STMT: flags |= ZEND_FUNC_HAS_EXTENDED_STMT; break; diff --git a/ext/opcache/jit/zend_jit.c b/ext/opcache/jit/zend_jit.c index 7c9704954a354..3dad8e4f91115 100644 --- a/ext/opcache/jit/zend_jit.c +++ b/ext/opcache/jit/zend_jit.c @@ -2118,8 +2118,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op } recv_emitted = 1; } else if (opline->opcode == ZEND_RECV) { - if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) - && op_array->opcodes[0].opcode != ZEND_EXT_NOP) { + if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { /* skip */ continue; } else if (recv_emitted) { @@ -3540,9 +3539,6 @@ static void ZEND_FASTCALL zend_runtime_jit(void) /* restore original opcode handlers */ if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { - if (opline->opcode == ZEND_EXT_NOP) { - opline++; - } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } @@ -3576,9 +3572,6 @@ void zend_jit_check_funcs(HashTable *function_table, zend_bool is_method) { op_array = &func->op_array; opline = op_array->opcodes; if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { - if (opline->opcode == ZEND_EXT_NOP) { - opline++; - } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } @@ -3651,9 +3644,6 @@ static int zend_jit_setup_hot_counters(zend_op_array *op_array) if (JIT_G(hot_func)) { if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { - if (opline->opcode == ZEND_EXT_NOP) { - opline++; - } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } @@ -3692,9 +3682,6 @@ ZEND_EXT_API int zend_jit_op_array(zend_op_array *op_array, zend_script *script) /* Set run-time JIT handler */ ZEND_ASSERT(zend_jit_runtime_jit_handler != NULL); if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { - if (opline->opcode == ZEND_EXT_NOP) { - opline++; - } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } @@ -3714,9 +3701,6 @@ ZEND_EXT_API int zend_jit_op_array(zend_op_array *op_array, zend_script *script) ZEND_ASSERT(zend_jit_profile_jit_handler != NULL); if (op_array->function_name) { if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { - if (opline->opcode == ZEND_EXT_NOP) { - opline++; - } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index 65b6f17c95799..4edb08e08f9b0 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -1743,8 +1743,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin } } if (opline->opcode == ZEND_RECV_INIT - && !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) - && op_array->opcodes[0].opcode != ZEND_EXT_NOP) { + && !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { /* RECV_INIT always copy the constant */ ssa_var_info[ssa_ops[idx].result_def].type = _const_op_type(RT_CONSTANT(opline, opline->op2)); } else if ((opline->opcode == ZEND_FE_FETCH_R || opline->opcode == ZEND_FE_FETCH_RW) @@ -1806,8 +1805,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin } } if (opline->opcode == ZEND_RECV_INIT - && !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) - && op_array->opcodes[0].opcode != ZEND_EXT_NOP) { + && !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { /* RECV_INIT always copy the constant */ ssa_var_info[ssa_ops[idx].result_def].type = _const_op_type(RT_CONSTANT(opline, opline->op2)); } else { @@ -1887,7 +1885,6 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin ssa_var_info[v].type = MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF; } if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) - && op_array->opcodes[0].opcode != ZEND_EXT_NOP && i < op_array->num_args) { /* Propagate argument type */ ssa_var_info[v].type &= STACK_INFO(frame->stack, i); @@ -5323,7 +5320,6 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par || prev_opline->opcode == ZEND_CHECK_UNDEF_ARGS) && p->op_array->num_args && (p->op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) == 0 - && (p->op_array->opcodes[0].opcode != ZEND_EXT_NOP) && ((p+1)->op == ZEND_JIT_TRACE_VM || (p+1)->op == ZEND_JIT_TRACE_END) && TRACE_FRAME_NUM_ARGS(call) < p->op_array->num_args @@ -6814,9 +6810,6 @@ static int zend_jit_setup_hot_trace_counters(zend_op_array *op_array) ZEND_ASSERT(zend_jit_func_trace_counter_handler != NULL); opline = op_array->opcodes; if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { - if (opline->opcode == ZEND_EXT_NOP) { - opline++; - } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index befc6717d9d34..daff6fb641dff 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -12199,8 +12199,7 @@ static int zend_jit_recv_init(dasm_State **Dst, const zend_op *opline, const zen zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); if (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || - (op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) || - op_array->opcodes[0].opcode == ZEND_EXT_NOP) { + (op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { | cmp dword EX->This.u2.num_args, arg_num | jae >5 } diff --git a/sapi/phpdbg/phpdbg.c b/sapi/phpdbg/phpdbg.c index 4629f94986fcf..54d06a84c7703 100644 --- a/sapi/phpdbg/phpdbg.c +++ b/sapi/phpdbg/phpdbg.c @@ -482,7 +482,8 @@ static zend_always_inline zend_bool phpdbg_is_ignored_opcode(zend_uchar opcode) || opcode == ZEND_DECLARE_CONST || opcode == ZEND_DECLARE_CLASS || opcode == ZEND_DECLARE_FUNCTION || opcode == ZEND_DECLARE_CLASS_DELAYED || opcode == ZEND_DECLARE_ANON_CLASS || opcode == ZEND_FAST_RET || opcode == ZEND_TICKS - || opcode == ZEND_EXT_STMT || opcode == ZEND_EXT_FCALL_BEGIN || opcode == ZEND_EXT_FCALL_END || opcode == ZEND_EXT_NOP || opcode == ZEND_BIND_GLOBAL + || opcode == ZEND_EXT_STMT || opcode == ZEND_EXT_FCALL_BEGIN || opcode == ZEND_EXT_FCALL_END + || opcode == ZEND_BIND_GLOBAL ; } From d9628b9ca961d634e81e5c4d4fcb218873ae9159 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Fri, 18 Sep 2020 10:43:21 +0200 Subject: [PATCH 44/67] Update the default values of xmlwriter_write_dtd_entity() Its default method handling had already been fixed not long ago, but only the stub of its method counterpart was updated. --- ext/xmlwriter/php_xmlwriter.stub.php | 2 +- ext/xmlwriter/php_xmlwriter_arginfo.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ext/xmlwriter/php_xmlwriter.stub.php b/ext/xmlwriter/php_xmlwriter.stub.php index fd12e5bdbe4ef..897fe13b875a7 100644 --- a/ext/xmlwriter/php_xmlwriter.stub.php +++ b/ext/xmlwriter/php_xmlwriter.stub.php @@ -80,7 +80,7 @@ function xmlwriter_start_dtd_entity(XMLWriter $xmlwriter, string $name, bool $is function xmlwriter_end_dtd_entity(XMLWriter $xmlwriter): bool {} -function xmlwriter_write_dtd_entity(XMLWriter $xmlwriter, string $name, string $content, bool $isparam = false, string $publicId = UNKNOWN, string $systemId = UNKNOWN, string $ndataid = UNKNOWN): bool {} +function xmlwriter_write_dtd_entity(XMLWriter $xmlwriter, string $name, string $content, bool $isparam = false, ?string $publicId = null, ?string $systemId = null, ?string $ndataid = null): bool {} function xmlwriter_output_memory(XMLWriter $xmlwriter, bool $flush = true): string {} diff --git a/ext/xmlwriter/php_xmlwriter_arginfo.h b/ext/xmlwriter/php_xmlwriter_arginfo.h index ffd3ab51ca9ed..39597b4b826d1 100644 --- a/ext/xmlwriter/php_xmlwriter_arginfo.h +++ b/ext/xmlwriter/php_xmlwriter_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 7a12c6f16e2a21c8b57ec963ed7e5fa230e425aa */ + * Stub hash: b1a8634bf79e1ac8fb94611ab942e9e4c06636f9 */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_xmlwriter_open_uri, 0, 1, XMLWriter, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, uri, IS_STRING, 0) @@ -160,9 +160,9 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xmlwriter_write_dtd_entity, 0, 3 ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, content, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, isparam, _IS_BOOL, 0, "false") - ZEND_ARG_TYPE_INFO(0, publicId, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, systemId, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, ndataid, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, publicId, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, systemId, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, ndataid, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xmlwriter_output_memory, 0, 1, IS_STRING, 0) From b4c2670f857bd23c8b0922bd7f0f4a25d91f28d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Fri, 18 Sep 2020 10:31:48 +0200 Subject: [PATCH 45/67] Fix UNKNOWN default values in ext/pdo_pgsql Closes GH-6159 --- ext/pdo_pgsql/pgsql_driver.c | 8 ++++---- ext/pdo_pgsql/pgsql_driver.stub.php | 8 ++++---- ext/pdo_pgsql/pgsql_driver_arginfo.h | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c index 2666ae66e146f..d800d65a2df0e 100644 --- a/ext/pdo_pgsql/pgsql_driver.c +++ b/ext/pdo_pgsql/pgsql_driver.c @@ -559,7 +559,7 @@ PHP_METHOD(PDO_PGSql_Ext, pgsqlCopyFromArray) PGresult *pgsql_result; ExecStatusType status; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "sa|sss", + if (zend_parse_parameters(ZEND_NUM_ARGS(), "sa|sss!", &table_name, &table_name_len, &pg_rows, &pg_delim, &pg_delim_len, &pg_null_as, &pg_null_as_len, &pg_fields, &pg_fields_len) == FAILURE) { RETURN_THROWS(); @@ -670,7 +670,7 @@ PHP_METHOD(PDO_PGSql_Ext, pgsqlCopyFromFile) ExecStatusType status; php_stream *stream; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "sp|sss", + if (zend_parse_parameters(ZEND_NUM_ARGS(), "sp|sss!", &table_name, &table_name_len, &filename, &filename_len, &pg_delim, &pg_delim_len, &pg_null_as, &pg_null_as_len, &pg_fields, &pg_fields_len) == FAILURE) { RETURN_THROWS(); @@ -770,7 +770,7 @@ PHP_METHOD(PDO_PGSql_Ext, pgsqlCopyToFile) php_stream *stream; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "sp|sss", + if (zend_parse_parameters(ZEND_NUM_ARGS(), "sp|sss!", &table_name, &table_name_len, &filename, &filename_len, &pg_delim, &pg_delim_len, &pg_null_as, &pg_null_as_len, &pg_fields, &pg_fields_len) == FAILURE) { RETURN_THROWS(); @@ -862,7 +862,7 @@ PHP_METHOD(PDO_PGSql_Ext, pgsqlCopyToArray) PGresult *pgsql_result; ExecStatusType status; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|sss", + if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|sss!", &table_name, &table_name_len, &pg_delim, &pg_delim_len, &pg_null_as, &pg_null_as_len, &pg_fields, &pg_fields_len) == FAILURE) { RETURN_THROWS(); diff --git a/ext/pdo_pgsql/pgsql_driver.stub.php b/ext/pdo_pgsql/pgsql_driver.stub.php index 09907bc61a2be..bf63c5656e2b5 100644 --- a/ext/pdo_pgsql/pgsql_driver.stub.php +++ b/ext/pdo_pgsql/pgsql_driver.stub.php @@ -5,16 +5,16 @@ // These are extension methods for PDO. This is not a real class. class PDO_PGSql_Ext { /** @return bool */ - public function pgsqlCopyFromArray(string $table_name, array $rows, string $delimiter = "\t", string $null_as = "\\\\N", string $fields = UNKNOWN) {} + public function pgsqlCopyFromArray(string $table_name, array $rows, string $delimiter = "\t", string $null_as = "\\\\N", ?string $fields = null) {} /** @return bool */ - public function pgsqlCopyFromFile(string $table_name, string $filename, string $delimiter = "\t", string $null_as = "\\\\N", string $fields = UNKNOWN) {} + public function pgsqlCopyFromFile(string $table_name, string $filename, string $delimiter = "\t", string $null_as = "\\\\N", ?string $fields = null) {} /** @return array|false */ - public function pgsqlCopyToArray(string $table_name, string $delimiter = "\t", string $null_as = "\\\\N", string $fields = UNKNOWN) {} + public function pgsqlCopyToArray(string $table_name, string $delimiter = "\t", string $null_as = "\\\\N", ?string $fields = null) {} /** @return bool */ - public function pgsqlCopyToFile(string $table_name, string $filename, string $delimiter = "\t", string $null_as = "\\\\N", string $fields = UNKNOWN) {} + public function pgsqlCopyToFile(string $table_name, string $filename, string $delimiter = "\t", string $null_as = "\\\\N", ?string $fields = null) {} /** @return string|false */ public function pgsqlLOBCreate() {} diff --git a/ext/pdo_pgsql/pgsql_driver_arginfo.h b/ext/pdo_pgsql/pgsql_driver_arginfo.h index 83e130184561a..0c79009f989a4 100644 --- a/ext/pdo_pgsql/pgsql_driver_arginfo.h +++ b/ext/pdo_pgsql/pgsql_driver_arginfo.h @@ -1,12 +1,12 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 80c3e9c95db8c68ff3a2c2753aa5e9485af9fe4c */ + * Stub hash: 6e5758f2ff93c89f3658aa8f6cfb32a60fd85127 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDO_PGSql_Ext_pgsqlCopyFromArray, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, table_name, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, rows, IS_ARRAY, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, delimiter, IS_STRING, 0, "\"\\t\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, null_as, IS_STRING, 0, "\"\\\\\\\\N\"") - ZEND_ARG_TYPE_INFO(0, fields, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fields, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDO_PGSql_Ext_pgsqlCopyFromFile, 0, 0, 2) @@ -14,14 +14,14 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDO_PGSql_Ext_pgsqlCopyFromFile, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, delimiter, IS_STRING, 0, "\"\\t\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, null_as, IS_STRING, 0, "\"\\\\\\\\N\"") - ZEND_ARG_TYPE_INFO(0, fields, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fields, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDO_PGSql_Ext_pgsqlCopyToArray, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, table_name, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, delimiter, IS_STRING, 0, "\"\\t\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, null_as, IS_STRING, 0, "\"\\\\\\\\N\"") - ZEND_ARG_TYPE_INFO(0, fields, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fields, IS_STRING, 1, "null") ZEND_END_ARG_INFO() #define arginfo_class_PDO_PGSql_Ext_pgsqlCopyToFile arginfo_class_PDO_PGSql_Ext_pgsqlCopyFromFile From d5d31ea3b32a75697bb2c2ee95acedd29ef69708 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Fri, 18 Sep 2020 12:55:58 +0300 Subject: [PATCH 46/67] Cleanup observer API and add JIT support --- Zend/zend_execute_API.c | 4 +- Zend/zend_generators.c | 13 +-- Zend/zend_observer.c | 128 ++++++++++++++++------- Zend/zend_observer.h | 90 +++++----------- Zend/zend_vm_def.h | 22 ++-- Zend/zend_vm_execute.h | 24 ++--- Zend/zend_vm_execute.skl | 4 +- Zend/zend_vm_gen.php | 10 +- ext/opcache/ZendAccelerator.c | 10 -- ext/opcache/jit/zend_jit.c | 1 + ext/opcache/jit/zend_jit_x86.dasc | 19 ++++ ext/zend_test/test.c | 12 +-- ext/zend_test/tests/observer_jit_01.phpt | 25 ----- 13 files changed, 170 insertions(+), 192 deletions(-) delete mode 100644 ext/zend_test/tests/observer_jit_01.phpt diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 030455a94e3a1..7572a0d8900c6 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -891,9 +891,7 @@ zend_result zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_ uint32_t orig_jit_trace_num = EG(jit_trace_num); zend_init_func_execute_data(call, &func->op_array, fci->retval); - if (ZEND_OBSERVER_ENABLED) { - zend_observer_maybe_fcall_call_begin(call); - } + ZEND_OBSERVER_FCALL_BEGIN(call); zend_execute_ex(call); EG(jit_trace_num) = orig_jit_trace_num; EG(opline_before_exception) = current_opline_before_exception; diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index baca12f66b56d..4e2351869d310 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -859,20 +859,11 @@ ZEND_API void zend_generator_resume(zend_generator *orig_generator) /* {{{ */ if (!ZEND_OBSERVER_ENABLED) { zend_execute_ex(generator->execute_data); } else { - zend_op_array *op_array = &generator->execute_data->func->op_array; - void *observer_handlers = ZEND_OBSERVER_HANDLERS(op_array); - if (!observer_handlers) { - zend_observer_fcall_install((zend_function *)op_array); - observer_handlers = ZEND_OBSERVER_HANDLERS(op_array); - } - ZEND_ASSERT(observer_handlers); - if (observer_handlers != ZEND_OBSERVER_NOT_OBSERVED) { - zend_observe_fcall_begin(observer_handlers, generator->execute_data); - } + zend_observer_generator_resume(generator->execute_data); zend_execute_ex(generator->execute_data); if (generator->execute_data) { /* On the final return, this will be called from ZEND_GENERATOR_RETURN */ - zend_observer_maybe_fcall_call_end(generator->execute_data, &generator->value); + zend_observer_fcall_end(generator->execute_data, &generator->value); } } generator->flags &= ~ZEND_GENERATOR_CURRENTLY_RUNNING; diff --git a/Zend/zend_observer.c b/Zend/zend_observer.c index b124de5cc3699..5544039c3e87f 100644 --- a/Zend/zend_observer.c +++ b/Zend/zend_observer.c @@ -23,6 +23,21 @@ #include "zend_llist.h" #include "zend_vm.h" +#define ZEND_OBSERVER_DATA(op_array) \ + ZEND_OP_ARRAY_EXTENSION(op_array, zend_observer_fcall_op_array_extension) + +#define ZEND_OBSERVER_NOT_OBSERVED ((void *) 2) + +#define ZEND_OBSERVABLE_FN(fn_flags) \ + (!(fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE | ZEND_ACC_FAKE_CLOSURE))) + +typedef struct _zend_observer_fcall_data { + // points after the last handler + zend_observer_fcall_handlers *end; + // a variadic array using "struct hack" + zend_observer_fcall_handlers handlers[1]; +} zend_observer_fcall_data; + zend_llist zend_observers_fcall_list; zend_llist zend_observer_error_callbacks; @@ -30,12 +45,6 @@ int zend_observer_fcall_op_array_extension = -1; ZEND_TLS zend_arena *fcall_handlers_arena = NULL; -ZEND_API extern inline void zend_observer_maybe_fcall_call_begin( - zend_execute_data *execute_data); -ZEND_API extern inline void zend_observer_maybe_fcall_call_end( - zend_execute_data *execute_data, - zval *return_value); - // Call during minit/startup ONLY ZEND_API void zend_observer_fcall_register(zend_observer_fcall_init init) { /* We don't want to get an extension handle unless an ext installs an observer */ @@ -80,7 +89,7 @@ ZEND_API void zend_observer_shutdown(void) { zend_llist_destroy(&zend_observer_error_callbacks); } -ZEND_API void zend_observer_fcall_install(zend_function *function) { +static void zend_observer_fcall_install(zend_function *function) { zend_llist_element *element; zend_llist *list = &zend_observers_fcall_list; zend_op_array *op_array = &function->op_array; @@ -92,11 +101,11 @@ ZEND_API void zend_observer_fcall_install(zend_function *function) { ZEND_ASSERT(function->type != ZEND_INTERNAL_FUNCTION); zend_llist handlers_list; - zend_llist_init(&handlers_list, sizeof(zend_observer_fcall), NULL, 0); + zend_llist_init(&handlers_list, sizeof(zend_observer_fcall_handlers), NULL, 0); for (element = list->head; element; element = element->next) { zend_observer_fcall_init init; memcpy(&init, element->data, sizeof init); - zend_observer_fcall handlers = init(function); + zend_observer_fcall_handlers handlers = init(function); if (handlers.begin || handlers.end) { zend_llist_add_element(&handlers_list, &handlers); } @@ -105,58 +114,97 @@ ZEND_API void zend_observer_fcall_install(zend_function *function) { ZEND_ASSERT(RUN_TIME_CACHE(op_array)); void *ext; if (handlers_list.count) { - size_t size = sizeof(zend_observer_fcall_cache) + (handlers_list.count - 1) * sizeof(zend_observer_fcall); - zend_observer_fcall_cache *cache = zend_arena_alloc(&fcall_handlers_arena, size); - zend_observer_fcall *handler = cache->handlers; + size_t size = sizeof(zend_observer_fcall_data) + (handlers_list.count - 1) * sizeof(zend_observer_fcall_handlers); + zend_observer_fcall_data *fcall_data = zend_arena_alloc(&fcall_handlers_arena, size); + zend_observer_fcall_handlers *handlers = fcall_data->handlers; for (element = handlers_list.head; element; element = element->next) { - memcpy(handler++, element->data, sizeof *handler); + memcpy(handlers++, element->data, sizeof *handlers); } - cache->end = handler; - ext = cache; + fcall_data->end = handlers; + ext = fcall_data; } else { ext = ZEND_OBSERVER_NOT_OBSERVED; } - ZEND_OBSERVER_HANDLERS(op_array) = ext; + ZEND_OBSERVER_DATA(op_array) = ext; zend_llist_destroy(&handlers_list); } -ZEND_API void zend_observe_fcall_begin( - zend_observer_fcall_cache *cache, - zend_execute_data *execute_data) +static void ZEND_FASTCALL _zend_observe_fcall_begin(zend_execute_data *execute_data) { - zend_observer_fcall *handler, *end = cache->end; - for (handler = cache->handlers; handler != end; ++handler) { - if (handler->begin) { - handler->begin(execute_data); + zend_op_array *op_array; + uint32_t fn_flags; + zend_observer_fcall_data *fcall_data; + zend_observer_fcall_handlers *handlers, *end; + + if (!ZEND_OBSERVER_ENABLED) { + return; + } + + op_array = &execute_data->func->op_array; + fn_flags = op_array->fn_flags; + + if (!ZEND_OBSERVABLE_FN(fn_flags)) { + return; + } + + fcall_data = ZEND_OBSERVER_DATA(op_array); + if (!fcall_data) { + zend_observer_fcall_install((zend_function *)op_array); + fcall_data = ZEND_OBSERVER_DATA(op_array); + } + + ZEND_ASSERT(fcall_data); + if (fcall_data == ZEND_OBSERVER_NOT_OBSERVED) { + return; + } + + end = fcall_data->end; + for (handlers = fcall_data->handlers; handlers != end; ++handlers) { + if (handlers->begin) { + handlers->begin(execute_data); } } } -ZEND_API void zend_observer_fcall_call_end_helper( - zend_execute_data *execute_data, - zval *return_value) +ZEND_API void ZEND_FASTCALL zend_observer_generator_resume(zend_execute_data *execute_data) { - zend_function *func = execute_data->func; - ZEND_ASSUME(ZEND_OBSERVABLE_FN(func->common.fn_flags)); - void *observer_handlers = ZEND_OBSERVER_HANDLERS(&func->op_array); - // TODO: Fix exceptions from generators - // ZEND_ASSERT(observer_handlers); - if (observer_handlers && observer_handlers != ZEND_OBSERVER_NOT_OBSERVED) { - zend_observer_fcall_cache *cache = observer_handlers; - zend_observe_fcall_end(cache, execute_data, return_value); + _zend_observe_fcall_begin(execute_data); +} + +ZEND_API void ZEND_FASTCALL zend_observer_fcall_begin(zend_execute_data *execute_data) +{ + ZEND_ASSUME(execute_data->func); + if (!(execute_data->func->common.fn_flags & ZEND_ACC_GENERATOR)) { + _zend_observe_fcall_begin(execute_data); } } -ZEND_API void zend_observe_fcall_end( - zend_observer_fcall_cache *cache, +ZEND_API void ZEND_FASTCALL zend_observer_fcall_end( zend_execute_data *execute_data, zval *return_value) { - zend_observer_fcall *handler = cache->end, *end = cache->handlers; - while (handler-- != end) { - if (handler->end) { - handler->end(execute_data, return_value); + zend_function *func = execute_data->func; + zend_observer_fcall_data *fcall_data; + zend_observer_fcall_handlers *handlers, *end; + + if (!ZEND_OBSERVER_ENABLED + || !ZEND_OBSERVABLE_FN(func->common.fn_flags)) { + return; + } + + fcall_data = (zend_observer_fcall_data*)ZEND_OBSERVER_DATA(&func->op_array); + // TODO: Fix exceptions from generators + // ZEND_ASSERT(fcall_data); + if (!fcall_data || fcall_data == ZEND_OBSERVER_NOT_OBSERVED) { + return; + } + + handlers = fcall_data->end; + end = fcall_data->handlers; + while (handlers-- != end) { + if (handlers->end) { + handlers->end(execute_data, return_value); } } } diff --git a/Zend/zend_observer.h b/Zend/zend_observer.h index 0603591c53957..246a3a61be379 100644 --- a/Zend/zend_observer.h +++ b/Zend/zend_observer.h @@ -29,87 +29,47 @@ extern ZEND_API int zend_observer_fcall_op_array_extension; #define ZEND_OBSERVER_ENABLED (zend_observer_fcall_op_array_extension != -1) -#define ZEND_OBSERVER_HANDLERS(op_array) \ - ZEND_OP_ARRAY_EXTENSION(op_array, zend_observer_fcall_op_array_extension) - -#define ZEND_OBSERVER_NOT_OBSERVED ((void *) 2) - -#define ZEND_OBSERVABLE_FN(fn_flags) \ - (ZEND_OBSERVER_ENABLED && \ - !(fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE | ZEND_ACC_FAKE_CLOSURE))) - -struct zend_observer_fcall { - void (*begin)(zend_execute_data *execute_data); - void (*end)(zend_execute_data *execute_data, zval *retval); -}; -typedef struct zend_observer_fcall zend_observer_fcall; - -struct zend_observer_fcall_cache { - // points after the last handler - zend_observer_fcall *end; - // a variadic array using "struct hack" - zend_observer_fcall handlers[1]; -}; -typedef struct zend_observer_fcall_cache zend_observer_fcall_cache; +#define ZEND_OBSERVER_FCALL_BEGIN(execute_data) do { \ + if (ZEND_OBSERVER_ENABLED) { \ + zend_observer_fcall_begin(execute_data); \ + } \ + } while (0) + +#define ZEND_OBSERVER_FCALL_END(execute_data, return_value) do { \ + if (ZEND_OBSERVER_ENABLED) { \ + zend_observer_fcall_end(execute_data, return_value); \ + } \ + } while (0) + +typedef void (*zend_observer_fcall_begin_handler)(zend_execute_data *execute_data); +typedef void (*zend_observer_fcall_end_handler)(zend_execute_data *execute_data, zval *retval); + +typedef struct _zend_observer_fcall_handlers { + zend_observer_fcall_begin_handler begin; + zend_observer_fcall_end_handler end; +} zend_observer_fcall_handlers; /* If the fn should not be observed then return {NULL, NULL} */ -typedef zend_observer_fcall(*zend_observer_fcall_init)(zend_function *func); +typedef zend_observer_fcall_handlers (*zend_observer_fcall_init)(zend_function *func); // Call during minit/startup ONLY -ZEND_API void zend_observer_fcall_register(zend_observer_fcall_init init); +ZEND_API void zend_observer_fcall_register(zend_observer_fcall_init); ZEND_API void zend_observer_startup(void); // Called by engine before MINITs ZEND_API void zend_observer_activate(void); ZEND_API void zend_observer_deactivate(void); ZEND_API void zend_observer_shutdown(void); -ZEND_API void zend_observer_fcall_install(zend_function *function); - -ZEND_API void zend_observe_fcall_begin( - zend_observer_fcall_cache *cache, +ZEND_API void ZEND_FASTCALL zend_observer_fcall_begin( zend_execute_data *execute_data); -ZEND_API void zend_observe_fcall_end( - zend_observer_fcall_cache *cache, - zend_execute_data *execute_data, - zval *return_value); +ZEND_API void ZEND_FASTCALL zend_observer_generator_resume( + zend_execute_data *execute_data); -ZEND_API void zend_observer_fcall_call_end_helper( +ZEND_API void ZEND_FASTCALL zend_observer_fcall_end( zend_execute_data *execute_data, zval *return_value); -ZEND_API zend_always_inline void zend_observer_maybe_fcall_call_begin( - zend_execute_data *execute_data) -{ - ZEND_ASSUME(execute_data->func); - zend_op_array *op_array = &execute_data->func->op_array; - uint32_t fn_flags = op_array->fn_flags; - if (ZEND_OBSERVABLE_FN(fn_flags) && !(fn_flags & ZEND_ACC_GENERATOR)) { - void *observer_handlers = ZEND_OBSERVER_HANDLERS(op_array); - if (!observer_handlers) { - zend_observer_fcall_install((zend_function *)op_array); - observer_handlers = ZEND_OBSERVER_HANDLERS(op_array); - } - - ZEND_ASSERT(observer_handlers); - if (observer_handlers != ZEND_OBSERVER_NOT_OBSERVED) { - zend_observe_fcall_begin( - (zend_observer_fcall_cache *)observer_handlers, - execute_data); - } - } -} - -ZEND_API zend_always_inline void zend_observer_maybe_fcall_call_end( - zend_execute_data *execute_data, - zval *return_value) -{ - zend_function *func = execute_data->func; - if (ZEND_OBSERVABLE_FN(func->common.fn_flags)) { - zend_observer_fcall_call_end_helper(execute_data, return_value); - } -} - typedef void (*zend_observer_error_cb)(int type, const char *error_filename, uint32_t error_lineno, zend_string *message); ZEND_API void zend_observer_error_register(zend_observer_error_cb callback); diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 6af78eb3ae178..510595b7c8668 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -3956,7 +3956,7 @@ ZEND_VM_HOT_HANDLER(130, ZEND_DO_UCALL, ANY, ANY, SPEC(RETVAL,OBSERVER)) call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - OBSERVER_FCALL_BEGIN_HANDLERS(execute_data); + ZEND_OBSERVER_FCALL_BEGIN(execute_data); LOAD_OPLINE_EX(); ZEND_VM_ENTER_EX(); @@ -3981,14 +3981,14 @@ ZEND_VM_HOT_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL,OBSERVER)) call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - OBSERVER_FCALL_BEGIN_HANDLERS(execute_data); + ZEND_OBSERVER_FCALL_BEGIN(execute_data); LOAD_OPLINE_EX(); ZEND_VM_ENTER_EX(); } else { zval retval; ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); - if (IS_OBSERVER) { + if (ZEND_OBSERVER_ENABLED) { ret = NULL; } @@ -4075,7 +4075,7 @@ ZEND_VM_HOT_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL,OBSERVER)) call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC); - OBSERVER_FCALL_BEGIN_HANDLERS(execute_data); + ZEND_OBSERVER_FCALL_BEGIN(execute_data); if (EXPECTED(zend_execute_ex == execute_ex)) { LOAD_OPLINE_EX(); @@ -4090,7 +4090,7 @@ ZEND_VM_HOT_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL,OBSERVER)) } else { zval retval; ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); - if (IS_OBSERVER) { + if (ZEND_OBSERVER_ENABLED) { ret = NULL; } @@ -4296,7 +4296,7 @@ ZEND_VM_INLINE_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY, SPEC(OBSERVER)) } } } - OBSERVER_FCALL_END_HANDLERS(execute_data, return_value); + ZEND_OBSERVER_FCALL_END(execute_data, return_value); ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper); } @@ -4357,7 +4357,7 @@ ZEND_VM_COLD_CONST_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY, SRC, FREE_OP1_VAR_PTR(); } while (0); - OBSERVER_FCALL_END_HANDLERS(execute_data, EX(return_value)); + ZEND_OBSERVER_FCALL_END(execute_data, EX(return_value)); ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper); } @@ -4473,7 +4473,7 @@ ZEND_VM_HANDLER(161, ZEND_GENERATOR_RETURN, CONST|TMP|VAR|CV, ANY, SPEC(OBSERVER } } - OBSERVER_FCALL_END_HANDLERS(generator->execute_data, &generator->retval); + ZEND_OBSERVER_FCALL_END(generator->execute_data, &generator->retval); /* Close the generator to free up resources */ zend_generator_close(generator, 1); @@ -6191,7 +6191,7 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY, EVAL, SPEC(OBSER call->prev_execute_data = execute_data; i_init_code_execute_data(call, new_op_array, return_value); - OBSERVER_FCALL_BEGIN_HANDLERS(call); + ZEND_OBSERVER_FCALL_BEGIN(call); if (EXPECTED(zend_execute_ex == execute_ex)) { FREE_OP1(); ZEND_VM_ENTER(); @@ -7731,7 +7731,7 @@ ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY, SPEC(OBSERVER)) } } - OBSERVER_FCALL_END_HANDLERS(execute_data, EX(return_value)); + ZEND_OBSERVER_FCALL_END(execute_data, EX(return_value)); cleanup_unfinished_calls(execute_data, throw_op_num); if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) { @@ -8493,7 +8493,7 @@ ZEND_VM_HANDLER(158, ZEND_CALL_TRAMPOLINE, ANY, ANY, SPEC(OBSERVER)) } execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - OBSERVER_FCALL_BEGIN_HANDLERS(execute_data); + ZEND_OBSERVER_FCALL_BEGIN(execute_data); if (EXPECTED(zend_execute_ex == execute_ex)) { LOAD_OPLINE_EX(); ZEND_VM_ENTER_EX(); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index a6feaf02e0caa..f59c923bd1613 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -1398,7 +1398,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_OBS call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - zend_observer_maybe_fcall_call_begin(execute_data); + zend_observer_fcall_begin(execute_data); LOAD_OPLINE_EX(); ZEND_VM_ENTER_EX(); @@ -1611,7 +1611,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_ call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - zend_observer_maybe_fcall_call_begin(execute_data); + zend_observer_fcall_begin(execute_data); LOAD_OPLINE_EX(); ZEND_VM_ENTER_EX(); @@ -1915,7 +1915,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_OBS call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC); - zend_observer_maybe_fcall_call_begin(execute_data); + zend_observer_fcall_begin(execute_data); if (EXPECTED(zend_execute_ex == execute_ex)) { LOAD_OPLINE_EX(); @@ -2991,7 +2991,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_OBSERVER } } - zend_observer_maybe_fcall_call_end(execute_data, EX(return_value)); + zend_observer_fcall_end(execute_data, EX(return_value)); cleanup_unfinished_calls(execute_data, throw_op_num); if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) { @@ -3322,7 +3322,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_ } execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - zend_observer_maybe_fcall_call_begin(execute_data); + zend_observer_fcall_begin(execute_data); if (EXPECTED(zend_execute_ex == execute_ex)) { LOAD_OPLINE_EX(); ZEND_VM_ENTER_EX(); @@ -4193,7 +4193,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_OBSER } } } - zend_observer_maybe_fcall_call_end(execute_data, return_value); + zend_observer_fcall_end(execute_data, return_value); ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } @@ -4313,7 +4313,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPE if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));}; } while (0); - zend_observer_maybe_fcall_call_end(execute_data, EX(return_value)); + zend_observer_fcall_end(execute_data, EX(return_value)); ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } @@ -4396,7 +4396,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_OBSERVER } } - zend_observer_maybe_fcall_call_end(generator->execute_data, &generator->retval); + zend_observer_fcall_end(generator->execute_data, &generator->retval); /* Close the generator to free up resources */ zend_generator_close(generator, 1); @@ -4800,7 +4800,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_ call->prev_execute_data = execute_data; i_init_code_execute_data(call, new_op_array, return_value); - zend_observer_maybe_fcall_call_begin(call); + zend_observer_fcall_begin(call); if (EXPECTED(zend_execute_ex == execute_ex)) { FREE_OP(opline->op1_type, opline->op1.var); ZEND_VM_ENTER(); @@ -54806,7 +54806,7 @@ ZEND_API void execute_ex(zend_execute_data *ex) } } } - zend_observer_maybe_fcall_call_end(execute_data, return_value); + zend_observer_fcall_end(execute_data, return_value); goto zend_leave_helper_SPEC_LABEL; } @@ -58782,9 +58782,7 @@ ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value) } EX(prev_execute_data) = EG(current_execute_data); i_init_code_execute_data(execute_data, op_array, return_value); - if (ZEND_OBSERVER_ENABLED) { - zend_observer_maybe_fcall_call_begin(execute_data); - } + ZEND_OBSERVER_FCALL_BEGIN(execute_data); zend_execute_ex(execute_data); /* Observer end handlers are called from ZEND_RETURN */ zend_vm_stack_free_call_frame(execute_data); diff --git a/Zend/zend_vm_execute.skl b/Zend/zend_vm_execute.skl index 22911760e43e1..582ec490e2d77 100644 --- a/Zend/zend_vm_execute.skl +++ b/Zend/zend_vm_execute.skl @@ -55,9 +55,7 @@ ZEND_API void zend_{%EXECUTOR_NAME%}(zend_op_array *op_array, zval *return_value } EX(prev_execute_data) = EG(current_execute_data); i_init_code_execute_data(execute_data, op_array, return_value); - if (ZEND_OBSERVER_ENABLED) { - zend_observer_maybe_fcall_call_begin(execute_data); - } + ZEND_OBSERVER_FCALL_BEGIN(execute_data); zend_{%EXECUTOR_NAME%}_ex(execute_data); /* Observer end handlers are called from ZEND_RETURN */ zend_vm_stack_free_call_frame(execute_data); diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php index e3dceaa829a1e..3346a59cfa620 100755 --- a/Zend/zend_vm_gen.php +++ b/Zend/zend_vm_gen.php @@ -793,12 +793,12 @@ function gen_code($f, $spec, $kind, $code, $op1, $op2, $name, $extra_spec=null) "/opline->extended_value\s*&\s*~\s*ZEND_ISEMPTY/" => isset($extra_spec['ISSET']) ? ($extra_spec['ISSET'] == 0 ? "\\0" : "opline->extended_value") : "\\0", - "/IS_OBSERVER/" => isset($extra_spec['OBSERVER']) && $extra_spec['OBSERVER'] == 1 ? "1" : "0", - "/OBSERVER_FCALL_BEGIN_HANDLERS\(\s*(.*)\s*\)/" => isset($extra_spec['OBSERVER']) ? - ($extra_spec['OBSERVER'] == 0 ? "" : "zend_observer_maybe_fcall_call_begin(\\1)") + "/ZEND_OBSERVER_ENABLED/" => isset($extra_spec['OBSERVER']) && $extra_spec['OBSERVER'] == 1 ? "1" : "0", + "/ZEND_OBSERVER_FCALL_BEGIN\(\s*(.*)\s*\)/" => isset($extra_spec['OBSERVER']) ? + ($extra_spec['OBSERVER'] == 0 ? "" : "zend_observer_fcall_begin(\\1)") : "", - "/OBSERVER_FCALL_END_HANDLERS\(\s*([^,]*)\s*,\s*(.*)\s*\)/" => isset($extra_spec['OBSERVER']) ? - ($extra_spec['OBSERVER'] == 0 ? "" : "zend_observer_maybe_fcall_call_end(\\1, \\2)") + "/ZEND_OBSERVER_FCALL_END\(\s*([^,]*)\s*,\s*(.*)\s*\)/" => isset($extra_spec['OBSERVER']) ? + ($extra_spec['OBSERVER'] == 0 ? "" : "zend_observer_fcall_end(\\1, \\2)") : "", ); $code = preg_replace(array_keys($specialized_replacements), array_values($specialized_replacements), $code); diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index 46363acb7b2e1..71af3203dca38 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -44,7 +44,6 @@ #include "zend_accelerator_util_funcs.h" #include "zend_accelerator_hash.h" #include "zend_file_cache.h" -#include "zend_observer.h" #include "ext/pcre/php_pcre.h" #include "ext/standard/md5.h" #include "ext/hash/php_hash.h" @@ -2998,15 +2997,6 @@ static zend_result accel_post_startup(void) } } -#ifdef HAVE_JIT - /* TODO Observer support for JIT */ - if (ZEND_OBSERVER_ENABLED) { - JIT_G(enabled) = 0; - JIT_G(on) = 0; - zend_accel_error(ACCEL_LOG_INFO, "Observer extension present. Disabling JIT."); - } -#endif - /* Initialize zend_func_info_rid */ zend_optimizer_startup(); diff --git a/ext/opcache/jit/zend_jit.c b/ext/opcache/jit/zend_jit.c index 3dad8e4f91115..094f4d56d6d34 100644 --- a/ext/opcache/jit/zend_jit.c +++ b/ext/opcache/jit/zend_jit.c @@ -24,6 +24,7 @@ #include "Zend/zend_constants.h" #include "Zend/zend_closures.h" #include "Zend/zend_ini.h" +#include "Zend/zend_observer.h" #include "zend_smart_str.h" #include "jit/zend_jit.h" diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index daff6fb641dff..c689359272ede 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -9689,6 +9689,10 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend if (!trace && op_array == &func->op_array) { /* recursive call */ + if (ZEND_OBSERVER_ENABLED) { + | mov FCARG1a, FP + | EXT_CALL zend_observer_fcall_begin, r0 + } #ifdef CONTEXT_THREADED_JIT | call >1 |.cold_code @@ -9793,6 +9797,11 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend |3: } + if (ZEND_OBSERVER_ENABLED) { + | mov FCARG1a, FP + | EXT_CALL zend_observer_fcall_begin, r0 + } + if (trace) { if (!func && (opline->opcode != ZEND_DO_UCALL)) { | jmp >9 @@ -11170,6 +11179,11 @@ static int zend_jit_return(dasm_State **Dst, const zend_op *opline, const zend_o if (return_value_used == 0) { |9: + if (ZEND_OBSERVER_ENABLED) { + | xor FCARG2a, FCARG2a + | mov FCARG1a, FP + | EXT_CALL zend_observer_fcall_end, r0 + } return 1; } @@ -11232,6 +11246,11 @@ static int zend_jit_return(dasm_State **Dst, const zend_op *opline, const zend_o } |9: + if (ZEND_OBSERVER_ENABLED) { + | LOAD_ZVAL_ADDR FCARG2a, ret_addr + | mov FCARG1a, FP + | EXT_CALL zend_observer_fcall_end, r0 + } return 1; } diff --git a/ext/zend_test/test.c b/ext/zend_test/test.c index 0e4040d1bd845..4ca98a3c0831b 100644 --- a/ext/zend_test/test.c +++ b/ext/zend_test/test.c @@ -317,7 +317,7 @@ PHP_INI_BEGIN() STD_PHP_INI_BOOLEAN("zend_test.observer.show_return_value", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_show_return_value, zend_zend_test_globals, zend_test_globals) PHP_INI_END() -static zend_observer_fcall observer_fcall_init(zend_function *fbc); +static zend_observer_fcall_handlers observer_fcall_init(zend_function *fbc); PHP_MINIT_FUNCTION(zend_test) { @@ -498,20 +498,20 @@ static void observer_show_init(zend_function *fbc) } } -static zend_observer_fcall observer_fcall_init(zend_function *fbc) +static zend_observer_fcall_handlers observer_fcall_init(zend_function *fbc) { if (ZT_G(observer_show_output)) { observer_show_init(fbc); } if (ZT_G(observer_observe_all)) { - return (zend_observer_fcall){observer_begin, observer_end}; + return (zend_observer_fcall_handlers){observer_begin, observer_end}; } else if (ZT_G(observer_observe_includes) && !fbc->common.function_name) { - return (zend_observer_fcall){observer_begin, observer_end}; + return (zend_observer_fcall_handlers){observer_begin, observer_end}; } else if (ZT_G(observer_observe_functions) && fbc->common.function_name) { - return (zend_observer_fcall){observer_begin, observer_end}; + return (zend_observer_fcall_handlers){observer_begin, observer_end}; } - return (zend_observer_fcall){NULL, NULL}; + return (zend_observer_fcall_handlers){NULL, NULL}; } PHP_RINIT_FUNCTION(zend_test) diff --git a/ext/zend_test/tests/observer_jit_01.phpt b/ext/zend_test/tests/observer_jit_01.phpt deleted file mode 100644 index f489986b6e79b..0000000000000 --- a/ext/zend_test/tests/observer_jit_01.phpt +++ /dev/null @@ -1,25 +0,0 @@ ---TEST-- -Observer: JIT is disabled when observer extension is present ---SKIPIF-- - - - ---INI-- -zend_test.observer.enabled=1 -zend_test.observer.observe_all=1 -opcache.enable=1 -opcache.enable_cli=1 -opcache.jit=1 -opcache.jit_buffer_size=1M ---FILE-- - ---EXPECTF-- - - -JIT enabled: no -JIT on: no - From c7ceebc42cd6912a7f515f8e6f5b3167bea37881 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Tue, 15 Sep 2020 19:14:57 +0200 Subject: [PATCH 47/67] Bug #80107 Add test for mysqli_query() fails for ~16 MB long query when compression is enabled --- ...mysqli_real_connect_compression_error.phpt | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 ext/mysqli/tests/mysqli_real_connect_compression_error.phpt diff --git a/ext/mysqli/tests/mysqli_real_connect_compression_error.phpt b/ext/mysqli/tests/mysqli_real_connect_compression_error.phpt new file mode 100644 index 0000000000000..114f819edca10 --- /dev/null +++ b/ext/mysqli/tests/mysqli_real_connect_compression_error.phpt @@ -0,0 +1,51 @@ +--TEST-- +Bug #80107 mysqli_query() fails for ~16 MB long query when compression is enabled +--XFAIL-- +The second INSERT query fails with MySQL server has gone away +--SKIPIF-- + +--INI-- +mysqli.allow_local_infile=1 +--FILE-- +query("DROP TABLE IF EXISTS test"); +$mysqli->query("CREATE TABLE test (`blob` LONGBLOB NOT NULL)"); + +$data = str_repeat("x", 16777174); +$mysqli->query("INSERT INTO $db.test(`blob`) VALUE ('$data')"); + +var_dump(mysqli_error_list($mysqli)); +$mysqli->close(); + +// Insert with compression enabled: + +$mysqli = mysqli_init(); +$result = my_mysqli_real_connect($mysqli, $host, $user, $passwd, $db, $port, $socket, MYSQLI_CLIENT_COMPRESS); + +$data = str_repeat("x", 16777174); +$mysqli->query("INSERT INTO $db.test(`blob`) VALUE ('$data')"); + +var_dump(mysqli_error_list($mysqli)); +$mysqli->close(); + +?> +--CLEAN-- + +--EXPECT-- +array(0) { +} +array(0) { +} From ecd9c42f9e54b53ea6917b2a28ae9e5a2c89c2fe Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 16 Sep 2020 16:18:29 +0200 Subject: [PATCH 48/67] Fix bug #80107: Handling of large compressed packets There's two layers of packet splitting going on. First, packets need to be split into having a payload of exactly 2^24-1 bytes or being the last packet. If the split packet has size between 2^24-5 and 2^24-1 bytes, the compressed packets also needs to be split, though the choice of split doesn't matter here. I'm splitting off the first 8192 bytes, as that's what I observe libmysqlclient to be doing. --- NEWS | 2 + ...mysqli_real_connect_compression_error.phpt | 22 ++-- ext/mysqlnd/mysqlnd_protocol_frame_codec.c | 105 +++++++++++------- 3 files changed, 81 insertions(+), 48 deletions(-) diff --git a/NEWS b/NEWS index 9d3d53aca1077..fe2bae3803352 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,8 @@ PHP NEWS - MySQLnd: . Fixed bug #80115 (mysqlnd.debug doesn't recognize absolute paths with slashes). (cmb) + . Fixed bug #80107 (mysqli_query() fails for ~16 MB long query when + compression is enabled). (Nikita) - OPcache: . Fixed bug #80083 (Optimizer pass 6 removes variables used for ibm_db2 data diff --git a/ext/mysqli/tests/mysqli_real_connect_compression_error.phpt b/ext/mysqli/tests/mysqli_real_connect_compression_error.phpt index 114f819edca10..df0e4dc73bd38 100644 --- a/ext/mysqli/tests/mysqli_real_connect_compression_error.phpt +++ b/ext/mysqli/tests/mysqli_real_connect_compression_error.phpt @@ -1,19 +1,25 @@ --TEST-- Bug #80107 mysqli_query() fails for ~16 MB long query when compression is enabled ---XFAIL-- -The second INSERT query fails with MySQL server has gone away --SKIPIF-- query("SHOW VARIABLES LIKE 'max_allowed_packet'"); +if ($result->fetch_assoc()['Value'] < 0xffffff) { + die('skip max_allowed_packet is less than 0xffffff'); +} ?> ---INI-- -mysqli.allow_local_infile=1 --FILE-- query("DROP TABLE IF EXISTS test"); $mysqli->query("CREATE TABLE test (`blob` LONGBLOB NOT NULL)"); -$data = str_repeat("x", 16777174); +$data = str_repeat("x", $data_size); $mysqli->query("INSERT INTO $db.test(`blob`) VALUE ('$data')"); var_dump(mysqli_error_list($mysqli)); @@ -33,7 +39,7 @@ $mysqli->close(); $mysqli = mysqli_init(); $result = my_mysqli_real_connect($mysqli, $host, $user, $passwd, $db, $port, $socket, MYSQLI_CLIENT_COMPRESS); -$data = str_repeat("x", 16777174); +$data = str_repeat("x", $data_size); $mysqli->query("INSERT INTO $db.test(`blob`) VALUE ('$data')"); var_dump(mysqli_error_list($mysqli)); diff --git a/ext/mysqlnd/mysqlnd_protocol_frame_codec.c b/ext/mysqlnd/mysqlnd_protocol_frame_codec.c index 4f84c02c5dc8d..7b18402be1c5d 100644 --- a/ext/mysqlnd/mysqlnd_protocol_frame_codec.c +++ b/ext/mysqlnd/mysqlnd_protocol_frame_codec.c @@ -50,6 +50,57 @@ MYSQLND_METHOD(mysqlnd_pfc, reset)(MYSQLND_PFC * const pfc, MYSQLND_STATS * cons #define STORE_HEADER_SIZE(safe_storage, buffer) COPY_HEADER((safe_storage), (buffer)) #define RESTORE_HEADER_SIZE(buffer, safe_storage) STORE_HEADER_SIZE((safe_storage), (buffer)) +#ifdef MYSQLND_COMPRESSION_ENABLED +static size_t write_compressed_packet( + const MYSQLND_PFC *pfc, MYSQLND_VIO *vio, + MYSQLND_STATS *conn_stats, MYSQLND_ERROR_INFO *error_info, + zend_uchar *uncompressed_payload, size_t to_be_sent, zend_uchar *compress_buf) { + DBG_ENTER("write_compressed_packet"); + /* here we need to compress the data and then write it, first comes the compressed header */ + size_t tmp_complen = to_be_sent; + size_t payload_size; + if (PASS == pfc->data->m.encode((compress_buf + COMPRESSED_HEADER_SIZE + MYSQLND_HEADER_SIZE), &tmp_complen, + uncompressed_payload, to_be_sent)) + { + int3store(compress_buf + MYSQLND_HEADER_SIZE, to_be_sent); + payload_size = tmp_complen; + } else { + int3store(compress_buf + MYSQLND_HEADER_SIZE, 0); + memcpy(compress_buf + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE, uncompressed_payload, to_be_sent); + payload_size = to_be_sent; + } + + int3store(compress_buf, payload_size); + int1store(compress_buf + 3, pfc->data->compressed_envelope_packet_no); + DBG_INF_FMT("writing "MYSQLND_SZ_T_SPEC" bytes to the network", payload_size + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE); + + size_t bytes_sent = vio->data->m.network_write(vio, compress_buf, payload_size + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE, conn_stats, error_info); + pfc->data->compressed_envelope_packet_no++; +#ifdef WHEN_WE_NEED_TO_CHECK_WHETHER_COMPRESSION_WORKS_CORRECTLY + if (res == Z_OK) { + size_t decompressed_size = left + MYSQLND_HEADER_SIZE; + zend_uchar * decompressed_data = mnd_malloc(decompressed_size); + int error = pfc->data->m.decode(decompressed_data, decompressed_size, + compress_buf + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE, payload_size); + if (error == Z_OK) { + int i; + DBG_INF("success decompressing"); + for (i = 0 ; i < decompressed_size; i++) { + if (i && (i % 30 == 0)) { + printf("\n\t\t"); + } + printf("%.2X ", (int)*((char*)&(decompressed_data[i]))); + DBG_INF_FMT("%.2X ", (int)*((char*)&(decompressed_data[i]))); + } + } else { + DBG_INF("error decompressing"); + } + mnd_free(decompressed_data); + } +#endif /* WHEN_WE_NEED_TO_CHECK_WHETHER_COMPRESSION_WORKS_CORRECTLY */ + DBG_RETURN(bytes_sent); +} +#endif /* {{{ mysqlnd_pfc::send */ /* @@ -91,53 +142,27 @@ MYSQLND_METHOD(mysqlnd_pfc, send)(MYSQLND_PFC * const pfc, MYSQLND_VIO * const v DBG_INF_FMT("packet_no=%u", pfc->data->packet_no); #ifdef MYSQLND_COMPRESSION_ENABLED if (pfc->data->compressed == TRUE) { - /* here we need to compress the data and then write it, first comes the compressed header */ - size_t tmp_complen = to_be_sent; - size_t payload_size; zend_uchar * uncompressed_payload = p; /* should include the header */ - STORE_HEADER_SIZE(safe_storage, uncompressed_payload); int3store(uncompressed_payload, to_be_sent); int1store(uncompressed_payload + 3, pfc->data->packet_no); - if (PASS == pfc->data->m.encode((compress_buf + COMPRESSED_HEADER_SIZE + MYSQLND_HEADER_SIZE), &tmp_complen, - uncompressed_payload, to_be_sent + MYSQLND_HEADER_SIZE)) - { - int3store(compress_buf + MYSQLND_HEADER_SIZE, to_be_sent + MYSQLND_HEADER_SIZE); - payload_size = tmp_complen; + if (to_be_sent <= MYSQLND_MAX_PACKET_SIZE - MYSQLND_HEADER_SIZE) { + bytes_sent = write_compressed_packet( + pfc, vio, conn_stats, error_info, + uncompressed_payload, to_be_sent + MYSQLND_HEADER_SIZE, compress_buf); } else { - int3store(compress_buf + MYSQLND_HEADER_SIZE, 0); - memcpy(compress_buf + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE, uncompressed_payload, to_be_sent + MYSQLND_HEADER_SIZE); - payload_size = to_be_sent + MYSQLND_HEADER_SIZE; + /* The uncompressed size including the header would overflow. Split into two + * compressed packets. The size of the first one is relatively arbitrary here. */ + const size_t split_off_bytes = 8192; + bytes_sent = write_compressed_packet( + pfc, vio, conn_stats, error_info, + uncompressed_payload, split_off_bytes, compress_buf); + bytes_sent = write_compressed_packet( + pfc, vio, conn_stats, error_info, + uncompressed_payload + split_off_bytes, + to_be_sent + MYSQLND_HEADER_SIZE - split_off_bytes, compress_buf); } RESTORE_HEADER_SIZE(uncompressed_payload, safe_storage); - - int3store(compress_buf, payload_size); - int1store(compress_buf + 3, pfc->data->packet_no); - DBG_INF_FMT("writing "MYSQLND_SZ_T_SPEC" bytes to the network", payload_size + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE); - bytes_sent = vio->data->m.network_write(vio, compress_buf, payload_size + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE, conn_stats, error_info); - pfc->data->compressed_envelope_packet_no++; - #if WHEN_WE_NEED_TO_CHECK_WHETHER_COMPRESSION_WORKS_CORRECTLY - if (res == Z_OK) { - size_t decompressed_size = left + MYSQLND_HEADER_SIZE; - zend_uchar * decompressed_data = mnd_malloc(decompressed_size); - int error = pfc->data->m.decode(decompressed_data, decompressed_size, - compress_buf + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE, payload_size); - if (error == Z_OK) { - int i; - DBG_INF("success decompressing"); - for (i = 0 ; i < decompressed_size; i++) { - if (i && (i % 30 == 0)) { - printf("\n\t\t"); - } - printf("%.2X ", (int)*((char*)&(decompressed_data[i]))); - DBG_INF_FMT("%.2X ", (int)*((char*)&(decompressed_data[i]))); - } - } else { - DBG_INF("error decompressing"); - } - mnd_free(decompressed_data); - } - #endif /* WHEN_WE_NEED_TO_CHECK_WHETHER_COMPRESSION_WORKS_CORRECTLY */ } else #endif /* MYSQLND_COMPRESSION_ENABLED */ { From bfceb710becab71d7d561d64667be4c9668b6a9c Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 18 Sep 2020 12:17:07 +0200 Subject: [PATCH 49/67] Apply tidy to SKIPIF and CLEAN section as well --- scripts/dev/tidy.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/dev/tidy.php b/scripts/dev/tidy.php index 3829f9092ec23..7ec9f7902d662 100644 --- a/scripts/dev/tidy.php +++ b/scripts/dev/tidy.php @@ -117,7 +117,7 @@ function transformTestCode(string $code, callable $transformer): string { } return preg_replace_callback( - '/(--FILE--)(.+?)(--[A-Z_]+--)/s', + '/(--(?:FILE|SKIPIF|CLEAN)--)(.+?)(--[A-Z_]+--)/s', function(array $matches) use($transformer) { return $matches[1] . $transformer($matches[2]) . $matches[3]; }, From c5401854fcea27ff9aabfd0682ff4d81bbb3c888 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 18 Sep 2020 14:28:32 +0200 Subject: [PATCH 50/67] Run tidy This should fix most of the remaining issues with tabs and spaces being mixed in tests. --- Zend/tests/attributes/001_placement.phpt | 4 +- Zend/tests/attributes/003_ast_nodes.phpt | 14 ++-- Zend/tests/attributes/005_objects.phpt | 46 ++++++------ Zend/tests/attributes/006_filter.phpt | 8 +-- Zend/tests/attributes/011_inheritance.phpt | 20 +++--- Zend/tests/attributes/012_ast_export.phpt | 12 ++-- Zend/tests/attributes/013_class_scope.phpt | 40 +++++------ .../attributes/014_class_const_group.phpt | 4 +- Zend/tests/attributes/015_property_group.phpt | 4 +- Zend/tests/attributes/017_closure_scope.phpt | 12 ++-- .../020_userland_attribute_validation.phpt | 8 +-- .../attributes/027_trailing_comma_args.phpt | 8 +-- Zend/tests/bug40770.phpt | 2 +- Zend/tests/bug54268.phpt | 2 +- Zend/tests/bug54547.phpt | 2 +- Zend/tests/bug62097.phpt | 2 +- Zend/tests/bug70258.phpt | 2 +- Zend/tests/bug70914.phpt | 2 +- Zend/tests/bug76846.phpt | 2 +- Zend/tests/bug79599.phpt | 14 ++-- Zend/tests/bug80037.phpt | 26 +++---- Zend/tests/dval_to_lval_32.phpt | 2 +- Zend/tests/dval_to_lval_64.phpt | 2 +- ...ted_yield_from_with_immediate_release.phpt | 4 +- Zend/tests/magic_methods_011.phpt | 2 +- Zend/tests/magic_methods_012.phpt | 2 +- Zend/tests/magic_methods_013.phpt | 2 +- Zend/tests/magic_methods_014.phpt | 2 +- Zend/tests/magic_methods_015.phpt | 2 +- Zend/tests/magic_methods_016.phpt | 2 +- Zend/tests/magic_methods_017.phpt | 2 +- Zend/tests/magic_methods_018.phpt | 2 +- Zend/tests/magic_methods_019.phpt | 2 +- Zend/tests/magic_methods_020.phpt | 2 +- .../magic_methods_inheritance_rules.phpt | 56 +++++++-------- ...hods_inheritance_rules_non_trivial_01.phpt | 6 +- ...hods_inheritance_rules_non_trivial_02.phpt | 6 +- Zend/tests/magic_methods_sleep.phpt | 2 +- Zend/tests/magic_methods_wakeup.phpt | 2 +- Zend/tests/return_types/033.phpt | 2 +- Zend/tests/return_types/034.phpt | 2 +- Zend/tests/return_types/035.phpt | 2 +- Zend/zend_generators.c | 2 +- ext/com_dotnet/tests/bug66431_0.phpt | 2 +- ext/com_dotnet/tests/bug66431_1.phpt | 6 +- ext/com_dotnet/tests/variants_x64.phpt | 2 +- ext/curl/tests/bug46711.phpt | 2 +- ext/curl/tests/bug48514.phpt | 2 +- ext/curl/tests/bug52827.phpt | 2 +- ext/curl/tests/bug61948.phpt | 6 +- ext/curl/tests/bug71523.phpt | 2 +- ext/curl/tests/bug72202.phpt | 2 +- ext/curl/tests/bug76675.phpt | 4 +- ext/curl/tests/bug77535.phpt | 4 +- ext/curl/tests/bug77946.phpt | 2 +- ext/curl/tests/bug79741.phpt | 2 +- ext/curl/tests/check_win_config.phpt | 2 +- ext/curl/tests/curl_basic_008.phpt | 10 +-- ext/curl/tests/curl_basic_010.phpt | 10 +-- ext/curl/tests/curl_basic_023.phpt | 2 +- ext/curl/tests/curl_basic_024.phpt | 2 +- ext/curl/tests/curl_copy_handle_basic.phpt | 2 +- .../tests/curl_copy_handle_variation1.phpt | 2 +- .../tests/curl_copy_handle_variation2.phpt | 2 +- ext/curl/tests/curl_escape.phpt | Bin 687 -> 690 bytes ext/curl/tests/curl_file_serialize.phpt | 2 +- .../tests/curl_multi_errno_strerror_001.phpt | 2 +- .../tests/curl_multi_setopt_basic001.phpt | 2 +- ext/curl/tests/curl_multi_strerror_001.phpt | 2 +- .../tests/curl_share_errno_strerror_001.phpt | 2 +- .../tests/curl_share_setopt_basic001.phpt | 2 +- ext/curl/tests/curl_strerror_001.phpt | 2 +- ext/date/tests/002.phpt | 2 +- ext/date/tests/bug13142.phpt | 4 +- ext/date/tests/bug26317.phpt | 2 +- ext/date/tests/bug26320.phpt | 2 +- .../tests/date_default_timezone_get-1.phpt | 2 +- .../tests/date_default_timezone_get-2.phpt | 2 +- ext/date/tests/strftime_variation22.phpt | 2 +- ext/dba/tests/bug36436.phpt | 6 +- ext/dba/tests/bug38698.phpt | 4 +- ext/dba/tests/bug48240.phpt | 6 +- ext/dba/tests/bug49125.phpt | 6 +- ext/dba/tests/bug65708.phpt | 4 +- ext/dba/tests/bug72157.phpt | 2 +- ext/dba/tests/dba001.phpt | 6 +- ext/dba/tests/dba002.phpt | 6 +- ext/dba/tests/dba003.phpt | 6 +- ext/dba/tests/dba004.phpt | 6 +- ext/dba/tests/dba005.phpt | 6 +- ext/dba/tests/dba006.phpt | 6 +- ext/dba/tests/dba007.phpt | 8 +-- ext/dba/tests/dba009.phpt | 6 +- ext/dba/tests/dba010.phpt | 6 +- ext/dba/tests/dba015.phpt | 2 +- ext/dba/tests/dba016.phpt | 2 +- ext/dba/tests/dba_cdb.phpt | 8 +-- ext/dba/tests/dba_cdb_make.phpt | 8 +-- ext/dba/tests/dba_cdb_read.phpt | 4 +- ext/dba/tests/dba_db1.phpt | 4 +- ext/dba/tests/dba_db2.phpt | 4 +- ext/dba/tests/dba_db3.phpt | 4 +- ext/dba/tests/dba_db4_018.phpt | 2 +- ext/dba/tests/dba_dbm.phpt | 6 +- ext/dba/tests/dba_flatfile.phpt | 6 +- ext/dba/tests/dba_gdbm.phpt | 4 +- ext/dba/tests/dba_inifile.phpt | 6 +- ext/dba/tests/dba_lmdb.phpt | 6 +- ext/dba/tests/dba_ndbm.phpt | 4 +- ext/dba/tests/dba_optimize.phpt | 6 +- ext/dba/tests/dba_qdbm.phpt | 6 +- ext/dba/tests/dba_split.phpt | 4 +- ext/dba/tests/dba_sync.phpt | 6 +- ext/dba/tests/dba_tcadb.phpt | 4 +- ext/dom/tests/DOMDocument_save_basic.phpt | 4 +- ext/enchant/tests/broker_describe.phpt | 12 ++-- ext/enchant/tests/broker_list_dicts.phpt | 12 ++-- ext/enchant/tests/bug13181.phpt | 12 ++-- ext/exif/exif.c | 2 +- ext/exif/tests/exif003.phpt | 6 +- ext/exif/tests/exif004.phpt | 6 +- ext/ffi/tests/100.phpt | 4 +- ext/ffi/tests/101.phpt | 4 +- ext/ffi/tests/200.phpt | 4 +- ext/ffi/tests/bug77632.phpt | 4 +- ext/ffi/tests/bug77632b.phpt | 4 +- ext/ffi/tests/bug77706.phpt | 4 +- ext/ffi/tests/bug77768.phpt | 4 +- ext/fileinfo/tests/bug57547.phpt | 2 +- ext/fileinfo/tests/bug61173.phpt | 2 +- ext/fileinfo/tests/bug67516.phpt | 2 +- ext/fileinfo/tests/bug67647-mb.phpt | 14 ++-- ext/fileinfo/tests/bug68731.phpt | 2 +- ext/fileinfo/tests/bug69320.phpt | 4 +- ext/fileinfo/tests/bug71527-mb.phpt | 2 +- ext/fileinfo/tests/bug71527.phpt | 2 +- ext/fileinfo/tests/bug74170.phpt | 6 +- ext/fileinfo/tests/cve-2014-1943-mb.phpt | 2 +- ext/fileinfo/tests/cve-2014-1943.phpt | 2 +- ext/fileinfo/tests/cve-2014-3538-mb.phpt | 4 +- ext/fileinfo/tests/cve-2014-3538-nojit.phpt | 4 +- ext/fileinfo/tests/cve-2014-3538.phpt | 4 +- ext/fileinfo/tests/finfo_extension_flag.phpt | 2 +- ext/gd/tests/bug19366.phpt | 2 +- ext/gd/tests/bug22544-mb.phpt | 6 +- ext/gd/tests/bug22544.phpt | 6 +- ext/gd/tests/bug24155.phpt | 8 +-- ext/gd/tests/bug24594.phpt | 6 +- ext/gd/tests/bug28147.phpt | 2 +- ext/gd/tests/bug36697-mb.phpt | 6 +- ext/gd/tests/bug36697.phpt | 6 +- ext/gd/tests/bug37346-mb.phpt | 2 +- ext/gd/tests/bug37346.phpt | 2 +- ext/gd/tests/bug37360.phpt | 2 +- ext/gd/tests/bug38112.phpt | 6 +- ext/gd/tests/bug39082.phpt | 6 +- ext/gd/tests/bug39273.phpt | 2 +- ext/gd/tests/bug39366.phpt | 4 +- ext/gd/tests/bug39508.phpt | 2 +- ext/gd/tests/bug39780.phpt | 4 +- ext/gd/tests/bug39780_extern.phpt | 4 +- ext/gd/tests/bug40764.phpt | 2 +- ext/gd/tests/bug41442.phpt | 12 ++-- ext/gd/tests/bug42434.phpt | 2 +- ext/gd/tests/bug43073.phpt | 4 +- ext/gd/tests/bug43121.phpt | 8 +-- ext/gd/tests/bug43475.phpt | 8 +-- ext/gd/tests/bug43828.phpt | 2 +- ext/gd/tests/bug44849.phpt | 2 +- ext/gd/tests/bug45799.phpt | 2 +- ext/gd/tests/bug48555.phpt | 4 +- ext/gd/tests/bug48732-mb.phpt | 6 +- ext/gd/tests/bug48732.phpt | 4 +- ext/gd/tests/bug48801-mb.phpt | 6 +- ext/gd/tests/bug48801.phpt | 4 +- ext/gd/tests/bug49600.phpt | 6 +- ext/gd/tests/bug51263.phpt | 4 +- ext/gd/tests/bug51671.phpt | 2 +- ext/gd/tests/bug53504.phpt | 4 +- ext/gd/tests/bug60160.phpt | 2 +- ext/gd/tests/bug64641.phpt | 2 +- ext/gd/tests/bug66356.phpt | 2 +- ext/gd/tests/bug67447.phpt | 6 +- ext/gd/tests/bug70976.phpt | 2 +- ext/gd/tests/bug71952.phpt | 2 +- ext/gd/tests/bug72227.phpt | 2 +- ext/gd/tests/bug72298.phpt | 2 +- ext/gd/tests/bug72339.phpt | 2 +- ext/gd/tests/bug72512.phpt | 8 +-- ext/gd/tests/bug72512_0.phpt | 8 +-- ext/gd/tests/bug72512_1.phpt | 8 +-- ext/gd/tests/crafted_gd2.phpt | 6 +- ext/gd/tests/createfromwbmp2.phpt | 4 +- ext/gd/tests/createfromwbmp2_extern.phpt | 4 +- ext/gd/tests/gd_info_basic.phpt | 6 +- ext/gd/tests/gif.phpt | 12 ++-- ext/gd/tests/gif2gd.phpt | 12 ++-- ext/gd/tests/gif2jpg.phpt | 18 ++--- ext/gd/tests/gif2png.phpt | 18 ++--- ext/gd/tests/imagechar_basic.phpt | 2 +- ext/gd/tests/imagecharup_basic.phpt | 2 +- .../tests/imagecolorallocatealpha_basic.phpt | 8 +-- ext/gd/tests/imagecolordeallocate_basic.phpt | 2 +- ext/gd/tests/imagecolordeallocate_error3.phpt | 2 +- ext/gd/tests/imagecolordeallocate_error4.phpt | 2 +- ext/gd/tests/imagecolorset_basic.phpt | 2 +- ext/gd/tests/imagecolourstotal_basic.phpt | 12 ++-- ext/gd/tests/imagecopyresampled_basic.phpt | 10 +-- ext/gd/tests/imagecreate_error.phpt | 4 +- ext/gd/tests/imagecreatetruecolor_basic.phpt | 4 +- ext/gd/tests/imagecreatetruecolor_error2.phpt | 4 +- ext/gd/tests/imagedashedline_basic.phpt | 6 +- ext/gd/tests/imagefill_1.phpt | 12 ++-- ext/gd/tests/imagefilledarc_basic.phpt | 2 +- ext/gd/tests/imagefilledarc_variation1.phpt | 2 +- ext/gd/tests/imagefilledarc_variation2.phpt | 2 +- ext/gd/tests/imagefilledpolygon_basic.phpt | 6 +- ext/gd/tests/imagefilter.phpt | 8 +-- ext/gd/tests/imagefontheight_basic.phpt | 2 +- ext/gd/tests/imagefontwidth_basic.phpt | 2 +- ext/gd/tests/imagefttext.phpt | 12 ++-- ext/gd/tests/imagegammacorrect_basic.phpt | 8 +-- .../tests/imagegammacorrect_variation1.phpt | 8 +-- ext/gd/tests/imageistruecolor_basic.phpt | 4 +- .../tests/imagejpeg_nullbyte_injection.phpt | 2 +- ext/gd/tests/imagelayereffect_basic.phpt | 4 +- ext/gd/tests/imageloadfont_error2.phpt | 2 +- ext/gd/tests/imageloadfont_invalid.phpt | 2 +- ext/gd/tests/imagepng_nullbyte_injection.phpt | 2 +- ext/gd/tests/imagepolygon_basic.phpt | 6 +- ext/gd/tests/imagerotate_overflow.phpt | 12 ++-- ext/gd/tests/imagesetbrush_basic.phpt | 2 +- ext/gd/tests/imagesetthickness_basic.phpt | 4 +- ext/gd/tests/imagestring_basic.phpt | 2 +- ext/gd/tests/imagestringup_basic.phpt | 2 +- .../tests/imagetruecolortopalette_basic.phpt | 10 +-- .../tests/imagetruecolortopalette_error3.phpt | 4 +- .../tests/imagetruecolortopalette_error4.phpt | 4 +- ext/gd/tests/imagettftext_charmap_order.phpt | 4 +- .../tests/imagewbmp_nullbyte_injection.phpt | 2 +- .../tests/imagewebp_nullbyte_injection.phpt | 2 +- ext/gd/tests/jpeg2png.phpt | 18 ++--- ext/gd/tests/jpg2gd-mb.phpt | 12 ++-- ext/gd/tests/jpg2gd.phpt | 12 ++-- ext/gd/tests/libgd00086.phpt | 4 +- ext/gd/tests/libgd00086_extern.phpt | 4 +- ext/gd/tests/libgd00094-mb.phpt | 4 +- ext/gd/tests/libgd00094.phpt | 4 +- ext/gd/tests/libgd00100.phpt | 4 +- ext/gd/tests/libgd00101.phpt | 4 +- ext/gd/tests/libgd00106.phpt | 2 +- ext/gd/tests/libgd00186.phpt | 2 +- ext/gd/tests/libgd00191.phpt | 4 +- ext/gd/tests/png2gd.phpt | 12 ++-- ext/gd/tests/pngcomp.phpt | 12 ++-- ext/gd/tests/xbm2png.phpt | 18 ++--- ext/gd/tests/xpm2gd.phpt | 12 ++-- ext/gd/tests/xpm2jpg.phpt | 18 ++--- ext/gd/tests/xpm2png.phpt | 18 ++--- ext/gettext/tests/44938.phpt | 2 +- ext/gettext/tests/bug66267.phpt | 20 +++--- ext/gettext/tests/gettext_basic-enus.phpt | 12 ++-- ext/gettext/tests/gettext_basic.phpt | 12 ++-- ...ettext_bind_textdomain_codeset-retval.phpt | 6 +- ext/gettext/tests/gettext_ngettext.phpt | 12 ++-- ext/gettext/tests/gettext_phpinfo.phpt | 6 +- .../tests/gettext_textdomain-retval.phpt | 12 ++-- ext/gmp/tests/gmp_divexact.phpt | 2 +- ext/gmp/tests/gmp_setbit_long.phpt | 26 +++---- ext/iconv/tests/bug37176.phpt | 2 +- ext/iconv/tests/bug37773.phpt | 2 +- ext/iconv/tests/iconv002.phpt | 2 +- ext/imap/tests/bug45705_1.phpt | 6 +- ext/imap/tests/bug45705_2.phpt | 6 +- ext/imap/tests/bug77153.phpt | 4 +- ext/intl/tests/breakiter___construct.phpt | 2 +- ext/intl/tests/breakiter_clone_basic.phpt | 2 +- ...eakiter_createCodePointInstance_basic.phpt | 2 +- ext/intl/tests/breakiter_current_basic.phpt | 2 +- ext/intl/tests/breakiter_factories_basic.phpt | 2 +- ext/intl/tests/breakiter_first_basic.phpt | 2 +- ext/intl/tests/breakiter_following_basic.phpt | 2 +- .../breakiter_getPartsIterator_basic.phpt | 2 +- .../breakiter_getPartsIterator_basic2.phpt | 2 +- .../breakiter_getPartsIterator_error.phpt | 2 +- .../breakiter_getPartsIterator_var1.phpt | 2 +- ext/intl/tests/breakiter_getText_basic.phpt | 2 +- .../tests/breakiter_isBoundary_basic.phpt | 2 +- ext/intl/tests/breakiter_last_basic.phpt | 2 +- ext/intl/tests/breakiter_next_basic.phpt | 2 +- ext/intl/tests/breakiter_preceding_basic.phpt | 2 +- .../tests/breakiter_preceding_basic2.phpt | 2 +- ext/intl/tests/breakiter_previous_basic.phpt | 2 +- ext/intl/tests/breakiter_setText_basic.phpt | 2 +- ext/intl/tests/bug58756_MessageFormatter.phpt | 4 +- .../bug58756_MessageFormatter_variant2.phpt | 4 +- ext/intl/tests/bug60192-compare.phpt | 2 +- ext/intl/tests/bug60192-getlocale.phpt | 2 +- ext/intl/tests/bug60192-getsortkey.phpt | 2 +- ext/intl/tests/bug60192-sort.phpt | 2 +- ext/intl/tests/bug60192-sortwithsortkeys.phpt | 2 +- ext/intl/tests/bug62017.phpt | 2 +- ext/intl/tests/bug62081.phpt | 2 +- ext/intl/tests/bug62082.phpt | 2 +- ext/intl/tests/bug62083.phpt | 2 +- ext/intl/tests/bug62915-2.phpt | 4 +- ext/intl/tests/bug62915.phpt | 2 +- ext/intl/tests/bug74484_MessageFormatter.phpt | 2 +- ext/intl/tests/calendar_add_basic.phpt | 2 +- ext/intl/tests/calendar_add_error.phpt | 2 +- .../tests/calendar_before_after_error.phpt | 2 +- ext/intl/tests/calendar_clear_basic.phpt | 2 +- ext/intl/tests/calendar_clear_error.phpt | 2 +- ext/intl/tests/calendar_clear_variation1.phpt | 2 +- .../calendar_const_field_field_count.phpt | 2 +- .../tests/calendar_createInstance_basic.phpt | 2 +- .../tests/calendar_createInstance_error.phpt | 2 +- .../calendar_createInstance_variation1.phpt | 2 +- .../calendar_equals_before_after_basic.phpt | 2 +- ext/intl/tests/calendar_equals_error.phpt | 2 +- .../tests/calendar_fieldDifference_basic.phpt | 2 +- .../tests/calendar_fieldDifference_error.phpt | 2 +- .../tests/calendar_fromDateTime_basic.phpt | 2 +- .../tests/calendar_fromDateTime_error.phpt | 2 +- .../calendar_getAvailableLocales_basic.phpt | 2 +- .../calendar_getDayOfWeekType_basic.phpt | 4 +- .../calendar_getDayOfWeekType_basic2.phpt | 4 +- .../calendar_getDayOfWeekType_error.phpt | 2 +- .../tests/calendar_getErrorCode_error.phpt | 2 +- ...ar_getErrorCode_getErrorMessage_basic.phpt | 2 +- .../tests/calendar_getErrorMessage_error.phpt | 2 +- .../calendar_getFirstDayOfWeek_basic.phpt | 2 +- .../calendar_getFirstDayOfWeek_error.phpt | 2 +- ...endar_getKeywordValuesForLocale_basic.phpt | 2 +- ext/intl/tests/calendar_getLocale_basic.phpt | 2 +- ext/intl/tests/calendar_getLocale_error.phpt | 2 +- ...endar_getMinimalDaysInFirstWeek_basic.phpt | 2 +- ...endar_getMinimalDaysInFirstWeek_error.phpt | 2 +- ext/intl/tests/calendar_getNow_basic.phpt | 2 +- ...tSkipped_RepeatedWallTimeOption_error.phpt | 2 +- .../tests/calendar_getTimeZone_basic.phpt | 2 +- .../tests/calendar_getTimeZone_error.phpt | 2 +- ext/intl/tests/calendar_getTime_basic.phpt | 2 +- ext/intl/tests/calendar_getTime_error.phpt | 2 +- ext/intl/tests/calendar_getType_basic.phpt | 2 +- ext/intl/tests/calendar_getType_error.phpt | 2 +- .../calendar_getWeekendTransition_basic.phpt | 2 +- .../calendar_getWeekendTransition_error.phpt | 2 +- .../tests/calendar_getXMaximum_basic.phpt | 2 +- .../tests/calendar_getXMinimum_basic.phpt | 2 +- ..._Least_Greatest_Minimum_Maximum_error.phpt | 2 +- ext/intl/tests/calendar_get_basic.phpt | 2 +- ...ar_get_getActualMaximum_Minumum_error.phpt | 2 +- ...r_get_getActualMaximum_Minumum_error2.phpt | 2 +- ...r_get_setRepeatedWallTimeOption_basic.phpt | 2 +- ...ar_get_setSkippedWallTimeOption_basic.phpt | 2 +- .../tests/calendar_inDaylightTime_basic.phpt | 2 +- .../tests/calendar_inDaylightTime_error.phpt | 2 +- .../tests/calendar_isEquivalentTo_basic.phpt | 2 +- .../tests/calendar_isEquivalentTo_error.phpt | 2 +- ext/intl/tests/calendar_isLenient_error.phpt | 2 +- ext/intl/tests/calendar_isSet_basic.phpt | 2 +- ext/intl/tests/calendar_isSet_error.phpt | 2 +- ext/intl/tests/calendar_isWeekend_basic.phpt | 2 +- ext/intl/tests/calendar_isWeekend_error.phpt | 2 +- .../tests/calendar_is_set_lenient_basic.phpt | 2 +- ext/intl/tests/calendar_roll_basic.phpt | 2 +- ext/intl/tests/calendar_roll_error.phpt | 2 +- ext/intl/tests/calendar_roll_variation1.phpt | 2 +- .../calendar_setFirstDayOfWeek_basic.phpt | 2 +- .../calendar_setFirstDayOfWeek_error.phpt | 2 +- ext/intl/tests/calendar_setLenient_error.phpt | 2 +- ...endar_setMinimalDaysInFirstWeek_basic.phpt | 2 +- ...endar_setMinimalDaysInFirstWeek_error.phpt | 2 +- ...tSkipped_RepeatedWallTimeOption_error.phpt | 2 +- .../tests/calendar_setTimeZone_basic.phpt | 2 +- .../tests/calendar_setTimeZone_error.phpt | 2 +- .../tests/calendar_setTimeZone_error2.phpt | 2 +- .../calendar_setTimeZone_variation1.phpt | 2 +- .../calendar_setTimeZone_variation2.phpt | 2 +- ext/intl/tests/calendar_setTime_basic.phpt | 2 +- ext/intl/tests/calendar_setTime_error.phpt | 2 +- ext/intl/tests/calendar_set_basic.phpt | 2 +- ext/intl/tests/calendar_set_error.phpt | 2 +- ext/intl/tests/calendar_set_variation1.phpt | 2 +- ext/intl/tests/calendar_toDateTime_basic.phpt | 2 +- ext/intl/tests/calendar_toDateTime_error.phpt | 2 +- ext/intl/tests/cpbi_clone_equality.phpt | 2 +- .../tests/cpbi_getLastCodePoint_basic.phpt | 2 +- ext/intl/tests/cpbi_parts_iterator.phpt | 2 +- .../dateformat___construct_bad_tz_cal.phpt | 2 +- .../tests/dateformat_formatObject_error.phpt | 2 +- .../tests/dateformat_setTimeZone_error.phpt | 2 +- .../gregoriancalendar___construct_basic.phpt | 2 +- .../gregoriancalendar___construct_error.phpt | 2 +- ...regoriancalendar___construct_variant1.phpt | 2 +- ...riancalendar_getGregorianChange_error.phpt | 2 +- ...calendar_get_setGregorianChange_basic.phpt | 2 +- .../gregoriancalendar_isLeapYear_basic.phpt | 2 +- .../gregoriancalendar_isLeapYear_error.phpt | 2 +- ext/intl/tests/idn_uts46_basic.phpt | 8 +-- ext/intl/tests/idn_uts46_errors.phpt | 8 +-- ext/intl/tests/msgfmt_bug70484.phpt | 2 +- ext/intl/tests/msgfmt_format_datetime.phpt | 2 +- ext/intl/tests/msgfmt_format_error1.phpt | 2 +- ext/intl/tests/msgfmt_format_error2.phpt | 2 +- ext/intl/tests/msgfmt_format_error3.phpt | 2 +- ext/intl/tests/msgfmt_format_error4.phpt | 2 +- ext/intl/tests/msgfmt_format_error5.phpt | 2 +- ext/intl/tests/msgfmt_format_error6.phpt | 2 +- .../tests/msgfmt_format_mixed_params.phpt | 2 +- ...t_format_simple_types_numeric_strings.phpt | 2 +- ext/intl/tests/msgfmt_format_subpatterns.phpt | 2 +- .../msgfmt_format_subpatterns_named.phpt | 2 +- ext/intl/tests/msgfmt_millisecond_dates.phpt | 2 +- ext/intl/tests/msgfmt_setPattern_cache.phpt | 2 +- ext/intl/tests/rbbiter___construct_basic.phpt | 2 +- .../tests/rbbiter_getRuleStatusVec_basic.phpt | 2 +- .../tests/rbbiter_getRuleStatus_basic.phpt | 2 +- ext/intl/tests/spoofchecker_007.phpt | 8 +-- .../tests/timezone_IDforWindowsID_basic.phpt | 2 +- .../tests/timezone_IDforWindowsID_basic2.phpt | 2 +- ext/intl/tests/timezone_clone_basic.phpt | 2 +- ext/intl/tests/timezone_clone_error.phpt | 2 +- .../timezone_countEquivalentIDs_basic.phpt | 2 +- .../timezone_countEquivalentIDs_error.phpt | 2 +- .../tests/timezone_createDefault_basic.phpt | 2 +- .../timezone_createEnumeration_basic.phpt | 2 +- .../timezone_createEnumeration_error.phpt | 2 +- ...timezone_createEnumeration_variation1.phpt | 2 +- ...timezone_createEnumeration_variation2.phpt | 2 +- ...one_createTimeZoneIDEnumeration_basic.phpt | 2 +- ...one_createTimeZoneIDEnumeration_error.phpt | 2 +- ..._createTimeZoneIDEnumeration_variant1.phpt | 2 +- ..._createTimeZoneIDEnumeration_variant2.phpt | 2 +- .../tests/timezone_createTimeZone_basic.phpt | 2 +- .../tests/timezone_createTimeZone_error.phpt | 2 +- ext/intl/tests/timezone_equals_basic.phpt | 2 +- ext/intl/tests/timezone_equals_error.phpt | 2 +- .../timezone_fromDateTimeZone_basic.phpt | 2 +- .../timezone_fromDateTimeZone_error.phpt | 2 +- .../tests/timezone_getCanonicalID_basic.phpt | 2 +- .../tests/timezone_getCanonicalID_error.phpt | 2 +- .../tests/timezone_getDSTSavings_basic.phpt | 2 +- .../tests/timezone_getDSTSavings_error.phpt | 2 +- .../tests/timezone_getDisplayName_basic.phpt | 2 +- .../tests/timezone_getDisplayName_error.phpt | 2 +- .../timezone_getDisplayName_variant1.phpt | 2 +- .../tests/timezone_getEquivalentID_basic.phpt | 2 +- .../tests/timezone_getEquivalentID_error.phpt | 2 +- .../timezone_getErrorCodeMessage_basic.phpt | 2 +- .../tests/timezone_getErrorCode_error.phpt | 2 +- .../tests/timezone_getErrorMessage_error.phpt | 2 +- ext/intl/tests/timezone_getGMT_basic.phpt | 2 +- ext/intl/tests/timezone_getID_error.phpt | 2 +- ext/intl/tests/timezone_getOffset_basic.phpt | 2 +- ext/intl/tests/timezone_getOffset_error.phpt | 2 +- .../tests/timezone_getRawOffset_basic.phpt | 2 +- .../tests/timezone_getRawOffset_error.phpt | 2 +- ext/intl/tests/timezone_getRegion_basic.phpt | 2 +- ext/intl/tests/timezone_getRegion_error.phpt | 2 +- ext/intl/tests/timezone_getTZData_basic.phpt | 2 +- ext/intl/tests/timezone_getUnknown_basic.phpt | 2 +- .../tests/timezone_hasSameRules_basic.phpt | 2 +- .../tests/timezone_hasSameRules_error.phpt | 2 +- .../tests/timezone_toDateTimeZone_basic.phpt | 2 +- .../tests/timezone_toDateTimeZone_error.phpt | 2 +- .../tests/timezone_useDaylightTime_basic.phpt | 2 +- .../tests/timezone_useDaylightTime_error.phpt | 2 +- ext/intl/tests/timezone_windowsID_basic.phpt | 2 +- ext/intl/tests/timezone_windowsID_basic2.phpt | 2 +- ext/json/tests/bug41403.phpt | 2 +- ext/json/tests/bug42785.phpt | 2 +- ext/ldap/tests/ldap_exop_refresh.phpt | 12 ++-- ext/ldap/tests/ldap_option_reqcert_basic.phpt | 4 +- ext/ldap/tests/ldap_option_reqcert_error.phpt | 4 +- ext/ldap/tests/ldap_sasl_bind_basic.phpt | 10 +-- .../tests/ldap_set_option_crlcheck_basic.phpt | 12 ++-- .../tests/ldap_set_rebind_proc_error.phpt | 16 ++--- ext/mbstring/tests/bug52681.phpt | 4 +- ext/mbstring/tests/htmlent.phpt | 4 +- ext/mbstring/tests/mb_send_mail01.phpt | 4 +- ext/mbstring/tests/mb_send_mail02.phpt | 4 +- ext/mbstring/tests/mb_send_mail03.phpt | 4 +- ext/mbstring/tests/mb_send_mail04.phpt | 4 +- ext/mbstring/tests/mb_send_mail05.phpt | 6 +- ext/mbstring/tests/mb_send_mail06.phpt | 6 +- ext/mbstring/tests/mb_send_mail07.phpt | 6 +- ext/mysqli/tests/002.phpt | 2 +- ext/mysqli/tests/003.phpt | 2 +- ext/mysqli/tests/004.phpt | 2 +- ext/mysqli/tests/005.phpt | 2 +- ext/mysqli/tests/006.phpt | 2 +- ext/mysqli/tests/007.phpt | 2 +- ext/mysqli/tests/008.phpt | 2 +- ext/mysqli/tests/009.phpt | 16 ++--- ext/mysqli/tests/010.phpt | 2 +- ext/mysqli/tests/011.phpt | 2 +- ext/mysqli/tests/012.phpt | 2 +- ext/mysqli/tests/013.phpt | 2 +- ext/mysqli/tests/014.phpt | 18 ++--- ext/mysqli/tests/015.phpt | 16 ++--- ext/mysqli/tests/019.phpt | 2 +- ext/mysqli/tests/020.phpt | 2 +- ext/mysqli/tests/021.phpt | 2 +- ext/mysqli/tests/022.phpt | 2 +- ext/mysqli/tests/023.phpt | 2 +- ext/mysqli/tests/024.phpt | 2 +- ext/mysqli/tests/025.phpt | 2 +- ext/mysqli/tests/026.phpt | 2 +- ext/mysqli/tests/029.phpt | 2 +- ext/mysqli/tests/032.phpt | 2 +- ext/mysqli/tests/036.phpt | 14 ++-- ext/mysqli/tests/037.phpt | 2 +- ext/mysqli/tests/038.phpt | 2 +- ext/mysqli/tests/040.phpt | 2 +- ext/mysqli/tests/041.phpt | 2 +- ext/mysqli/tests/042.phpt | 2 +- ext/mysqli/tests/043.phpt | 2 +- ext/mysqli/tests/045.phpt | 22 +++--- ext/mysqli/tests/046.phpt | 2 +- ext/mysqli/tests/047.phpt | 2 +- ext/mysqli/tests/048.phpt | 2 +- ext/mysqli/tests/057.phpt | 2 +- ext/mysqli/tests/058.phpt | 2 +- ext/mysqli/tests/059.phpt | 2 +- ext/mysqli/tests/060.phpt | 2 +- ext/mysqli/tests/061.phpt | 6 +- ext/mysqli/tests/065.phpt | 2 +- ext/mysqli/tests/066.phpt | 2 +- ext/mysqli/tests/067.phpt | 26 +++---- ext/mysqli/tests/bug32405.phpt | 2 +- ext/mysqli/tests/bug34810.phpt | 2 +- ext/mysqli/tests/bug35103.phpt | 2 +- ext/mysqli/tests/bug35517.phpt | 2 +- ext/mysqli/tests/bug36949.phpt | 2 +- ext/mysqli/tests/bug37090.phpt | 2 +- ext/mysqli/tests/bug42548.phpt | 4 +- ext/mysqli/tests/bug44897.phpt | 8 +-- ext/mysqli/tests/bug45289.phpt | 2 +- ext/mysqli/tests/bug46614.phpt | 2 +- ext/mysqli/tests/bug47050.phpt | 2 +- ext/mysqli/tests/bug48909.phpt | 2 +- ext/mysqli/tests/bug49027.phpt | 2 +- ext/mysqli/tests/bug49442.phpt | 4 +- ext/mysqli/tests/bug51647.phpt | 26 +++---- ext/mysqli/tests/bug52891.phpt | 10 +-- ext/mysqli/tests/bug53503.phpt | 4 +- ext/mysqli/tests/bug55283.phpt | 26 +++---- ext/mysqli/tests/bug67839.phpt | 4 +- ext/mysqli/tests/bug68077.phpt | 6 +- ext/mysqli/tests/bug69899.phpt | 2 +- ext/mysqli/tests/bug70384.phpt | 28 ++++---- ext/mysqli/tests/bug70949.phpt | 4 +- ext/mysqli/tests/bug71863.phpt | 2 +- ext/mysqli/tests/bug72701.phpt | 2 +- ext/mysqli/tests/bug76386.phpt | 4 +- ext/mysqli/tests/bug77956.phpt | 4 +- .../gracefull_fail_on_empty_result_set.phpt | 2 +- ext/mysqli/tests/mysqli_affected_rows.phpt | 6 +- ext/mysqli/tests/mysqli_affected_rows_oo.phpt | 6 +- ext/mysqli/tests/mysqli_auth_pam.phpt | 34 ++++----- ext/mysqli/tests/mysqli_autocommit.phpt | 20 +++--- ext/mysqli/tests/mysqli_autocommit_oo.phpt | 26 +++---- .../tests/mysqli_begin_transaction.phpt | 6 +- .../tests/mysqli_change_user_insert_id.phpt | 4 +- .../mysqli_change_user_locks_temporary.phpt | 2 +- ext/mysqli/tests/mysqli_change_user_new.phpt | 6 +- ext/mysqli/tests/mysqli_change_user_old.phpt | 6 +- ext/mysqli/tests/mysqli_change_user_oo.phpt | 4 +- .../tests/mysqli_change_user_rollback.phpt | 6 +- .../tests/mysqli_change_user_set_names.phpt | 8 +-- ext/mysqli/tests/mysqli_character_set.phpt | 4 +- .../tests/mysqli_character_set_name_oo.phpt | 4 +- .../mysqli_class_mysqli_stmt_interface.phpt | 4 +- .../tests/mysqli_class_mysqli_warning.phpt | 4 +- ext/mysqli/tests/mysqli_commit.phpt | 6 +- ext/mysqli/tests/mysqli_commit_oo.phpt | 6 +- ext/mysqli/tests/mysqli_connect_attr.phpt | 4 +- .../tests/mysqli_connect_oo_warnings.phpt | 12 ++-- ext/mysqli/tests/mysqli_data_seek.phpt | 2 +- ext/mysqli/tests/mysqli_data_seek_oo.phpt | 2 +- ext/mysqli/tests/mysqli_debug.phpt | 8 +-- ext/mysqli/tests/mysqli_debug_append.phpt | 10 +-- .../tests/mysqli_debug_control_string.phpt | 8 +-- ext/mysqli/tests/mysqli_debug_ini.phpt | 12 ++-- .../mysqli_debug_mysqlnd_control_string.phpt | 10 +-- .../tests/mysqli_debug_mysqlnd_only.phpt | 10 +-- .../mysqli_disable_reads_from_master.phpt | 4 +- .../mysqli_enable_reads_from_master.phpt | 2 +- ext/mysqli/tests/mysqli_expire_password.phpt | 42 +++++------ ext/mysqli/tests/mysqli_explain_metadata.phpt | 2 +- ext/mysqli/tests/mysqli_fetch_all.phpt | 4 +- ext/mysqli/tests/mysqli_fetch_all_oo.phpt | 4 +- .../tests/mysqli_fetch_array_assoc.phpt | 2 +- .../tests/mysqli_fetch_array_many_rows.phpt | 2 +- ext/mysqli/tests/mysqli_fetch_array_oo.phpt | 2 +- ext/mysqli/tests/mysqli_fetch_assoc.phpt | 2 +- ext/mysqli/tests/mysqli_fetch_assoc_bit.phpt | 16 ++--- .../mysqli_fetch_assoc_no_alias_utf8.phpt | 40 +++++------ ext/mysqli/tests/mysqli_fetch_assoc_oo.phpt | 2 +- .../tests/mysqli_fetch_assoc_zerofill.phpt | 2 +- ext/mysqli/tests/mysqli_fetch_field.phpt | 2 +- .../tests/mysqli_fetch_field_direct.phpt | 2 +- .../tests/mysqli_fetch_field_direct_oo.phpt | 2 +- .../tests/mysqli_fetch_field_flags.phpt | 6 +- ext/mysqli/tests/mysqli_fetch_field_oo.phpt | 2 +- .../tests/mysqli_fetch_field_types.phpt | 2 +- ext/mysqli/tests/mysqli_fetch_fields.phpt | 2 +- ext/mysqli/tests/mysqli_fetch_lengths.phpt | 2 +- ext/mysqli/tests/mysqli_fetch_lengths_oo.phpt | 4 +- ext/mysqli/tests/mysqli_fetch_object.phpt | 2 +- .../mysqli_fetch_object_no_constructor.phpt | 2 +- .../tests/mysqli_fetch_object_no_object.phpt | 2 +- ext/mysqli/tests/mysqli_fetch_object_oo.phpt | 2 +- ext/mysqli/tests/mysqli_fetch_row.phpt | 2 +- ext/mysqli/tests/mysqli_field_count.phpt | 2 +- ext/mysqli/tests/mysqli_field_seek.phpt | 2 +- ext/mysqli/tests/mysqli_field_tell.phpt | 2 +- ext/mysqli/tests/mysqli_fork.phpt | 12 ++-- ext/mysqli/tests/mysqli_free_result.phpt | 2 +- ext/mysqli/tests/mysqli_get_charset.phpt | 4 +- ext/mysqli/tests/mysqli_get_client_stats.phpt | 2 +- ...mysqli_get_client_stats_implicit_free.phpt | 2 +- .../tests/mysqli_get_client_stats_off.phpt | 2 +- .../tests/mysqli_get_client_stats_ps.phpt | 2 +- .../mysqli_get_client_stats_skipped.phpt | 2 +- .../tests/mysqli_get_connection_stats.phpt | 4 +- .../mysqli_get_connection_stats_off.phpt | 2 +- ext/mysqli/tests/mysqli_get_host_info.phpt | 2 +- ext/mysqli/tests/mysqli_get_server_info.phpt | 2 +- ext/mysqli/tests/mysqli_get_warnings.phpt | 2 +- ext/mysqli/tests/mysqli_insert_id.phpt | 2 +- .../tests/mysqli_insert_id_variation.phpt | 2 +- .../tests/mysqli_insert_packet_overflow.phpt | 6 +- ext/mysqli/tests/mysqli_kill.phpt | 2 +- ext/mysqli/tests/mysqli_last_insert_id.phpt | 2 +- ext/mysqli/tests/mysqli_more_results.phpt | 2 +- ext/mysqli/tests/mysqli_multi_query.phpt | 2 +- .../tests/mysqli_mysqlnd_read_timeout.phpt | 4 +- .../mysqli_mysqlnd_read_timeout_long.phpt | 6 +- .../mysqli_mysqlnd_read_timeout_zero.phpt | 6 +- ext/mysqli/tests/mysqli_next_result.phpt | 2 +- ext/mysqli/tests/mysqli_num_fields.phpt | 2 +- ext/mysqli/tests/mysqli_num_rows.phpt | 2 +- .../tests/mysqli_options_init_command.phpt | 2 +- .../mysqli_options_int_and_float_native.phpt | 4 +- ext/mysqli/tests/mysqli_pam_sha256.phpt | 50 ++++++------- .../mysqli_pam_sha256_public_key_ini.phpt | 48 ++++++------- .../mysqli_pam_sha256_public_key_option.phpt | 58 +++++++-------- ..._pam_sha256_public_key_option_invalid.phpt | 62 ++++++++-------- ext/mysqli/tests/mysqli_pconn_max_links.phpt | 68 +++++++++--------- ext/mysqli/tests/mysqli_poll.phpt | 2 +- ext/mysqli/tests/mysqli_poll_kill.phpt | 2 +- .../mysqli_poll_mixing_insert_select.phpt | 6 +- ext/mysqli/tests/mysqli_poll_reference.phpt | 6 +- ext/mysqli/tests/mysqli_prepare.phpt | 4 +- ext/mysqli/tests/mysqli_query.phpt | 2 +- ext/mysqli/tests/mysqli_query_iterators.phpt | 2 +- .../tests/mysqli_query_stored_proc.phpt | 6 +- ext/mysqli/tests/mysqli_query_unicode.phpt | 2 +- .../tests/mysqli_real_connect_pconn.phpt | 2 +- .../tests/mysqli_real_escape_string_big5.phpt | 8 +-- .../mysqli_real_escape_string_eucjpms.phpt | 8 +-- .../mysqli_real_escape_string_euckr.phpt | 8 +-- .../mysqli_real_escape_string_gb2312.phpt | 8 +-- .../tests/mysqli_real_escape_string_gbk.phpt | 8 +-- .../tests/mysqli_real_escape_string_sjis.phpt | 6 +- .../mysqli_real_escape_string_unicode.phpt | 2 +- ext/mysqli/tests/mysqli_real_query.phpt | 2 +- ext/mysqli/tests/mysqli_reap_async_query.phpt | 2 +- ext/mysqli/tests/mysqli_reconnect.phpt | 2 +- .../tests/mysqli_release_savepoint.phpt | 6 +- ext/mysqli/tests/mysqli_report.phpt | 2 +- ext/mysqli/tests/mysqli_report_new.phpt | 8 +-- ext/mysqli/tests/mysqli_report_wo_ps.phpt | 8 +-- .../tests/mysqli_result_invalid_mode.phpt | 2 +- .../tests/mysqli_result_references.phpt | 2 +- .../mysqli_result_references_mysqlnd.phpt | 2 +- ext/mysqli/tests/mysqli_rollback.phpt | 16 ++--- ext/mysqli/tests/mysqli_savepoint.phpt | 6 +- ext/mysqli/tests/mysqli_send_query.phpt | 4 +- ext/mysqli/tests/mysqli_set_charset.phpt | 40 +++++------ ext/mysqli/tests/mysqli_sqlstate.phpt | 2 +- ext/mysqli/tests/mysqli_ssl_set.phpt | 2 +- .../tests/mysqli_stmt_affected_rows.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_attr_get.phpt | 2 +- .../tests/mysqli_stmt_attr_get_prefetch.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_attr_set.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_big_prepare.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_bind_param.phpt | 2 +- ...mysqli_stmt_bind_param_call_user_func.phpt | 2 +- ...stmt_bind_param_check_param_no_change.phpt | 2 +- .../mysqli_stmt_bind_param_references.phpt | 2 +- .../mysqli_stmt_bind_param_type_juggling.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_bind_result.phpt | 2 +- .../tests/mysqli_stmt_bind_result_bit.phpt | 2 +- .../mysqli_stmt_bind_result_references.phpt | 2 +- .../mysqli_stmt_bind_result_zerofill.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_close.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_data_seek.phpt | 2 +- .../tests/mysqli_stmt_datatype_change.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_errno.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_error.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_execute.phpt | 6 +- .../mysqli_stmt_execute_stored_proc.phpt | 6 +- ..._stmt_execute_stored_proc_next_result.phpt | 4 +- .../mysqli_stmt_execute_stored_proc_out.phpt | 6 +- ext/mysqli/tests/mysqli_stmt_fetch.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_fetch_bit.phpt | 16 ++--- ...ysqli_stmt_fetch_fields_win32_unicode.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_fetch_geom.phpt | 10 +-- ext/mysqli/tests/mysqli_stmt_field_count.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_free_result.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_get_result.phpt | 4 +- ext/mysqli/tests/mysqli_stmt_get_result2.phpt | 4 +- .../tests/mysqli_stmt_get_result_bit.phpt | 20 +++--- .../mysqli_stmt_get_result_field_count.phpt | 10 +-- .../tests/mysqli_stmt_get_result_geom.phpt | 14 ++-- .../mysqli_stmt_get_result_metadata.phpt | 4 +- ..._stmt_get_result_metadata_fetch_field.phpt | 4 +- .../mysqli_stmt_get_result_non_select.phpt | 4 +- .../tests/mysqli_stmt_get_result_seek.phpt | 4 +- .../tests/mysqli_stmt_get_result_types.phpt | 10 +-- .../tests/mysqli_stmt_get_warnings.phpt | 12 ++-- ext/mysqli/tests/mysqli_stmt_init.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_insert_id.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_multires.phpt | 8 +-- ext/mysqli/tests/mysqli_stmt_num_rows.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_param_count.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_prepare.phpt | 2 +- ext/mysqli/tests/mysqli_stmt_reset.phpt | 2 +- .../tests/mysqli_stmt_result_metadata.phpt | 2 +- .../mysqli_stmt_result_metadata_sqltests.phpt | 2 +- .../tests/mysqli_stmt_send_long_data.phpt | 2 +- ...t_send_long_data_packet_size_libmysql.phpt | 4 +- ...mt_send_long_data_packet_size_mysqlnd.phpt | 4 +- ext/mysqli/tests/mysqli_stmt_sqlstate.phpt | 2 +- .../tests/mysqli_stmt_store_result.phpt | 2 +- ext/mysqli/tests/mysqli_store_result.phpt | 2 +- ext/mysqli/tests/mysqli_thread_id.phpt | 2 +- ext/mysqli/tests/mysqli_use_result.phpt | 2 +- ext/mysqli/tests/mysqli_warning_count.phpt | 2 +- .../tests/mysqli_warning_unclonable.phpt | 4 +- ext/oci8/tests/conn_attr_1.phpt | 2 +- ext/oci8/tests/conn_attr_2.phpt | 2 +- ext/oci8/tests/conn_attr_3.phpt | 2 +- ext/oci8/tests/conn_attr_5.phpt | 2 +- .../tests/connect_without_oracle_home.phpt | 2 +- .../tests/connect_without_oracle_home_11.phpt | 2 +- ext/oci8/tests/edition_1.phpt | 2 +- ext/oci8/tests/edition_2.phpt | 2 +- ext/oci8/tests/password_new.phpt | 2 +- ext/oci8/tests/pecl_bug16035.phpt | 2 +- ext/oci8/tests/refcur_prefetch_1.phpt | 2 +- ext/oci8/tests/refcur_prefetch_2.phpt | 2 +- ext/oci8/tests/refcur_prefetch_3.phpt | 2 +- ext/oci8/tests/refcur_prefetch_4.phpt | 2 +- ext/odbc/tests/bug60616.phpt | 6 +- ext/odbc/tests/odbc_data_source_001.phpt | 8 +-- ext/odbc/tests/odbc_exec_001.phpt | 6 +- ext/opcache/tests/bug78185.phpt | 16 ++--- ext/openssl/tests/openssl_decrypt_ccm.phpt | 4 +- ext/openssl/tests/openssl_decrypt_gcm.phpt | 4 +- ext/openssl/tests/openssl_encrypt_gcm.phpt | 4 +- .../tests/openssl_error_string_basic.phpt | 2 +- .../openssl_pkcs12_export_to_file_basic.phpt | 2 +- .../openssl_pkcs12_export_to_file_error.phpt | 2 +- ext/pcntl/tests/001.phpt | 4 +- ext/pcntl/tests/002.phpt | 10 +-- ext/pcntl/tests/003.phpt | 6 +- ext/pcntl/tests/async_signals.phpt | 8 +-- ext/pcntl/tests/bug73783.phpt | 4 +- ext/pcntl/tests/pcntl_fork_basic.phpt | 4 +- ext/pcntl/tests/pcntl_fork_variation.phpt | 4 +- ext/pcntl/tests/pcntl_get_last_error.phpt | 2 +- ext/pcntl/tests/pcntl_signal_dispatch.phpt | 10 +-- ext/pcntl/tests/signal_closure_handler.phpt | 8 +-- ext/pcre/tests/007.phpt | 2 +- ext/pcre/tests/backtrack_limit.phpt | 2 +- ext/pcre/tests/bug27103.phpt | 2 +- ext/pcre/tests/bug72463.phpt | 2 +- ext/pcre/tests/bug72463_2.phpt | 2 +- ext/pcre/tests/bug76850.phpt | 8 +-- ext/pcre/tests/bug76909.phpt | 2 +- ext/pcre/tests/bug77193.phpt | 6 +- ext/pcre/tests/check_jit_enabled.phpt | 2 +- ext/pcre/tests/errors04.phpt | 2 +- ext/pcre/tests/errors05.phpt | 2 +- ext/pcre/tests/invalid_utf8.phpt | 2 +- ext/pcre/tests/invalid_utf8_offset.phpt | 2 +- ext/pcre/tests/pcre_anchored.phpt | 2 +- ext/pcre/tests/preg_match_error3.phpt | 2 +- ext/pcre/tests/preg_replace2.phpt | 2 +- ext/pcre/tests/recursion_limit.phpt | 2 +- ext/pdo/tests/bug_44159.phpt | 4 +- ext/pdo/tests/bug_44861.phpt | 8 +-- ext/pdo/tests/bug_47769.phpt | 2 +- ext/pdo/tests/pdo_017.phpt | 8 +-- .../tests/pdo_dsn_containing_credentials.phpt | 2 +- ext/pdo_mysql/tests/bug_39858.phpt | 6 +- ext/pdo_mysql/tests/bug_41125.phpt | 6 +- ext/pdo_mysql/tests/bug_41997.phpt | 6 +- ext/pdo_mysql/tests/bug_42499.phpt | 6 +- ext/pdo_mysql/tests/bug_44707.phpt | 6 +- ext/pdo_mysql/tests/bug_61411.phpt | 6 +- ext/pdo_mysql/tests/bug_pecl_7976.phpt | 6 +- .../tests/pdo_mysql___construct_ini.phpt | 2 +- ...do_mysql___construct_options_libmysql.phpt | 2 +- .../tests/pdo_mysql_attr_max_buffer_size.phpt | 2 +- .../tests/pdo_mysql_begintransaction.phpt | 2 +- ext/pdo_mysql/tests/pdo_mysql_bit.phpt | 2 +- .../tests/pdo_mysql_class_constants.phpt | 6 +- ext/pdo_mysql/tests/pdo_mysql_commit.phpt | 2 +- .../tests/pdo_mysql_exec_load_data.phpt | 14 ++-- .../tests/pdo_mysql_get_attribute.phpt | 2 +- ext/pdo_mysql/tests/pdo_mysql_interface.phpt | 2 +- .../pdo_mysql_local_infile_default_off.phpt | 2 +- .../tests/pdo_mysql_local_infile_set_on.phpt | 2 +- .../pdo_mysql_multi_stmt_nextrowset.phpt | 8 +-- .../tests/pdo_mysql_prepare_load_data.phpt | 4 +- ext/pdo_mysql/tests/pdo_mysql_rollback.phpt | 2 +- .../tests/pdo_mysql_stmt_blobfromsteam.phpt | 8 +-- .../tests/pdo_mysql_stmt_fetchobject.phpt | 10 +-- .../tests/pdo_mysql_stmt_getcolumnmeta.phpt | 2 +- .../tests/pdo_mysql_stmt_nextrowset.phpt | 8 +-- .../tests/pdo_mysql_stmt_unbuffered_2050.phpt | 2 +- .../pdo_mysql_stmt_variable_columncount.phpt | 6 +- ext/pdo_odbc/tests/common.phpt | 8 +-- ext/pdo_pgsql/tests/bug62479.phpt | 10 +-- ext/pdo_pgsql/tests/bug68199.phpt | 2 +- ext/pdo_pgsql/tests/bug69362.phpt | 10 +-- .../tests/pdo_sqlite_open_flags.phpt | 2 +- ext/phar/tests/024-opcache-win32.phpt | 4 +- ext/phar/tests/bug77022.phpt | 4 +- ext/phar/tests/bug79082.phpt | 4 +- .../tests/phar_buildfromdirectory2-win.phpt | 4 +- ext/phar/tests/phar_buildfromdirectory2.phpt | 4 +- ext/posix/tests/posix_ctermid.phpt | 2 +- ext/posix/tests/posix_getgrgid_basic.phpt | 2 +- ext/posix/tests/posix_getgrgid_error.phpt | 2 +- ext/posix/tests/posix_getgrnam_basic.phpt | 4 +- ext/posix/tests/posix_getgroups_basic.phpt | 2 +- ext/posix/tests/posix_getpgid_basic.phpt | 2 +- ext/posix/tests/posix_getpgid_error.phpt | 2 +- ext/posix/tests/posix_getpgrp_basic.phpt | 2 +- ext/posix/tests/posix_getpid_basic.phpt | 2 +- ext/posix/tests/posix_getppid_basic.phpt | 2 +- ext/posix/tests/posix_getpwnam_basic_01.phpt | 2 +- ext/posix/tests/posix_getpwuid_basic.phpt | 2 +- ext/posix/tests/posix_getpwuid_error.phpt | 2 +- ext/posix/tests/posix_getsid.phpt | 2 +- ext/posix/tests/posix_getsid_basic.phpt | 2 +- ext/posix/tests/posix_getsid_error.phpt | 2 +- ext/posix/tests/posix_kill_error.phpt | 2 +- ext/posix/tests/posix_strerror_error.phpt | 2 +- ext/posix/tests/posix_times.phpt | 2 +- ext/posix/tests/posix_times_basic.phpt | 2 +- ext/posix/tests/posix_ttyname.phpt | 2 +- .../posix_ttyname_error_wrongparams.phpt | 4 +- ext/posix/tests/posix_uname_basic.phpt | 2 +- ext/pspell/tests/001.phpt | 2 +- .../tests/libedit_info_001-win32.phpt | 2 +- ext/readline/tests/libedit_info_001.phpt | 2 +- .../libedit_write_history_001-win32.phpt | 2 +- .../tests/libedit_write_history_001.phpt | 2 +- ...ctionClass_getStaticPropertyValue_001.phpt | 4 +- ...ctionClass_setStaticPropertyValue_001.phpt | 4 +- ext/session/tests/bug42596.phpt | 4 +- .../tests/session_save_path_variation5.phpt | 2 +- ext/shmop/tests/001.phpt | 6 +- ext/shmop/tests/002.phpt | 6 +- ext/simplexml/tests/011.phpt | 2 +- ext/simplexml/tests/012.phpt | 2 +- ext/simplexml/tests/013.phpt | 2 +- ext/skeleton/tests/001.phpt | 2 +- ext/skeleton/tests/002.phpt | 2 +- ext/skeleton/tests/003.phpt | 2 +- ext/snmp/tests/bug64124.phpt | 2 +- ext/snmp/tests/ipv6.phpt | 2 +- ext/soap/tests/bug73037.phpt | 16 ++--- ext/soap/tests/bug77088.phpt | 2 +- ext/soap/tests/custom_content_type.phpt | 8 +-- ext/soap/tests/schema/schema064.phpt | 2 +- ext/soap/tests/server009.phpt | 8 +-- ext/soap/tests/server019.phpt | 6 +- ext/soap/tests/server020.phpt | 6 +- ext/soap/tests/server029.phpt | 4 +- ext/sockets/tests/bug51958.phpt | 4 +- ext/sockets/tests/ipv4loop.phpt | 6 +- ext/sockets/tests/ipv6loop.phpt | 8 +-- ext/sockets/tests/mcast_ipv4_recv.phpt | 4 +- ext/sockets/tests/mcast_ipv4_send.phpt | 2 +- ext/sockets/tests/mcast_ipv4_send_error.phpt | 4 +- ext/sockets/tests/mcast_ipv6_recv.phpt | 18 ++--- .../tests/mcast_ipv6_recv_limited.phpt | 28 ++++---- ext/sockets/tests/mcast_ipv6_send.phpt | 4 +- ext/sockets/tests/socket_abstract_path.phpt | 4 +- .../tests/socket_abstract_path_sendmsg.phpt | 4 +- .../tests/socket_clear_error-win32.phpt | 2 +- ext/sockets/tests/socket_clear_error.phpt | 2 +- .../tests/socket_create_listen-win32.phpt | 2 +- ext/sockets/tests/socket_create_listen.phpt | 2 +- .../socket_create_pair-wrongparams-win32.phpt | 2 +- .../tests/socket_create_pair-wrongparams.phpt | 2 +- ext/sockets/tests/socket_export_stream-1.phpt | 2 +- ext/sockets/tests/socket_export_stream-2.phpt | 2 +- ext/sockets/tests/socket_export_stream-3.phpt | 10 +-- .../tests/socket_export_stream-4-win.phpt | 2 +- ext/sockets/tests/socket_export_stream-4.phpt | 2 +- ext/sockets/tests/socket_export_stream-5.phpt | 4 +- .../tests/socket_getpeername_ipv6loop.phpt | 2 +- ext/sockets/tests/socket_import_stream-1.phpt | 2 +- ext/sockets/tests/socket_import_stream-2.phpt | 2 +- ext/sockets/tests/socket_import_stream-3.phpt | 10 +-- .../tests/socket_import_stream-4-win.phpt | 2 +- ext/sockets/tests/socket_import_stream-4.phpt | 2 +- ext/sockets/tests/socket_import_stream-5.phpt | 4 +- .../tests/socket_listen-wrongparams.phpt | 2 +- .../socket_select-wrongparams-1-win32.phpt | 2 +- .../tests/socket_select-wrongparams-1.phpt | 2 +- .../socket_sendrecvmsg_multi_msg-unix.phpt | 6 +- .../tests/socket_sendrecvmsg_multi_msg.phpt | 4 +- ...socket_sentto_recvfrom_ipv6_udp-win32.phpt | 2 +- .../socket_sentto_recvfrom_ipv6_udp.phpt | 2 +- .../tests/socket_sentto_recvfrom_unix.phpt | 2 +- .../tests/socket_set_option_bindtodevice.phpt | 4 +- ext/sockets/tests/socket_shutdown-win32.phpt | 2 +- ext/sockets/tests/socket_shutdown.phpt | 2 +- ext/sockets/tests/unixloop.phpt | 8 +-- ext/sockets/tests/wsaprotocol_info_0.phpt | 4 +- ext/spl/tests/bug65006.phpt | 16 ++--- ext/sqlite3/tests/sqlite3_11_numrows.phpt | 4 +- .../tests/sqlite3_15_open_error-win.phpt | 2 +- ext/sqlite3/tests/sqlite3_15_open_error.phpt | 2 +- .../tests/sqlite3_22_loadextension.phpt | 2 +- .../sqlite3_33_load_extension_param.phpt | 2 +- .../sqlite3_34_load_extension_ext_dir.phpt | 2 +- ext/sqlite3/tests/sqlite3_defensive.phpt | 2 +- .../tests/sqlite3stmt_getsql_expanded.phpt | 2 +- .../tests/dir/opendir_variation5.phpt | 2 +- .../tests/dir/scandir_variation5.phpt | 2 +- ext/standard/tests/file/bug41874_1.phpt | 2 +- ext/standard/tests/file/bug41874_2.phpt | 2 +- ext/standard/tests/file/bug41874_3.phpt | 2 +- ext/standard/tests/file/bug47517.phpt | 2 +- ext/standard/tests/file/bug47767.phpt | 2 +- ext/standard/tests/file/bug60120.phpt | 2 +- ext/standard/tests/file/chroot_001.phpt | 4 +- .../file/file_get_contents_error001.phpt | 2 +- .../tests/file/fopen_variation10-win32.phpt | 2 +- .../tests/file/fopen_variation11-win32.phpt | 2 +- .../tests/file/fscanf_variation3.phpt | 2 +- .../tests/file/fscanf_variation33.phpt | 2 +- .../tests/file/fscanf_variation34.phpt | 2 +- .../tests/file/fscanf_variation39.phpt | 2 +- .../tests/file/fscanf_variation40.phpt | 2 +- .../tests/file/fscanf_variation55.phpt | 2 +- .../tests/file/fscanf_variation9.phpt | 2 +- ext/standard/tests/file/link_win32.phpt | 2 +- ext/standard/tests/file/mkdir-004.phpt | 2 +- ext/standard/tests/file/mkdir-005.phpt | 2 +- .../tests/file/tempnam_variation3-win32.phpt | 2 +- .../tests/file/windows_links/bug48746_3.phpt | 4 +- .../tests/file/windows_links/common.inc | 12 ++-- .../file/windows_mb_path/bug75063_utf8.phpt | 4 +- .../windows_mb_path/test_long_path_mkdir.phpt | 2 +- ext/standard/tests/filters/bug74267.phpt | 12 ++-- .../tests/general_functions/bug41518.phpt | 2 +- .../general_functions/dl-check-enabled.phpt | 2 +- .../general_functions/dl-cve-2007-4887.phpt | 2 +- .../dl-full-path-not-supported.phpt | 2 +- .../proc_nice_basic-win.phpt | 4 +- .../proc_nice_variation5.phpt | 6 +- .../general_functions/proc_open_sockets1.phpt | 60 ++++++++-------- .../general_functions/proc_open_sockets2.phpt | 48 ++++++------- .../general_functions/proc_open_sockets3.phpt | 36 +++++----- .../putenv_bug75574_cp936_win.phpt | 2 +- ext/standard/tests/image/getimagesize.phpt | 2 +- .../tests/image/getimagesize_246x247.phpt | 2 +- .../tests/image/getimagesize_384x385.phpt | 2 +- .../tests/image/getimagesize_swc.phpt | 6 +- .../tests/image/getimagesize_variation4.phpt | 6 +- .../image/getimagesize_variation_005.phpt | 6 +- .../tests/image/image_type_to_mime_type.phpt | 2 +- .../image_type_to_mime_type_variation4.phpt | 6 +- ext/standard/tests/math/bug25665.phpt | 4 +- ext/standard/tests/network/inet_ipv6.phpt | 2 +- ext/standard/tests/network/shutdown.phpt | 2 +- ext/standard/tests/network/tcp6loop.phpt | 14 ++-- ext/standard/tests/network/udgloop.phpt | 4 +- ext/standard/tests/network/udp6loop.phpt | 24 +++---- ext/standard/tests/network/unixloop.phpt | 4 +- ext/standard/tests/serialize/bug26762.phpt | 2 +- ext/standard/tests/serialize/bug30234.phpt | 2 +- ext/standard/tests/serialize/precision.phpt | 2 +- ext/standard/tests/streams/bug61371-unix.phpt | 2 +- ext/standard/tests/streams/bug64433.phpt | 4 +- .../tests/streams/proc_open_bug51800.phpt | 8 +-- ext/standard/tests/strings/bug65769.phpt | 2 +- ext/standard/tests/strings/bug72663_2.phpt | 2 +- .../tests/strings/htmlentities02.phpt | 2 +- .../tests/strings/htmlentities03.phpt | 2 +- .../tests/strings/htmlentities05.phpt | 2 +- .../tests/strings/htmlentities06.phpt | 2 +- .../tests/strings/htmlentities07.phpt | 2 +- .../tests/strings/htmlentities08.phpt | 2 +- .../tests/strings/htmlentities09.phpt | 2 +- .../tests/strings/htmlentities16.phpt | 2 +- .../tests/strings/htmlentities25.phpt | 2 +- ext/standard/tests/strings/pack.phpt | 2 +- ext/standard/tests/strings/pack64.phpt | 2 +- ext/standard/tests/strings/pack64_32.phpt | 2 +- ext/standard/tests/strings/printf_basic7.phpt | 2 +- ext/standard/tests/strings/printf_basic8.phpt | 2 +- .../tests/strings/sprintf_basic7.phpt | 2 +- .../tests/strings/sprintf_basic8.phpt | 2 +- .../tests/strings/sprintf_variation28.phpt | 2 +- .../tests/strings/sprintf_variation34.phpt | 2 +- .../tests/strings/sprintf_variation40.phpt | 2 +- ext/standard/tests/strings/sscanf_basic6.phpt | 2 +- ext/standard/tests/time/001.phpt | 2 +- ext/standard/tests/time/strptime_error.phpt | 2 +- ext/sysvsem/tests/nowait.phpt | 2 +- ext/sysvsem/tests/sysv.phpt | 2 +- ext/xml/tests/bug32001.phpt | 2 +- ext/xml/tests/xml007.phpt | 2 +- .../xml_parse_into_struct_variation.phpt | 2 +- .../tests/xml_parser_set_option_basic.phpt | 2 +- .../xml_parser_set_option_variation3.phpt | 2 +- .../xml_set_notation_decl_handler_basic.phpt | 2 +- ..._processing_instruction_handler_basic.phpt | 2 +- ...et_start_namespace_decl_handler_basic.phpt | 2 +- ext/xmlwriter/tests/bug79029.phpt | 2 +- ext/xsl/tests/xsl-phpinfo.phpt | 6 +- ext/xsl/tests/xslt008-mb.phpt | 4 +- ext/xsl/tests/xslt008.phpt | 4 +- ext/xsl/tests/xslt009.phpt | 4 +- .../tests/observer_generator_04.phpt | 2 +- ext/zip/tests/bug51353.phpt | 2 +- ext/zip/tests/bug64342_0.phpt | 2 +- ext/zlib/tests/bug55544-win.phpt | Bin 579 -> 585 bytes ext/zlib/tests/bug55544.phpt | Bin 487 -> 493 bytes ext/zlib/tests/bug61139.phpt | 4 +- ext/zlib/tests/gzclose_basic.phpt | 2 +- ext/zlib/tests/gzcompress_basic1.phpt | 2 +- ext/zlib/tests/gzcompress_error1.phpt | 2 +- ext/zlib/tests/gzcompress_variation1.phpt | 2 +- ext/zlib/tests/gzdeflate_basic1.phpt | 2 +- ext/zlib/tests/gzdeflate_error1.phpt | 2 +- ext/zlib/tests/gzdeflate_variation1.phpt | 2 +- ext/zlib/tests/gzencode_basic1.phpt | 2 +- ext/zlib/tests/gzencode_error1.phpt | 2 +- ext/zlib/tests/gzencode_variation1-win32.phpt | 2 +- ext/zlib/tests/gzencode_variation1.phpt | 2 +- ext/zlib/tests/gzencode_variation2-win32.phpt | 4 +- ext/zlib/tests/gzencode_variation2.phpt | 2 +- ext/zlib/tests/gzeof_basic.phpt | 2 +- ext/zlib/tests/gzeof_variation1.phpt | 2 +- ext/zlib/tests/gzfile_variation15.phpt | 2 +- ext/zlib/tests/gzgetc_basic.phpt | 4 +- ext/zlib/tests/gzgetc_basic_1.phpt | 4 +- ext/zlib/tests/gzgets_basic.phpt | 2 +- ext/zlib/tests/gzinflate_error1.phpt | 2 +- ext/zlib/tests/gzopen_basic.phpt | 2 +- ext/zlib/tests/gzopen_basic2.phpt | 2 +- ext/zlib/tests/gzopen_variation4.phpt | 2 +- ext/zlib/tests/gzopen_variation5.phpt | 2 +- ext/zlib/tests/gzopen_variation6.phpt | 2 +- ext/zlib/tests/gzopen_variation7.phpt | 2 +- ext/zlib/tests/gzopen_variation8.phpt | 2 +- ext/zlib/tests/gzopen_variation9.phpt | 2 +- ext/zlib/tests/gzpassthru_basic.phpt | 2 +- ext/zlib/tests/gzputs_basic.phpt | 2 +- ext/zlib/tests/gzread_basic.phpt | 2 +- ext/zlib/tests/gzread_error2.phpt | 2 +- ext/zlib/tests/gzread_variation1.phpt | 2 +- ext/zlib/tests/gzrewind_basic.phpt | 2 +- ext/zlib/tests/gzrewind_basic2.phpt | 2 +- ext/zlib/tests/gzrewind_variation1.phpt | 2 +- ext/zlib/tests/gzseek_basic.phpt | 2 +- ext/zlib/tests/gzseek_basic2.phpt | 2 +- ext/zlib/tests/gzseek_variation1.phpt | 2 +- ext/zlib/tests/gzseek_variation2.phpt | 2 +- ext/zlib/tests/gzseek_variation3.phpt | 2 +- ext/zlib/tests/gzseek_variation4.phpt | 2 +- ext/zlib/tests/gzseek_variation5.phpt | 2 +- ext/zlib/tests/gzseek_variation6.phpt | 2 +- ext/zlib/tests/gzseek_variation7.phpt | 2 +- ext/zlib/tests/gztell_basic.phpt | 2 +- ext/zlib/tests/gztell_basic2.phpt | 2 +- ext/zlib/tests/gzuncompress_basic1.phpt | 2 +- ext/zlib/tests/gzuncompress_error1.phpt | 2 +- ext/zlib/tests/gzwrite_basic.phpt | 2 +- ext/zlib/tests/gzwrite_error2.phpt | 2 +- ext/zlib/tests/gzwrite_variation1.phpt | 2 +- ext/zlib/tests/readgzfile_variation15.phpt | 2 +- ext/zlib/tests/zlib_scheme_copy_basic.phpt | 2 +- .../tests/zlib_scheme_copy_variation1.phpt | 2 +- .../tests/zlib_scheme_copy_variation2.phpt | 2 +- ext/zlib/tests/zlib_scheme_dir_basic.phpt | 2 +- ext/zlib/tests/zlib_scheme_file_basic.phpt | 2 +- .../zlib_scheme_file_get_contents_basic.phpt | 2 +- .../zlib_scheme_file_put_contents_basic.phpt | 2 +- .../zlib_scheme_file_read_file_basic.phpt | 2 +- ext/zlib/tests/zlib_scheme_fopen_basic.phpt | 2 +- .../tests/zlib_scheme_fopen_variation1.phpt | 2 +- ext/zlib/tests/zlib_scheme_rename_basic.phpt | 2 +- ext/zlib/tests/zlib_scheme_stat_basic.phpt | 2 +- ext/zlib/tests/zlib_scheme_stat_basic2.phpt | 2 +- ext/zlib/tests/zlib_scheme_unlink_basic.phpt | 2 +- ext/zlib/tests/zlib_wrapper_fflush_basic.phpt | 2 +- ext/zlib/tests/zlib_wrapper_flock_basic.phpt | 2 +- ext/zlib/tests/zlib_wrapper_fstat_basic.phpt | 2 +- .../tests/zlib_wrapper_ftruncate_basic.phpt | 2 +- .../tests/zlib_wrapper_meta_data_basic.phpt | 2 +- sapi/cgi/tests/003.phpt | 2 +- sapi/cgi/tests/005-win32.phpt | 2 +- sapi/cgi/tests/005.phpt | 2 +- sapi/cli/tests/002-unix.phpt | 2 +- sapi/cli/tests/003-2.phpt | 2 +- sapi/cli/tests/003.phpt | 2 +- sapi/cli/tests/006.phpt | 4 +- sapi/cli/tests/007.phpt | 2 +- sapi/cli/tests/008.phpt | 2 +- sapi/cli/tests/010-2.phpt | 2 +- sapi/cli/tests/010.phpt | 2 +- sapi/cli/tests/013.phpt | 2 +- sapi/cli/tests/015.phpt | 2 +- sapi/cli/tests/016.phpt | 2 +- sapi/cli/tests/017.phpt | 2 +- sapi/cli/tests/018.phpt | 2 +- sapi/cli/tests/019.phpt | 2 +- sapi/cli/tests/020.phpt | 2 +- sapi/cli/tests/021.phpt | 2 +- sapi/cli/tests/argv_mb_bug77111.phpt | 4 +- sapi/cli/tests/bug44564.phpt | 2 +- sapi/cli/tests/bug64529.phpt | 6 +- sapi/cli/tests/bug64544.phpt | 2 +- sapi/cli/tests/bug65275.inc | 2 +- sapi/cli/tests/upload_2G.phpt | 24 +++---- tests/classes/autoload_001.phpt | 2 +- tests/classes/autoload_002.phpt | 2 +- tests/classes/autoload_003.phpt | 2 +- tests/classes/autoload_004.phpt | 2 +- tests/classes/autoload_005.phpt | 2 +- tests/classes/autoload_006.phpt | 2 +- tests/lang/034.phpt | 2 +- tests/lang/bug30638.phpt | 2 +- .../sapi_windows_vt100_support_winko_err.phpt | 6 +- ...pi_windows_vt100_support_winko_in-err.phpt | 6 +- ...indows_vt100_support_winko_in-out-err.phpt | 6 +- ...pi_windows_vt100_support_winko_in-out.phpt | 6 +- ...i_windows_vt100_support_winko_out-err.phpt | 6 +- .../sapi_windows_vt100_support_winko_out.phpt | 6 +- .../sapi_windows_vt100_support_winok_err.phpt | 6 +- ...pi_windows_vt100_support_winok_in-err.phpt | 6 +- ...indows_vt100_support_winok_in-out-err.phpt | 6 +- ...pi_windows_vt100_support_winok_in-out.phpt | 6 +- ...i_windows_vt100_support_winok_out-err.phpt | 6 +- .../sapi_windows_vt100_support_winok_out.phpt | 6 +- tests/output/stream_isatty_err.phpt | 2 +- tests/output/stream_isatty_in-err.phpt | 2 +- tests/output/stream_isatty_in-out-err.phpt | 2 +- tests/output/stream_isatty_in-out.phpt | 2 +- tests/output/stream_isatty_out-err.phpt | 2 +- tests/output/stream_isatty_out.phpt | 2 +- tests/run-test/bug75042.phpt | 2 +- tests/security/open_basedir_001.phpt | 4 +- 1169 files changed, 2581 insertions(+), 2581 deletions(-) diff --git a/Zend/tests/attributes/001_placement.phpt b/Zend/tests/attributes/001_placement.phpt index 7de2210460e52..518c890ef2c4a 100644 --- a/Zend/tests/attributes/001_placement.phpt +++ b/Zend/tests/attributes/001_placement.phpt @@ -41,8 +41,8 @@ $sources = [ ]; foreach ($sources as $r) { - $attr = $r->getAttributes(); - var_dump(get_class($r), count($attr)); + $attr = $r->getAttributes(); + var_dump(get_class($r), count($attr)); foreach ($attr as $a) { var_dump($a->getName(), $a->getArguments()); diff --git a/Zend/tests/attributes/003_ast_nodes.phpt b/Zend/tests/attributes/003_ast_nodes.phpt index 0177804dcc85a..854edf3d63c15 100644 --- a/Zend/tests/attributes/003_ast_nodes.phpt +++ b/Zend/tests/attributes/003_ast_nodes.phpt @@ -8,7 +8,7 @@ define('V1', strtoupper(php_sapi_name())); #[A1([V1 => V1])] class C1 { - public const BAR = 'bar'; + public const BAR = 'bar'; } $ref = new \ReflectionClass(C1::class); @@ -38,7 +38,7 @@ echo "\n"; #[A1(self::FOO, C1::BAR)] class C3 { - private const FOO = 'foo'; + private const FOO = 'foo'; } $ref = new \ReflectionClass(C3::class); @@ -62,7 +62,7 @@ echo "\n"; #[Attribute] class C5 { - public function __construct() { } + public function __construct() { } } $ref = new \ReflectionFunction(#[C5(MissingClass::SOME_CONST)] function () { }); @@ -70,15 +70,15 @@ $attr = $ref->getAttributes(); var_dump(count($attr)); try { - $attr[0]->getArguments(); + $attr[0]->getArguments(); } catch (\Error $e) { - var_dump($e->getMessage()); + var_dump($e->getMessage()); } try { - $attr[0]->newInstance(); + $attr[0]->newInstance(); } catch (\Error $e) { - var_dump($e->getMessage()); + var_dump($e->getMessage()); } ?> diff --git a/Zend/tests/attributes/005_objects.phpt b/Zend/tests/attributes/005_objects.phpt index 206d89fa10ab7..62b14181efd2e 100644 --- a/Zend/tests/attributes/005_objects.phpt +++ b/Zend/tests/attributes/005_objects.phpt @@ -6,22 +6,22 @@ Attributes can be converted into objects. #[Attribute(Attribute::TARGET_FUNCTION)] class A1 { - public string $name; - public int $ttl; - - public function __construct(string $name, int $ttl = 50) - { - $this->name = $name; - $this->ttl = $ttl; - } + public string $name; + public int $ttl; + + public function __construct(string $name, int $ttl = 50) + { + $this->name = $name; + $this->ttl = $ttl; + } } $ref = new \ReflectionFunction(#[A1('test')] function () { }); foreach ($ref->getAttributes() as $attr) { - $obj = $attr->newInstance(); + $obj = $attr->newInstance(); - var_dump(get_class($obj), $obj->name, $obj->ttl); + var_dump(get_class($obj), $obj->name, $obj->ttl); } echo "\n"; @@ -29,9 +29,9 @@ echo "\n"; $ref = new \ReflectionFunction(#[A1] function () { }); try { - $ref->getAttributes()[0]->newInstance(); + $ref->getAttributes()[0]->newInstance(); } catch (\ArgumentCountError $e) { - var_dump('ERROR 1', $e->getMessage()); + var_dump('ERROR 1', $e->getMessage()); } echo "\n"; @@ -39,9 +39,9 @@ echo "\n"; $ref = new \ReflectionFunction(#[A1([])] function () { }); try { - $ref->getAttributes()[0]->newInstance(); + $ref->getAttributes()[0]->newInstance(); } catch (\TypeError $e) { - var_dump('ERROR 2', $e->getMessage()); + var_dump('ERROR 2', $e->getMessage()); } echo "\n"; @@ -49,9 +49,9 @@ echo "\n"; $ref = new \ReflectionFunction(#[A2] function () { }); try { - $ref->getAttributes()[0]->newInstance(); + $ref->getAttributes()[0]->newInstance(); } catch (\Error $e) { - var_dump('ERROR 3', $e->getMessage()); + var_dump('ERROR 3', $e->getMessage()); } echo "\n"; @@ -59,15 +59,15 @@ echo "\n"; #[Attribute] class A3 { - private function __construct() { } + private function __construct() { } } $ref = new \ReflectionFunction(#[A3] function () { }); try { - $ref->getAttributes()[0]->newInstance(); + $ref->getAttributes()[0]->newInstance(); } catch (\Error $e) { - var_dump('ERROR 4', $e->getMessage()); + var_dump('ERROR 4', $e->getMessage()); } echo "\n"; @@ -78,9 +78,9 @@ class A4 { } $ref = new \ReflectionFunction(#[A4(1)] function () { }); try { - $ref->getAttributes()[0]->newInstance(); + $ref->getAttributes()[0]->newInstance(); } catch (\Error $e) { - var_dump('ERROR 5', $e->getMessage()); + var_dump('ERROR 5', $e->getMessage()); } echo "\n"; @@ -90,9 +90,9 @@ class A5 { } $ref = new \ReflectionFunction(#[A5] function () { }); try { - $ref->getAttributes()[0]->newInstance(); + $ref->getAttributes()[0]->newInstance(); } catch (\Error $e) { - var_dump('ERROR 6', $e->getMessage()); + var_dump('ERROR 6', $e->getMessage()); } ?> diff --git a/Zend/tests/attributes/006_filter.phpt b/Zend/tests/attributes/006_filter.phpt index 8da1ec9bde1e1..2924e6ed79826 100644 --- a/Zend/tests/attributes/006_filter.phpt +++ b/Zend/tests/attributes/006_filter.phpt @@ -55,17 +55,17 @@ echo "\n"; $ref = new \ReflectionFunction(function () { }); try { - $ref->getAttributes(A1::class, 3); + $ref->getAttributes(A1::class, 3); } catch (\Error $e) { - var_dump('ERROR 1', $e->getMessage()); + var_dump('ERROR 1', $e->getMessage()); } $ref = new \ReflectionFunction(function () { }); try { - $ref->getAttributes(SomeMissingClass::class, \ReflectionAttribute::IS_INSTANCEOF); + $ref->getAttributes(SomeMissingClass::class, \ReflectionAttribute::IS_INSTANCEOF); } catch (\Error $e) { - var_dump('ERROR 2', $e->getMessage()); + var_dump('ERROR 2', $e->getMessage()); } ?> diff --git a/Zend/tests/attributes/011_inheritance.phpt b/Zend/tests/attributes/011_inheritance.phpt index 36ee3fa47addf..6a589b9253d08 100644 --- a/Zend/tests/attributes/011_inheritance.phpt +++ b/Zend/tests/attributes/011_inheritance.phpt @@ -6,19 +6,19 @@ Attributes comply with inheritance rules. #[A2] class C1 { - #[A1] - public function foo() { } + #[A1] + public function foo() { } } class C2 extends C1 { - public function foo() { } + public function foo() { } } class C3 extends C1 { - #[A1] - public function bar() { } + #[A1] + public function bar() { } } $ref = new \ReflectionClass(C1::class); @@ -37,20 +37,20 @@ echo "\n"; trait T1 { - #[A2] - public $a; + #[A2] + public $a; } class C4 { - use T1; + use T1; } class C5 { - use T1; + use T1; - public $a; + public $a; } $ref = new \ReflectionClass(T1::class); diff --git a/Zend/tests/attributes/012_ast_export.phpt b/Zend/tests/attributes/012_ast_export.phpt index a9131f92d0c0b..347d1befe7f48 100644 --- a/Zend/tests/attributes/012_ast_export.phpt +++ b/Zend/tests/attributes/012_ast_export.phpt @@ -12,15 +12,15 @@ assert(0 && ($a = #[A1] #[A2] function ($a, #[A3(1)] $b) { })); assert(0 && ($a = #[A1(1, 2, 1 + 2)] fn () => 1)); assert(0 && ($a = new #[A1] class() { - #[A1]#[A2] const FOO = 'foo'; - #[A2] public $x; - #[A3] function a() { } + #[A1]#[A2] const FOO = 'foo'; + #[A2] public $x; + #[A3] function a() { } })); assert(0 && ($a = function () { - #[A1] class Test1 { } - #[A2] interface Test2 { } - #[A3] trait Test3 { } + #[A1] class Test1 { } + #[A2] interface Test2 { } + #[A3] trait Test3 { } })); ?> diff --git a/Zend/tests/attributes/013_class_scope.phpt b/Zend/tests/attributes/013_class_scope.phpt index 61dd9f594c708..ff16bb7b82258 100644 --- a/Zend/tests/attributes/013_class_scope.phpt +++ b/Zend/tests/attributes/013_class_scope.phpt @@ -6,14 +6,14 @@ Attributes make use of class scope. #[A1(self::class, self::FOO)] class C1 { - #[A1(self::class, self::FOO)] - private const FOO = 'foo'; + #[A1(self::class, self::FOO)] + private const FOO = 'foo'; - #[A1(self::class, self::FOO)] - public $a; + #[A1(self::class, self::FOO)] + public $a; - #[A1(self::class, self::FOO)] - public function bar(#[A1(self::class, self::FOO)] $p) { } + #[A1(self::class, self::FOO)] + public function bar(#[A1(self::class, self::FOO)] $p) { } } $ref = new \ReflectionClass(C1::class); @@ -27,15 +27,15 @@ echo "\n"; trait T1 { - #[A1(self::class, self::FOO)] - public function foo() { } + #[A1(self::class, self::FOO)] + public function foo() { } } class C2 { - use T1; + use T1; - private const FOO = 'bar'; + private const FOO = 'bar'; } $ref = new \ReflectionClass(C2::class); @@ -45,7 +45,7 @@ $ref = new \ReflectionClass(T1::class); $attr = $ref->getMethod('foo')->getAttributes()[0]; try { - $attr->getArguments(); + $attr->getArguments(); } catch (\Error $e) { var_dump('ERROR 1', $e->getMessage()); } @@ -54,17 +54,17 @@ echo "\n"; class C3 { - private const FOO = 'foo'; + private const FOO = 'foo'; - public static function foo() - { - return new #[A1(self::class, self::FOO)] class() { - private const FOO = 'bar'; + public static function foo() + { + return new #[A1(self::class, self::FOO)] class() { + private const FOO = 'bar'; - #[A1(self::class, self::FOO)] - public function bar() { } - }; - } + #[A1(self::class, self::FOO)] + public function bar() { } + }; + } } $ref = new \ReflectionObject(C3::foo()); diff --git a/Zend/tests/attributes/014_class_const_group.phpt b/Zend/tests/attributes/014_class_const_group.phpt index a53ed09c0abd2..9f01d013a7de1 100644 --- a/Zend/tests/attributes/014_class_const_group.phpt +++ b/Zend/tests/attributes/014_class_const_group.phpt @@ -5,8 +5,8 @@ Attributes cannot be applied to groups of class constants. class C1 { - #[A1] - public const A = 1, B = 2; + #[A1] + public const A = 1, B = 2; } ?> diff --git a/Zend/tests/attributes/015_property_group.phpt b/Zend/tests/attributes/015_property_group.phpt index 484d4154cf3a6..b84ded8c38d6d 100644 --- a/Zend/tests/attributes/015_property_group.phpt +++ b/Zend/tests/attributes/015_property_group.phpt @@ -5,8 +5,8 @@ Attributes cannot be applied to groups of properties. class C1 { - #[A1] - public $x, $y; + #[A1] + public $x, $y; } ?> diff --git a/Zend/tests/attributes/017_closure_scope.phpt b/Zend/tests/attributes/017_closure_scope.phpt index af7de8e2e828b..8c39ceede9e61 100644 --- a/Zend/tests/attributes/017_closure_scope.phpt +++ b/Zend/tests/attributes/017_closure_scope.phpt @@ -5,17 +5,17 @@ Attributes make use of closure scope. class Test1 { - private const FOO = 'bar'; + private const FOO = 'bar'; } class C1 { - private const FOO = 'foo'; + private const FOO = 'foo'; - public static function foo() - { - return #[A1(self::class, self::FOO)] function (#[A1(self::class, self::FOO)] $p) { }; - } + public static function foo() + { + return #[A1(self::class, self::FOO)] function (#[A1(self::class, self::FOO)] $p) { }; + } } $ref = new \ReflectionFunction(C1::foo()); diff --git a/Zend/tests/attributes/020_userland_attribute_validation.phpt b/Zend/tests/attributes/020_userland_attribute_validation.phpt index 14a10c39b288b..ce2acb26db161 100644 --- a/Zend/tests/attributes/020_userland_attribute_validation.phpt +++ b/Zend/tests/attributes/020_userland_attribute_validation.phpt @@ -18,9 +18,9 @@ $attr = $ref->getAttributes()[0]; var_dump($attr->getName(), $attr->getTarget() == Attribute::TARGET_CLASS, $attr->isRepeated()); try { - $attr->newInstance(); + $attr->newInstance(); } catch (\Throwable $e) { - var_dump('ERROR 1', $e->getMessage()); + var_dump('ERROR 1', $e->getMessage()); } echo "\n"; @@ -30,9 +30,9 @@ $attr = $ref->getAttributes()[0]; var_dump($attr->getName(), $attr->getTarget() == Attribute::TARGET_FUNCTION, $attr->isRepeated()); try { - $attr->newInstance(); + $attr->newInstance(); } catch (\Throwable $e) { - var_dump('ERROR 2', $e->getMessage()); + var_dump('ERROR 2', $e->getMessage()); } echo "\n"; diff --git a/Zend/tests/attributes/027_trailing_comma_args.phpt b/Zend/tests/attributes/027_trailing_comma_args.phpt index 226025f359c2c..96966c364de66 100644 --- a/Zend/tests/attributes/027_trailing_comma_args.phpt +++ b/Zend/tests/attributes/027_trailing_comma_args.phpt @@ -4,10 +4,10 @@ Trailing comma in attribute argument list --FILE-- diff --git a/Zend/tests/bug54268.phpt b/Zend/tests/bug54268.phpt index 1680f4ceedb8f..e4ce5c0e3a774 100644 --- a/Zend/tests/bug54268.phpt +++ b/Zend/tests/bug54268.phpt @@ -6,7 +6,7 @@ memory_limit=8M --FILE-- diff --git a/Zend/tests/bug54547.phpt b/Zend/tests/bug54547.phpt index 7cb0cf06647a4..2f6387ca26c1d 100644 --- a/Zend/tests/bug54547.phpt +++ b/Zend/tests/bug54547.phpt @@ -3,7 +3,7 @@ Bug #54547: wrong equality of string numbers near LONG_MAX with 64-bit longs --SKIPIF-- --FILE-- diff --git a/Zend/tests/bug70914.phpt b/Zend/tests/bug70914.phpt index 2ea1b91241919..b8a1c91d36338 100644 --- a/Zend/tests/bug70914.phpt +++ b/Zend/tests/bug70914.phpt @@ -3,7 +3,7 @@ Bug #70914 zend_throw_or_error() format string vulnerability --SKIPIF-- --FILE-- diff --git a/Zend/tests/bug76846.phpt b/Zend/tests/bug76846.phpt index fbef2010338cf..cd837bd860973 100644 --- a/Zend/tests/bug76846.phpt +++ b/Zend/tests/bug76846.phpt @@ -6,7 +6,7 @@ memory_limit=33M --FILE-- diff --git a/Zend/tests/bug79599.phpt b/Zend/tests/bug79599.phpt index b333f153a8cb1..57e5332431f53 100644 --- a/Zend/tests/bug79599.phpt +++ b/Zend/tests/bug79599.phpt @@ -3,23 +3,23 @@ Bug #79599 (coredump in set_error_handler) --FILE-- getMessage()); + var_dump($e->getMessage()); } try{ - test2(); + test2(); }catch(\Exception $e){ - var_dump($e->getMessage()); + var_dump($e->getMessage()); } ?> --EXPECT-- diff --git a/Zend/tests/bug80037.phpt b/Zend/tests/bug80037.phpt index 7bbe6128b3669..d6e057546b381 100644 --- a/Zend/tests/bug80037.phpt +++ b/Zend/tests/bug80037.phpt @@ -5,21 +5,21 @@ Bug #80037: Typed property must not be accessed before initialization when __get final class A { - public string $a; + public string $a; - public static function fromArray(array $props): self - { - $me = new static; - foreach ($props as $k => &$v) { - $me->{$k} = &$v; # try to remove & - } - return $me; - } + public static function fromArray(array $props): self + { + $me = new static; + foreach ($props as $k => &$v) { + $me->{$k} = &$v; # try to remove & + } + return $me; + } - public function __get($name) - { - throw new \LogicException("Property '$name' is not defined."); - } + public function __get($name) + { + throw new \LogicException("Property '$name' is not defined."); + } } var_dump(A::fromArray(['a' => 'foo'])); diff --git a/Zend/tests/dval_to_lval_32.phpt b/Zend/tests/dval_to_lval_32.phpt index 9aeea650605e5..89acf9076ad75 100644 --- a/Zend/tests/dval_to_lval_32.phpt +++ b/Zend/tests/dval_to_lval_32.phpt @@ -3,7 +3,7 @@ zend_dval_to_lval preserves low bits (32 bit long) --SKIPIF-- --FILE-- --FILE-- current()); diff --git a/Zend/tests/magic_methods_011.phpt b/Zend/tests/magic_methods_011.phpt index 5ce536ae403cb..7cd4d4bee1d26 100644 --- a/Zend/tests/magic_methods_011.phpt +++ b/Zend/tests/magic_methods_011.phpt @@ -3,7 +3,7 @@ __set first parameter should be a string when typed --FILE-- --EXPECTF-- diff --git a/Zend/tests/magic_methods_012.phpt b/Zend/tests/magic_methods_012.phpt index 4ac3952c4d872..450c7b229577a 100644 --- a/Zend/tests/magic_methods_012.phpt +++ b/Zend/tests/magic_methods_012.phpt @@ -3,7 +3,7 @@ __get first parameter should be a string when typed --FILE-- --EXPECTF-- diff --git a/Zend/tests/magic_methods_013.phpt b/Zend/tests/magic_methods_013.phpt index 03a4fb7ea7ffd..95614779d5666 100644 --- a/Zend/tests/magic_methods_013.phpt +++ b/Zend/tests/magic_methods_013.phpt @@ -3,7 +3,7 @@ __isset first parameter should be a string when typed --FILE-- --EXPECTF-- diff --git a/Zend/tests/magic_methods_014.phpt b/Zend/tests/magic_methods_014.phpt index 783b6003dc846..8a1aa6388d851 100644 --- a/Zend/tests/magic_methods_014.phpt +++ b/Zend/tests/magic_methods_014.phpt @@ -3,7 +3,7 @@ __unset first parameter should be a string when typed --FILE-- --EXPECTF-- diff --git a/Zend/tests/magic_methods_015.phpt b/Zend/tests/magic_methods_015.phpt index d5e93c9ef074e..3b7cf696182d5 100644 --- a/Zend/tests/magic_methods_015.phpt +++ b/Zend/tests/magic_methods_015.phpt @@ -3,7 +3,7 @@ __call first parameter should be a string typed --FILE-- --EXPECTF-- diff --git a/Zend/tests/magic_methods_016.phpt b/Zend/tests/magic_methods_016.phpt index a0ac45e42aebf..c456afa12783e 100644 --- a/Zend/tests/magic_methods_016.phpt +++ b/Zend/tests/magic_methods_016.phpt @@ -3,7 +3,7 @@ __call second parameter should be an array when typed --FILE-- --EXPECTF-- diff --git a/Zend/tests/magic_methods_017.phpt b/Zend/tests/magic_methods_017.phpt index 9afb089f311c0..0ce622712364b 100644 --- a/Zend/tests/magic_methods_017.phpt +++ b/Zend/tests/magic_methods_017.phpt @@ -3,7 +3,7 @@ __callStatic first parameter should be a string typed --FILE-- --EXPECTF-- diff --git a/Zend/tests/magic_methods_018.phpt b/Zend/tests/magic_methods_018.phpt index faddd3cca11d5..914a8898082c8 100644 --- a/Zend/tests/magic_methods_018.phpt +++ b/Zend/tests/magic_methods_018.phpt @@ -3,7 +3,7 @@ __callStatic second parameter should be an array typed --FILE-- --EXPECTF-- diff --git a/Zend/tests/magic_methods_019.phpt b/Zend/tests/magic_methods_019.phpt index 85823e6c40291..f0a5fabff29d7 100644 --- a/Zend/tests/magic_methods_019.phpt +++ b/Zend/tests/magic_methods_019.phpt @@ -3,7 +3,7 @@ __unserialize first parameter must be an array --FILE-- --EXPECTF-- diff --git a/Zend/tests/magic_methods_020.phpt b/Zend/tests/magic_methods_020.phpt index 45e144cac793c..4efaf6fb18a82 100644 --- a/Zend/tests/magic_methods_020.phpt +++ b/Zend/tests/magic_methods_020.phpt @@ -4,7 +4,7 @@ __set_state first parameter must be an array diff --git a/Zend/tests/magic_methods_inheritance_rules.phpt b/Zend/tests/magic_methods_inheritance_rules.phpt index e91fdc7848097..6bdcafb1bfb5a 100644 --- a/Zend/tests/magic_methods_inheritance_rules.phpt +++ b/Zend/tests/magic_methods_inheritance_rules.phpt @@ -3,65 +3,65 @@ Magic Methods inheritance rules --FILE-- --EXPECTF-- diff --git a/Zend/tests/magic_methods_inheritance_rules_non_trivial_02.phpt b/Zend/tests/magic_methods_inheritance_rules_non_trivial_02.phpt index 72c20a788532d..2835b46830952 100644 --- a/Zend/tests/magic_methods_inheritance_rules_non_trivial_02.phpt +++ b/Zend/tests/magic_methods_inheritance_rules_non_trivial_02.phpt @@ -3,15 +3,15 @@ Magic Methods inheritance rules on a non-trivial class hierarchy --FILE-- --EXPECTF-- diff --git a/Zend/tests/magic_methods_sleep.phpt b/Zend/tests/magic_methods_sleep.phpt index 593d8fc037bf4..89baac4699d13 100644 --- a/Zend/tests/magic_methods_sleep.phpt +++ b/Zend/tests/magic_methods_sleep.phpt @@ -3,7 +3,7 @@ __sleep cannot take arguments --FILE-- --EXPECTF-- diff --git a/Zend/tests/magic_methods_wakeup.phpt b/Zend/tests/magic_methods_wakeup.phpt index f4edb33576bc5..8d72b6be866ad 100644 --- a/Zend/tests/magic_methods_wakeup.phpt +++ b/Zend/tests/magic_methods_wakeup.phpt @@ -3,7 +3,7 @@ __wakeup cannot take arguments --FILE-- --EXPECTF-- diff --git a/Zend/tests/return_types/033.phpt b/Zend/tests/return_types/033.phpt index e725465253fda..1eb5171cb08ef 100644 --- a/Zend/tests/return_types/033.phpt +++ b/Zend/tests/return_types/033.phpt @@ -3,7 +3,7 @@ __set can only declare void return --FILE-- --EXPECTF-- diff --git a/Zend/tests/return_types/034.phpt b/Zend/tests/return_types/034.phpt index 50324208cbc9a..80a57cf1e8cd2 100644 --- a/Zend/tests/return_types/034.phpt +++ b/Zend/tests/return_types/034.phpt @@ -3,7 +3,7 @@ __isset can only declare a boolean return type --FILE-- --EXPECTF-- diff --git a/Zend/tests/return_types/035.phpt b/Zend/tests/return_types/035.phpt index fa2d331f55e6e..359790b82eab8 100644 --- a/Zend/tests/return_types/035.phpt +++ b/Zend/tests/return_types/035.phpt @@ -3,7 +3,7 @@ __unset can only declare void return --FILE-- --EXPECTF-- diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index 4e2351869d310..177cf5c75d199 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -262,7 +262,7 @@ static void zend_generator_dtor_storage(zend_object *object) /* {{{ */ OBJ_RELEASE(&parent->std); /* Reset for resuming in finally */ generator->node.parent = NULL; - generator->node.ptr.root = generator; + generator->node.ptr.root = generator; } } diff --git a/ext/com_dotnet/tests/bug66431_0.phpt b/ext/com_dotnet/tests/bug66431_0.phpt index 4a0062a7e13c2..5f9bc5c0b0bb5 100644 --- a/ext/com_dotnet/tests/bug66431_0.phpt +++ b/ext/com_dotnet/tests/bug66431_0.phpt @@ -33,7 +33,7 @@ if (!$result) { $fpath = str_replace("/", "\\", __DIR__ . "/bug66431.txt"); if (file_exists($fpath)) { - unlink($fpath); + unlink($fpath); } ?> --EXPECT-- diff --git a/ext/com_dotnet/tests/bug66431_1.phpt b/ext/com_dotnet/tests/bug66431_1.phpt index e99131d27b1e1..7ebf16a10d1da 100644 --- a/ext/com_dotnet/tests/bug66431_1.phpt +++ b/ext/com_dotnet/tests/bug66431_1.phpt @@ -5,9 +5,9 @@ Bug #66431 Special Character via COM Interface (CP_UTF8), Application.Word if (!extension_loaded("com_dotnet")){ echo "skip COM/.Net support not present"; } try { - new COM("word.application", NULL, CP_UTF8); + new COM("word.application", NULL, CP_UTF8); } catch (Exception $e) { - die('skip ' . $e->getMessage()); + die('skip ' . $e->getMessage()); } ?> @@ -51,7 +51,7 @@ if (!$result) { $fpath = str_replace("/", "\\", __DIR__ . "/bug66431.docx"); if (file_exists($fpath)) { - unlink($fpath); + unlink($fpath); } ?> --EXPECT-- diff --git a/ext/com_dotnet/tests/variants_x64.phpt b/ext/com_dotnet/tests/variants_x64.phpt index 88f9f3e12616e..6a1b7e1c12925 100644 --- a/ext/com_dotnet/tests/variants_x64.phpt +++ b/ext/com_dotnet/tests/variants_x64.phpt @@ -5,7 +5,7 @@ COM: General variant tests if (!extension_loaded("com_dotnet")) print "skip COM/.Net support not present"; if (8 != PHP_INT_SIZE) print "skip x64 only"; if ((string) variant_cat(new VARIANT(false), new VARIANT(0.5)) != 'False0.5') - print "skip English locale only"; + print "skip English locale only"; ?> --FILE-- --FILE-- diff --git a/ext/curl/tests/bug48514.phpt b/ext/curl/tests/bug48514.phpt index 759e4bc1be163..12dcdd498b0c0 100644 --- a/ext/curl/tests/bug48514.phpt +++ b/ext/curl/tests/bug48514.phpt @@ -4,7 +4,7 @@ Bug #48514 (cURL extension uses same resource name for simple and multi APIs) diff --git a/ext/curl/tests/bug52827.phpt b/ext/curl/tests/bug52827.phpt index 8fbcad627d4ef..3b9aabf92cdc1 100644 --- a/ext/curl/tests/bug52827.phpt +++ b/ext/curl/tests/bug52827.phpt @@ -4,7 +4,7 @@ Bug #52827 (curl_setopt with CURLOPT_STDERR erroneously increments the resource diff --git a/ext/curl/tests/bug61948.phpt b/ext/curl/tests/bug61948.phpt index 316fa4d0e7315..9b795241f26b2 100644 --- a/ext/curl/tests/bug61948.phpt +++ b/ext/curl/tests/bug61948.phpt @@ -18,9 +18,9 @@ Bug #61948 (CURLOPT_COOKIEFILE '' raises open_basedir restriction) ?> --CLEAN-- --EXPECTF-- %a diff --git a/ext/curl/tests/bug71523.phpt b/ext/curl/tests/bug71523.phpt index 2d947febecb7b..3252f75f4613b 100644 --- a/ext/curl/tests/bug71523.phpt +++ b/ext/curl/tests/bug71523.phpt @@ -3,7 +3,7 @@ Bug #71523 (Copied handle with new option CURLOPT_HTTPHEADER crashes while curl_ --SKIPIF-- --FILE-- diff --git a/ext/curl/tests/bug72202.phpt b/ext/curl/tests/bug72202.phpt index bf04d9faea501..5b2ebfa2cccc4 100644 --- a/ext/curl/tests/bug72202.phpt +++ b/ext/curl/tests/bug72202.phpt @@ -3,7 +3,7 @@ Bug #72202 (curl_close doesn't close cURL handle) --SKIPIF-- --FILE-- diff --git a/ext/curl/tests/bug76675.phpt b/ext/curl/tests/bug76675.phpt index e59aabc7c3407..5d36abfdd671b 100644 --- a/ext/curl/tests/bug76675.phpt +++ b/ext/curl/tests/bug76675.phpt @@ -4,11 +4,11 @@ Bug #76675 (Segfault with H2 server push write/writeheader handlers) --FILE-- diff --git a/ext/curl/tests/bug77535.phpt b/ext/curl/tests/bug77535.phpt index 95eec344a894e..b1d8f4d4da51a 100644 --- a/ext/curl/tests/bug77535.phpt +++ b/ext/curl/tests/bug77535.phpt @@ -4,11 +4,11 @@ Bug #77535 (Invalid callback, h2 server push) --FILE-- diff --git a/ext/curl/tests/bug77946.phpt b/ext/curl/tests/bug77946.phpt index c983a7761747f..2a0dcd62a3802 100644 --- a/ext/curl/tests/bug77946.phpt +++ b/ext/curl/tests/bug77946.phpt @@ -4,7 +4,7 @@ Bug #77946 (Errored cURL resources returned by curl_multi_info_read() must be co diff --git a/ext/curl/tests/bug79741.phpt b/ext/curl/tests/bug79741.phpt index 3f5a4801b19c2..5fddd30c2769c 100644 --- a/ext/curl/tests/bug79741.phpt +++ b/ext/curl/tests/bug79741.phpt @@ -4,7 +4,7 @@ Bug #79741: curl_setopt CURLOPT_POSTFIELDS asserts on object with declared prope --SKIPIF-- --FILE-- --SKIPIF-- --FILE-- = 7.50.0"); + exit("skip: test works only with curl >= 7.50.0"); } ?> --FILE-- diff --git a/ext/curl/tests/curl_basic_024.phpt b/ext/curl/tests/curl_basic_024.phpt index 6875d4f02a25d..4037a0bc12636 100644 --- a/ext/curl/tests/curl_basic_024.phpt +++ b/ext/curl/tests/curl_basic_024.phpt @@ -4,7 +4,7 @@ Test curl_getinfo() function with CURLINFO_* from curl >= 7.52.0 = 7.52.0"); + exit("skip: test works only with curl >= 7.52.0"); } ?> --FILE-- diff --git a/ext/curl/tests/curl_copy_handle_basic.phpt b/ext/curl/tests/curl_copy_handle_basic.phpt index 0aa58dbcf869e..945768436c5fe 100644 --- a/ext/curl/tests/curl_copy_handle_basic.phpt +++ b/ext/curl/tests/curl_copy_handle_basic.phpt @@ -5,7 +5,7 @@ Francesco Fullone ff@ideato.it #PHPTestFest Cesena Italia on 2009-06-20 --SKIPIF-- --FILE-- --FILE-- --DESCRIPTION-- the only way to test if a option is setten on a curl handle is using the curl_getinfo() function. diff --git a/ext/curl/tests/curl_escape.phpt b/ext/curl/tests/curl_escape.phpt index 015b010a1ca2cbf56a4938fb1bcc9558b26b260e..91dff3f0563399af12a60edb592973a8b1b88aba 100644 GIT binary patch delta 17 XcmZ3_x`}mz0V9h75NtMNtYZWKD;fkf delta 14 VcmdnQx}J4|0V5;lW)sFbMgSn11HJ$N diff --git a/ext/curl/tests/curl_file_serialize.phpt b/ext/curl/tests/curl_file_serialize.phpt index 7748272b7610d..7776a455a402f 100644 --- a/ext/curl/tests/curl_file_serialize.phpt +++ b/ext/curl/tests/curl_file_serialize.phpt @@ -3,7 +3,7 @@ CURL file uploading --SKIPIF-- --FILE-- diff --git a/ext/curl/tests/curl_multi_errno_strerror_001.phpt b/ext/curl/tests/curl_multi_errno_strerror_001.phpt index cc8e175460a51..d0c237ef0c72e 100644 --- a/ext/curl/tests/curl_multi_errno_strerror_001.phpt +++ b/ext/curl/tests/curl_multi_errno_strerror_001.phpt @@ -3,7 +3,7 @@ curl_multi_errno and curl_multi_strerror basic test --SKIPIF-- --FILE-- diff --git a/ext/curl/tests/curl_multi_setopt_basic001.phpt b/ext/curl/tests/curl_multi_setopt_basic001.phpt index 25c3b4962f5c6..7620c421e4cdd 100644 --- a/ext/curl/tests/curl_multi_setopt_basic001.phpt +++ b/ext/curl/tests/curl_multi_setopt_basic001.phpt @@ -3,7 +3,7 @@ curl_multi_setopt basic test --SKIPIF-- --FILE-- diff --git a/ext/curl/tests/curl_multi_strerror_001.phpt b/ext/curl/tests/curl_multi_strerror_001.phpt index 3c2edb988de6b..7d1b426a258a4 100644 --- a/ext/curl/tests/curl_multi_strerror_001.phpt +++ b/ext/curl/tests/curl_multi_strerror_001.phpt @@ -3,7 +3,7 @@ curl_multi_strerror basic test --SKIPIF-- --FILE-- diff --git a/ext/curl/tests/curl_share_errno_strerror_001.phpt b/ext/curl/tests/curl_share_errno_strerror_001.phpt index 3a24121b57ee3..d8f18eb76fd9c 100644 --- a/ext/curl/tests/curl_share_errno_strerror_001.phpt +++ b/ext/curl/tests/curl_share_errno_strerror_001.phpt @@ -3,7 +3,7 @@ curl_share_errno and curl_share_strerror basic test --SKIPIF-- --FILE-- diff --git a/ext/curl/tests/curl_share_setopt_basic001.phpt b/ext/curl/tests/curl_share_setopt_basic001.phpt index d53ae4ff8e963..476ea688250b4 100644 --- a/ext/curl/tests/curl_share_setopt_basic001.phpt +++ b/ext/curl/tests/curl_share_setopt_basic001.phpt @@ -3,7 +3,7 @@ curl_share_setopt basic test --SKIPIF-- --FILE-- diff --git a/ext/curl/tests/curl_strerror_001.phpt b/ext/curl/tests/curl_strerror_001.phpt index 06342598962d9..85a13271c190a 100644 --- a/ext/curl/tests/curl_strerror_001.phpt +++ b/ext/curl/tests/curl_strerror_001.phpt @@ -3,7 +3,7 @@ curl_strerror basic test --SKIPIF-- --FILE-- diff --git a/ext/date/tests/002.phpt b/ext/date/tests/002.phpt index 36dc43d7605b6..65e8228149338 100644 --- a/ext/date/tests/002.phpt +++ b/ext/date/tests/002.phpt @@ -3,7 +3,7 @@ strtotime() function --SKIPIF-- --FILE-- diff --git a/ext/date/tests/bug13142.phpt b/ext/date/tests/bug13142.phpt index 80d4fa82fc453..63eba795d866e 100644 --- a/ext/date/tests/bug13142.phpt +++ b/ext/date/tests/bug13142.phpt @@ -5,10 +5,10 @@ date.timezone=US/Eastern --SKIPIF-- --FILE-- diff --git a/ext/date/tests/bug26317.phpt b/ext/date/tests/bug26317.phpt index 38c724ed57017..bfd416fc5e308 100644 --- a/ext/date/tests/bug26317.phpt +++ b/ext/date/tests/bug26317.phpt @@ -5,7 +5,7 @@ date.timezone=GMT0 --SKIPIF-- --FILE-- diff --git a/ext/date/tests/bug26320.phpt b/ext/date/tests/bug26320.phpt index 563e39ab30601..b8d4fc1d2a3e2 100644 --- a/ext/date/tests/bug26320.phpt +++ b/ext/date/tests/bug26320.phpt @@ -5,7 +5,7 @@ date.timezone=GMT0 --SKIPIF-- --FILE-- diff --git a/ext/date/tests/date_default_timezone_get-1.phpt b/ext/date/tests/date_default_timezone_get-1.phpt index 32c066c1ca7ca..fc466d411d1ec 100644 --- a/ext/date/tests/date_default_timezone_get-1.phpt +++ b/ext/date/tests/date_default_timezone_get-1.phpt @@ -2,7 +2,7 @@ date_default_timezone_get() function [1] --SKIPIF-- --INI-- date.timezone= diff --git a/ext/date/tests/date_default_timezone_get-2.phpt b/ext/date/tests/date_default_timezone_get-2.phpt index cf7478c90b502..44d94cd76f2a3 100644 --- a/ext/date/tests/date_default_timezone_get-2.phpt +++ b/ext/date/tests/date_default_timezone_get-2.phpt @@ -2,7 +2,7 @@ date_default_timezone_get() function [2] --SKIPIF-- --INI-- date.timezone= diff --git a/ext/date/tests/strftime_variation22.phpt b/ext/date/tests/strftime_variation22.phpt index b1c107ba78c08..ab0089e7f75b1 100644 --- a/ext/date/tests/strftime_variation22.phpt +++ b/ext/date/tests/strftime_variation22.phpt @@ -6,7 +6,7 @@ if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') { die("skip Test is not valid for Windows"); } if(!setlocale(LC_ALL, "POSIX")) { - die("skip Locale POSIX is needed by test and is not available"); + die("skip Locale POSIX is needed by test and is not available"); } ?> --FILE-- diff --git a/ext/dba/tests/bug36436.phpt b/ext/dba/tests/bug36436.phpt index fe625b62bc6b4..a7a87c70c3474 100644 --- a/ext/dba/tests/bug36436.phpt +++ b/ext/dba/tests/bug36436.phpt @@ -2,8 +2,8 @@ Bug #36436 (DBA problem with Berkeley DB4) --SKIPIF-- --FILE-- --CLEAN-- --EXPECTF-- resource(%d) of type (dba persistent) diff --git a/ext/dba/tests/bug38698.phpt b/ext/dba/tests/bug38698.phpt index fe4c68aa80fea..364d54d00496a 100644 --- a/ext/dba/tests/bug38698.phpt +++ b/ext/dba/tests/bug38698.phpt @@ -2,8 +2,8 @@ Bug #38698 (Bug #38698 for some keys cdbmake creates corrupted db and cdb can't read valid db) --SKIPIF-- --FILE-- --FILE-- --CLEAN-- --EXPECT-- bool(false) diff --git a/ext/dba/tests/bug49125.phpt b/ext/dba/tests/bug49125.phpt index 70f59c97c91a2..7e46ea9f1f04c 100644 --- a/ext/dba/tests/bug49125.phpt +++ b/ext/dba/tests/bug49125.phpt @@ -2,8 +2,8 @@ Bug #49125 (Error in dba_exists C code) --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- bool(true) diff --git a/ext/dba/tests/bug65708.phpt b/ext/dba/tests/bug65708.phpt index 8bec60a543fc2..dff291a39d263 100644 --- a/ext/dba/tests/bug65708.phpt +++ b/ext/dba/tests/bug65708.phpt @@ -2,7 +2,7 @@ Bug #65708 (dba functions cast $key param to string in-place, bypassing copy on write) --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- integer diff --git a/ext/dba/tests/bug72157.phpt b/ext/dba/tests/bug72157.phpt index 71fa8730b89ac..490e9116d153e 100644 --- a/ext/dba/tests/bug72157.phpt +++ b/ext/dba/tests/bug72157.phpt @@ -2,7 +2,7 @@ Bug #72157 (use-after-free caused by dba_open) --SKIPIF-- --FILE-- --FILE-- --CLEAN-- --EXPECTF-- database handler: %s diff --git a/ext/dba/tests/dba002.phpt b/ext/dba/tests/dba002.phpt index c0432c4599bc2..2aba823af25c6 100644 --- a/ext/dba/tests/dba002.phpt +++ b/ext/dba/tests/dba002.phpt @@ -2,8 +2,8 @@ DBA Insert/Fetch Test --SKIPIF-- --FILE-- --CLEAN-- --EXPECTF-- database handler: %s diff --git a/ext/dba/tests/dba003.phpt b/ext/dba/tests/dba003.phpt index 55d4ce9fe010a..dd08f86ed571f 100644 --- a/ext/dba/tests/dba003.phpt +++ b/ext/dba/tests/dba003.phpt @@ -2,8 +2,8 @@ DBA Insert/Replace/Fetch Test --SKIPIF-- --FILE-- --CLEAN-- --EXPECTF-- database handler: %s diff --git a/ext/dba/tests/dba004.phpt b/ext/dba/tests/dba004.phpt index 3846ccfd2918e..eebbc04ffb9ec 100644 --- a/ext/dba/tests/dba004.phpt +++ b/ext/dba/tests/dba004.phpt @@ -2,8 +2,8 @@ DBA Multiple Insert/Fetch Test --SKIPIF-- --FILE-- --CLEAN-- --EXPECTF-- database handler: %s diff --git a/ext/dba/tests/dba005.phpt b/ext/dba/tests/dba005.phpt index 0f5767988dd95..bde23a495defa 100644 --- a/ext/dba/tests/dba005.phpt +++ b/ext/dba/tests/dba005.phpt @@ -2,8 +2,8 @@ DBA FirstKey/NextKey Loop Test With 5 Items --SKIPIF-- --FILE-- --CLEAN-- --EXPECTF-- database handler: %s diff --git a/ext/dba/tests/dba006.phpt b/ext/dba/tests/dba006.phpt index 1264ccf89955e..dfe93f874db81 100644 --- a/ext/dba/tests/dba006.phpt +++ b/ext/dba/tests/dba006.phpt @@ -2,8 +2,8 @@ DBA FirstKey/NextKey with 2 deletes --SKIPIF-- --FILE-- --CLEAN-- --EXPECTF-- database handler: %s diff --git a/ext/dba/tests/dba007.phpt b/ext/dba/tests/dba007.phpt index bb71ad273e40e..b617c34e9b6d6 100644 --- a/ext/dba/tests/dba007.phpt +++ b/ext/dba/tests/dba007.phpt @@ -2,9 +2,9 @@ DBA Multiple File Creation Test --SKIPIF-- --FILE-- --CLEAN-- --EXPECTF-- database handler: %s diff --git a/ext/dba/tests/dba009.phpt b/ext/dba/tests/dba009.phpt index 4ca9b0ed96ce4..3f23c9748c2e3 100644 --- a/ext/dba/tests/dba009.phpt +++ b/ext/dba/tests/dba009.phpt @@ -2,8 +2,8 @@ DBA dba_popen Test --SKIPIF-- --FILE-- --CLEAN-- --EXPECTF-- database handler: %s diff --git a/ext/dba/tests/dba010.phpt b/ext/dba/tests/dba010.phpt index f5cb08871a936..1b0d6172aa3c6 100644 --- a/ext/dba/tests/dba010.phpt +++ b/ext/dba/tests/dba010.phpt @@ -2,8 +2,8 @@ DBA with array keys --SKIPIF-- --FILE-- --CLEAN-- --EXPECTF-- database handler: %s diff --git a/ext/dba/tests/dba015.phpt b/ext/dba/tests/dba015.phpt index 42a448dde99d5..1da13070492b4 100644 --- a/ext/dba/tests/dba015.phpt +++ b/ext/dba/tests/dba015.phpt @@ -50,7 +50,7 @@ echo dba_fetch("key2", $db_file1), "\n"; ?> --CLEAN-- --EXPECTF-- database handler: flatfile diff --git a/ext/dba/tests/dba016.phpt b/ext/dba/tests/dba016.phpt index 5d2a35990cdfb..e670ec86b96b1 100644 --- a/ext/dba/tests/dba016.phpt +++ b/ext/dba/tests/dba016.phpt @@ -17,7 +17,7 @@ $db_file1 = dba_popen($db_filename, 'n-t', 'flatfile'); ?> --CLEAN-- --EXPECTF-- database handler: flatfile diff --git a/ext/dba/tests/dba_cdb.phpt b/ext/dba/tests/dba_cdb.phpt index 956483f5f35f3..7ed9a6487b9a9 100644 --- a/ext/dba/tests/dba_cdb.phpt +++ b/ext/dba/tests/dba_cdb.phpt @@ -2,9 +2,9 @@ DBA CDB handler test --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- database handler: cdb diff --git a/ext/dba/tests/dba_cdb_make.phpt b/ext/dba/tests/dba_cdb_make.phpt index 21969db0743a8..c15f49a805418 100644 --- a/ext/dba/tests/dba_cdb_make.phpt +++ b/ext/dba/tests/dba_cdb_make.phpt @@ -2,9 +2,9 @@ DBA CDB_MAKE handler test --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- database handler: cdb_make diff --git a/ext/dba/tests/dba_cdb_read.phpt b/ext/dba/tests/dba_cdb_read.phpt index 39fc85e454cac..77afb95661d9a 100644 --- a/ext/dba/tests/dba_cdb_read.phpt +++ b/ext/dba/tests/dba_cdb_read.phpt @@ -2,8 +2,8 @@ DBA CDB handler test (read only) --SKIPIF-- --FILE-- --FILE-- --FILE-- --FILE-- --CLEAN-- --XFAIL-- Test 6 crashes with dba pointer of NULL, bug http://bugs.php.net/bug.php?id=51278 diff --git a/ext/dba/tests/dba_dbm.phpt b/ext/dba/tests/dba_dbm.phpt index 47bbae28c0757..6fc649d29c445 100644 --- a/ext/dba/tests/dba_dbm.phpt +++ b/ext/dba/tests/dba_dbm.phpt @@ -2,8 +2,8 @@ DBA DBM handler test --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- database handler: dbm diff --git a/ext/dba/tests/dba_flatfile.phpt b/ext/dba/tests/dba_flatfile.phpt index 41bd0f891d307..c2022895ab70d 100644 --- a/ext/dba/tests/dba_flatfile.phpt +++ b/ext/dba/tests/dba_flatfile.phpt @@ -2,8 +2,8 @@ DBA FlatFile handler test --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- database handler: flatfile diff --git a/ext/dba/tests/dba_gdbm.phpt b/ext/dba/tests/dba_gdbm.phpt index ae4216d7fd5c3..f8174dde58ee7 100644 --- a/ext/dba/tests/dba_gdbm.phpt +++ b/ext/dba/tests/dba_gdbm.phpt @@ -2,8 +2,8 @@ DBA GDBM handler test --SKIPIF-- --FILE-- --FILE-- --CLEAN-- --EXPECT-- database handler: inifile diff --git a/ext/dba/tests/dba_lmdb.phpt b/ext/dba/tests/dba_lmdb.phpt index a97244bf36918..b23a2686f8751 100644 --- a/ext/dba/tests/dba_lmdb.phpt +++ b/ext/dba/tests/dba_lmdb.phpt @@ -2,8 +2,8 @@ DBA LMDB handler test --SKIPIF-- --FILE-- --CLEAN-- --EXPECTF-- database handler: lmdb diff --git a/ext/dba/tests/dba_ndbm.phpt b/ext/dba/tests/dba_ndbm.phpt index 74f316e1908e3..0cd00bbab191e 100644 --- a/ext/dba/tests/dba_ndbm.phpt +++ b/ext/dba/tests/dba_ndbm.phpt @@ -2,8 +2,8 @@ DBA NDBM handler test --SKIPIF-- --FILE-- --FILE-- --CLEAN-- --EXPECT-- database handler: flatfile diff --git a/ext/dba/tests/dba_qdbm.phpt b/ext/dba/tests/dba_qdbm.phpt index efe34653b3f55..940b929bdf284 100644 --- a/ext/dba/tests/dba_qdbm.phpt +++ b/ext/dba/tests/dba_qdbm.phpt @@ -2,8 +2,8 @@ DBA QDBM handler test --SKIPIF-- --FILE-- --CLEAN-- --EXPECTF-- database handler: qdbm diff --git a/ext/dba/tests/dba_split.phpt b/ext/dba/tests/dba_split.phpt index a85798474182b..246018715033b 100644 --- a/ext/dba/tests/dba_split.phpt +++ b/ext/dba/tests/dba_split.phpt @@ -2,8 +2,8 @@ DBA Split Test --SKIPIF-- --FILE-- --FILE-- --CLEAN-- --EXPECT-- database handler: flatfile diff --git a/ext/dba/tests/dba_tcadb.phpt b/ext/dba/tests/dba_tcadb.phpt index 0d7c32f06c6ac..f8ff71cb9eadc 100644 --- a/ext/dba/tests/dba_tcadb.phpt +++ b/ext/dba/tests/dba_tcadb.phpt @@ -2,8 +2,8 @@ DBA TCADB handler test --SKIPIF-- --FILE-- save($temp_filename) . ' bytes'; // Wrote: 72 bytes ?> --CLEAN-- --EXPECT-- Wrote: 72 bytes diff --git a/ext/enchant/tests/broker_describe.phpt b/ext/enchant/tests/broker_describe.phpt index 07134ae50fa2b..93ec1fafdc820 100644 --- a/ext/enchant/tests/broker_describe.phpt +++ b/ext/enchant/tests/broker_describe.phpt @@ -5,21 +5,21 @@ marcosptf - --SKIPIF-- --SKIPIF-- = info->valid_start && end <= info->valid_end; } -#ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG static inline int exif_offset_info_length(const exif_offset_info *info) { return info->valid_end - info->valid_start; diff --git a/ext/exif/tests/exif003.phpt b/ext/exif/tests/exif003.phpt index 9d66e35ddc56a..6c043af4e2fdb 100644 --- a/ext/exif/tests/exif003.phpt +++ b/ext/exif/tests/exif003.phpt @@ -2,9 +2,9 @@ Check for exif_read_data, Unicode user comment --SKIPIF-- --INI-- output_handler= diff --git a/ext/exif/tests/exif004.phpt b/ext/exif/tests/exif004.phpt index 2b2e978d528df..1b371ff81f886 100644 --- a/ext/exif/tests/exif004.phpt +++ b/ext/exif/tests/exif004.phpt @@ -2,9 +2,9 @@ Check for exif_read_data, Unicode WinXP tags --SKIPIF-- --INI-- output_handler= diff --git a/ext/ffi/tests/100.phpt b/ext/ffi/tests/100.phpt index 634d8d44362a7..62cd0b2bdb602 100644 --- a/ext/ffi/tests/100.phpt +++ b/ext/ffi/tests/100.phpt @@ -5,9 +5,9 @@ FFI 100: PHP symbols --INI-- diff --git a/ext/ffi/tests/101.phpt b/ext/ffi/tests/101.phpt index 3acc98f035a59..d3a81cbfd1bdc 100644 --- a/ext/ffi/tests/101.phpt +++ b/ext/ffi/tests/101.phpt @@ -5,9 +5,9 @@ FFI 101: PHP symbols (function address) --INI-- diff --git a/ext/ffi/tests/200.phpt b/ext/ffi/tests/200.phpt index 39dcbdf71a6b7..0fba3d4e16175 100644 --- a/ext/ffi/tests/200.phpt +++ b/ext/ffi/tests/200.phpt @@ -5,9 +5,9 @@ FFI 200: PHP callbacks --INI-- diff --git a/ext/ffi/tests/bug77632.phpt b/ext/ffi/tests/bug77632.phpt index 314424548a0fa..df9078b723486 100644 --- a/ext/ffi/tests/bug77632.phpt +++ b/ext/ffi/tests/bug77632.phpt @@ -4,9 +4,9 @@ Bug #77632 (FFI Segfaults When Called With Variadics) --INI-- diff --git a/ext/ffi/tests/bug77632b.phpt b/ext/ffi/tests/bug77632b.phpt index 2509aa9bae8c8..c0fee9ed4f531 100644 --- a/ext/ffi/tests/bug77632b.phpt +++ b/ext/ffi/tests/bug77632b.phpt @@ -5,9 +5,9 @@ Bug #77632 (FFI function pointers with variadics) require_once('skipif.inc'); require_once('utils.inc'); try { - FFI::cdef("extern void *zend_printf;", ffi_get_php_dll_name()); + FFI::cdef("extern void *zend_printf;", ffi_get_php_dll_name()); } catch (Throwable $_) { - die('skip PHP symbols not available'); + die('skip PHP symbols not available'); } ?> --INI-- diff --git a/ext/ffi/tests/bug77706.phpt b/ext/ffi/tests/bug77706.phpt index 87ef584d51284..5a44d5855371b 100644 --- a/ext/ffi/tests/bug77706.phpt +++ b/ext/ffi/tests/bug77706.phpt @@ -4,9 +4,9 @@ Bug #77632 (FFI Segfaults When Called With Variadics) --INI-- diff --git a/ext/ffi/tests/bug77768.phpt b/ext/ffi/tests/bug77768.phpt index 6c29db59d7cef..204a6e4f8cdb9 100644 --- a/ext/ffi/tests/bug77768.phpt +++ b/ext/ffi/tests/bug77768.phpt @@ -4,9 +4,9 @@ Bug #77768 (Redeclaration of builtin types and repeated declarations) --INI-- diff --git a/ext/fileinfo/tests/bug57547.phpt b/ext/fileinfo/tests/bug57547.phpt index 184ea6e018627..a2375005017fe 100644 --- a/ext/fileinfo/tests/bug57547.phpt +++ b/ext/fileinfo/tests/bug57547.phpt @@ -3,7 +3,7 @@ Bug #57547 Settings options on file doesn't give same result as constructor opti --SKIPIF-- --FILE-- file($f)); +++DONE+++ --CLEAN-- --EXPECT-- string(15) "video/quicktime" diff --git a/ext/fileinfo/tests/bug68731.phpt b/ext/fileinfo/tests/bug68731.phpt index c15b83c951f17..5ae63ee11f775 100644 --- a/ext/fileinfo/tests/bug68731.phpt +++ b/ext/fileinfo/tests/bug68731.phpt @@ -3,7 +3,7 @@ Bug #68731 finfo_buffer doesn't extract the correct mime with some gifs --SKIPIF-- --CLEAN-- --EXPECT-- string(10) "text/plain" diff --git a/ext/fileinfo/tests/bug71527-mb.phpt b/ext/fileinfo/tests/bug71527-mb.phpt index 272cdba702fb4..ea32a8122a923 100644 --- a/ext/fileinfo/tests/bug71527-mb.phpt +++ b/ext/fileinfo/tests/bug71527-mb.phpt @@ -3,7 +3,7 @@ Bug #71527 Buffer over-write in finfo_open with malformed magic file --SKIPIF-- --FILE-- --FILE-- --INI-- pcre.jit=0 diff --git a/ext/fileinfo/tests/cve-2014-3538.phpt b/ext/fileinfo/tests/cve-2014-3538.phpt index 0ff2a68685b7e..4d571b1b3f8b7 100644 --- a/ext/fileinfo/tests/cve-2014-3538.phpt +++ b/ext/fileinfo/tests/cve-2014-3538.phpt @@ -3,9 +3,9 @@ Bug #66731: file: extensive backtracking --SKIPIF-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- 45) --SKIPIF-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- diff --git a/ext/gd/tests/bug43073.phpt b/ext/gd/tests/bug43073.phpt index 74641496de970..4257f6c1a7d8f 100644 --- a/ext/gd/tests/bug43073.phpt +++ b/ext/gd/tests/bug43073.phpt @@ -2,8 +2,8 @@ Bug #43073 (TrueType bounding box is wrong for angle<>0) --SKIPIF-- --FILE-- --FILE-- --FILE-- --FILE-- diff --git a/ext/gd/tests/bug44849.phpt b/ext/gd/tests/bug44849.phpt index 22e8a65ec45bc..4710f218f9b21 100644 --- a/ext/gd/tests/bug44849.phpt +++ b/ext/gd/tests/bug44849.phpt @@ -2,7 +2,7 @@ Bug #44849 (imagecolorclosesthwb is not available on Windows) --SKIPIF-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- diff --git a/ext/gd/tests/bug66356.phpt b/ext/gd/tests/bug66356.phpt index a255997ca08aa..0803ed48bdfdd 100644 --- a/ext/gd/tests/bug66356.phpt +++ b/ext/gd/tests/bug66356.phpt @@ -2,7 +2,7 @@ Bug #66356 (Heap Overflow Vulnerability in imagecrop()) --SKIPIF-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- diff --git a/ext/gd/tests/bug72512.phpt b/ext/gd/tests/bug72512.phpt index e9331ec600639..96b6de10237d7 100644 --- a/ext/gd/tests/bug72512.phpt +++ b/ext/gd/tests/bug72512.phpt @@ -2,10 +2,10 @@ Bug #19366 (gdimagefill() function crashes (fixed in bundled libgd)) --SKIPIF-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- gd1/gd2 conversion test --SKIPIF-- --FILE-- jpeg conversion test --SKIPIF-- --FILE-- png conversion test --SKIPIF-- --FILE-- #testfest PHPSP on 2009-06-20 --SKIPIF-- --FILE-- #testfest PHPSP on 2009-06-20 --SKIPIF-- --FILE-- --SKIPIF-- --FILE-- #testfest PHPSP on 2009-06-20 --SKIPIF-- --FILE-- #testfest PHPSP on 2009-06-20 --SKIPIF-- --FILE-- #testfest PHPSP on 2009-06-20 --SKIPIF-- --FILE-- --SKIPIF-- --FILE-- diff --git a/ext/gd/tests/imagecolourstotal_basic.phpt b/ext/gd/tests/imagecolourstotal_basic.phpt index 955dee9848fdd..0d03ecf7586f6 100644 --- a/ext/gd/tests/imagecolourstotal_basic.phpt +++ b/ext/gd/tests/imagecolourstotal_basic.phpt @@ -4,12 +4,12 @@ Test imagecolorstotal() function : basic functionality Felix De Vliegher --SKIPIF-- --FILE-- --FILE-- --CLEAN-- --EXPECT-- Simple test of imagecopyresampled() function diff --git a/ext/gd/tests/imagecreate_error.phpt b/ext/gd/tests/imagecreate_error.phpt index b0b6c3abf7e94..3e16c1f034193 100644 --- a/ext/gd/tests/imagecreate_error.phpt +++ b/ext/gd/tests/imagecreate_error.phpt @@ -2,8 +2,8 @@ Testing imagecreate(): error on out of bound parameters --SKIPIF-- --FILE-- --SKIPIF-- --FILE-- --SKIPIF-- --FILE-- --FILE-- --CLEAN-- --EXPECT-- Simple test of imagedashedline() function diff --git a/ext/gd/tests/imagefill_1.phpt b/ext/gd/tests/imagefill_1.phpt index f356fe826df43..ea2129b52b0ef 100644 --- a/ext/gd/tests/imagefill_1.phpt +++ b/ext/gd/tests/imagefill_1.phpt @@ -2,12 +2,12 @@ imagefill() infinite loop with wrong color index --SKIPIF-- --FILE-- --FILE-- diff --git a/ext/gd/tests/imagefilledarc_variation1.phpt b/ext/gd/tests/imagefilledarc_variation1.phpt index cc6e01b4ad495..f17651afef249 100644 --- a/ext/gd/tests/imagefilledarc_variation1.phpt +++ b/ext/gd/tests/imagefilledarc_variation1.phpt @@ -7,7 +7,7 @@ Edgar Ferreira da Silva --FILE-- diff --git a/ext/gd/tests/imagefilledarc_variation2.phpt b/ext/gd/tests/imagefilledarc_variation2.phpt index feb81a8e0628c..b388882390983 100644 --- a/ext/gd/tests/imagefilledarc_variation2.phpt +++ b/ext/gd/tests/imagefilledarc_variation2.phpt @@ -7,7 +7,7 @@ Edgar Ferreira da Silva --FILE-- diff --git a/ext/gd/tests/imagefilledpolygon_basic.phpt b/ext/gd/tests/imagefilledpolygon_basic.phpt index 165e685052d47..6462f42de736e 100644 --- a/ext/gd/tests/imagefilledpolygon_basic.phpt +++ b/ext/gd/tests/imagefilledpolygon_basic.phpt @@ -2,7 +2,7 @@ imagefilledpolygon() --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- Simple test of imagefilledpolygon() function diff --git a/ext/gd/tests/imagefilter.phpt b/ext/gd/tests/imagefilter.phpt index f040c5cac4490..a55b88ee90384 100644 --- a/ext/gd/tests/imagefilter.phpt +++ b/ext/gd/tests/imagefilter.phpt @@ -2,10 +2,10 @@ imagefilter() function test --SKIPIF-- --FILE-- #testfest PHPSP on 2009-06-20 --SKIPIF-- --FILE-- #testfest PHPSP on 2009-06-20 --SKIPIF-- --FILE-- --FILE-- #testfest PHPSP on 2009-06-20 --SKIPIF-- --FILE-- #testfest PHPSP on 2009-06-20 --SKIPIF-- --FILE-- --SKIPIF-- --FILE-- --FILE-- diff --git a/ext/gd/tests/imagelayereffect_basic.phpt b/ext/gd/tests/imagelayereffect_basic.phpt index 5a9c380758218..dc41148394b00 100644 --- a/ext/gd/tests/imagelayereffect_basic.phpt +++ b/ext/gd/tests/imagelayereffect_basic.phpt @@ -5,8 +5,8 @@ Rafael Dohms #testfest PHPSP on 2009-06-20 --SKIPIF-- --FILE-- #testfest #tek11 --SKIPIF-- --FILE-- --FILE-- --FILE-- diff --git a/ext/gd/tests/imagepolygon_basic.phpt b/ext/gd/tests/imagepolygon_basic.phpt index d4948fcc61016..bea4462c6a160 100644 --- a/ext/gd/tests/imagepolygon_basic.phpt +++ b/ext/gd/tests/imagepolygon_basic.phpt @@ -2,7 +2,7 @@ imagepolygon() --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- Simple test of imagepolygon() function diff --git a/ext/gd/tests/imagerotate_overflow.phpt b/ext/gd/tests/imagerotate_overflow.phpt index ade61d8f801ce..34d66862ea5bf 100644 --- a/ext/gd/tests/imagerotate_overflow.phpt +++ b/ext/gd/tests/imagerotate_overflow.phpt @@ -2,13 +2,13 @@ imagerotate() overflow with negative numbers --SKIPIF-- --FILE-- --SKIPIF-- --FILE-- diff --git a/ext/gd/tests/imagesetthickness_basic.phpt b/ext/gd/tests/imagesetthickness_basic.phpt index 376d18f790b91..30bd6094aa083 100644 --- a/ext/gd/tests/imagesetthickness_basic.phpt +++ b/ext/gd/tests/imagesetthickness_basic.phpt @@ -4,8 +4,8 @@ Testing imagetruecolortopalette() of GD library Rafael Dohms --SKIPIF-- --FILE-- #testfest PHPSP on 2009-06-20 --SKIPIF-- --FILE-- #testfest PHPSP on 2009-06-20 --SKIPIF-- --FILE-- --SKIPIF-- --FILE-- --SKIPIF-- --FILE-- --SKIPIF-- --FILE-- --FILE-- diff --git a/ext/gd/tests/imagewbmp_nullbyte_injection.phpt b/ext/gd/tests/imagewbmp_nullbyte_injection.phpt index 8f2bdcec5951e..d7c3f0c41617b 100644 --- a/ext/gd/tests/imagewbmp_nullbyte_injection.phpt +++ b/ext/gd/tests/imagewbmp_nullbyte_injection.phpt @@ -5,7 +5,7 @@ Testing null byte injection in imagewbmp if(!extension_loaded('gd')){ die('skip gd extension not available'); } $support = gd_info(); if (!isset($support['WBMP Support']) || $support['WBMP Support'] === false) { - print 'skip wbmp support not available'; + print 'skip wbmp support not available'; } ?> --FILE-- diff --git a/ext/gd/tests/imagewebp_nullbyte_injection.phpt b/ext/gd/tests/imagewebp_nullbyte_injection.phpt index c48fd7d821fd0..52ecc59941247 100644 --- a/ext/gd/tests/imagewebp_nullbyte_injection.phpt +++ b/ext/gd/tests/imagewebp_nullbyte_injection.phpt @@ -5,7 +5,7 @@ Testing null byte injection in imagewebp if(!extension_loaded('gd')){ die('skip gd extension not available'); } $support = gd_info(); if (!isset($support['WebP Support']) || $support['WebP Support'] === false) { - print 'skip webp support not available'; + print 'skip webp support not available'; } ?> --FILE-- diff --git a/ext/gd/tests/jpeg2png.phpt b/ext/gd/tests/jpeg2png.phpt index dfcd1ef1a264f..cae283d10b968 100644 --- a/ext/gd/tests/jpeg2png.phpt +++ b/ext/gd/tests/jpeg2png.phpt @@ -2,16 +2,16 @@ jpeg <--> png conversion test --SKIPIF-- --FILE-- gd1/gd2 conversion test --SKIPIF-- --FILE-- gd1/gd2 conversion test --SKIPIF-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- gd1/gd2 conversion test --SKIPIF-- --FILE-- --FILE-- png conversion test --SKIPIF-- --FILE-- gd1/gd2 conversion test --SKIPIF-- --FILE-- jpeg conversion test --SKIPIF-- --FILE-- png conversion test --SKIPIF-- --FILE-- --FILE-- diff --git a/ext/gettext/tests/gettext_basic-enus.phpt b/ext/gettext/tests/gettext_basic-enus.phpt index edbd31cc48180..6fcd5bed80499 100644 --- a/ext/gettext/tests/gettext_basic-enus.phpt +++ b/ext/gettext/tests/gettext_basic-enus.phpt @@ -2,12 +2,12 @@ Gettext basic test with en_US locale that should be on nearly every system --SKIPIF-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- =")) { - die("skip your GMP is too old and will crash"); + die("skip your GMP is too old and will crash"); } ?> --FILE-- diff --git a/ext/gmp/tests/gmp_setbit_long.phpt b/ext/gmp/tests/gmp_setbit_long.phpt index 065c8f8208fd6..a967a80d76fd7 100644 --- a/ext/gmp/tests/gmp_setbit_long.phpt +++ b/ext/gmp/tests/gmp_setbit_long.phpt @@ -6,19 +6,19 @@ gmp_setbit() with large index --FILE-- diff --git a/ext/iconv/tests/bug37773.phpt b/ext/iconv/tests/bug37773.phpt index e2fb6a55e6a8b..3b520c6e022a3 100644 --- a/ext/iconv/tests/bug37773.phpt +++ b/ext/iconv/tests/bug37773.phpt @@ -6,7 +6,7 @@ include('skipif.inc'); $test = @iconv_strpos("abbttt","ttt",0,"UTF-8"); if ($test === false) { - die("skip UTF-8 is not supported?"); + die("skip UTF-8 is not supported?"); } ?> diff --git a/ext/iconv/tests/iconv002.phpt b/ext/iconv/tests/iconv002.phpt index 6be5a86a69eba..c43402262ece5 100644 --- a/ext/iconv/tests/iconv002.phpt +++ b/ext/iconv/tests/iconv002.phpt @@ -4,7 +4,7 @@ iconv() test 2 (UCS4BE to ASCII) --INI-- diff --git a/ext/imap/tests/bug45705_1.phpt b/ext/imap/tests/bug45705_1.phpt index f699451407e11..05d3a0a2f6b9d 100644 --- a/ext/imap/tests/bug45705_1.phpt +++ b/ext/imap/tests/bug45705_1.phpt @@ -2,9 +2,9 @@ Bug #45705 test #1 (imap rfc822_parse_adrlist() modifies passed address parameter) --SKIPIF-- --FILE-- --FILE-- --FILE-- diff --git a/ext/intl/tests/breakiter___construct.phpt b/ext/intl/tests/breakiter___construct.phpt index 16ca32bf184f6..716de728ae7b6 100644 --- a/ext/intl/tests/breakiter___construct.phpt +++ b/ext/intl/tests/breakiter___construct.phpt @@ -3,7 +3,7 @@ IntlBreakIterator::__construct() should not be callable --SKIPIF-- 0) die('skip for ICU <= 57.1'); ?> --FILE-- diff --git a/ext/intl/tests/breakiter_getPartsIterator_basic2.phpt b/ext/intl/tests/breakiter_getPartsIterator_basic2.phpt index 834da13ecea7d..826f57e45ab9e 100644 --- a/ext/intl/tests/breakiter_getPartsIterator_basic2.phpt +++ b/ext/intl/tests/breakiter_getPartsIterator_basic2.phpt @@ -3,7 +3,7 @@ IntlBreakIterator::getPartsIterator(): basic test, ICU >= 58.1 --SKIPIF-- = 58.1'); ?> --FILE-- diff --git a/ext/intl/tests/breakiter_getPartsIterator_error.phpt b/ext/intl/tests/breakiter_getPartsIterator_error.phpt index f86e64d4ccdd7..cd518b19d4d02 100644 --- a/ext/intl/tests/breakiter_getPartsIterator_error.phpt +++ b/ext/intl/tests/breakiter_getPartsIterator_error.phpt @@ -3,7 +3,7 @@ IntlBreakIterator::getPartsIterator(): bad args --SKIPIF-- 0) die('skip for ICU <= 57.1'); ?> --FILE-- diff --git a/ext/intl/tests/breakiter_preceding_basic2.phpt b/ext/intl/tests/breakiter_preceding_basic2.phpt index 8c1ee625e4517..53446b2f6bc2c 100644 --- a/ext/intl/tests/breakiter_preceding_basic2.phpt +++ b/ext/intl/tests/breakiter_preceding_basic2.phpt @@ -3,7 +3,7 @@ IntlBreakIterator::preceding(): basic test, ICU >= 58.1 --SKIPIF-- = 58.1'); --FILE-- = 0) - die('skip for ICU < 51.2'); + die('skip for ICU < 51.2'); ?> --FILE-- = 51.2'); + die('skip for ICU >= 51.2'); ?> --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- = 0) - die('skip for ICU < 52.1'); + die('skip for ICU < 52.1'); --FILE-- = 52.1'); + die('skip for ICU >= 52.1'); --FILE-- getConstant("SINGLE_SCRIPT_RESTRICTIVE")) { - die("skip Incompatible ICU version"); - } + $r = new ReflectionClass("SpoofChecker"); + if (false === $r->getConstant("SINGLE_SCRIPT_RESTRICTIVE")) { + die("skip Incompatible ICU version"); + } ?> --FILE-- + die('skip intl extension not enabled'); ?> = 52'); ?> = 0) die('skip for ICU <= 57.1'); ?> --FILE-- diff --git a/ext/intl/tests/timezone_IDforWindowsID_basic2.phpt b/ext/intl/tests/timezone_IDforWindowsID_basic2.phpt index 5008c2b66ab95..064c5826d8743 100644 --- a/ext/intl/tests/timezone_IDforWindowsID_basic2.phpt +++ b/ext/intl/tests/timezone_IDforWindowsID_basic2.phpt @@ -3,7 +3,7 @@ IntlTimeZone::getIDForWindowsID basic test --SKIPIF-- + die('skip intl extension not enabled'); ?> = 58.1'); ?> --FILE-- int cast behavior. */ $arch = php_uname('m'); if ($arch != 'x86_64' && $arch != 'i386') diff --git a/ext/intl/tests/timezone_getErrorCode_error.phpt b/ext/intl/tests/timezone_getErrorCode_error.phpt index c20e3c666a020..c44a9107261fd 100644 --- a/ext/intl/tests/timezone_getErrorCode_error.phpt +++ b/ext/intl/tests/timezone_getErrorCode_error.phpt @@ -3,7 +3,7 @@ IntlTimeZone::getErrorCode(): errors --SKIPIF-- int cast behavior. */ $arch = php_uname('m'); diff --git a/ext/intl/tests/timezone_getRawOffset_basic.phpt b/ext/intl/tests/timezone_getRawOffset_basic.phpt index bfbf2710cac34..6f85e9fc9c6f2 100644 --- a/ext/intl/tests/timezone_getRawOffset_basic.phpt +++ b/ext/intl/tests/timezone_getRawOffset_basic.phpt @@ -3,7 +3,7 @@ IntlTimeZone::getRawOffset(): basic test --SKIPIF-- + die('skip intl extension not enabled'); ?> = 52'); ?> = 0) die('skip for ICU <= 57.1'); ?> --FILE-- diff --git a/ext/intl/tests/timezone_windowsID_basic2.phpt b/ext/intl/tests/timezone_windowsID_basic2.phpt index 7c00b646b6484..32f80596c4bfe 100644 --- a/ext/intl/tests/timezone_windowsID_basic2.phpt +++ b/ext/intl/tests/timezone_windowsID_basic2.phpt @@ -3,7 +3,7 @@ IntlTimeZone::getWindowsID basic test --SKIPIF-- + die('skip intl extension not enabled'); ?> = 58.1'); ?> --FILE-- --INI-- diff --git a/ext/json/tests/bug42785.phpt b/ext/json/tests/bug42785.phpt index 7c39f4c8e2992..698f193a70881 100644 --- a/ext/json/tests/bug42785.phpt +++ b/ext/json/tests/bug42785.phpt @@ -5,7 +5,7 @@ serialize_precision=-1 --SKIPIF-- --FILE-- diff --git a/ext/ldap/tests/ldap_exop_refresh.phpt b/ext/ldap/tests/ldap_exop_refresh.phpt index b90a92bc00a65..b7e7835f384cc 100644 --- a/ext/ldap/tests/ldap_exop_refresh.phpt +++ b/ext/ldap/tests/ldap_exop_refresh.phpt @@ -6,12 +6,12 @@ Emmanuel Dreyfus --FILE-- --SKIPIF-- --FILE-- --SKIPIF-- --FILE-- --FILE-- --SKIPIF-- --FILE-- --SKIPIF-- --FILE-- --INI-- diff --git a/ext/mbstring/tests/htmlent.phpt b/ext/mbstring/tests/htmlent.phpt index eb251efd7bf81..cecd1c35393be 100644 --- a/ext/mbstring/tests/htmlent.phpt +++ b/ext/mbstring/tests/htmlent.phpt @@ -2,8 +2,8 @@ HTML input/output --SKIPIF-- --INI-- output_buffering=4096 diff --git a/ext/mbstring/tests/mb_send_mail01.phpt b/ext/mbstring/tests/mb_send_mail01.phpt index 283ff11d6baab..96eecbb625601 100644 --- a/ext/mbstring/tests/mb_send_mail01.phpt +++ b/ext/mbstring/tests/mb_send_mail01.phpt @@ -3,10 +3,10 @@ mb_send_mail() test 1 (lang=neutral) --SKIPIF-- --INI-- diff --git a/ext/mbstring/tests/mb_send_mail02.phpt b/ext/mbstring/tests/mb_send_mail02.phpt index 06b85c691f5bd..026d794e40e05 100644 --- a/ext/mbstring/tests/mb_send_mail02.phpt +++ b/ext/mbstring/tests/mb_send_mail02.phpt @@ -3,10 +3,10 @@ mb_send_mail() test 2 (lang=Japanese) --SKIPIF-- --INI-- diff --git a/ext/mbstring/tests/mb_send_mail03.phpt b/ext/mbstring/tests/mb_send_mail03.phpt index 3d5ffd5659535..acc152f720363 100644 --- a/ext/mbstring/tests/mb_send_mail03.phpt +++ b/ext/mbstring/tests/mb_send_mail03.phpt @@ -3,10 +3,10 @@ mb_send_mail() test 3 (lang=English) --SKIPIF-- --INI-- diff --git a/ext/mbstring/tests/mb_send_mail04.phpt b/ext/mbstring/tests/mb_send_mail04.phpt index 2eccb87189aaa..9e68128140731 100644 --- a/ext/mbstring/tests/mb_send_mail04.phpt +++ b/ext/mbstring/tests/mb_send_mail04.phpt @@ -3,10 +3,10 @@ mb_send_mail() test 4 (lang=German) --SKIPIF-- --INI-- diff --git a/ext/mbstring/tests/mb_send_mail05.phpt b/ext/mbstring/tests/mb_send_mail05.phpt index 53d97ef3d18b2..f4c07e26f8b2b 100644 --- a/ext/mbstring/tests/mb_send_mail05.phpt +++ b/ext/mbstring/tests/mb_send_mail05.phpt @@ -3,13 +3,13 @@ mb_send_mail() test 5 (lang=Simplified Chinese) --SKIPIF-- --INI-- diff --git a/ext/mbstring/tests/mb_send_mail06.phpt b/ext/mbstring/tests/mb_send_mail06.phpt index 44a877aaee528..521a976ca39c5 100644 --- a/ext/mbstring/tests/mb_send_mail06.phpt +++ b/ext/mbstring/tests/mb_send_mail06.phpt @@ -3,13 +3,13 @@ mb_send_mail() test 6 (lang=Traditional Chinese) --SKIPIF-- --INI-- diff --git a/ext/mbstring/tests/mb_send_mail07.phpt b/ext/mbstring/tests/mb_send_mail07.phpt index 9640abc1e88a0..eb702b690ae4e 100644 --- a/ext/mbstring/tests/mb_send_mail07.phpt +++ b/ext/mbstring/tests/mb_send_mail07.phpt @@ -3,13 +3,13 @@ mb_send_mail() test 7 (lang=Korean) --SKIPIF-- --INI-- diff --git a/ext/mysqli/tests/002.phpt b/ext/mysqli/tests/002.phpt index 0960da7a98c11..322cbb2ee3d01 100644 --- a/ext/mysqli/tests/002.phpt +++ b/ext/mysqli/tests/002.phpt @@ -53,7 +53,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_fetch_null")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/003.phpt b/ext/mysqli/tests/003.phpt index faf3407bd7364..56a26602dfc03 100644 --- a/ext/mysqli/tests/003.phpt +++ b/ext/mysqli/tests/003.phpt @@ -79,7 +79,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/004.phpt b/ext/mysqli/tests/004.phpt index 0c246e0b2b28b..22a7712dbac3a 100644 --- a/ext/mysqli/tests/004.phpt +++ b/ext/mysqli/tests/004.phpt @@ -57,7 +57,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/005.phpt b/ext/mysqli/tests/005.phpt index 2dffee80c2022..ce0a9a886071e 100644 --- a/ext/mysqli/tests/005.phpt +++ b/ext/mysqli/tests/005.phpt @@ -47,7 +47,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/006.phpt b/ext/mysqli/tests/006.phpt index 5e0443a9fb741..534ef4261fc47 100644 --- a/ext/mysqli/tests/006.phpt +++ b/ext/mysqli/tests/006.phpt @@ -52,7 +52,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/007.phpt b/ext/mysqli/tests/007.phpt index b510d8d8a32d8..7e71476a3a969 100644 --- a/ext/mysqli/tests/007.phpt +++ b/ext/mysqli/tests/007.phpt @@ -52,7 +52,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/008.phpt b/ext/mysqli/tests/008.phpt index 412c3641e5a8a..37b75bb5b9835 100644 --- a/ext/mysqli/tests/008.phpt +++ b/ext/mysqli/tests/008.phpt @@ -52,7 +52,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/009.phpt b/ext/mysqli/tests/009.phpt index 187ac3f9a35ec..f245c71f5dcdb 100644 --- a/ext/mysqli/tests/009.phpt +++ b/ext/mysqli/tests/009.phpt @@ -2,12 +2,12 @@ mysqli fetch bigint values (ok to fail with 4.1.x) --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/010.phpt b/ext/mysqli/tests/010.phpt index 4da24b680add6..9ddac0931fce6 100644 --- a/ext/mysqli/tests/010.phpt +++ b/ext/mysqli/tests/010.phpt @@ -55,7 +55,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/011.phpt b/ext/mysqli/tests/011.phpt index 4be6fe62c59d7..db327e2d32782 100644 --- a/ext/mysqli/tests/011.phpt +++ b/ext/mysqli/tests/011.phpt @@ -52,7 +52,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/012.phpt b/ext/mysqli/tests/012.phpt index c2981a206cfa6..89303e57891cc 100644 --- a/ext/mysqli/tests/012.phpt +++ b/ext/mysqli/tests/012.phpt @@ -51,7 +51,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/013.phpt b/ext/mysqli/tests/013.phpt index 21cb6a949e873..c8aaa73d8427b 100644 --- a/ext/mysqli/tests/013.phpt +++ b/ext/mysqli/tests/013.phpt @@ -60,7 +60,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/014.phpt b/ext/mysqli/tests/014.phpt index cb100001c5498..bc5d906d934ad 100644 --- a/ext/mysqli/tests/014.phpt +++ b/ext/mysqli/tests/014.phpt @@ -2,16 +2,16 @@ mysqli autocommit/commit/rollback --SKIPIF-- errno, $link->error)); + if (!have_innodb($link)) + die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); ?> --FILE-- --CLEAN-- --EXPECT-- Num_of_rows=1 diff --git a/ext/mysqli/tests/015.phpt b/ext/mysqli/tests/015.phpt index 099fcff24eca3..a179e8ec5a4d9 100644 --- a/ext/mysqli/tests/015.phpt +++ b/ext/mysqli/tests/015.phpt @@ -2,15 +2,15 @@ mysqli autocommit/commit/rollback with innodb --SKIPIF-- errno, $link->error)); + if (!have_innodb($link)) + die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); ?> --FILE-- --CLEAN-- --EXPECT-- array(2) { diff --git a/ext/mysqli/tests/019.phpt b/ext/mysqli/tests/019.phpt index d35b162cd714f..6d64a17601477 100644 --- a/ext/mysqli/tests/019.phpt +++ b/ext/mysqli/tests/019.phpt @@ -62,7 +62,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS insert_read")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/020.phpt b/ext/mysqli/tests/020.phpt index f1409248c2901..a2a8782f0fd5e 100644 --- a/ext/mysqli/tests/020.phpt +++ b/ext/mysqli/tests/020.phpt @@ -74,7 +74,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/021.phpt b/ext/mysqli/tests/021.phpt index 3fa3b9a5cc967..fd2d4f0e2b68d 100644 --- a/ext/mysqli/tests/021.phpt +++ b/ext/mysqli/tests/021.phpt @@ -45,7 +45,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/022.phpt b/ext/mysqli/tests/022.phpt index d12ba4aff9ecf..d591e5bae1349 100644 --- a/ext/mysqli/tests/022.phpt +++ b/ext/mysqli/tests/022.phpt @@ -50,7 +50,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/023.phpt b/ext/mysqli/tests/023.phpt index 7c22704d441d7..a23e6e15ecfb1 100644 --- a/ext/mysqli/tests/023.phpt +++ b/ext/mysqli/tests/023.phpt @@ -59,7 +59,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/024.phpt b/ext/mysqli/tests/024.phpt index 5be231c27d0f3..dec1e284be43b 100644 --- a/ext/mysqli/tests/024.phpt +++ b/ext/mysqli/tests/024.phpt @@ -59,7 +59,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/025.phpt b/ext/mysqli/tests/025.phpt index 6e300890d7df3..62b1590d29b67 100644 --- a/ext/mysqli/tests/025.phpt +++ b/ext/mysqli/tests/025.phpt @@ -64,7 +64,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/026.phpt b/ext/mysqli/tests/026.phpt index 1db5f5af84496..7f9a9bd4b8c53 100644 --- a/ext/mysqli/tests/026.phpt +++ b/ext/mysqli/tests/026.phpt @@ -51,7 +51,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/029.phpt b/ext/mysqli/tests/029.phpt index 0ed2517227df2..769f3753f4066 100644 --- a/ext/mysqli/tests/029.phpt +++ b/ext/mysqli/tests/029.phpt @@ -33,7 +33,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS general_test")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/032.phpt b/ext/mysqli/tests/032.phpt index 660950d6f1e9d..ea7d13bc9bf9a 100644 --- a/ext/mysqli/tests/032.phpt +++ b/ext/mysqli/tests/032.phpt @@ -33,7 +33,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS general_test")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/036.phpt b/ext/mysqli/tests/036.phpt index af6d81d64e1b9..04fa7023bef31 100644 --- a/ext/mysqli/tests/036.phpt +++ b/ext/mysqli/tests/036.phpt @@ -2,12 +2,12 @@ function test: mysqli_insert_id() --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/037.phpt b/ext/mysqli/tests/037.phpt index 7c6f72cb69a7b..93b2ceace61d7 100644 --- a/ext/mysqli/tests/037.phpt +++ b/ext/mysqli/tests/037.phpt @@ -39,7 +39,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_result")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/038.phpt b/ext/mysqli/tests/038.phpt index 63d7e3ee326d3..9719d93049d74 100644 --- a/ext/mysqli/tests/038.phpt +++ b/ext/mysqli/tests/038.phpt @@ -39,7 +39,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_result")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/040.phpt b/ext/mysqli/tests/040.phpt index 782cbe57ade5f..04d839408e707 100644 --- a/ext/mysqli/tests/040.phpt +++ b/ext/mysqli/tests/040.phpt @@ -38,7 +38,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_result")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/041.phpt b/ext/mysqli/tests/041.phpt index 645a82e419691..d64739d79ed8b 100644 --- a/ext/mysqli/tests/041.phpt +++ b/ext/mysqli/tests/041.phpt @@ -29,7 +29,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_warnings")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/042.phpt b/ext/mysqli/tests/042.phpt index 8b46049cb8f1d..3545ed06c1a76 100644 --- a/ext/mysqli/tests/042.phpt +++ b/ext/mysqli/tests/042.phpt @@ -55,7 +55,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/043.phpt b/ext/mysqli/tests/043.phpt index 2e265d7c51772..adcf502dc72ee 100644 --- a/ext/mysqli/tests/043.phpt +++ b/ext/mysqli/tests/043.phpt @@ -47,7 +47,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_update")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/045.phpt b/ext/mysqli/tests/045.phpt index af38b6786dea5..8486f1003e665 100644 --- a/ext/mysqli/tests/045.phpt +++ b/ext/mysqli/tests/045.phpt @@ -2,20 +2,20 @@ mysqli_stmt_bind_result (SHOW) --SKIPIF-- field_count) { - printf("skip SHOW command is not supported in prepared statements."); - } - $stmt->close(); - mysqli_close($link); + if (!$stmt->field_count) { + printf("skip SHOW command is not supported in prepared statements."); + } + $stmt->close(); + mysqli_close($link); ?> --FILE-- diff --git a/ext/mysqli/tests/047.phpt b/ext/mysqli/tests/047.phpt index 4a2c9590cfd6b..376bcb59c5078 100644 --- a/ext/mysqli/tests/047.phpt +++ b/ext/mysqli/tests/047.phpt @@ -52,7 +52,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_affected")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/048.phpt b/ext/mysqli/tests/048.phpt index 20271e43fb828..be5f5a79f1809 100644 --- a/ext/mysqli/tests/048.phpt +++ b/ext/mysqli/tests/048.phpt @@ -47,7 +47,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_fetch_null")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/057.phpt b/ext/mysqli/tests/057.phpt index 7c4f149c4870c..7d968a18b2ec3 100644 --- a/ext/mysqli/tests/057.phpt +++ b/ext/mysqli/tests/057.phpt @@ -68,7 +68,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_store_result")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/058.phpt b/ext/mysqli/tests/058.phpt index 596b28569ec3e..541be1ede402c 100644 --- a/ext/mysqli/tests/058.phpt +++ b/ext/mysqli/tests/058.phpt @@ -55,7 +55,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS mbind")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/059.phpt b/ext/mysqli/tests/059.phpt index c7f3877201185..7168f6f8fafd3 100644 --- a/ext/mysqli/tests/059.phpt +++ b/ext/mysqli/tests/059.phpt @@ -48,7 +48,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS mbind")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/060.phpt b/ext/mysqli/tests/060.phpt index 22732f4ef1973..c5a77ec16d37a 100644 --- a/ext/mysqli/tests/060.phpt +++ b/ext/mysqli/tests/060.phpt @@ -49,7 +49,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_fetch")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/061.phpt b/ext/mysqli/tests/061.phpt index 0b15b2ea856d7..76a40c704e2bd 100644 --- a/ext/mysqli/tests/061.phpt +++ b/ext/mysqli/tests/061.phpt @@ -5,15 +5,15 @@ local infile handler require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_set_local_infile_handler')) - die("skip - function not available."); + die("skip - function not available."); $link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket); if (!$link) - die(sprintf("skip Can't connect [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip Can't connect [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); include_once("local_infile_tools.inc"); if ($msg = check_local_infile_support($link, $engine)) - die(sprintf("skip %s, [%d] %s", $msg, $link->errno, $link->error)); + die(sprintf("skip %s, [%d] %s", $msg, $link->errno, $link->error)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/065.phpt b/ext/mysqli/tests/065.phpt index 2733cdafb0273..9b18d33459fea 100644 --- a/ext/mysqli/tests/065.phpt +++ b/ext/mysqli/tests/065.phpt @@ -6,7 +6,7 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_set_charset')) { - die('skip mysqli_set_charset() not available'); + die('skip mysqli_set_charset() not available'); } ?> --FILE-- diff --git a/ext/mysqli/tests/066.phpt b/ext/mysqli/tests/066.phpt index 678457e93430d..535d01d22434b 100644 --- a/ext/mysqli/tests/066.phpt +++ b/ext/mysqli/tests/066.phpt @@ -37,7 +37,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_warnings")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/067.phpt b/ext/mysqli/tests/067.phpt index 1560f76522bfe..a8874ffef4417 100644 --- a/ext/mysqli/tests/067.phpt +++ b/ext/mysqli/tests/067.phpt @@ -2,19 +2,19 @@ function test: nested selects (cursors) --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/bug34810.phpt b/ext/mysqli/tests/bug34810.phpt index 60ed3f8d1ad83..9157a13b9ab32 100644 --- a/ext/mysqli/tests/bug34810.phpt +++ b/ext/mysqli/tests/bug34810.phpt @@ -54,7 +54,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_warnings")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/bug35103.phpt b/ext/mysqli/tests/bug35103.phpt index 7a990eacbf648..95f65320f9e03 100644 --- a/ext/mysqli/tests/bug35103.phpt +++ b/ext/mysqli/tests/bug35103.phpt @@ -58,7 +58,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bint") || !mysqli_query($link, "DROP TABLE IF EXISTS test_buint")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/bug35517.phpt b/ext/mysqli/tests/bug35517.phpt index a722179896813..578f905f352c7 100644 --- a/ext/mysqli/tests/bug35517.phpt +++ b/ext/mysqli/tests/bug35517.phpt @@ -41,7 +41,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS temp")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/bug36949.phpt b/ext/mysqli/tests/bug36949.phpt index 5805a6510004d..7033eef23cc9e 100644 --- a/ext/mysqli/tests/bug36949.phpt +++ b/ext/mysqli/tests/bug36949.phpt @@ -54,7 +54,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS my_time")) - printf("[002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/bug37090.phpt b/ext/mysqli/tests/bug37090.phpt index 13d939608d522..8345b4b82f881 100644 --- a/ext/mysqli/tests/bug37090.phpt +++ b/ext/mysqli/tests/bug37090.phpt @@ -5,7 +5,7 @@ Bug #37090 (mysqli_set_charset return code) require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_set_charset')) { - die('skip mysqli_set_charset() not available'); + die('skip mysqli_set_charset() not available'); } ?> --FILE-- diff --git a/ext/mysqli/tests/bug42548.phpt b/ext/mysqli/tests/bug42548.phpt index 6f4de58a6673a..e188d83666c1a 100644 --- a/ext/mysqli/tests/bug42548.phpt +++ b/ext/mysqli/tests/bug42548.phpt @@ -6,10 +6,10 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); } if (mysqli_get_server_version($link) <= 50000) { - die(sprintf('skip Needs MySQL 5.0+, found version %d.', mysqli_get_server_version($link))); + die(sprintf('skip Needs MySQL 5.0+, found version %d.', mysqli_get_server_version($link))); } ?> --FILE-- diff --git a/ext/mysqli/tests/bug44897.phpt b/ext/mysqli/tests/bug44897.phpt index ba7d0ca49d938..430a32856e1b2 100644 --- a/ext/mysqli/tests/bug44897.phpt +++ b/ext/mysqli/tests/bug44897.phpt @@ -5,16 +5,16 @@ Bug #44879 (failed to prepare statement) require_once('skipif.inc'); if (!stristr(mysqli_get_client_info(), 'mysqlnd')) - die("skip: only available in mysqlnd"); + die("skip: only available in mysqlnd"); require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); } if (mysqli_get_server_version($link) <= 50000) { - die(sprintf('skip Needs MySQL 5.0+, found version %d.', mysqli_get_server_version($link))); + die(sprintf('skip Needs MySQL 5.0+, found version %d.', mysqli_get_server_version($link))); } ?> --FILE-- @@ -78,7 +78,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_query($link, "DROP PROCEDURE IF EXISTS p"); diff --git a/ext/mysqli/tests/bug45289.phpt b/ext/mysqli/tests/bug45289.phpt index 65b7ebd707c71..8604fc72609c7 100644 --- a/ext/mysqli/tests/bug45289.phpt +++ b/ext/mysqli/tests/bug45289.phpt @@ -34,7 +34,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- [004] [%s diff --git a/ext/mysqli/tests/bug46614.phpt b/ext/mysqli/tests/bug46614.phpt index 2cdefbf4a316b..e451abda9ed90 100644 --- a/ext/mysqli/tests/bug46614.phpt +++ b/ext/mysqli/tests/bug46614.phpt @@ -5,7 +5,7 @@ Bug #46614 (Extended MySQLi class gives incorrect empty() result) require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!defined("MYSQLI_ASYNC")) { - die("skip mysqlnd only"); + die("skip mysqlnd only"); } ?> --FILE-- diff --git a/ext/mysqli/tests/bug47050.phpt b/ext/mysqli/tests/bug47050.phpt index ac305b07d2524..1dd8f73a699ef 100644 --- a/ext/mysqli/tests/bug47050.phpt +++ b/ext/mysqli/tests/bug47050.phpt @@ -5,7 +5,7 @@ Bug #47050 (mysqli_poll() modifies improper variables) require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!defined("MYSQLI_ASYNC")) { - die("skip mysqlnd only"); + die("skip mysqlnd only"); } ?> --FILE-- diff --git a/ext/mysqli/tests/bug48909.phpt b/ext/mysqli/tests/bug48909.phpt index 3c7e09f17e389..2d994f559e5e7 100644 --- a/ext/mysqli/tests/bug48909.phpt +++ b/ext/mysqli/tests/bug48909.phpt @@ -40,7 +40,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- done diff --git a/ext/mysqli/tests/bug49027.phpt b/ext/mysqli/tests/bug49027.phpt index 4aa546cd2630e..6a459ed4acb37 100644 --- a/ext/mysqli/tests/bug49027.phpt +++ b/ext/mysqli/tests/bug49027.phpt @@ -48,7 +48,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- array(1) { diff --git a/ext/mysqli/tests/bug49442.phpt b/ext/mysqli/tests/bug49442.phpt index 22ff7552b7eba..13ddf7b72154d 100644 --- a/ext/mysqli/tests/bug49442.phpt +++ b/ext/mysqli/tests/bug49442.phpt @@ -7,12 +7,12 @@ require_once('skipifconnectfailure.inc'); $link = mysqli_init(); if (!my_mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket)) { - die(sprintf("skip Connect failed, [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip Connect failed, [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error())); } include_once("local_infile_tools.inc"); if ($msg = check_local_infile_support($link, $engine)) - die(sprintf("skip %s, [%d] %s", $msg, $link->errno, $link->error)); + die(sprintf("skip %s, [%d] %s", $msg, $link->errno, $link->error)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/bug51647.phpt b/ext/mysqli/tests/bug51647.phpt index ecae650c1ba28..8cc15e325e1ea 100644 --- a/ext/mysqli/tests/bug51647.phpt +++ b/ext/mysqli/tests/bug51647.phpt @@ -10,33 +10,33 @@ if (!defined('MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT')) die("skip Requires MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT"); if ($IS_MYSQLND && !extension_loaded("openssl")) - die("skip PHP streams lack support for SSL. mysqli is compiled to use mysqlnd which uses PHP streams in turn."); + die("skip PHP streams lack support for SSL. mysqli is compiled to use mysqlnd which uses PHP streams in turn."); if (!($link = @my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))) - die(sprintf("skip Connect failed, [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip Connect failed, [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); if (false === strpos($link->host_info, 'TCP/IP')) - die(sprintf("skip SSL only supported on TCP/IP")); + die(sprintf("skip SSL only supported on TCP/IP")); $row = NULL; if ($res = $link->query('SHOW VARIABLES LIKE "have_ssl"')) { - $row = $res->fetch_row(); + $row = $res->fetch_row(); } else { - if ($link->errno == 1064 && ($res = $link->query("SHOW VARIABLES"))) { - while ($row = $res->fetch_row()) - if ($row[0] == 'have_ssl') - break; - } else { - die(sprintf("skip Failed to test for MySQL SSL support, [%d] %s", $link->errno, $link->error)); - } + if ($link->errno == 1064 && ($res = $link->query("SHOW VARIABLES"))) { + while ($row = $res->fetch_row()) + if ($row[0] == 'have_ssl') + break; + } else { + die(sprintf("skip Failed to test for MySQL SSL support, [%d] %s", $link->errno, $link->error)); + } } if (empty($row)) - die(sprintf("skip Failed to test for MySQL SSL support, [%d] %s", $link->errno, $link->error)); + die(sprintf("skip Failed to test for MySQL SSL support, [%d] %s", $link->errno, $link->error)); if (($row[1] == 'NO') || ($row[1] == 'DISABLED')) - die(sprintf("skip MySQL has no SSL support, [%d] %s", $link->errno, $link->error)); + die(sprintf("skip MySQL has no SSL support, [%d] %s", $link->errno, $link->error)); $link->close(); ?> diff --git a/ext/mysqli/tests/bug52891.phpt b/ext/mysqli/tests/bug52891.phpt index f0692556399f6..2c4e19ca4c21b 100644 --- a/ext/mysqli/tests/bug52891.phpt +++ b/ext/mysqli/tests/bug52891.phpt @@ -5,7 +5,7 @@ Bug #52891 (Wrong data inserted with mysqli/mysqlnd when using bind_param,value require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!$IS_MYSQLND) { - die("skip: test applies only to mysqlnd"); + die("skip: test applies only to mysqlnd"); } ?> --FILE-- @@ -100,16 +100,16 @@ if (!$IS_MYSQLND) { require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - printf("[clean] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", - $host, $user, $db, $port, $socket); + printf("[clean] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", + $host, $user, $db, $port, $socket); } if (!mysqli_query($link, 'DROP TABLE IF EXISTS tuint')) { - printf("[clean] Failed to drop old test table: [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[clean] Failed to drop old test table: [%d] %s\n", mysqli_errno($link), mysqli_error($link)); } if (!mysqli_query($link, 'DROP TABLE IF EXISTS tsint')) { - printf("[clean] Failed to drop old test table: [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[clean] Failed to drop old test table: [%d] %s\n", mysqli_errno($link), mysqli_error($link)); } mysqli_close($link); diff --git a/ext/mysqli/tests/bug53503.phpt b/ext/mysqli/tests/bug53503.phpt index b71afe28c7e3c..0b187102f7550 100644 --- a/ext/mysqli/tests/bug53503.phpt +++ b/ext/mysqli/tests/bug53503.phpt @@ -6,11 +6,11 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die("skip Cannot connect to MySQL"); + die("skip Cannot connect to MySQL"); include_once("local_infile_tools.inc"); if ($msg = check_local_infile_support($link, $engine)) - die(sprintf("skip %s, [%d] %s", $msg, $link->errno, $link->error)); + die(sprintf("skip %s, [%d] %s", $msg, $link->errno, $link->error)); mysqli_close($link); diff --git a/ext/mysqli/tests/bug55283.phpt b/ext/mysqli/tests/bug55283.phpt index 023b9f424d022..379cab0db31f8 100644 --- a/ext/mysqli/tests/bug55283.phpt +++ b/ext/mysqli/tests/bug55283.phpt @@ -10,33 +10,33 @@ if (!defined('MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT')) die("skip Requires MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT"); if ($IS_MYSQLND && !extension_loaded("openssl")) - die("skip PHP streams lack support for SSL. mysqli is compiled to use mysqlnd which uses PHP streams in turn."); + die("skip PHP streams lack support for SSL. mysqli is compiled to use mysqlnd which uses PHP streams in turn."); if (!($link = @my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))) - die(sprintf("skip Connect failed, [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip Connect failed, [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); if (false === strpos($link->host_info, 'TCP/IP')) - die(sprintf("skip SSL only supported on TCP/IP")); + die(sprintf("skip SSL only supported on TCP/IP")); $row = NULL; if ($res = $link->query('SHOW VARIABLES LIKE "have_ssl"')) { - $row = $res->fetch_row(); + $row = $res->fetch_row(); } else { - if ($link->errno == 1064 && ($res = $link->query("SHOW VARIABLES"))) { - while ($row = $res->fetch_row()) - if ($row[0] == 'have_ssl') - break; - } else { - die(sprintf("skip Failed to test for MySQL SSL support, [%d] %s", $link->errno, $link->error)); - } + if ($link->errno == 1064 && ($res = $link->query("SHOW VARIABLES"))) { + while ($row = $res->fetch_row()) + if ($row[0] == 'have_ssl') + break; + } else { + die(sprintf("skip Failed to test for MySQL SSL support, [%d] %s", $link->errno, $link->error)); + } } if (empty($row)) - die(sprintf("skip Failed to test for MySQL SSL support, [%d] %s", $link->errno, $link->error)); + die(sprintf("skip Failed to test for MySQL SSL support, [%d] %s", $link->errno, $link->error)); if (($row[1] == 'NO') || ($row[1] == 'DISABLED')) - die(sprintf("skip MySQL has no SSL support, [%d] %s", $link->errno, $link->error)); + die(sprintf("skip MySQL has no SSL support, [%d] %s", $link->errno, $link->error)); $link->close(); ?> diff --git a/ext/mysqli/tests/bug67839.phpt b/ext/mysqli/tests/bug67839.phpt index b4e92d839f03d..4391d74add2ef 100644 --- a/ext/mysqli/tests/bug67839.phpt +++ b/ext/mysqli/tests/bug67839.phpt @@ -2,8 +2,8 @@ mysqli_float_handling - ensure 4 byte float is handled correctly --SKIPIF-- --INI-- precision=5 diff --git a/ext/mysqli/tests/bug68077.phpt b/ext/mysqli/tests/bug68077.phpt index 8e5ccfb410e65..2be4fe97aa84a 100644 --- a/ext/mysqli/tests/bug68077.phpt +++ b/ext/mysqli/tests/bug68077.phpt @@ -5,14 +5,14 @@ Bug #68077 (LOAD DATA LOCAL INFILE / open_basedir restriction) require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!$IS_MYSQLND) { - die("skip: test applies only to mysqlnd"); + die("skip: test applies only to mysqlnd"); } if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die("skip Cannot connect to MySQL"); + die("skip Cannot connect to MySQL"); include_once("local_infile_tools.inc"); if ($msg = check_local_infile_support($link, $engine)) - die(sprintf("skip %s, [%d] %s", $msg, $link->errno, $link->error)); + die(sprintf("skip %s, [%d] %s", $msg, $link->errno, $link->error)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/bug69899.phpt b/ext/mysqli/tests/bug69899.phpt index da69e3c629f04..13c0c953818d5 100644 --- a/ext/mysqli/tests/bug69899.phpt +++ b/ext/mysqli/tests/bug69899.phpt @@ -12,7 +12,7 @@ require_once __DIR__ . '/skipif.inc'; require_once __DIR__ . '/skipifconnectfailure.inc'; require_once __DIR__ . '/connect.inc'; if (!$IS_MYSQLND) { - die('skip mysqlnd only'); + die('skip mysqlnd only'); } ?> --FILE-- diff --git a/ext/mysqli/tests/bug70384.phpt b/ext/mysqli/tests/bug70384.phpt index 5489905a0a67b..1bc0e7a97f76d 100644 --- a/ext/mysqli/tests/bug70384.phpt +++ b/ext/mysqli/tests/bug70384.phpt @@ -2,19 +2,19 @@ mysqli_float_handling - ensure 4 byte float is handled correctly --SKIPIF-- server_version < 50709) { - die("skip MySQL 5.7.9+ needed. Found [". - intval(substr($link->server_version."", -5, 1)). - ".". - intval(substr($link->server_version."", -4, 2)). - ".". - intval(substr($link->server_version."", -2, 2)). - "]"); - } - } + require_once('skipif.inc'); + require_once('skipifconnectfailure.inc'); + if (@$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { + if ($link->server_version < 50709) { + die("skip MySQL 5.7.9+ needed. Found [". + intval(substr($link->server_version."", -5, 1)). + ".". + intval(substr($link->server_version."", -4, 2)). + ".". + intval(substr($link->server_version."", -2, 2)). + "]"); + } + } ?> --FILE-- --CLEAN-- --EXPECT-- OK diff --git a/ext/mysqli/tests/bug70949.phpt b/ext/mysqli/tests/bug70949.phpt index b9ad29b6b82ef..24c729c670ae4 100644 --- a/ext/mysqli/tests/bug70949.phpt +++ b/ext/mysqli/tests/bug70949.phpt @@ -6,7 +6,7 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); require_once("connect.inc"); if (!$IS_MYSQLND) { - die("skip mysqlnd only test"); + die("skip mysqlnd only test"); } ?> --FILE-- @@ -51,7 +51,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS bug70949")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/bug71863.phpt b/ext/mysqli/tests/bug71863.phpt index 18465e996b92b..1490f9fe9691f 100644 --- a/ext/mysqli/tests/bug71863.phpt +++ b/ext/mysqli/tests/bug71863.phpt @@ -6,7 +6,7 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); require_once("connect.inc"); if (!$IS_MYSQLND) { - die("skip mysqlnd only test"); + die("skip mysqlnd only test"); } ?> --FILE-- diff --git a/ext/mysqli/tests/bug72701.phpt b/ext/mysqli/tests/bug72701.phpt index 2145de9b48da1..b2944f02039d7 100644 --- a/ext/mysqli/tests/bug72701.phpt +++ b/ext/mysqli/tests/bug72701.phpt @@ -7,7 +7,7 @@ require_once('skipifconnectfailure.inc'); require_once("connect.inc"); if ("127.0.0.1" != $host && "localhost" != $host) { - die("skip require 127.0.0.1 connection"); + die("skip require 127.0.0.1 connection"); } ?> diff --git a/ext/mysqli/tests/bug76386.phpt b/ext/mysqli/tests/bug76386.phpt index 6173ebad8cd6c..f6fe13c917151 100644 --- a/ext/mysqli/tests/bug76386.phpt +++ b/ext/mysqli/tests/bug76386.phpt @@ -7,11 +7,11 @@ require_once('skipifconnectfailure.inc'); require_once("connect.inc"); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die("skip Cannot connect to check required version"); + die("skip Cannot connect to check required version"); /* Fractional seconds are supported with servers >= 5.6.4. */ if (mysqli_get_server_version($link) < 50604) { - die(sprintf("skip Server doesn't support fractional seconds in timestamp (%s)", mysqli_get_server_version($link))); + die(sprintf("skip Server doesn't support fractional seconds in timestamp (%s)", mysqli_get_server_version($link))); } mysqli_close($link); ?> diff --git a/ext/mysqli/tests/bug77956.phpt b/ext/mysqli/tests/bug77956.phpt index d4bc06f93be52..c76e1021e1586 100644 --- a/ext/mysqli/tests/bug77956.phpt +++ b/ext/mysqli/tests/bug77956.phpt @@ -7,12 +7,12 @@ require_once('skipifconnectfailure.inc'); $link = mysqli_init(); if (!my_mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket)) { - die(sprintf("skip Connect failed, [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip Connect failed, [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error())); } require_once('local_infile_tools.inc'); if ($msg = check_local_infile_support($link, $engine)) - die(sprintf("skip %s, [%d] %s", $msg, $link->errno, $link->error)); + die(sprintf("skip %s, [%d] %s", $msg, $link->errno, $link->error)); ?> --INI-- diff --git a/ext/mysqli/tests/gracefull_fail_on_empty_result_set.phpt b/ext/mysqli/tests/gracefull_fail_on_empty_result_set.phpt index 9c94aa6dfb97e..452cb7d8f730e 100644 --- a/ext/mysqli/tests/gracefull_fail_on_empty_result_set.phpt +++ b/ext/mysqli/tests/gracefull_fail_on_empty_result_set.phpt @@ -26,7 +26,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- bool(false) diff --git a/ext/mysqli/tests/mysqli_affected_rows.phpt b/ext/mysqli/tests/mysqli_affected_rows.phpt index b3f6580baea01..3205e7cb2b8e2 100644 --- a/ext/mysqli/tests/mysqli_affected_rows.phpt +++ b/ext/mysqli/tests/mysqli_affected_rows.phpt @@ -2,8 +2,8 @@ mysqli_affected_rows() --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- mysqli object is already closed diff --git a/ext/mysqli/tests/mysqli_affected_rows_oo.phpt b/ext/mysqli/tests/mysqli_affected_rows_oo.phpt index 384ecd5e62d03..5e2e0bba8a09e 100644 --- a/ext/mysqli/tests/mysqli_affected_rows_oo.phpt +++ b/ext/mysqli/tests/mysqli_affected_rows_oo.phpt @@ -2,8 +2,8 @@ mysqli->affected_rows --SKIPIF-- --FILE-- affected_rows ?> --CLEAN-- --EXPECT-- Property access is not allowed yet diff --git a/ext/mysqli/tests/mysqli_auth_pam.phpt b/ext/mysqli/tests/mysqli_auth_pam.phpt index a20851a4db7f9..7d23ee5782571 100644 --- a/ext/mysqli/tests/mysqli_auth_pam.phpt +++ b/ext/mysqli/tests/mysqli_auth_pam.phpt @@ -6,22 +6,22 @@ require_once('skipif.inc'); require_once('connect.inc'); if (!$link = @my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf("SKIP Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", - $host, $user, $db, $port, $socket)); + die(sprintf("SKIP Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", + $host, $user, $db, $port, $socket)); } if ($link->server_version < 50500) - die(sprintf("SKIP Needs MySQL 5.5 or newer, found MySQL %s\n", $link->server_info)); + die(sprintf("SKIP Needs MySQL 5.5 or newer, found MySQL %s\n", $link->server_info)); if (!$res = $link->query("SHOW PLUGINS")) - die(sprintf("SKIP [%d] %s\n", $link->errno, $link->error)); + die(sprintf("SKIP [%d] %s\n", $link->errno, $link->error)); $have_pam = false; while ($row = $res->fetch_assoc()) { - if (isset($row['Name']) && ('mysql_clear_password' == $row['Name'])) { - $have_pam = true; - break; - } + if (isset($row['Name']) && ('mysql_clear_password' == $row['Name'])) { + $have_pam = true; + break; + } } $res->close(); @@ -33,22 +33,22 @@ mysqli_query($link, 'DROP USER pamtest'); mysqli_query($link, 'DROP USER pamtest@localhost'); if (!mysqli_query($link, 'CREATE USER pamtest@"%" IDENTIFIED WITH mysql_clear_password') || - !mysqli_query($link, 'CREATE USER pamtest@"localhost" IDENTIFIED WITH mysql_clear_password')) { - printf("skip Cannot create second DB user [%d] %s", mysqli_errno($link), mysqli_error($link)); - mysqli_close($link); - die("skip CREATE USER failed"); + !mysqli_query($link, 'CREATE USER pamtest@"localhost" IDENTIFIED WITH mysql_clear_password')) { + printf("skip Cannot create second DB user [%d] %s", mysqli_errno($link), mysqli_error($link)); + mysqli_close($link); + die("skip CREATE USER failed"); } if (!$link->query("CREATE TABLE test (id INT)") || !$link->query("INSERT INTO test(id) VALUES (1)")) - die(sprintf("SKIP [%d] %s\n", $link->errno, $link->error)); + die(sprintf("SKIP [%d] %s\n", $link->errno, $link->error)); if (!mysqli_query($link, sprintf("GRANT SELECT ON TABLE %s.test TO pamtest@'%%'", $db)) || - !mysqli_query($link, sprintf("GRANT SELECT ON TABLE %s.test TO pamtest@'localhost'", $db))) { - printf("skip Cannot grant SELECT to user [%d] %s", mysqli_errno($link), mysqli_error($link)); - mysqli_close($link); - die("skip GRANT failed"); + !mysqli_query($link, sprintf("GRANT SELECT ON TABLE %s.test TO pamtest@'localhost'", $db))) { + printf("skip Cannot grant SELECT to user [%d] %s", mysqli_errno($link), mysqli_error($link)); + mysqli_close($link); + die("skip GRANT failed"); } ?> --INI-- diff --git a/ext/mysqli/tests/mysqli_autocommit.phpt b/ext/mysqli/tests/mysqli_autocommit.phpt index af3142ea44ad2..9bfec89b27095 100644 --- a/ext/mysqli/tests/mysqli_autocommit.phpt +++ b/ext/mysqli/tests/mysqli_autocommit.phpt @@ -2,17 +2,17 @@ mysqli_autocommit() --SKIPIF-- errno, $link->error)); + if (!have_innodb($link)) + die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); ?> --FILE-- --EXPECT-- mysqli object is already closed diff --git a/ext/mysqli/tests/mysqli_autocommit_oo.phpt b/ext/mysqli/tests/mysqli_autocommit_oo.phpt index 13e8fb0744c54..1030bedbb3777 100644 --- a/ext/mysqli/tests/mysqli_autocommit_oo.phpt +++ b/ext/mysqli/tests/mysqli_autocommit_oo.phpt @@ -2,18 +2,18 @@ mysqli->autocommit() --SKIPIF-- errno, $link->error)); + require_once('skipif.inc'); + require_once('skipifconnectfailure.inc'); + require_once('connect.inc'); + + if (!$link = new my_mysqli($host, $user, $passwd, $db, $port, $socket)) { + printf("skip Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", + $host, $user, $db, $port, $socket); + exit(1); + } + + if (!have_innodb($link)) + die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); ?> --FILE-- autocommit() ?> --CLEAN-- --EXPECT-- my_mysqli object is already closed diff --git a/ext/mysqli/tests/mysqli_begin_transaction.phpt b/ext/mysqli/tests/mysqli_begin_transaction.phpt index e4c87ed9db75a..fa8d88908cc4b 100644 --- a/ext/mysqli/tests/mysqli_begin_transaction.phpt +++ b/ext/mysqli/tests/mysqli_begin_transaction.phpt @@ -7,10 +7,10 @@ require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die(sprintf("skip Cannot connect, [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip Cannot connect, [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); if (!have_innodb($link)) - die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); + die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); ?> --FILE-- --CLEAN-- --EXPECT-- NULL diff --git a/ext/mysqli/tests/mysqli_change_user_insert_id.phpt b/ext/mysqli/tests/mysqli_change_user_insert_id.phpt index 8fe529236b54b..383a7a1cf869b 100644 --- a/ext/mysqli/tests/mysqli_change_user_insert_id.phpt +++ b/ext/mysqli/tests/mysqli_change_user_insert_id.phpt @@ -7,7 +7,7 @@ require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$IS_MYSQLND) { - die("skip Might hit known and open bugs http://bugs.mysql.com/bug.php?id=30472, http://bugs.mysql.com/bug.php?id=45184"); + die("skip Might hit known and open bugs http://bugs.mysql.com/bug.php?id=30472, http://bugs.mysql.com/bug.php?id=45184"); } ?> --FILE-- @@ -58,7 +58,7 @@ if (!$IS_MYSQLND) { ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_change_user_locks_temporary.phpt b/ext/mysqli/tests/mysqli_change_user_locks_temporary.phpt index c6bc2e9ee9561..70c119b554c25 100644 --- a/ext/mysqli/tests/mysqli_change_user_locks_temporary.phpt +++ b/ext/mysqli/tests/mysqli_change_user_locks_temporary.phpt @@ -100,7 +100,7 @@ die("skip - is the server still buggy?"); ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_change_user_new.phpt b/ext/mysqli/tests/mysqli_change_user_new.phpt index a9744ce98044c..bff89fb8ddd96 100644 --- a/ext/mysqli/tests/mysqli_change_user_new.phpt +++ b/ext/mysqli/tests/mysqli_change_user_new.phpt @@ -6,11 +6,11 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die(sprintf("SKIP Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", - $host, $user, $db, $port, $socket)); + die(sprintf("SKIP Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", + $host, $user, $db, $port, $socket)); if (mysqli_get_server_version($link) < 50600) - die("SKIP For MySQL >= 5.6.0"); + die("SKIP For MySQL >= 5.6.0"); ?> --FILE-- = 50600) - die("SKIP For MySQL < 5.6.0"); + die("SKIP For MySQL < 5.6.0"); ?> --FILE-- 50100)) { - die("skip Your MySQL Server version has a known bug that will cause a crash"); + die("skip Your MySQL Server version has a known bug that will cause a crash"); } if (mysqli_get_server_version($link) >= 50600) - die("SKIP For MySQL < 5.6.0"); + die("SKIP For MySQL < 5.6.0"); ?> --FILE-- errno, $link->error)); + die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); ?> --FILE-- --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_change_user_set_names.phpt b/ext/mysqli/tests/mysqli_change_user_set_names.phpt index 2a1d726fb4c98..f818dea7dab98 100644 --- a/ext/mysqli/tests/mysqli_change_user_set_names.phpt +++ b/ext/mysqli/tests/mysqli_change_user_set_names.phpt @@ -6,19 +6,19 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die(sprintf("skip [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); if (!$res = mysqli_query($link, 'SELECT version() AS server_version')) - die(sprintf("skip [%d] %s\n", mysqli_errno($link), mysqli_error($link))); + die(sprintf("skip [%d] %s\n", mysqli_errno($link), mysqli_error($link))); $tmp = mysqli_fetch_assoc($res); mysqli_free_result($res); $version = explode('.', $tmp['server_version']); if (empty($version)) - die(sprintf("skip Cannot determine server version, we need MySQL Server 4.1+ for the test!")); + die(sprintf("skip Cannot determine server version, we need MySQL Server 4.1+ for the test!")); if ($version[0] <= 4 && $version[1] < 1) - die(sprintf("skip We need MySQL Server 4.1+ for the test!")); + die(sprintf("skip We need MySQL Server 4.1+ for the test!")); ?> --FILE-- --FILE-- @@ -100,7 +100,7 @@ if (!function_exists('mysqli_set_charset')) { ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_character_set_name_oo.phpt b/ext/mysqli/tests/mysqli_character_set_name_oo.phpt index fc5253a8074c9..2a61af45edb67 100644 --- a/ext/mysqli/tests/mysqli_character_set_name_oo.phpt +++ b/ext/mysqli/tests/mysqli_character_set_name_oo.phpt @@ -2,8 +2,8 @@ mysqli_chararcter_set_name(), mysql_client_encoding() [alias] --SKIPIF-- --FILE-- --FILE-- --FILE-- --CLEAN-- --EXPECTF-- Warning: Wrong parameter count for mysqli_warning::mysqli_warning() in %s on line %d diff --git a/ext/mysqli/tests/mysqli_commit.phpt b/ext/mysqli/tests/mysqli_commit.phpt index a85b96229864b..273412de0bb4f 100644 --- a/ext/mysqli/tests/mysqli_commit.phpt +++ b/ext/mysqli/tests/mysqli_commit.phpt @@ -7,10 +7,10 @@ require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die(sprintf("skip Cannot connect, [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip Cannot connect, [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); if (!have_innodb($link)) - die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); + die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); ?> --FILE-- --CLEAN-- --EXPECT-- mysqli object is already closed diff --git a/ext/mysqli/tests/mysqli_commit_oo.phpt b/ext/mysqli/tests/mysqli_commit_oo.phpt index e2b8a25fd33ca..6377fdf5a91c8 100644 --- a/ext/mysqli/tests/mysqli_commit_oo.phpt +++ b/ext/mysqli/tests/mysqli_commit_oo.phpt @@ -7,10 +7,10 @@ require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die(sprintf("skip Cannot connect, [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip Cannot connect, [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); if (!have_innodb($link)) - die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); + die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); ?> --FILE-- --EXPECTF-- mysqli object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_connect_attr.phpt b/ext/mysqli/tests/mysqli_connect_attr.phpt index 694dc72dab548..7d586a694d9aa 100644 --- a/ext/mysqli/tests/mysqli_connect_attr.phpt +++ b/ext/mysqli/tests/mysqli_connect_attr.phpt @@ -6,10 +6,10 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!$IS_MYSQLND) - die("skip: test applies only to mysqlnd"); + die("skip: test applies only to mysqlnd"); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die("skip Cannot connect to the server"); + die("skip Cannot connect to the server"); /* skip test if the server version does not have session_connect_attrs table yet*/ if (!$res = mysqli_query($link, "select count(*) as count from information_schema.tables where table_schema='performance_schema' and table_name='session_connect_attrs';")) diff --git a/ext/mysqli/tests/mysqli_connect_oo_warnings.phpt b/ext/mysqli/tests/mysqli_connect_oo_warnings.phpt index 8b5886bba28cf..9387dd2c48942 100644 --- a/ext/mysqli/tests/mysqli_connect_oo_warnings.phpt +++ b/ext/mysqli/tests/mysqli_connect_oo_warnings.phpt @@ -2,12 +2,12 @@ new mysqli() --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- mysqli_data_seek(): Argument #2 ($offset) must be greater than or equal to 0 diff --git a/ext/mysqli/tests/mysqli_data_seek_oo.phpt b/ext/mysqli/tests/mysqli_data_seek_oo.phpt index 1a60d64a98333..d1939bafa2858 100644 --- a/ext/mysqli/tests/mysqli_data_seek_oo.phpt +++ b/ext/mysqli/tests/mysqli_data_seek_oo.phpt @@ -72,7 +72,7 @@ require_once('skipifconnectfailure.inc'); print "done!"; --CLEAN-- --EXPECT-- mysqli_result object is already closed diff --git a/ext/mysqli/tests/mysqli_debug.phpt b/ext/mysqli/tests/mysqli_debug.phpt index 14c95c2de35be..1646dd9f3aa3a 100644 --- a/ext/mysqli/tests/mysqli_debug.phpt +++ b/ext/mysqli/tests/mysqli_debug.phpt @@ -6,13 +6,13 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_debug')) - die("skip: mysqli_debug() not available"); + die("skip: mysqli_debug() not available"); if (!defined('MYSQLI_DEBUG_TRACE_ENABLED')) - die("skip: can't say for sure if mysqli_debug works"); + die("skip: can't say for sure if mysqli_debug works"); if (defined('MYSQLI_DEBUG_TRACE_ENABLED') && !MYSQLI_DEBUG_TRACE_ENABLED) - die("skip: debug functionality not enabled"); + die("skip: debug functionality not enabled"); ?> --FILE-- --CLEAN-- --EXPECTF-- done%s diff --git a/ext/mysqli/tests/mysqli_debug_append.phpt b/ext/mysqli/tests/mysqli_debug_append.phpt index b246fed9e25b8..65496fdf6e99c 100644 --- a/ext/mysqli/tests/mysqli_debug_append.phpt +++ b/ext/mysqli/tests/mysqli_debug_append.phpt @@ -6,16 +6,16 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_debug')) - die("skip: mysqli_debug() not available"); + die("skip: mysqli_debug() not available"); if (!defined('MYSQLI_DEBUG_TRACE_ENABLED')) - die("skip: can't say for sure if mysqli_debug works"); + die("skip: can't say for sure if mysqli_debug works"); if (defined('MYSQLI_DEBUG_TRACE_ENABLED') && !MYSQLI_DEBUG_TRACE_ENABLED) - die("skip: debug functionality not enabled"); + die("skip: debug functionality not enabled"); if (!$IS_MYSQLND) - die("SKIP Libmysql feature not sufficiently spec'd in MySQL C API documentation"); + die("SKIP Libmysql feature not sufficiently spec'd in MySQL C API documentation"); if (substr(PHP_OS, 0, 3) == 'WIN') die("skip this test is not for Windows platforms"); ?> @@ -88,7 +88,7 @@ if (substr(PHP_OS, 0, 3) == 'WIN') die("skip this test is not for Windows platfo ?> --CLEAN-- --EXPECTF-- done%s diff --git a/ext/mysqli/tests/mysqli_debug_control_string.phpt b/ext/mysqli/tests/mysqli_debug_control_string.phpt index 7a59c7b4e00f0..bd17e138795af 100644 --- a/ext/mysqli/tests/mysqli_debug_control_string.phpt +++ b/ext/mysqli/tests/mysqli_debug_control_string.phpt @@ -6,16 +6,16 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_debug')) - die("skip: mysqli_debug() not available"); + die("skip: mysqli_debug() not available"); if (!defined('MYSQLI_DEBUG_TRACE_ENABLED')) - die("skip: can't say for sure if mysqli_debug works"); + die("skip: can't say for sure if mysqli_debug works"); if (defined('MYSQLI_DEBUG_TRACE_ENABLED') && !MYSQLI_DEBUG_TRACE_ENABLED) - die("skip: debug functionality not enabled"); + die("skip: debug functionality not enabled"); if (!$IS_MYSQLND) - die("SKIP Libmysql feature not sufficiently spec'd in MySQL C API documentation"); + die("SKIP Libmysql feature not sufficiently spec'd in MySQL C API documentation"); ?> --FILE-- --INI-- diff --git a/ext/mysqli/tests/mysqli_debug_mysqlnd_control_string.phpt b/ext/mysqli/tests/mysqli_debug_mysqlnd_control_string.phpt index 5e2be2ac5dea4..54026193169ba 100644 --- a/ext/mysqli/tests/mysqli_debug_mysqlnd_control_string.phpt +++ b/ext/mysqli/tests/mysqli_debug_mysqlnd_control_string.phpt @@ -6,16 +6,16 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_debug')) - die("skip: mysqli_debug() not available"); + die("skip: mysqli_debug() not available"); if (!defined('MYSQLI_DEBUG_TRACE_ENABLED')) - die("skip: can't say for sure if mysqli_debug works"); + die("skip: can't say for sure if mysqli_debug works"); if (defined('MYSQLI_DEBUG_TRACE_ENABLED') && !MYSQLI_DEBUG_TRACE_ENABLED) - die("skip: debug functionality not enabled"); + die("skip: debug functionality not enabled"); if (!$IS_MYSQLND) - die("SKIP Libmysql feature not sufficiently spec'd in MySQL C API documentation"); + die("SKIP Libmysql feature not sufficiently spec'd in MySQL C API documentation"); ?> --FILE-- --CLEAN-- --EXPECTF-- [083][control string 'n:O,%smysqli_debug_phpt.trace'] Trace file has not been written. diff --git a/ext/mysqli/tests/mysqli_debug_mysqlnd_only.phpt b/ext/mysqli/tests/mysqli_debug_mysqlnd_only.phpt index a99df69359116..0d963d2370188 100644 --- a/ext/mysqli/tests/mysqli_debug_mysqlnd_only.phpt +++ b/ext/mysqli/tests/mysqli_debug_mysqlnd_only.phpt @@ -7,16 +7,16 @@ require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!function_exists('mysqli_debug')) - die("skip mysqli_debug() not available"); + die("skip mysqli_debug() not available"); if (!defined('MYSQLI_DEBUG_TRACE_ENABLED')) - die("skip: can't say for sure if mysqli_debug works"); + die("skip: can't say for sure if mysqli_debug works"); if (defined('MYSQLI_DEBUG_TRACE_ENABLED') && !MYSQLI_DEBUG_TRACE_ENABLED) - die("skip: debug functionality not enabled"); + die("skip: debug functionality not enabled"); if (!$IS_MYSQLND) - die("skip mysqlnd only test"); + die("skip mysqlnd only test"); ?> --FILE-- --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_disable_reads_from_master.phpt b/ext/mysqli/tests/mysqli_disable_reads_from_master.phpt index fe51b6141d8d6..54edb67a07355 100644 --- a/ext/mysqli/tests/mysqli_disable_reads_from_master.phpt +++ b/ext/mysqli/tests/mysqli_disable_reads_from_master.phpt @@ -6,7 +6,7 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_disable_reads_from_master')) { - die("skip mysqli_disable_reads_from_master() not available"); + die("skip mysqli_disable_reads_from_master() not available"); } ?> --FILE-- @@ -39,7 +39,7 @@ if (!function_exists('mysqli_disable_reads_from_master')) { ?> --CLEAN-- --EXPECTF-- Warning: mysqli_disable_reads_from_master(): mysqli object is already closed in %s on line %d diff --git a/ext/mysqli/tests/mysqli_enable_reads_from_master.phpt b/ext/mysqli/tests/mysqli_enable_reads_from_master.phpt index d6e3088bc2d57..9c74b9592c21c 100644 --- a/ext/mysqli/tests/mysqli_enable_reads_from_master.phpt +++ b/ext/mysqli/tests/mysqli_enable_reads_from_master.phpt @@ -6,7 +6,7 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_enable_reads_from_master')) { - die("skip function mysqli_enable_reads_from_master() not available\n"); + die("skip function mysqli_enable_reads_from_master() not available\n"); } ?> --FILE-- diff --git a/ext/mysqli/tests/mysqli_expire_password.phpt b/ext/mysqli/tests/mysqli_expire_password.phpt index 788a3571c5e28..b11856d60dfca 100644 --- a/ext/mysqli/tests/mysqli_expire_password.phpt +++ b/ext/mysqli/tests/mysqli_expire_password.phpt @@ -6,45 +6,45 @@ require_once('skipif.inc'); require_once('connect.inc'); if (!$link = @my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf("SKIP Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", - $host, $user, $db, $port, $socket)); + die(sprintf("SKIP Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", + $host, $user, $db, $port, $socket)); } if ($link->server_version < 50610) - die(sprintf("SKIP Needs MySQL 5.6.10 or newer, found MySQL %s\n", $link->server_info)); + die(sprintf("SKIP Needs MySQL 5.6.10 or newer, found MySQL %s\n", $link->server_info)); if (!$IS_MYSQLND && (mysqli_get_client_version() < 50610)) { - die(sprintf("SKIP Needs libmysql 5.6.10 or newer, found %s\n", mysqli_get_client_version())); + die(sprintf("SKIP Needs libmysql 5.6.10 or newer, found %s\n", mysqli_get_client_version())); } mysqli_query($link, 'DROP USER expiretest'); mysqli_query($link, 'DROP USER expiretest@localhost'); if (!mysqli_query($link, 'CREATE USER expiretest@"%"') || - !mysqli_query($link, 'CREATE USER expiretest@"localhost"')) { - printf("skip Cannot create second DB user [%d] %s", mysqli_errno($link), mysqli_error($link)); - mysqli_close($link); - die("skip CREATE USER failed"); + !mysqli_query($link, 'CREATE USER expiretest@"localhost"')) { + printf("skip Cannot create second DB user [%d] %s", mysqli_errno($link), mysqli_error($link)); + mysqli_close($link); + die("skip CREATE USER failed"); } if (!mysqli_query($link, 'ALTER USER expiretest@"%" PASSWORD EXPIRE') || - !mysqli_query($link, 'ALTER USER expiretest@"localhost" PASSWORD EXPIRE')) { - printf("skip Cannot modify second DB user [%d] %s", mysqli_errno($link), mysqli_error($link)); - mysqli_close($link); - die("skip ALTER USER failed"); + !mysqli_query($link, 'ALTER USER expiretest@"localhost" PASSWORD EXPIRE')) { + printf("skip Cannot modify second DB user [%d] %s", mysqli_errno($link), mysqli_error($link)); + mysqli_close($link); + die("skip ALTER USER failed"); } if (!$link->query("DROP TABLE IF EXISTS test") || - !$link->query("CREATE TABLE test (id INT)") || !$link->query("INSERT INTO test(id) VALUES (1)")) - die(sprintf("SKIP [%d] %s\n", $link->errno, $link->error)); + !$link->query("CREATE TABLE test (id INT)") || !$link->query("INSERT INTO test(id) VALUES (1)")) + die(sprintf("SKIP [%d] %s\n", $link->errno, $link->error)); if (!mysqli_query($link, sprintf("GRANT SELECT ON TABLE %s.test TO expiretest@'%%'", $db)) || - !mysqli_query($link, sprintf("GRANT SELECT ON TABLE %s.test TO expiretest@'localhost'", $db))) { - printf("skip Cannot grant SELECT to user [%d] %s", mysqli_errno($link), mysqli_error($link)); - mysqli_close($link); - die("skip GRANT failed"); + !mysqli_query($link, sprintf("GRANT SELECT ON TABLE %s.test TO expiretest@'localhost'", $db))) { + printf("skip Cannot grant SELECT to user [%d] %s", mysqli_errno($link), mysqli_error($link)); + mysqli_close($link); + die("skip GRANT failed"); } ?> --FILE-- @@ -117,9 +117,9 @@ if (!mysqli_query($link, sprintf("GRANT SELECT ON TABLE %s.test TO expiretest@'% ?> --CLEAN-- --EXPECTF-- Warning: mysqli%sconnect(): (HY000/1862): %s in %s on line %d diff --git a/ext/mysqli/tests/mysqli_explain_metadata.phpt b/ext/mysqli/tests/mysqli_explain_metadata.phpt index 45a567dd9f0c2..ade3e93fa7ba4 100644 --- a/ext/mysqli/tests/mysqli_explain_metadata.phpt +++ b/ext/mysqli/tests/mysqli_explain_metadata.phpt @@ -156,7 +156,7 @@ if (!$IS_MYSQLND) ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_fetch_all.phpt b/ext/mysqli/tests/mysqli_fetch_all.phpt index 7c962790c6f86..ae99c2ca87571 100644 --- a/ext/mysqli/tests/mysqli_fetch_all.phpt +++ b/ext/mysqli/tests/mysqli_fetch_all.phpt @@ -5,7 +5,7 @@ mysqli_fetch_all() require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_fetch_all')) - die("skip: function only available with mysqlnd"); + die("skip: function only available with mysqlnd"); ?> --FILE-- --CLEAN-- --EXPECT-- [005] diff --git a/ext/mysqli/tests/mysqli_fetch_all_oo.phpt b/ext/mysqli/tests/mysqli_fetch_all_oo.phpt index ff56ad1a9e98a..358dc2ae8b1aa 100644 --- a/ext/mysqli/tests/mysqli_fetch_all_oo.phpt +++ b/ext/mysqli/tests/mysqli_fetch_all_oo.phpt @@ -6,7 +6,7 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_fetch_all')) - die("skip: function only available with mysqlnd"); + die("skip: function only available with mysqlnd"); ?> --FILE-- --CLEAN-- --EXPECTF-- [005] diff --git a/ext/mysqli/tests/mysqli_fetch_array_assoc.phpt b/ext/mysqli/tests/mysqli_fetch_array_assoc.phpt index defa5a541efe3..cbb3367dd0a1e 100644 --- a/ext/mysqli/tests/mysqli_fetch_array_assoc.phpt +++ b/ext/mysqli/tests/mysqli_fetch_array_assoc.phpt @@ -28,7 +28,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- [002] diff --git a/ext/mysqli/tests/mysqli_fetch_array_many_rows.phpt b/ext/mysqli/tests/mysqli_fetch_array_many_rows.phpt index 33330074df11b..d3e8c138b0ced 100644 --- a/ext/mysqli/tests/mysqli_fetch_array_many_rows.phpt +++ b/ext/mysqli/tests/mysqli_fetch_array_many_rows.phpt @@ -108,7 +108,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_fetch_array_oo.phpt b/ext/mysqli/tests/mysqli_fetch_array_oo.phpt index e4e39b9dc7601..6bf2b0f4c02df 100644 --- a/ext/mysqli/tests/mysqli_fetch_array_oo.phpt +++ b/ext/mysqli/tests/mysqli_fetch_array_oo.phpt @@ -278,7 +278,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- [005] diff --git a/ext/mysqli/tests/mysqli_fetch_assoc.phpt b/ext/mysqli/tests/mysqli_fetch_assoc.phpt index 62f2bf05e4662..de19f9a878ae6 100644 --- a/ext/mysqli/tests/mysqli_fetch_assoc.phpt +++ b/ext/mysqli/tests/mysqli_fetch_assoc.phpt @@ -62,7 +62,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- [005] diff --git a/ext/mysqli/tests/mysqli_fetch_assoc_bit.phpt b/ext/mysqli/tests/mysqli_fetch_assoc_bit.phpt index cc60a01b83a66..d59cd82128e02 100644 --- a/ext/mysqli/tests/mysqli_fetch_assoc_bit.phpt +++ b/ext/mysqli/tests/mysqli_fetch_assoc_bit.phpt @@ -2,14 +2,14 @@ mysqli_fetch_assoc() - BIT --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_fetch_assoc_no_alias_utf8.phpt b/ext/mysqli/tests/mysqli_fetch_assoc_no_alias_utf8.phpt index d74fb4827010d..225a5c03d82e5 100644 --- a/ext/mysqli/tests/mysqli_fetch_assoc_no_alias_utf8.phpt +++ b/ext/mysqli/tests/mysqli_fetch_assoc_no_alias_utf8.phpt @@ -2,35 +2,35 @@ mysqli_fetch_assoc() - utf8 --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- mysqli object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_fetch_assoc_zerofill.phpt b/ext/mysqli/tests/mysqli_fetch_assoc_zerofill.phpt index b6968ccbaead6..6d53211697d46 100644 --- a/ext/mysqli/tests/mysqli_fetch_assoc_zerofill.phpt +++ b/ext/mysqli/tests/mysqli_fetch_assoc_zerofill.phpt @@ -71,7 +71,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_fetch_field.phpt b/ext/mysqli/tests/mysqli_fetch_field.phpt index f70f422534aad..2018d75755051 100644 --- a/ext/mysqli/tests/mysqli_fetch_field.phpt +++ b/ext/mysqli/tests/mysqli_fetch_field.phpt @@ -78,7 +78,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- object(stdClass)#%d (13) { diff --git a/ext/mysqli/tests/mysqli_fetch_field_direct.phpt b/ext/mysqli/tests/mysqli_fetch_field_direct.phpt index b8544d87f40bf..4a4d240be3721 100644 --- a/ext/mysqli/tests/mysqli_fetch_field_direct.phpt +++ b/ext/mysqli/tests/mysqli_fetch_field_direct.phpt @@ -41,7 +41,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- mysqli_fetch_field_direct(): Argument #2 ($offset) must be greater than or equal to 0 diff --git a/ext/mysqli/tests/mysqli_fetch_field_direct_oo.phpt b/ext/mysqli/tests/mysqli_fetch_field_direct_oo.phpt index 9c7992570184f..1f94eefd388d5 100644 --- a/ext/mysqli/tests/mysqli_fetch_field_direct_oo.phpt +++ b/ext/mysqli/tests/mysqli_fetch_field_direct_oo.phpt @@ -53,7 +53,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- mysqli object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_fetch_field_flags.phpt b/ext/mysqli/tests/mysqli_fetch_field_flags.phpt index 14ca304aa42b8..7dff325623ddb 100644 --- a/ext/mysqli/tests/mysqli_fetch_field_flags.phpt +++ b/ext/mysqli/tests/mysqli_fetch_field_flags.phpt @@ -7,10 +7,10 @@ require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die(printf("skip: [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error())); + die(printf("skip: [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error())); if (mysqli_get_server_version($link) < 50041) - die("skip: Due to many MySQL Server differences, the test requires 5.0.41+"); + die("skip: Due to many MySQL Server differences, the test requires 5.0.41+"); mysqli_close($link); ?> @@ -219,7 +219,7 @@ mysqli_close($link); ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_fetch_field_oo.phpt b/ext/mysqli/tests/mysqli_fetch_field_oo.phpt index c5aa09c10927a..d655e05a9c1da 100644 --- a/ext/mysqli/tests/mysqli_fetch_field_oo.phpt +++ b/ext/mysqli/tests/mysqli_fetch_field_oo.phpt @@ -66,7 +66,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- mysqli object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_fetch_field_types.phpt b/ext/mysqli/tests/mysqli_fetch_field_types.phpt index 074d9ccd1c0d7..dcfbbaaace4b0 100644 --- a/ext/mysqli/tests/mysqli_fetch_field_types.phpt +++ b/ext/mysqli/tests/mysqli_fetch_field_types.phpt @@ -109,7 +109,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_fetch_fields.phpt b/ext/mysqli/tests/mysqli_fetch_fields.phpt index 114029ac101ca..7cfad35f87389 100644 --- a/ext/mysqli/tests/mysqli_fetch_fields.phpt +++ b/ext/mysqli/tests/mysqli_fetch_fields.phpt @@ -57,7 +57,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- object(stdClass)#%d (13) { diff --git a/ext/mysqli/tests/mysqli_fetch_lengths.phpt b/ext/mysqli/tests/mysqli_fetch_lengths.phpt index 371b300b17110..a1e4f50dbdfb9 100644 --- a/ext/mysqli/tests/mysqli_fetch_lengths.phpt +++ b/ext/mysqli/tests/mysqli_fetch_lengths.phpt @@ -37,7 +37,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- bool(false) diff --git a/ext/mysqli/tests/mysqli_fetch_lengths_oo.phpt b/ext/mysqli/tests/mysqli_fetch_lengths_oo.phpt index 1de60e0363061..6c117afc59371 100644 --- a/ext/mysqli/tests/mysqli_fetch_lengths_oo.phpt +++ b/ext/mysqli/tests/mysqli_fetch_lengths_oo.phpt @@ -33,10 +33,10 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- NULL diff --git a/ext/mysqli/tests/mysqli_fetch_object.phpt b/ext/mysqli/tests/mysqli_fetch_object.phpt index 443b2663c7447..a234aee4c8a5c 100644 --- a/ext/mysqli/tests/mysqli_fetch_object.phpt +++ b/ext/mysqli/tests/mysqli_fetch_object.phpt @@ -139,7 +139,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- Exception: Too few arguments to function mysqli_fetch_object_construct::__construct(), 0 passed and exactly 2 expected diff --git a/ext/mysqli/tests/mysqli_fetch_object_no_constructor.phpt b/ext/mysqli/tests/mysqli_fetch_object_no_constructor.phpt index 9aac03195ba01..979c523199716 100644 --- a/ext/mysqli/tests/mysqli_fetch_object_no_constructor.phpt +++ b/ext/mysqli/tests/mysqli_fetch_object_no_constructor.phpt @@ -45,7 +45,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- No exception with PHP: diff --git a/ext/mysqli/tests/mysqli_fetch_object_no_object.phpt b/ext/mysqli/tests/mysqli_fetch_object_no_object.phpt index 75e62fd9406f8..5a89d6d3f1253 100644 --- a/ext/mysqli/tests/mysqli_fetch_object_no_object.phpt +++ b/ext/mysqli/tests/mysqli_fetch_object_no_object.phpt @@ -19,7 +19,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- %s(6) "object" diff --git a/ext/mysqli/tests/mysqli_fetch_object_oo.phpt b/ext/mysqli/tests/mysqli_fetch_object_oo.phpt index 674c68a4fd806..b00c485950004 100644 --- a/ext/mysqli/tests/mysqli_fetch_object_oo.phpt +++ b/ext/mysqli/tests/mysqli_fetch_object_oo.phpt @@ -128,7 +128,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- mysqli object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_fetch_row.phpt b/ext/mysqli/tests/mysqli_fetch_row.phpt index a1a891d7029e6..09ae78aba6b1d 100644 --- a/ext/mysqli/tests/mysqli_fetch_row.phpt +++ b/ext/mysqli/tests/mysqli_fetch_row.phpt @@ -33,7 +33,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- [004] diff --git a/ext/mysqli/tests/mysqli_field_count.phpt b/ext/mysqli/tests/mysqli_field_count.phpt index 26d1b8b1089f4..ca40616547a34 100644 --- a/ext/mysqli/tests/mysqli_field_count.phpt +++ b/ext/mysqli/tests/mysqli_field_count.phpt @@ -42,7 +42,7 @@ require_once('skipifconnectfailure.inc'); print "done!"; --CLEAN-- --EXPECT-- int(0) diff --git a/ext/mysqli/tests/mysqli_field_seek.phpt b/ext/mysqli/tests/mysqli_field_seek.phpt index 1f5a6ee8fba74..0a0b02273efc8 100644 --- a/ext/mysqli/tests/mysqli_field_seek.phpt +++ b/ext/mysqli/tests/mysqli_field_seek.phpt @@ -119,7 +119,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- mysqli_field_seek(): Argument #2 ($field_nr) must be greater than or equal to 0 diff --git a/ext/mysqli/tests/mysqli_field_tell.phpt b/ext/mysqli/tests/mysqli_field_tell.phpt index 3575d17d8b5a5..79cfc04885191 100644 --- a/ext/mysqli/tests/mysqli_field_tell.phpt +++ b/ext/mysqli/tests/mysqli_field_tell.phpt @@ -53,7 +53,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- int(0) diff --git a/ext/mysqli/tests/mysqli_fork.phpt b/ext/mysqli/tests/mysqli_fork.phpt index 594e30178e969..ca5eb6230facf 100644 --- a/ext/mysqli/tests/mysqli_fork.phpt +++ b/ext/mysqli/tests/mysqli_fork.phpt @@ -6,17 +6,17 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('pcntl_fork')) - die("skip Process Control Functions not available"); + die("skip Process Control Functions not available"); if (!function_exists('posix_getpid')) - die("skip POSIX functions not available"); + die("skip POSIX functions not available"); require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die(sprintf("skip Cannot connect, [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip Cannot connect, [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); if (!have_innodb($link)) - die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); + die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); ?> --FILE-- diff --git a/ext/mysqli/tests/mysqli_free_result.phpt b/ext/mysqli/tests/mysqli_free_result.phpt index 3956021615084..8f81fffab4d57 100644 --- a/ext/mysqli/tests/mysqli_free_result.phpt +++ b/ext/mysqli/tests/mysqli_free_result.phpt @@ -49,7 +49,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- a diff --git a/ext/mysqli/tests/mysqli_get_charset.phpt b/ext/mysqli/tests/mysqli_get_charset.phpt index 88aa0e471d3b9..68ee608028e5a 100644 --- a/ext/mysqli/tests/mysqli_get_charset.phpt +++ b/ext/mysqli/tests/mysqli_get_charset.phpt @@ -5,7 +5,7 @@ mysqli_get_charset() require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_get_charset')) - die("skip: function not available"); + die("skip: function not available"); ?> --FILE-- --CLEAN-- --EXPECT-- mysqli object is already closed diff --git a/ext/mysqli/tests/mysqli_get_client_stats.phpt b/ext/mysqli/tests/mysqli_get_client_stats.phpt index 9ef1cc444898c..78f3d05b39c27 100644 --- a/ext/mysqli/tests/mysqli_get_client_stats.phpt +++ b/ext/mysqli/tests/mysqli_get_client_stats.phpt @@ -5,7 +5,7 @@ mysqli_get_client_stats() require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_get_client_stats')) { - die("skip only available with mysqlnd"); + die("skip only available with mysqlnd"); } ?> --INI-- diff --git a/ext/mysqli/tests/mysqli_get_client_stats_implicit_free.phpt b/ext/mysqli/tests/mysqli_get_client_stats_implicit_free.phpt index ec4ebe7cfbc6e..92a779b31f483 100644 --- a/ext/mysqli/tests/mysqli_get_client_stats_implicit_free.phpt +++ b/ext/mysqli/tests/mysqli_get_client_stats_implicit_free.phpt @@ -5,7 +5,7 @@ mysqli_get_client_stats() - implicit_free_result require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_get_client_stats')) { - die("skip only available with mysqlnd"); + die("skip only available with mysqlnd"); } ?> --INI-- diff --git a/ext/mysqli/tests/mysqli_get_client_stats_off.phpt b/ext/mysqli/tests/mysqli_get_client_stats_off.phpt index 6cd49a2c1514b..e648d6695d6a6 100644 --- a/ext/mysqli/tests/mysqli_get_client_stats_off.phpt +++ b/ext/mysqli/tests/mysqli_get_client_stats_off.phpt @@ -5,7 +5,7 @@ mysqli_get_client_stats() - php_ini setting require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_get_client_stats')) { - die("skip only available with mysqlnd"); + die("skip only available with mysqlnd"); } ?> --INI-- diff --git a/ext/mysqli/tests/mysqli_get_client_stats_ps.phpt b/ext/mysqli/tests/mysqli_get_client_stats_ps.phpt index c9107115d3ead..ce7a5e3267a13 100644 --- a/ext/mysqli/tests/mysqli_get_client_stats_ps.phpt +++ b/ext/mysqli/tests/mysqli_get_client_stats_ps.phpt @@ -5,7 +5,7 @@ mysqli_get_client_stats() - PS require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_get_client_stats')) { - die("skip only available with mysqlnd"); + die("skip only available with mysqlnd"); } ?> --INI-- diff --git a/ext/mysqli/tests/mysqli_get_client_stats_skipped.phpt b/ext/mysqli/tests/mysqli_get_client_stats_skipped.phpt index 0e7f57bab1119..ef1ea86e50d1d 100644 --- a/ext/mysqli/tests/mysqli_get_client_stats_skipped.phpt +++ b/ext/mysqli/tests/mysqli_get_client_stats_skipped.phpt @@ -8,7 +8,7 @@ mysqlnd.collect_memory_statistics="1" require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_get_client_stats')) { - die("skip only available with mysqlnd"); + die("skip only available with mysqlnd"); } ?> --FILE-- diff --git a/ext/mysqli/tests/mysqli_get_connection_stats.phpt b/ext/mysqli/tests/mysqli_get_connection_stats.phpt index 24e871bf143e0..8c14ff2f1543b 100644 --- a/ext/mysqli/tests/mysqli_get_connection_stats.phpt +++ b/ext/mysqli/tests/mysqli_get_connection_stats.phpt @@ -8,7 +8,7 @@ mysqlnd.collect_memory_statistics="1" require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_get_connection_stats')) { - die("skip only available with mysqlnd"); + die("skip only available with mysqlnd"); } ?> --FILE-- @@ -73,7 +73,7 @@ if (!function_exists('mysqli_get_connection_stats')) { ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_get_connection_stats_off.phpt b/ext/mysqli/tests/mysqli_get_connection_stats_off.phpt index 8002c045bfa7b..d2b087ce9aa57 100644 --- a/ext/mysqli/tests/mysqli_get_connection_stats_off.phpt +++ b/ext/mysqli/tests/mysqli_get_connection_stats_off.phpt @@ -8,7 +8,7 @@ mysqlnd.collect_memory_statistics="0" require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_get_connection_stats')) { - die("skip only available with mysqlnd"); + die("skip only available with mysqlnd"); } ?> --FILE-- diff --git a/ext/mysqli/tests/mysqli_get_host_info.phpt b/ext/mysqli/tests/mysqli_get_host_info.phpt index a26daa9ce1ca2..4d9087860fb21 100644 --- a/ext/mysqli/tests/mysqli_get_host_info.phpt +++ b/ext/mysqli/tests/mysqli_get_host_info.phpt @@ -22,7 +22,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_get_server_info.phpt b/ext/mysqli/tests/mysqli_get_server_info.phpt index 33e816f2e8a84..88cfd47ee19e8 100644 --- a/ext/mysqli/tests/mysqli_get_server_info.phpt +++ b/ext/mysqli/tests/mysqli_get_server_info.phpt @@ -17,7 +17,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_get_warnings.phpt b/ext/mysqli/tests/mysqli_get_warnings.phpt index 23356db4e6bfe..f81baa4177cca 100644 --- a/ext/mysqli/tests/mysqli_get_warnings.phpt +++ b/ext/mysqli/tests/mysqli_get_warnings.phpt @@ -6,7 +6,7 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$TEST_EXPERIMENTAL) - die("skip - experimental (= unsupported) feature"); + die("skip - experimental (= unsupported) feature"); ?> --FILE-- --CLEAN-- --EXPECT-- mysqli object is already closed diff --git a/ext/mysqli/tests/mysqli_insert_id_variation.phpt b/ext/mysqli/tests/mysqli_insert_id_variation.phpt index 16797aa94b370..b3f36d4cb0ccc 100644 --- a/ext/mysqli/tests/mysqli_insert_id_variation.phpt +++ b/ext/mysqli/tests/mysqli_insert_id_variation.phpt @@ -95,7 +95,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_insert_id_var")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/mysqli_insert_packet_overflow.phpt b/ext/mysqli/tests/mysqli_insert_packet_overflow.phpt index 69f781f48a10b..105b3276d3bb4 100644 --- a/ext/mysqli/tests/mysqli_insert_packet_overflow.phpt +++ b/ext/mysqli/tests/mysqli_insert_packet_overflow.phpt @@ -6,14 +6,14 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die(sprintf("SKIP [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("SKIP [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error())); $max_len = pow(2, 24); if (!$res = mysqli_query($link, "SHOW GLOBAL VARIABLES LIKE 'max_allowed_packet'")) - die(sprintf("SKIP [%d] %s\n", mysqli_errno($link), mysqli_error($link))); + die(sprintf("SKIP [%d] %s\n", mysqli_errno($link), mysqli_error($link))); if (!mysqli_query($link, "SET NAMES 'latin1'")) - die(sprintf("SKIP [%d] %s\n", mysqli_errno($link), mysqli_error($link))); + die(sprintf("SKIP [%d] %s\n", mysqli_errno($link), mysqli_error($link))); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/mysqli_kill.phpt b/ext/mysqli/tests/mysqli_kill.phpt index 563a6ba19c64f..d1301ac550fa6 100644 --- a/ext/mysqli/tests/mysqli_kill.phpt +++ b/ext/mysqli/tests/mysqli_kill.phpt @@ -77,7 +77,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- mysqli_kill(): Argument #2 ($connection_id) must be greater than 0 diff --git a/ext/mysqli/tests/mysqli_last_insert_id.phpt b/ext/mysqli/tests/mysqli_last_insert_id.phpt index b0c453d08e794..0598f29b740d9 100644 --- a/ext/mysqli/tests/mysqli_last_insert_id.phpt +++ b/ext/mysqli/tests/mysqli_last_insert_id.phpt @@ -176,7 +176,7 @@ API vs. SQL LAST_INSERT_ID() ?> --CLEAN-- --EXPECTF-- API: %d, SQL: %d diff --git a/ext/mysqli/tests/mysqli_more_results.phpt b/ext/mysqli/tests/mysqli_more_results.phpt index 36a477fcf3de6..aaa4f65f28856 100644 --- a/ext/mysqli/tests/mysqli_more_results.phpt +++ b/ext/mysqli/tests/mysqli_more_results.phpt @@ -59,7 +59,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- [004] diff --git a/ext/mysqli/tests/mysqli_multi_query.phpt b/ext/mysqli/tests/mysqli_multi_query.phpt index 843298140ba70..0cc260a557935 100644 --- a/ext/mysqli/tests/mysqli_multi_query.phpt +++ b/ext/mysqli/tests/mysqli_multi_query.phpt @@ -111,7 +111,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- [006] 3 diff --git a/ext/mysqli/tests/mysqli_mysqlnd_read_timeout.phpt b/ext/mysqli/tests/mysqli_mysqlnd_read_timeout.phpt index 159d7d9853d42..ec424e44bda98 100644 --- a/ext/mysqli/tests/mysqli_mysqlnd_read_timeout.phpt +++ b/ext/mysqli/tests/mysqli_mysqlnd_read_timeout.phpt @@ -6,8 +6,8 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$IS_MYSQLND) - /* The libmysql read_timeout limit default is 365 * 24 * 3600 seconds. It cannot be altered through PHP API calls */ - die("skip mysqlnd only test"); + /* The libmysql read_timeout limit default is 365 * 24 * 3600 seconds. It cannot be altered through PHP API calls */ + die("skip mysqlnd only test"); ?> --INI-- default_socket_timeout=60 diff --git a/ext/mysqli/tests/mysqli_mysqlnd_read_timeout_long.phpt b/ext/mysqli/tests/mysqli_mysqlnd_read_timeout_long.phpt index 403662829a711..a4459992d887d 100644 --- a/ext/mysqli/tests/mysqli_mysqlnd_read_timeout_long.phpt +++ b/ext/mysqli/tests/mysqli_mysqlnd_read_timeout_long.phpt @@ -6,14 +6,14 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!$IS_MYSQLND) { - die("skip: test applies only to mysqlnd"); + die("skip: test applies only to mysqlnd"); } if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); } if (mysqli_get_server_version($link) <= 50011) { - die(sprintf('skip Needs MySQL 5.0.12+, found version %d.', mysqli_get_server_version($link))); + die(sprintf('skip Needs MySQL 5.0.12+, found version %d.', mysqli_get_server_version($link))); } ?> --INI-- diff --git a/ext/mysqli/tests/mysqli_mysqlnd_read_timeout_zero.phpt b/ext/mysqli/tests/mysqli_mysqlnd_read_timeout_zero.phpt index 011df0e7628af..5ba35270281c5 100644 --- a/ext/mysqli/tests/mysqli_mysqlnd_read_timeout_zero.phpt +++ b/ext/mysqli/tests/mysqli_mysqlnd_read_timeout_zero.phpt @@ -6,14 +6,14 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!$IS_MYSQLND) { - die("skip: test applies only to mysqlnd"); + die("skip: test applies only to mysqlnd"); } if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); } if (mysqli_get_server_version($link) <= 50011) { - die(sprintf('skip Needs MySQL 5.0.12+, found version %d.', mysqli_get_server_version($link))); + die(sprintf('skip Needs MySQL 5.0.12+, found version %d.', mysqli_get_server_version($link))); } ?> --INI-- diff --git a/ext/mysqli/tests/mysqli_next_result.phpt b/ext/mysqli/tests/mysqli_next_result.phpt index 62b743014f3d0..425260b92657d 100644 --- a/ext/mysqli/tests/mysqli_next_result.phpt +++ b/ext/mysqli/tests/mysqli_next_result.phpt @@ -64,7 +64,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli object is already closed diff --git a/ext/mysqli/tests/mysqli_num_fields.phpt b/ext/mysqli/tests/mysqli_num_fields.phpt index e1d61cf7853d4..083ccef4bfb90 100644 --- a/ext/mysqli/tests/mysqli_num_fields.phpt +++ b/ext/mysqli/tests/mysqli_num_fields.phpt @@ -43,7 +43,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_result object is already closed diff --git a/ext/mysqli/tests/mysqli_num_rows.phpt b/ext/mysqli/tests/mysqli_num_rows.phpt index 04a5dec59aadc..f617757d37820 100644 --- a/ext/mysqli/tests/mysqli_num_rows.phpt +++ b/ext/mysqli/tests/mysqli_num_rows.phpt @@ -71,7 +71,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_result object is already closed diff --git a/ext/mysqli/tests/mysqli_options_init_command.phpt b/ext/mysqli/tests/mysqli_options_init_command.phpt index 089f230538d01..fe591c2fe72d9 100644 --- a/ext/mysqli/tests/mysqli_options_init_command.phpt +++ b/ext/mysqli/tests/mysqli_options_init_command.phpt @@ -69,7 +69,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- Warning: mysqli_real_connect(): (%s/%d): %s in %s on line %d diff --git a/ext/mysqli/tests/mysqli_options_int_and_float_native.phpt b/ext/mysqli/tests/mysqli_options_int_and_float_native.phpt index 91bd38553c24c..0b7f8df703fae 100644 --- a/ext/mysqli/tests/mysqli_options_int_and_float_native.phpt +++ b/ext/mysqli/tests/mysqli_options_int_and_float_native.phpt @@ -7,7 +7,7 @@ require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$IS_MYSQLND) - die("skip mysqlnd only test"); + die("skip mysqlnd only test"); ?> --FILE-- --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_pam_sha256.phpt b/ext/mysqli/tests/mysqli_pam_sha256.phpt index 5d9591e0dc4eb..8866409efeb5f 100644 --- a/ext/mysqli/tests/mysqli_pam_sha256.phpt +++ b/ext/mysqli/tests/mysqli_pam_sha256.phpt @@ -10,43 +10,43 @@ phpinfo(INFO_MODULES); $tmp = ob_get_contents(); ob_end_clean(); if (!stristr($tmp, "auth_plugin_sha256_password")) - die("skip SHA256 auth plugin not built-in to mysqlnd"); + die("skip SHA256 auth plugin not built-in to mysqlnd"); require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die(printf("skip: [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error())); + die(printf("skip: [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error())); if (mysqli_get_server_version($link) < 50606) - die("skip: SHA-256 requires MySQL 5.6.6+"); + die("skip: SHA-256 requires MySQL 5.6.6+"); if (!($res = $link->query("SHOW PLUGINS"))) { - die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); + die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); } $found = false; while ($row = $res->fetch_assoc()) { - if (($row['Name'] == 'sha256_password') && ($row['Status'] == 'ACTIVE')) { - $found = true; - break; - } + if (($row['Name'] == 'sha256_password') && ($row['Status'] == 'ACTIVE')) { + $found = true; + break; + } } if (!$found) - die("skip SHA-256 server plugin unavailable"); + die("skip SHA-256 server plugin unavailable"); if (!($res = $link->query("SHOW STATUS LIKE 'Rsa_public_key'"))) { - die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); + die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); } if (!($row = $res->fetch_assoc())) { - die(sprintf("skip Failed to check RSA pub key, [%d] %s\n", $link->errno, $link->error)); + die(sprintf("skip Failed to check RSA pub key, [%d] %s\n", $link->errno, $link->error)); } if (strlen($row['Value']) < 100) { - die(sprintf("skip Server misconfiguration? RSA pub key is suspicious, [%d] %s\n", $link->errno, $link->error)); + die(sprintf("skip Server misconfiguration? RSA pub key is suspicious, [%d] %s\n", $link->errno, $link->error)); } if (!$link->query("SET @@session.old_passwords=2")) { - die(sprintf("skip Cannot set @@session.old_passwords=2 [%d] %s", $link->errno, $link->error)); + die(sprintf("skip Cannot set @@session.old_passwords=2 [%d] %s", $link->errno, $link->error)); } $link->query('DROP USER shatest'); @@ -54,24 +54,24 @@ $link->query("DROP USER shatest@localhost"); if (!$link->query('CREATE USER shatest@"%" IDENTIFIED WITH sha256_password') || - !$link->query('CREATE USER shatest@"localhost" IDENTIFIED WITH sha256_password')) { - die(sprintf("skip CREATE USER failed [%d] %s", $link->errno, $link->error)); + !$link->query('CREATE USER shatest@"localhost" IDENTIFIED WITH sha256_password')) { + die(sprintf("skip CREATE USER failed [%d] %s", $link->errno, $link->error)); } if (!$link->query('SET PASSWORD FOR shatest@"%" = PASSWORD("shatest")') || - !$link->query('SET PASSWORD FOR shatest@"localhost" = PASSWORD("shatest")')) { - die(sprintf("skip SET PASSWORD failed [%d] %s", $link->errno, $link->error)); + !$link->query('SET PASSWORD FOR shatest@"localhost" = PASSWORD("shatest")')) { + die(sprintf("skip SET PASSWORD failed [%d] %s", $link->errno, $link->error)); } if (!$link->query("DROP TABLE IF EXISTS test") || - !$link->query("CREATE TABLE test (id INT)") || - !$link->query("INSERT INTO test(id) VALUES (1), (2), (3)")) - die(sprintf("SKIP [%d] %s\n", $link->errno, $link->error)); + !$link->query("CREATE TABLE test (id INT)") || + !$link->query("INSERT INTO test(id) VALUES (1), (2), (3)")) + die(sprintf("SKIP [%d] %s\n", $link->errno, $link->error)); if (!$link->query(sprintf("GRANT SELECT ON TABLE %s.test TO shatest@'%%'", $db)) || - !$link->query(sprintf("GRANT SELECT ON TABLE %s.test TO shatest@'localhost'", $db))) { - die(sprintf("skip Cannot grant SELECT to user [%d] %s", mysqli_errno($link), mysqli_error($link))); + !$link->query(sprintf("GRANT SELECT ON TABLE %s.test TO shatest@'localhost'", $db))) { + die(sprintf("skip Cannot grant SELECT to user [%d] %s", mysqli_errno($link), mysqli_error($link))); } $link->close(); @@ -104,9 +104,9 @@ $link->close(); ?> --CLEAN-- query('DROP USER shatest'); - $link->query('DROP USER shatest@localhost'); + require_once("clean_table.inc"); + $link->query('DROP USER shatest'); + $link->query('DROP USER shatest@localhost'); ?> --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_pam_sha256_public_key_ini.phpt b/ext/mysqli/tests/mysqli_pam_sha256_public_key_ini.phpt index 7799effe229e0..86e27fbaff7d9 100644 --- a/ext/mysqli/tests/mysqli_pam_sha256_public_key_ini.phpt +++ b/ext/mysqli/tests/mysqli_pam_sha256_public_key_ini.phpt @@ -10,56 +10,56 @@ phpinfo(INFO_MODULES); $tmp = ob_get_contents(); ob_end_clean(); if (!stristr($tmp, "auth_plugin_sha256_password")) - die("skip SHA256 auth plugin not built-in to mysqlnd"); + die("skip SHA256 auth plugin not built-in to mysqlnd"); require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die(printf("skip: [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error())); + die(printf("skip: [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error())); if (mysqli_get_server_version($link) < 50606) - die("skip: SHA-256 requires MySQL 5.6.6+"); + die("skip: SHA-256 requires MySQL 5.6.6+"); if (!($res = $link->query("SHOW PLUGINS"))) { - die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); + die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); } $found = false; while ($row = $res->fetch_assoc()) { - if (($row['Name'] == 'sha256_password') && ($row['Status'] == 'ACTIVE')) { - $found = true; - break; - } + if (($row['Name'] == 'sha256_password') && ($row['Status'] == 'ACTIVE')) { + $found = true; + break; + } } if (!$found) - die("skip SHA-256 server plugin unavailable"); + die("skip SHA-256 server plugin unavailable"); if (!($res = $link->query("SHOW STATUS LIKE 'Rsa_public_key'"))) { - die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); + die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); } if (!($row = $res->fetch_assoc())) { - die(sprintf("skip Failed to check RSA pub key, [%d] %s\n", $link->errno, $link->error)); + die(sprintf("skip Failed to check RSA pub key, [%d] %s\n", $link->errno, $link->error)); } $key = $row['Value']; if (strlen($key) < 100) { - die(sprintf("skip Server misconfiguration? RSA pub key is suspicious, [%d] %s\n", $link->errno, $link->error)); + die(sprintf("skip Server misconfiguration? RSA pub key is suspicious, [%d] %s\n", $link->errno, $link->error)); } /* date changes may give false positive */ $file = "test_sha256_ini"; if ((file_exists($file) && !unlink($file)) || !($fp = @fopen($file, "w"))) { - die(sprintf("skip Cannot create RSA pub key file '%s'", $file)); + die(sprintf("skip Cannot create RSA pub key file '%s'", $file)); } $key = str_replace("A", "a", $key); $key = str_replace("M", "m", $key); if (strlen($key) != fwrite($fp, $key)) { - die(sprintf("skip Failed to create pub key file")); + die(sprintf("skip Failed to create pub key file")); } if (!$link->query("SET @@session.old_passwords=2")) { - die(sprintf("skip Cannot set @@session.old_passwords=2 [%d] %s", $link->errno, $link->error)); + die(sprintf("skip Cannot set @@session.old_passwords=2 [%d] %s", $link->errno, $link->error)); } $link->query('DROP USER shatest'); @@ -67,24 +67,24 @@ $link->query("DROP USER shatest@localhost"); if (!$link->query('CREATE USER shatest@"%" IDENTIFIED WITH sha256_password') || - !$link->query('CREATE USER shatest@"localhost" IDENTIFIED WITH sha256_password')) { - die(sprintf("skip CREATE USER failed [%d] %s", $link->errno, $link->error)); + !$link->query('CREATE USER shatest@"localhost" IDENTIFIED WITH sha256_password')) { + die(sprintf("skip CREATE USER failed [%d] %s", $link->errno, $link->error)); } if (!$link->query('SET PASSWORD FOR shatest@"%" = PASSWORD("shatest")') || - !$link->query('SET PASSWORD FOR shatest@"localhost" = PASSWORD("shatest")')) { - die(sprintf("skip SET PASSWORD failed [%d] %s", $link->errno, $link->error)); + !$link->query('SET PASSWORD FOR shatest@"localhost" = PASSWORD("shatest")')) { + die(sprintf("skip SET PASSWORD failed [%d] %s", $link->errno, $link->error)); } if (!$link->query("DROP TABLE IF EXISTS test") || - !$link->query("CREATE TABLE test (id INT)") || - !$link->query("INSERT INTO test(id) VALUES (1), (2), (3)")) - die(sprintf("SKIP [%d] %s\n", $link->errno, $link->error)); + !$link->query("CREATE TABLE test (id INT)") || + !$link->query("INSERT INTO test(id) VALUES (1), (2), (3)")) + die(sprintf("SKIP [%d] %s\n", $link->errno, $link->error)); if (!$link->query(sprintf("GRANT SELECT ON TABLE %s.test TO shatest@'%%'", $db)) || - !$link->query(sprintf("GRANT SELECT ON TABLE %s.test TO shatest@'localhost'", $db))) { - die(sprintf("skip Cannot grant SELECT to user [%d] %s", mysqli_errno($link), mysqli_error($link))); + !$link->query(sprintf("GRANT SELECT ON TABLE %s.test TO shatest@'localhost'", $db))) { + die(sprintf("skip Cannot grant SELECT to user [%d] %s", mysqli_errno($link), mysqli_error($link))); } $link->close(); diff --git a/ext/mysqli/tests/mysqli_pam_sha256_public_key_option.phpt b/ext/mysqli/tests/mysqli_pam_sha256_public_key_option.phpt index e6c65bef9d2b2..9b5639ff9a7ad 100644 --- a/ext/mysqli/tests/mysqli_pam_sha256_public_key_option.phpt +++ b/ext/mysqli/tests/mysqli_pam_sha256_public_key_option.phpt @@ -10,53 +10,53 @@ phpinfo(INFO_MODULES); $tmp = ob_get_contents(); ob_end_clean(); if (!stristr($tmp, "auth_plugin_sha256_password")) - die("skip SHA256 auth plugin not built-in to mysqlnd"); + die("skip SHA256 auth plugin not built-in to mysqlnd"); require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die(printf("skip: [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error())); + die(printf("skip: [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error())); if (mysqli_get_server_version($link) < 50606) - die("skip: SHA-256 requires MySQL 5.6.6+"); + die("skip: SHA-256 requires MySQL 5.6.6+"); if (!($res = $link->query("SHOW PLUGINS"))) { - die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); + die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); } $found = false; while ($row = $res->fetch_assoc()) { - if (($row['Name'] == 'sha256_password') && ($row['Status'] == 'ACTIVE')) { - $found = true; - break; - } + if (($row['Name'] == 'sha256_password') && ($row['Status'] == 'ACTIVE')) { + $found = true; + break; + } } if (!$found) - die("skip SHA-256 server plugin unavailable"); + die("skip SHA-256 server plugin unavailable"); if (!($res = $link->query("SHOW STATUS LIKE 'Rsa_public_key'"))) { - die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); + die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); } if (!($row = $res->fetch_assoc())) { - die(sprintf("skip Failed to check RSA pub key, [%d] %s\n", $link->errno, $link->error)); + die(sprintf("skip Failed to check RSA pub key, [%d] %s\n", $link->errno, $link->error)); } if (strlen($row['Value']) < 100) { - die(sprintf("skip Server misconfiguration? RSA pub key is suspicious, [%d] %s\n", $link->errno, $link->error)); + die(sprintf("skip Server misconfiguration? RSA pub key is suspicious, [%d] %s\n", $link->errno, $link->error)); } /* date changes may give false positive */ $file = sprintf("%s%s%s_%s", sys_get_temp_dir(), DIRECTORY_SEPARATOR, "test_sha256_" , @date("Ymd")); if ((file_exists($file) && !unlink($file)) || !($fp = @fopen($file, "w"))) { - die(sprintf("skip Cannot create RSA pub key file '%s'", $file)); + die(sprintf("skip Cannot create RSA pub key file '%s'", $file)); } if (strlen($row['Value']) != fwrite($fp, $row['Value'])) { - die(sprintf("skip Failed to create pub key file")); + die(sprintf("skip Failed to create pub key file")); } if (!$link->query("SET @@session.old_passwords=2")) { - die(sprintf("skip Cannot set @@session.old_passwords=2 [%d] %s", $link->errno, $link->error)); + die(sprintf("skip Cannot set @@session.old_passwords=2 [%d] %s", $link->errno, $link->error)); } $link->query('DROP USER shatest'); @@ -64,24 +64,24 @@ $link->query("DROP USER shatest@localhost"); if (!$link->query('CREATE USER shatest@"%" IDENTIFIED WITH sha256_password') || - !$link->query('CREATE USER shatest@"localhost" IDENTIFIED WITH sha256_password')) { - die(sprintf("skip CREATE USER failed [%d] %s", $link->errno, $link->error)); + !$link->query('CREATE USER shatest@"localhost" IDENTIFIED WITH sha256_password')) { + die(sprintf("skip CREATE USER failed [%d] %s", $link->errno, $link->error)); } if (!$link->query('SET PASSWORD FOR shatest@"%" = PASSWORD("shatest")') || - !$link->query('SET PASSWORD FOR shatest@"localhost" = PASSWORD("shatest")')) { - die(sprintf("skip SET PASSWORD failed [%d] %s", $link->errno, $link->error)); + !$link->query('SET PASSWORD FOR shatest@"localhost" = PASSWORD("shatest")')) { + die(sprintf("skip SET PASSWORD failed [%d] %s", $link->errno, $link->error)); } if (!$link->query("DROP TABLE IF EXISTS test") || - !$link->query("CREATE TABLE test (id INT)") || - !$link->query("INSERT INTO test(id) VALUES (1), (2), (3)")) - die(sprintf("SKIP [%d] %s\n", $link->errno, $link->error)); + !$link->query("CREATE TABLE test (id INT)") || + !$link->query("INSERT INTO test(id) VALUES (1), (2), (3)")) + die(sprintf("SKIP [%d] %s\n", $link->errno, $link->error)); if (!$link->query(sprintf("GRANT SELECT ON TABLE %s.test TO shatest@'%%'", $db)) || - !$link->query(sprintf("GRANT SELECT ON TABLE %s.test TO shatest@'localhost'", $db))) { - die(sprintf("skip Cannot grant SELECT to user [%d] %s", mysqli_errno($link), mysqli_error($link))); + !$link->query(sprintf("GRANT SELECT ON TABLE %s.test TO shatest@'localhost'", $db))) { + die(sprintf("skip Cannot grant SELECT to user [%d] %s", mysqli_errno($link), mysqli_error($link))); } $link->close(); @@ -121,11 +121,11 @@ $link->close(); ?> --CLEAN-- query('DROP USER shatest'); - $link->query('DROP USER shatest@localhost'); - $file = sprintf("%s%s%s_%s", sys_get_temp_dir(), DIRECTORY_SEPARATOR, "test_sha256_" , @date("Ymd")); - @unlink($file); + require_once("clean_table.inc"); + $link->query('DROP USER shatest'); + $link->query('DROP USER shatest@localhost'); + $file = sprintf("%s%s%s_%s", sys_get_temp_dir(), DIRECTORY_SEPARATOR, "test_sha256_" , @date("Ymd")); + @unlink($file); ?> --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_pam_sha256_public_key_option_invalid.phpt b/ext/mysqli/tests/mysqli_pam_sha256_public_key_option_invalid.phpt index 2397c82cac9cd..b664179265fdd 100644 --- a/ext/mysqli/tests/mysqli_pam_sha256_public_key_option_invalid.phpt +++ b/ext/mysqli/tests/mysqli_pam_sha256_public_key_option_invalid.phpt @@ -10,53 +10,53 @@ phpinfo(INFO_MODULES); $tmp = ob_get_contents(); ob_end_clean(); if (!stristr($tmp, "auth_plugin_sha256_password")) - die("skip SHA256 auth plugin not built-in to mysqlnd"); + die("skip SHA256 auth plugin not built-in to mysqlnd"); require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die(printf("skip: [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error())); + die(printf("skip: [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error())); if (mysqli_get_server_version($link) < 50606) - die("skip: SHA-256 requires MySQL 5.6.6+"); + die("skip: SHA-256 requires MySQL 5.6.6+"); if (!($res = $link->query("SHOW PLUGINS"))) { - die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); + die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); } $found = false; while ($row = $res->fetch_assoc()) { - if (($row['Name'] == 'sha256_password') && ($row['Status'] == 'ACTIVE')) { - $found = true; - break; - } + if (($row['Name'] == 'sha256_password') && ($row['Status'] == 'ACTIVE')) { + $found = true; + break; + } } if (!$found) - die("skip SHA-256 server plugin unavailable"); + die("skip SHA-256 server plugin unavailable"); if (!($res = $link->query("SHOW STATUS LIKE 'Rsa_public_key'"))) { - die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); + die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); } if (!($row = $res->fetch_assoc())) { - die(sprintf("skip Failed to check RSA pub key, [%d] %s\n", $link->errno, $link->error)); + die(sprintf("skip Failed to check RSA pub key, [%d] %s\n", $link->errno, $link->error)); } if (strlen($row['Value']) < 100) { - die(sprintf("skip Server misconfiguration? RSA pub key is suspicious, [%d] %s\n", $link->errno, $link->error)); + die(sprintf("skip Server misconfiguration? RSA pub key is suspicious, [%d] %s\n", $link->errno, $link->error)); } /* date changes may give false positive */ $file = sprintf("%s%s%s_%s", sys_get_temp_dir(), DIRECTORY_SEPARATOR, "test_sha256_" , @date("Ymd")); if ((file_exists($file) && !unlink($file)) || !($fp = @fopen($file, "w"))) { - die(sprintf("skip Cannot create RSA pub key file '%s'", $file)); + die(sprintf("skip Cannot create RSA pub key file '%s'", $file)); } if (strlen($row['Value']) != fwrite($fp, $row['Value'])) { - die(sprintf("skip Failed to create pub key file")); + die(sprintf("skip Failed to create pub key file")); } if (!$link->query("SET @@session.old_passwords=2")) { - die(sprintf("skip Cannot set @@session.old_passwords=2 [%d] %s", $link->errno, $link->error)); + die(sprintf("skip Cannot set @@session.old_passwords=2 [%d] %s", $link->errno, $link->error)); } $link->query('DROP USER shatest'); @@ -64,24 +64,24 @@ $link->query("DROP USER shatest@localhost"); if (!$link->query('CREATE USER shatest@"%" IDENTIFIED WITH sha256_password') || - !$link->query('CREATE USER shatest@"localhost" IDENTIFIED WITH sha256_password')) { - die(sprintf("skip CREATE USER failed [%d] %s", $link->errno, $link->error)); + !$link->query('CREATE USER shatest@"localhost" IDENTIFIED WITH sha256_password')) { + die(sprintf("skip CREATE USER failed [%d] %s", $link->errno, $link->error)); } if (!$link->query('SET PASSWORD FOR shatest@"%" = PASSWORD("shatest")') || - !$link->query('SET PASSWORD FOR shatest@"localhost" = PASSWORD("shatest")')) { - die(sprintf("skip SET PASSWORD failed [%d] %s", $link->errno, $link->error)); + !$link->query('SET PASSWORD FOR shatest@"localhost" = PASSWORD("shatest")')) { + die(sprintf("skip SET PASSWORD failed [%d] %s", $link->errno, $link->error)); } if (!$link->query("DROP TABLE IF EXISTS test") || - !$link->query("CREATE TABLE test (id INT)") || - !$link->query("INSERT INTO test(id) VALUES (1), (2), (3)")) - die(sprintf("SKIP [%d] %s\n", $link->errno, $link->error)); + !$link->query("CREATE TABLE test (id INT)") || + !$link->query("INSERT INTO test(id) VALUES (1), (2), (3)")) + die(sprintf("SKIP [%d] %s\n", $link->errno, $link->error)); if (!$link->query(sprintf("GRANT SELECT ON TABLE %s.test TO shatest@'%%'", $db)) || - !$link->query(sprintf("GRANT SELECT ON TABLE %s.test TO shatest@'localhost'", $db))) { - die(sprintf("skip Cannot grant SELECT to user [%d] %s", mysqli_errno($link), mysqli_error($link))); + !$link->query(sprintf("GRANT SELECT ON TABLE %s.test TO shatest@'localhost'", $db))) { + die(sprintf("skip Cannot grant SELECT to user [%d] %s", mysqli_errno($link), mysqli_error($link))); } $link->close(); @@ -165,13 +165,13 @@ $link->close(); ?> --CLEAN-- query('DROP USER shatest'); - $link->query('DROP USER shatest@localhost'); - $file = sprintf("%s%s%s_%s", sys_get_temp_dir(), DIRECTORY_SEPARATOR, "test_sha256_" , @date("Ymd")); - @unlink($file); - $file_wrong = sprintf("%s%s%s_%s", sys_get_temp_dir(), DIRECTORY_SEPARATOR, "test_sha256_wrong" , @date("Ymd")); - @unlink($file_wrong); + require_once("clean_table.inc"); + $link->query('DROP USER shatest'); + $link->query('DROP USER shatest@localhost'); + $file = sprintf("%s%s%s_%s", sys_get_temp_dir(), DIRECTORY_SEPARATOR, "test_sha256_" , @date("Ymd")); + @unlink($file); + $file_wrong = sprintf("%s%s%s_%s", sys_get_temp_dir(), DIRECTORY_SEPARATOR, "test_sha256_wrong" , @date("Ymd")); + @unlink($file_wrong); ?> --EXPECTF-- Warning: mysqli::real_connect(): (HY000/1045): %s in %s on line %d diff --git a/ext/mysqli/tests/mysqli_pconn_max_links.phpt b/ext/mysqli/tests/mysqli_pconn_max_links.phpt index f6ee6aa5a07aa..f48222c425336 100644 --- a/ext/mysqli/tests/mysqli_pconn_max_links.phpt +++ b/ext/mysqli/tests/mysqli_pconn_max_links.phpt @@ -2,41 +2,41 @@ Persistent connections and mysqli.max_links --SKIPIF-- --INI-- mysqli.allow_persistent=1 diff --git a/ext/mysqli/tests/mysqli_poll.phpt b/ext/mysqli/tests/mysqli_poll.phpt index d5527fcf02c06..c786a8166b305 100644 --- a/ext/mysqli/tests/mysqli_poll.phpt +++ b/ext/mysqli/tests/mysqli_poll.phpt @@ -7,7 +7,7 @@ require_once('connect.inc'); require_once('skipifconnectfailure.inc'); if (!$IS_MYSQLND) - die("skip mysqlnd only feature, compile PHP using --with-mysqli=mysqlnd"); + die("skip mysqlnd only feature, compile PHP using --with-mysqli=mysqlnd"); ?> --FILE-- --FILE-- --FILE-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_prepare.phpt b/ext/mysqli/tests/mysqli_prepare.phpt index 16d208efcca8b..f6676396e53a1 100644 --- a/ext/mysqli/tests/mysqli_prepare.phpt +++ b/ext/mysqli/tests/mysqli_prepare.phpt @@ -106,10 +106,10 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); if (!mysqli_query($link, "DROP TABLE IF EXISTS test2")) - printf("[c003] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c003] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/mysqli_query.phpt b/ext/mysqli/tests/mysqli_query.phpt index b3269689c1b19..90fc24cf9c852 100644 --- a/ext/mysqli/tests/mysqli_query.phpt +++ b/ext/mysqli/tests/mysqli_query.phpt @@ -107,7 +107,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); @mysqli_query($link, "DROP FUNCTION IF EXISTS f"); @mysqli_query($link, 'DROP PROCEDURE IF EXISTS p'); diff --git a/ext/mysqli/tests/mysqli_query_iterators.phpt b/ext/mysqli/tests/mysqli_query_iterators.phpt index cb567affc2878..3ad35363b9c40 100644 --- a/ext/mysqli/tests/mysqli_query_iterators.phpt +++ b/ext/mysqli/tests/mysqli_query_iterators.phpt @@ -69,7 +69,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- --- Testing default --- diff --git a/ext/mysqli/tests/mysqli_query_stored_proc.phpt b/ext/mysqli/tests/mysqli_query_stored_proc.phpt index 4a77ac91c8ef3..566dc9dc27239 100644 --- a/ext/mysqli/tests/mysqli_query_stored_proc.phpt +++ b/ext/mysqli/tests/mysqli_query_stored_proc.phpt @@ -6,10 +6,10 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); } if (mysqli_get_server_version($link) <= 50000) { - die(sprintf('skip Needs MySQL 5.0+, found version %d.', mysqli_get_server_version($link))); + die(sprintf('skip Needs MySQL 5.0+, found version %d.', mysqli_get_server_version($link))); } ?> --FILE-- @@ -157,7 +157,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); @mysqli_query($link, "DROP PROCEDURE IS EXISTS p"); diff --git a/ext/mysqli/tests/mysqli_query_unicode.phpt b/ext/mysqli/tests/mysqli_query_unicode.phpt index 6959346107bde..b62418508f106 100644 --- a/ext/mysqli/tests/mysqli_query_unicode.phpt +++ b/ext/mysqli/tests/mysqli_query_unicode.phpt @@ -7,7 +7,7 @@ require_once('skipifconnectfailure.inc'); require_once('connect.inc'); require_once('table.inc'); if (!$res = mysqli_query($link, "SHOW CHARACTER SET LIKE 'utf8'")) - die("skip UTF8 chatset seems not available"); + die("skip UTF8 chatset seems not available"); mysqli_free_result($res); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/mysqli_real_connect_pconn.phpt b/ext/mysqli/tests/mysqli_real_connect_pconn.phpt index a7245e384e1ce..d49c01d3b7aef 100644 --- a/ext/mysqli/tests/mysqli_real_connect_pconn.phpt +++ b/ext/mysqli/tests/mysqli_real_connect_pconn.phpt @@ -6,7 +6,7 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$IS_MYSQLND) - die("skip mysqlnd only test"); + die("skip mysqlnd only test"); ?> --INI-- mysqli.allow_local_infile=1 diff --git a/ext/mysqli/tests/mysqli_real_escape_string_big5.phpt b/ext/mysqli/tests/mysqli_real_escape_string_big5.phpt index e6b60997c9a03..2dec713db2bb9 100644 --- a/ext/mysqli/tests/mysqli_real_escape_string_big5.phpt +++ b/ext/mysqli/tests/mysqli_real_escape_string_big5.phpt @@ -8,11 +8,11 @@ require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf("skip Cannot connect to MySQL, [%d] %s\n", - mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip Cannot connect to MySQL, [%d] %s\n", + mysqli_connect_errno(), mysqli_connect_error())); } if (!mysqli_set_charset($link, 'big5')) - die(sprintf("skip Cannot set charset 'big5'")); + die(sprintf("skip Cannot set charset 'big5'")); mysqli_close($link); ?> --FILE-- @@ -71,7 +71,7 @@ mysqli_error($link)); ?> --CLEAN-- --EXPECT-- bool(true) diff --git a/ext/mysqli/tests/mysqli_real_escape_string_eucjpms.phpt b/ext/mysqli/tests/mysqli_real_escape_string_eucjpms.phpt index 34c4faa98a87d..9af4ade589442 100644 --- a/ext/mysqli/tests/mysqli_real_escape_string_eucjpms.phpt +++ b/ext/mysqli/tests/mysqli_real_escape_string_eucjpms.phpt @@ -8,11 +8,11 @@ require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf("skip Cannot connect to MySQL, [%d] %s\n", - mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip Cannot connect to MySQL, [%d] %s\n", + mysqli_connect_errno(), mysqli_connect_error())); } if (!mysqli_set_charset($link, 'eucjpms')) - die(sprintf("skip Cannot set charset 'eucjpms'")); + die(sprintf("skip Cannot set charset 'eucjpms'")); mysqli_close($link); ?> --FILE-- @@ -64,7 +64,7 @@ mysqli_error($link)); ?> --CLEAN-- --EXPECT-- bool(true) diff --git a/ext/mysqli/tests/mysqli_real_escape_string_euckr.phpt b/ext/mysqli/tests/mysqli_real_escape_string_euckr.phpt index c9482cc6e1ed9..c79302d4027b8 100644 --- a/ext/mysqli/tests/mysqli_real_escape_string_euckr.phpt +++ b/ext/mysqli/tests/mysqli_real_escape_string_euckr.phpt @@ -8,11 +8,11 @@ require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf("skip Cannot connect to MySQL, [%d] %s\n", - mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip Cannot connect to MySQL, [%d] %s\n", + mysqli_connect_errno(), mysqli_connect_error())); } if (!mysqli_set_charset($link, 'euckr')) - die(sprintf("skip Cannot set charset 'euckr'")); + die(sprintf("skip Cannot set charset 'euckr'")); mysqli_close($link); ?> --FILE-- @@ -63,7 +63,7 @@ mysqli_error($link)); ?> --CLEAN-- --EXPECT-- bool(true) diff --git a/ext/mysqli/tests/mysqli_real_escape_string_gb2312.phpt b/ext/mysqli/tests/mysqli_real_escape_string_gb2312.phpt index d85649757e8d5..d84944b4bd21b 100644 --- a/ext/mysqli/tests/mysqli_real_escape_string_gb2312.phpt +++ b/ext/mysqli/tests/mysqli_real_escape_string_gb2312.phpt @@ -8,11 +8,11 @@ require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf("skip Cannot connect to MySQL, [%d] %s\n", - mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip Cannot connect to MySQL, [%d] %s\n", + mysqli_connect_errno(), mysqli_connect_error())); } if (!mysqli_set_charset($link, 'gb2312')) - die(sprintf("skip Cannot set charset 'gb2312'")); + die(sprintf("skip Cannot set charset 'gb2312'")); mysqli_close($link); ?> --FILE-- @@ -64,7 +64,7 @@ mysqli_error($link)); ?> --CLEAN-- --EXPECT-- bool(true) diff --git a/ext/mysqli/tests/mysqli_real_escape_string_gbk.phpt b/ext/mysqli/tests/mysqli_real_escape_string_gbk.phpt index 2f08d5c37fac8..4da0d8a232914 100644 --- a/ext/mysqli/tests/mysqli_real_escape_string_gbk.phpt +++ b/ext/mysqli/tests/mysqli_real_escape_string_gbk.phpt @@ -7,11 +7,11 @@ require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf("skip Cannot connect to MySQL, [%d] %s\n", - mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip Cannot connect to MySQL, [%d] %s\n", + mysqli_connect_errno(), mysqli_connect_error())); } if (!mysqli_set_charset($link, 'gbk')) - die(sprintf("skip Cannot set charset 'gbk'")); + die(sprintf("skip Cannot set charset 'gbk'")); mysqli_close($link); ?> @@ -64,7 +64,7 @@ mysqli_error($link)); ?> --CLEAN-- --EXPECT-- bool(true) diff --git a/ext/mysqli/tests/mysqli_real_escape_string_sjis.phpt b/ext/mysqli/tests/mysqli_real_escape_string_sjis.phpt index c577215357e31..034a3bd607bab 100644 --- a/ext/mysqli/tests/mysqli_real_escape_string_sjis.phpt +++ b/ext/mysqli/tests/mysqli_real_escape_string_sjis.phpt @@ -7,11 +7,11 @@ require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf("skip Cannot connect to MySQL, [%d] %s\n", - mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip Cannot connect to MySQL, [%d] %s\n", + mysqli_connect_errno(), mysqli_connect_error())); } if (!mysqli_set_charset($link, 'sjis')) - die(sprintf("skip Cannot set charset 'sjis'")); + die(sprintf("skip Cannot set charset 'sjis'")); mysqli_close($link); ?> --FILE-- diff --git a/ext/mysqli/tests/mysqli_real_escape_string_unicode.phpt b/ext/mysqli/tests/mysqli_real_escape_string_unicode.phpt index 78a3ece11b15f..4bb5ef79690f5 100644 --- a/ext/mysqli/tests/mysqli_real_escape_string_unicode.phpt +++ b/ext/mysqli/tests/mysqli_real_escape_string_unicode.phpt @@ -71,7 +71,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli object is already closed diff --git a/ext/mysqli/tests/mysqli_real_query.phpt b/ext/mysqli/tests/mysqli_real_query.phpt index 45df8a9edcd9c..4b429940d7d0b 100644 --- a/ext/mysqli/tests/mysqli_real_query.phpt +++ b/ext/mysqli/tests/mysqli_real_query.phpt @@ -87,7 +87,7 @@ if (!$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); @mysqli_query($link, "DROP PROCEDURE IF EXISTS p"); @mysqli_query($link, "DROP FUNCTION IF EXISTS f"); diff --git a/ext/mysqli/tests/mysqli_reap_async_query.phpt b/ext/mysqli/tests/mysqli_reap_async_query.phpt index 223befe9bc8fc..b93996ef38b64 100644 --- a/ext/mysqli/tests/mysqli_reap_async_query.phpt +++ b/ext/mysqli/tests/mysqli_reap_async_query.phpt @@ -7,7 +7,7 @@ require_once('connect.inc'); require_once('skipifconnectfailure.inc'); if (!$IS_MYSQLND) - die("skip mysqlnd only feature, compile PHP using --with-mysqli=mysqlnd"); + die("skip mysqlnd only feature, compile PHP using --with-mysqli=mysqlnd"); ?> --FILE-- --INI-- mysqli.reconnect=1 diff --git a/ext/mysqli/tests/mysqli_release_savepoint.phpt b/ext/mysqli/tests/mysqli_release_savepoint.phpt index cbadb8a95cea0..44c33b39c2283 100644 --- a/ext/mysqli/tests/mysqli_release_savepoint.phpt +++ b/ext/mysqli/tests/mysqli_release_savepoint.phpt @@ -7,10 +7,10 @@ require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die(sprintf("skip Cannot connect, [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip Cannot connect, [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); if (!have_innodb($link)) - die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); + die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); ?> --FILE-- --CLEAN-- --EXPECT-- mysqli_release_savepoint(): Argument #2 ($name) cannot be empty diff --git a/ext/mysqli/tests/mysqli_report.phpt b/ext/mysqli/tests/mysqli_report.phpt index 4ad70a4eb9d8d..5aa695f8f2ae1 100644 --- a/ext/mysqli/tests/mysqli_report.phpt +++ b/ext/mysqli/tests/mysqli_report.phpt @@ -281,7 +281,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --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 diff --git a/ext/mysqli/tests/mysqli_report_new.phpt b/ext/mysqli/tests/mysqli_report_new.phpt index af951739c24b9..305d70108379c 100644 --- a/ext/mysqli/tests/mysqli_report_new.phpt +++ b/ext/mysqli/tests/mysqli_report_new.phpt @@ -6,11 +6,11 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die(sprintf("SKIP Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", - $host, $user, $db, $port, $socket)); + die(sprintf("SKIP Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", + $host, $user, $db, $port, $socket)); if (mysqli_get_server_version($link) < 50600) - die("SKIP For MySQL >= 5.6.0"); + die("SKIP For MySQL >= 5.6.0"); ?> --FILE-- @@ -41,7 +41,7 @@ if (mysqli_get_server_version($link) < 50600) ?> --CLEAN-- --EXPECTF-- Warning: mysqli_change_user(): (%d/%d): Access denied for user '%s'@'%s' (using password: %s) in %s on line %d diff --git a/ext/mysqli/tests/mysqli_report_wo_ps.phpt b/ext/mysqli/tests/mysqli_report_wo_ps.phpt index 7103adfdb2a5f..7f0295dd44c71 100644 --- a/ext/mysqli/tests/mysqli_report_wo_ps.phpt +++ b/ext/mysqli/tests/mysqli_report_wo_ps.phpt @@ -6,11 +6,11 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die(sprintf("SKIP Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", - $host, $user, $db, $port, $socket)); + die(sprintf("SKIP Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", + $host, $user, $db, $port, $socket)); if (mysqli_get_server_version($link) >= 50600) - die("SKIP For MySQL < 5.6.0"); + die("SKIP For MySQL < 5.6.0"); ?> --FILE-- = 50600) ?> --CLEAN-- --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 diff --git a/ext/mysqli/tests/mysqli_result_invalid_mode.phpt b/ext/mysqli/tests/mysqli_result_invalid_mode.phpt index 938f6e65dc38f..6be779f33134b 100644 --- a/ext/mysqli/tests/mysqli_result_invalid_mode.phpt +++ b/ext/mysqli/tests/mysqli_result_invalid_mode.phpt @@ -22,7 +22,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_result::__construct(): Argument #2 ($result_mode) must be either MYSQLI_STORE_RESULT or MYSQLI_USE_RESULT diff --git a/ext/mysqli/tests/mysqli_result_references.phpt b/ext/mysqli/tests/mysqli_result_references.phpt index f917d00ed3bd6..2e97cd45d795a 100644 --- a/ext/mysqli/tests/mysqli_result_references.phpt +++ b/ext/mysqli/tests/mysqli_result_references.phpt @@ -78,7 +78,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- array(7) refcount(2){ diff --git a/ext/mysqli/tests/mysqli_result_references_mysqlnd.phpt b/ext/mysqli/tests/mysqli_result_references_mysqlnd.phpt index a5c68ca73f049..8c3c65f609182 100644 --- a/ext/mysqli/tests/mysqli_result_references_mysqlnd.phpt +++ b/ext/mysqli/tests/mysqli_result_references_mysqlnd.phpt @@ -7,7 +7,7 @@ require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$IS_MYSQLND) - die("skip Test for mysqlnd only"); + die("skip Test for mysqlnd only"); require_once('skipifemb.inc'); ?> --FILE-- errno, $link->error)); + if (!have_innodb($link)) + die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); ?> --FILE-- --CLEAN-- --EXPECT-- mysqli object is already closed diff --git a/ext/mysqli/tests/mysqli_savepoint.phpt b/ext/mysqli/tests/mysqli_savepoint.phpt index b3b616a70ee69..ebe27686aca87 100644 --- a/ext/mysqli/tests/mysqli_savepoint.phpt +++ b/ext/mysqli/tests/mysqli_savepoint.phpt @@ -7,10 +7,10 @@ require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) - die(sprintf("skip Cannot connect, [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf("skip Cannot connect, [%d] %s", mysqli_connect_errno(), mysqli_connect_error())); if (!have_innodb($link)) - die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); + die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error)); ?> --FILE-- --CLEAN-- --EXPECT-- mysqli_savepoint(): Argument #2 ($name) cannot be empty diff --git a/ext/mysqli/tests/mysqli_send_query.phpt b/ext/mysqli/tests/mysqli_send_query.phpt index 4e257bd0a11d8..0289e7733e5cc 100644 --- a/ext/mysqli/tests/mysqli_send_query.phpt +++ b/ext/mysqli/tests/mysqli_send_query.phpt @@ -5,11 +5,11 @@ mysqli_send_query() require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_send_query')) { - die("skip mysqli_send_query() not available"); + die("skip mysqli_send_query() not available"); } require_once('connect.inc'); if (!$TEST_EXPERIMENTAL) - die("skip - experimental (= unsupported) feature"); + die("skip - experimental (= unsupported) feature"); ?> --FILE-- --FILE-- @@ -113,7 +113,7 @@ if ((($res = mysqli_query($link, 'SHOW CHARACTER SET LIKE "latin1"', MYSQLI_STOR ?> --CLEAN-- --EXPECT-- mysqli object is already closed diff --git a/ext/mysqli/tests/mysqli_sqlstate.phpt b/ext/mysqli/tests/mysqli_sqlstate.phpt index d8272828097b4..e871d0ff3e593 100644 --- a/ext/mysqli/tests/mysqli_sqlstate.phpt +++ b/ext/mysqli/tests/mysqli_sqlstate.phpt @@ -29,7 +29,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- %s(5) "00000" diff --git a/ext/mysqli/tests/mysqli_ssl_set.phpt b/ext/mysqli/tests/mysqli_ssl_set.phpt index 6ccfb4359df3d..2ad705bda45bf 100644 --- a/ext/mysqli/tests/mysqli_ssl_set.phpt +++ b/ext/mysqli/tests/mysqli_ssl_set.phpt @@ -5,7 +5,7 @@ mysqli_ssl_set() - test is a stub! require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_ssl_set')) - die("skip function not available"); + die("skip function not available"); ?> --FILE-- --CLEAN-- --EXPECTF-- [009] [%d] (error message varies with the MySQL Server version, check the error code) diff --git a/ext/mysqli/tests/mysqli_stmt_attr_get.phpt b/ext/mysqli/tests/mysqli_stmt_attr_get.phpt index 5c246aaff8195..aea6c91ad00de 100644 --- a/ext/mysqli/tests/mysqli_stmt_attr_get.phpt +++ b/ext/mysqli/tests/mysqli_stmt_attr_get.phpt @@ -49,7 +49,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_stmt_attr_get(): Argument #2 ($attr) must be one of MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH, MYSQLI_STMT_ATTR_PREFETCH_ROWS, or STMT_ATTR_CURSOR_TYPE diff --git a/ext/mysqli/tests/mysqli_stmt_attr_get_prefetch.phpt b/ext/mysqli/tests/mysqli_stmt_attr_get_prefetch.phpt index 80956e854f61e..9ef46151f90c7 100644 --- a/ext/mysqli/tests/mysqli_stmt_attr_get_prefetch.phpt +++ b/ext/mysqli/tests/mysqli_stmt_attr_get_prefetch.phpt @@ -22,7 +22,7 @@ die("SKIP: prefetch isn't supported at the moment"); ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_stmt_attr_set.phpt b/ext/mysqli/tests/mysqli_stmt_attr_set.phpt index a22704af509bb..16d789f37f7fd 100644 --- a/ext/mysqli/tests/mysqli_stmt_attr_set.phpt +++ b/ext/mysqli/tests/mysqli_stmt_attr_set.phpt @@ -238,7 +238,7 @@ require_once("connect.inc"); ?> --CLEAN-- --EXPECT-- Error: mysqli_stmt object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_stmt_big_prepare.phpt b/ext/mysqli/tests/mysqli_stmt_big_prepare.phpt index 9479d233a950c..75351b0983c8e 100644 --- a/ext/mysqli/tests/mysqli_stmt_big_prepare.phpt +++ b/ext/mysqli/tests/mysqli_stmt_big_prepare.phpt @@ -43,7 +43,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_stmt_bind_param.phpt b/ext/mysqli/tests/mysqli_stmt_bind_param.phpt index 9345bb5a0e619..237b722646750 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_param.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_param.phpt @@ -412,7 +412,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- The number of variables must match the number of parameters in the prepared statement diff --git a/ext/mysqli/tests/mysqli_stmt_bind_param_call_user_func.phpt b/ext/mysqli/tests/mysqli_stmt_bind_param_call_user_func.phpt index e1e600229ca01..4db8db655ea32 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_param_call_user_func.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_param_call_user_func.phpt @@ -325,7 +325,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- Regular, procedural, using variables diff --git a/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt b/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt index 9b70f23639192..b3a4bfe223625 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt @@ -63,7 +63,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- Test 1: diff --git a/ext/mysqli/tests/mysqli_stmt_bind_param_references.phpt b/ext/mysqli/tests/mysqli_stmt_bind_param_references.phpt index 38f25336250c7..b622f254d1ed5 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_param_references.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_param_references.phpt @@ -200,7 +200,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_stmt_bind_param_type_juggling.phpt b/ext/mysqli/tests/mysqli_stmt_bind_param_type_juggling.phpt index b69dfe686e73d..617e6e2cb0bad 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_param_type_juggling.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_param_type_juggling.phpt @@ -120,7 +120,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_stmt_bind_result.phpt b/ext/mysqli/tests/mysqli_stmt_bind_result.phpt index 99f2c8ef77122..5c4d43375de0d 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_result.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_result.phpt @@ -308,7 +308,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- mysqli_stmt object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_stmt_bind_result_bit.phpt b/ext/mysqli/tests/mysqli_stmt_bind_result_bit.phpt index ecad1393531f5..f24c5856ed04e 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_result_bit.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_result_bit.phpt @@ -152,7 +152,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_stmt_bind_result_references.phpt b/ext/mysqli/tests/mysqli_stmt_bind_result_references.phpt index 05e75f7e23498..8ac3a049a16b8 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_result_references.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_result_references.phpt @@ -242,7 +242,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- plain vanilla... diff --git a/ext/mysqli/tests/mysqli_stmt_bind_result_zerofill.phpt b/ext/mysqli/tests/mysqli_stmt_bind_result_zerofill.phpt index a49d0d0ed994f..00dcae479cc1a 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_result_zerofill.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_result_zerofill.phpt @@ -90,7 +90,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_stmt_close.phpt b/ext/mysqli/tests/mysqli_stmt_close.phpt index dd27da85ab188..ba0dcd7140d5a 100644 --- a/ext/mysqli/tests/mysqli_stmt_close.phpt +++ b/ext/mysqli/tests/mysqli_stmt_close.phpt @@ -77,7 +77,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_stmt object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_stmt_data_seek.phpt b/ext/mysqli/tests/mysqli_stmt_data_seek.phpt index ffd5960c06bfa..a16aa631e4a6e 100644 --- a/ext/mysqli/tests/mysqli_stmt_data_seek.phpt +++ b/ext/mysqli/tests/mysqli_stmt_data_seek.phpt @@ -82,7 +82,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- mysqli_stmt object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_stmt_datatype_change.phpt b/ext/mysqli/tests/mysqli_stmt_datatype_change.phpt index 2f18c6371fd73..14f1ebbe506ed 100644 --- a/ext/mysqli/tests/mysqli_stmt_datatype_change.phpt +++ b/ext/mysqli/tests/mysqli_stmt_datatype_change.phpt @@ -60,7 +60,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS type_change")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_close($link); ?> diff --git a/ext/mysqli/tests/mysqli_stmt_errno.phpt b/ext/mysqli/tests/mysqli_stmt_errno.phpt index b5d741cd6e062..b65770c444c63 100644 --- a/ext/mysqli/tests/mysqli_stmt_errno.phpt +++ b/ext/mysqli/tests/mysqli_stmt_errno.phpt @@ -54,7 +54,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_stmt object is already closed diff --git a/ext/mysqli/tests/mysqli_stmt_error.phpt b/ext/mysqli/tests/mysqli_stmt_error.phpt index c8012b3434b54..0bf93edaa972f 100644 --- a/ext/mysqli/tests/mysqli_stmt_error.phpt +++ b/ext/mysqli/tests/mysqli_stmt_error.phpt @@ -54,7 +54,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_stmt object is already closed diff --git a/ext/mysqli/tests/mysqli_stmt_execute.phpt b/ext/mysqli/tests/mysqli_stmt_execute.phpt index 1d1307e4b9551..a939a93d31e25 100644 --- a/ext/mysqli/tests/mysqli_stmt_execute.phpt +++ b/ext/mysqli/tests/mysqli_stmt_execute.phpt @@ -5,10 +5,10 @@ mysqli_stmt_execute() require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); } if (mysqli_get_server_version($link) <= 40100) { - die(sprintf('skip Needs MySQL 4.1+, found version %d.', mysqli_get_server_version($link))); + die(sprintf('skip Needs MySQL 4.1+, found version %d.', mysqli_get_server_version($link))); } ?> --FILE-- @@ -133,7 +133,7 @@ if (mysqli_get_server_version($link) <= 40100) { ?> --CLEAN-- --EXPECT-- mysqli_stmt object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_stmt_execute_stored_proc.phpt b/ext/mysqli/tests/mysqli_stmt_execute_stored_proc.phpt index 33e6cd1c8b021..b26c16f98ae7c 100644 --- a/ext/mysqli/tests/mysqli_stmt_execute_stored_proc.phpt +++ b/ext/mysqli/tests/mysqli_stmt_execute_stored_proc.phpt @@ -6,10 +6,10 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); } if (mysqli_get_server_version($link) <= 50000) { - die(sprintf('skip Needs MySQL 5.0+, found version %d.', mysqli_get_server_version($link))); + die(sprintf('skip Needs MySQL 5.0+, found version %d.', mysqli_get_server_version($link))); } ?> --FILE-- @@ -188,7 +188,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch")) - printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); @mysqli_query($link, 'DROP PROCEDURE IF EXISTS p'); diff --git a/ext/mysqli/tests/mysqli_stmt_execute_stored_proc_next_result.phpt b/ext/mysqli/tests/mysqli_stmt_execute_stored_proc_next_result.phpt index f322a1a76c36f..86a703c6412b9 100644 --- a/ext/mysqli/tests/mysqli_stmt_execute_stored_proc_next_result.phpt +++ b/ext/mysqli/tests/mysqli_stmt_execute_stored_proc_next_result.phpt @@ -6,10 +6,10 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); } if (mysqli_get_server_version($link) < 50503) { - die(sprintf('skip Needs MySQL 5.5.3+, found version %d.', mysqli_get_server_version($link))); + die(sprintf('skip Needs MySQL 5.5.3+, found version %d.', mysqli_get_server_version($link))); } ?> --FILE-- diff --git a/ext/mysqli/tests/mysqli_stmt_execute_stored_proc_out.phpt b/ext/mysqli/tests/mysqli_stmt_execute_stored_proc_out.phpt index 7cbbc74988e9b..667268b3aa1ef 100644 --- a/ext/mysqli/tests/mysqli_stmt_execute_stored_proc_out.phpt +++ b/ext/mysqli/tests/mysqli_stmt_execute_stored_proc_out.phpt @@ -6,14 +6,14 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); + die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); } if (mysqli_get_server_version($link) < 50503) { - die(sprintf('skip Needs MySQL 5.5.3+, found version %d.', mysqli_get_server_version($link))); + die(sprintf('skip Needs MySQL 5.5.3+, found version %d.', mysqli_get_server_version($link))); } /* if ($IS_MYSQLND) { - die(sprintf("skip WHY ?!")); + die(sprintf("skip WHY ?!")); } */ ?> diff --git a/ext/mysqli/tests/mysqli_stmt_fetch.phpt b/ext/mysqli/tests/mysqli_stmt_fetch.phpt index b99a326323bd6..64b4862653ad3 100644 --- a/ext/mysqli/tests/mysqli_stmt_fetch.phpt +++ b/ext/mysqli/tests/mysqli_stmt_fetch.phpt @@ -78,7 +78,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- mysqli_stmt object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_stmt_fetch_bit.phpt b/ext/mysqli/tests/mysqli_stmt_fetch_bit.phpt index 87757dcaa9ab4..1e25a77a6b643 100644 --- a/ext/mysqli/tests/mysqli_stmt_fetch_bit.phpt +++ b/ext/mysqli/tests/mysqli_stmt_fetch_bit.phpt @@ -2,13 +2,13 @@ Fetching BIT column values using the PS API --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_stmt_fetch_fields_win32_unicode.phpt b/ext/mysqli/tests/mysqli_stmt_fetch_fields_win32_unicode.phpt index 086f4e08d8f18..073a48c228cc5 100644 --- a/ext/mysqli/tests/mysqli_stmt_fetch_fields_win32_unicode.phpt +++ b/ext/mysqli/tests/mysqli_stmt_fetch_fields_win32_unicode.phpt @@ -47,7 +47,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- OK: 1 diff --git a/ext/mysqli/tests/mysqli_stmt_fetch_geom.phpt b/ext/mysqli/tests/mysqli_stmt_fetch_geom.phpt index 3d177d903ded4..432d72fe545b1 100644 --- a/ext/mysqli/tests/mysqli_stmt_fetch_geom.phpt +++ b/ext/mysqli/tests/mysqli_stmt_fetch_geom.phpt @@ -2,11 +2,11 @@ mysqli_stmt_fetch - geometry / spatial types --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_stmt_field_count.phpt b/ext/mysqli/tests/mysqli_stmt_field_count.phpt index 939b3fcf5dc1a..4424248c48f2a 100644 --- a/ext/mysqli/tests/mysqli_stmt_field_count.phpt +++ b/ext/mysqli/tests/mysqli_stmt_field_count.phpt @@ -92,7 +92,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_stmt object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_stmt_free_result.phpt b/ext/mysqli/tests/mysqli_stmt_free_result.phpt index 833970a8b5a23..867a8193d4160 100644 --- a/ext/mysqli/tests/mysqli_stmt_free_result.phpt +++ b/ext/mysqli/tests/mysqli_stmt_free_result.phpt @@ -72,7 +72,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_stmt object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_stmt_get_result.phpt b/ext/mysqli/tests/mysqli_stmt_get_result.phpt index ca0b1ed03682c..2dee92d9ae9d3 100644 --- a/ext/mysqli/tests/mysqli_stmt_get_result.phpt +++ b/ext/mysqli/tests/mysqli_stmt_get_result.phpt @@ -6,7 +6,7 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_stmt_get_result')) - die('skip mysqli_stmt_get_result not available'); + die('skip mysqli_stmt_get_result not available'); ?> --FILE-- --CLEAN-- --EXPECTF-- mysqli_stmt object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_stmt_get_result2.phpt b/ext/mysqli/tests/mysqli_stmt_get_result2.phpt index 2daa325b75762..99fabb89d8fdf 100644 --- a/ext/mysqli/tests/mysqli_stmt_get_result2.phpt +++ b/ext/mysqli/tests/mysqli_stmt_get_result2.phpt @@ -5,7 +5,7 @@ mysqli_stmt_get_result() require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_stmt_get_result')) - die('skip mysqli_stmt_get_result not available'); + die('skip mysqli_stmt_get_result not available'); ?> --FILE-- --CLEAN-- --EXPECT-- array(2) { diff --git a/ext/mysqli/tests/mysqli_stmt_get_result_bit.phpt b/ext/mysqli/tests/mysqli_stmt_get_result_bit.phpt index c9e00a793d8ec..dace91f4c89e9 100644 --- a/ext/mysqli/tests/mysqli_stmt_get_result_bit.phpt +++ b/ext/mysqli/tests/mysqli_stmt_get_result_bit.phpt @@ -2,17 +2,17 @@ Fetching BIT column values using the PS API --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_stmt_get_result_field_count.phpt b/ext/mysqli/tests/mysqli_stmt_get_result_field_count.phpt index ec313f06aa479..300a1e3397ceb 100644 --- a/ext/mysqli/tests/mysqli_stmt_get_result_field_count.phpt +++ b/ext/mysqli/tests/mysqli_stmt_get_result_field_count.phpt @@ -2,11 +2,11 @@ mysqli_stmt_get_result() - meta data, field_count() --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- 2 2 diff --git a/ext/mysqli/tests/mysqli_stmt_get_result_geom.phpt b/ext/mysqli/tests/mysqli_stmt_get_result_geom.phpt index 51d2875c96476..2105a590d436c 100644 --- a/ext/mysqli/tests/mysqli_stmt_get_result_geom.phpt +++ b/ext/mysqli/tests/mysqli_stmt_get_result_geom.phpt @@ -2,14 +2,14 @@ mysqli_stmt_get_result - geometry / spatial types --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_stmt_get_result_metadata.phpt b/ext/mysqli/tests/mysqli_stmt_get_result_metadata.phpt index f3810019c4ce0..2fe305ed21ceb 100644 --- a/ext/mysqli/tests/mysqli_stmt_get_result_metadata.phpt +++ b/ext/mysqli/tests/mysqli_stmt_get_result_metadata.phpt @@ -6,7 +6,7 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_stmt_get_result')) - die('skip mysqli_stmt_get_result not available'); + die('skip mysqli_stmt_get_result not available'); ?> --FILE-- --CLEAN-- --EXPECT-- array(2) { diff --git a/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt b/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt index 0db422c03082c..0c9f0dfe23e7a 100644 --- a/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt +++ b/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt @@ -6,7 +6,7 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_stmt_get_result')) - die('skip mysqli_stmt_get_result not available'); + die('skip mysqli_stmt_get_result not available'); ?> --FILE-- --CLEAN-- --EXPECTF-- object(stdClass)#%d (13) { diff --git a/ext/mysqli/tests/mysqli_stmt_get_result_non_select.phpt b/ext/mysqli/tests/mysqli_stmt_get_result_non_select.phpt index f86b7c6b79cde..f2428aeb92785 100644 --- a/ext/mysqli/tests/mysqli_stmt_get_result_non_select.phpt +++ b/ext/mysqli/tests/mysqli_stmt_get_result_non_select.phpt @@ -6,7 +6,7 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_stmt_get_result')) - die('skip mysqli_stmt_get_result not available'); + die('skip mysqli_stmt_get_result not available'); ?> --FILE-- --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_stmt_get_result_seek.phpt b/ext/mysqli/tests/mysqli_stmt_get_result_seek.phpt index 8dacc30ce96c8..8c3d6e1e35d60 100644 --- a/ext/mysqli/tests/mysqli_stmt_get_result_seek.phpt +++ b/ext/mysqli/tests/mysqli_stmt_get_result_seek.phpt @@ -6,7 +6,7 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_stmt_get_result')) - die('skip mysqli_stmt_get_result not available'); + die('skip mysqli_stmt_get_result not available'); ?> --FILE-- --CLEAN-- --EXPECT-- mysqli_result::data_seek(): Argument #1 ($offset) must be greater than or equal to 0 diff --git a/ext/mysqli/tests/mysqli_stmt_get_result_types.phpt b/ext/mysqli/tests/mysqli_stmt_get_result_types.phpt index 1c2e857775e21..b188ed1d844b1 100644 --- a/ext/mysqli/tests/mysqli_stmt_get_result_types.phpt +++ b/ext/mysqli/tests/mysqli_stmt_get_result_types.phpt @@ -2,11 +2,11 @@ mysqli_stmt_get_result - data types --SKIPIF-- --FILE-- --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_stmt_get_warnings.phpt b/ext/mysqli/tests/mysqli_stmt_get_warnings.phpt index 7e6fe07a14c2c..3787a13386c07 100644 --- a/ext/mysqli/tests/mysqli_stmt_get_warnings.phpt +++ b/ext/mysqli/tests/mysqli_stmt_get_warnings.phpt @@ -8,16 +8,16 @@ require_once('skipifconnectfailure.inc'); require_once("connect.inc"); if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { - die(sprintf("skip Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", - $host, $user, $db, $port, $socket)); + die(sprintf("skip Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", + $host, $user, $db, $port, $socket)); } if (!mysqli_query($link, "DROP TABLE IF EXISTS test") || - !mysqli_query($link, "CREATE TABLE test(id SMALLINT)")) - die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); + !mysqli_query($link, "CREATE TABLE test(id SMALLINT)")) + die(sprintf("skip [%d] %s\n", $link->errno, $link->error)); if (!@mysqli_query($link, "SET sql_mode=''") || !@mysqli_query($link, "INSERT INTO test(id) VALUES (100001)")) - die("skip Strict sql mode seems to be active. We won't get a warning to check for."); + die("skip Strict sql mode seems to be active. We won't get a warning to check for."); mysqli_query($link, "DROP TABLE IF EXISTS test"); ?> @@ -96,7 +96,7 @@ mysqli_query($link, "DROP TABLE IF EXISTS test"); ?> --CLEAN-- --EXPECT-- mysqli_stmt object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_stmt_init.phpt b/ext/mysqli/tests/mysqli_stmt_init.phpt index 639c95944c3c5..22a21a64d27c1 100644 --- a/ext/mysqli/tests/mysqli_stmt_init.phpt +++ b/ext/mysqli/tests/mysqli_stmt_init.phpt @@ -40,7 +40,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_stmt object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_stmt_insert_id.phpt b/ext/mysqli/tests/mysqli_stmt_insert_id.phpt index 092c90c2a92a4..d49bd1b094324 100644 --- a/ext/mysqli/tests/mysqli_stmt_insert_id.phpt +++ b/ext/mysqli/tests/mysqli_stmt_insert_id.phpt @@ -66,7 +66,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_stmt object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_stmt_multires.phpt b/ext/mysqli/tests/mysqli_stmt_multires.phpt index abb9ecbfb2797..73af79e2b166e 100644 --- a/ext/mysqli/tests/mysqli_stmt_multires.phpt +++ b/ext/mysqli/tests/mysqli_stmt_multires.phpt @@ -94,10 +94,10 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- query('DROP PROCEDURE IF EXISTS p123')) { - printf("[001] [%d] %s\n", $link->error, $link->errno); - } + require_once("connect.inc"); + if (!$link->query('DROP PROCEDURE IF EXISTS p123')) { + printf("[001] [%d] %s\n", $link->error, $link->errno); + } ?> --EXPECT-- string(4) "pre:" diff --git a/ext/mysqli/tests/mysqli_stmt_num_rows.phpt b/ext/mysqli/tests/mysqli_stmt_num_rows.phpt index f006b974eb53a..8b932dc053469 100644 --- a/ext/mysqli/tests/mysqli_stmt_num_rows.phpt +++ b/ext/mysqli/tests/mysqli_stmt_num_rows.phpt @@ -102,7 +102,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- run_tests.php don't fool me with your 'ungreedy' expression '.+?'! diff --git a/ext/mysqli/tests/mysqli_stmt_param_count.phpt b/ext/mysqli/tests/mysqli_stmt_param_count.phpt index 0d1fa5ca5560d..50886949359fe 100644 --- a/ext/mysqli/tests/mysqli_stmt_param_count.phpt +++ b/ext/mysqli/tests/mysqli_stmt_param_count.phpt @@ -53,7 +53,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_stmt object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_stmt_prepare.phpt b/ext/mysqli/tests/mysqli_stmt_prepare.phpt index 14929a9051b68..36ce473f3da1d 100644 --- a/ext/mysqli/tests/mysqli_stmt_prepare.phpt +++ b/ext/mysqli/tests/mysqli_stmt_prepare.phpt @@ -39,7 +39,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_stmt object is already closed diff --git a/ext/mysqli/tests/mysqli_stmt_reset.phpt b/ext/mysqli/tests/mysqli_stmt_reset.phpt index 081a5f0855db6..933f0774bf0d7 100644 --- a/ext/mysqli/tests/mysqli_stmt_reset.phpt +++ b/ext/mysqli/tests/mysqli_stmt_reset.phpt @@ -97,7 +97,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_stmt object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_stmt_result_metadata.phpt b/ext/mysqli/tests/mysqli_stmt_result_metadata.phpt index 0c77186efc9a3..250e93ed001ca 100644 --- a/ext/mysqli/tests/mysqli_stmt_result_metadata.phpt +++ b/ext/mysqli/tests/mysqli_stmt_result_metadata.phpt @@ -86,7 +86,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECTF-- mysqli_stmt object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_stmt_result_metadata_sqltests.phpt b/ext/mysqli/tests/mysqli_stmt_result_metadata_sqltests.phpt index 877bd0c713769..929e9df645d01 100644 --- a/ext/mysqli/tests/mysqli_stmt_result_metadata_sqltests.phpt +++ b/ext/mysqli/tests/mysqli_stmt_result_metadata_sqltests.phpt @@ -225,7 +225,7 @@ die("skip Check again when the Klingons visit earth - http://bugs.mysql.com/bug. ?> --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_stmt_send_long_data.phpt b/ext/mysqli/tests/mysqli_stmt_send_long_data.phpt index b45098d298af0..b9139cb6e1979 100644 --- a/ext/mysqli/tests/mysqli_stmt_send_long_data.phpt +++ b/ext/mysqli/tests/mysqli_stmt_send_long_data.phpt @@ -105,7 +105,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_stmt_send_long_data(): Argument #2 ($param_nr) must be greater than or equal to 0 diff --git a/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_libmysql.phpt b/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_libmysql.phpt index c81e0c5d1a2d8..b191df602254b 100644 --- a/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_libmysql.phpt +++ b/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_libmysql.phpt @@ -6,7 +6,7 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (stristr(mysqli_get_client_info(), 'mysqlnd')) - die("skip: test for libmysql"); + die("skip: test for libmysql"); ?> --FILE-- --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_mysqlnd.phpt b/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_mysqlnd.phpt index 64643d52f3008..c7376afdd3051 100644 --- a/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_mysqlnd.phpt +++ b/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_mysqlnd.phpt @@ -6,7 +6,7 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (!stristr(mysqli_get_client_info(), 'mysqlnd')) - die("skip: warnings only available in mysqlnd"); + die("skip: warnings only available in mysqlnd"); ?> --FILE-- --CLEAN-- --EXPECT-- done! diff --git a/ext/mysqli/tests/mysqli_stmt_sqlstate.phpt b/ext/mysqli/tests/mysqli_stmt_sqlstate.phpt index 959a5f715410e..edad2b9c3f90c 100644 --- a/ext/mysqli/tests/mysqli_stmt_sqlstate.phpt +++ b/ext/mysqli/tests/mysqli_stmt_sqlstate.phpt @@ -46,7 +46,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_stmt object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_stmt_store_result.phpt b/ext/mysqli/tests/mysqli_stmt_store_result.phpt index e798ce8a3c433..d8f4c4769f78d 100644 --- a/ext/mysqli/tests/mysqli_stmt_store_result.phpt +++ b/ext/mysqli/tests/mysqli_stmt_store_result.phpt @@ -77,7 +77,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_stmt object is not fully initialized diff --git a/ext/mysqli/tests/mysqli_store_result.phpt b/ext/mysqli/tests/mysqli_store_result.phpt index 7a0157106d057..8d4e72bdf9be2 100644 --- a/ext/mysqli/tests/mysqli_store_result.phpt +++ b/ext/mysqli/tests/mysqli_store_result.phpt @@ -50,7 +50,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli object is already closed diff --git a/ext/mysqli/tests/mysqli_thread_id.phpt b/ext/mysqli/tests/mysqli_thread_id.phpt index 8e6cd1e6af805..f72d33cf25ec3 100644 --- a/ext/mysqli/tests/mysqli_thread_id.phpt +++ b/ext/mysqli/tests/mysqli_thread_id.phpt @@ -30,7 +30,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli object is already closed diff --git a/ext/mysqli/tests/mysqli_use_result.phpt b/ext/mysqli/tests/mysqli_use_result.phpt index ddbd734153eb0..a333891bba211 100644 --- a/ext/mysqli/tests/mysqli_use_result.phpt +++ b/ext/mysqli/tests/mysqli_use_result.phpt @@ -52,7 +52,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli_data_seek() cannot be used in MYSQLI_USE_RESULT mode diff --git a/ext/mysqli/tests/mysqli_warning_count.phpt b/ext/mysqli/tests/mysqli_warning_count.phpt index 1c1df0ccdfe58..5ad0e10334917 100644 --- a/ext/mysqli/tests/mysqli_warning_count.phpt +++ b/ext/mysqli/tests/mysqli_warning_count.phpt @@ -35,7 +35,7 @@ require_once('skipifconnectfailure.inc'); ?> --CLEAN-- --EXPECT-- mysqli object is already closed diff --git a/ext/mysqli/tests/mysqli_warning_unclonable.phpt b/ext/mysqli/tests/mysqli_warning_unclonable.phpt index 5e3758be961c1..e33bdb7d3a338 100644 --- a/ext/mysqli/tests/mysqli_warning_unclonable.phpt +++ b/ext/mysqli/tests/mysqli_warning_unclonable.phpt @@ -6,7 +6,7 @@ require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); require_once('connect.inc'); if (!$TEST_EXPERIMENTAL) - die("skip - experimental (= unsupported) feature"); + die("skip - experimental (= unsupported) feature"); ?> --FILE-- --CLEAN-- --EXPECTF-- Fatal error: Trying to clone an uncloneable object of class mysqli_warning in %s on line %d diff --git a/ext/oci8/tests/conn_attr_1.phpt b/ext/oci8/tests/conn_attr_1.phpt index ce23b2b5aace5..bcfb1e8515a56 100644 --- a/ext/oci8/tests/conn_attr_1.phpt +++ b/ext/oci8/tests/conn_attr_1.phpt @@ -11,7 +11,7 @@ if ($test_drcp) die("skip output might vary with DRCP"); preg_match('/.*Release ([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)*/', oci_server_version($c), $matches); if (!(isset($matches[0]) && $matches[1] >= 10)) { - die("skip expected output only valid when using Oracle 10g or greater database server"); + die("skip expected output only valid when using Oracle 10g or greater database server"); } ?> --FILE-- diff --git a/ext/oci8/tests/conn_attr_2.phpt b/ext/oci8/tests/conn_attr_2.phpt index 61d59093b150a..0005faa9a35f5 100644 --- a/ext/oci8/tests/conn_attr_2.phpt +++ b/ext/oci8/tests/conn_attr_2.phpt @@ -10,7 +10,7 @@ if ($test_drcp) die("skip output might vary with DRCP"); preg_match('/.*Release ([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)*/', oci_server_version($c), $matches); if (!(isset($matches[0]) && $matches[1] >= 10)) { - die("skip expected output only valid when using Oracle 10g or greater database server"); + die("skip expected output only valid when using Oracle 10g or greater database server"); } ?> --INI-- diff --git a/ext/oci8/tests/conn_attr_3.phpt b/ext/oci8/tests/conn_attr_3.phpt index a116be0fab289..bcab76b80c2e4 100644 --- a/ext/oci8/tests/conn_attr_3.phpt +++ b/ext/oci8/tests/conn_attr_3.phpt @@ -10,7 +10,7 @@ if ($test_drcp) die("skip output might vary with DRCP"); preg_match('/.*Release ([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)*/', oci_server_version($c), $matches); if (!(isset($matches[0]) && $matches[1] >= 10)) { - die("skip expected output only valid when using Oracle 10g or greater database server"); + die("skip expected output only valid when using Oracle 10g or greater database server"); } ?> --FILE-- diff --git a/ext/oci8/tests/conn_attr_5.phpt b/ext/oci8/tests/conn_attr_5.phpt index 4a58f917d3393..006b49ab1e341 100644 --- a/ext/oci8/tests/conn_attr_5.phpt +++ b/ext/oci8/tests/conn_attr_5.phpt @@ -10,7 +10,7 @@ if ($test_drcp) die("skip output might vary with DRCP"); preg_match('/.*Release ([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)*/', oci_server_version($c), $matches); if (!(isset($matches[0]) && $matches[1] >= 10)) { - die("skip expected output only valid when using Oracle 10g or greater database server"); + die("skip expected output only valid when using Oracle 10g or greater database server"); } ?> --FILE-- diff --git a/ext/oci8/tests/connect_without_oracle_home.phpt b/ext/oci8/tests/connect_without_oracle_home.phpt index 203fd57e92350..57d348082bd95 100644 --- a/ext/oci8/tests/connect_without_oracle_home.phpt +++ b/ext/oci8/tests/connect_without_oracle_home.phpt @@ -8,7 +8,7 @@ phpinfo(INFO_MODULES); $phpinfo = ob_get_clean(); $ov = preg_match('/Compile-time ORACLE_HOME/', $phpinfo); if ($ov !== 1) { - die ("skip Test only valid when OCI8 is built with an ORACLE_HOME"); + die ("skip Test only valid when OCI8 is built with an ORACLE_HOME"); } preg_match('/^([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/', oci_client_version(), $matches); if (!isset($matches[0]) || !($matches[1] == 10 && $matches[2] == 2)) { diff --git a/ext/oci8/tests/connect_without_oracle_home_11.phpt b/ext/oci8/tests/connect_without_oracle_home_11.phpt index 85ac993877088..51e5ef38ac54a 100644 --- a/ext/oci8/tests/connect_without_oracle_home_11.phpt +++ b/ext/oci8/tests/connect_without_oracle_home_11.phpt @@ -8,7 +8,7 @@ phpinfo(INFO_MODULES); $phpinfo = ob_get_clean(); $ov = preg_match('/Compile-time ORACLE_HOME/', $phpinfo); if ($ov != 1) { - die ("skip Test only valid when OCI8 is built with an ORACLE_HOME"); + die ("skip Test only valid when OCI8 is built with an ORACLE_HOME"); } preg_match('/^([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/', oci_client_version(), $matches); if (!(isset($matches[0]) && diff --git a/ext/oci8/tests/edition_1.phpt b/ext/oci8/tests/edition_1.phpt index b75dfe4350f08..c013a687eb73a 100644 --- a/ext/oci8/tests/edition_1.phpt +++ b/ext/oci8/tests/edition_1.phpt @@ -15,7 +15,7 @@ if (!(isset($matches[0]) && (($matches[1] == 11 && $matches[2] >= 2) || ($matches[1] >= 12) ))) { - die("skip expected output only valid when using Oracle 11gR2 or greater database server"); + die("skip expected output only valid when using Oracle 11gR2 or greater database server"); } preg_match('/^([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/', oci_client_version(), $matches); if (!(isset($matches[0]) && diff --git a/ext/oci8/tests/edition_2.phpt b/ext/oci8/tests/edition_2.phpt index a556fb4a17d8b..4aab1c36bca01 100644 --- a/ext/oci8/tests/edition_2.phpt +++ b/ext/oci8/tests/edition_2.phpt @@ -13,7 +13,7 @@ if (!(isset($matches[0]) && (($matches[1] == 11 && $matches[2] >= 2) || ($matches[1] >= 12) ))) { - die("skip expected output only valid when using Oracle 11gR2 or greater database server"); + die("skip expected output only valid when using Oracle 11gR2 or greater database server"); } preg_match('/^([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/', oci_client_version(), $matches); if (!(isset($matches[0]) && diff --git a/ext/oci8/tests/password_new.phpt b/ext/oci8/tests/password_new.phpt index 8c7acd471feaa..cdc79b1057bf3 100644 --- a/ext/oci8/tests/password_new.phpt +++ b/ext/oci8/tests/password_new.phpt @@ -16,7 +16,7 @@ if (!(isset($matches_sv[0]) && isset($matches[0]) && $matches_sv[3] == $matches[3] && $matches_sv[4] == $matches[4])) { // Avoid diffs due to cross version protocol changes (e.g. like 11.2.0.2-11.2.0.3) and bugs like Oracle bug: 6277160 - die ("skip test only runs when database client libraries and database server are the same version"); + die ("skip test only runs when database client libraries and database server are the same version"); } // This test in Oracle 12c needs a non-CDB or the root container diff --git a/ext/oci8/tests/pecl_bug16035.phpt b/ext/oci8/tests/pecl_bug16035.phpt index 2fdef268317ed..37e725a9b7d03 100644 --- a/ext/oci8/tests/pecl_bug16035.phpt +++ b/ext/oci8/tests/pecl_bug16035.phpt @@ -8,7 +8,7 @@ phpinfo(INFO_MODULES); $phpinfo = ob_get_clean(); $ov = preg_match('/Compile-time ORACLE_HOME/', $phpinfo); if ($ov !== 1) { - die ("skip Test only valid when OCI8 is built with an ORACLE_HOME"); + die ("skip Test only valid when OCI8 is built with an ORACLE_HOME"); } ?> --ENV-- diff --git a/ext/oci8/tests/refcur_prefetch_1.phpt b/ext/oci8/tests/refcur_prefetch_1.phpt index 0297401f995dc..5f8fe821d40a6 100644 --- a/ext/oci8/tests/refcur_prefetch_1.phpt +++ b/ext/oci8/tests/refcur_prefetch_1.phpt @@ -7,7 +7,7 @@ require(__DIR__."/connect.inc"); preg_match('/.*Release ([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)*/', oci_server_version($c), $matches); if (!(isset($matches[0]) && ($matches[1] >= 10))) { - die("skip expected output only valid when using Oracle 10g or greater database server"); + die("skip expected output only valid when using Oracle 10g or greater database server"); } preg_match('/^([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/', oci_client_version(), $matches); if (!(isset($matches[0]) && diff --git a/ext/oci8/tests/refcur_prefetch_2.phpt b/ext/oci8/tests/refcur_prefetch_2.phpt index 69146914a4bf7..de8197a5cb549 100644 --- a/ext/oci8/tests/refcur_prefetch_2.phpt +++ b/ext/oci8/tests/refcur_prefetch_2.phpt @@ -7,7 +7,7 @@ require(__DIR__."/connect.inc"); preg_match('/.*Release ([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)*/', oci_server_version($c), $matches); if (!(isset($matches[0]) && ($matches[1] >= 10))) { - die("skip expected output only valid when using Oracle 10g or greater database server"); + die("skip expected output only valid when using Oracle 10g or greater database server"); } preg_match('/^([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/', oci_client_version(), $matches); if (!(isset($matches[0]) && diff --git a/ext/oci8/tests/refcur_prefetch_3.phpt b/ext/oci8/tests/refcur_prefetch_3.phpt index bfc2faf5bf097..719f765b4f440 100644 --- a/ext/oci8/tests/refcur_prefetch_3.phpt +++ b/ext/oci8/tests/refcur_prefetch_3.phpt @@ -11,7 +11,7 @@ if (!(isset($matches[0]) && (($matches[1] == 11 && $matches[2] >= 2) || ($matches[1] >= 12) ))) { - die("skip expected output only valid when using Oracle 11gR2 or greater database server"); + die("skip expected output only valid when using Oracle 11gR2 or greater database server"); } preg_match('/^([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/', oci_client_version(), $matches); if (!(isset($matches[0]) && diff --git a/ext/oci8/tests/refcur_prefetch_4.phpt b/ext/oci8/tests/refcur_prefetch_4.phpt index 6c0b1b26d077e..64ccfbe166028 100644 --- a/ext/oci8/tests/refcur_prefetch_4.phpt +++ b/ext/oci8/tests/refcur_prefetch_4.phpt @@ -7,7 +7,7 @@ require(__DIR__."/connect.inc"); preg_match('/.*Release ([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)*/', oci_server_version($c), $matches); if (!(isset($matches[0]) && ($matches[1] >= 10))) { - die("skip expected output only valid when using Oracle 10g or greater database server"); + die("skip expected output only valid when using Oracle 10g or greater database server"); } preg_match('/^([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/', oci_client_version(), $matches); if (!(isset($matches[0]) && diff --git a/ext/odbc/tests/bug60616.phpt b/ext/odbc/tests/bug60616.phpt index 9d98d46b08c59..d453efb010bbd 100644 --- a/ext/odbc/tests/bug60616.phpt +++ b/ext/odbc/tests/bug60616.phpt @@ -3,9 +3,9 @@ odbc_exec(): Getting accurate unicode data from query --SKIPIF-- --FILE-- --FILE-- --FILE-- strlen(__DIR__)) { - rmdir($p); - $p = dirname($p); - } + unlink($p); + $p = dirname($p); + while(strlen($p) > strlen(__DIR__)) { + rmdir($p); + $p = dirname($p); + } } ?> --EXPECTF-- diff --git a/ext/openssl/tests/openssl_decrypt_ccm.phpt b/ext/openssl/tests/openssl_decrypt_ccm.phpt index 87b6d4b26465f..067cde083bf21 100644 --- a/ext/openssl/tests/openssl_decrypt_ccm.phpt +++ b/ext/openssl/tests/openssl_decrypt_ccm.phpt @@ -3,9 +3,9 @@ openssl_decrypt() with CCM cipher algorithm tests --SKIPIF-- --FILE-- --FILE-- --FILE-- --EXPECT-- diff --git a/ext/openssl/tests/openssl_pkcs12_export_to_file_basic.phpt b/ext/openssl/tests/openssl_pkcs12_export_to_file_basic.phpt index 43d51753a01a2..e7ee13caf6da6 100644 --- a/ext/openssl/tests/openssl_pkcs12_export_to_file_basic.phpt +++ b/ext/openssl/tests/openssl_pkcs12_export_to_file_basic.phpt @@ -40,7 +40,7 @@ try { --EXPECTF-- diff --git a/ext/openssl/tests/openssl_pkcs12_export_to_file_error.phpt b/ext/openssl/tests/openssl_pkcs12_export_to_file_error.phpt index 92d7f2789ebc7..f65822e535d39 100644 --- a/ext/openssl/tests/openssl_pkcs12_export_to_file_error.phpt +++ b/ext/openssl/tests/openssl_pkcs12_export_to_file_error.phpt @@ -23,7 +23,7 @@ var_dump(openssl_pkcs12_export_to_file($cert, '.', $priv, $pass)); --EXPECTF-- diff --git a/ext/pcntl/tests/001.phpt b/ext/pcntl/tests/001.phpt index cdfdb0733f9e9..16601cdb51c1f 100644 --- a/ext/pcntl/tests/001.phpt +++ b/ext/pcntl/tests/001.phpt @@ -2,8 +2,8 @@ Test pcntl wait functionality --SKIPIF-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- diff --git a/ext/pcre/tests/backtrack_limit.phpt b/ext/pcre/tests/backtrack_limit.phpt index 3f0d8e64468a0..3b6f7786a2c50 100644 --- a/ext/pcre/tests/backtrack_limit.phpt +++ b/ext/pcre/tests/backtrack_limit.phpt @@ -3,7 +3,7 @@ Backtracking limit --SKIPIF-- --INI-- diff --git a/ext/pcre/tests/bug27103.phpt b/ext/pcre/tests/bug27103.phpt index 0b706010a04f2..9ba70f7a64428 100644 --- a/ext/pcre/tests/bug27103.phpt +++ b/ext/pcre/tests/bug27103.phpt @@ -3,7 +3,7 @@ Bug #27103 (preg_split('//u') incorrectly splits UTF-8 strings into octets) --SKIPIF-- --FILE-- diff --git a/ext/pcre/tests/bug72463.phpt b/ext/pcre/tests/bug72463.phpt index b40a721998398..156b692ab0f84 100644 --- a/ext/pcre/tests/bug72463.phpt +++ b/ext/pcre/tests/bug72463.phpt @@ -3,7 +3,7 @@ Bug #72463 mail fails with invalid argument --SKIPIF-- --INI-- diff --git a/ext/pcre/tests/bug72463_2.phpt b/ext/pcre/tests/bug72463_2.phpt index 1baeb0f2a1154..3cc87b47ac5a4 100644 --- a/ext/pcre/tests/bug72463_2.phpt +++ b/ext/pcre/tests/bug72463_2.phpt @@ -3,7 +3,7 @@ Bug #72463 mail fails with invalid argument --SKIPIF-- --INI-- diff --git a/ext/pcre/tests/bug76850.phpt b/ext/pcre/tests/bug76850.phpt index 50c62ad1b335c..acceb2da7185b 100644 --- a/ext/pcre/tests/bug76850.phpt +++ b/ext/pcre/tests/bug76850.phpt @@ -2,10 +2,10 @@ Bug #76850 Exit code mangled by set locale/preg_match --SKIPIF-- --FILE-- --FILE-- diff --git a/ext/pcre/tests/bug77193.phpt b/ext/pcre/tests/bug77193.phpt index 4fdb603b8591a..ddceb6141fefd 100644 --- a/ext/pcre/tests/bug77193.phpt +++ b/ext/pcre/tests/bug77193.phpt @@ -2,9 +2,9 @@ Bug #77193 Infinite loop in preg_replace_callback --SKIPIF-- --FILE-- --INI-- diff --git a/ext/pcre/tests/errors05.phpt b/ext/pcre/tests/errors05.phpt index 13fabc4f30f4c..dc60c24938e51 100644 --- a/ext/pcre/tests/errors05.phpt +++ b/ext/pcre/tests/errors05.phpt @@ -3,7 +3,7 @@ Test preg_match() function : error conditions - jit stacklimit exhausted --SKIPIF-- --INI-- diff --git a/ext/pcre/tests/invalid_utf8.phpt b/ext/pcre/tests/invalid_utf8.phpt index f24042a3bdf12..1a5124daaac3b 100644 --- a/ext/pcre/tests/invalid_utf8.phpt +++ b/ext/pcre/tests/invalid_utf8.phpt @@ -3,7 +3,7 @@ preg_replace() and invalid UTF8 --SKIPIF-- --FILE-- diff --git a/ext/pcre/tests/invalid_utf8_offset.phpt b/ext/pcre/tests/invalid_utf8_offset.phpt index 2b9e7fa239b16..311a6d73d6682 100644 --- a/ext/pcre/tests/invalid_utf8_offset.phpt +++ b/ext/pcre/tests/invalid_utf8_offset.phpt @@ -3,7 +3,7 @@ preg_replace() and invalid UTF8 offset --SKIPIF-- --FILE-- diff --git a/ext/pcre/tests/pcre_anchored.phpt b/ext/pcre/tests/pcre_anchored.phpt index c03d13501a7e4..7852cd6d62ff7 100644 --- a/ext/pcre/tests/pcre_anchored.phpt +++ b/ext/pcre/tests/pcre_anchored.phpt @@ -3,7 +3,7 @@ A (PCRE_ANCHORED) modifier --SKIPIF-- --FILE-- diff --git a/ext/pcre/tests/preg_match_error3.phpt b/ext/pcre/tests/preg_match_error3.phpt index 8b9d59fc58bd7..cf9c29a112cec 100644 --- a/ext/pcre/tests/preg_match_error3.phpt +++ b/ext/pcre/tests/preg_match_error3.phpt @@ -3,7 +3,7 @@ Test preg_match() function : error conditions - jit stacklimit exhausted --SKIPIF-- --INI-- diff --git a/ext/pcre/tests/preg_replace2.phpt b/ext/pcre/tests/preg_replace2.phpt index ac88e876e698c..e38c4788cb997 100644 --- a/ext/pcre/tests/preg_replace2.phpt +++ b/ext/pcre/tests/preg_replace2.phpt @@ -3,7 +3,7 @@ preg_replace() --SKIPIF-- --FILE-- diff --git a/ext/pcre/tests/recursion_limit.phpt b/ext/pcre/tests/recursion_limit.phpt index 294931388d6fc..5d08f1771bc27 100644 --- a/ext/pcre/tests/recursion_limit.phpt +++ b/ext/pcre/tests/recursion_limit.phpt @@ -3,7 +3,7 @@ PCRE Recursion limit --SKIPIF-- --INI-- diff --git a/ext/pdo/tests/bug_44159.phpt b/ext/pdo/tests/bug_44159.phpt index 5f23f910eb6ec..0e1116d58863e 100644 --- a/ext/pdo/tests/bug_44159.phpt +++ b/ext/pdo/tests/bug_44159.phpt @@ -4,9 +4,9 @@ PDO Common: Bug #44159 (Crash: $pdo->setAttribute(PDO::STATEMENT_ATTR_CLASS, NUL --FILE-- diff --git a/ext/pdo/tests/bug_44861.phpt b/ext/pdo/tests/bug_44861.phpt index 6ca5b175636b6..73c2675c1a333 100644 --- a/ext/pdo/tests/bug_44861.phpt +++ b/ext/pdo/tests/bug_44861.phpt @@ -8,12 +8,12 @@ if (false == $dir) die('skip no driver'); $allowed = array('oci', 'pgsql'); $ok = false; foreach ($allowed as $driver) { - if (!strncasecmp(getenv('PDOTEST_DSN'), $driver, strlen($driver))) { - $ok = true; - } + if (!strncasecmp(getenv('PDOTEST_DSN'), $driver, strlen($driver))) { + $ok = true; + } } if (!$ok) { - die("skip Scrollable cursors not supported"); + die("skip Scrollable cursors not supported"); } require_once $dir . 'pdo_test.inc'; PDOTest::skip(); diff --git a/ext/pdo/tests/bug_47769.phpt b/ext/pdo/tests/bug_47769.phpt index 2c308d9113213..daac15574a85d 100644 --- a/ext/pdo/tests/bug_47769.phpt +++ b/ext/pdo/tests/bug_47769.phpt @@ -3,7 +3,7 @@ PDO Common: Bug #47769 (Strange extends PDO) --SKIPIF-- --FILE-- getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') { - require_once(__DIR__ . DIRECTORY_SEPARATOR . '../../pdo_mysql/tests/mysql_pdo_test.inc'); - if (false === MySQLPDOTest::detect_transactional_mysql_engine($db)) { - die('skip your mysql configuration does not support working transactions'); - } + require_once(__DIR__ . DIRECTORY_SEPARATOR . '../../pdo_mysql/tests/mysql_pdo_test.inc'); + if (false === MySQLPDOTest::detect_transactional_mysql_engine($db)) { + die('skip your mysql configuration does not support working transactions'); + } } ?> --FILE-- diff --git a/ext/pdo/tests/pdo_dsn_containing_credentials.phpt b/ext/pdo/tests/pdo_dsn_containing_credentials.phpt index 7c67bc32273a4..e3d530ba49ee5 100644 --- a/ext/pdo/tests/pdo_dsn_containing_credentials.phpt +++ b/ext/pdo/tests/pdo_dsn_containing_credentials.phpt @@ -8,7 +8,7 @@ if (false == $dir) die('skip no driver'); $driver = substr(getenv('PDOTEST_DSN'), 0, strpos(getenv('PDOTEST_DSN'), ':')); if (!in_array($driver, array('mssql','sybase','dblib','firebird','mysql','oci'))) - die('skip not supported'); + die('skip not supported'); require_once $dir . 'pdo_test.inc'; PDOTest::skip(); diff --git a/ext/pdo_mysql/tests/bug_39858.phpt b/ext/pdo_mysql/tests/bug_39858.phpt index 9328c0f20d22e..e33415eb675a9 100644 --- a/ext/pdo_mysql/tests/bug_39858.phpt +++ b/ext/pdo_mysql/tests/bug_39858.phpt @@ -11,12 +11,12 @@ $db = MySQLPDOTest::factory(); $row = $db->query('SELECT VERSION() as _version')->fetch(PDO::FETCH_ASSOC); $matches = array(); if (!preg_match('/^(\d+)\.(\d+)\.(\d+)/ismU', $row['_version'], $matches)) - die(sprintf("skip Cannot determine MySQL Server version\n")); + die(sprintf("skip Cannot determine MySQL Server version\n")); $version = $matches[1] * 10000 + $matches[2] * 100 + $matches[3]; if ($version < 50000) - die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n", - $matches[1], $matches[2], $matches[3], $version)); + die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n", + $matches[1], $matches[2], $matches[3], $version)); ?> --XFAIL-- nextRowset() problem with stored proc & emulation mode & mysqlnd diff --git a/ext/pdo_mysql/tests/bug_41125.phpt b/ext/pdo_mysql/tests/bug_41125.phpt index c86cad2b51063..e7db01c8e3218 100644 --- a/ext/pdo_mysql/tests/bug_41125.phpt +++ b/ext/pdo_mysql/tests/bug_41125.phpt @@ -10,13 +10,13 @@ $db = MySQLPDOTest::factory(); $row = $db->query('SELECT VERSION() as _version')->fetch(PDO::FETCH_ASSOC); $matches = array(); if (!preg_match('/^(\d+)\.(\d+)\.(\d+)/ismU', $row['_version'], $matches)) - die(sprintf("skip Cannot determine MySQL Server version\n")); + die(sprintf("skip Cannot determine MySQL Server version\n")); $version = $matches[1] * 10000 + $matches[2] * 100 + $matches[3]; die("skip $version"); if ($version < 40100) - die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n", - $matches[1], $matches[2], $matches[3], $version)); + die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n", + $matches[1], $matches[2], $matches[3], $version)); ?> --FILE-- query('SELECT VERSION() as _version')->fetch(PDO::FETCH_ASSOC); $matches = array(); if (!preg_match('/^(\d+)\.(\d+)\.(\d+)/ismU', $row['_version'], $matches)) - die(sprintf("skip Cannot determine MySQL Server version\n")); + die(sprintf("skip Cannot determine MySQL Server version\n")); $version = $matches[1] * 10000 + $matches[2] * 100 + $matches[3]; if ($version < 50000) - die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n", - $matches[1], $matches[2], $matches[3], $version)); + die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n", + $matches[1], $matches[2], $matches[3], $version)); ?> --FILE-- query('SELECT VERSION() as _version'); $row = $stmt->fetch(PDO::FETCH_ASSOC); $matches = array(); if (!preg_match('/^(\d+)\.(\d+)\.(\d+)/ismU', $row['_version'], $matches)) - die(sprintf("skip Cannot determine MySQL Server version\n")); + die(sprintf("skip Cannot determine MySQL Server version\n")); $version = $matches[1] * 10000 + $matches[2] * 100 + $matches[3]; if ($version < 41000) - die(sprintf("skip Need MySQL Server 4.1.0+, found %d.%02d.%02d (%d)\n", - $matches[1], $matches[2], $matches[3], $version)); + die(sprintf("skip Need MySQL Server 4.1.0+, found %d.%02d.%02d (%d)\n", + $matches[1], $matches[2], $matches[3], $version)); --FILE-- query('SELECT VERSION() as _version'); $row = $stmt->fetch(PDO::FETCH_ASSOC); $matches = array(); if (!preg_match('/^(\d+)\.(\d+)\.(\d+)/ismU', $row['_version'], $matches)) - die(sprintf("skip Cannot determine MySQL Server version\n")); + die(sprintf("skip Cannot determine MySQL Server version\n")); $version = $matches[1] * 10000 + $matches[2] * 100 + $matches[3]; if ($version < 41000) - die(sprintf("skip Will work different with MySQL Server < 4.1.0, found %d.%02d.%02d (%d)\n", - $matches[1], $matches[2], $matches[3], $version)); + die(sprintf("skip Will work different with MySQL Server < 4.1.0, found %d.%02d.%02d (%d)\n", + $matches[1], $matches[2], $matches[3], $version)); ?> --FILE-- query('SELECT VERSION() as _version')->fetch(PDO::FETCH_ASSOC); $matches = array(); if (!preg_match('/^(\d+)\.(\d+)\.(\d+)/ismU', $row['_version'], $matches)) - die(sprintf("skip Cannot determine MySQL Server version\n")); + die(sprintf("skip Cannot determine MySQL Server version\n")); $version = $matches[1] * 10000 + $matches[2] * 100 + $matches[3]; if ($version < 40106) - die(sprintf("skip Need MySQL Server 4.1.6+, found %d.%02d.%02d (%d)\n", - $matches[1], $matches[2], $matches[3], $version)); + die(sprintf("skip Need MySQL Server 4.1.6+, found %d.%02d.%02d (%d)\n", + $matches[1], $matches[2], $matches[3], $version)); ?> --FILE-- query('SELECT VERSION() as _version')->fetch(PDO::FETCH_ASSOC); $matches = array(); if (!preg_match('/^(\d+)\.(\d+)\.(\d+)/ismU', $row['_version'], $matches)) - die(sprintf("skip Cannot determine MySQL Server version\n")); + die(sprintf("skip Cannot determine MySQL Server version\n")); $version = $matches[1] * 10000 + $matches[2] * 100 + $matches[3]; if ($version < 50000) - die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n", - $matches[1], $matches[2], $matches[3], $version)); + die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n", + $matches[1], $matches[2], $matches[3], $version)); ?> --FILE-- --INI-- pdo.dsn.mysql="mysql:dbname=phptest;socket=/tmp/mysql.sock" diff --git a/ext/pdo_mysql/tests/pdo_mysql___construct_options_libmysql.phpt b/ext/pdo_mysql/tests/pdo_mysql___construct_options_libmysql.phpt index 99754c9058307..1838336050a36 100644 --- a/ext/pdo_mysql/tests/pdo_mysql___construct_options_libmysql.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql___construct_options_libmysql.phpt @@ -6,7 +6,7 @@ require_once(__DIR__ . DIRECTORY_SEPARATOR . 'skipif.inc'); require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); MySQLPDOTest::skip(); if (MySQLPDOTest::isPDOMySQLnd()) - die("skip libmysql only options") + die("skip libmysql only options") ?> --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- diff --git a/ext/pdo_mysql/tests/pdo_mysql_commit.phpt b/ext/pdo_mysql/tests/pdo_mysql_commit.phpt index 9dec5700b6dd3..506be6475f35c 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_commit.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_commit.phpt @@ -7,7 +7,7 @@ require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); MySQLPDOTest::skip(); $db = MySQLPDOTest::factory(); if (false == MySQLPDOTest::detect_transactional_mysql_engine($db)) - die("skip Transactional engine not found"); + die("skip Transactional engine not found"); ?> --FILE-- query('SELECT USER() as _user'); $row = $stmt->fetch(PDO::FETCH_ASSOC); $tmp = explode('@', $row['_user']); if (count($tmp) < 2) - die("skip Cannot detect if test is run against local or remote database server"); + die("skip Cannot detect if test is run against local or remote database server"); if (($tmp[1] !== 'localhost') && ($tmp[1] !== '127.0.0.1')) - die("skip Test cannot be run against remote database server"); + die("skip Test cannot be run against remote database server"); $stmt = $db->query("SHOW VARIABLES LIKE 'secure_file_priv'"); if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) && ($row['value'] != '')) { - if (!is_writable($row['value'])) - die("skip secure_file_priv directory not writable: {$row['value']}"); + if (!is_writable($row['value'])) + die("skip secure_file_priv directory not writable: {$row['value']}"); - $filename = $row['value'] . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv"; + $filename = $row['value'] . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv"; - if (file_exists($filename) && !is_writable($filename)) - die("skip {$filename} not writable"); + if (file_exists($filename) && !is_writable($filename)) + die("skip {$filename} not writable"); } ?> diff --git a/ext/pdo_mysql/tests/pdo_mysql_get_attribute.phpt b/ext/pdo_mysql/tests/pdo_mysql_get_attribute.phpt index 386dfb1e1eb44..80c6a23db8239 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_get_attribute.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_get_attribute.phpt @@ -7,7 +7,7 @@ require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); MySQLPDOTest::skip(); $db = MySQLPDOTest::factory(); if (false == MySQLPDOTest::detect_transactional_mysql_engine($db)) - die("skip Transactional engine not found"); + die("skip Transactional engine not found"); ?> --FILE-- --FILE-- --FILE-- --FILE-- query('SELECT VERSION() as _version')->fetch(PDO::FETCH_ASSOC); $matches = array(); if (!preg_match('/^(\d+)\.(\d+)\.(\d+)/ismU', $row['_version'], $matches)) - die(sprintf("skip Cannot determine MySQL Server version\n")); + die(sprintf("skip Cannot determine MySQL Server version\n")); $version = $matches[1] * 10000 + $matches[2] * 100 + $matches[3]; if ($version < 50000) - die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n", - $matches[1], $matches[2], $matches[3], $version)); + die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n", + $matches[1], $matches[2], $matches[3], $version)); if (!MySQLPDOTest::isPDOMySQLnd()) - die("skip This will not work with libmysql"); + die("skip This will not work with libmysql"); ?> --FILE-- query('SELECT USER() as _user'); $row = $stmt->fetch(PDO::FETCH_ASSOC); $tmp = explode('@', $row['_user']); if (count($tmp) < 2) - die("skip Cannot detect if test is run against local or remote database server"); + die("skip Cannot detect if test is run against local or remote database server"); if (($tmp[1] !== 'localhost') && ($tmp[1] !== '127.0.0.1')) - die("skip Test cannot be run against remote database server"); + die("skip Test cannot be run against remote database server"); $stmt = $db->query("SHOW VARIABLES LIKE 'secure_file_priv'"); if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) && ($row['value'] != '')) { diff --git a/ext/pdo_mysql/tests/pdo_mysql_rollback.phpt b/ext/pdo_mysql/tests/pdo_mysql_rollback.phpt index 96e77a1326af6..d27aefc6be46a 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_rollback.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_rollback.phpt @@ -7,7 +7,7 @@ require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); MySQLPDOTest::skip(); $db = MySQLPDOTest::factory(); if (false == MySQLPDOTest::detect_transactional_mysql_engine($db)) - die("skip Transactional engine not found"); + die("skip Transactional engine not found"); ?> --FILE-- diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_fetchobject.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_fetchobject.phpt index 31ee2a3e07341..8e9e60b99e3a6 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_fetchobject.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_fetchobject.phpt @@ -8,14 +8,14 @@ MySQLPDOTest::skip(); $db = MySQLPDOTest::factory(); try { - $query = "SELECT '', NULL, \"\" FROM DUAL"; - $stmt = $db->prepare($query); - $ok = @$stmt->execute(); + $query = "SELECT '', NULL, \"\" FROM DUAL"; + $stmt = $db->prepare($query); + $ok = @$stmt->execute(); } catch (PDOException $e) { - die("skip: Test cannot be run with SQL mode ANSI"); + die("skip: Test cannot be run with SQL mode ANSI"); } if (!$ok) - die("skip: Test cannot be run with SQL mode ANSI"); + die("skip: Test cannot be run with SQL mode ANSI"); ?> --FILE-- query('SELECT VERSION() as _version'); $row = $stmt->fetch(PDO::FETCH_ASSOC); $version = ((int)substr($row['_version'], 0, 1) * 10) + (int)substr($row['_version'], 2, 1); if ($version < 51) - die("skip Test needs MySQL 5.1+"); + die("skip Test needs MySQL 5.1+"); ?> --FILE-- query('SELECT VERSION() as _version')->fetch(PDO::FETCH_ASSOC); $matches = array(); if (!preg_match('/^(\d+)\.(\d+)\.(\d+)/ismU', $row['_version'], $matches)) - die(sprintf("skip Cannot determine MySQL Server version\n")); + die(sprintf("skip Cannot determine MySQL Server version\n")); $version = $matches[1] * 10000 + $matches[2] * 100 + $matches[3]; if ($version < 50000) - die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n", - $matches[1], $matches[2], $matches[3], $version)); + die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n", + $matches[1], $matches[2], $matches[3], $version)); if (!MySQLPDOTest::isPDOMySQLnd()) - die("skip This will not work with libmysql"); + die("skip This will not work with libmysql"); ?> --FILE-- --FILE-- query('SELECT VERSION() as _version')->fetch(PDO::FETCH_ASSOC); $matches = array(); if (!preg_match('/^(\d+)\.(\d+)\.(\d+)/ismU', $row['_version'], $matches)) - die(sprintf("skip Cannot determine MySQL Server version\n")); + die(sprintf("skip Cannot determine MySQL Server version\n")); $version = $matches[1] * 10000 + $matches[2] * 100 + $matches[3]; if ($version < 50000) - die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n", - $matches[1], $matches[2], $matches[3], $version)); + die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n", + $matches[1], $matches[2], $matches[3], $version)); ?> --FILE-- exec("DROP USER IF EXISTS $user"); - $db->exec("CREATE USER $user WITH PASSWORD '$pass'"); + $db->exec("DROP USER IF EXISTS $user"); + $db->exec("CREATE USER $user WITH PASSWORD '$pass'"); } catch (PDOException $e) { - die("skip You need CREATEUSER permissions to run the test"); + die("skip You need CREATEUSER permissions to run the test"); } // Peer authentication might prevent the test from properly running try { - $testConn = new PDO($dsn, $user, $pass); + $testConn = new PDO($dsn, $user, $pass); } catch (PDOException $e) { - echo "skip ".$e->getMessage(); + echo "skip ".$e->getMessage(); } $db->exec("DROP USER $user"); diff --git a/ext/pdo_pgsql/tests/bug68199.phpt b/ext/pdo_pgsql/tests/bug68199.phpt index 0c79faeeb963a..25a200365a1a4 100644 --- a/ext/pdo_pgsql/tests/bug68199.phpt +++ b/ext/pdo_pgsql/tests/bug68199.phpt @@ -9,7 +9,7 @@ PDOTest::skip(); $db = PDOTest::factory(); if (version_compare($db->getAttribute(PDO::ATTR_SERVER_VERSION), '9.0.0') < 0) { - die("skip Requires 9.0+"); + die("skip Requires 9.0+"); } ?> diff --git a/ext/pdo_pgsql/tests/bug69362.phpt b/ext/pdo_pgsql/tests/bug69362.phpt index 1fd4e80e7d669..c1ed7e615f485 100644 --- a/ext/pdo_pgsql/tests/bug69362.phpt +++ b/ext/pdo_pgsql/tests/bug69362.phpt @@ -19,17 +19,17 @@ $pass = 'testpass'; // Assume that if we can't create or drop a user, this test needs to be skipped try { - $db->exec("DROP USER IF EXISTS $user"); - $db->exec("CREATE USER $user WITH PASSWORD '$pass'"); + $db->exec("DROP USER IF EXISTS $user"); + $db->exec("CREATE USER $user WITH PASSWORD '$pass'"); } catch (PDOException $e) { - die("skip You need CREATEUSER permissions to run the test"); + die("skip You need CREATEUSER permissions to run the test"); } // Peer authentication might prevent the test from properly running try { - $testConn = new PDO($dsn, $user, $pass); + $testConn = new PDO($dsn, $user, $pass); } catch (PDOException $e) { - echo "skip ".$e->getMessage(); + echo "skip ".$e->getMessage(); } $db->exec("DROP USER $user"); diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_open_flags.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_open_flags.phpt index 0023f9103158c..aca253f7b717a 100644 --- a/ext/pdo_sqlite/tests/pdo_sqlite_open_flags.phpt +++ b/ext/pdo_sqlite/tests/pdo_sqlite_open_flags.phpt @@ -20,7 +20,7 @@ var_dump($db->exec('CREATE TABLE test2 (id INT);')); --EXPECTF-- diff --git a/ext/phar/tests/024-opcache-win32.phpt b/ext/phar/tests/024-opcache-win32.phpt index b9d80929cc8b0..7887a24072325 100644 --- a/ext/phar/tests/024-opcache-win32.phpt +++ b/ext/phar/tests/024-opcache-win32.phpt @@ -5,8 +5,8 @@ Phar: phar:// include with Opcache --INI-- phar.require_hash=0 diff --git a/ext/phar/tests/bug77022.phpt b/ext/phar/tests/bug77022.phpt index c287bb339f09b..40d908f1eeb01 100644 --- a/ext/phar/tests/bug77022.phpt +++ b/ext/phar/tests/bug77022.phpt @@ -1,8 +1,8 @@ --TEST-- Phar: Bug #77022: PharData always creates new files with mode 0666 --SKIPIF-- - --FILE-- diff --git a/ext/phar/tests/bug79082.phpt b/ext/phar/tests/bug79082.phpt index 9ced140b28f91..512c4fb95c48c 100644 --- a/ext/phar/tests/bug79082.phpt +++ b/ext/phar/tests/bug79082.phpt @@ -1,8 +1,8 @@ --TEST-- Phar: Bug #79082: Files added to tar with Phar::buildFromIterator have all-access permissions --SKIPIF-- - --FILE-- diff --git a/ext/phar/tests/phar_buildfromdirectory2-win.phpt b/ext/phar/tests/phar_buildfromdirectory2-win.phpt index e67d03638805e..99d1ee7a060b3 100644 --- a/ext/phar/tests/phar_buildfromdirectory2-win.phpt +++ b/ext/phar/tests/phar_buildfromdirectory2-win.phpt @@ -2,8 +2,8 @@ Phar::buildFromDirectory() - non-directory passed as first parameter --SKIPIF-- --INI-- phar.require_hash=0 diff --git a/ext/phar/tests/phar_buildfromdirectory2.phpt b/ext/phar/tests/phar_buildfromdirectory2.phpt index d02d6146d64cb..0d25a60afad5e 100644 --- a/ext/phar/tests/phar_buildfromdirectory2.phpt +++ b/ext/phar/tests/phar_buildfromdirectory2.phpt @@ -2,8 +2,8 @@ Phar::buildFromDirectory() - non-directory passed as first parameter --SKIPIF-- --INI-- phar.require_hash=0 diff --git a/ext/posix/tests/posix_ctermid.phpt b/ext/posix/tests/posix_ctermid.phpt index 1d277659c49ec..b6e064801439f 100644 --- a/ext/posix/tests/posix_ctermid.phpt +++ b/ext/posix/tests/posix_ctermid.phpt @@ -8,7 +8,7 @@ Falko Menge, mail at falko-menge dot de PHP Testfest Berlin 2009-05-10 --SKIPIF-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- diff --git a/ext/posix/tests/posix_getpgrp_basic.phpt b/ext/posix/tests/posix_getpgrp_basic.phpt index ceb78bb700bfc..84da54d56307d 100644 --- a/ext/posix/tests/posix_getpgrp_basic.phpt +++ b/ext/posix/tests/posix_getpgrp_basic.phpt @@ -2,7 +2,7 @@ Test posix_getpgrp() function : basic functionality --SKIPIF-- --FILE-- --FILE-- --FILE-- User Group: PHPSP #phptestfestbrasil --SKIPIF-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- diff --git a/ext/posix/tests/posix_kill_error.phpt b/ext/posix/tests/posix_kill_error.phpt index e378fa241f8ff..9f0ca0b158a50 100644 --- a/ext/posix/tests/posix_kill_error.phpt +++ b/ext/posix/tests/posix_kill_error.phpt @@ -2,7 +2,7 @@ Test posix_kill() function : error conditions --SKIPIF-- --FILE-- --FILE-- diff --git a/ext/posix/tests/posix_times_basic.phpt b/ext/posix/tests/posix_times_basic.phpt index 49da6b8aebd05..fd06320b0c2b4 100644 --- a/ext/posix/tests/posix_times_basic.phpt +++ b/ext/posix/tests/posix_times_basic.phpt @@ -2,7 +2,7 @@ Test posix_times() function : basic functionality --SKIPIF-- --FILE-- diff --git a/ext/posix/tests/posix_ttyname_error_wrongparams.phpt b/ext/posix/tests/posix_ttyname_error_wrongparams.phpt index 98488f68d19fc..9d070d8ec313d 100644 --- a/ext/posix/tests/posix_ttyname_error_wrongparams.phpt +++ b/ext/posix/tests/posix_ttyname_error_wrongparams.phpt @@ -9,10 +9,10 @@ Falko Menge, mail at falko-menge dot de PHP Testfest Berlin 2009-05-10 --SKIPIF-- diff --git a/ext/posix/tests/posix_uname_basic.phpt b/ext/posix/tests/posix_uname_basic.phpt index 49c2cf5609184..4133b745a4493 100644 --- a/ext/posix/tests/posix_uname_basic.phpt +++ b/ext/posix/tests/posix_uname_basic.phpt @@ -2,7 +2,7 @@ Test posix_uname() function : basic functionality --SKIPIF-- --FILE-- --FILE-- diff --git a/ext/readline/tests/libedit_info_001-win32.phpt b/ext/readline/tests/libedit_info_001-win32.phpt index d14c7a2f46265..3a558b11eb662 100644 --- a/ext/readline/tests/libedit_info_001-win32.phpt +++ b/ext/readline/tests/libedit_info_001-win32.phpt @@ -4,7 +4,7 @@ readline_info(): Basic test --FILE-- diff --git a/ext/readline/tests/libedit_info_001.phpt b/ext/readline/tests/libedit_info_001.phpt index 4c77e7a97c0c3..46618120fba8a 100644 --- a/ext/readline/tests/libedit_info_001.phpt +++ b/ext/readline/tests/libedit_info_001.phpt @@ -4,7 +4,7 @@ readline_info(): Basic test --FILE-- diff --git a/ext/readline/tests/libedit_write_history_001-win32.phpt b/ext/readline/tests/libedit_write_history_001-win32.phpt index 28af4cbfddc53..6cc94bd1294f5 100644 --- a/ext/readline/tests/libedit_write_history_001-win32.phpt +++ b/ext/readline/tests/libedit_write_history_001-win32.phpt @@ -4,7 +4,7 @@ readline_write_history(): Basic test --FILE-- diff --git a/ext/readline/tests/libedit_write_history_001.phpt b/ext/readline/tests/libedit_write_history_001.phpt index 14c3282e6d173..96424e232f6b9 100644 --- a/ext/readline/tests/libedit_write_history_001.phpt +++ b/ext/readline/tests/libedit_write_history_001.phpt @@ -4,7 +4,7 @@ readline_write_history(): Basic test --FILE-- diff --git a/ext/reflection/tests/ReflectionClass_getStaticPropertyValue_001.phpt b/ext/reflection/tests/ReflectionClass_getStaticPropertyValue_001.phpt index 8a1951062ff29..e4546bdb78fbe 100644 --- a/ext/reflection/tests/ReflectionClass_getStaticPropertyValue_001.phpt +++ b/ext/reflection/tests/ReflectionClass_getStaticPropertyValue_001.phpt @@ -33,14 +33,14 @@ var_dump($rcB->getStaticPropertyValue("publicOverridden")); echo "\nRetrieving non-existent values from A with no default value:\n"; try { - var_dump($rcA->getStaticPropertyValue("protectedDoesNotExist")); + var_dump($rcA->getStaticPropertyValue("protectedDoesNotExist")); echo "you should not see this"; } catch (Exception $e) { echo $e->getMessage() . "\n"; } try { - var_dump($rcA->getStaticPropertyValue("privateDoesNotExist")); + var_dump($rcA->getStaticPropertyValue("privateDoesNotExist")); echo "you should not see this"; } catch (Exception $e) { echo $e->getMessage() . "\n"; diff --git a/ext/reflection/tests/ReflectionClass_setStaticPropertyValue_001.phpt b/ext/reflection/tests/ReflectionClass_setStaticPropertyValue_001.phpt index 1414cfadb7a3a..2c855a0436747 100644 --- a/ext/reflection/tests/ReflectionClass_setStaticPropertyValue_001.phpt +++ b/ext/reflection/tests/ReflectionClass_setStaticPropertyValue_001.phpt @@ -35,14 +35,14 @@ print_r($rcB->getStaticProperties()); echo "\nSet non-existent values from A with no default value:\n"; try { - var_dump($rcA->setStaticPropertyValue("protectedDoesNotExist", "new value 8")); + var_dump($rcA->setStaticPropertyValue("protectedDoesNotExist", "new value 8")); echo "you should not see this"; } catch (Exception $e) { echo $e->getMessage() . "\n"; } try { - var_dump($rcA->setStaticPropertyValue("privateDoesNotExist", "new value 9")); + var_dump($rcA->setStaticPropertyValue("privateDoesNotExist", "new value 9")); echo "you should not see this"; } catch (Exception $e) { echo $e->getMessage() . "\n"; diff --git a/ext/session/tests/bug42596.phpt b/ext/session/tests/bug42596.phpt index 094bd31bcfd59..f27e86387e4fa 100644 --- a/ext/session/tests/bug42596.phpt +++ b/ext/session/tests/bug42596.phpt @@ -2,8 +2,8 @@ Bug #42596 (session.save_path MODE option will not set "write" bit for group or world) --SKIPIF-- --INI-- session.use_cookies=0 diff --git a/ext/session/tests/session_save_path_variation5.phpt b/ext/session/tests/session_save_path_variation5.phpt index 5388f82f45b7a..446a472ab4690 100644 --- a/ext/session/tests/session_save_path_variation5.phpt +++ b/ext/session/tests/session_save_path_variation5.phpt @@ -3,7 +3,7 @@ Test session_save_path() function : variation --SKIPIF-- --INI-- session.save_handler=files diff --git a/ext/shmop/tests/001.phpt b/ext/shmop/tests/001.phpt index 4cac82d2f0c8b..a0f85922eef8d 100644 --- a/ext/shmop/tests/001.phpt +++ b/ext/shmop/tests/001.phpt @@ -2,9 +2,9 @@ shmop extension test --SKIPIF-- --FILE-- --SKIPIF-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- diff --git a/ext/skeleton/tests/002.phpt b/ext/skeleton/tests/002.phpt index dcbdd8f2b28b1..6b42a28db3d6e 100644 --- a/ext/skeleton/tests/002.phpt +++ b/ext/skeleton/tests/002.phpt @@ -3,7 +3,7 @@ test1() Basic test --SKIPIF-- --FILE-- diff --git a/ext/skeleton/tests/003.phpt b/ext/skeleton/tests/003.phpt index 84c9fe160204a..0aca2155b5548 100644 --- a/ext/skeleton/tests/003.phpt +++ b/ext/skeleton/tests/003.phpt @@ -3,7 +3,7 @@ --SKIPIF-- --FILE-- diff --git a/ext/snmp/tests/bug64124.phpt b/ext/snmp/tests/bug64124.phpt index 9dac2c9e1bba4..5ad75353db86b 100644 --- a/ext/snmp/tests/bug64124.phpt +++ b/ext/snmp/tests/bug64124.phpt @@ -8,7 +8,7 @@ require_once(__DIR__.'/skipif.inc'); $packed = str_repeat(chr(0), 15) . chr(1); if (@inet_ntop($packed) === false) { - die("skip no IPv6 support"); + die("skip no IPv6 support"); } ?> --FILE-- diff --git a/ext/snmp/tests/ipv6.phpt b/ext/snmp/tests/ipv6.phpt index 38bf7ffcb60c4..a4ae028e42e9b 100644 --- a/ext/snmp/tests/ipv6.phpt +++ b/ext/snmp/tests/ipv6.phpt @@ -8,7 +8,7 @@ require_once(__DIR__.'/skipif.inc'); $packed = str_repeat(chr(0), 15) . chr(1); if (@inet_ntop($packed) === false) { - die("skip no IPv6 support"); + die("skip no IPv6 support"); } ?> --FILE-- diff --git a/ext/soap/tests/bug73037.phpt b/ext/soap/tests/bug73037.phpt index d835f2a2805f7..4e7293286244e 100644 --- a/ext/soap/tests/bug73037.phpt +++ b/ext/soap/tests/bug73037.phpt @@ -4,14 +4,14 @@ Bug #73037 SoapServer reports Bad Request when gzipped, var 0 server --SKIPIF-- --FILE-- --FILE-- --CONFLICTS-- server diff --git a/ext/soap/tests/schema/schema064.phpt b/ext/soap/tests/schema/schema064.phpt index 88f58cf8cec35..b52a0519f6374 100644 --- a/ext/soap/tests/schema/schema064.phpt +++ b/ext/soap/tests/schema/schema064.phpt @@ -3,7 +3,7 @@ SOAP XML Schema 64: standard date/time types --SKIPIF-- --FILE-- diff --git a/ext/soap/tests/server009.phpt b/ext/soap/tests/server009.phpt index 28d195a3ce401..c8367f1b624fb 100644 --- a/ext/soap/tests/server009.phpt +++ b/ext/soap/tests/server009.phpt @@ -2,10 +2,10 @@ SOAP Server 9: setclass and setpersistence(SOAP_PERSISTENCE_SESSION) --SKIPIF-- --INI-- session.auto_start=1 diff --git a/ext/soap/tests/server019.phpt b/ext/soap/tests/server019.phpt index 132b4dc1a5044..7838a824bc325 100644 --- a/ext/soap/tests/server019.phpt +++ b/ext/soap/tests/server019.phpt @@ -2,9 +2,9 @@ SOAP Server 19: compressed request (gzip) --SKIPIF-- --INI-- precision=14 diff --git a/ext/soap/tests/server020.phpt b/ext/soap/tests/server020.phpt index 69eb4f097b57a..c98517edeac5a 100644 --- a/ext/soap/tests/server020.phpt +++ b/ext/soap/tests/server020.phpt @@ -2,9 +2,9 @@ SOAP Server 20: compressed request (deflate) --SKIPIF-- --INI-- precision=14 diff --git a/ext/soap/tests/server029.phpt b/ext/soap/tests/server029.phpt index f5b28699a53da..7a75a2fec3d55 100644 --- a/ext/soap/tests/server029.phpt +++ b/ext/soap/tests/server029.phpt @@ -14,8 +14,8 @@ SOAP Server 29-CGI: new/addfunction/handle --SKIPIF-- --FILE-- --FILE-- --FILE-- '224.0.0.23', - "interface" => 'lo', + "group" => '224.0.0.23', + "interface" => 'lo', )); if ($so === false) { die('skip interface \'lo\' is unavailable.'); diff --git a/ext/sockets/tests/mcast_ipv4_send.phpt b/ext/sockets/tests/mcast_ipv4_send.phpt index e1e88aca416fe..027c07f1b8158 100644 --- a/ext/sockets/tests/mcast_ipv4_send.phpt +++ b/ext/sockets/tests/mcast_ipv4_send.phpt @@ -7,7 +7,7 @@ if (!extension_loaded('sockets')) { } $s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP) or die("err"); if (socket_set_option($s, IPPROTO_IP, IP_MULTICAST_IF, 1) === false) { - die("skip interface 1 either doesn't exist or has no ipv4 address"); + die("skip interface 1 either doesn't exist or has no ipv4 address"); } --FILE-- 'ff01::114', - "interface" => 0, + "group" => 'ff01::114', + "interface" => 0, )); if ($so === false) { die('skip unable to join multicast group on any interface.'); } $r = socket_sendto($s, $m = "testing packet", strlen($m), 0, 'ff01::114', 3000); if ($r === false) { - die('skip unable to send multicast packet.'); + die('skip unable to send multicast packet.'); } if (!defined("MCAST_JOIN_SOURCE_GROUP")) die('skip source operations are unavailable'); $so = @socket_set_option($s, IPPROTO_IPV6, MCAST_LEAVE_GROUP, array( - "group" => 'ff01::114', - "interface" => 0, + "group" => 'ff01::114', + "interface" => 0, )); $so = @socket_set_option($s, IPPROTO_IPV6, MCAST_JOIN_SOURCE_GROUP, array( - "group" => 'ff01::114', - "interface" => 0, - "source" => '2001::dead:beef', + "group" => 'ff01::114', + "interface" => 0, + "source" => '2001::dead:beef', )); if ($so === false) { die('skip protocol independent multicast API is unavailable.'); diff --git a/ext/sockets/tests/mcast_ipv6_recv_limited.phpt b/ext/sockets/tests/mcast_ipv6_recv_limited.phpt index 9bf0bbf91492a..247c41b19d577 100644 --- a/ext/sockets/tests/mcast_ipv6_recv_limited.phpt +++ b/ext/sockets/tests/mcast_ipv6_recv_limited.phpt @@ -6,7 +6,7 @@ if (!extension_loaded('sockets')) { die('skip sockets extension not available.'); } if (!defined('IPPROTO_IPV6')) { - die('skip IPv6 not available.'); + die('skip IPv6 not available.'); } $s = socket_create(AF_INET6, SOCK_DGRAM, SOL_UDP); $br = socket_bind($s, '::', 3000); @@ -14,29 +14,29 @@ $br = socket_bind($s, '::', 3000); * troublesome to send multicast traffic from lo, which we must since * we're dealing with interface-local traffic... */ $so = @socket_set_option($s, IPPROTO_IPV6, MCAST_JOIN_GROUP, array( - "group" => 'ff01::114', - "interface" => 0, + "group" => 'ff01::114', + "interface" => 0, )); if ($so === false) { die('skip unable to join multicast group on any interface.'); } $r = socket_sendto($s, $m = "testing packet", strlen($m), 0, 'ff01::114', 3000); if ($r === false) { - die('skip unable to send multicast packet.'); + die('skip unable to send multicast packet.'); } $so = @socket_set_option($s, IPPROTO_IPV6, MCAST_LEAVE_GROUP, array( - "group" => 'ff01::114', - "interface" => 0, + "group" => 'ff01::114', + "interface" => 0, )); if (defined("MCAST_JOIN_SOURCE_GROUP")) { - $so = @socket_set_option($s, IPPROTO_IPV6, MCAST_JOIN_SOURCE_GROUP, array( - "group" => 'ff01::114', - "interface" => 0, - "source" => '2001::dead:beef', - )); - if ($so !== false) { - die('skip protocol independent multicast API is available.'); - } + $so = @socket_set_option($s, IPPROTO_IPV6, MCAST_JOIN_SOURCE_GROUP, array( + "group" => 'ff01::114', + "interface" => 0, + "source" => '2001::dead:beef', + )); + if ($so !== false) { + die('skip protocol independent multicast API is available.'); + } } --FILE-- --FILE-- diff --git a/ext/sockets/tests/socket_abstract_path_sendmsg.phpt b/ext/sockets/tests/socket_abstract_path_sendmsg.phpt index ca9ab3f5348b0..796b406e26e69 100644 --- a/ext/sockets/tests/socket_abstract_path_sendmsg.phpt +++ b/ext/sockets/tests/socket_abstract_path_sendmsg.phpt @@ -3,10 +3,10 @@ Support for paths in the abstract namespace (bind, sendmsg, recvmsg) --SKIPIF-- --FILE-- diff --git a/ext/sockets/tests/socket_clear_error-win32.phpt b/ext/sockets/tests/socket_clear_error-win32.phpt index 3a0b1ea162a7a..c875cfd2e80fa 100644 --- a/ext/sockets/tests/socket_clear_error-win32.phpt +++ b/ext/sockets/tests/socket_clear_error-win32.phpt @@ -8,7 +8,7 @@ if (!extension_loaded('sockets')) { die('SKIP sockets extension not available.'); } if(substr(PHP_OS, 0, 3) != 'WIN' ) { - die('skip windows only test'); + die('skip windows only test'); } ?> --FILE-- diff --git a/ext/sockets/tests/socket_clear_error.phpt b/ext/sockets/tests/socket_clear_error.phpt index 273f7a0ca8d4e..9ea770954d539 100644 --- a/ext/sockets/tests/socket_clear_error.phpt +++ b/ext/sockets/tests/socket_clear_error.phpt @@ -8,7 +8,7 @@ if (!extension_loaded('sockets')) { die('SKIP sockets extension not available.'); } if(substr(PHP_OS, 0, 3) == 'WIN' ) { - die('skip windows only test'); + die('skip windows only test'); } ?> --FILE-- diff --git a/ext/sockets/tests/socket_create_listen-win32.phpt b/ext/sockets/tests/socket_create_listen-win32.phpt index 89d8dde0b2b83..73cc857617c9e 100644 --- a/ext/sockets/tests/socket_create_listen-win32.phpt +++ b/ext/sockets/tests/socket_create_listen-win32.phpt @@ -3,7 +3,7 @@ Test if socket binds on 31338 --SKIPIF-- '224.0.0.23', - "interface" => "lo", + "group" => '224.0.0.23', + "interface" => "lo", )); if ($so === false) - die("SKIP joining group 224.0.0.23 on interface lo failed"); + die("SKIP joining group 224.0.0.23 on interface lo failed"); --FILE-- --INI-- report_memleaks=0 diff --git a/ext/sockets/tests/socket_getpeername_ipv6loop.phpt b/ext/sockets/tests/socket_getpeername_ipv6loop.phpt index 3dab562bbbf66..c5f61ec5470aa 100644 --- a/ext/sockets/tests/socket_getpeername_ipv6loop.phpt +++ b/ext/sockets/tests/socket_getpeername_ipv6loop.phpt @@ -6,7 +6,7 @@ Tatjana Andersen tatjana.andersen@redpill-linpro.com --SKIPIF-- diff --git a/ext/sockets/tests/socket_import_stream-1.phpt b/ext/sockets/tests/socket_import_stream-1.phpt index 9931535721a33..a89ccf807e272 100644 --- a/ext/sockets/tests/socket_import_stream-1.phpt +++ b/ext/sockets/tests/socket_import_stream-1.phpt @@ -3,7 +3,7 @@ socket_import_stream: Basic test --SKIPIF-- '224.0.0.23', - "interface" => "lo", + "group" => '224.0.0.23', + "interface" => "lo", )); if ($so === false) - die("SKIP joining group 224.0.0.23 on interface lo failed"); + die("SKIP joining group 224.0.0.23 on interface lo failed"); --FILE-- --INI-- report_memleaks=0 diff --git a/ext/sockets/tests/socket_listen-wrongparams.phpt b/ext/sockets/tests/socket_listen-wrongparams.phpt index 5262d5e4b3340..c7c066b5edc0d 100644 --- a/ext/sockets/tests/socket_listen-wrongparams.phpt +++ b/ext/sockets/tests/socket_listen-wrongparams.phpt @@ -3,7 +3,7 @@ Test parameter handling in socket_listen(). --SKIPIF-- diff --git a/ext/sockets/tests/socket_sentto_recvfrom_unix.phpt b/ext/sockets/tests/socket_sentto_recvfrom_unix.phpt index 6e063c5b52018..a355a2486411f 100644 --- a/ext/sockets/tests/socket_sentto_recvfrom_unix.phpt +++ b/ext/sockets/tests/socket_sentto_recvfrom_unix.phpt @@ -3,7 +3,7 @@ Test if socket_recvfrom() receives data sent by socket_sendto() through a Unix d --SKIPIF-- --FILE-- diff --git a/ext/sockets/tests/socket_shutdown-win32.phpt b/ext/sockets/tests/socket_shutdown-win32.phpt index aced74b7f8ec3..cc16c3a215871 100644 --- a/ext/sockets/tests/socket_shutdown-win32.phpt +++ b/ext/sockets/tests/socket_shutdown-win32.phpt @@ -8,7 +8,7 @@ if (!extension_loaded('sockets')) { die('SKIP sockets extension not available.'); } if(substr(PHP_OS, 0, 3) != 'WIN' ) { - die('skip windows only test'); + die('skip windows only test'); } ?> --FILE-- diff --git a/ext/sockets/tests/socket_shutdown.phpt b/ext/sockets/tests/socket_shutdown.phpt index 3dc62bc270731..7c12b616c1669 100644 --- a/ext/sockets/tests/socket_shutdown.phpt +++ b/ext/sockets/tests/socket_shutdown.phpt @@ -9,7 +9,7 @@ if (!extension_loaded('sockets')) { die('SKIP sockets extension not available.'); } if(substr(PHP_OS, 0, 3) == 'WIN' ) { - die('skip not for windows'); + die('skip not for windows'); } ?> --FILE-- diff --git a/ext/sockets/tests/unixloop.phpt b/ext/sockets/tests/unixloop.phpt index 31740c97c66e6..c3b80ff588e62 100644 --- a/ext/sockets/tests/unixloop.phpt +++ b/ext/sockets/tests/unixloop.phpt @@ -3,11 +3,11 @@ Unix domain socket Loopback test --SKIPIF-- --FILE-- --FILE-- diff --git a/ext/spl/tests/bug65006.phpt b/ext/spl/tests/bug65006.phpt index 1393936c5a1a7..954811a784898 100644 --- a/ext/spl/tests/bug65006.phpt +++ b/ext/spl/tests/bug65006.phpt @@ -4,17 +4,17 @@ Bug #65006: spl_autoload_register fails with multiple callables using self, same --FILE-- diff --git a/ext/sqlite3/tests/sqlite3_15_open_error-win.phpt b/ext/sqlite3/tests/sqlite3_15_open_error-win.phpt index 4b75b3b28f02c..4bdb9fade4b15 100644 --- a/ext/sqlite3/tests/sqlite3_15_open_error-win.phpt +++ b/ext/sqlite3/tests/sqlite3_15_open_error-win.phpt @@ -3,7 +3,7 @@ SQLite3::open error test --SKIPIF-- diff --git a/ext/sqlite3/tests/sqlite3_15_open_error.phpt b/ext/sqlite3/tests/sqlite3_15_open_error.phpt index 817affa78461a..219cb6051a954 100644 --- a/ext/sqlite3/tests/sqlite3_15_open_error.phpt +++ b/ext/sqlite3/tests/sqlite3_15_open_error.phpt @@ -3,7 +3,7 @@ SQLite3::open error test --SKIPIF-- hasMethod("loadExtension")) { - die("skip - sqlite3 doesn't have loadExtension enabled"); + die("skip - sqlite3 doesn't have loadExtension enabled"); } ?> --INI-- diff --git a/ext/sqlite3/tests/sqlite3_33_load_extension_param.phpt b/ext/sqlite3/tests/sqlite3_33_load_extension_param.phpt index ab5d3fc99a8de..d8f59a5edb1b9 100644 --- a/ext/sqlite3/tests/sqlite3_33_load_extension_param.phpt +++ b/ext/sqlite3/tests/sqlite3_33_load_extension_param.phpt @@ -10,7 +10,7 @@ sqlite3.extension_dir="{TMP}" require_once(__DIR__ . '/skipif.inc'); if (!method_exists('SQLite3', 'loadExtension')) { - die("skip if SQLITE_OMIT_LOAD_EXTENSION defined"); + die("skip if SQLITE_OMIT_LOAD_EXTENSION defined"); } ?> --FILE-- diff --git a/ext/sqlite3/tests/sqlite3_34_load_extension_ext_dir.phpt b/ext/sqlite3/tests/sqlite3_34_load_extension_ext_dir.phpt index f04df7750b2a4..7b0d5fea531fc 100644 --- a/ext/sqlite3/tests/sqlite3_34_load_extension_ext_dir.phpt +++ b/ext/sqlite3/tests/sqlite3_34_load_extension_ext_dir.phpt @@ -8,7 +8,7 @@ Jelle Lampaert require_once(__DIR__ . '/skipif.inc'); if (!method_exists('SQLite3', 'loadExtension')) { - die("skip if SQLITE_OMIT_LOAD_EXTENSION defined"); + die("skip if SQLITE_OMIT_LOAD_EXTENSION defined"); } ?> --FILE-- diff --git a/ext/sqlite3/tests/sqlite3_defensive.phpt b/ext/sqlite3/tests/sqlite3_defensive.phpt index 064d87b50a054..c8826af24f1cb 100644 --- a/ext/sqlite3/tests/sqlite3_defensive.phpt +++ b/ext/sqlite3/tests/sqlite3_defensive.phpt @@ -4,7 +4,7 @@ SQLite3 defensive mode ini setting diff --git a/ext/sqlite3/tests/sqlite3stmt_getsql_expanded.phpt b/ext/sqlite3/tests/sqlite3stmt_getsql_expanded.phpt index 9a893c590d3a9..0b677c7378487 100644 --- a/ext/sqlite3/tests/sqlite3stmt_getsql_expanded.phpt +++ b/ext/sqlite3/tests/sqlite3stmt_getsql_expanded.phpt @@ -4,7 +4,7 @@ SQLite3Stmt::getSQL expanded test = 3.14'); + die('skip SQLite < 3.14 installed, requires SQLite >= 3.14'); } ?> --FILE-- diff --git a/ext/standard/tests/dir/opendir_variation5.phpt b/ext/standard/tests/dir/opendir_variation5.phpt index 59c8f072fa507..f6b2934474b83 100644 --- a/ext/standard/tests/dir/opendir_variation5.phpt +++ b/ext/standard/tests/dir/opendir_variation5.phpt @@ -3,7 +3,7 @@ Test opendir() function : usage variations - directories with restricted permiss --SKIPIF-- diff --git a/ext/standard/tests/dir/scandir_variation5.phpt b/ext/standard/tests/dir/scandir_variation5.phpt index da20b5289e6ae..7bee9f087a7f5 100644 --- a/ext/standard/tests/dir/scandir_variation5.phpt +++ b/ext/standard/tests/dir/scandir_variation5.phpt @@ -3,7 +3,7 @@ Test scandir() function : usage variations - different directory permissions --SKIPIF-- diff --git a/ext/standard/tests/file/bug41874_1.phpt b/ext/standard/tests/file/bug41874_1.phpt index ed14d87a6777c..b7be9d068a13b 100644 --- a/ext/standard/tests/file/bug41874_1.phpt +++ b/ext/standard/tests/file/bug41874_1.phpt @@ -5,7 +5,7 @@ Venkat Raman Don --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/file/bug41874_2.phpt b/ext/standard/tests/file/bug41874_2.phpt index 012fc01a3d206..f08e22fb02fd2 100644 --- a/ext/standard/tests/file/bug41874_2.phpt +++ b/ext/standard/tests/file/bug41874_2.phpt @@ -5,7 +5,7 @@ Venkat Raman Don --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/file/bug41874_3.phpt b/ext/standard/tests/file/bug41874_3.phpt index 01bd7dc60690f..6ecfb8f5d52a7 100644 --- a/ext/standard/tests/file/bug41874_3.phpt +++ b/ext/standard/tests/file/bug41874_3.phpt @@ -5,7 +5,7 @@ Venkat Raman Don --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/file/bug47517.phpt b/ext/standard/tests/file/bug47517.phpt index 4eaf9a132c674..22a2dc0c5f6a7 100644 --- a/ext/standard/tests/file/bug47517.phpt +++ b/ext/standard/tests/file/bug47517.phpt @@ -7,7 +7,7 @@ if (substr(PHP_OS, 0, 3) != 'WIN') { } exec('net session 2>&1', $out, $status); if (!$status) { - die('skip test runs under an elevated user account'); + die('skip test runs under an elevated user account'); } ?> --FILE-- diff --git a/ext/standard/tests/file/bug47767.phpt b/ext/standard/tests/file/bug47767.phpt index a7c4f02e78f18..0ef3eb2091940 100644 --- a/ext/standard/tests/file/bug47767.phpt +++ b/ext/standard/tests/file/bug47767.phpt @@ -5,7 +5,7 @@ Venkat Raman Don --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/file/chroot_001.phpt b/ext/standard/tests/file/chroot_001.phpt index 7fda0b3654bae..a8bca2e04bde7 100644 --- a/ext/standard/tests/file/chroot_001.phpt +++ b/ext/standard/tests/file/chroot_001.phpt @@ -4,11 +4,11 @@ chroot() --FILE-- diff --git a/ext/standard/tests/file/file_get_contents_error001.phpt b/ext/standard/tests/file/file_get_contents_error001.phpt index 0bbce038e6ba4..f2803e9189ed6 100644 --- a/ext/standard/tests/file/file_get_contents_error001.phpt +++ b/ext/standard/tests/file/file_get_contents_error001.phpt @@ -7,7 +7,7 @@ file_get_contents() test using offset parameter out of range display_errors=false --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/file/fopen_variation11-win32.phpt b/ext/standard/tests/file/fopen_variation11-win32.phpt index e6201829b005a..22368812637bc 100644 --- a/ext/standard/tests/file/fopen_variation11-win32.phpt +++ b/ext/standard/tests/file/fopen_variation11-win32.phpt @@ -7,7 +7,7 @@ Dave Kelsey if(substr(PHP_OS, 0, 3) != "WIN") die("skip Run only on Windows"); if (!is_writable('c:\\')) { - die('skip. C:\\ not writable.'); + die('skip. C:\\ not writable.'); } ?> diff --git a/ext/standard/tests/file/fscanf_variation3.phpt b/ext/standard/tests/file/fscanf_variation3.phpt index 5226dba55a9aa..ae197b6f96fce 100644 --- a/ext/standard/tests/file/fscanf_variation3.phpt +++ b/ext/standard/tests/file/fscanf_variation3.phpt @@ -3,7 +3,7 @@ Test fscanf() function: usage variations - integer formats with float values --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/file/fscanf_variation33.phpt b/ext/standard/tests/file/fscanf_variation33.phpt index 1809a0d1e5d68..c008c759c9b39 100644 --- a/ext/standard/tests/file/fscanf_variation33.phpt +++ b/ext/standard/tests/file/fscanf_variation33.phpt @@ -3,7 +3,7 @@ Test fscanf() function: usage variations - hexa formats with integer values --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/file/fscanf_variation34.phpt b/ext/standard/tests/file/fscanf_variation34.phpt index ac202ab26e6cf..2dad3ace145fa 100644 --- a/ext/standard/tests/file/fscanf_variation34.phpt +++ b/ext/standard/tests/file/fscanf_variation34.phpt @@ -3,7 +3,7 @@ Test fscanf() function: usage variations - hexa formats with float values --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/file/fscanf_variation39.phpt b/ext/standard/tests/file/fscanf_variation39.phpt index 25a0b38706c89..f04d3b7e3165c 100644 --- a/ext/standard/tests/file/fscanf_variation39.phpt +++ b/ext/standard/tests/file/fscanf_variation39.phpt @@ -3,7 +3,7 @@ Test fscanf() function: usage variations - unsigned int formats with integer val --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/file/fscanf_variation40.phpt b/ext/standard/tests/file/fscanf_variation40.phpt index f13af1a26a5f4..4b12a8cf0a1e9 100644 --- a/ext/standard/tests/file/fscanf_variation40.phpt +++ b/ext/standard/tests/file/fscanf_variation40.phpt @@ -3,7 +3,7 @@ Test fscanf() function: usage variations - unsigned formats with float values --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/file/fscanf_variation55.phpt b/ext/standard/tests/file/fscanf_variation55.phpt index 3536d01b4200b..9b5eb967db75a 100644 --- a/ext/standard/tests/file/fscanf_variation55.phpt +++ b/ext/standard/tests/file/fscanf_variation55.phpt @@ -3,7 +3,7 @@ Test fscanf() function: usage variations - tracking file pointer while reading --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/file/fscanf_variation9.phpt b/ext/standard/tests/file/fscanf_variation9.phpt index eafa78cefd1a8..8b88a036f3baf 100644 --- a/ext/standard/tests/file/fscanf_variation9.phpt +++ b/ext/standard/tests/file/fscanf_variation9.phpt @@ -3,7 +3,7 @@ Test fscanf() function: usage variations - float formats with integer values --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/file/link_win32.phpt b/ext/standard/tests/file/link_win32.phpt index 2bba5469c723a..5aa3ce04fd8ca 100644 --- a/ext/standard/tests/file/link_win32.phpt +++ b/ext/standard/tests/file/link_win32.phpt @@ -5,7 +5,7 @@ Venkat Raman Don --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/file/mkdir-004.phpt b/ext/standard/tests/file/mkdir-004.phpt index 46db53108265a..7de0e45894d43 100644 --- a/ext/standard/tests/file/mkdir-004.phpt +++ b/ext/standard/tests/file/mkdir-004.phpt @@ -4,7 +4,7 @@ recursive mkdir() tests diff --git a/ext/standard/tests/file/mkdir-005.phpt b/ext/standard/tests/file/mkdir-005.phpt index 621c9922e553a..383f8b18e0527 100644 --- a/ext/standard/tests/file/mkdir-005.phpt +++ b/ext/standard/tests/file/mkdir-005.phpt @@ -4,7 +4,7 @@ recursive mkdir() tests diff --git a/ext/standard/tests/file/tempnam_variation3-win32.phpt b/ext/standard/tests/file/tempnam_variation3-win32.phpt index f47bb610c6cd6..86990f03416a4 100644 --- a/ext/standard/tests/file/tempnam_variation3-win32.phpt +++ b/ext/standard/tests/file/tempnam_variation3-win32.phpt @@ -3,7 +3,7 @@ Test tempnam() function: usage variations - obscure prefixes --SKIPIF-- --CONFLICTS-- obscure_filename diff --git a/ext/standard/tests/file/windows_links/bug48746_3.phpt b/ext/standard/tests/file/windows_links/bug48746_3.phpt index 09875f32c8cc7..8150e2c551006 100644 --- a/ext/standard/tests/file/windows_links/bug48746_3.phpt +++ b/ext/standard/tests/file/windows_links/bug48746_3.phpt @@ -5,12 +5,12 @@ Venkat Raman Don (don.raman@microsoft.com) --SKIPIF-- &1', $out); if (strpos($out[0], 'recognized')) { - die('skip. junction.exe not found in PATH.'); + die('skip. junction.exe not found in PATH.'); } ?> diff --git a/ext/standard/tests/file/windows_links/common.inc b/ext/standard/tests/file/windows_links/common.inc index b4a09e00c220c..c55aa5d01ad53 100644 --- a/ext/standard/tests/file/windows_links/common.inc +++ b/ext/standard/tests/file/windows_links/common.inc @@ -21,10 +21,10 @@ function get_mountvol() { } function skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(string $filename) { - $ln = "$filename.lnk"; - $ret = exec("mklink $ln " . __FILE__ .' 2>&1', $out); - @unlink($ln); - if (strpos($ret, 'privilege') !== false) { - die('skip SeCreateSymbolicLinkPrivilege not enabled'); - } + $ln = "$filename.lnk"; + $ret = exec("mklink $ln " . __FILE__ .' 2>&1', $out); + @unlink($ln); + if (strpos($ret, 'privilege') !== false) { + die('skip SeCreateSymbolicLinkPrivilege not enabled'); + } } diff --git a/ext/standard/tests/file/windows_mb_path/bug75063_utf8.phpt b/ext/standard/tests/file/windows_mb_path/bug75063_utf8.phpt index b8235c8842691..5beb63f905c97 100644 --- a/ext/standard/tests/file/windows_mb_path/bug75063_utf8.phpt +++ b/ext/standard/tests/file/windows_mb_path/bug75063_utf8.phpt @@ -60,8 +60,8 @@ $d0 = $prefix . DIRECTORY_SEPARATOR . $dir_basename; $obj = scandir($d0); foreach ($obj as $file) { - if ("." == $file || ".." == $file) continue; - unlink($d0 . DIRECTORY_SEPARATOR . $file); + if ("." == $file || ".." == $file) continue; + unlink($d0 . DIRECTORY_SEPARATOR . $file); } rmdir($d0); diff --git a/ext/standard/tests/file/windows_mb_path/test_long_path_mkdir.phpt b/ext/standard/tests/file/windows_mb_path/test_long_path_mkdir.phpt index 1e3d7cd19cc06..1502d62e02286 100644 --- a/ext/standard/tests/file/windows_mb_path/test_long_path_mkdir.phpt +++ b/ext/standard/tests/file/windows_mb_path/test_long_path_mkdir.phpt @@ -8,7 +8,7 @@ skip_if_not_win(); $start = realpath(__DIR__); if (strlen($start) > 260 || strlen($start) > 248) { - die("skip the starting path length is unsuitable for this test"); + die("skip the starting path length is unsuitable for this test"); } ?> diff --git a/ext/standard/tests/filters/bug74267.phpt b/ext/standard/tests/filters/bug74267.phpt index 7e5d550e175b7..703b6c0b87cff 100644 --- a/ext/standard/tests/filters/bug74267.phpt +++ b/ext/standard/tests/filters/bug74267.phpt @@ -6,14 +6,14 @@ $stream = fopen('php://memory', 'w'); stream_filter_append($stream, 'convert.quoted-printable-decode', STREAM_FILTER_WRITE, ['line-break-chars' => "\r\n"]); $lines = [ - "\r\n", - " -=()\r\n", - " -=\r\n", - "\r\n" - ]; + "\r\n", + " -=()\r\n", + " -=\r\n", + "\r\n" + ]; foreach ($lines as $line) { - fwrite($stream, $line); + fwrite($stream, $line); } fclose($stream); diff --git a/ext/standard/tests/general_functions/bug41518.phpt b/ext/standard/tests/general_functions/bug41518.phpt index 26e2413ce9a5e..3b5ad3a8336ad 100644 --- a/ext/standard/tests/general_functions/bug41518.phpt +++ b/ext/standard/tests/general_functions/bug41518.phpt @@ -5,7 +5,7 @@ Bug #41518 (file_exists() warns of open_basedir restriction on non-existent file $tmp_dir = __DIR__ . '/bug41518'; mkdir($tmp_dir); if (!is_dir($tmp_dir)) { - die("skip"); + die("skip"); } @unlink($tmp_dir); ?> diff --git a/ext/standard/tests/general_functions/dl-check-enabled.phpt b/ext/standard/tests/general_functions/dl-check-enabled.phpt index 7559b8d905c90..e989df0fb5a0b 100644 --- a/ext/standard/tests/general_functions/dl-check-enabled.phpt +++ b/ext/standard/tests/general_functions/dl-check-enabled.phpt @@ -7,7 +7,7 @@ User Group: PHP-WVL & PHPGent #PHPTestFest --INI-- diff --git a/ext/standard/tests/general_functions/dl-cve-2007-4887.phpt b/ext/standard/tests/general_functions/dl-cve-2007-4887.phpt index 0fe2a5814343a..effae83464ed5 100644 --- a/ext/standard/tests/general_functions/dl-cve-2007-4887.phpt +++ b/ext/standard/tests/general_functions/dl-cve-2007-4887.phpt @@ -4,7 +4,7 @@ dl() filename length checks (CVE-2007-4887) --INI-- diff --git a/ext/standard/tests/general_functions/dl-full-path-not-supported.phpt b/ext/standard/tests/general_functions/dl-full-path-not-supported.phpt index 746162c7bfbac..aaf7d042e536a 100644 --- a/ext/standard/tests/general_functions/dl-full-path-not-supported.phpt +++ b/ext/standard/tests/general_functions/dl-full-path-not-supported.phpt @@ -7,7 +7,7 @@ User Group: PHP-WVL & PHPGent #PHPTestFest --INI-- diff --git a/ext/standard/tests/general_functions/proc_nice_basic-win.phpt b/ext/standard/tests/general_functions/proc_nice_basic-win.phpt index 6bf3b2c0a66b5..e79bcad3c11c7 100644 --- a/ext/standard/tests/general_functions/proc_nice_basic-win.phpt +++ b/ext/standard/tests/general_functions/proc_nice_basic-win.phpt @@ -5,11 +5,11 @@ proc_nice() basic behaviour /* No function_exists() check, proc_nice() is always available on Windows */ if (!defined('PHP_WINDOWS_VERSION_MAJOR')) { - die('skip: Only for Windows'); + die('skip: Only for Windows'); } if (getenv('SKIP_SLOW_TESTS')) { - doe('skip: Slow test'); + doe('skip: Slow test'); } ?> --FILE-- diff --git a/ext/standard/tests/general_functions/proc_nice_variation5.phpt b/ext/standard/tests/general_functions/proc_nice_variation5.phpt index 650b13c60c722..f4378a4d92b53 100644 --- a/ext/standard/tests/general_functions/proc_nice_variation5.phpt +++ b/ext/standard/tests/general_functions/proc_nice_variation5.phpt @@ -7,9 +7,9 @@ Michele Orselli (mo@ideato.it) Simone Gentili (sensorario@gmail.com) --SKIPIF-- --FILE-- $pipe) { - if (!is_resource($pipe) || feof($pipe)) { - unset($pipes[$i]); - continue; - } - - $chunk = @fread($pipe, 8192); - - if ($chunk === false) { - throw new Error("Failed to read: " . (error_get_last()['message'] ?? 'N/A')); - } - - if ($chunk !== '') { - echo "PIPE {$i} << {$chunk}\n"; - } - } + $r = $pipes; + $w = null; + $e = null; + + if (!stream_select($r, $w, $e, null, 0)) { + throw new Error("Select failed"); + } + + foreach ($r as $i => $pipe) { + if (!is_resource($pipe) || feof($pipe)) { + unset($pipes[$i]); + continue; + } + + $chunk = @fread($pipe, 8192); + + if ($chunk === false) { + throw new Error("Failed to read: " . (error_get_last()['message'] ?? 'N/A')); + } + + if ($chunk !== '') { + echo "PIPE {$i} << {$chunk}\n"; + } + } } ?> diff --git a/ext/standard/tests/general_functions/proc_open_sockets2.phpt b/ext/standard/tests/general_functions/proc_open_sockets2.phpt index 25f3153ec4874..7f9e1a85c54f6 100644 --- a/ext/standard/tests/general_functions/proc_open_sockets2.phpt +++ b/ext/standard/tests/general_functions/proc_open_sockets2.phpt @@ -5,49 +5,49 @@ proc_open() with IO socketpairs function poll($pipe, $read = true) { - $r = ($read == true) ? [$pipe] : null; - $w = ($read == false) ? [$pipe] : null; - $e = null; - - if (!stream_select($r, $w, $e, null, 0)) { - throw new \Error("Select failed"); - } + $r = ($read == true) ? [$pipe] : null; + $w = ($read == false) ? [$pipe] : null; + $e = null; + + if (!stream_select($r, $w, $e, null, 0)) { + throw new \Error("Select failed"); + } } function read_pipe($pipe): string { - poll($pipe); - - if (false === ($chunk = @fread($pipe, 8192))) { - throw new Error("Failed to read: " . (error_get_last()['message'] ?? 'N/A')); - } - - return $chunk; + poll($pipe); + + if (false === ($chunk = @fread($pipe, 8192))) { + throw new Error("Failed to read: " . (error_get_last()['message'] ?? 'N/A')); + } + + return $chunk; } function write_pipe($pipe, $data) { - poll($pipe, false); - - if (false == @fwrite($pipe, $data)) { - throw new Error("Failed to write: " . (error_get_last()['message'] ?? 'N/A')); - } + poll($pipe, false); + + if (false == @fwrite($pipe, $data)) { + throw new Error("Failed to write: " . (error_get_last()['message'] ?? 'N/A')); + } } $cmd = [ - getenv("TEST_PHP_EXECUTABLE"), - __DIR__ . '/proc_open_sockets2.inc' + getenv("TEST_PHP_EXECUTABLE"), + __DIR__ . '/proc_open_sockets2.inc' ]; $spec = [ - ['socket'], - ['socket'] + ['socket'], + ['socket'] ]; $proc = proc_open($cmd, $spec, $pipes); foreach ($pipes as $pipe) { - var_dump(stream_set_blocking($pipe, false)); + var_dump(stream_set_blocking($pipe, false)); } printf("STDOUT << %s\n", read_pipe($pipes[1])); diff --git a/ext/standard/tests/general_functions/proc_open_sockets3.phpt b/ext/standard/tests/general_functions/proc_open_sockets3.phpt index 5ee9e53b56b47..be2a3712382a3 100644 --- a/ext/standard/tests/general_functions/proc_open_sockets3.phpt +++ b/ext/standard/tests/general_functions/proc_open_sockets3.phpt @@ -5,34 +5,34 @@ proc_open() with socket and pipe function poll($pipe, $read = true) { - $r = ($read == true) ? [$pipe] : null; - $w = ($read == false) ? [$pipe] : null; - $e = null; - - if (!stream_select($r, $w, $e, null, 0)) { - throw new \Error("Select failed"); - } + $r = ($read == true) ? [$pipe] : null; + $w = ($read == false) ? [$pipe] : null; + $e = null; + + if (!stream_select($r, $w, $e, null, 0)) { + throw new \Error("Select failed"); + } } function read_pipe($pipe): string { - poll($pipe); - - if (false === ($chunk = @fread($pipe, 8192))) { - throw new Error("Failed to read: " . (error_get_last()['message'] ?? 'N/A')); - } - - return $chunk; + poll($pipe); + + if (false === ($chunk = @fread($pipe, 8192))) { + throw new Error("Failed to read: " . (error_get_last()['message'] ?? 'N/A')); + } + + return $chunk; } $cmd = [ - getenv("TEST_PHP_EXECUTABLE"), - __DIR__ . '/proc_open_sockets2.inc' + getenv("TEST_PHP_EXECUTABLE"), + __DIR__ . '/proc_open_sockets2.inc' ]; $spec = [ - ['pipe', 'r'], - ['socket'] + ['pipe', 'r'], + ['socket'] ]; $proc = proc_open($cmd, $spec, $pipes); diff --git a/ext/standard/tests/general_functions/putenv_bug75574_cp936_win.phpt b/ext/standard/tests/general_functions/putenv_bug75574_cp936_win.phpt index 9a92bef794135..9e963dd1ce495 100644 --- a/ext/standard/tests/general_functions/putenv_bug75574_cp936_win.phpt +++ b/ext/standard/tests/general_functions/putenv_bug75574_cp936_win.phpt @@ -7,7 +7,7 @@ if (substr(PHP_OS, 0, 3) != 'WIN') { die("skip Valid only on Windows"); } if (!sapi_windows_cp_set(936)) { - die("skip Required CP 936 or compatible"); + die("skip Required CP 936 or compatible"); } ?> diff --git a/ext/standard/tests/image/getimagesize.phpt b/ext/standard/tests/image/getimagesize.phpt index ed32ac7c0e914..582959f3ae6ee 100644 --- a/ext/standard/tests/image/getimagesize.phpt +++ b/ext/standard/tests/image/getimagesize.phpt @@ -2,7 +2,7 @@ GetImageSize() --SKIPIF-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- diff --git a/ext/standard/tests/network/shutdown.phpt b/ext/standard/tests/network/shutdown.phpt index b8655cc1f487b..64373596a2756 100644 --- a/ext/standard/tests/network/shutdown.phpt +++ b/ext/standard/tests/network/shutdown.phpt @@ -2,7 +2,7 @@ stream_socket_shutdown() test on IPv4 TCP Loopback --SKIPIF-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --CONFLICTS-- diff --git a/ext/standard/tests/streams/proc_open_bug51800.phpt b/ext/standard/tests/streams/proc_open_bug51800.phpt index 7cf502edd8645..3ae96ca3dd1b6 100644 --- a/ext/standard/tests/streams/proc_open_bug51800.phpt +++ b/ext/standard/tests/streams/proc_open_bug51800.phpt @@ -2,10 +2,10 @@ Bug #51800 proc_open on Windows hangs forever --SKIPIF-- --XFAIL-- pipes have to be read/written simultaneously diff --git a/ext/standard/tests/strings/bug65769.phpt b/ext/standard/tests/strings/bug65769.phpt index 31656ee60fe41..aedc303681f99 100644 --- a/ext/standard/tests/strings/bug65769.phpt +++ b/ext/standard/tests/strings/bug65769.phpt @@ -6,7 +6,7 @@ if (substr(PHP_OS, 0, 3) != 'WIN') { die('skip Windows only'); } if (PHP_WINDOWS_VERSION_MAJOR < 10) { - die("skip for Windows 10 and above"); + die("skip for Windows 10 and above"); } ?> --FILE-- diff --git a/ext/standard/tests/strings/bug72663_2.phpt b/ext/standard/tests/strings/bug72663_2.phpt index fc8978439013f..d0d7f81008597 100644 --- a/ext/standard/tests/strings/bug72663_2.phpt +++ b/ext/standard/tests/strings/bug72663_2.phpt @@ -3,7 +3,7 @@ Bug #72663: Create an Unexpected Object and Don't Invoke __wakeup() in Deseriali --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/strings/htmlentities02.phpt b/ext/standard/tests/strings/htmlentities02.phpt index 9e6a96e060985..e8d0b5b9f7459 100644 --- a/ext/standard/tests/strings/htmlentities02.phpt +++ b/ext/standard/tests/strings/htmlentities02.phpt @@ -4,7 +4,7 @@ htmlentities() test 2 (setlocale / fr_FR.ISO-8859-15) --INI-- diff --git a/ext/standard/tests/strings/htmlentities03.phpt b/ext/standard/tests/strings/htmlentities03.phpt index 484065341496d..973bafedbd3b4 100644 --- a/ext/standard/tests/strings/htmlentities03.phpt +++ b/ext/standard/tests/strings/htmlentities03.phpt @@ -4,7 +4,7 @@ htmlentities() test 3 (setlocale / de_DE.ISO-8859-1) --INI-- diff --git a/ext/standard/tests/strings/htmlentities05.phpt b/ext/standard/tests/strings/htmlentities05.phpt index 04bf4deb00193..04dd756a3177a 100644 --- a/ext/standard/tests/strings/htmlentities05.phpt +++ b/ext/standard/tests/strings/htmlentities05.phpt @@ -5,7 +5,7 @@ output_handler= internal_encoding=cp1252 --SKIPIF-- --FILE-- --FILE-- 2147483647) { - die("skip 32bit test only"); + die("skip 32bit test only"); } ?> --FILE-- diff --git a/ext/standard/tests/strings/pack64.phpt b/ext/standard/tests/strings/pack64.phpt index cccdc1ba6e5f3..753821f654299 100644 --- a/ext/standard/tests/strings/pack64.phpt +++ b/ext/standard/tests/strings/pack64.phpt @@ -3,7 +3,7 @@ --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/strings/pack64_32.phpt b/ext/standard/tests/strings/pack64_32.phpt index f52de63ca463d..978e04449de61 100644 --- a/ext/standard/tests/strings/pack64_32.phpt +++ b/ext/standard/tests/strings/pack64_32.phpt @@ -3,7 +3,7 @@ --SKIPIF-- 4) { - die("skip 32bit test only"); + die("skip 32bit test only"); } ?> --FILE-- diff --git a/ext/standard/tests/strings/printf_basic7.phpt b/ext/standard/tests/strings/printf_basic7.phpt index 19c1f42104782..b7218cd7de062 100644 --- a/ext/standard/tests/strings/printf_basic7.phpt +++ b/ext/standard/tests/strings/printf_basic7.phpt @@ -3,7 +3,7 @@ Test printf() function : basic functionality - unsigned format --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/strings/printf_basic8.phpt b/ext/standard/tests/strings/printf_basic8.phpt index 800d6cc1e77aa..395972ba96c23 100644 --- a/ext/standard/tests/strings/printf_basic8.phpt +++ b/ext/standard/tests/strings/printf_basic8.phpt @@ -3,7 +3,7 @@ Test printf() function : basic functionality - octal format --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/strings/sprintf_basic7.phpt b/ext/standard/tests/strings/sprintf_basic7.phpt index 63cf1975bb686..77765aaf52e8c 100644 --- a/ext/standard/tests/strings/sprintf_basic7.phpt +++ b/ext/standard/tests/strings/sprintf_basic7.phpt @@ -3,7 +3,7 @@ Test sprintf() function : basic functionality - unsigned format --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/strings/sprintf_basic8.phpt b/ext/standard/tests/strings/sprintf_basic8.phpt index 5c8cdb5d5a0d4..e9696db27b161 100644 --- a/ext/standard/tests/strings/sprintf_basic8.phpt +++ b/ext/standard/tests/strings/sprintf_basic8.phpt @@ -3,7 +3,7 @@ Test sprintf() function : basic functionality - octal format --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/strings/sprintf_variation28.phpt b/ext/standard/tests/strings/sprintf_variation28.phpt index 53c6bd015f07f..4903d3ed154e6 100644 --- a/ext/standard/tests/strings/sprintf_variation28.phpt +++ b/ext/standard/tests/strings/sprintf_variation28.phpt @@ -3,7 +3,7 @@ Test sprintf() function : usage variations - octal formats with integer values --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/strings/sprintf_variation34.phpt b/ext/standard/tests/strings/sprintf_variation34.phpt index a02f5cda6e5ab..c7ff681f57504 100644 --- a/ext/standard/tests/strings/sprintf_variation34.phpt +++ b/ext/standard/tests/strings/sprintf_variation34.phpt @@ -3,7 +3,7 @@ Test sprintf() function : usage variations - hexa formats with integer values --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/strings/sprintf_variation40.phpt b/ext/standard/tests/strings/sprintf_variation40.phpt index 9b3890f15df0e..3bec553dd862a 100644 --- a/ext/standard/tests/strings/sprintf_variation40.phpt +++ b/ext/standard/tests/strings/sprintf_variation40.phpt @@ -3,7 +3,7 @@ Test sprintf() function : usage variations - unsigned formats with integer value --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/strings/sscanf_basic6.phpt b/ext/standard/tests/strings/sscanf_basic6.phpt index dad84c3e6331f..5aec9c094089f 100644 --- a/ext/standard/tests/strings/sscanf_basic6.phpt +++ b/ext/standard/tests/strings/sscanf_basic6.phpt @@ -3,7 +3,7 @@ Test sscanf() function : basic functionality - unsigned format --SKIPIF-- --FILE-- diff --git a/ext/standard/tests/time/001.phpt b/ext/standard/tests/time/001.phpt index 34b87157f2243..afd32375bb828 100644 --- a/ext/standard/tests/time/001.phpt +++ b/ext/standard/tests/time/001.phpt @@ -2,7 +2,7 @@ microtime() function --SKIPIF-- --FILE-- --FILE-- diff --git a/ext/sysvsem/tests/nowait.phpt b/ext/sysvsem/tests/nowait.phpt index b52d2d7e20f4f..ef2ba56cbb5b6 100644 --- a/ext/sysvsem/tests/nowait.phpt +++ b/ext/sysvsem/tests/nowait.phpt @@ -3,7 +3,7 @@ Test sem_acquire with nowait option --SKIPIF-- --FILE-- diff --git a/ext/sysvsem/tests/sysv.phpt b/ext/sysvsem/tests/sysv.phpt index 14270ee608fa9..0ed7b8a76853b 100644 --- a/ext/sysvsem/tests/sysv.phpt +++ b/ext/sysvsem/tests/sysv.phpt @@ -3,7 +3,7 @@ General semaphore and shared memory test --SKIPIF-- --FILE-- diff --git a/ext/xml/tests/bug32001.phpt b/ext/xml/tests/bug32001.phpt index 5ced12894020e..410a2f62ffec6 100644 --- a/ext/xml/tests/bug32001.phpt +++ b/ext/xml/tests/bug32001.phpt @@ -5,7 +5,7 @@ Bug #32001 (xml_parse*() goes into infinite loop when autodetection in effect), require_once("skipif.inc"); if (!extension_loaded('iconv')) die ("skip iconv extension not available"); if (ICONV_IMPL == 'glibc' && version_compare(ICONV_VERSION, '2.12', '<=')) - die("skip iconv of glibc <= 2.12 is buggy"); + die("skip iconv of glibc <= 2.12 is buggy"); ?> --FILE-- --FILE-- diff --git a/ext/xml/tests/xml_parse_into_struct_variation.phpt b/ext/xml/tests/xml_parse_into_struct_variation.phpt index 3f980495676f7..a03b86ac8ae6b 100644 --- a/ext/xml/tests/xml_parse_into_struct_variation.phpt +++ b/ext/xml/tests/xml_parse_into_struct_variation.phpt @@ -3,7 +3,7 @@ Test xml_parse_into_struct() function : variation --SKIPIF-- --FILE-- diff --git a/ext/xml/tests/xml_parser_set_option_basic.phpt b/ext/xml/tests/xml_parser_set_option_basic.phpt index 7d398dfd7014e..cae9ed71466f5 100644 --- a/ext/xml/tests/xml_parser_set_option_basic.phpt +++ b/ext/xml/tests/xml_parser_set_option_basic.phpt @@ -3,7 +3,7 @@ Test xml_set_notation_decl_handler function : basic --SKIPIF-- --FILE-- diff --git a/ext/xml/tests/xml_parser_set_option_variation3.phpt b/ext/xml/tests/xml_parser_set_option_variation3.phpt index 592c9f52e80bc..d1163de356e0b 100644 --- a/ext/xml/tests/xml_parser_set_option_variation3.phpt +++ b/ext/xml/tests/xml_parser_set_option_variation3.phpt @@ -3,7 +3,7 @@ Test xml_parser_set_option() function : usage variations --SKIPIF-- --FILE-- diff --git a/ext/xml/tests/xml_set_notation_decl_handler_basic.phpt b/ext/xml/tests/xml_set_notation_decl_handler_basic.phpt index 6ceaea63d0914..aa37b84a5560c 100644 --- a/ext/xml/tests/xml_set_notation_decl_handler_basic.phpt +++ b/ext/xml/tests/xml_set_notation_decl_handler_basic.phpt @@ -3,7 +3,7 @@ Test xml_set_notation_decl_handler function : basic --SKIPIF-- --FILE-- diff --git a/ext/xml/tests/xml_set_processing_instruction_handler_basic.phpt b/ext/xml/tests/xml_set_processing_instruction_handler_basic.phpt index 54a71fd48c771..dc9efe278b969 100644 --- a/ext/xml/tests/xml_set_processing_instruction_handler_basic.phpt +++ b/ext/xml/tests/xml_set_processing_instruction_handler_basic.phpt @@ -3,7 +3,7 @@ Test xml_set_processing_instruction_handler function : basic --SKIPIF-- --FILE-- diff --git a/ext/xml/tests/xml_set_start_namespace_decl_handler_basic.phpt b/ext/xml/tests/xml_set_start_namespace_decl_handler_basic.phpt index 6a783f6cfcd71..ba27eec9f5f94 100644 --- a/ext/xml/tests/xml_set_start_namespace_decl_handler_basic.phpt +++ b/ext/xml/tests/xml_set_start_namespace_decl_handler_basic.phpt @@ -3,7 +3,7 @@ Test xml_set_start_namespace_decl_handler function: basic --SKIPIF-- --FILE-- diff --git a/ext/xmlwriter/tests/bug79029.phpt b/ext/xmlwriter/tests/bug79029.phpt index b6b0c84b182d0..2e6f70dc0ab22 100644 --- a/ext/xmlwriter/tests/bug79029.phpt +++ b/ext/xmlwriter/tests/bug79029.phpt @@ -1,7 +1,7 @@ --TEST-- #79029 (Use After Free's in XMLReader / XMLWriter) --SKIPIF-- - diff --git a/ext/xsl/tests/xsl-phpinfo.phpt b/ext/xsl/tests/xsl-phpinfo.phpt index 5f830356b7410..2119181a5b44d 100644 --- a/ext/xsl/tests/xsl-phpinfo.phpt +++ b/ext/xsl/tests/xsl-phpinfo.phpt @@ -2,9 +2,9 @@ Test phpinfo() displays xsl info --SKIPIF-- --FILE-- --FILE-- --FILE-- --FILE-- current() !== NULL) { echo $generator->current() . PHP_EOL; if ($generator->current() === 5) { diff --git a/ext/zip/tests/bug51353.phpt b/ext/zip/tests/bug51353.phpt index ab021f4715944..3a4e74a07c806 100644 --- a/ext/zip/tests/bug51353.phpt +++ b/ext/zip/tests/bug51353.phpt @@ -46,7 +46,7 @@ unlink("$base_path/51353.zip"); $a = glob("$base_path/51353_unpack/*.txt"); foreach($a as $f) { - unlink($f); + unlink($f); } rmdir("$base_path/51353_unpack"); ?> diff --git a/ext/zip/tests/bug64342_0.phpt b/ext/zip/tests/bug64342_0.phpt index d187175cd9f98..43f60f5d7c566 100644 --- a/ext/zip/tests/bug64342_0.phpt +++ b/ext/zip/tests/bug64342_0.phpt @@ -2,7 +2,7 @@ Bug #64342 ZipArchive::addFile() has to check file existence (variation 1) --SKIPIF-- --FILE-- --FILE-- @@ -12,7 +12,7 @@ if (!extension_loaded('zlib')) { gzopen('someFile', 'c'); --CLEAN-- --EXPECTF-- Warning: gzopen(): gzopen failed in %s on line %d diff --git a/ext/zlib/tests/gzclose_basic.phpt b/ext/zlib/tests/gzclose_basic.phpt index f3387de09cee5..1f72fc1c88469 100644 --- a/ext/zlib/tests/gzclose_basic.phpt +++ b/ext/zlib/tests/gzclose_basic.phpt @@ -3,7 +3,7 @@ Test function gzclose() by calling it with its expected arguments --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzcompress_basic1.phpt b/ext/zlib/tests/gzcompress_basic1.phpt index 3a8ee949bc4a7..a5d27359274e3 100644 --- a/ext/zlib/tests/gzcompress_basic1.phpt +++ b/ext/zlib/tests/gzcompress_basic1.phpt @@ -3,7 +3,7 @@ Test gzcompress() function : basic functionality --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzcompress_error1.phpt b/ext/zlib/tests/gzcompress_error1.phpt index e559030151dc2..ff09d6568affc 100644 --- a/ext/zlib/tests/gzcompress_error1.phpt +++ b/ext/zlib/tests/gzcompress_error1.phpt @@ -3,7 +3,7 @@ Test gzcompress() function : error conditions --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzcompress_variation1.phpt b/ext/zlib/tests/gzcompress_variation1.phpt index e3cc8e846beee..762aa3c870d63 100644 --- a/ext/zlib/tests/gzcompress_variation1.phpt +++ b/ext/zlib/tests/gzcompress_variation1.phpt @@ -3,7 +3,7 @@ Test gzcompress() function : variation --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzdeflate_basic1.phpt b/ext/zlib/tests/gzdeflate_basic1.phpt index 5257e4db6c537..7ace99a8a7e2f 100644 --- a/ext/zlib/tests/gzdeflate_basic1.phpt +++ b/ext/zlib/tests/gzdeflate_basic1.phpt @@ -3,7 +3,7 @@ Test gzdeflate() function : basic functionality --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzdeflate_error1.phpt b/ext/zlib/tests/gzdeflate_error1.phpt index fbcb2d95f317c..fea4dfec002a7 100644 --- a/ext/zlib/tests/gzdeflate_error1.phpt +++ b/ext/zlib/tests/gzdeflate_error1.phpt @@ -3,7 +3,7 @@ Test gzdeflate() function : error conditions --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzdeflate_variation1.phpt b/ext/zlib/tests/gzdeflate_variation1.phpt index 3058b1d9008f4..e881d77b5102c 100644 --- a/ext/zlib/tests/gzdeflate_variation1.phpt +++ b/ext/zlib/tests/gzdeflate_variation1.phpt @@ -3,7 +3,7 @@ Test gzdeflate() function : variation --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzencode_basic1.phpt b/ext/zlib/tests/gzencode_basic1.phpt index 927e0406db246..b129399dfd7ae 100644 --- a/ext/zlib/tests/gzencode_basic1.phpt +++ b/ext/zlib/tests/gzencode_basic1.phpt @@ -3,7 +3,7 @@ Test gzencode() function : basic functionality --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzencode_error1.phpt b/ext/zlib/tests/gzencode_error1.phpt index 5d850e5438af7..951437b98a085 100644 --- a/ext/zlib/tests/gzencode_error1.phpt +++ b/ext/zlib/tests/gzencode_error1.phpt @@ -3,7 +3,7 @@ Test gzencode() function : error conditions --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzencode_variation1-win32.phpt b/ext/zlib/tests/gzencode_variation1-win32.phpt index 7272b4e7dc582..f7870e890fa55 100644 --- a/ext/zlib/tests/gzencode_variation1-win32.phpt +++ b/ext/zlib/tests/gzencode_variation1-win32.phpt @@ -8,7 +8,7 @@ if( substr(PHP_OS, 0, 3) != "WIN" ) { } if (!extension_loaded("zlib")) { - print "skip - ZLIB extension not loaded"; + print "skip - ZLIB extension not loaded"; } ?> --FILE-- diff --git a/ext/zlib/tests/gzencode_variation1.phpt b/ext/zlib/tests/gzencode_variation1.phpt index 625745629872c..b3987b9d205fa 100644 --- a/ext/zlib/tests/gzencode_variation1.phpt +++ b/ext/zlib/tests/gzencode_variation1.phpt @@ -8,7 +8,7 @@ if( substr(PHP_OS, 0, 3) == "WIN" ) { } if (!extension_loaded("zlib")) { - print "skip - ZLIB extension not loaded"; + print "skip - ZLIB extension not loaded"; } if (PHP_OS == "Darwin") { diff --git a/ext/zlib/tests/gzencode_variation2-win32.phpt b/ext/zlib/tests/gzencode_variation2-win32.phpt index 5ad5a1cdc424e..727a079b61275 100644 --- a/ext/zlib/tests/gzencode_variation2-win32.phpt +++ b/ext/zlib/tests/gzencode_variation2-win32.phpt @@ -8,12 +8,12 @@ if( substr(PHP_OS, 0, 3) != "WIN" ) { } if (!extension_loaded("zlib")) { - print "skip - ZLIB extension not loaded"; + print "skip - ZLIB extension not loaded"; } include 'func.inc'; if (version_compare(get_zlib_version(), "1.2.11") < 0) { - die("skip - at least zlib 1.2.11 required, got " . get_zlib_version()); + die("skip - at least zlib 1.2.11 required, got " . get_zlib_version()); } ?> --FILE-- diff --git a/ext/zlib/tests/gzencode_variation2.phpt b/ext/zlib/tests/gzencode_variation2.phpt index d5c0844006908..f1e3c0d2baba2 100644 --- a/ext/zlib/tests/gzencode_variation2.phpt +++ b/ext/zlib/tests/gzencode_variation2.phpt @@ -8,7 +8,7 @@ if( substr(PHP_OS, 0, 3) == "WIN" ) { } if (!extension_loaded("zlib")) { - print "skip - ZLIB extension not loaded"; + print "skip - ZLIB extension not loaded"; } if (PHP_OS == "Darwin") { diff --git a/ext/zlib/tests/gzeof_basic.phpt b/ext/zlib/tests/gzeof_basic.phpt index c159819d76b4e..f92450d22b98c 100644 --- a/ext/zlib/tests/gzeof_basic.phpt +++ b/ext/zlib/tests/gzeof_basic.phpt @@ -3,7 +3,7 @@ Test function feof() by calling it with its expected arguments --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzeof_variation1.phpt b/ext/zlib/tests/gzeof_variation1.phpt index 2dded2ca1a4ab..3be013facfa04 100644 --- a/ext/zlib/tests/gzeof_variation1.phpt +++ b/ext/zlib/tests/gzeof_variation1.phpt @@ -3,7 +3,7 @@ Test function gzeof while writing. --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzfile_variation15.phpt b/ext/zlib/tests/gzfile_variation15.phpt index 01958214bcb00..7fb103b3ecc9f 100644 --- a/ext/zlib/tests/gzfile_variation15.phpt +++ b/ext/zlib/tests/gzfile_variation15.phpt @@ -3,7 +3,7 @@ Test gzfile() function : variation: use include path (relative directories in pa --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzgetc_basic.phpt b/ext/zlib/tests/gzgetc_basic.phpt index c9b7fcf6159be..5eff9b6d5df8c 100644 --- a/ext/zlib/tests/gzgetc_basic.phpt +++ b/ext/zlib/tests/gzgetc_basic.phpt @@ -3,11 +3,11 @@ Test function gzgetc() by calling it with its expected arguments zlib 1.2.5 --SKIPIF-- 0) { - die('skip - only for zlib <= 1.2.5'); + die('skip - only for zlib <= 1.2.5'); } ?> --FILE-- diff --git a/ext/zlib/tests/gzgetc_basic_1.phpt b/ext/zlib/tests/gzgetc_basic_1.phpt index b2a1a056af68b..49e4ab8f6becf 100644 --- a/ext/zlib/tests/gzgetc_basic_1.phpt +++ b/ext/zlib/tests/gzgetc_basic_1.phpt @@ -3,11 +3,11 @@ Test function gzgetc() by calling it with its expected arguments zlib 1.2.7 --SKIPIF-- = 1.2.7'); + die('skip - only for zlib >= 1.2.7'); } ?> --FILE-- diff --git a/ext/zlib/tests/gzgets_basic.phpt b/ext/zlib/tests/gzgets_basic.phpt index 80ef741423142..4f4e908645d65 100644 --- a/ext/zlib/tests/gzgets_basic.phpt +++ b/ext/zlib/tests/gzgets_basic.phpt @@ -3,7 +3,7 @@ Test function gzgets() by calling it with its expected arguments --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzinflate_error1.phpt b/ext/zlib/tests/gzinflate_error1.phpt index 2ddb3adb6b9fc..67f2aa438bce7 100644 --- a/ext/zlib/tests/gzinflate_error1.phpt +++ b/ext/zlib/tests/gzinflate_error1.phpt @@ -3,7 +3,7 @@ Test gzinflate() function : error conditions --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzopen_basic.phpt b/ext/zlib/tests/gzopen_basic.phpt index a1768e8e00584..cbb4174f9fe00 100644 --- a/ext/zlib/tests/gzopen_basic.phpt +++ b/ext/zlib/tests/gzopen_basic.phpt @@ -3,7 +3,7 @@ Test gzopen() function : basic functionality --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzopen_basic2.phpt b/ext/zlib/tests/gzopen_basic2.phpt index 2b5a9c61d1604..5814b5168f377 100644 --- a/ext/zlib/tests/gzopen_basic2.phpt +++ b/ext/zlib/tests/gzopen_basic2.phpt @@ -3,7 +3,7 @@ Test gzopen() function : basic functionality for writing --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzopen_variation4.phpt b/ext/zlib/tests/gzopen_variation4.phpt index 3fe924a282fc0..6505306c4534e 100644 --- a/ext/zlib/tests/gzopen_variation4.phpt +++ b/ext/zlib/tests/gzopen_variation4.phpt @@ -3,7 +3,7 @@ Test gzopen() function : variation: use include path (relative directories in pa --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzopen_variation5.phpt b/ext/zlib/tests/gzopen_variation5.phpt index a1cf48ba18ed0..e06c358d80d90 100644 --- a/ext/zlib/tests/gzopen_variation5.phpt +++ b/ext/zlib/tests/gzopen_variation5.phpt @@ -3,7 +3,7 @@ Test gzopen() function : variation: use include path and stream context create a --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzopen_variation6.phpt b/ext/zlib/tests/gzopen_variation6.phpt index 631314818fcdd..16b266db65a5e 100644 --- a/ext/zlib/tests/gzopen_variation6.phpt +++ b/ext/zlib/tests/gzopen_variation6.phpt @@ -3,7 +3,7 @@ Test gzopen() function : variation: relative/absolute file --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzopen_variation7.phpt b/ext/zlib/tests/gzopen_variation7.phpt index f3ba9a4fbc50e..7eef44a702bdc 100644 --- a/ext/zlib/tests/gzopen_variation7.phpt +++ b/ext/zlib/tests/gzopen_variation7.phpt @@ -3,7 +3,7 @@ Test function gzopen() by calling it twice on the same file and not closing one --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzopen_variation8.phpt b/ext/zlib/tests/gzopen_variation8.phpt index 1885a048d6807..b2b12276ebd25 100644 --- a/ext/zlib/tests/gzopen_variation8.phpt +++ b/ext/zlib/tests/gzopen_variation8.phpt @@ -3,7 +3,7 @@ Test gzopen() function : variation: opening a plain file --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzopen_variation9.phpt b/ext/zlib/tests/gzopen_variation9.phpt index 91e2a4297657f..b8b895a92d524 100644 --- a/ext/zlib/tests/gzopen_variation9.phpt +++ b/ext/zlib/tests/gzopen_variation9.phpt @@ -3,7 +3,7 @@ Test gzopen() function : variation: try opening with possibly invalid modes --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzpassthru_basic.phpt b/ext/zlib/tests/gzpassthru_basic.phpt index 5606114bc3d8b..4ca2780b41355 100644 --- a/ext/zlib/tests/gzpassthru_basic.phpt +++ b/ext/zlib/tests/gzpassthru_basic.phpt @@ -3,7 +3,7 @@ Test function gzpassthru() by calling it with its expected arguments --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzputs_basic.phpt b/ext/zlib/tests/gzputs_basic.phpt index e1414d2504e55..6fd4d0748de63 100644 --- a/ext/zlib/tests/gzputs_basic.phpt +++ b/ext/zlib/tests/gzputs_basic.phpt @@ -3,7 +3,7 @@ Test function gzputs() by calling it with its expected arguments --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzread_basic.phpt b/ext/zlib/tests/gzread_basic.phpt index 1b66d85fc10cc..356eb2c845049 100644 --- a/ext/zlib/tests/gzread_basic.phpt +++ b/ext/zlib/tests/gzread_basic.phpt @@ -3,7 +3,7 @@ Test function gzread() by calling it with its expected arguments --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzread_error2.phpt b/ext/zlib/tests/gzread_error2.phpt index ff0dfe80289fe..0b4c4d13fcbc6 100644 --- a/ext/zlib/tests/gzread_error2.phpt +++ b/ext/zlib/tests/gzread_error2.phpt @@ -3,7 +3,7 @@ Test function gzread() by calling it invalid lengths --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzread_variation1.phpt b/ext/zlib/tests/gzread_variation1.phpt index bc9eee4f94681..f5968e28ad233 100644 --- a/ext/zlib/tests/gzread_variation1.phpt +++ b/ext/zlib/tests/gzread_variation1.phpt @@ -3,7 +3,7 @@ Test function gzread() by calling it while file open for writing --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzrewind_basic.phpt b/ext/zlib/tests/gzrewind_basic.phpt index 988e10a36622e..ffed16d4e9167 100644 --- a/ext/zlib/tests/gzrewind_basic.phpt +++ b/ext/zlib/tests/gzrewind_basic.phpt @@ -3,7 +3,7 @@ Test function gzrewind() by calling it with its expected arguments when reading --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzrewind_basic2.phpt b/ext/zlib/tests/gzrewind_basic2.phpt index d1a2d296fc33d..1522750c5ba21 100644 --- a/ext/zlib/tests/gzrewind_basic2.phpt +++ b/ext/zlib/tests/gzrewind_basic2.phpt @@ -3,7 +3,7 @@ Test function gzrewind() by calling it with its expected arguments when reading --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzrewind_variation1.phpt b/ext/zlib/tests/gzrewind_variation1.phpt index 1704771679e77..0b2053993d96a 100644 --- a/ext/zlib/tests/gzrewind_variation1.phpt +++ b/ext/zlib/tests/gzrewind_variation1.phpt @@ -3,7 +3,7 @@ Test function gzrewind() by calling it with its expected arguments when writing --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzseek_basic.phpt b/ext/zlib/tests/gzseek_basic.phpt index 2cc13595591eb..9a835f8df5b3c 100644 --- a/ext/zlib/tests/gzseek_basic.phpt +++ b/ext/zlib/tests/gzseek_basic.phpt @@ -3,7 +3,7 @@ Test function gzseek() by calling it with its expected arguments when reading --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzseek_basic2.phpt b/ext/zlib/tests/gzseek_basic2.phpt index a463d607f1815..c9d60ebcfd3a7 100644 --- a/ext/zlib/tests/gzseek_basic2.phpt +++ b/ext/zlib/tests/gzseek_basic2.phpt @@ -3,7 +3,7 @@ Test function gzseek() by calling it with its expected arguments when writing --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzseek_variation1.phpt b/ext/zlib/tests/gzseek_variation1.phpt index 81fe035987915..e5dcefc9bb065 100644 --- a/ext/zlib/tests/gzseek_variation1.phpt +++ b/ext/zlib/tests/gzseek_variation1.phpt @@ -3,7 +3,7 @@ Test function gzseek() by seeking forward in write mode --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzseek_variation2.phpt b/ext/zlib/tests/gzseek_variation2.phpt index 56b4fa9ec132d..50ad28f36fea1 100644 --- a/ext/zlib/tests/gzseek_variation2.phpt +++ b/ext/zlib/tests/gzseek_variation2.phpt @@ -3,7 +3,7 @@ Test function gzseek() by calling it with SEEK_SET when reading --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzseek_variation3.phpt b/ext/zlib/tests/gzseek_variation3.phpt index 77e0e33e019d6..0ba9eb68eaf0d 100644 --- a/ext/zlib/tests/gzseek_variation3.phpt +++ b/ext/zlib/tests/gzseek_variation3.phpt @@ -3,7 +3,7 @@ Test function gzseek() by calling it with SEEK_CUR when reading --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzseek_variation4.phpt b/ext/zlib/tests/gzseek_variation4.phpt index 09e38cd33d6da..2850efa7d64c8 100644 --- a/ext/zlib/tests/gzseek_variation4.phpt +++ b/ext/zlib/tests/gzseek_variation4.phpt @@ -3,7 +3,7 @@ Test function gzseek() by calling it with SEEK_SET when writing --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzseek_variation5.phpt b/ext/zlib/tests/gzseek_variation5.phpt index e59a3fb88d7ba..41d5c777a6883 100644 --- a/ext/zlib/tests/gzseek_variation5.phpt +++ b/ext/zlib/tests/gzseek_variation5.phpt @@ -3,7 +3,7 @@ Test function gzseek() by calling it with SEEK_CUR when writing --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzseek_variation6.phpt b/ext/zlib/tests/gzseek_variation6.phpt index e7f49f5fd72f8..1c2e6de562ba7 100644 --- a/ext/zlib/tests/gzseek_variation6.phpt +++ b/ext/zlib/tests/gzseek_variation6.phpt @@ -3,7 +3,7 @@ Test function gzseek() by calling it with SEEK_END when reading --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzseek_variation7.phpt b/ext/zlib/tests/gzseek_variation7.phpt index 67c0ecf074db9..1198e56ced57b 100644 --- a/ext/zlib/tests/gzseek_variation7.phpt +++ b/ext/zlib/tests/gzseek_variation7.phpt @@ -3,7 +3,7 @@ Test function gzseek() by calling it with SEEK_END when writing --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gztell_basic.phpt b/ext/zlib/tests/gztell_basic.phpt index acd0829360bb8..063bae63bb6a2 100644 --- a/ext/zlib/tests/gztell_basic.phpt +++ b/ext/zlib/tests/gztell_basic.phpt @@ -3,7 +3,7 @@ Test function gztell() by calling it with its expected arguments when reading --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gztell_basic2.phpt b/ext/zlib/tests/gztell_basic2.phpt index 13ac183d46519..b9d9eb083738d 100644 --- a/ext/zlib/tests/gztell_basic2.phpt +++ b/ext/zlib/tests/gztell_basic2.phpt @@ -3,7 +3,7 @@ Test function gztell() by calling it with its expected arguments when writing --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzuncompress_basic1.phpt b/ext/zlib/tests/gzuncompress_basic1.phpt index d82d7069e3a2d..c46e8b35ebd99 100644 --- a/ext/zlib/tests/gzuncompress_basic1.phpt +++ b/ext/zlib/tests/gzuncompress_basic1.phpt @@ -3,7 +3,7 @@ Test gzuncompress() function : basic functionality --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzuncompress_error1.phpt b/ext/zlib/tests/gzuncompress_error1.phpt index 5390cce93832d..a93de5b054b18 100644 --- a/ext/zlib/tests/gzuncompress_error1.phpt +++ b/ext/zlib/tests/gzuncompress_error1.phpt @@ -3,7 +3,7 @@ Test gzuncompress() function : error conditions --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzwrite_basic.phpt b/ext/zlib/tests/gzwrite_basic.phpt index bdea57deff856..699b2f49937d2 100644 --- a/ext/zlib/tests/gzwrite_basic.phpt +++ b/ext/zlib/tests/gzwrite_basic.phpt @@ -3,7 +3,7 @@ Test function gzwrite() by calling it with its expected arguments --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzwrite_error2.phpt b/ext/zlib/tests/gzwrite_error2.phpt index a4e4fa4958d6a..009cb4d7d28d8 100644 --- a/ext/zlib/tests/gzwrite_error2.phpt +++ b/ext/zlib/tests/gzwrite_error2.phpt @@ -3,7 +3,7 @@ Test function gzwrite() by calling it invalid lengths --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/gzwrite_variation1.phpt b/ext/zlib/tests/gzwrite_variation1.phpt index 563702e4bdcc5..540a87985a109 100644 --- a/ext/zlib/tests/gzwrite_variation1.phpt +++ b/ext/zlib/tests/gzwrite_variation1.phpt @@ -3,7 +3,7 @@ Test function gzwrite() by calling it when file is opened for reading --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/readgzfile_variation15.phpt b/ext/zlib/tests/readgzfile_variation15.phpt index 1a96fdb429090..749087f6ce66e 100644 --- a/ext/zlib/tests/readgzfile_variation15.phpt +++ b/ext/zlib/tests/readgzfile_variation15.phpt @@ -3,7 +3,7 @@ Test readgzfile() function : variation: use include path (relative directories i --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_scheme_copy_basic.phpt b/ext/zlib/tests/zlib_scheme_copy_basic.phpt index 5a35164cf1c9c..9c6becb4c75f9 100644 --- a/ext/zlib/tests/zlib_scheme_copy_basic.phpt +++ b/ext/zlib/tests/zlib_scheme_copy_basic.phpt @@ -3,7 +3,7 @@ Test compress.zlib:// scheme with the copy function: compressed to compressed --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_scheme_copy_variation1.phpt b/ext/zlib/tests/zlib_scheme_copy_variation1.phpt index a5e145faa3fcc..c96e2bee290be 100644 --- a/ext/zlib/tests/zlib_scheme_copy_variation1.phpt +++ b/ext/zlib/tests/zlib_scheme_copy_variation1.phpt @@ -3,7 +3,7 @@ Test compress.zlib:// scheme with the copy function: compressed to uncompressed --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_scheme_copy_variation2.phpt b/ext/zlib/tests/zlib_scheme_copy_variation2.phpt index 8492862892a27..829351846bce5 100644 --- a/ext/zlib/tests/zlib_scheme_copy_variation2.phpt +++ b/ext/zlib/tests/zlib_scheme_copy_variation2.phpt @@ -3,7 +3,7 @@ Test compress.zlib:// scheme with the copy function: uncompressed to compressed --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_scheme_dir_basic.phpt b/ext/zlib/tests/zlib_scheme_dir_basic.phpt index f0e155e899366..014243d5749f2 100644 --- a/ext/zlib/tests/zlib_scheme_dir_basic.phpt +++ b/ext/zlib/tests/zlib_scheme_dir_basic.phpt @@ -3,7 +3,7 @@ Test compress.zlib:// scheme with the directory functions --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_scheme_file_basic.phpt b/ext/zlib/tests/zlib_scheme_file_basic.phpt index 5d73cf16c2944..cb697f44f0718 100644 --- a/ext/zlib/tests/zlib_scheme_file_basic.phpt +++ b/ext/zlib/tests/zlib_scheme_file_basic.phpt @@ -3,7 +3,7 @@ Test compress.zlib:// scheme with the file --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_scheme_file_get_contents_basic.phpt b/ext/zlib/tests/zlib_scheme_file_get_contents_basic.phpt index b02a1bffe98c6..615d3c5d25ecb 100644 --- a/ext/zlib/tests/zlib_scheme_file_get_contents_basic.phpt +++ b/ext/zlib/tests/zlib_scheme_file_get_contents_basic.phpt @@ -3,7 +3,7 @@ Test compress.zlib:// scheme with the file_get_contents --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_scheme_file_put_contents_basic.phpt b/ext/zlib/tests/zlib_scheme_file_put_contents_basic.phpt index 51a52c9808efc..7ed77b36b3381 100644 --- a/ext/zlib/tests/zlib_scheme_file_put_contents_basic.phpt +++ b/ext/zlib/tests/zlib_scheme_file_put_contents_basic.phpt @@ -3,7 +3,7 @@ Test compress.zlib:// scheme with the file_get_contents --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_scheme_file_read_file_basic.phpt b/ext/zlib/tests/zlib_scheme_file_read_file_basic.phpt index 007a4a50229e2..73047310214e7 100644 --- a/ext/zlib/tests/zlib_scheme_file_read_file_basic.phpt +++ b/ext/zlib/tests/zlib_scheme_file_read_file_basic.phpt @@ -3,7 +3,7 @@ Test compress.zlib:// scheme with the file_get_contents --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_scheme_fopen_basic.phpt b/ext/zlib/tests/zlib_scheme_fopen_basic.phpt index c6508deaa047b..e8c6492024f5f 100644 --- a/ext/zlib/tests/zlib_scheme_fopen_basic.phpt +++ b/ext/zlib/tests/zlib_scheme_fopen_basic.phpt @@ -3,7 +3,7 @@ Test compress.zlib:// scheme with the fopen --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_scheme_fopen_variation1.phpt b/ext/zlib/tests/zlib_scheme_fopen_variation1.phpt index 8bed54ebaa7c6..093b137c6e7d1 100644 --- a/ext/zlib/tests/zlib_scheme_fopen_variation1.phpt +++ b/ext/zlib/tests/zlib_scheme_fopen_variation1.phpt @@ -3,7 +3,7 @@ Test compress.zlib:// scheme with the fopen on a file scheme --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_scheme_rename_basic.phpt b/ext/zlib/tests/zlib_scheme_rename_basic.phpt index b58a09f89e26b..e67970d332cfd 100644 --- a/ext/zlib/tests/zlib_scheme_rename_basic.phpt +++ b/ext/zlib/tests/zlib_scheme_rename_basic.phpt @@ -3,7 +3,7 @@ Test compress.zlib:// scheme with the unlink function --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_scheme_stat_basic.phpt b/ext/zlib/tests/zlib_scheme_stat_basic.phpt index 31d08866ba307..fa48454db523c 100644 --- a/ext/zlib/tests/zlib_scheme_stat_basic.phpt +++ b/ext/zlib/tests/zlib_scheme_stat_basic.phpt @@ -3,7 +3,7 @@ Test compress.zlib:// scheme with the unlink function --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_scheme_stat_basic2.phpt b/ext/zlib/tests/zlib_scheme_stat_basic2.phpt index 23c59f8ff3ea4..c2cfca723a91e 100644 --- a/ext/zlib/tests/zlib_scheme_stat_basic2.phpt +++ b/ext/zlib/tests/zlib_scheme_stat_basic2.phpt @@ -3,7 +3,7 @@ Test compress.zlib:// scheme with the unlink function --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_scheme_unlink_basic.phpt b/ext/zlib/tests/zlib_scheme_unlink_basic.phpt index ca21637ed104a..c5c4eabb466ef 100644 --- a/ext/zlib/tests/zlib_scheme_unlink_basic.phpt +++ b/ext/zlib/tests/zlib_scheme_unlink_basic.phpt @@ -3,7 +3,7 @@ Test compress.zlib:// scheme with the unlink function --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_wrapper_fflush_basic.phpt b/ext/zlib/tests/zlib_wrapper_fflush_basic.phpt index 6911aabe69e8d..54d0e37860d5d 100644 --- a/ext/zlib/tests/zlib_wrapper_fflush_basic.phpt +++ b/ext/zlib/tests/zlib_wrapper_fflush_basic.phpt @@ -3,7 +3,7 @@ Test function fflush() on a zlib stream wrapper --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_wrapper_flock_basic.phpt b/ext/zlib/tests/zlib_wrapper_flock_basic.phpt index 41c651c50f991..6d3f9d6237920 100644 --- a/ext/zlib/tests/zlib_wrapper_flock_basic.phpt +++ b/ext/zlib/tests/zlib_wrapper_flock_basic.phpt @@ -3,7 +3,7 @@ Test function stream_get_meta_data on a zlib stream --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_wrapper_fstat_basic.phpt b/ext/zlib/tests/zlib_wrapper_fstat_basic.phpt index 20af263e5a038..eaa9a124db483 100644 --- a/ext/zlib/tests/zlib_wrapper_fstat_basic.phpt +++ b/ext/zlib/tests/zlib_wrapper_fstat_basic.phpt @@ -3,7 +3,7 @@ Test function fstat() on zlib wrapper --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_wrapper_ftruncate_basic.phpt b/ext/zlib/tests/zlib_wrapper_ftruncate_basic.phpt index 2ace80d21cd9a..07b3917213d8b 100644 --- a/ext/zlib/tests/zlib_wrapper_ftruncate_basic.phpt +++ b/ext/zlib/tests/zlib_wrapper_ftruncate_basic.phpt @@ -3,7 +3,7 @@ Test function ftruncate() on zlib wrapper by calling it with its expected argume --SKIPIF-- --FILE-- diff --git a/ext/zlib/tests/zlib_wrapper_meta_data_basic.phpt b/ext/zlib/tests/zlib_wrapper_meta_data_basic.phpt index 8476b2923a0c2..815854b21e1a5 100644 --- a/ext/zlib/tests/zlib_wrapper_meta_data_basic.phpt +++ b/ext/zlib/tests/zlib_wrapper_meta_data_basic.phpt @@ -3,7 +3,7 @@ Test function stream_get_meta_data on a zlib stream --SKIPIF-- --FILE-- diff --git a/sapi/cgi/tests/003.phpt b/sapi/cgi/tests/003.phpt index 00c59c72784a0..ac3f6aa8e6386 100644 --- a/sapi/cgi/tests/003.phpt +++ b/sapi/cgi/tests/003.phpt @@ -4,7 +4,7 @@ strip comments and whitespace with -w --FILE-- diff --git a/sapi/cli/tests/003-2.phpt b/sapi/cli/tests/003-2.phpt index 71ef7163bef39..3a88b2a9a3aa1 100644 --- a/sapi/cli/tests/003-2.phpt +++ b/sapi/cli/tests/003-2.phpt @@ -4,7 +4,7 @@ defining INI options with -d (as 2nd arg) --FILE-- diff --git a/sapi/cli/tests/003.phpt b/sapi/cli/tests/003.phpt index 6584e2c7bef21..63e812d4a7cd7 100644 --- a/sapi/cli/tests/003.phpt +++ b/sapi/cli/tests/003.phpt @@ -4,7 +4,7 @@ defining INI options with -d --FILE-- diff --git a/sapi/cli/tests/006.phpt b/sapi/cli/tests/006.phpt index f3443b7475e64..77a5667bda82f 100644 --- a/sapi/cli/tests/006.phpt +++ b/sapi/cli/tests/006.phpt @@ -4,10 +4,10 @@ show information about extension --INI-- diff --git a/sapi/cli/tests/007.phpt b/sapi/cli/tests/007.phpt index 94ea6fd247457..73faa334237cf 100644 --- a/sapi/cli/tests/007.phpt +++ b/sapi/cli/tests/007.phpt @@ -4,7 +4,7 @@ strip comments and whitespace with -w --FILE-- diff --git a/sapi/cli/tests/008.phpt b/sapi/cli/tests/008.phpt index c96170d4979b6..c3acf6b86330d 100644 --- a/sapi/cli/tests/008.phpt +++ b/sapi/cli/tests/008.phpt @@ -4,7 +4,7 @@ execute a file with -f --FILE-- diff --git a/sapi/cli/tests/010-2.phpt b/sapi/cli/tests/010-2.phpt index af998351bb76c..1780c3ffd6226 100644 --- a/sapi/cli/tests/010-2.phpt +++ b/sapi/cli/tests/010-2.phpt @@ -4,7 +4,7 @@ executing a code with -R --FILE-- diff --git a/sapi/cli/tests/010.phpt b/sapi/cli/tests/010.phpt index 01b35991369e1..d06007bd55e98 100644 --- a/sapi/cli/tests/010.phpt +++ b/sapi/cli/tests/010.phpt @@ -4,7 +4,7 @@ executing a file with -F --FILE-- diff --git a/sapi/cli/tests/013.phpt b/sapi/cli/tests/013.phpt index 3ca2ba833caa9..0684b8d0573cf 100644 --- a/sapi/cli/tests/013.phpt +++ b/sapi/cli/tests/013.phpt @@ -4,7 +4,7 @@ running PHP code before and after processing input lines with -B and -E --FILE-- diff --git a/sapi/cli/tests/015.phpt b/sapi/cli/tests/015.phpt index 5a5e6c5190d25..b64a5f0d50fae 100644 --- a/sapi/cli/tests/015.phpt +++ b/sapi/cli/tests/015.phpt @@ -4,7 +4,7 @@ CLI long options --FILE-- diff --git a/sapi/cli/tests/016.phpt b/sapi/cli/tests/016.phpt index bbba579ec2b24..bf23affe818e9 100644 --- a/sapi/cli/tests/016.phpt +++ b/sapi/cli/tests/016.phpt @@ -4,7 +4,7 @@ CLI -a and readline --FILE-- diff --git a/sapi/cli/tests/017.phpt b/sapi/cli/tests/017.phpt index 6c9a792476737..344daa7408b59 100644 --- a/sapi/cli/tests/017.phpt +++ b/sapi/cli/tests/017.phpt @@ -4,7 +4,7 @@ CLI -a and libedit --FILE-- diff --git a/sapi/cli/tests/019.phpt b/sapi/cli/tests/019.phpt index 2b8c0f007ecbc..e8404d835e5e7 100644 --- a/sapi/cli/tests/019.phpt +++ b/sapi/cli/tests/019.phpt @@ -4,7 +4,7 @@ CLI php -i --FILE-- diff --git a/sapi/cli/tests/020.phpt b/sapi/cli/tests/020.phpt index 001cf62a3836d..fb7bcb4e7b5f6 100644 --- a/sapi/cli/tests/020.phpt +++ b/sapi/cli/tests/020.phpt @@ -4,7 +4,7 @@ CLI php --ri --FILE-- diff --git a/sapi/cli/tests/021.phpt b/sapi/cli/tests/021.phpt index a5d97c326d563..837f64109d03d 100644 --- a/sapi/cli/tests/021.phpt +++ b/sapi/cli/tests/021.phpt @@ -4,7 +4,7 @@ CLI shell shebang 127) { diff --git a/sapi/cli/tests/argv_mb_bug77111.phpt b/sapi/cli/tests/argv_mb_bug77111.phpt index a2bae24dc3ead..0ed6204b89d79 100644 --- a/sapi/cli/tests/argv_mb_bug77111.phpt +++ b/sapi/cli/tests/argv_mb_bug77111.phpt @@ -5,12 +5,12 @@ Bug #77111 php-win.exe corrupts unicode symbols from cli parameters include "skipif.inc"; if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') { - die("skip this test is for Windows platforms only"); + die("skip this test is for Windows platforms only"); } $php = dirname(getenv('TEST_PHP_EXECUTABLE')) . DIRECTORY_SEPARATOR . "php-win.exe"; if (!file_exists($php)) { - die("skip php-win.exe doesn't exist"); + die("skip php-win.exe doesn't exist"); } ?> diff --git a/sapi/cli/tests/bug44564.phpt b/sapi/cli/tests/bug44564.phpt index 7dca62a7e8e9f..6ef5b9f9507f9 100644 --- a/sapi/cli/tests/bug44564.phpt +++ b/sapi/cli/tests/bug44564.phpt @@ -3,7 +3,7 @@ Bug #44564 (escapeshellarg removes UTF-8 multi-byte characters) --SKIPIF-- --FILE-- diff --git a/sapi/cli/tests/bug64529.phpt b/sapi/cli/tests/bug64529.phpt index ff3e3029e63db..7350cd2046169 100644 --- a/sapi/cli/tests/bug64529.phpt +++ b/sapi/cli/tests/bug64529.phpt @@ -3,14 +3,14 @@ Bug #64529 (Ran out of opcode space) --SKIPIF-- --FILE-- diff --git a/sapi/cli/tests/bug64544.phpt b/sapi/cli/tests/bug64544.phpt index 33a6e16a10c8d..87e8eda64ae0f 100644 --- a/sapi/cli/tests/bug64544.phpt +++ b/sapi/cli/tests/bug64544.phpt @@ -3,7 +3,7 @@ Bug #64544 (Valgrind warnings after using putenv) --SKIPIF-- --FILE-- diff --git a/sapi/cli/tests/bug65275.inc b/sapi/cli/tests/bug65275.inc index 6b8a2ad948e56..addc026322dc5 100644 --- a/sapi/cli/tests/bug65275.inc +++ b/sapi/cli/tests/bug65275.inc @@ -1,7 +1,7 @@ =8"); + die("skip need PHP_INT_SIZE>=8"); } if (disk_free_space(sys_get_temp_dir()) < 2300000000) { - die("skip need more than 2.15G of free disk space for the uploaded file"); + die("skip need more than 2.15G of free disk space for the uploaded file"); } if (!file_exists('/proc/meminfo')) { - die('skip Cannot check free RAM from /proc/meminfo on this platform'); + die('skip Cannot check free RAM from /proc/meminfo on this platform'); } $free_ram = 0; if ($f = fopen("/proc/meminfo","r")) { - while (!feof($f)) { - if (preg_match('/MemFree[^\d]*(\d+)/i', fgets($f), $m)) { - $free_ram = max($free_ram, $m[1]/1024/1024); - if ($free_ram > 3) { - $enough_free_ram = true; - } - } - } + while (!feof($f)) { + if (preg_match('/MemFree[^\d]*(\d+)/i', fgets($f), $m)) { + $free_ram = max($free_ram, $m[1]/1024/1024); + if ($free_ram > 3) { + $enough_free_ram = true; + } + } + } } if (empty($enough_free_ram)) { - die(sprintf("skip need +3G free RAM, but only %01.2f available", $free_ram)); + die(sprintf("skip need +3G free RAM, but only %01.2f available", $free_ram)); } if (getenv('TRAVIS')) { diff --git a/tests/classes/autoload_001.phpt b/tests/classes/autoload_001.phpt index cdea16f689bb7..7fe6757d6859e 100644 --- a/tests/classes/autoload_001.phpt +++ b/tests/classes/autoload_001.phpt @@ -2,7 +2,7 @@ ZE2 Autoload and class_exists --SKIPIF-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- --FILE-- diff --git a/tests/lang/bug30638.phpt b/tests/lang/bug30638.phpt index 24e6609498c21..3eb2c35241442 100644 --- a/tests/lang/bug30638.phpt +++ b/tests/lang/bug30638.phpt @@ -3,7 +3,7 @@ Bug #30638 (localeconv returns wrong LC_NUMERIC settings) (ok to fail on MacOS X --SKIPIF-- = 0) { - echo "skip Only for Windows systems < 10.0.10586"; + echo "skip Only for Windows systems < 10.0.10586"; } ?> --CAPTURE_STDIO-- diff --git a/tests/output/sapi_windows_vt100_support_winko_in-err.phpt b/tests/output/sapi_windows_vt100_support_winko_in-err.phpt index 86cf631110c2d..94e692d01f292 100644 --- a/tests/output/sapi_windows_vt100_support_winko_in-err.phpt +++ b/tests/output/sapi_windows_vt100_support_winko_in-err.phpt @@ -3,15 +3,15 @@ Test sapi_windows_vt100_support on older Windows versions with redirected STDIN/ --SKIPIF-- = 0) { - echo "skip Only for Windows systems < 10.0.10586"; + echo "skip Only for Windows systems < 10.0.10586"; } ?> --CAPTURE_STDIO-- diff --git a/tests/output/sapi_windows_vt100_support_winko_in-out-err.phpt b/tests/output/sapi_windows_vt100_support_winko_in-out-err.phpt index 4c0f5f9909937..11caa432d13e9 100644 --- a/tests/output/sapi_windows_vt100_support_winko_in-out-err.phpt +++ b/tests/output/sapi_windows_vt100_support_winko_in-out-err.phpt @@ -3,15 +3,15 @@ Test sapi_windows_vt100_support on older Windows versions with redirected STDIN/ --SKIPIF-- = 0) { - echo "skip Only for Windows systems < 10.0.10586"; + echo "skip Only for Windows systems < 10.0.10586"; } ?> --CAPTURE_STDIO-- diff --git a/tests/output/sapi_windows_vt100_support_winko_in-out.phpt b/tests/output/sapi_windows_vt100_support_winko_in-out.phpt index 01efb3bb4e36f..fc0429c4b0505 100644 --- a/tests/output/sapi_windows_vt100_support_winko_in-out.phpt +++ b/tests/output/sapi_windows_vt100_support_winko_in-out.phpt @@ -3,15 +3,15 @@ Test sapi_windows_vt100_support on older Windows versions with redirected STDIN/ --SKIPIF-- = 0) { - echo "skip Only for Windows systems < 10.0.10586"; + echo "skip Only for Windows systems < 10.0.10586"; } ?> --CAPTURE_STDIO-- diff --git a/tests/output/sapi_windows_vt100_support_winko_out-err.phpt b/tests/output/sapi_windows_vt100_support_winko_out-err.phpt index 09d3d8f0be40e..ee34be988b0d9 100644 --- a/tests/output/sapi_windows_vt100_support_winko_out-err.phpt +++ b/tests/output/sapi_windows_vt100_support_winko_out-err.phpt @@ -3,15 +3,15 @@ Test sapi_windows_vt100_support on older Windows versions with redirected STDOUT --SKIPIF-- = 0) { - echo "skip Only for Windows systems < 10.0.10586"; + echo "skip Only for Windows systems < 10.0.10586"; } ?> --CAPTURE_STDIO-- diff --git a/tests/output/sapi_windows_vt100_support_winko_out.phpt b/tests/output/sapi_windows_vt100_support_winko_out.phpt index 65958ae19c1f0..3241ba352abd9 100644 --- a/tests/output/sapi_windows_vt100_support_winko_out.phpt +++ b/tests/output/sapi_windows_vt100_support_winko_out.phpt @@ -3,15 +3,15 @@ Test sapi_windows_vt100_support on older Windows versions with redirected STDOUT --SKIPIF-- = 0) { - echo "skip Only for Windows systems < 10.0.10586"; + echo "skip Only for Windows systems < 10.0.10586"; } ?> --CAPTURE_STDIO-- diff --git a/tests/output/sapi_windows_vt100_support_winok_err.phpt b/tests/output/sapi_windows_vt100_support_winok_err.phpt index 01a31a6b927e1..4d7543fdda1ae 100644 --- a/tests/output/sapi_windows_vt100_support_winok_err.phpt +++ b/tests/output/sapi_windows_vt100_support_winok_err.phpt @@ -3,15 +3,15 @@ Test sapi_windows_vt100_support on newer Windows versions with redirected STDERR --SKIPIF-- = 10.0.10586"; + echo "skip Only for Windows systems >= 10.0.10586"; } ?> --CAPTURE_STDIO-- diff --git a/tests/output/sapi_windows_vt100_support_winok_in-err.phpt b/tests/output/sapi_windows_vt100_support_winok_in-err.phpt index d36d79c8dcbf3..e08d558e25acd 100644 --- a/tests/output/sapi_windows_vt100_support_winok_in-err.phpt +++ b/tests/output/sapi_windows_vt100_support_winok_in-err.phpt @@ -3,15 +3,15 @@ Test sapi_windows_vt100_support on newer Windows versions with redirected STDIN/ --SKIPIF-- = 10.0.10586"; + echo "skip Only for Windows systems >= 10.0.10586"; } ?> --CAPTURE_STDIO-- diff --git a/tests/output/sapi_windows_vt100_support_winok_in-out-err.phpt b/tests/output/sapi_windows_vt100_support_winok_in-out-err.phpt index 16066046510bb..285a72f936366 100644 --- a/tests/output/sapi_windows_vt100_support_winok_in-out-err.phpt +++ b/tests/output/sapi_windows_vt100_support_winok_in-out-err.phpt @@ -3,15 +3,15 @@ Test sapi_windows_vt100_support on newer Windows versions with redirected STDIN/ --SKIPIF-- = 10.0.10586"; + echo "skip Only for Windows systems >= 10.0.10586"; } ?> --CAPTURE_STDIO-- diff --git a/tests/output/sapi_windows_vt100_support_winok_in-out.phpt b/tests/output/sapi_windows_vt100_support_winok_in-out.phpt index f67942f603f7a..a84b36534747d 100644 --- a/tests/output/sapi_windows_vt100_support_winok_in-out.phpt +++ b/tests/output/sapi_windows_vt100_support_winok_in-out.phpt @@ -3,15 +3,15 @@ Test sapi_windows_vt100_support on newer Windows versions with redirected STDIN/ --SKIPIF-- = 10.0.10586"; + echo "skip Only for Windows systems >= 10.0.10586"; } ?> --CAPTURE_STDIO-- diff --git a/tests/output/sapi_windows_vt100_support_winok_out-err.phpt b/tests/output/sapi_windows_vt100_support_winok_out-err.phpt index ebc6bcb120566..f3f49aa618f46 100644 --- a/tests/output/sapi_windows_vt100_support_winok_out-err.phpt +++ b/tests/output/sapi_windows_vt100_support_winok_out-err.phpt @@ -3,15 +3,15 @@ Test sapi_windows_vt100_support on newer Windows versions with redirected STDOUT --SKIPIF-- = 10.0.10586"; + echo "skip Only for Windows systems >= 10.0.10586"; } ?> --CAPTURE_STDIO-- diff --git a/tests/output/sapi_windows_vt100_support_winok_out.phpt b/tests/output/sapi_windows_vt100_support_winok_out.phpt index 94a5f20a1bfb9..7fc5ae142b6c3 100644 --- a/tests/output/sapi_windows_vt100_support_winok_out.phpt +++ b/tests/output/sapi_windows_vt100_support_winok_out.phpt @@ -3,15 +3,15 @@ Test sapi_windows_vt100_support on newer Windows versions with redirected STDOUT --SKIPIF-- = 10.0.10586"; + echo "skip Only for Windows systems >= 10.0.10586"; } ?> --CAPTURE_STDIO-- diff --git a/tests/output/stream_isatty_err.phpt b/tests/output/stream_isatty_err.phpt index e7c10383506d3..c0487392810bd 100644 --- a/tests/output/stream_isatty_err.phpt +++ b/tests/output/stream_isatty_err.phpt @@ -3,7 +3,7 @@ Test stream_isatty with redirected STDERR --SKIPIF-- --CAPTURE_STDIO-- diff --git a/tests/output/stream_isatty_in-err.phpt b/tests/output/stream_isatty_in-err.phpt index 73514955d43c9..8c10baae8039b 100644 --- a/tests/output/stream_isatty_in-err.phpt +++ b/tests/output/stream_isatty_in-err.phpt @@ -3,7 +3,7 @@ Test stream_isatty with redirected STDIN/STDERR --SKIPIF-- --CAPTURE_STDIO-- diff --git a/tests/output/stream_isatty_in-out-err.phpt b/tests/output/stream_isatty_in-out-err.phpt index 9b65e8861b86b..851327ead8024 100644 --- a/tests/output/stream_isatty_in-out-err.phpt +++ b/tests/output/stream_isatty_in-out-err.phpt @@ -3,7 +3,7 @@ Test stream_isatty with redirected STDIN/STDOUT/STDERR --SKIPIF-- --CAPTURE_STDIO-- diff --git a/tests/output/stream_isatty_in-out.phpt b/tests/output/stream_isatty_in-out.phpt index c2bb346854f4f..19fa8552b8b0a 100644 --- a/tests/output/stream_isatty_in-out.phpt +++ b/tests/output/stream_isatty_in-out.phpt @@ -3,7 +3,7 @@ Test stream_isatty with redirected STDIN/STDOUT --SKIPIF-- --CAPTURE_STDIO-- diff --git a/tests/output/stream_isatty_out-err.phpt b/tests/output/stream_isatty_out-err.phpt index dc113a972060e..e080810ae8af0 100644 --- a/tests/output/stream_isatty_out-err.phpt +++ b/tests/output/stream_isatty_out-err.phpt @@ -3,7 +3,7 @@ Test stream_isatty with redirected STDOUT/STDERR --SKIPIF-- --CAPTURE_STDIO-- diff --git a/tests/output/stream_isatty_out.phpt b/tests/output/stream_isatty_out.phpt index f18c986c5abf6..80db5095103dd 100644 --- a/tests/output/stream_isatty_out.phpt +++ b/tests/output/stream_isatty_out.phpt @@ -3,7 +3,7 @@ Test stream_isatty with redirected STDOUT --SKIPIF-- --CAPTURE_STDIO-- diff --git a/tests/run-test/bug75042.phpt b/tests/run-test/bug75042.phpt index af3005372bbb7..a7979d6b5ed6e 100644 --- a/tests/run-test/bug75042.phpt +++ b/tests/run-test/bug75042.phpt @@ -4,7 +4,7 @@ phpt EXTENSIONS directive with shared module Date: Fri, 18 Sep 2020 14:26:34 +0200 Subject: [PATCH 51/67] Use MyISAM engine for new test Travis on 7.3 is showing this error: > The size of BLOB/TEXT data inserted in one transaction is greater > than 10% of redo log size. Increase the redo log size using > innodb_log_file_size. Force MyISAM engine to avoid this. --- ext/mysqli/tests/mysqli_real_connect_compression_error.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/mysqli/tests/mysqli_real_connect_compression_error.phpt b/ext/mysqli/tests/mysqli_real_connect_compression_error.phpt index df0e4dc73bd38..5a5c2658038e1 100644 --- a/ext/mysqli/tests/mysqli_real_connect_compression_error.phpt +++ b/ext/mysqli/tests/mysqli_real_connect_compression_error.phpt @@ -26,7 +26,7 @@ $data_size = 16777174; $mysqli = mysqli_init(); $result = my_mysqli_real_connect($mysqli, $host, $user, $passwd, $db, $port, $socket); $mysqli->query("DROP TABLE IF EXISTS test"); -$mysqli->query("CREATE TABLE test (`blob` LONGBLOB NOT NULL)"); +$mysqli->query("CREATE TABLE test (`blob` LONGBLOB NOT NULL) ENGINE=MyISAM"); $data = str_repeat("x", $data_size); $mysqli->query("INSERT INTO $db.test(`blob`) VALUE ('$data')"); From 64547664cb2ea832cc6190fe087da850d1908ac7 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 18 Sep 2020 12:25:29 +0200 Subject: [PATCH 52/67] Assert that all switch cases are covered --- ext/mysqli/mysqli.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 64601e66b4eda..9eb1885ea6ffb 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -1094,6 +1094,7 @@ void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES * result, zend case 3:llval = (my_ulonglong) bit_uint3korr(row[i]);break; case 2:llval = (my_ulonglong) bit_uint2korr(row[i]);break; case 1:llval = (my_ulonglong) uint1korr(row[i]);break; + EMPTY_SWITCH_DEFAULT_CASE() } /* even though lval is declared as unsigned, the value * may be negative. Therefor we cannot use MYSQLI_LLU_SPEC and must From 74d16999fc7cd5cf778547d796f5ac8e761b8518 Mon Sep 17 00:00:00 2001 From: Dharman Date: Wed, 16 Sep 2020 14:20:03 +0100 Subject: [PATCH 53/67] mysqli_set_charset now throws an mysqli_sql_exception when incorrect charset is provided Closes GH-6142. --- ext/mysqli/mysqli_nonapi.c | 1 + ext/mysqli/tests/mysqli_set_charset.phpt | 18 +++++++++++++++++- ext/mysqlnd/mysqlnd_connection.c | 7 ++----- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 03e975462e6ff..b3aae572e93d4 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -1040,6 +1040,7 @@ PHP_FUNCTION(mysqli_set_charset) MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); if (mysql_set_character_set(mysql->mysql, cs_name)) { + MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE; } RETURN_TRUE; diff --git a/ext/mysqli/tests/mysqli_set_charset.phpt b/ext/mysqli/tests/mysqli_set_charset.phpt index 30bbb1410f6ca..e9373a44dbdfe 100644 --- a/ext/mysqli/tests/mysqli_set_charset.phpt +++ b/ext/mysqli/tests/mysqli_set_charset.phpt @@ -101,6 +101,20 @@ if ((($res = mysqli_query($link, 'SHOW CHARACTER SET LIKE "latin1"', MYSQLI_STOR } mysqli_free_result($res); + // Make sure that set_charset throws an exception in exception mode + mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); + try { + $link->set_charset('invalid'); + } catch (\mysqli_sql_exception $exception) { + echo "Exception: " . $exception->getMessage() . "\n"; + } + + try { + $link->set_charset('ucs2'); + } catch (\mysqli_sql_exception $exception) { + echo "Exception: " . $exception->getMessage() . "\n"; + } + mysqli_close($link); try { @@ -115,6 +129,8 @@ if ((($res = mysqli_query($link, 'SHOW CHARACTER SET LIKE "latin1"', MYSQLI_STOR ---EXPECT-- +--EXPECTF-- +Exception: %s +Exception: Variable 'character_set_client' can't be set to the value of 'ucs2' mysqli object is already closed done! diff --git a/ext/mysqlnd/mysqlnd_connection.c b/ext/mysqlnd/mysqlnd_connection.c index 252c05f676dd2..9f34c0407004b 100644 --- a/ext/mysqlnd/mysqlnd_connection.c +++ b/ext/mysqlnd/mysqlnd_connection.c @@ -1152,8 +1152,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, set_charset)(MYSQLND_CONN_DATA * const conn, c DBG_INF_FMT("conn=%llu cs=%s", conn->thread_id, csname); if (!charset) { - SET_CLIENT_ERROR(conn->error_info, CR_CANT_FIND_CHARSET, UNKNOWN_SQLSTATE, - "Invalid characterset or character set not supported"); + SET_CLIENT_ERROR(conn->error_info, CR_CANT_FIND_CHARSET, UNKNOWN_SQLSTATE, "Invalid character set was provided"); DBG_RETURN(ret); } @@ -1161,9 +1160,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, set_charset)(MYSQLND_CONN_DATA * const conn, c char * query; size_t query_len = mnd_sprintf(&query, 0, "SET NAMES %s", csname); - if (FAIL == (ret = conn->m->query(conn, query, query_len))) { - php_error_docref(NULL, E_WARNING, "Error executing query"); - } else if (conn->error_info->error_no) { + if (FAIL == (ret = conn->m->query(conn, query, query_len)) || conn->error_info->error_no) { ret = FAIL; } else { conn->charset = charset; From 70cba36fc92c1e75c5b0f9ebd1f97a68c26c170a Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 18 Sep 2020 10:29:28 +0200 Subject: [PATCH 54/67] Support NO_BACKSLASH_ESCAPES with newer libmysqlclient Requires the use of mysql_real_escape_string_quote(). --- ext/mysqli/mysqli_api.c | 7 ++++++- ext/pdo_mysql/mysql_driver.c | 9 +++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 0c17e1599e233..7d8682253cd93 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -1954,6 +1954,11 @@ PHP_FUNCTION(mysqli_real_query) } /* }}} */ +#if defined(PDO_USE_MYSQLND) || MYSQL_VERSION_ID < 50707 || defined(MARIADB_BASE_VERSION) +# define mysql_real_escape_string_quote(mysql, to, from, length, quote) \ + mysql_real_escape_string(mysql, to, from, length) +#endif + /* {{{ proto string mysqli_real_escape_string(object link, string escapestr) Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection */ PHP_FUNCTION(mysqli_real_escape_string) { @@ -1969,7 +1974,7 @@ PHP_FUNCTION(mysqli_real_escape_string) { MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); newstr = zend_string_alloc(2 * escapestr_len, 0); - ZSTR_LEN(newstr) = mysql_real_escape_string(mysql->mysql, ZSTR_VAL(newstr), escapestr, escapestr_len); + ZSTR_LEN(newstr) = mysql_real_escape_string_quote(mysql->mysql, ZSTR_VAL(newstr), escapestr, escapestr_len, '\''); newstr = zend_string_truncate(newstr, ZSTR_LEN(newstr), 0); RETURN_NEW_STR(newstr); diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c index 0d8c77d351bfc..becd6b94875bb 100644 --- a/ext/pdo_mysql/mysql_driver.c +++ b/ext/pdo_mysql/mysql_driver.c @@ -293,6 +293,11 @@ static char *pdo_mysql_last_insert_id(pdo_dbh_t *dbh, const char *name, size_t * } /* }}} */ +#if defined(PDO_USE_MYSQLND) || MYSQL_VERSION_ID < 50707 || defined(MARIADB_BASE_VERSION) +# define mysql_real_escape_string_quote(mysql, to, from, length, quote) \ + mysql_real_escape_string(mysql, to, from, length) +#endif + /* {{{ mysql_handle_quoter */ static int mysql_handle_quoter(pdo_dbh_t *dbh, const char *unquoted, size_t unquotedlen, char **quoted, size_t *quotedlen, enum pdo_param_type paramtype ) { @@ -315,13 +320,13 @@ static int mysql_handle_quoter(pdo_dbh_t *dbh, const char *unquoted, size_t unqu *quoted = safe_emalloc(2, unquotedlen, 3 + (use_national_character_set ? 1 : 0)); if (use_national_character_set) { - *quotedlen = mysql_real_escape_string(H->server, *quoted + 2, unquoted, unquotedlen); + *quotedlen = mysql_real_escape_string_quote(H->server, *quoted + 2, unquoted, unquotedlen, '\''); (*quoted)[0] = 'N'; (*quoted)[1] = '\''; ++*quotedlen; /* N prefix */ } else { - *quotedlen = mysql_real_escape_string(H->server, *quoted + 1, unquoted, unquotedlen); + *quotedlen = mysql_real_escape_string_quote(H->server, *quoted + 1, unquoted, unquotedlen, '\''); (*quoted)[0] = '\''; } From 740f0f616521c5e257f2e9923dadfde3a8352f48 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 21 Jul 2020 16:23:14 +1000 Subject: [PATCH 55/67] Fix #78179: mysqli/mysqlnd transaction extensions MariaDB versioning created a mess with regarding testing features based on version. We sidestep the problem here by assuming the extensions are present, and if a syntax error occurs with a SQL mode TRANS_START_READ_WRITE | TRANS_START_READ_ONLY enabled, then output the same warning as before. --- ext/mysqli/mysqli_nonapi.c | 50 +++++++++++++++----------------- ext/mysqlnd/mysqlnd_connection.c | 30 +++++++++---------- 2 files changed, 38 insertions(+), 42 deletions(-) diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 3d0240183a8dd..b0b554d85c4ae 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -1086,45 +1086,43 @@ extern char * mysqli_escape_string_for_tx_name_in_comment(const char * const nam static int mysqli_begin_transaction_libmysql(MYSQL * conn, const unsigned int mode, const char * const name) { int ret; - zend_bool err = FALSE; smart_str tmp_str = {0}; + char * name_esc; + char * query; + unsigned int query_len; if (mode & TRANS_START_WITH_CONSISTENT_SNAPSHOT) { if (tmp_str.s) { smart_str_appendl(&tmp_str, ", ", sizeof(", ") - 1); } smart_str_appendl(&tmp_str, "WITH CONSISTENT SNAPSHOT", sizeof("WITH CONSISTENT SNAPSHOT") - 1); } - if (mode & (TRANS_START_READ_WRITE | TRANS_START_READ_ONLY)) { - if (mysql_get_server_version(conn) < 50605L) { - php_error_docref(NULL, E_WARNING, "This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required"); - err = TRUE; - } else if (mode & TRANS_START_READ_WRITE) { - if (tmp_str.s) { - smart_str_appendl(&tmp_str, ", ", sizeof(", ") - 1); - } - smart_str_appendl(&tmp_str, "READ WRITE", sizeof("READ WRITE") - 1); - } else if (mode & TRANS_START_READ_ONLY) { - if (tmp_str.s) { - smart_str_appendl(&tmp_str, ", ", sizeof(", ") - 1); - } - smart_str_appendl(&tmp_str, "READ ONLY", sizeof("READ ONLY") - 1); + if (mode & TRANS_START_READ_WRITE) { + if (tmp_str.s) { + smart_str_appendl(&tmp_str, ", ", sizeof(", ") - 1); } + smart_str_appendl(&tmp_str, "READ WRITE", sizeof("READ WRITE") - 1); + } else if (mode & TRANS_START_READ_ONLY) { + if (tmp_str.s) { + smart_str_appendl(&tmp_str, ", ", sizeof(", ") - 1); + } + smart_str_appendl(&tmp_str, "READ ONLY", sizeof("READ ONLY") - 1); } smart_str_0(&tmp_str); - if (err == FALSE){ - char * name_esc = mysqli_escape_string_for_tx_name_in_comment(name); - char * query; - unsigned int query_len = spprintf(&query, 0, "START TRANSACTION%s %s", - name_esc? name_esc:"", tmp_str.s? ZSTR_VAL(tmp_str.s):""); + name_esc = mysqli_escape_string_for_tx_name_in_comment(name); + query_len = spprintf(&query, 0, "START TRANSACTION%s %s", + name_esc? name_esc:"", tmp_str.s? ZSTR_VAL(tmp_str.s):""); - smart_str_free(&tmp_str); - if (name_esc) { - efree(name_esc); - } + smart_str_free(&tmp_str); + if (name_esc) { + efree(name_esc); + } + + ret = mysql_real_query(conn, query, query_len); + efree(query); - ret = mysql_real_query(conn, query, query_len); - efree(query); + if (ret && mode & (TRANS_START_READ_WRITE | TRANS_START_READ_ONLY) && mysql_errno(conn) == 1064) { + php_error_docref(NULL, E_WARNING, "This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required"); } return ret; } diff --git a/ext/mysqlnd/mysqlnd_connection.c b/ext/mysqlnd/mysqlnd_connection.c index dba65c0954c93..2cd86dcf665d5 100644 --- a/ext/mysqlnd/mysqlnd_connection.c +++ b/ext/mysqlnd/mysqlnd_connection.c @@ -2131,23 +2131,16 @@ MYSQLND_METHOD(mysqlnd_conn_data, tx_begin)(MYSQLND_CONN_DATA * conn, const unsi } smart_str_appendl(&tmp_str, "WITH CONSISTENT SNAPSHOT", sizeof("WITH CONSISTENT SNAPSHOT") - 1); } - if (mode & (TRANS_START_READ_WRITE | TRANS_START_READ_ONLY)) { - zend_ulong server_version = conn->m->get_server_version(conn); - if (server_version < 50605L) { - php_error_docref(NULL, E_WARNING, "This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required"); - smart_str_free(&tmp_str); - break; - } else if (mode & TRANS_START_READ_WRITE) { - if (tmp_str.s && ZSTR_LEN(tmp_str.s)) { - smart_str_appendl(&tmp_str, ", ", sizeof(", ") - 1); - } - smart_str_appendl(&tmp_str, "READ WRITE", sizeof("READ WRITE") - 1); - } else if (mode & TRANS_START_READ_ONLY) { - if (tmp_str.s && ZSTR_LEN(tmp_str.s)) { - smart_str_appendl(&tmp_str, ", ", sizeof(", ") - 1); - } - smart_str_appendl(&tmp_str, "READ ONLY", sizeof("READ ONLY") - 1); + if (mode & TRANS_START_READ_WRITE) { + if (tmp_str.s && ZSTR_LEN(tmp_str.s)) { + smart_str_appendl(&tmp_str, ", ", sizeof(", ") - 1); } + smart_str_appendl(&tmp_str, "READ WRITE", sizeof("READ WRITE") - 1); + } else if (mode & TRANS_START_READ_ONLY) { + if (tmp_str.s && ZSTR_LEN(tmp_str.s)) { + smart_str_appendl(&tmp_str, ", ", sizeof(", ") - 1); + } + smart_str_appendl(&tmp_str, "READ ONLY", sizeof("READ ONLY") - 1); } smart_str_0(&tmp_str); @@ -2166,6 +2159,11 @@ MYSQLND_METHOD(mysqlnd_conn_data, tx_begin)(MYSQLND_CONN_DATA * conn, const unsi } ret = conn->m->query(conn, query, query_len); mnd_sprintf_free(query); + if (ret && mode & (TRANS_START_READ_WRITE | TRANS_START_READ_ONLY) && + mysqlnd_stmt_errno(conn) == 1064) { + php_error_docref(NULL, E_WARNING, "This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required"); + break; + } } } while (0); conn->m->local_tx_end(conn, this_func, ret); From 2d002258b800ee92dc99d577304e5f09fbb629b4 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 18 Sep 2020 15:49:35 +0200 Subject: [PATCH 56/67] Drop skipifemb.inc And drop the last remaining uses of it. --- ext/mysqli/tests/gracefull_fail_on_empty_result_set.phpt | 1 - ext/mysqli/tests/mysqli_driver_unclonable.phpt | 1 - ext/mysqli/tests/mysqli_get_client_version.phpt | 1 - ext/mysqli/tests/mysqli_options_init_command.phpt | 1 - ext/mysqli/tests/mysqli_real_connect_compression_error.phpt | 1 - ext/mysqli/tests/mysqli_result_references_mysqlnd.phpt | 3 +-- ext/mysqli/tests/skipifemb.inc | 5 ----- 7 files changed, 1 insertion(+), 12 deletions(-) delete mode 100644 ext/mysqli/tests/skipifemb.inc diff --git a/ext/mysqli/tests/gracefull_fail_on_empty_result_set.phpt b/ext/mysqli/tests/gracefull_fail_on_empty_result_set.phpt index 452cb7d8f730e..d2894f2c0d416 100644 --- a/ext/mysqli/tests/gracefull_fail_on_empty_result_set.phpt +++ b/ext/mysqli/tests/gracefull_fail_on_empty_result_set.phpt @@ -3,7 +3,6 @@ Fail gracefully on empty result set --SKIPIF-- --FILE-- diff --git a/ext/mysqli/tests/mysqli_driver_unclonable.phpt b/ext/mysqli/tests/mysqli_driver_unclonable.phpt index 98559f46fc2be..c51d5d5245b30 100644 --- a/ext/mysqli/tests/mysqli_driver_unclonable.phpt +++ b/ext/mysqli/tests/mysqli_driver_unclonable.phpt @@ -2,7 +2,6 @@ Trying to clone mysqli_driver object --SKIPIF-- - --FILE-- - --FILE-- - --FILE-- +?> --FILE-- embedded) - die("skip test doesn't run with embedded server"); -?> From 19314ff8874e7c0a04a97acf342341938c0ffa6c Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 17 Sep 2020 15:55:44 +0200 Subject: [PATCH 57/67] Fix some tests for libmysql --- ext/mysqli/tests/bug66043.phpt | 29 +++++++++++++++---- ext/mysqli/tests/bug73800.phpt | 1 + ext/mysqli/tests/bug77597.phpt | 1 + ...ysqli_class_mysqli_properties_no_conn.phpt | 4 +-- ext/mysqli/tests/mysqli_kill.phpt | 4 +-- .../tests/mysqli_store_result_buffered_c.phpt | 5 ++-- .../tests/pdo_mysql___construct_uri.phpt | 1 + .../tests/pdo_mysql_class_constants.phpt | 2 +- 8 files changed, 35 insertions(+), 12 deletions(-) diff --git a/ext/mysqli/tests/bug66043.phpt b/ext/mysqli/tests/bug66043.phpt index 07714f217a5d2..6b479a45ed01b 100644 --- a/ext/mysqli/tests/bug66043.phpt +++ b/ext/mysqli/tests/bug66043.phpt @@ -3,10 +3,6 @@ Bug #66043 (Segfault calling bind_param() on mysqli) --SKIPIF-- --FILE-- @@ -16,11 +12,34 @@ if (!$db = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { printf("[001] Connect failed, [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); } +if (!$db->query("DROP TABLE IF EXISTS test")) { + printf("[002] [%d] %s\n", mysqli_errno($db), mysqli_error($db)); + die(); +} + +if (!$db->query("CREATE TABLE test(str TEXT)")) { + printf("[003] [%d] %s\n", mysqli_errno($db), mysqli_error($db)); + die(); +} + +if (!$db->query("INSERT INTO test(str) VALUES ('Test')")) { + printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + die(); +} + $stmt = $db->stmt_init(); -$stmt->prepare("SELECT User FROM user WHERE password=\"\""); +if (!$stmt->prepare("SELECT str FROM test")) { + printf("[004] [%d] %s\n", mysqli_errno($db), mysqli_error($db)); + die(); +} + $stmt->execute(); $stmt->bind_result($testArg); echo "Okey"; ?> +--CLEAN-- + --EXPECT-- Okey diff --git a/ext/mysqli/tests/bug73800.phpt b/ext/mysqli/tests/bug73800.phpt index af601c6e60364..af3a5c8cfb4e3 100644 --- a/ext/mysqli/tests/bug73800.phpt +++ b/ext/mysqli/tests/bug73800.phpt @@ -5,6 +5,7 @@ Bug #73800 (sporadic segfault with MYSQLI_OPT_INT_AND_FLOAT_NATIVE) require_once('skipif.inc'); require_once('skipifconnectfailure.inc'); if (PHP_INT_SIZE != 8) die('skip requires 64-bit'); +if (!defined('MYSQLI_OPT_INT_AND_FLOAT_NATIVE')) die('skip requires mysqlnd'); ?> --FILE-- --FILE-- client_version = '80000'/integer +mysqli->client_version = '%d'/integer mysqli object is already closed mysqli object is already closed mysqli object is already closed @@ -366,7 +366,7 @@ Magic, magic properties: mysqli object is already closed Property access is not allowed yet Property access is not allowed yet -mysqli->client_version = '80000'/integer +mysqli->client_version = '%d'/integer mysqli object is already closed mysqli object is already closed mysqli object is already closed diff --git a/ext/mysqli/tests/mysqli_kill.phpt b/ext/mysqli/tests/mysqli_kill.phpt index d1301ac550fa6..40ca9eaa1af96 100644 --- a/ext/mysqli/tests/mysqli_kill.phpt +++ b/ext/mysqli/tests/mysqli_kill.phpt @@ -95,7 +95,7 @@ object(mysqli)#%d (%d) { ["connect_error"]=> NULL ["errno"]=> - int(2006) + int(%d) ["error"]=> string(%d) "%s" ["error_list"]=> @@ -103,7 +103,7 @@ object(mysqli)#%d (%d) { [0]=> array(3) { ["errno"]=> - int(2006) + int(%d) ["sqlstate"]=> string(5) "%s" ["error"]=> diff --git a/ext/mysqli/tests/mysqli_store_result_buffered_c.phpt b/ext/mysqli/tests/mysqli_store_result_buffered_c.phpt index 6fa69005d27b4..70a864270d9af 100644 --- a/ext/mysqli/tests/mysqli_store_result_buffered_c.phpt +++ b/ext/mysqli/tests/mysqli_store_result_buffered_c.phpt @@ -4,9 +4,10 @@ mysqli_store_result() ---INI-- -mysqlnd.debug="d:t:O,{TMP}/mysqlnd.trace" --FILE-- true, "MYSQL_ATTR_COMPRESS" => true, "MYSQL_ATTR_MULTI_STATEMENTS" => true, - "MYSQL_ATTR_SSL_VERIFY_SERVER_CERT" => true, ); if (!MySQLPDOTest::isPDOMySQLnd()) { @@ -37,6 +36,7 @@ if (!extension_loaded('mysqli') && !extension_loaded('mysqlnd')) { } if (extension_loaded('mysqlnd')) { + $expected['MYSQL_ATTR_SSL_VERIFY_SERVER_CERT'] = true; $expected['MYSQL_ATTR_SERVER_PUBLIC_KEY'] = true; } else if (extension_loaded('mysqli')) { if (mysqli_get_client_version() > 50605) { From ef9359d30fe3e26de86fd6790d273612c2488dd7 Mon Sep 17 00:00:00 2001 From: George Peter Banyard Date: Thu, 17 Sep 2020 17:22:01 +0200 Subject: [PATCH 58/67] Set-up IMAP in Azure Closes GH-6162 --- azure/apt.yml | 1 + azure/configure.yml | 3 +++ azure/setup.yml | 8 ++++++++ ext/imap/tests/bug75774.phpt | 9 ++++----- ext/imap/tests/dovecot.conf | 33 +++++++++++++++++++++++++++++++++ ext/imap/tests/dovecotpass | 1 + ext/imap/tests/imap_include.inc | 2 +- ext/imap/tests/setup.sh | 6 ++++++ ext/imap/tests/skipif.inc | 2 +- 9 files changed, 58 insertions(+), 7 deletions(-) create mode 100644 ext/imap/tests/dovecot.conf create mode 100644 ext/imap/tests/dovecotpass create mode 100644 ext/imap/tests/setup.sh diff --git a/azure/apt.yml b/azure/apt.yml index bd3ba3308e01b..71f58ce8da2ad 100644 --- a/azure/apt.yml +++ b/azure/apt.yml @@ -42,5 +42,6 @@ steps: snmp-mibs-downloader \ unixodbc-dev \ llvm \ + libc-client-dev libkrb5-dev dovecot-core dovecot-pop3d dovecot-imapd \ ${{ parameters.packages }} displayName: 'APT' diff --git a/azure/configure.yml b/azure/configure.yml index dc7f754eae425..0bfbf6d92e0ec 100644 --- a/azure/configure.yml +++ b/azure/configure.yml @@ -58,6 +58,9 @@ steps: --enable-dba \ --with-snmp \ --with-unixODBC \ + --with-imap \ + --with-kerberos \ + --with-imap-ssl \ --enable-werror \ --with-config-file-path=/etc \ --with-config-file-scan-dir=/etc/php.d diff --git a/azure/setup.yml b/azure/setup.yml index 825ca4d5f6c01..e0b4dc79da991 100644 --- a/azure/setup.yml +++ b/azure/setup.yml @@ -16,4 +16,12 @@ steps: sudo cp ext/snmp/tests/bigtest /etc/snmp sudo service snmpd restart displayName: 'Configure snmpd' + - script: | + set -e + sudo groupadd -g 5000 vmail + sudo useradd -m -d /var/vmail -s /bin/false -u 5000 -g vmail vmail + sudo cp ext/imap/tests/dovecot.conf /etc/dovecot/dovecot.conf + sudo cp ext/imap/tests/dovecotpass /etc/dovecot/dovecotpass + sudo service dovecot restart + displayName: 'Configure IMAP' diff --git a/ext/imap/tests/bug75774.phpt b/ext/imap/tests/bug75774.phpt index 42f5a842c3469..08883ad8f0ab5 100644 --- a/ext/imap/tests/bug75774.phpt +++ b/ext/imap/tests/bug75774.phpt @@ -8,12 +8,12 @@ extension_loaded('imap') or die('skip imap extension not available in this build getMessage() . "\n"; +} catch (\TypeError $e) { + echo $e->getMessage() . "\n"; } fclose($var1); @@ -22,5 +22,4 @@ unlink($fn); ?> --EXPECTF-- Warning: imap_append(): Internal date not correctly formatted in %s on line %d - -Exception: imap_append(): Supplied resource is not a valid imap resource +imap_append(): supplied resource is not a valid imap resource diff --git a/ext/imap/tests/dovecot.conf b/ext/imap/tests/dovecot.conf new file mode 100644 index 0000000000000..c465ba3ce9121 --- /dev/null +++ b/ext/imap/tests/dovecot.conf @@ -0,0 +1,33 @@ +# 2.2.33.2 (d6601f4ec): /etc/dovecot/dovecot.conf +# Pigeonhole version 0.4.21 (92477967) +listen = *, :: + +# To make authentication work +ssl = no +disable_plaintext_auth = no + +auth_mechanisms = plain cram-md5 +auth_username_format = %u +auth_debug = yes +auth_verbose = yes +#log +log_path = /var/log/dovecot.log +# If not set, use the value from log_path +info_log_path = /var/log/dovecot-info.log +# If not set, use the value from info_log_path +debug_log_path = /var/log/dovecot-debug.log +## Mailbox locations and namespaces +mail_location = maildir:/var/vmail/dovecot/mail/%d/%n/Maildir +passdb { + args = scheme=cram-md5 /etc/dovecot/dovecotpass + driver = passwd-file +} +protocols = imap +service auth { + user = root +} +userdb { + args = /etc/dovecot/dovecotpass + driver = passwd-file + override_fields = home=/var/vmail/dovecot/mail/%d/%n +} diff --git a/ext/imap/tests/dovecotpass b/ext/imap/tests/dovecotpass new file mode 100644 index 0000000000000..86a069fc4f699 --- /dev/null +++ b/ext/imap/tests/dovecotpass @@ -0,0 +1 @@ +webmaster@something.com:{CRAM-MD5}be5f3177e9c7c06403272f25d983ba630df4ef40476b353bb3087a8401713451:vmail:vmail diff --git a/ext/imap/tests/imap_include.inc b/ext/imap/tests/imap_include.inc index 7de634075a295..e57d6516979f2 100644 --- a/ext/imap/tests/imap_include.inc +++ b/ext/imap/tests/imap_include.inc @@ -1,6 +1,6 @@ Date: Fri, 18 Sep 2020 15:34:37 +0200 Subject: [PATCH 59/67] Fix IMAP tests Drop various ZPP checks and make them PASS Add CONFLICT file as the tests all hit the same mailbox --- ext/imap/tests/CONFLICTS | 1 + ext/imap/tests/imap_body.phpt | 18 +-------------- .../tests/imap_fetch_overview_variation3.phpt | 2 +- ext/imap/tests/imap_fetchbody_variation6.phpt | 16 ++++--------- .../tests/imap_fetchheader_variation5.phpt | 23 ++++--------------- ext/imap/tests/imap_fetchstructure_basic.phpt | 19 +-------------- ext/imap/tests/imap_gc_error.phpt | 15 ------------ ext/imap/tests/imap_getsubscribed_basic.phpt | 20 ---------------- ext/imap/tests/imap_list_basic.phpt | 20 ---------------- ext/imap/tests/imap_lsub_basic.phpt | 20 ---------------- ext/imap/tests/imap_open_error.phpt | 17 -------------- ext/imap/tests/imap_renamemailbox_basic.phpt | 22 ------------------ ext/imap/tests/imap_savebody_basic.phpt | 20 +--------------- ext/imap/tests/imap_timeout_basic.phpt | 12 ---------- 14 files changed, 13 insertions(+), 212 deletions(-) create mode 100644 ext/imap/tests/CONFLICTS diff --git a/ext/imap/tests/CONFLICTS b/ext/imap/tests/CONFLICTS new file mode 100644 index 0000000000000..c301c0ffaca1d --- /dev/null +++ b/ext/imap/tests/CONFLICTS @@ -0,0 +1 @@ +imap diff --git a/ext/imap/tests/imap_body.phpt b/ext/imap/tests/imap_body.phpt index a4e8069d040d9..4d4133c343fc7 100644 --- a/ext/imap/tests/imap_body.phpt +++ b/ext/imap/tests/imap_body.phpt @@ -9,16 +9,11 @@ require_once(__DIR__.'/skipif.inc'); ?> --FILE-- --EXPECTF-- -Checking with no parameters - -Warning: imap_body() expects at least 2 parameters, 0 given in %s on line %d -Checking with incorrect parameter type - -Warning: imap_body() expects at least 2 parameters, 1 given in %s on line %d - -Warning: imap_body() expects at least 2 parameters, 1 given in %s on line %d - -Warning: imap_body() expects at least 2 parameters, 1 given in %s on line %d - Warning: imap_body(): Bad message number in %s on line %d Warning: imap_body(): Invalid value for the options parameter in %s on line %d diff --git a/ext/imap/tests/imap_fetch_overview_variation3.phpt b/ext/imap/tests/imap_fetch_overview_variation3.phpt index 13b5591dc5b0e..419de4c95152f 100644 --- a/ext/imap/tests/imap_fetch_overview_variation3.phpt +++ b/ext/imap/tests/imap_fetch_overview_variation3.phpt @@ -58,7 +58,7 @@ imap_fetch_overview() returns an object Testing with option value:bool(true) imap_fetch_overview() returns an object -Testing with option value:float(1) +Testing with option value:float(1.000000000000001) imap_fetch_overview() returns an object Testing with option value:float(1) diff --git a/ext/imap/tests/imap_fetchbody_variation6.phpt b/ext/imap/tests/imap_fetchbody_variation6.phpt index 20ac49edc8a38..75516f8381454 100644 --- a/ext/imap/tests/imap_fetchbody_variation6.phpt +++ b/ext/imap/tests/imap_fetchbody_variation6.phpt @@ -19,9 +19,7 @@ require_once(__DIR__.'/imap_include.inc'); $stream_id = setup_test_mailbox('', 3); // set up temp mailbox with simple msgs $section = 1; -$sequences = array (0, 4, // out of range - '1,3', '1:3', // message sequences instead of numbers - ); +$sequences = [0, /* out of range */ 4, 1]; foreach($sequences as $msg_no) { echo "\n-- \$msg_no is $msg_no --\n"; @@ -52,12 +50,6 @@ Warning: imap_fetchbody(): Bad message number in %s on line %d bool(false) --- $msg_no is 1,3 -- - -Notice: A non well formed numeric value encountered in %s on line %d -string(%d) "1: this is a test message, please ignore%a" - --- $msg_no is 1:3 -- - -Notice: A non well formed numeric value encountered in %s on line %d -string(%d) "1: this is a test message, please ignore%a" +-- $msg_no is 1 -- +string(42) "1: this is a test message, please ignore +" diff --git a/ext/imap/tests/imap_fetchheader_variation5.phpt b/ext/imap/tests/imap_fetchheader_variation5.phpt index 7ff8ca697e777..2283861df8e8a 100644 --- a/ext/imap/tests/imap_fetchheader_variation5.phpt +++ b/ext/imap/tests/imap_fetchheader_variation5.phpt @@ -17,9 +17,7 @@ require_once(__DIR__.'/imap_include.inc'); $stream_id = setup_test_mailbox('', 3, $mailbox, 'notSimple'); // set up temp mailbox with 3 msgs -$sequences = array (0, 4, // out of range - '1,3', '1:3', // message sequences instead of numbers - ); +$sequences = [0, /* out of range */ 4, 1]; foreach($sequences as $msg_no) { echo "\n-- \$msg_no is $msg_no --\n"; @@ -53,24 +51,11 @@ Warning: imap_fetchheader(): Bad message number in %s on line %d bool(false) --- $msg_no is 1,3 -- - -Notice: A non well formed numeric value encountered in %s on line %d -string(%d) "From: foo@anywhere.com -Subject: Test msg 1 -To: %s -MIME-Version: 1.0 -Content-Type: MULTIPART/mixed; BOUNDARY="%s" - -" - --- $msg_no is 1:3 -- - -Notice: A non well formed numeric value encountered in %s on line %d +-- $msg_no is 1 -- string(%d) "From: foo@anywhere.com Subject: Test msg 1 -To: %s +To: webmaster@something.com MIME-Version: 1.0 -Content-Type: MULTIPART/mixed; BOUNDARY="%s" +Content-Type: MULTIPART/mixed; BOUNDARY="%s=:%d" " diff --git a/ext/imap/tests/imap_fetchstructure_basic.phpt b/ext/imap/tests/imap_fetchstructure_basic.phpt index 0ff266a390c83..572556e6e13d1 100644 --- a/ext/imap/tests/imap_fetchstructure_basic.phpt +++ b/ext/imap/tests/imap_fetchstructure_basic.phpt @@ -8,17 +8,10 @@ require_once(__DIR__.'/skipif.inc'); ?> --FILE-- --EXPECTF-- -Checking with no parameters - -Warning: imap_fetchstructure() expects at least 2 parameters, 0 given in %s on line %d -Checking with incorrect parameter type - -Warning: imap_fetchstructure() expects at least 2 parameters, 1 given in %s on line %d - -Warning: imap_fetchstructure() expects at least 2 parameters, 1 given in %s on line %d Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created - -Warning: imap_fetchstructure() expects at least 2 parameters, 1 given in %s on line %d +.. mailbox '{127.0.0.1:143/norsh}INBOX.phpttest' created bool(true) bool(true) bool(true) diff --git a/ext/imap/tests/imap_gc_error.phpt b/ext/imap/tests/imap_gc_error.phpt index 2d825ce1fdf19..072af103930cb 100644 --- a/ext/imap/tests/imap_gc_error.phpt +++ b/ext/imap/tests/imap_gc_error.phpt @@ -9,12 +9,6 @@ require_once(__DIR__.'/skipif.inc'); ?> --FILE-- --EXPECTF-- -Checking with no parameters - -Warning: imap_gc() Expects exactly 2 parameters, 0 given in %s on line %d -Checking with incorrect parameter type - -Warning: imap_gc(): Argument #1 must be of type resource, string given in %s on line %d - -Warning: imap_gc(): Argument #1 must be of type resource, bool given in %s on line %d - Warning: imap_gc(): Invalid value for the flags parameter in %s on line %d diff --git a/ext/imap/tests/imap_getsubscribed_basic.phpt b/ext/imap/tests/imap_getsubscribed_basic.phpt index 8995eadd05289..bba82271c7ca3 100644 --- a/ext/imap/tests/imap_getsubscribed_basic.phpt +++ b/ext/imap/tests/imap_getsubscribed_basic.phpt @@ -8,19 +8,11 @@ require_once(__DIR__.'/skipif.inc'); ?> --FILE-- --EXPECTF-- -Checking with no parameters - -Warning: imap_getsubscribed() expects exactly 3 parameters, 0 given in %s on line %d -Checking with incorrect parameter type - -Warning: imap_getsubscribed() expects exactly 3 parameters, 1 given in %s on line %d - -Warning: imap_getsubscribed() expects exactly 3 parameters, 1 given in %s on line %d - -Warning: imap_getsubscribed() expects exactly 3 parameters, 1 given in %s on line %d - -Warning: imap_getsubscribed() expects exactly 3 parameters, 2 given in %s on line %d bool(false) Checking OK bool(true) diff --git a/ext/imap/tests/imap_list_basic.phpt b/ext/imap/tests/imap_list_basic.phpt index 77df74af2b2a9..addcf70e775ba 100644 --- a/ext/imap/tests/imap_list_basic.phpt +++ b/ext/imap/tests/imap_list_basic.phpt @@ -8,19 +8,11 @@ require_once(__DIR__.'/skipif.inc'); ?> --FILE-- --EXPECTF-- -Checking with no parameters - -Warning: imap_list() expects exactly 3 parameters, 0 given in %s on line %d -Checking with incorrect parameter type - -Warning: imap_list() expects exactly 3 parameters, 1 given in %s on line %d - -Warning: imap_list() expects exactly 3 parameters, 1 given in %s on line %d - -Warning: imap_list() expects exactly 3 parameters, 1 given in %s on line %d - -Warning: imap_list() expects exactly 3 parameters, 2 given in %s on line %d bool(true) string(%s) "{%s}%s" diff --git a/ext/imap/tests/imap_lsub_basic.phpt b/ext/imap/tests/imap_lsub_basic.phpt index 591a023ed8696..98875266d7406 100644 --- a/ext/imap/tests/imap_lsub_basic.phpt +++ b/ext/imap/tests/imap_lsub_basic.phpt @@ -8,19 +8,11 @@ require_once(__DIR__.'/skipif.inc'); ?> --FILE-- --EXPECTF-- -Checking with no parameters - -Warning: imap_lsub() expects exactly 3 parameters, 0 given in %s on line %d -Checking with incorrect parameter type - -Warning: imap_lsub() expects exactly 3 parameters, 1 given in %s on line %d - -Warning: imap_lsub() expects exactly 3 parameters, 1 given in %s on line %d - -Warning: imap_lsub() expects exactly 3 parameters, 1 given in %s on line %d - -Warning: imap_lsub() expects exactly 3 parameters, 2 given in %s on line %d bool(false) Checking OK bool(true) diff --git a/ext/imap/tests/imap_open_error.phpt b/ext/imap/tests/imap_open_error.phpt index b94c11d797afd..f9410519f2159 100644 --- a/ext/imap/tests/imap_open_error.phpt +++ b/ext/imap/tests/imap_open_error.phpt @@ -9,12 +9,6 @@ require_once(__DIR__.'/skipif.inc'); ?> --FILE-- --EXPECTF-- -Checking with no parameters - -Warning: imap_open() expects at least 3 parameters, 0 given in %s on line %d - -Warning: imap_open() expects at least 3 parameters, 1 given in %s on line %d - -Warning: imap_open() expects at least 3 parameters, 2 given in %s on line %d - -Warning: imap_open() expects at least 3 parameters, 1 given in %s on line %d - -Warning: imap_open() expects at least 3 parameters, 2 given in %s on line %d Checking with incorrect parameters Warning: imap_open(): Couldn't open stream in %s on line %d diff --git a/ext/imap/tests/imap_renamemailbox_basic.phpt b/ext/imap/tests/imap_renamemailbox_basic.phpt index ee5ccb2be7234..c6b1812d165b5 100644 --- a/ext/imap/tests/imap_renamemailbox_basic.phpt +++ b/ext/imap/tests/imap_renamemailbox_basic.phpt @@ -8,13 +8,6 @@ require_once(__DIR__.'/skipif.inc'); ?> --FILE-- --EXPECTF-- -Checking with no parameters - -Warning: imap_renamemailbox() expects exactly 3 parameters, 0 given in %s on line %d -Checking with incorrect parameter type - -Warning: imap_renamemailbox() expects exactly 3 parameters, 1 given in %s on line %d - -Warning: imap_renamemailbox() expects exactly 3 parameters, 1 given in %s on line %d Create a temporary mailbox and add 1 msgs .. mailbox '{%s}%s' created - -Warning: imap_renamemailbox() expects exactly 3 parameters, 2 given in %s on line %d - -Warning: imap_renamemailbox() expects exactly 3 parameters, 2 given in %s on line %d Checking OK bool(true) bool(true) diff --git a/ext/imap/tests/imap_savebody_basic.phpt b/ext/imap/tests/imap_savebody_basic.phpt index 2be987a3617c3..ccbaa1ba66cc4 100644 --- a/ext/imap/tests/imap_savebody_basic.phpt +++ b/ext/imap/tests/imap_savebody_basic.phpt @@ -8,18 +8,10 @@ require_once(__DIR__.'/skipif.inc'); ?> --FILE-- --EXPECTF-- -Checking with no parameters - -Warning: imap_savebody() expects at least 3 parameters, 0 given in %s on line %d -Checking with incorrect parameter type - -Warning: imap_savebody() expects at least 3 parameters, 1 given in %s on line %d - -Warning: imap_savebody() expects at least 3 parameters, 1 given in %s on line %d Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created - -Warning: imap_savebody() expects at least 3 parameters, 1 given in %s on line %d +.. mailbox '{127.0.0.1:143/norsh}INBOX.phpttest' created bool(true) Size: %d bool(true) diff --git a/ext/imap/tests/imap_timeout_basic.phpt b/ext/imap/tests/imap_timeout_basic.phpt index e1b958b3c77ef..f9618c3e3a33d 100644 --- a/ext/imap/tests/imap_timeout_basic.phpt +++ b/ext/imap/tests/imap_timeout_basic.phpt @@ -8,12 +8,6 @@ require_once(__DIR__.'/skipif.inc'); ?> --FILE-- --EXPECTF-- -Checking with no parameters - -Warning: imap_timeout() expects at least 1 argument, 0 given in %s on line %d -Checking with incorrect parameter type - -Warning: imap_timeout(): Argument #1 must be of type int, %s given in %s on line %d GET values: int(%d) int(%d) From 12306728c5f37dc371bc39f5fe2bf8e928368235 Mon Sep 17 00:00:00 2001 From: Sammy Kaye Powers Date: Thu, 16 Jul 2020 16:31:10 -0700 Subject: [PATCH 60/67] Add system ID entropy API The `zend_system_id` is a (true global) system ID that fingerprints a process state. When extensions add engine hooks during MINIT/startup, entropy is added the system ID for each hook. This allows extensions to identify that changes have been made to the engine since the last PHP process restart. Closes GH-5871 --- UPGRADING.INTERNALS | 4 ++ Zend/zend_execute.c | 1 + Zend/zend_extensions.c | 8 ++- Zend/zend_extensions.h | 4 +- Zend/zend_observer.c | 2 +- Zend/zend_system_id.c | 91 ++++++++++++++++++++++++++ Zend/zend_system_id.h | 30 +++++++++ configure.ac | 2 +- ext/opcache/Optimizer/zend_func_info.c | 3 +- ext/opcache/ZendAccelerator.c | 44 ------------- ext/opcache/ZendAccelerator.h | 1 - ext/opcache/jit/zend_jit.c | 2 +- ext/opcache/shared_alloc_win32.c | 3 +- ext/opcache/zend_file_cache.c | 9 +-- main/main.c | 7 ++ win32/build/config.w32 | 2 +- 16 files changed, 152 insertions(+), 61 deletions(-) create mode 100644 Zend/zend_system_id.c create mode 100644 Zend/zend_system_id.h diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS index 1815a9c264b21..ebced18ff3279 100644 --- a/UPGRADING.INTERNALS +++ b/UPGRADING.INTERNALS @@ -369,6 +369,10 @@ PHP 8.0 INTERNALS UPGRADE NOTES - zend_stack_is_empty() - zend_ts_hash_exists() - zend_ts_hash_index_exists() + 9. Argument void to const char* in Zend Engine 4.0: + - zend_get_op_array_extension_handle() + 10. Argument zend_extension to const char* in Zend Engine 4.0: + - zend_get_resource_handle() u. Instead of overwriting zend_error_cb extensions with debugging, monitoring use-cases catching Errors/Exceptions are strongly encouraged to use diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index e2e5aa83915d7..ab231f952f0ca 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -41,6 +41,7 @@ #include "zend_type_info.h" #include "zend_smart_str.h" #include "zend_observer.h" +#include "zend_system_id.h" /* Virtual current working directory support */ #include "zend_virtual_cwd.h" diff --git a/Zend/zend_extensions.c b/Zend/zend_extensions.c index c44a2f3093752..1741182ba3be0 100644 --- a/Zend/zend_extensions.c +++ b/Zend/zend_extensions.c @@ -18,6 +18,7 @@ */ #include "zend_extensions.h" +#include "zend_system_id.h" ZEND_API zend_llist zend_extensions; ZEND_API uint32_t zend_extension_flags = 0; @@ -247,18 +248,19 @@ ZEND_API void zend_extension_dispatch_message(int message, void *arg) } -ZEND_API int zend_get_resource_handle(zend_extension *extension) +ZEND_API int zend_get_resource_handle(const char *module_name) { if (last_resource_numberresource_number = last_resource_number; + zend_add_system_entropy(module_name, "zend_get_resource_handle", &last_resource_number, sizeof(int)); return last_resource_number++; } else { return -1; } } -ZEND_API int zend_get_op_array_extension_handle(void) +ZEND_API int zend_get_op_array_extension_handle(const char *module_name) { + zend_add_system_entropy(module_name, "zend_get_op_array_extension_handle", &zend_op_array_extension_handles, sizeof(int)); return zend_op_array_extension_handles++; } diff --git a/Zend/zend_extensions.h b/Zend/zend_extensions.h index a26a6f9fc7e25..708a1fe02a465 100644 --- a/Zend/zend_extensions.h +++ b/Zend/zend_extensions.h @@ -113,8 +113,8 @@ struct _zend_extension { BEGIN_EXTERN_C() extern ZEND_API int zend_op_array_extension_handles; -ZEND_API int zend_get_resource_handle(zend_extension *extension); -ZEND_API int zend_get_op_array_extension_handle(void); +ZEND_API int zend_get_resource_handle(const char *module_name); +ZEND_API int zend_get_op_array_extension_handle(const char *module_name); ZEND_API void zend_extension_dispatch_message(int message, void *arg); END_EXTERN_C() diff --git a/Zend/zend_observer.c b/Zend/zend_observer.c index 5544039c3e87f..68cf43ce66248 100644 --- a/Zend/zend_observer.c +++ b/Zend/zend_observer.c @@ -50,7 +50,7 @@ ZEND_API void zend_observer_fcall_register(zend_observer_fcall_init init) { /* We don't want to get an extension handle unless an ext installs an observer */ if (!ZEND_OBSERVER_ENABLED) { zend_observer_fcall_op_array_extension = - zend_get_op_array_extension_handle(); + zend_get_op_array_extension_handle("Zend Observer"); /* ZEND_CALL_TRAMPOLINE has SPEC(OBSERVER) but zend_init_call_trampoline_op() * is called before any extensions have registered as an observer. So we diff --git a/Zend/zend_system_id.c b/Zend/zend_system_id.c new file mode 100644 index 0000000000000..93bca57b0c0e9 --- /dev/null +++ b/Zend/zend_system_id.c @@ -0,0 +1,91 @@ +/* + +----------------------------------------------------------------------+ + | Copyright (c) The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Sammy Kaye Powers | + | Dmitry Stogov | + +----------------------------------------------------------------------+ + */ + +#include "php.h" +#include "zend_system_id.h" +#include "zend_extensions.h" +#include "ext/standard/md5.h" +#include "ext/hash/php_hash.h" + +ZEND_API char zend_system_id[32]; + +static PHP_MD5_CTX context; +static int finalized = 0; + +ZEND_API ZEND_RESULT_CODE zend_add_system_entropy(const char *module_name, const char *hook_name, const void *data, size_t size) +{ + if (finalized == 0) { + PHP_MD5Update(&context, module_name, strlen(module_name)); + PHP_MD5Update(&context, hook_name, strlen(hook_name)); + if (size) { + PHP_MD5Update(&context, data, size); + } + return SUCCESS; + } + return FAILURE; +} + +#define ZEND_BIN_ID "BIN_" ZEND_TOSTR(SIZEOF_INT) ZEND_TOSTR(SIZEOF_LONG) ZEND_TOSTR(SIZEOF_SIZE_T) ZEND_TOSTR(SIZEOF_ZEND_LONG) ZEND_TOSTR(ZEND_MM_ALIGNMENT) + +void zend_startup_system_id(void) +{ + PHP_MD5Init(&context); + PHP_MD5Update(&context, PHP_VERSION, sizeof(PHP_VERSION)-1); + PHP_MD5Update(&context, ZEND_EXTENSION_BUILD_ID, sizeof(ZEND_EXTENSION_BUILD_ID)-1); + PHP_MD5Update(&context, ZEND_BIN_ID, sizeof(ZEND_BIN_ID)-1); + if (strstr(PHP_VERSION, "-dev") != 0) { + /* Development versions may be changed from build to build */ + PHP_MD5Update(&context, __DATE__, sizeof(__DATE__)-1); + PHP_MD5Update(&context, __TIME__, sizeof(__TIME__)-1); + } + zend_system_id[0] = '\0'; +} + +#define ZEND_HOOK_AST_PROCESS (1 << 0) +#define ZEND_HOOK_COMPILE_FILE (1 << 1) +#define ZEND_HOOK_EXECUTE_EX (1 << 2) +#define ZEND_HOOK_EXECUTE_INTERNAL (1 << 3) + +void zend_finalize_system_id(void) +{ + unsigned char digest[16]; + zend_uchar hooks = 0; + + if (zend_ast_process) { + hooks |= ZEND_HOOK_AST_PROCESS; + } + if (zend_compile_file != compile_file) { + hooks |= ZEND_HOOK_COMPILE_FILE; + } + if (zend_execute_ex != execute_ex) { + hooks |= ZEND_HOOK_EXECUTE_EX; + } + if (zend_execute_internal) { + hooks |= ZEND_HOOK_EXECUTE_INTERNAL; + } + PHP_MD5Update(&context, &hooks, sizeof hooks); + + for (int16_t i = 0; i < 256; i++) { + if (zend_get_user_opcode_handler((zend_uchar) i) != NULL) { + PHP_MD5Update(&context, &i, sizeof i); + } + } + + PHP_MD5Final(digest, &context); + php_hash_bin2hex(zend_system_id, digest, sizeof digest); + finalized = 1; +} diff --git a/Zend/zend_system_id.h b/Zend/zend_system_id.h new file mode 100644 index 0000000000000..cea111e6234e2 --- /dev/null +++ b/Zend/zend_system_id.h @@ -0,0 +1,30 @@ +/* + +----------------------------------------------------------------------+ + | Copyright (c) The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Sammy Kaye Powers | + +----------------------------------------------------------------------+ +*/ + +#ifndef ZEND_SYSTEM_ID_H +#define ZEND_SYSTEM_ID_H + +BEGIN_EXTERN_C() +/* True global; Write-only during MINIT/startup */ +extern ZEND_API char zend_system_id[32]; + +ZEND_API ZEND_RESULT_CODE zend_add_system_entropy(const char *module_name, const char *hook_name, const void *data, size_t size); +END_EXTERN_C() + +void zend_startup_system_id(void); +void zend_finalize_system_id(void); + +#endif /* ZEND_SYSTEM_ID_H */ diff --git a/configure.ac b/configure.ac index f82783a03b04e..a6ff4e707aa38 100644 --- a/configure.ac +++ b/configure.ac @@ -1464,7 +1464,7 @@ PHP_ADD_SOURCES(Zend, \ zend_closures.c zend_weakrefs.c zend_float.c zend_string.c zend_signal.c zend_generators.c \ zend_virtual_cwd.c zend_ast.c zend_objects.c zend_object_handlers.c zend_objects_API.c \ zend_default_classes.c zend_inheritance.c zend_smart_str.c zend_cpuinfo.c zend_gdb.c \ - zend_observer.c, \ + zend_observer.c zend_system_id.c, \ -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1) PHP_ADD_BUILD_DIR(main main/streams) diff --git a/ext/opcache/Optimizer/zend_func_info.c b/ext/opcache/Optimizer/zend_func_info.c index edbc068dda2ec..6b8cb33f5690b 100644 --- a/ext/opcache/Optimizer/zend_func_info.c +++ b/ext/opcache/Optimizer/zend_func_info.c @@ -942,11 +942,10 @@ uint32_t zend_get_func_info( int zend_func_info_startup(void) { - zend_extension dummy; size_t i; if (zend_func_info_rid == -1) { - zend_func_info_rid = zend_get_resource_handle(&dummy); + zend_func_info_rid = zend_get_resource_handle("Zend Optimizer"); if (zend_func_info_rid < 0) { return FAILURE; } diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index 71af3203dca38..23ea50a4e3c49 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -106,7 +106,6 @@ ZEND_TSRMLS_CACHE_DEFINE() zend_accel_shared_globals *accel_shared_globals = NULL; /* true globals, no need for thread safety */ -char accel_system_id[32]; #ifdef ZEND_WIN32 char accel_uname_id[32]; #endif @@ -126,7 +125,6 @@ static zif_handler orig_chdir = NULL; static ZEND_INI_MH((*orig_include_path_on_modify)) = NULL; static zend_result (*orig_post_startup_cb)(void); -static void accel_gen_system_id(void); static zend_result accel_post_startup(void); static int accel_finish_startup(void); @@ -2709,46 +2707,6 @@ static void accel_globals_ctor(zend_accel_globals *accel_globals) memset(accel_globals, 0, sizeof(zend_accel_globals)); } -#define ZEND_BIN_ID "BIN_" ZEND_TOSTR(SIZEOF_INT) ZEND_TOSTR(SIZEOF_LONG) ZEND_TOSTR(SIZEOF_SIZE_T) ZEND_TOSTR(SIZEOF_ZEND_LONG) ZEND_TOSTR(ZEND_MM_ALIGNMENT) - -static void accel_gen_system_id(void) -{ - PHP_MD5_CTX context; - unsigned char digest[16]; - zend_module_entry *module; - zend_extension *extension; - zend_llist_position pos; - - PHP_MD5Init(&context); - PHP_MD5Update(&context, PHP_VERSION, sizeof(PHP_VERSION)-1); - PHP_MD5Update(&context, ZEND_EXTENSION_BUILD_ID, sizeof(ZEND_EXTENSION_BUILD_ID)-1); - PHP_MD5Update(&context, ZEND_BIN_ID, sizeof(ZEND_BIN_ID)-1); - if (strstr(PHP_VERSION, "-dev") != 0) { - /* Development versions may be changed from build to build */ - PHP_MD5Update(&context, __DATE__, sizeof(__DATE__)-1); - PHP_MD5Update(&context, __TIME__, sizeof(__TIME__)-1); - } - /* Modules may have changed after restart which can cause dangling pointers from - * custom opcode handlers in the second-level cache files - */ - ZEND_HASH_FOREACH_PTR(&module_registry, module) { - PHP_MD5Update(&context, module->name, strlen(module->name)); - if (module->version != NULL) { - PHP_MD5Update(&context, module->version, strlen(module->version)); - } - } ZEND_HASH_FOREACH_END(); - extension = (zend_extension *) zend_llist_get_first_ex(&zend_extensions, &pos); - while (extension) { - PHP_MD5Update(&context, extension->name, strlen(extension->name)); - if (extension->version != NULL) { - PHP_MD5Update(&context, extension->version, strlen(extension->version)); - } - extension = (zend_extension *) zend_llist_get_next_ex(&zend_extensions, &pos); - } - PHP_MD5Final(digest, &context); - php_hash_bin2hex(accel_system_id, digest, sizeof digest); -} - #ifdef HAVE_HUGE_CODE_PAGES # ifndef _WIN32 # include @@ -2933,8 +2891,6 @@ static int accel_startup(zend_extension *extension) # endif #endif - accel_gen_system_id(); - if (start_accel_module() == FAILURE) { accel_startup_ok = 0; zend_error(E_WARNING, ACCELERATOR_PRODUCT_NAME ": module registration failed!"); diff --git a/ext/opcache/ZendAccelerator.h b/ext/opcache/ZendAccelerator.h index 500647265cb96..b9e3f2a81de83 100644 --- a/ext/opcache/ZendAccelerator.h +++ b/ext/opcache/ZendAccelerator.h @@ -289,7 +289,6 @@ typedef struct _zend_accel_shared_globals { zend_string_table interned_strings; } zend_accel_shared_globals; -extern char accel_system_id[32]; #ifdef ZEND_WIN32 extern char accel_uname_id[32]; #endif diff --git a/ext/opcache/jit/zend_jit.c b/ext/opcache/jit/zend_jit.c index 094f4d56d6d34..348f15c4fccdf 100644 --- a/ext/opcache/jit/zend_jit.c +++ b/ext/opcache/jit/zend_jit.c @@ -4071,7 +4071,7 @@ ZEND_EXT_API int zend_jit_startup(void *buf, size_t size, zend_bool reattached) return FAILURE; } - zend_jit_profile_counter_rid = zend_get_op_array_extension_handle(); + zend_jit_profile_counter_rid = zend_get_op_array_extension_handle(ACCELERATOR_PRODUCT_NAME); #ifdef HAVE_GDB zend_jit_gdb_init(); diff --git a/ext/opcache/shared_alloc_win32.c b/ext/opcache/shared_alloc_win32.c index 6cda6471044af..06df5270d4b7b 100644 --- a/ext/opcache/shared_alloc_win32.c +++ b/ext/opcache/shared_alloc_win32.c @@ -24,6 +24,7 @@ #include "zend_shared_alloc.h" #include "zend_accelerator_util_funcs.h" #include "zend_execute.h" +#include "zend_system_id.h" #include "SAPI.h" #include "tsrm_win32.h" #include "win32/winutil.h" @@ -71,7 +72,7 @@ static void zend_win_error_message(int type, char *msg, int err) static char *create_name_with_username(char *name) { static char newname[MAXPATHLEN + 32 + 4 + 1 + 32 + 21]; - snprintf(newname, sizeof(newname) - 1, "%s@%.32s@%.20s@%.32s", name, accel_uname_id, sapi_module.name, accel_system_id); + snprintf(newname, sizeof(newname) - 1, "%s@%.32s@%.20s@%.32s", name, accel_uname_id, sapi_module.name, zend_system_id); return newname; } diff --git a/ext/opcache/zend_file_cache.c b/ext/opcache/zend_file_cache.c index 581ef6a3921bb..62a2d261ff27b 100644 --- a/ext/opcache/zend_file_cache.c +++ b/ext/opcache/zend_file_cache.c @@ -22,6 +22,7 @@ #include "zend_vm.h" #include "zend_interfaces.h" #include "zend_attributes.h" +#include "zend_system_id.h" #include "php.h" #ifdef ZEND_WIN32 @@ -884,7 +885,7 @@ static void zend_file_cache_serialize(zend_persistent_script *script, zend_persistent_script *new_script; memcpy(info->magic, "OPCACHE", 8); - memcpy(info->system_id, accel_system_id, 32); + memcpy(info->system_id, zend_system_id, 32); info->mem_size = script->size; info->str_size = 0; info->script_offset = (char*)script - (char*)script->mem; @@ -914,7 +915,7 @@ static char *zend_file_cache_get_bin_file_path(zend_string *script_path) filename = emalloc(len + 33 + ZSTR_LEN(script_path) + sizeof(SUFFIX)); memcpy(filename, ZCG(accel_directives).file_cache, len); filename[len] = '/'; - memcpy(filename + len + 1, accel_system_id, 32); + memcpy(filename + len + 1, zend_system_id, 32); memcpy(filename + len + 33, ZSTR_VAL(script_path), ZSTR_LEN(script_path)); memcpy(filename + len + 33 + ZSTR_LEN(script_path), SUFFIX, sizeof(SUFFIX)); #else @@ -928,7 +929,7 @@ static char *zend_file_cache_get_bin_file_path(zend_string *script_path) len += 1 + 32; filename[len] = '\\'; - memcpy(filename + len + 1, accel_system_id, 32); + memcpy(filename + len + 1, zend_system_id, 32); if (ZSTR_LEN(script_path) >= 7 && ':' == ZSTR_VAL(script_path)[4] && '/' == ZSTR_VAL(script_path)[5] && '/' == ZSTR_VAL(script_path)[6]) { /* phar:// or file:// */ @@ -1688,7 +1689,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl efree(filename); return NULL; } - if (memcmp(info.system_id, accel_system_id, 32) != 0) { + if (memcmp(info.system_id, zend_system_id, 32) != 0) { zend_accel_error(ACCEL_LOG_WARNING, "opcache cannot read from file '%s' (wrong \"system_id\")\n", filename); zend_file_cache_flock(fd, LOCK_UN); close(fd); diff --git a/main/main.c b/main/main.c index 103c10a06b241..3667432f94a5f 100644 --- a/main/main.c +++ b/main/main.c @@ -72,6 +72,7 @@ #include "zend_ini.h" #include "zend_dtrace.h" #include "zend_observer.h" +#include "zend_system_id.h" #include "php_content_types.h" #include "php_ticks.h" @@ -2194,6 +2195,9 @@ int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_mod zend_set_utility_values(&zuv); php_startup_sapi_content_types(); + /* Begin to fingerprint the process state */ + zend_startup_system_id(); + /* startup extensions statically compiled in */ if (php_register_internal_extensions_func() == FAILURE) { php_printf("Unable to start builtin modules\n"); @@ -2237,6 +2241,9 @@ int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_mod module->info_func = PHP_MINFO(php_core); } + /* Extensions that add engine hooks after this point do so at their own peril */ + zend_finalize_system_id(); + module_initialized = 1; if (zend_post_startup() != SUCCESS) { diff --git a/win32/build/config.w32 b/win32/build/config.w32 index 94e4cbe1c5fbf..7eb6593acafad 100644 --- a/win32/build/config.w32 +++ b/win32/build/config.w32 @@ -237,7 +237,7 @@ ADD_SOURCES("Zend", "zend_language_parser.c zend_language_scanner.c \ zend_object_handlers.c zend_objects_API.c \ zend_default_classes.c zend_execute.c zend_strtod.c zend_gc.c zend_closures.c zend_weakrefs.c \ zend_float.c zend_string.c zend_generators.c zend_virtual_cwd.c zend_ast.c \ - zend_inheritance.c zend_smart_str.c zend_cpuinfo.c zend_observer.c"); + zend_inheritance.c zend_smart_str.c zend_cpuinfo.c zend_observer.c zend_system_id.c"); ADD_FLAG("CFLAGS_BD_ZEND", "/D ZEND_ENABLE_STATIC_TSRMLS_CACHE=1"); if (VS_TOOLSET && VCVERS >= 1914) { From 40e8c7c90b1715a661f0a7056883d99198da18fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Sat, 19 Sep 2020 12:31:36 +0200 Subject: [PATCH 61/67] Adjust the order of method modifiers in stub All the other method modifiers in stubs follow the guidelines of PSR-12, so let's use it in case of PhpToken::__construct() as well. --- ext/tokenizer/tokenizer.stub.php | 2 +- ext/tokenizer/tokenizer_arginfo.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/tokenizer/tokenizer.stub.php b/ext/tokenizer/tokenizer.stub.php index 19fd3411cdbea..72d61ad8560a2 100644 --- a/ext/tokenizer/tokenizer.stub.php +++ b/ext/tokenizer/tokenizer.stub.php @@ -11,7 +11,7 @@ class PhpToken implements Stringable /** @return static[] */ public static function getAll(string $code, int $flags = 0): array {} - public final function __construct(int $id, string $text, int $line = -1, int $pos = -1) {} + final public function __construct(int $id, string $text, int $line = -1, int $pos = -1) {} /** @param int|string|array $kind */ public function is($kind): bool {} diff --git a/ext/tokenizer/tokenizer_arginfo.h b/ext/tokenizer/tokenizer_arginfo.h index 1194f2838a4b4..6e313cd0de384 100644 --- a/ext/tokenizer/tokenizer_arginfo.h +++ b/ext/tokenizer/tokenizer_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 4591855b4c387a2868d5287b28c5050bf828c79f */ + * Stub hash: d8e8b4d749c2960b33fd20b27a1abf033604d4e2 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_token_get_all, 0, 1, IS_ARRAY, 0) ZEND_ARG_TYPE_INFO(0, source, IS_STRING, 0) From f088aec6cb6b1e2566dac968d46615864d2a0f93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Sat, 19 Sep 2020 14:35:37 +0200 Subject: [PATCH 62/67] Fix UNKNOWN default value of apache_note() Closes GH-6167 --- sapi/apache2handler/php_functions.c | 2 +- sapi/apache2handler/php_functions.stub.php | 2 +- sapi/apache2handler/php_functions_arginfo.h | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sapi/apache2handler/php_functions.c b/sapi/apache2handler/php_functions.c index 1a601e69063d9..e7d29450ee8b2 100644 --- a/sapi/apache2handler/php_functions.c +++ b/sapi/apache2handler/php_functions.c @@ -224,7 +224,7 @@ PHP_FUNCTION(apache_note) size_t note_name_len, note_val_len; char *old_note_val=NULL; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|s", ¬e_name, ¬e_name_len, ¬e_val, ¬e_val_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|s!", ¬e_name, ¬e_name_len, ¬e_val, ¬e_val_len) == FAILURE) { RETURN_THROWS(); } diff --git a/sapi/apache2handler/php_functions.stub.php b/sapi/apache2handler/php_functions.stub.php index 391600be6ca60..93955c7181a0d 100644 --- a/sapi/apache2handler/php_functions.stub.php +++ b/sapi/apache2handler/php_functions.stub.php @@ -13,7 +13,7 @@ function getallheaders(): array {} function apache_response_headers(): array {} -function apache_note(string $note_name, string $note_value = UNKNOWN): string|false {} +function apache_note(string $note_name, ?string $note_value = null): string|false {} function apache_setenv(string $variable, string $value, bool $walk_to_top = false): bool {} diff --git a/sapi/apache2handler/php_functions_arginfo.h b/sapi/apache2handler/php_functions_arginfo.h index 83dae8c6ef9b0..a712ce590c5bd 100644 --- a/sapi/apache2handler/php_functions_arginfo.h +++ b/sapi/apache2handler/php_functions_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 3226aed29f13aa8146066a88e58ac2147ad8b500 */ + * Stub hash: 2e2e63b5c845bb74309b2b3e52ca5a3d76f2c80b */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_apache_lookup_uri, 0, 1, MAY_BE_OBJECT|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) @@ -18,7 +18,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_apache_note, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, note_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, note_value, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, note_value, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_apache_setenv, 0, 2, _IS_BOOL, 0) From b15885b522ba813d29cfd24bd6f5334ce141c19b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Sat, 19 Sep 2020 19:04:35 +0200 Subject: [PATCH 63/67] Separate Closure::bind() implementations Closure::bind() and Closure::bindTo() are currently reported as aliases in stubs because they have a single implementation. They are not aliases in fact though, they just use zend_parse_method_parameters() cleverly. Thus, let's separate their implementation so that we don't have to alias Closure::bindTo() anymore. This will also have the advantage that the two ZPP implementations become more clear. Closes GH-6169 --- Zend/zend_closures.c | 37 +++++++++++++++++++++++++----------- Zend/zend_closures.stub.php | 5 +---- Zend/zend_closures_arginfo.h | 5 +++-- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c index 630857f26c1df..86cabf0a10d84 100644 --- a/Zend/zend_closures.c +++ b/Zend/zend_closures.c @@ -192,18 +192,10 @@ ZEND_METHOD(Closure, call) } /* }}} */ -/* {{{ Create a closure from another one and bind to another object and scope */ -ZEND_METHOD(Closure, bind) +static void do_closure_bind(zval *return_value, zval *zclosure, zval *newthis, zval *scope_arg) { - zval *newthis, *zclosure, *scope_arg = NULL; - zend_closure *closure; zend_class_entry *ce, *called_scope; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Oo!|z", &zclosure, zend_ce_closure, &newthis, &scope_arg) == FAILURE) { - RETURN_THROWS(); - } - - closure = (zend_closure *)Z_OBJ_P(zclosure); + zend_closure *closure = (zend_closure *) Z_OBJ_P(zclosure); if (scope_arg != NULL) { /* scope argument was given */ if (Z_TYPE_P(scope_arg) == IS_OBJECT) { @@ -238,7 +230,30 @@ ZEND_METHOD(Closure, bind) zend_create_closure(return_value, &closure->func, ce, called_scope, newthis); } -/* }}} */ + +/* {{{ Create a closure from another one and bind to another object and scope */ +ZEND_METHOD(Closure, bind) +{ + zval *newthis, *zclosure, *scope_arg = NULL; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oo!|z", &zclosure, zend_ce_closure, &newthis, &scope_arg) == FAILURE) { + RETURN_THROWS(); + } + + do_closure_bind(return_value, zclosure, newthis, scope_arg); +} + +/* {{{ Create a closure from another one and bind to another object and scope */ +ZEND_METHOD(Closure, bindTo) +{ + zval *newthis, *scope_arg = NULL; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "o!|z", &newthis, &scope_arg) == FAILURE) { + RETURN_THROWS(); + } + + do_closure_bind(return_value, getThis(), newthis, scope_arg); +} static ZEND_NAMED_FUNCTION(zend_closure_call_magic) /* {{{ */ { zend_fcall_info fci; diff --git a/Zend/zend_closures.stub.php b/Zend/zend_closures.stub.php index b7df588fe9d5a..70e555bff2dc4 100644 --- a/Zend/zend_closures.stub.php +++ b/Zend/zend_closures.stub.php @@ -9,10 +9,7 @@ private function __construct() {} /** @param object|string|null $newScope */ public static function bind(Closure $closure, ?object $newThis, $newScope = UNKNOWN): ?Closure {} - /** - * @param object|string|null $newScope - * @alias Closure::bind - */ + /** @param object|string|null $newScope */ public function bindTo(?object $newThis, $newScope = UNKNOWN): ?Closure {} public function call(object $newThis, mixed ...$arguments): mixed {} diff --git a/Zend/zend_closures_arginfo.h b/Zend/zend_closures_arginfo.h index fe3407232b84e..f09023b132d0f 100644 --- a/Zend/zend_closures_arginfo.h +++ b/Zend/zend_closures_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 124654da4652ea828875f471a2ddcc4afae147ae */ + * Stub hash: abbbe7b04323dc44b0675ad58700e996a6d7c43b */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Closure___construct, 0, 0, 0) ZEND_END_ARG_INFO() @@ -27,6 +27,7 @@ ZEND_END_ARG_INFO() ZEND_METHOD(Closure, __construct); ZEND_METHOD(Closure, bind); +ZEND_METHOD(Closure, bindTo); ZEND_METHOD(Closure, call); ZEND_METHOD(Closure, fromCallable); @@ -34,7 +35,7 @@ ZEND_METHOD(Closure, fromCallable); static const zend_function_entry class_Closure_methods[] = { ZEND_ME(Closure, __construct, arginfo_class_Closure___construct, ZEND_ACC_PRIVATE) ZEND_ME(Closure, bind, arginfo_class_Closure_bind, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) - ZEND_MALIAS(Closure, bindTo, bind, arginfo_class_Closure_bindTo, ZEND_ACC_PUBLIC) + ZEND_ME(Closure, bindTo, arginfo_class_Closure_bindTo, ZEND_ACC_PUBLIC) ZEND_ME(Closure, call, arginfo_class_Closure_call, ZEND_ACC_PUBLIC) ZEND_ME(Closure, fromCallable, arginfo_class_Closure_fromCallable, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) ZEND_FE_END From 0741858ca7a02cd0f9b15cd1979d1d098eafca11 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Sun, 20 Sep 2020 02:57:39 +0200 Subject: [PATCH 64/67] Fix mysqli build with mysqlnd and without PDO --- ext/mysqli/mysqli_api.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index aa283505e1372..2263c75434e34 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -1885,7 +1885,7 @@ PHP_FUNCTION(mysqli_real_query) } /* }}} */ -#if defined(PDO_USE_MYSQLND) || MYSQL_VERSION_ID < 50707 || defined(MARIADB_BASE_VERSION) +#if defined(MYSQLI_USE_MYSQLND) || MYSQL_VERSION_ID < 50707 || defined(MARIADB_BASE_VERSION) # define mysql_real_escape_string_quote(mysql, to, from, length, quote) \ mysql_real_escape_string(mysql, to, from, length) #endif From a7544411dfb833331a19ff10c1082428d80d2ad7 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Sun, 20 Sep 2020 02:57:39 +0200 Subject: [PATCH 65/67] Fix mysqli build with mysqlnd and without PDO --- ext/mysqli/mysqli_api.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 7d8682253cd93..b858b6b823c5d 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -1954,7 +1954,7 @@ PHP_FUNCTION(mysqli_real_query) } /* }}} */ -#if defined(PDO_USE_MYSQLND) || MYSQL_VERSION_ID < 50707 || defined(MARIADB_BASE_VERSION) +#if defined(MYSQLI_USE_MYSQLND) || MYSQL_VERSION_ID < 50707 || defined(MARIADB_BASE_VERSION) # define mysql_real_escape_string_quote(mysql, to, from, length, quote) \ mysql_real_escape_string(mysql, to, from, length) #endif From 93745a242fca45a215d1ce6a9903ecedd4a5414e Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 20 Sep 2020 10:24:54 +0200 Subject: [PATCH 66/67] Only check linking in PHP_TEST_BUILD Given that this executes a random function with zero parameters, actually executing the code doesn't make sense. This should fix the imap + asan build. --- build/php.m4 | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/build/php.m4 b/build/php.m4 index b0e3c424d18e4..1f77f38e572f2 100644 --- a/build/php.m4 +++ b/build/php.m4 @@ -1626,7 +1626,7 @@ dnl AC_DEFUN([PHP_TEST_BUILD], [ old_LIBS=$LIBS LIBS="$4 $LIBS" - AC_RUN_IFELSE([AC_LANG_SOURCE([[ + AC_LINK_IFELSE([AC_LANG_SOURCE([[ $5 char $1(); int main() { @@ -1639,8 +1639,6 @@ AC_DEFUN([PHP_TEST_BUILD], [ ],[ LIBS=$old_LIBS $3 - ],[ - LIBS=$old_LIBS ]) ]) From 81b2f3e5d9fcdffd87a4fcd12bd8c708a97091e1 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Sun, 20 Sep 2020 13:45:09 +0200 Subject: [PATCH 67/67] Fix #80114: parse_url does not accept URLs with port 0 URIs with a 0 port are generally valid, so `parse_url()` should recognize such URIs, but still report the port as missing. Co-authored-by: twosee Closes GH-6152. --- NEWS | 3 +++ ext/standard/tests/url/parse_url_basic_001.phpt | 9 +++++++++ ext/standard/tests/url/parse_url_basic_002.phpt | 1 + ext/standard/tests/url/parse_url_basic_003.phpt | 1 + ext/standard/tests/url/parse_url_basic_004.phpt | 1 + ext/standard/tests/url/parse_url_basic_005.phpt | 1 + ext/standard/tests/url/parse_url_basic_006.phpt | 1 + ext/standard/tests/url/parse_url_basic_007.phpt | 1 + ext/standard/tests/url/parse_url_basic_008.phpt | 1 + ext/standard/tests/url/parse_url_basic_009.phpt | 1 + ext/standard/tests/url/parse_url_unterminated.phpt | 9 +++++++++ ext/standard/tests/url/urls.inc | 1 + ext/standard/url.c | 10 ++++++---- 13 files changed, 36 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index fe2bae3803352..98dd5861148cd 100644 --- a/NEWS +++ b/NEWS @@ -12,6 +12,9 @@ PHP NEWS . Fixed bug #80083 (Optimizer pass 6 removes variables used for ibm_db2 data binding). (Nikita) +- Standard: + . Fixed bug #80114 (parse_url does not accept URLs with port 0). (cmb, twosee) + 01 Oct 2020, PHP 7.3.23 - Core: diff --git a/ext/standard/tests/url/parse_url_basic_001.phpt b/ext/standard/tests/url/parse_url_basic_001.phpt index 51bae9fe1ca44..063fc28832fcc 100644 --- a/ext/standard/tests/url/parse_url_basic_001.phpt +++ b/ext/standard/tests/url/parse_url_basic_001.phpt @@ -859,6 +859,15 @@ echo "Done"; string(3) "%:x" } +--> https://example.com:0/: array(3) { + ["scheme"]=> + string(5) "https" + ["host"]=> + string(11) "example.com" + ["path"]=> + string(1) "/" +} + --> http:///blah.com: bool(false) --> http://:80: bool(false) diff --git a/ext/standard/tests/url/parse_url_basic_002.phpt b/ext/standard/tests/url/parse_url_basic_002.phpt index 309c038794c45..42a8457431e75 100644 --- a/ext/standard/tests/url/parse_url_basic_002.phpt +++ b/ext/standard/tests/url/parse_url_basic_002.phpt @@ -113,6 +113,7 @@ echo "Done"; --> / : NULL --> /rest/Users?filter={"id":"123"} : NULL --> %:x : NULL +--> https://example.com:0/ : string(5) "https" --> http:///blah.com : bool(false) --> http://:80 : bool(false) --> http://user@:80 : bool(false) diff --git a/ext/standard/tests/url/parse_url_basic_003.phpt b/ext/standard/tests/url/parse_url_basic_003.phpt index 9649bdadb1238..8b0e7eb87500a 100644 --- a/ext/standard/tests/url/parse_url_basic_003.phpt +++ b/ext/standard/tests/url/parse_url_basic_003.phpt @@ -112,6 +112,7 @@ echo "Done"; --> / : NULL --> /rest/Users?filter={"id":"123"} : NULL --> %:x : NULL +--> https://example.com:0/ : string(11) "example.com" --> http:///blah.com : bool(false) --> http://:80 : bool(false) --> http://user@:80 : bool(false) diff --git a/ext/standard/tests/url/parse_url_basic_004.phpt b/ext/standard/tests/url/parse_url_basic_004.phpt index 75aacdf847ada..042daefeda8d9 100644 --- a/ext/standard/tests/url/parse_url_basic_004.phpt +++ b/ext/standard/tests/url/parse_url_basic_004.phpt @@ -112,6 +112,7 @@ echo "Done"; --> / : NULL --> /rest/Users?filter={"id":"123"} : NULL --> %:x : NULL +--> https://example.com:0/ : NULL --> http:///blah.com : bool(false) --> http://:80 : bool(false) --> http://user@:80 : bool(false) diff --git a/ext/standard/tests/url/parse_url_basic_005.phpt b/ext/standard/tests/url/parse_url_basic_005.phpt index 1463e0a29ae04..a5ca381a691fe 100644 --- a/ext/standard/tests/url/parse_url_basic_005.phpt +++ b/ext/standard/tests/url/parse_url_basic_005.phpt @@ -112,6 +112,7 @@ echo "Done"; --> / : NULL --> /rest/Users?filter={"id":"123"} : NULL --> %:x : NULL +--> https://example.com:0/ : NULL --> http:///blah.com : bool(false) --> http://:80 : bool(false) --> http://user@:80 : bool(false) diff --git a/ext/standard/tests/url/parse_url_basic_006.phpt b/ext/standard/tests/url/parse_url_basic_006.phpt index 78eee265ce4df..51dcb2018cd88 100644 --- a/ext/standard/tests/url/parse_url_basic_006.phpt +++ b/ext/standard/tests/url/parse_url_basic_006.phpt @@ -112,6 +112,7 @@ echo "Done"; --> / : NULL --> /rest/Users?filter={"id":"123"} : NULL --> %:x : NULL +--> https://example.com:0/ : NULL --> http:///blah.com : bool(false) --> http://:80 : bool(false) --> http://user@:80 : bool(false) diff --git a/ext/standard/tests/url/parse_url_basic_007.phpt b/ext/standard/tests/url/parse_url_basic_007.phpt index 85a420c88c910..28a6d154f9988 100644 --- a/ext/standard/tests/url/parse_url_basic_007.phpt +++ b/ext/standard/tests/url/parse_url_basic_007.phpt @@ -112,6 +112,7 @@ echo "Done"; --> / : string(1) "/" --> /rest/Users?filter={"id":"123"} : string(11) "/rest/Users" --> %:x : string(3) "%:x" +--> https://example.com:0/ : string(1) "/" --> http:///blah.com : bool(false) --> http://:80 : bool(false) --> http://user@:80 : bool(false) diff --git a/ext/standard/tests/url/parse_url_basic_008.phpt b/ext/standard/tests/url/parse_url_basic_008.phpt index 75952b2ecd732..c2adc9e0700bf 100644 --- a/ext/standard/tests/url/parse_url_basic_008.phpt +++ b/ext/standard/tests/url/parse_url_basic_008.phpt @@ -112,6 +112,7 @@ echo "Done"; --> / : NULL --> /rest/Users?filter={"id":"123"} : string(19) "filter={"id":"123"}" --> %:x : NULL +--> https://example.com:0/ : NULL --> http:///blah.com : bool(false) --> http://:80 : bool(false) --> http://user@:80 : bool(false) diff --git a/ext/standard/tests/url/parse_url_basic_009.phpt b/ext/standard/tests/url/parse_url_basic_009.phpt index ab9232a9a7dd0..3074a08347c8c 100644 --- a/ext/standard/tests/url/parse_url_basic_009.phpt +++ b/ext/standard/tests/url/parse_url_basic_009.phpt @@ -112,6 +112,7 @@ echo "Done"; --> / : NULL --> /rest/Users?filter={"id":"123"} : NULL --> %:x : NULL +--> https://example.com:0/ : NULL --> http:///blah.com : bool(false) --> http://:80 : bool(false) --> http://user@:80 : bool(false) diff --git a/ext/standard/tests/url/parse_url_unterminated.phpt b/ext/standard/tests/url/parse_url_unterminated.phpt index 6a0cf02745354..8af50dbe287fe 100644 --- a/ext/standard/tests/url/parse_url_unterminated.phpt +++ b/ext/standard/tests/url/parse_url_unterminated.phpt @@ -861,6 +861,15 @@ echo "Done"; string(3) "%:x" } +--> https://example.com:0/: array(3) { + ["scheme"]=> + string(5) "https" + ["host"]=> + string(11) "example.com" + ["path"]=> + string(1) "/" +} + --> http:///blah.com: bool(false) --> http://:80: bool(false) diff --git a/ext/standard/tests/url/urls.inc b/ext/standard/tests/url/urls.inc index 199f22caea1d3..d334f4e9ab2be 100644 --- a/ext/standard/tests/url/urls.inc +++ b/ext/standard/tests/url/urls.inc @@ -92,6 +92,7 @@ $urls = array( '/', '/rest/Users?filter={"id":"123"}', '%:x', +'https://example.com:0/', // Severely malformed URLs that do not parse: 'http:///blah.com', diff --git a/ext/standard/url.c b/ext/standard/url.c index 7763759bc1d0b..fde4ff5377967 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -194,10 +194,11 @@ PHPAPI php_url *php_url_parse_ex(char const *str, size_t length) if (pp - p > 0 && pp - p < 6 && (pp == ue || *pp == '/')) { zend_long port; + char *end; memcpy(port_buf, p, (pp - p)); port_buf[pp - p] = '\0'; - port = ZEND_STRTOL(port_buf, NULL, 10); - if (port > 0 && port <= 65535) { + port = ZEND_STRTOL(port_buf, &end, 10); + if (port >= 0 && port <= 65535 && end != port_buf) { ret->port = (unsigned short) port; if (s + 1 < ue && *s == '/' && *(s + 1) == '/') { /* relative-scheme URL */ s += 2; @@ -258,10 +259,11 @@ PHPAPI php_url *php_url_parse_ex(char const *str, size_t length) return NULL; } else if (e - p > 0) { zend_long port; + char *end; memcpy(port_buf, p, (e - p)); port_buf[e - p] = '\0'; - port = ZEND_STRTOL(port_buf, NULL, 10); - if (port > 0 && port <= 65535) { + port = ZEND_STRTOL(port_buf, &end, 10); + if (port >= 0 && port <= 65535 && end != port_buf) { ret->port = (unsigned short)port; } else { php_url_free(ret);