aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorJoachim Bauch <bauch@struktur.de>2021-12-16 09:17:11 +0100
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>2022-01-11 14:49:08 +0000
commitcebac86ecdd4fb5220225b5625d3b6132dbe7a68 (patch)
tree7192d8268c1d6c0efbc6a002fc8ce19c145d0637 /tests
parent4846f5d33eb8e2379d9a24cd9a68bfb65b15c11f (diff)
downloadnextcloud-server-cebac86ecdd4fb5220225b5625d3b6132dbe7a68.tar.gz
nextcloud-server-cebac86ecdd4fb5220225b5625d3b6132dbe7a68.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')
-rw-r--r--tests/data/testimage-badheader.jpgbin0 -> 103 bytes
-rw-r--r--tests/lib/ImageTest.php17
2 files changed, 17 insertions, 0 deletions
diff --git a/tests/data/testimage-badheader.jpg b/tests/data/testimage-badheader.jpg
new file mode 100644
index 00000000000..b876804eb4e
--- /dev/null
+++ b/tests/data/testimage-badheader.jpg
Binary files differ
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());
+ }
}