aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private
diff options
context:
space:
mode:
authorRichard Steinmetz <richard@steinmetz.cloud>2024-08-27 09:32:04 +0200
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>2024-08-27 14:05:00 +0000
commit3a9e33124be93cea95fd06b57cbf6a3c6309fa1b (patch)
treec0a6349486ba4b50c2eb28c26a2d39a317c0ab25 /lib/private
parent4ea841721ed53c9ea209ed914c688c21250df265 (diff)
downloadnextcloud-server-3a9e33124be93cea95fd06b57cbf6a3c6309fa1b.tar.gz
nextcloud-server-3a9e33124be93cea95fd06b57cbf6a3c6309fa1b.zip
fix: gracefully handle unexpected exif orientation types
Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
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;