From 4b7e857897d73f8c657ec6332745e8aac424d2dd Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Sat, 1 Jun 2024 19:33:28 +0200 Subject: [PATCH 1/2] Add tests with wrong output --- .../tests/spoofchecker_self_references.phpt | 22 ++++++++++++ .../tests/spoofchecker_typed_references.phpt | 35 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 ext/intl/tests/spoofchecker_self_references.phpt create mode 100644 ext/intl/tests/spoofchecker_typed_references.phpt diff --git a/ext/intl/tests/spoofchecker_self_references.phpt b/ext/intl/tests/spoofchecker_self_references.phpt new file mode 100644 index 0000000000000..bd9a7490c3687 --- /dev/null +++ b/ext/intl/tests/spoofchecker_self_references.phpt @@ -0,0 +1,22 @@ +--TEST-- +SpoofChecker with self references +--EXTENSIONS-- +intl +--FILE-- +isSuspicious("", $checker); + +$checker = new Spoofchecker(); +$checker->areConfusable("", "", $checker); + +echo "Done\n"; + +?> +--EXPECT-- +Done +[Sat Jun 1 19:32:47 2024] Script: '/run/media/niels/MoreData/php-8.2/ext/intl/tests/spoofchecker_self_references.php' +/run/media/niels/MoreData/php-8.2/Zend/zend_objects_API.h(92) : Freeing 0x0000796cc9205780 (64 bytes), script=/run/media/niels/MoreData/php-8.2/ext/intl/tests/spoofchecker_self_references.php +Last leak repeated 1 time +=== Total 2 memory leaks detected === diff --git a/ext/intl/tests/spoofchecker_typed_references.phpt b/ext/intl/tests/spoofchecker_typed_references.phpt new file mode 100644 index 0000000000000..55f7a8d065e77 --- /dev/null +++ b/ext/intl/tests/spoofchecker_typed_references.phpt @@ -0,0 +1,35 @@ +--TEST-- +SpoofChecker with typed references +--EXTENSIONS-- +intl +--FILE-- +x = ""; + +$checker = new Spoofchecker(); +$checker->isSuspicious("", $test->x); +var_dump($test); + +$test = new Test; +$test->x = ""; + +$checker = new Spoofchecker(); +$checker->areConfusable("", "", $test->x); +var_dump($test); + +?> +--EXPECT-- +object(Test)#1 (1) { + ["x"]=> + int(0) +} +object(Test)#3 (1) { + ["x"]=> + int(1) +} From d282592b86001a6a070735041d55a547cd6be687 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Sat, 1 Jun 2024 19:35:24 +0200 Subject: [PATCH 2/2] Fix reference handling in SpoofChecker --- ext/intl/spoofchecker/spoofchecker_main.c | 8 ++------ ext/intl/tests/spoofchecker_self_references.phpt | 4 ---- ext/intl/tests/spoofchecker_typed_references.phpt | 4 ++-- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/ext/intl/spoofchecker/spoofchecker_main.c b/ext/intl/spoofchecker/spoofchecker_main.c index a890f468e130f..9863ee5e5ce3a 100644 --- a/ext/intl/spoofchecker/spoofchecker_main.c +++ b/ext/intl/spoofchecker/spoofchecker_main.c @@ -42,9 +42,7 @@ PHP_METHOD(Spoofchecker, isSuspicious) } if (error_code) { - zval_ptr_dtor(error_code); - ZVAL_LONG(Z_REFVAL_P(error_code), ret); - Z_TRY_ADDREF_P(error_code); + ZEND_TRY_ASSIGN_REF_LONG(error_code, ret); } RETVAL_BOOL(ret != 0); } @@ -76,9 +74,7 @@ PHP_METHOD(Spoofchecker, areConfusable) } if (error_code) { - zval_ptr_dtor(error_code); - ZVAL_LONG(Z_REFVAL_P(error_code), ret); - Z_TRY_ADDREF_P(error_code); + ZEND_TRY_ASSIGN_REF_LONG(error_code, ret); } RETVAL_BOOL(ret != 0); } diff --git a/ext/intl/tests/spoofchecker_self_references.phpt b/ext/intl/tests/spoofchecker_self_references.phpt index bd9a7490c3687..d2feaa77a32f3 100644 --- a/ext/intl/tests/spoofchecker_self_references.phpt +++ b/ext/intl/tests/spoofchecker_self_references.phpt @@ -16,7 +16,3 @@ echo "Done\n"; ?> --EXPECT-- Done -[Sat Jun 1 19:32:47 2024] Script: '/run/media/niels/MoreData/php-8.2/ext/intl/tests/spoofchecker_self_references.php' -/run/media/niels/MoreData/php-8.2/Zend/zend_objects_API.h(92) : Freeing 0x0000796cc9205780 (64 bytes), script=/run/media/niels/MoreData/php-8.2/ext/intl/tests/spoofchecker_self_references.php -Last leak repeated 1 time -=== Total 2 memory leaks detected === diff --git a/ext/intl/tests/spoofchecker_typed_references.phpt b/ext/intl/tests/spoofchecker_typed_references.phpt index 55f7a8d065e77..5508497072da8 100644 --- a/ext/intl/tests/spoofchecker_typed_references.phpt +++ b/ext/intl/tests/spoofchecker_typed_references.phpt @@ -27,9 +27,9 @@ var_dump($test); --EXPECT-- object(Test)#1 (1) { ["x"]=> - int(0) + string(1) "0" } object(Test)#3 (1) { ["x"]=> - int(1) + string(1) "1" }