Skip to content

Commit 2f9de8b

Browse files
committed
Merge branch 'PHP-8.3'
* PHP-8.3: Fix reference handling in SpoofChecker
2 parents d005ab2 + c87f29f commit 2f9de8b

File tree

3 files changed

+55
-6
lines changed

3 files changed

+55
-6
lines changed

ext/intl/spoofchecker/spoofchecker_main.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,7 @@ PHP_METHOD(Spoofchecker, isSuspicious)
5555
}
5656

5757
if (error_code) {
58-
zval_ptr_dtor(error_code);
59-
ZVAL_LONG(Z_REFVAL_P(error_code), ret);
60-
Z_TRY_ADDREF_P(error_code);
58+
ZEND_TRY_ASSIGN_REF_LONG(error_code, ret);
6159
}
6260
RETVAL_BOOL(ret != 0);
6361
}
@@ -91,9 +89,7 @@ PHP_METHOD(Spoofchecker, areConfusable)
9189
}
9290

9391
if (error_code) {
94-
zval_ptr_dtor(error_code);
95-
ZVAL_LONG(Z_REFVAL_P(error_code), ret);
96-
Z_TRY_ADDREF_P(error_code);
92+
ZEND_TRY_ASSIGN_REF_LONG(error_code, ret);
9793
}
9894
RETVAL_BOOL(ret != 0);
9995
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
--TEST--
2+
SpoofChecker with self references
3+
--EXTENSIONS--
4+
intl
5+
--FILE--
6+
<?php
7+
8+
$checker = new Spoofchecker();
9+
$checker->isSuspicious("", $checker);
10+
11+
$checker = new Spoofchecker();
12+
$checker->areConfusable("", "", $checker);
13+
14+
echo "Done\n";
15+
16+
?>
17+
--EXPECT--
18+
Done
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
--TEST--
2+
SpoofChecker with typed references
3+
--EXTENSIONS--
4+
intl
5+
--FILE--
6+
<?php
7+
8+
class Test {
9+
public string $x;
10+
}
11+
12+
$test = new Test;
13+
$test->x = "";
14+
15+
$checker = new Spoofchecker();
16+
$checker->isSuspicious("", $test->x);
17+
var_dump($test);
18+
19+
$test = new Test;
20+
$test->x = "";
21+
22+
$checker = new Spoofchecker();
23+
$checker->areConfusable("", "", $test->x);
24+
var_dump($test);
25+
26+
?>
27+
--EXPECT--
28+
object(Test)#1 (1) {
29+
["x"]=>
30+
string(1) "0"
31+
}
32+
object(Test)#3 (1) {
33+
["x"]=>
34+
string(1) "1"
35+
}

0 commit comments

Comments
 (0)