From c59066ce0e2eb62027076b5c28baf9c3fd4ada4a Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Sun, 22 Jan 2023 16:51:26 -0800 Subject: [PATCH] write: filter EXIF fields with whitelist (fix #367) --- lib/Db/TimelineWrite.php | 4 +- lib/ExifFields.php | 104 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 lib/ExifFields.php diff --git a/lib/Db/TimelineWrite.php b/lib/Db/TimelineWrite.php index 9514d543..2593ca08 100644 --- a/lib/Db/TimelineWrite.php +++ b/lib/Db/TimelineWrite.php @@ -11,6 +11,8 @@ use OCP\Files\File; use OCP\IDBConnection; use OCP\IPreview; +require_once __DIR__.'/../ExifFields.php'; + class TimelineWrite { protected IDBConnection $connection; @@ -134,7 +136,7 @@ class TimelineWrite } // These are huge and not needed - if (str_starts_with($key, 'Nikon') || str_starts_with($key, 'QuickTime')) { + if (!EXIF_FIELDS_LIST[$key] ?? false) { unset($exif[$key]); } } diff --git a/lib/ExifFields.php b/lib/ExifFields.php new file mode 100644 index 00000000..39ac1dde --- /dev/null +++ b/lib/ExifFields.php @@ -0,0 +1,104 @@ + true, + 'CreateDate' => true, + 'OffsetTimeOriginal' => true, + 'OffsetTime' => true, + 'ModifyDate' => true, + + // Camera Info + 'Make' => true, + 'Model' => true, + 'LensModel' => true, + 'CameraType' => true, + 'AutoRotate' => true, + 'SerialNumber' => true, + + // Photo Info + 'FNumber' => true, + 'ApertureValue' => true, + 'FocalLength' => true, + 'ISO' => true, + 'ShutterSpeedValue' => true, + 'ShutterSpeed' => true, + 'ExposureTime' => true, + 'WhiteBalance' => true, + 'Sharpness' => true, + 'ColorTemperature' => true, + 'HDR' => true, + 'HDREffect' => true, + 'ColorSpace' => true, + 'Aperture' => true, + + // GPS info + 'GPSLatitude' => true, + 'GPSLongitude' => true, + 'GPSAltitude' => true, + 'GPSTimeStamp' => true, + 'GPSStatus' => true, + + // Size / rotation info + 'ImageSize' => true, + 'ExifImageWidth' => true, + 'ExifImageHeight' => true, + 'ImageWidth' => true, + 'ImageHeight' => true, + 'XResolution' => true, + 'YResolution' => true, + 'ResolutionUnit' => true, + 'Megapixels' => true, + 'Rotation' => true, + 'Orientation' => true, + + // Editable Metadata + 'Title' => true, + 'Description' => true, + 'Label' => true, + 'Artist' => true, + 'Copyright' => true, + + // Live Photo + 'ContentIdentifier' => true, + 'MediaGroupUUID' => true, + 'EmbeddedVideoType' => true, + 'MotionPhoto' => true, + + // Other image info + 'Rating' => true, + 'NumberOfImages' => true, + 'ExposureMode' => true, + 'SceneCaptureType' => true, + 'YCbCrPositioning' => true, + 'DriveMode' => true, + 'FlashType' => true, + 'ShootingMode' => true, + 'RedEyeReduction' => true, + 'CircleOfConfusion' => true, + 'DOF' => true, + 'FOV' => true, + + // Currently unused fields + 'SensitivityType' => true, + 'RecommendedExposureIndex' => true, + 'ExifVersion' => true, + 'ExposureProgram' => true, + 'ExifByteOrder' => true, + 'Quality' => true, + 'FocusMode' => true, + 'RecordMode' => true, + + // Video info + 'Duration' => true, + 'FrameRate' => true, + 'TrackDuration' => true, + 'VideoCodec' => true, + + // File Info + 'SourceFile' => true, + 'FileName' => true, + 'FileSize' => true, + 'FileType' => true, + 'MIMEType' => true, +];