aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private
diff options
context:
space:
mode:
authorAndy Scherzinger <info@andy-scherzinger.de>2024-08-28 13:11:42 +0200
committerGitHub <noreply@github.com>2024-08-28 13:11:42 +0200
commit30d0d08134ee7b624016596babe94883f288fdbe (patch)
treec032368025bc28166f8fda1315fa64c4475b6f5c /lib/private
parentb6096d2a224ebb03044f5174a90d0c90f1e562a2 (diff)
parent3a9e33124be93cea95fd06b57cbf6a3c6309fa1b (diff)
downloadnextcloud-server-30d0d08134ee7b624016596babe94883f288fdbe.tar.gz
nextcloud-server-30d0d08134ee7b624016596babe94883f288fdbe.zip
Merge pull request #47533 from nextcloud/backport/47509/stable30
[stable30] fix: gracefully handle unexpected exif orientation types
Diffstat (limited to 'lib/private')
-rw-r--r--lib/private/legacy/OC_Image.php24
1 files changed, 15 insertions, 9 deletions
diff --git a/lib/private/legacy/OC_Image.php b/lib/private/legacy/OC_Image.php
index 1d2326dcce9..827ea16039b 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;