1
0
mirror of https://github.com/php/php-src.git synced 2026-04-04 22:52:40 +02:00

Fix file cache run_time_cache unserialization

If the script was serialized as file_cache_only (thus non-immutable)
and then gets unserialized into SHM, we need to allocate a new
run_time_cache slot and can't use the serialized arena pointer.
This commit is contained in:
Nikita Popov
2020-01-02 14:56:39 +01:00
parent e576d342bb
commit 36d5fbbd6b

View File

@@ -1237,7 +1237,15 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr
ZEND_MAP_PTR_NEW(op_array->run_time_cache);
} else {
ZEND_MAP_PTR_INIT(op_array->static_variables_ptr, &op_array->static_variables);
UNSERIALIZE_PTR(ZEND_MAP_PTR(op_array->run_time_cache));
if (ZEND_MAP_PTR(op_array->run_time_cache)) {
if (script->corrupted) {
/* Not in SHM: Use serialized arena pointer. */
UNSERIALIZE_PTR(ZEND_MAP_PTR(op_array->run_time_cache));
} else {
/* In SHM: Allocate new pointer. */
ZEND_MAP_PTR_NEW(op_array->run_time_cache);
}
}
}
}
}