fix: gracefully handle unexpected exif orientation types

Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
pull/47509/head
Richard Steinmetz 2024-08-27 09:32:04 +07:00
parent b8ab7b7e55
commit cd928ed4ed
No known key found for this signature in database
GPG Key ID: 27137D9E7D273FB2
1 changed files with 15 additions and 9 deletions

@ -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;