mirror of
https://github.com/nextcloud/server.git
synced 2026-02-15 00:38:51 -05:00
Merge pull request #30115 from nextcloud/backport/30040/stable23
[stable23] Avoid calling image* methods on boolean
This commit is contained in:
commit
c630c8ccec
2 changed files with 42 additions and 17 deletions
|
|
@ -6,6 +6,7 @@
|
|||
* @author Bart Visscher <bartv@thisnet.nl>
|
||||
* @author Björn Schießle <bjoern@schiessle.org>
|
||||
* @author Byron Marohn <combustible@live.com>
|
||||
* @author Côme Chilliet <come.chilliet@nextcloud.com>
|
||||
* @author Christopher Schäpers <kondou@ts.unde.re>
|
||||
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
|
||||
* @author Georg Ehrke <oc.list@georgehrke.com>
|
||||
|
|
@ -45,7 +46,7 @@ use OCP\IImage;
|
|||
* Class for basic image manipulation
|
||||
*/
|
||||
class OC_Image implements \OCP\IImage {
|
||||
/** @var false|resource */
|
||||
/** @var false|resource|\GdImage */
|
||||
protected $resource = false; // tmp resource.
|
||||
/** @var int */
|
||||
protected $imageType = IMAGETYPE_PNG; // Default to png if file type isn't evident.
|
||||
|
|
@ -67,7 +68,7 @@ class OC_Image implements \OCP\IImage {
|
|||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param resource|string $imageRef The path to a local file, a base64 encoded string or a resource created by
|
||||
* @param resource|string|\GdImage $imageRef The path to a local file, a base64 encoded string or a resource created by
|
||||
* an imagecreate* function.
|
||||
* @param \OCP\ILogger $logger
|
||||
* @param \OCP\IConfig $config
|
||||
|
|
@ -97,7 +98,7 @@ class OC_Image implements \OCP\IImage {
|
|||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function valid() { // apparently you can't name a method 'empty'...
|
||||
public function valid() {
|
||||
if (is_resource($this->resource)) {
|
||||
return true;
|
||||
}
|
||||
|
|
@ -123,7 +124,13 @@ class OC_Image implements \OCP\IImage {
|
|||
* @return int
|
||||
*/
|
||||
public function width() {
|
||||
return $this->valid() ? imagesx($this->resource) : -1;
|
||||
if ($this->valid()) {
|
||||
$width = imagesx($this->resource);
|
||||
if ($width !== false) {
|
||||
return $width;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -132,7 +139,13 @@ class OC_Image implements \OCP\IImage {
|
|||
* @return int
|
||||
*/
|
||||
public function height() {
|
||||
return $this->valid() ? imagesy($this->resource) : -1;
|
||||
if ($this->valid()) {
|
||||
$height = imagesy($this->resource);
|
||||
if ($height !== false) {
|
||||
return $height;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -326,7 +339,7 @@ class OC_Image implements \OCP\IImage {
|
|||
}
|
||||
|
||||
/**
|
||||
* @return resource|\GdImage Returns the image resource in any.
|
||||
* @return false|resource|\GdImage Returns the image resource if any
|
||||
*/
|
||||
public function resource() {
|
||||
return $this->resource;
|
||||
|
|
@ -468,6 +481,10 @@ class OC_Image implements \OCP\IImage {
|
|||
* @return bool
|
||||
*/
|
||||
public function fixOrientation() {
|
||||
if (!$this->valid()) {
|
||||
$this->logger->error(__METHOD__ . '(): No image loaded', ['app' => 'core']);
|
||||
return false;
|
||||
}
|
||||
$o = $this->getOrientation();
|
||||
$this->logger->debug('OC_Image->fixOrientation() Orientation: ' . $o, ['app' => 'core']);
|
||||
$rotate = 0;
|
||||
|
|
@ -875,6 +892,10 @@ class OC_Image implements \OCP\IImage {
|
|||
* @return bool
|
||||
*/
|
||||
public function resize($maxSize) {
|
||||
if (!$this->valid()) {
|
||||
$this->logger->error(__METHOD__ . '(): No image loaded', ['app' => 'core']);
|
||||
return false;
|
||||
}
|
||||
$result = $this->resizeNew($maxSize);
|
||||
imagedestroy($this->resource);
|
||||
$this->resource = $result;
|
||||
|
|
@ -911,6 +932,10 @@ class OC_Image implements \OCP\IImage {
|
|||
* @return bool
|
||||
*/
|
||||
public function preciseResize(int $width, int $height): bool {
|
||||
if (!$this->valid()) {
|
||||
$this->logger->error(__METHOD__ . '(): No image loaded', ['app' => 'core']);
|
||||
return false;
|
||||
}
|
||||
$result = $this->preciseResizeNew($width, $height);
|
||||
imagedestroy($this->resource);
|
||||
$this->resource = $result;
|
||||
|
|
@ -990,9 +1015,8 @@ class OC_Image implements \OCP\IImage {
|
|||
$targetHeight = $height;
|
||||
}
|
||||
$process = imagecreatetruecolor($targetWidth, $targetHeight);
|
||||
if ($process == false) {
|
||||
if ($process === false) {
|
||||
$this->logger->error('OC_Image->centerCrop, Error creating true color image', ['app' => 'core']);
|
||||
imagedestroy($process);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -1004,9 +1028,8 @@ class OC_Image implements \OCP\IImage {
|
|||
}
|
||||
|
||||
imagecopyresampled($process, $this->resource, 0, 0, $x, $y, $targetWidth, $targetHeight, $width, $height);
|
||||
if ($process == false) {
|
||||
if ($process === false) {
|
||||
$this->logger->error('OC_Image->centerCrop, Error re-sampling process image ' . $width . 'x' . $height, ['app' => 'core']);
|
||||
imagedestroy($process);
|
||||
return false;
|
||||
}
|
||||
imagedestroy($this->resource);
|
||||
|
|
@ -1024,6 +1047,10 @@ class OC_Image implements \OCP\IImage {
|
|||
* @return bool for success or failure
|
||||
*/
|
||||
public function crop(int $x, int $y, int $w, int $h): bool {
|
||||
if (!$this->valid()) {
|
||||
$this->logger->error(__METHOD__ . '(): No image loaded', ['app' => 'core']);
|
||||
return false;
|
||||
}
|
||||
$result = $this->cropNew($x, $y, $w, $h);
|
||||
imagedestroy($this->resource);
|
||||
$this->resource = $result;
|
||||
|
|
@ -1037,7 +1064,7 @@ class OC_Image implements \OCP\IImage {
|
|||
* @param int $y Vertical position
|
||||
* @param int $w Width
|
||||
* @param int $h Height
|
||||
* @return resource | bool
|
||||
* @return resource|\GdImage|false
|
||||
*/
|
||||
public function cropNew(int $x, int $y, int $w, int $h) {
|
||||
if (!$this->valid()) {
|
||||
|
|
@ -1045,9 +1072,8 @@ class OC_Image implements \OCP\IImage {
|
|||
return false;
|
||||
}
|
||||
$process = imagecreatetruecolor($w, $h);
|
||||
if ($process == false) {
|
||||
if ($process === false) {
|
||||
$this->logger->error(__METHOD__ . '(): Error creating true color image', ['app' => 'core']);
|
||||
imagedestroy($process);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -1059,9 +1085,8 @@ class OC_Image implements \OCP\IImage {
|
|||
}
|
||||
|
||||
imagecopyresampled($process, $this->resource, 0, 0, $x, $y, $w, $h, $w, $h);
|
||||
if ($process == false) {
|
||||
if ($process === false) {
|
||||
$this->logger->error(__METHOD__ . '(): Error re-sampling process image ' . $w . 'x' . $h, ['app' => 'core']);
|
||||
imagedestroy($process);
|
||||
return false;
|
||||
}
|
||||
return $process;
|
||||
|
|
@ -1168,7 +1193,7 @@ class OC_Image implements \OCP\IImage {
|
|||
if ($this->valid()) {
|
||||
imagedestroy($this->resource);
|
||||
}
|
||||
$this->resource = null;
|
||||
$this->resource = false;
|
||||
}
|
||||
|
||||
public function __destruct() {
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ interface IImage {
|
|||
public function save($filePath = null, $mimeType = null);
|
||||
|
||||
/**
|
||||
* @return resource|\GdImage Returns the image resource in any.
|
||||
* @return false|resource|\GdImage Returns the image resource if any
|
||||
* @since 8.1.0
|
||||
*/
|
||||
public function resource();
|
||||
|
|
|
|||
Loading…
Reference in a new issue