1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

Fix access to uninitialized variables in preload_load()

preload_load() reads EG(class_table) and EG(function_table), but these may not
be initialized. Move these accesses out of preload_load().

Closes GH-20081
This commit is contained in:
Arnaud Le Blanc
2025-10-06 18:25:40 +02:00
parent 059f9f78e5
commit ab9d121f48
2 changed files with 10 additions and 9 deletions

4
NEWS
View File

@@ -11,6 +11,10 @@ PHP NEWS
. Fixed bug GH-19974 (fpm_status_export_to_zval segfault for parallel
execution). (Jakub Zelenka, txuna)
- Opcache:
. Fixed bug GH-20081 (access to uninitialized vars in preload_load()).
(Arnaud)
- Random:
. Fix Randomizer::__serialize() w.r.t. INDIRECTs. (nielsdos)

View File

@@ -4345,15 +4345,6 @@ static void preload_load(void)
}
}
if (EG(zend_constants)) {
EG(persistent_constants_count) = EG(zend_constants)->nNumUsed;
}
if (EG(function_table)) {
EG(persistent_functions_count) = EG(function_table)->nNumUsed;
}
if (EG(class_table)) {
EG(persistent_classes_count) = EG(class_table)->nNumUsed;
}
if (CG(map_ptr_last) != ZCSG(map_ptr_last)) {
size_t old_map_ptr_last = CG(map_ptr_last);
CG(map_ptr_last) = ZCSG(map_ptr_last);
@@ -4589,6 +4580,12 @@ static zend_result accel_preload(const char *config, bool in_child)
preload_load();
/* Update persistent counts, as shutdown will discard anything past
* that, and these tables are aliases to global ones at this point. */
EG(persistent_functions_count) = EG(function_table)->nNumUsed;
EG(persistent_classes_count) = EG(class_table)->nNumUsed;
EG(persistent_constants_count) = EG(zend_constants)->nNumUsed;
/* Store individual scripts with unlinked classes */
HANDLE_BLOCK_INTERRUPTIONS();
SHM_UNPROTECT();