Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJoachim Bauch <bauch@struktur.de>2021-12-16 11:17:11 +0300
committerJoachim Bauch <bauch@struktur.de>2022-01-11 13:44:38 +0300
commitd3d65e5c889fc3922efc7a8c764027763bc4764f (patch)
tree4f7532e41f445c18759dafccd6f22d71d04bf4ea /tests
parent55219acb4e964863b301028d47a496fa5d235456 (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.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());
+ }
}