summaryrefslogtreecommitdiff
path: root/ext/opcache/ZendAccelerator.c
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-10-20 12:51:17 +0200
committerNikita Popov <nikita.ppv@gmail.com>2020-10-20 12:51:17 +0200
commite0054fc942302cdbf3afb0845ab03b90261f469f (patch)
treeaf086ba7d573aed63c8b279ad2154a37ac8530a5 /ext/opcache/ZendAccelerator.c
parent35557fe7c48d046f86e9dde6903337e4475359bf (diff)
parentcf0470793844190d1968d55d741a8de8e893ebd5 (diff)
downloadphp-git-e0054fc942302cdbf3afb0845ab03b90261f469f.tar.gz
Merge branch 'PHP-8.0'
* PHP-8.0: Fix bug #79643: Invalid memory read when opcache.interned_strings_buffer is 0
Diffstat (limited to 'ext/opcache/ZendAccelerator.c')
-rw-r--r--ext/opcache/ZendAccelerator.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c
index 5ca1baf370..56757895bb 100644
--- a/ext/opcache/ZendAccelerator.c
+++ b/ext/opcache/ZendAccelerator.c
@@ -2634,7 +2634,9 @@ static int zend_accel_init_shm(void)
if (ZCG(accel_directives).interned_strings_buffer) {
accel_shared_globals = zend_shared_alloc((ZCG(accel_directives).interned_strings_buffer * 1024 * 1024));
} else {
- accel_shared_globals = zend_shared_alloc(sizeof(zend_accel_shared_globals));
+ /* Make sure there is always at least one interned string hash slot,
+ * so the table can be queried unconditionally. */
+ accel_shared_globals = zend_shared_alloc(sizeof(zend_accel_shared_globals) + sizeof(uint32_t));
}
if (!accel_shared_globals) {
zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Insufficient shared memory!");
@@ -2675,6 +2677,8 @@ static int zend_accel_init_shm(void)
STRTAB_INVALID_POS,
(char*)ZCSG(interned_strings).start -
((char*)&ZCSG(interned_strings) + sizeof(zend_string_table)));
+ } else {
+ *STRTAB_HASH_TO_SLOT(&ZCSG(interned_strings), 0) = STRTAB_INVALID_POS;
}
zend_interned_strings_set_request_storage_handlers(accel_new_interned_string_for_php, accel_init_interned_string_for_php);