diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-10-20 12:51:17 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-10-20 12:51:17 +0200 |
commit | e0054fc942302cdbf3afb0845ab03b90261f469f (patch) | |
tree | af086ba7d573aed63c8b279ad2154a37ac8530a5 /ext/opcache/ZendAccelerator.c | |
parent | 35557fe7c48d046f86e9dde6903337e4475359bf (diff) | |
parent | cf0470793844190d1968d55d741a8de8e893ebd5 (diff) | |
download | php-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.c | 6 |
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); |