summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2018-01-13 00:34:28 +0100
committerMorris Jobke <hey@morrisjobke.de>2018-01-17 10:00:33 +0100
commite4b3ee8d8f93262423eaaeee390deb6e680bb1e3 (patch)
tree3c24e04be9a760d73490fdc75f9ae788051eb886 /lib
parent16f4d71efd257e66550d61013e39ecf96c10fa0f (diff)
downloadnextcloud-server-e4b3ee8d8f93262423eaaeee390deb6e680bb1e3.tar.gz
nextcloud-server-e4b3ee8d8f93262423eaaeee390deb6e680bb1e3.zip
Fix float/integer handling in image API
* IImage::crop/preciseResize now have type hinting for integers * found while testing strict typing for PHP 7+ Signed-off-by: Morris Jobke <hey@morrisjobke.de>
Diffstat (limited to 'lib')
-rw-r--r--lib/private/Preview/Generator.php4
-rw-r--r--lib/private/Preview/GeneratorHelper.php6
-rw-r--r--lib/private/legacy/image.php18
-rw-r--r--lib/public/IImage.php4
4 files changed, 22 insertions, 10 deletions
diff --git a/lib/private/Preview/Generator.php b/lib/private/Preview/Generator.php
index 448a7a57580..60b7536d074 100644
--- a/lib/private/Preview/Generator.php
+++ b/lib/private/Preview/Generator.php
@@ -345,9 +345,9 @@ class Generator {
$scaleH = $maxHeight / $widthR;
$scaleW = $width;
}
- $preview->preciseResize(round($scaleW), round($scaleH));
+ $preview->preciseResize((int)round($scaleW), (int)round($scaleH));
}
- $cropX = floor(abs($width - $preview->width()) * 0.5);
+ $cropX = (int)floor(abs($width - $preview->width()) * 0.5);
$cropY = 0;
$preview->crop($cropX, $cropY, $width, $height);
} else {
diff --git a/lib/private/Preview/GeneratorHelper.php b/lib/private/Preview/GeneratorHelper.php
index 6535fde058b..587f8174b02 100644
--- a/lib/private/Preview/GeneratorHelper.php
+++ b/lib/private/Preview/GeneratorHelper.php
@@ -27,7 +27,7 @@ use OCP\Files\File;
use OCP\Files\IRootFolder;
use OCP\Files\SimpleFS\ISimpleFile;
use OCP\IImage;
-use OCP\Image as img;
+use OCP\Image as OCPImage;
use OCP\Preview\IProvider;
/**
@@ -79,7 +79,9 @@ class GeneratorHelper {
* @return IImage
*/
public function getImage(ISimpleFile $maxPreview) {
- return new img($maxPreview->getContent());
+ $image = new OCPImage();
+ $image->loadFromData($maxPreview->getContent());
+ return $image;
}
/**
diff --git a/lib/private/legacy/image.php b/lib/private/legacy/image.php
index a0159b927f9..873f9711d5c 100644
--- a/lib/private/legacy/image.php
+++ b/lib/private/legacy/image.php
@@ -550,6 +550,16 @@ class OC_Image implements \OCP\IImage {
* @return bool|resource An image resource or false on error
*/
public function loadFromFile($imagePath = false) {
+ try {
+ // detect if it is a path or maybe the images as string
+ // needed because the constructor iterates over all load* methods
+ $result = @realpath($imagePath);
+ if ($result === false) {
+ return false;
+ }
+ } catch (Error $e) {
+ return false;
+ }
// exif_imagetype throws "read error!" if file is less than 12 byte
if (!@is_file($imagePath) || !file_exists($imagePath) || filesize($imagePath) < 12 || !is_readable($imagePath)) {
return false;
@@ -873,7 +883,7 @@ class OC_Image implements \OCP\IImage {
$newHeight = $maxSize;
}
- $this->preciseResize(round($newWidth), round($newHeight));
+ $this->preciseResize((int)round($newWidth), (int)round($newHeight));
return true;
}
@@ -882,7 +892,7 @@ class OC_Image implements \OCP\IImage {
* @param int $height
* @return bool
*/
- public function preciseResize($width, $height) {
+ public function preciseResize(int $width, int $height): bool {
if (!$this->valid()) {
$this->logger->error(__METHOD__ . '(): No image loaded', array('app' => 'core'));
return false;
@@ -982,7 +992,7 @@ class OC_Image implements \OCP\IImage {
* @param int $h Height
* @return bool for success or failure
*/
- public function crop($x, $y, $w, $h) {
+ public function crop(int $x, int $y, int $w, int $h): bool {
if (!$this->valid()) {
$this->logger->error(__METHOD__ . '(): No image loaded', array('app' => 'core'));
return false;
@@ -1033,7 +1043,7 @@ class OC_Image implements \OCP\IImage {
$newWidth = min($maxWidth, $ratio * $maxHeight);
$newHeight = min($maxHeight, $maxWidth / $ratio);
- $this->preciseResize(round($newWidth), round($newHeight));
+ $this->preciseResize((int)round($newWidth), (int)round($newHeight));
return true;
}
diff --git a/lib/public/IImage.php b/lib/public/IImage.php
index 70e8b3cff75..4311f44f1bc 100644
--- a/lib/public/IImage.php
+++ b/lib/public/IImage.php
@@ -147,7 +147,7 @@ interface IImage {
* @return bool
* @since 8.1.0
*/
- public function preciseResize($width, $height);
+ public function preciseResize(int $width, int $height): bool;
/**
* Crops the image to the middle square. If the image is already square it just returns.
@@ -168,7 +168,7 @@ interface IImage {
* @return bool for success or failure
* @since 8.1.0
*/
- public function crop($x, $y, $w, $h);
+ public function crop(int $x, int $y, int $w, int $h): bool;
/**
* Resizes the image to fit within a boundary while preserving ratio.