aboutsummaryrefslogtreecommitdiffstats
path: root/tests/lib/ImageTest.php
diff options
context:
space:
mode:
authorJoachim Bauch <bauch@struktur.de>2021-12-16 09:17:11 +0100
committerJoachim Bauch <bauch@struktur.de>2022-01-11 11:44:38 +0100
commitd3d65e5c889fc3922efc7a8c764027763bc4764f (patch)
tree4f7532e41f445c18759dafccd6f22d71d04bf4ea /tests/lib/ImageTest.php
parent55219acb4e964863b301028d47a496fa5d235456 (diff)
downloadnextcloud-server-d3d65e5c889fc3922efc7a8c764027763bc4764f.tar.gz
nextcloud-server-d3d65e5c889fc3922efc7a8c764027763bc4764f.zip
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/lib/ImageTest.php')
-rw-r--r--tests/lib/ImageTest.php17
1 files changed, 17 insertions, 0 deletions
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());
+ }
}