From 353f963bba4f9abcba7d4609e56d0cf2e8af8dfc Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 1 Jul 2021 16:21:24 +0200 Subject: [PATCH] Init STRLEN result when deprecation promoted to exception Move the result initialization before HANDLE_EXCEPTION(), the actual value doesn't matter. This fixes one of the issues report in bug #81190. --- Zend/tests/strlen_deprecation_to_exception.phpt | 17 +++++++++++++++++ Zend/zend_vm_def.h | 2 +- Zend/zend_vm_execute.h | 6 +++--- 3 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 Zend/tests/strlen_deprecation_to_exception.phpt diff --git a/Zend/tests/strlen_deprecation_to_exception.phpt b/Zend/tests/strlen_deprecation_to_exception.phpt new file mode 100644 index 00000000000..7b616f3b643 --- /dev/null +++ b/Zend/tests/strlen_deprecation_to_exception.phpt @@ -0,0 +1,17 @@ +--TEST-- +strlen() null deprecation warning promoted to exception +--FILE-- +getMessage(), "\n"; +} + +?> +--EXPECT-- +strlen(): Passing null to parameter #1 ($string) of type string is deprecated diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index e6a49d1c0d7..c22ed8c0b17 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -8368,10 +8368,10 @@ ZEND_VM_COLD_CONST_HANDLER(121, ZEND_STRLEN, CONST|TMPVAR|CV, ANY) if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) { zend_error(E_DEPRECATED, "strlen(): Passing null to parameter #1 ($string) of type string is deprecated"); + ZVAL_LONG(EX_VAR(opline->result.var), 0); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } - ZVAL_LONG(EX_VAR(opline->result.var), 0); break; } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 7fabd5d2673..5d5c0a2ae7c 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -5461,10 +5461,10 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CONST if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) { zend_error(E_DEPRECATED, "strlen(): Passing null to parameter #1 ($string) of type string is deprecated"); + ZVAL_LONG(EX_VAR(opline->result.var), 0); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } - ZVAL_LONG(EX_VAR(opline->result.var), 0); break; } @@ -14648,10 +14648,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEN if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) { zend_error(E_DEPRECATED, "strlen(): Passing null to parameter #1 ($string) of type string is deprecated"); + ZVAL_LONG(EX_VAR(opline->result.var), 0); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } - ZVAL_LONG(EX_VAR(opline->result.var), 0); break; } @@ -38691,10 +38691,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OP if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) { zend_error(E_DEPRECATED, "strlen(): Passing null to parameter #1 ($string) of type string is deprecated"); + ZVAL_LONG(EX_VAR(opline->result.var), 0); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } - ZVAL_LONG(EX_VAR(opline->result.var), 0); break; }