From 86a096d1ce5c97d3478bd49fb3e79a6354976725 Mon Sep 17 00:00:00 2001 From: Elias Nahum Date: Mon, 8 Mar 2021 14:38:06 -0300 Subject: [PATCH] MM-33495 Sanitize filename in Android ShareExtension (#5210) * MM-33495 Sanitize filename in Android ShareExtension * Apply sanitization after getting uri last path segment Co-authored-by: Mattermod --- .../com/mattermost/share/RealPathUtil.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/android/app/src/main/java/com/mattermost/share/RealPathUtil.java b/android/app/src/main/java/com/mattermost/share/RealPathUtil.java index f6d25b925..6d5164b13 100644 --- a/android/app/src/main/java/com/mattermost/share/RealPathUtil.java +++ b/android/app/src/main/java/com/mattermost/share/RealPathUtil.java @@ -96,20 +96,25 @@ public class RealPathUtil { File tmpFile; String fileName = null; + if (uri == null || uri.isRelative()) { + return null; + } + // Try and get the filename from the Uri try { Cursor returnCursor = context.getContentResolver().query(uri, null, null, null, null); int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); returnCursor.moveToFirst(); - fileName = returnCursor.getString(nameIndex); + fileName = sanitizeFilename(returnCursor.getString(nameIndex)); + } catch (Exception e) { // just continue to get the filename with the last segment of the path } try { - if (fileName == null) { - fileName = uri.getLastPathSegment().toString().trim(); + if (TextUtils.isEmpty(fileName)) { + fileName = sanitizeFilename(uri.getLastPathSegment().toString().trim()); } @@ -230,4 +235,13 @@ public class RealPathUtil { fileOrDirectory.delete(); } + + private static String sanitizeFilename(String filename) { + if (filename == null) { + return null; + } + + File f = new File(filename); + return f.getName(); + } }