summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2018-03-14 09:11:48 +0300
committerDmitry Stogov <dmitry@zend.com>2018-03-14 09:11:48 +0300
commitb6a41ad5ba2f853d44e6184375968a86c8167f1e (patch)
treea93d6fab8abf588ddda151164c864ca237a55970
parentd2b47e80655b4fa4b1fc5d271d233c7a64bbee43 (diff)
downloadphp-git-b6a41ad5ba2f853d44e6184375968a86c8167f1e.tar.gz
Fixed use-after-free
-rw-r--r--ext/opcache/zend_persist.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/ext/opcache/zend_persist.c b/ext/opcache/zend_persist.c
index 830b3883c8..ebcf43ed13 100644
--- a/ext/opcache/zend_persist.c
+++ b/ext/opcache/zend_persist.c
@@ -852,13 +852,6 @@ static void zend_accel_persist_class_table(HashTable *class_table)
zend_persistent_script *zend_accel_script_persist(zend_persistent_script *script, char **key, unsigned int key_length, int for_shm)
{
script->mem = ZCG(mem);
- script->corrupted = 0;
- ZCG(current_persistent_script) = script;
-
- if (!for_shm) {
- /* script is not going to be saved in SHM */
- script->corrupted = 1;
- }
ZEND_ASSERT(((zend_uintptr_t)ZCG(mem) & 0x7) == 0); /* should be 8 byte aligned */
zend_shared_alloc_clear_xlat_table();
@@ -867,6 +860,15 @@ zend_persistent_script *zend_accel_script_persist(zend_persistent_script *script
if (key && *key) {
*key = zend_accel_memdup(*key, key_length + 1);
}
+
+ script->corrupted = 0;
+ ZCG(current_persistent_script) = script;
+
+ if (!for_shm) {
+ /* script is not going to be saved in SHM */
+ script->corrupted = 1;
+ }
+
zend_accel_store_string(script->script.filename);
#ifdef __SSE2__