Skip to content

Commit 4c751ec

Browse files
committed
Merge branch 'PHP-8.3' into PHP-8.4
* PHP-8.3: Fix GH-17938: UAF with zend_test opline observer and magic_quotes_gpc=1 (#17958)
2 parents ee4a9a4 + 5040568 commit 4c751ec

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

ext/zend_test/test.c

+12-4
Original file line numberDiff line numberDiff line change
@@ -703,6 +703,15 @@ void * zend_test_custom_realloc(void * ptr, size_t len ZEND_FILE_LINE_DC ZEND_FI
703703
return _zend_mm_realloc(ZT_G(zend_orig_heap), ptr, len ZEND_FILE_LINE_EMPTY_CC ZEND_FILE_LINE_EMPTY_CC);
704704
}
705705

706+
static void zend_test_reset_heap(zend_zend_test_globals *zend_test_globals)
707+
{
708+
if (zend_test_globals->zend_test_heap) {
709+
free(zend_test_globals->zend_test_heap);
710+
zend_test_globals->zend_test_heap = NULL;
711+
zend_mm_set_heap(zend_test_globals->zend_orig_heap);
712+
}
713+
}
714+
706715
static PHP_INI_MH(OnUpdateZendTestObserveOplineInZendMM)
707716
{
708717
if (new_value == NULL) {
@@ -724,10 +733,8 @@ static PHP_INI_MH(OnUpdateZendTestObserveOplineInZendMM)
724733
);
725734
ZT_G(zend_orig_heap) = zend_mm_get_heap();
726735
zend_mm_set_heap(ZT_G(zend_test_heap));
727-
} else if (ZT_G(zend_test_heap)) {
728-
free(ZT_G(zend_test_heap));
729-
ZT_G(zend_test_heap) = NULL;
730-
zend_mm_set_heap(ZT_G(zend_orig_heap));
736+
} else {
737+
zend_test_reset_heap(ZEND_MODULE_GLOBALS_BULK(zend_test));
731738
}
732739
return OnUpdateBool(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage);
733740
}
@@ -1397,6 +1404,7 @@ static PHP_GINIT_FUNCTION(zend_test)
13971404
static PHP_GSHUTDOWN_FUNCTION(zend_test)
13981405
{
13991406
zend_test_observer_gshutdown(zend_test_globals);
1407+
zend_test_reset_heap(zend_test_globals);
14001408
}
14011409

14021410
PHP_MINFO_FUNCTION(zend_test)

0 commit comments

Comments
 (0)