Skip to content

Commit d6d7854

Browse files
committed
Merge branch 'PHP-8.3' into PHP-8.4
* PHP-8.3: Fix GH-17037: UAF in user filter when adding existing filter name due to incorrect error handling
2 parents fbba6df + 00f4881 commit d6d7854

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ PHP NEWS
22
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33
?? ??? ????, PHP 8.4.3
44

5+
- Streams:
6+
. Fixed bug GH-17037 (UAF in user filter when adding existing filter name due
7+
to incorrect error handling). (nielsdos)
58

69
05 Dec 2024, PHP 8.4.2
710

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
--TEST--
2+
GH-17037 (UAF in user filter when adding existing filter name due to incorrect error handling)
3+
--FILE--
4+
<?php
5+
var_dump(stream_filter_register('string.toupper', 'filter_string_toupper'));
6+
?>
7+
--EXPECT--
8+
bool(false)

ext/standard/user_filters.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -521,13 +521,17 @@ PHP_FUNCTION(stream_filter_register)
521521
fdat = ecalloc(1, sizeof(struct php_user_filter_data));
522522
fdat->classname = zend_string_copy(classname);
523523

524-
if (zend_hash_add_ptr(BG(user_filter_map), filtername, fdat) != NULL &&
525-
php_stream_filter_register_factory_volatile(filtername, &user_filter_factory) == SUCCESS) {
526-
RETVAL_TRUE;
524+
if (zend_hash_add_ptr(BG(user_filter_map), filtername, fdat) != NULL) {
525+
if (php_stream_filter_register_factory_volatile(filtername, &user_filter_factory) == SUCCESS) {
526+
RETURN_TRUE;
527+
}
528+
529+
zend_hash_del(BG(user_filter_map), filtername);
527530
} else {
528531
zend_string_release_ex(classname, 0);
529532
efree(fdat);
530-
RETVAL_FALSE;
531533
}
534+
535+
RETURN_FALSE;
532536
}
533537
/* }}} */

0 commit comments

Comments
 (0)