mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
Fixed bug #66461 (PHP crashes if opcache.interned_strings_buffer=0)
This commit is contained in:
parent
fcd75690fe
commit
ce2f024e9f
2
NEWS
2
NEWS
@ -9,6 +9,8 @@ PHP NEWS
|
||||
- OPCache:
|
||||
. Fixed bug #66474 (Optimizer bug in constant string to boolean conversion).
|
||||
(Dmitry)
|
||||
. Fixed bug #66461 (PHP crashes if opcache.interned_strings_buffer=0).
|
||||
(Dmitry)
|
||||
. Fixed bug #66298 (ext/opcache/Optimizer/zend_optimizer.c has dos-style
|
||||
^M as lineend). (Laruence)
|
||||
|
||||
|
@ -2128,7 +2128,9 @@ static void accel_activate(void)
|
||||
}
|
||||
|
||||
#if (ZEND_EXTENSION_API_NO > PHP_5_3_X_API_NO) && !defined(ZTS)
|
||||
if (ZCG(accel_directives).interned_strings_buffer) {
|
||||
accel_interned_strings_restore_state(TSRMLS_C);
|
||||
}
|
||||
#endif
|
||||
|
||||
zend_shared_alloc_restore_state();
|
||||
@ -2446,8 +2448,10 @@ static int zend_accel_init_shm(TSRMLS_D)
|
||||
|
||||
#if ZEND_EXTENSION_API_NO > PHP_5_3_X_API_NO
|
||||
|
||||
ZCSG(interned_strings_start) = ZCSG(interned_strings_end) = NULL;
|
||||
# ifndef ZTS
|
||||
zend_hash_init(&ZCSG(interned_strings), (ZCG(accel_directives).interned_strings_buffer * 1024 * 1024) / (sizeof(Bucket) + sizeof(Bucket*) + 8 /* average string length */), NULL, NULL, 1);
|
||||
if (ZCG(accel_directives).interned_strings_buffer) {
|
||||
ZCSG(interned_strings).nTableMask = ZCSG(interned_strings).nTableSize - 1;
|
||||
ZCSG(interned_strings).arBuckets = zend_shared_alloc(ZCSG(interned_strings).nTableSize * sizeof(Bucket *));
|
||||
ZCSG(interned_strings_start) = zend_shared_alloc((ZCG(accel_directives).interned_strings_buffer * 1024 * 1024));
|
||||
@ -2457,25 +2461,26 @@ static int zend_accel_init_shm(TSRMLS_D)
|
||||
}
|
||||
ZCSG(interned_strings_end) = ZCSG(interned_strings_start) + (ZCG(accel_directives).interned_strings_buffer * 1024 * 1024);
|
||||
ZCSG(interned_strings_top) = ZCSG(interned_strings_start);
|
||||
# else
|
||||
ZCSG(interned_strings_start) = ZCSG(interned_strings_end) = NULL;
|
||||
# endif
|
||||
|
||||
orig_interned_strings_start = CG(interned_strings_start);
|
||||
orig_interned_strings_end = CG(interned_strings_end);
|
||||
CG(interned_strings_start) = ZCSG(interned_strings_start);
|
||||
CG(interned_strings_end) = ZCSG(interned_strings_end);
|
||||
}
|
||||
# endif
|
||||
|
||||
orig_new_interned_string = zend_new_interned_string;
|
||||
orig_interned_strings_snapshot = zend_interned_strings_snapshot;
|
||||
orig_interned_strings_restore = zend_interned_strings_restore;
|
||||
|
||||
CG(interned_strings_start) = ZCSG(interned_strings_start);
|
||||
CG(interned_strings_end) = ZCSG(interned_strings_end);
|
||||
zend_new_interned_string = accel_new_interned_string_for_php;
|
||||
zend_interned_strings_snapshot = accel_interned_strings_snapshot_for_php;
|
||||
zend_interned_strings_restore = accel_interned_strings_restore_for_php;
|
||||
|
||||
# ifndef ZTS
|
||||
if (ZCG(accel_directives).interned_strings_buffer) {
|
||||
accel_use_shm_interned_strings(TSRMLS_C);
|
||||
accel_interned_strings_save_state(TSRMLS_C);
|
||||
}
|
||||
# endif
|
||||
|
||||
#endif
|
||||
@ -2709,6 +2714,7 @@ void accel_shutdown(TSRMLS_D)
|
||||
}
|
||||
|
||||
#if ZEND_EXTENSION_API_NO > PHP_5_3_X_API_NO
|
||||
if (ZCG(accel_directives).interned_strings_buffer) {
|
||||
# ifndef ZTS
|
||||
zend_hash_clean(CG(function_table));
|
||||
zend_hash_clean(CG(class_table));
|
||||
@ -2716,6 +2722,7 @@ void accel_shutdown(TSRMLS_D)
|
||||
# endif
|
||||
CG(interned_strings_start) = orig_interned_strings_start;
|
||||
CG(interned_strings_end) = orig_interned_strings_end;
|
||||
}
|
||||
zend_new_interned_string = orig_new_interned_string;
|
||||
zend_interned_strings_snapshot = orig_interned_strings_snapshot;
|
||||
zend_interned_strings_restore = orig_interned_strings_restore;
|
||||
|
15
ext/opcache/tests/bug66461.phpt
Normal file
15
ext/opcache/tests/bug66461.phpt
Normal file
@ -0,0 +1,15 @@
|
||||
--TEST--
|
||||
Bug #66461 (PHP crashes if opcache.interned_strings_buffer=0)
|
||||
--INI--
|
||||
opcache.enable=1
|
||||
opcache.enable_cli=1
|
||||
opcache.optimization_level=-1
|
||||
opcache.file_update_protection=0
|
||||
opcache.interned_strings_buffer=0
|
||||
--SKIPIF--
|
||||
<?php require_once('skipif.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
echo "ok\n";
|
||||
--EXPECT--
|
||||
ok
|
Loading…
Reference in New Issue
Block a user