From e841faa737eba1fc4d2875769094425372a227ed Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Mon, 4 Nov 2024 10:31:55 +0100 Subject: [PATCH] Remove all GPS metadata from images uploaded as media (#3781) Previously a minimal set of tags were removed, but we should make sure every single one of them is removed. --- .../impl/AndroidMediaPreProcessor.kt | 44 ++++++++++++++++--- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt index ca61aa0845..288ba988ef 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt @@ -210,12 +210,44 @@ class AndroidMediaPreProcessor @Inject constructor( private fun removeSensitiveImageMetadata(file: File) { // Remove GPS info, user comments and subject location tags - val exifInterface = ExifInterface(file) - // See ExifInterface.TAG_GPS_INFO_IFD_POINTER - exifInterface.setAttribute("GPSInfoIFDPointer", null) - exifInterface.setAttribute(ExifInterface.TAG_USER_COMMENT, null) - exifInterface.setAttribute(ExifInterface.TAG_SUBJECT_LOCATION, null) - tryOrNull { exifInterface.saveAttributes() } + ExifInterface(file).apply { + // See ExifInterface.TAG_GPS_INFO_IFD_POINTER + setAttribute("GPSInfoIFDPointer", null) + setAttribute(ExifInterface.TAG_USER_COMMENT, null) + setAttribute(ExifInterface.TAG_IMAGE_DESCRIPTION, null) + + setAttribute(ExifInterface.TAG_GPS_VERSION_ID, null) + setAttribute(ExifInterface.TAG_GPS_ALTITUDE_REF, null) + setAttribute(ExifInterface.TAG_GPS_ALTITUDE, null) + setAttribute(ExifInterface.TAG_GPS_TIMESTAMP, null) + setAttribute(ExifInterface.TAG_GPS_DATESTAMP, null) + setAttribute(ExifInterface.TAG_GPS_SATELLITES, null) + setAttribute(ExifInterface.TAG_GPS_STATUS, null) + setAttribute(ExifInterface.TAG_GPS_MEASURE_MODE, null) + setAttribute(ExifInterface.TAG_GPS_DOP, null) + setAttribute(ExifInterface.TAG_GPS_SPEED_REF, null) + setAttribute(ExifInterface.TAG_GPS_SPEED, null) + setAttribute(ExifInterface.TAG_GPS_TRACK_REF, null) + setAttribute(ExifInterface.TAG_GPS_TRACK, null) + setAttribute(ExifInterface.TAG_GPS_IMG_DIRECTION_REF, null) + setAttribute(ExifInterface.TAG_GPS_IMG_DIRECTION, null) + setAttribute(ExifInterface.TAG_GPS_MAP_DATUM, null) + setAttribute(ExifInterface.TAG_GPS_DEST_BEARING_REF, null) + setAttribute(ExifInterface.TAG_GPS_DEST_BEARING, null) + setAttribute(ExifInterface.TAG_GPS_DEST_DISTANCE_REF, null) + setAttribute(ExifInterface.TAG_GPS_DEST_DISTANCE, null) + setAttribute(ExifInterface.TAG_GPS_PROCESSING_METHOD, null) + setAttribute(ExifInterface.TAG_GPS_AREA_INFORMATION, null) + setAttribute(ExifInterface.TAG_GPS_DIFFERENTIAL, null) + setAttribute(ExifInterface.TAG_GPS_H_POSITIONING_ERROR, null) + setAttribute(ExifInterface.TAG_GPS_LATITUDE, null) + setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, null) + setAttribute(ExifInterface.TAG_GPS_LONGITUDE, null) + setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, null) + setAttribute(ExifInterface.TAG_GPS_DEST_LONGITUDE, null) + setAttribute(ExifInterface.TAG_GPS_DEST_LONGITUDE_REF, null) + tryOrNull { saveAttributes() } + } } private suspend fun createTmpFileWithInput(inputStream: InputStream): File? {