From a3644638aaf0418598196a870204e0b632a4c8ad Mon Sep 17 00:00:00 2001 From: Thomas Bruederli <thomas@roundcube.net> Date: Fri, 17 Apr 2015 06:28:40 -0400 Subject: [PATCH] Allow preference sections to define CSS class names --- program/lib/Roundcube/rcube_image.php | 38 ++++++++++++++++++++++++++++++++++++-- 1 files changed, 36 insertions(+), 2 deletions(-) diff --git a/program/lib/Roundcube/rcube_image.php b/program/lib/Roundcube/rcube_image.php index c7a60e6..9c9f08b 100644 --- a/program/lib/Roundcube/rcube_image.php +++ b/program/lib/Roundcube/rcube_image.php @@ -59,11 +59,13 @@ $height = $imsize[1]; $gd_type = $imsize['2']; $type = image_type_to_extension($imsize['2'], false); + $channels = $imsize['channels']; } // use ImageMagick if (!$type && ($data = $this->identify())) { list($type, $width, $height) = $data; + $channels = null; } if ($type) { @@ -72,8 +74,11 @@ 'gd_type' => $gd_type, 'width' => $width, 'height' => $height, + 'channels' => $channels, ); } + + return null; } /** @@ -181,6 +186,11 @@ } } + // do we have enough memory? (#1489937) + if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' && !$this->mem_check($props)) { + return false; + } + // use GD extension if ($props['gd_type']) { if ($props['gd_type'] == IMAGETYPE_JPEG && function_exists('imagecreatefromjpeg')) { @@ -229,10 +239,10 @@ $image = $new_image; // fix rotation of image if EXIF data exists and specifies rotation (GD strips the EXIF data) - if (file_exists($this->image_file) ) { + if ($this->image_file && $type == 'jpg' && function_exists('exif_read_data')) { $exif = exif_read_data($this->image_file); if ($exif && $exif['Orientation']) { - switch($exif['Orientation']) { + switch ($exif['Orientation']) { case 3: $image = imagerotate($image, 180, 0); break; @@ -327,6 +337,12 @@ // use GD extension (TIFF isn't supported) $props = $this->props(); + // do we have enough memory? (#1489937) + if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' && !$this->mem_check($props)) { + return false; + } + + if ($props['gd_type']) { if ($props['gd_type'] == IMAGETYPE_JPEG && function_exists('imagecreatefromjpeg')) { $image = imagecreatefromjpeg($this->image_file); @@ -406,4 +422,22 @@ catch (Exception $e) {} } } + + /** + * Check if we have enough memory to load specified image + */ + private function mem_check($props) + { + // image size is unknown, we can't calculate required memory + if (!$props['width']) { + return true; + } + + // channels: CMYK - 4, RGB - 3 + $multip = ($props['channels'] ?: 3) + 1; + + // calculate image size in memory (in bytes) + $size = $props['width'] * $props['height'] * $multip; + return rcube_utils::mem_check($size); + } } -- Gitblit v1.9.1