diff options
author | Joachim Bauch <bauch@struktur.de> | 2021-12-16 11:17:11 +0300 |
---|---|---|
committer | Joachim Bauch <bauch@struktur.de> | 2022-01-11 13:44:38 +0300 |
commit | d3d65e5c889fc3922efc7a8c764027763bc4764f (patch) | |
tree | 4f7532e41f445c18759dafccd6f22d71d04bf4ea /tests | |
parent | 55219acb4e964863b301028d47a496fa5d235456 (diff) |
Prevent loading images that would require too much memory.
For most image formats, the header specifies the width/height.
PHP allocates an image object from that size, even if the actual
image data is much smaller. This image object size is not limited
by the limit configured in PHP.
The memory limit can be configured through "config.php" setting
"preview_max_memory" and defaults to 128 MBytes which should be
enough for most images without filling up all memory.
Signed-off-by: Joachim Bauch <bauch@struktur.de>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/data/testimage-badheader.jpg | bin | 0 -> 103 bytes | |||
-rw-r--r-- | tests/lib/ImageTest.php | 17 |
2 files changed, 17 insertions, 0 deletions
diff --git a/tests/data/testimage-badheader.jpg b/tests/data/testimage-badheader.jpg Binary files differnew file mode 100644 index 00000000000..b876804eb4e --- /dev/null +++ b/tests/data/testimage-badheader.jpg diff --git a/tests/lib/ImageTest.php b/tests/lib/ImageTest.php index 5b83c4ac57f..e6818c7e243 100644 --- a/tests/lib/ImageTest.php +++ b/tests/lib/ImageTest.php @@ -142,6 +142,10 @@ class ImageTest extends \Test\TestCase { ->method('getAppValue') ->with('preview', 'jpeg_quality', 90) ->willReturn(null); + $config->expects($this->once()) + ->method('getSystemValueInt') + ->with('preview_max_memory', 128) + ->willReturn(128); $img = new \OC_Image(null, null, $config); $img->loadFromFile(OC::$SERVERROOT.'/tests/data/testimage.jpg'); $raw = imagecreatefromstring(file_get_contents(OC::$SERVERROOT.'/tests/data/testimage.jpg')); @@ -363,4 +367,17 @@ class ImageTest extends \Test\TestCase { $img->save($tempFile, $mimeType); $this->assertEquals($mimeType, image_type_to_mime_type(exif_imagetype($tempFile))); } + + public function testMemoryLimitFromFile() { + $img = new \OC_Image(); + $img->loadFromFile(OC::$SERVERROOT.'/tests/data/testimage-badheader.jpg'); + $this->assertFalse($img->valid()); + } + + public function testMemoryLimitFromData() { + $data = file_get_contents(OC::$SERVERROOT.'/tests/data/testimage-badheader.jpg'); + $img = new \OC_Image(); + $img->loadFromData($data); + $this->assertFalse($img->valid()); + } } |