Skip to content

Commit 0097ad8

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

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

ext/zend_test/test.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -697,6 +697,15 @@ void * zend_test_custom_realloc(void * ptr, size_t len ZEND_FILE_LINE_DC ZEND_FI
697697
return _zend_mm_realloc(ZT_G(zend_orig_heap), ptr, len ZEND_FILE_LINE_EMPTY_CC ZEND_FILE_LINE_EMPTY_CC);
698698
}
699699

700+
static void zend_test_reset_heap(zend_zend_test_globals *zend_test_globals)
701+
{
702+
if (zend_test_globals->zend_test_heap) {
703+
free(zend_test_globals->zend_test_heap);
704+
zend_test_globals->zend_test_heap = NULL;
705+
zend_mm_set_heap(zend_test_globals->zend_orig_heap);
706+
}
707+
}
708+
700709
static PHP_INI_MH(OnUpdateZendTestObserveOplineInZendMM)
701710
{
702711
if (new_value == NULL) {
@@ -718,10 +727,8 @@ static PHP_INI_MH(OnUpdateZendTestObserveOplineInZendMM)
718727
);
719728
ZT_G(zend_orig_heap) = zend_mm_get_heap();
720729
zend_mm_set_heap(ZT_G(zend_test_heap));
721-
} else if (ZT_G(zend_test_heap)) {
722-
free(ZT_G(zend_test_heap));
723-
ZT_G(zend_test_heap) = NULL;
724-
zend_mm_set_heap(ZT_G(zend_orig_heap));
730+
} else {
731+
zend_test_reset_heap(ZEND_MODULE_GLOBALS_BULK(zend_test));
725732
}
726733
return OnUpdateBool(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage);
727734
}
@@ -1387,6 +1394,7 @@ static PHP_GINIT_FUNCTION(zend_test)
13871394
static PHP_GSHUTDOWN_FUNCTION(zend_test)
13881395
{
13891396
zend_test_observer_gshutdown(zend_test_globals);
1397+
zend_test_reset_heap(zend_test_globals);
13901398
}
13911399

13921400
PHP_MINFO_FUNCTION(zend_test)

0 commit comments

Comments
 (0)