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 new file mode 100644 index 0000000000000..d2feaa77a32f3 --- /dev/null +++ b/ext/intl/tests/spoofchecker_self_references.phpt @@ -0,0 +1,18 @@ +--TEST-- +SpoofChecker with self references +--EXTENSIONS-- +intl +--FILE-- +isSuspicious("", $checker); + +$checker = new Spoofchecker(); +$checker->areConfusable("", "", $checker); + +echo "Done\n"; + +?> +--EXPECT-- +Done diff --git a/ext/intl/tests/spoofchecker_typed_references.phpt b/ext/intl/tests/spoofchecker_typed_references.phpt new file mode 100644 index 0000000000000..5508497072da8 --- /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"]=> + string(1) "0" +} +object(Test)#3 (1) { + ["x"]=> + string(1) "1" +}