PATH:
opt
/
cpanel
/
ea-php71
/
root
/
usr
/
share
/
tests
/
pecl
/
apcu
/
tests
--TEST-- GH Bug #248: apcu_fetch may return values causing zend_mm_corruption or segfaults when custom serializer is used --SKIPIF-- <?php require_once(dirname(__FILE__) . '/skipif.inc'); ?> --INI-- apc.enabled=1 apc.enable_cli=1 apc.serializer=default --FILE-- <?php function build_array() { return [ 'params' => 2, 'construct' => ['a'], 'x1' => 'y', 'x2' => 'y', 'x3' => 'y', 'x4' => 'y', 'x5' => 'y', 'x6' => 0, ]; } class MyClass { private $_params; public function __construct($params) { var_dump($params); $this->_params = $params; var_dump($params); $this->_params['ids'] = [4]; $this->_params['loadValue'] = 'x'; unset($this->_params['params']); } } function setup() { apcu_delete('mytestkey'); apcu_store('mytestkey', build_array()); } function test_apcu_fetch() { // Or store second? $value = apcu_fetch('mytestkey'); echo "Fetching the value initially stored into apcu:\n"; var_dump($value); echo "Done dumping initial fetch\n\n"; new MyClass($value); echo "\$value was passed by value, not reference. After instantiating class, the array \$value gets modified\n"; var_dump($value); echo "\nAnd calling apcu_fetch again, the original data is preserved (8 keys, params=2)\n"; var_dump(apcu_fetch('mytestkey')); } setup(); test_apcu_fetch(); ?> --EXPECT-- Fetching the value initially stored into apcu: array(8) { ["params"]=> int(2) ["construct"]=> array(1) { [0]=> string(1) "a" } ["x1"]=> string(1) "y" ["x2"]=> string(1) "y" ["x3"]=> string(1) "y" ["x4"]=> string(1) "y" ["x5"]=> string(1) "y" ["x6"]=> int(0) } Done dumping initial fetch array(8) { ["params"]=> int(2) ["construct"]=> array(1) { [0]=> string(1) "a" } ["x1"]=> string(1) "y" ["x2"]=> string(1) "y" ["x3"]=> string(1) "y" ["x4"]=> string(1) "y" ["x5"]=> string(1) "y" ["x6"]=> int(0) } array(8) { ["params"]=> int(2) ["construct"]=> array(1) { [0]=> string(1) "a" } ["x1"]=> string(1) "y" ["x2"]=> string(1) "y" ["x3"]=> string(1) "y" ["x4"]=> string(1) "y" ["x5"]=> string(1) "y" ["x6"]=> int(0) } $value was passed by value, not reference. After instantiating class, the array $value gets modified array(8) { ["params"]=> int(2) ["construct"]=> array(1) { [0]=> string(1) "a" } ["x1"]=> string(1) "y" ["x2"]=> string(1) "y" ["x3"]=> string(1) "y" ["x4"]=> string(1) "y" ["x5"]=> string(1) "y" ["x6"]=> int(0) } And calling apcu_fetch again, the original data is preserved (8 keys, params=2) array(8) { ["params"]=> int(2) ["construct"]=> array(1) { [0]=> string(1) "a" } ["x1"]=> string(1) "y" ["x2"]=> string(1) "y" ["x3"]=> string(1) "y" ["x4"]=> string(1) "y" ["x5"]=> string(1) "y" ["x6"]=> int(0) }
[-] typed_prop.phpt
[edit]
[-] apc_018.phpt
[edit]
[+]
data
[-] apc_099.phpt
[edit]
[-] apc_020.phpt
[edit]
[-] apc_007.phpt
[edit]
[-] ghbug335.phpt
[edit]
[-] bug63224.phpt
[edit]
[-] apcu_sma_info.phpt
[edit]
[-] iterator_002.phpt
[edit]
[+]
..
[-] apc_disabled.phpt
[edit]
[-] apc_015.phpt
[edit]
[-] iterator_003.phpt
[edit]
[-] bug76145.phpt
[edit]
[-] apc_011.phpt
[edit]
[-] apc54_018.phpt
[edit]
[-] apc_004.phpt
[edit]
[-] ghbug176.phpt
[edit]
[-] apc54_014.phpt
[edit]
[-] 023-2.inc
[edit]
[-] apc_inc_perf.phpt
[edit]
[-] apc_005.phpt
[edit]
[-] apc_001.phpt
[edit]
[-] apc_017.phpt
[edit]
[-] iterator_008.phpt
[edit]
[-] sma001.phpt
[edit]
[-] get_included_files_inc2.inc
[edit]
[-] apc_016.phpt
[edit]
[-] apc_021.phpt
[edit]
[-] apc_entry_003.phpt
[edit]
[-] apc_005b.phpt
[edit]
[-] apc_003b.phpt
[edit]
[-] apc_005c.phpt
[edit]
[-] get_included_files_inc1.inc
[edit]
[-] iterator_006.phpt
[edit]
[-] apc_010.phpt
[edit]
[-] iterator_004.phpt
[edit]
[-] apc_023.phpt
[edit]
[+]
bad
[-] apc_002.phpt
[edit]
[-] skipif.inc
[edit]
[-] not_enough_shm.phpt
[edit]
[-] server_test.inc
[edit]
[-] apc_012.phpt
[edit]
[-] iterator_007.phpt
[edit]
[-] apc_entry_002.phpt
[edit]
[-] iterator_001.phpt
[edit]
[-] ghbug248.phpt
[edit]
[-] apc_006_php73.phpt
[edit]
[-] apc_022.phpt
[edit]
[-] ghbug168.phpt
[edit]
[-] iterator_005.phpt
[edit]
[-] apc_019.phpt
[edit]
[-] iterator_010.phpt
[edit]
[-] 024.phpt
[edit]
[-] apc_entry_001.phpt
[edit]
[-] get_included_files_inc3.inc
[edit]
[-] apc_store_reference.phpt
[edit]
[-] apc_008.phpt
[edit]
[-] ghbug185.phpt
[edit]
[-] apc_014_store_ref.phpt
[edit]
[-] apc_024.phpt
[edit]
[-] iterator_009.phpt
[edit]
[-] apc_006.phpt
[edit]
[-] apc_013_exists.phpt
[edit]
[-] ghbug335-fail.phpt
[edit]
[-] ghbug247.phpt
[edit]