From cd928ed4ed6dae4b4a55cea39cd910883188091d Mon Sep 17 00:00:00 2001 From: Richard Steinmetz Date: Tue, 27 Aug 2024 09:32:04 +0200 Subject: [PATCH] fix: gracefully handle unexpected exif orientation types Signed-off-by: Richard Steinmetz --- lib/private/legacy/OC_Image.php | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/lib/private/legacy/OC_Image.php b/lib/private/legacy/OC_Image.php index 56fe96cda60..37cf6b697ac 100644 --- a/lib/private/legacy/OC_Image.php +++ b/lib/private/legacy/OC_Image.php @@ -390,6 +390,18 @@ class OC_Image implements \OCP\IImage { return min(100, max(10, (int)$quality)); } + private function isValidExifData(array $exif): bool { + if (!isset($exif['Orientation'])) { + return false; + } + + if (!is_numeric($exif['Orientation'])) { + return false; + } + + return true; + } + /** * (I'm open for suggestions on better method name ;) * Get the orientation based on EXIF data. @@ -418,14 +430,11 @@ class OC_Image implements \OCP\IImage { return -1; } $exif = @exif_read_data($this->filePath, 'IFD0'); - if (!$exif) { - return -1; - } - if (!isset($exif['Orientation'])) { + if (!$exif || !$this->isValidExifData($exif)) { return -1; } $this->exif = $exif; - return $exif['Orientation']; + return (int)$exif['Orientation']; } public function readExif($data): void { @@ -439,10 +448,7 @@ class OC_Image implements \OCP\IImage { } $exif = @exif_read_data('data://image/jpeg;base64,' . base64_encode($data)); - if (!$exif) { - return; - } - if (!isset($exif['Orientation'])) { + if (!$exif || !$this->isValidExifData($exif)) { return; } $this->exif = $exif; -- 2.39.5