diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2023-01-25 15:44:02 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2023-01-25 15:44:02 +0000 |
commit | ca98f78695d62f7066d0a9a7214548d489990fa2 (patch) | |
tree | e7b08698e0842996b8d0d048c80cf4d9b9947ee0 | |
parent | 3296ce90635c6519815c6232ab1343730b12494b (diff) | |
parent | 1426f04cd2b4940f9308432d37cc4ef79a7d8340 (diff) | |
download | MediaProvider-ca98f78695d62f7066d0a9a7214548d489990fa2.tar.gz |
Merge "Canonicalise path before extracting relative path" into tm-dev
-rw-r--r-- | src/com/android/providers/media/util/FileUtils.java | 14 | ||||
-rw-r--r-- | tests/src/com/android/providers/media/util/FileUtilsTest.java | 8 |
2 files changed, 22 insertions, 0 deletions
diff --git a/src/com/android/providers/media/util/FileUtils.java b/src/com/android/providers/media/util/FileUtils.java index bbf04deb1..2e2a3e761 100644 --- a/src/com/android/providers/media/util/FileUtils.java +++ b/src/com/android/providers/media/util/FileUtils.java @@ -1110,7 +1110,9 @@ public class FileUtils { } public static @Nullable String extractRelativePath(@Nullable String data) { + data = getCanonicalPath(data); if (data == null) return null; + final Matcher matcher = PATTERN_RELATIVE_PATH.matcher(data); if (matcher.find()) { final int lastSlash = data.lastIndexOf('/'); @@ -1758,4 +1760,16 @@ public class FileUtils { public static File fromFuseFile(File file) { return new File(file.getPath().replaceFirst(FUSE_FS_PREFIX, LOWER_FS_PREFIX)); } + + @Nullable + private static String getCanonicalPath(@Nullable String path) { + if (path == null) return null; + + try { + return new File(path).getCanonicalPath(); + } catch (IOException e) { + Log.d(TAG, "Unable to get canonical path from invalid data path: " + path, e); + return null; + } + } } diff --git a/tests/src/com/android/providers/media/util/FileUtilsTest.java b/tests/src/com/android/providers/media/util/FileUtilsTest.java index a1f2b8237..5a4b47d2f 100644 --- a/tests/src/com/android/providers/media/util/FileUtilsTest.java +++ b/tests/src/com/android/providers/media/util/FileUtilsTest.java @@ -543,7 +543,15 @@ public class FileUtilsTest { extractRelativePath(prefix + "DCIM/foo.jpg")); assertEquals("DCIM/My Vacation/", extractRelativePath(prefix + "DCIM/My Vacation/foo.jpg")); + assertEquals("Pictures/", + extractRelativePath(prefix + "DCIM/../Pictures/.//foo.jpg")); + assertEquals("/", + extractRelativePath(prefix + "DCIM/Pictures/./..//..////foo.jpg")); + assertEquals("Android/data/", + extractRelativePath(prefix + "DCIM/foo.jpg/.//../../Android/data/poc")); } + + assertEquals(null, extractRelativePath("/sdcard/\\\u0000")); } @Test |