Skip to content

Commit 5ec26ed

Browse files
committed
Fix reference handling in SpoofChecker
Closes GH-14414.
1 parent 1b1677a commit 5ec26ed

File tree

4 files changed

+58
-6
lines changed

4 files changed

+58
-6
lines changed

NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ PHP NEWS
1818
- DOM:
1919
. Fixed bug GH-14343 (Memory leak in xml and dom). (nielsdos)
2020

21+
- Intl:
22+
. Fix reference handling in SpoofChecker. (nielsdos)
23+
2124
- MySQLnd:
2225
. Partially fix bug GH-10599 (Apache crash on Windows when using a
2326
self-referencing anonymous function inside a class with an active

ext/intl/spoofchecker/spoofchecker_main.c

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

4444
if (error_code) {
45-
zval_ptr_dtor(error_code);
46-
ZVAL_LONG(Z_REFVAL_P(error_code), ret);
47-
Z_TRY_ADDREF_P(error_code);
45+
ZEND_TRY_ASSIGN_REF_LONG(error_code, ret);
4846
}
4947
RETVAL_BOOL(ret != 0);
5048
}
@@ -76,9 +74,7 @@ PHP_METHOD(Spoofchecker, areConfusable)
7674
}
7775

7876
if (error_code) {
79-
zval_ptr_dtor(error_code);
80-
ZVAL_LONG(Z_REFVAL_P(error_code), ret);
81-
Z_TRY_ADDREF_P(error_code);
77+
ZEND_TRY_ASSIGN_REF_LONG(error_code, ret);
8278
}
8379
RETVAL_BOOL(ret != 0);
8480
}
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)