mirror of
https://github.com/Seldaek/monolog.git
synced 2025-07-30 18:00:17 +02:00
Fix insane-memory-limit handling in StreamHandler, fixes #1592
This commit is contained in:
@@ -26,9 +26,11 @@ use Monolog\Utils;
|
||||
class StreamHandler extends AbstractProcessingHandler
|
||||
{
|
||||
/** @const int */
|
||||
protected const MAX_CHUNK_SIZE = 100 * 1024 * 1024;
|
||||
protected const MAX_CHUNK_SIZE = 2147483647;
|
||||
/** @const int 10MB */
|
||||
protected const DEFAULT_CHUNK_SIZE = 10 * 1024 * 1024;
|
||||
/** @var int */
|
||||
protected $streamChunkSize = self::MAX_CHUNK_SIZE;
|
||||
protected $streamChunkSize;
|
||||
/** @var resource|null */
|
||||
protected $stream;
|
||||
/** @var ?string */
|
||||
@@ -55,13 +57,15 @@ class StreamHandler extends AbstractProcessingHandler
|
||||
|
||||
if (($phpMemoryLimit = Utils::expandIniShorthandBytes(ini_get('memory_limit'))) !== false) {
|
||||
if ($phpMemoryLimit > 0) {
|
||||
// use max 10% of allowed memory for the chunk size
|
||||
$this->streamChunkSize = max((int) ($phpMemoryLimit / 10), 10*1024);
|
||||
// use max 10% of allowed memory for the chunk size, and at least 100KB
|
||||
$this->streamChunkSize = min(static::MAX_CHUNK_SIZE, max((int) ($phpMemoryLimit / 10), 100 * 1024));
|
||||
} else {
|
||||
// memory is unlimited, set to the default 10MB
|
||||
$this->streamChunkSize = static::DEFAULT_CHUNK_SIZE;
|
||||
}
|
||||
// else memory is unlimited, keep the buffer to the default 100MB
|
||||
} else {
|
||||
// no memory limit information, use a conservative 10MB
|
||||
$this->streamChunkSize = 10*10*1024;
|
||||
// no memory limit information, set to the default 10MB
|
||||
$this->streamChunkSize = static::DEFAULT_CHUNK_SIZE;
|
||||
}
|
||||
|
||||
if (is_resource($stream)) {
|
||||
|
Reference in New Issue
Block a user