|
| 1 | +--TEST-- |
| 2 | +Bug #63377 (Segfault on output buffer > 2GB) |
| 3 | +--SKIPF-- |
| 4 | +<?php |
| 5 | +$zend_mm_enabled = getenv("USE_ZEND_ALLOC"); |
| 6 | +if ($zend_mm_enabled === "0") { |
| 7 | + die("skip Zend MM disabled"); |
| 8 | +} |
| 9 | + |
| 10 | +if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); |
| 11 | +// check the available memory |
| 12 | +if (PHP_OS == 'Linux') { |
| 13 | + $lines = file('/proc/meminfo'); |
| 14 | + $infos = array(); |
| 15 | + foreach ($lines as $line) { |
| 16 | + $tmp = explode(":", $line); |
| 17 | + $index = strtolower($tmp[0]); |
| 18 | + $value = (int)ltrim($tmp[1], " ")*1024; |
| 19 | + $infos[$index] = $value; |
| 20 | + } |
| 21 | + $freeMemory = $infos['memfree']+$infos['buffers']+$infos['cached']; |
| 22 | + if ($freeMemory < 2100*1024*1024) { |
| 23 | + die('skip Not enough memory.'); |
| 24 | + } |
| 25 | +} |
| 26 | +elseif (PHP_OS == 'FreeBSD') { |
| 27 | + $lines = explode("\n",`sysctl -a`); |
| 28 | + $infos = array(); |
| 29 | + foreach ($lines as $line) { |
| 30 | + if(!$line){ |
| 31 | + continue; |
| 32 | + } |
| 33 | + $tmp = explode(":", $line); |
| 34 | + $index = strtolower($tmp[0]); |
| 35 | + $value = trim($tmp[1], " "); |
| 36 | + $infos[$index] = $value; |
| 37 | + } |
| 38 | + $freeMemory = ($infos['vm.stats.vm.v_inactive_count']*$infos['hw.pagesize']) |
| 39 | + +($infos['vm.stats.vm.v_cache_count']*$infos['hw.pagesize']) |
| 40 | + +($infos['vm.stats.vm.v_free_count']*$infos['hw.pagesize']); |
| 41 | + if ($freeMemory < 2100*1024*1024) { |
| 42 | + die('skip Not enough memory.'); |
| 43 | + } |
| 44 | +} |
| 45 | +?> |
| 46 | +--FILE-- |
| 47 | +<?php |
| 48 | +ini_set('memory_limit', '3072M'); |
| 49 | + |
| 50 | +ob_start(); |
| 51 | +for ($i = 0; $i < 22; $i++) { |
| 52 | + echo str_repeat('a', 100 * 1024 * 1024); |
| 53 | +} |
| 54 | +ob_end_clean(); |
| 55 | +echo "okey"; |
| 56 | +?> |
| 57 | +--EXPECTF-- |
| 58 | +okey |
0 commit comments