summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2023-01-25 15:44:02 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2023-01-25 15:44:02 +0000
commitca98f78695d62f7066d0a9a7214548d489990fa2 (patch)
treee7b08698e0842996b8d0d048c80cf4d9b9947ee0
parent3296ce90635c6519815c6232ab1343730b12494b (diff)
parent1426f04cd2b4940f9308432d37cc4ef79a7d8340 (diff)
downloadMediaProvider-ca98f78695d62f7066d0a9a7214548d489990fa2.tar.gz
Merge "Canonicalise path before extracting relative path" into tm-dev
-rw-r--r--src/com/android/providers/media/util/FileUtils.java14
-rw-r--r--tests/src/com/android/providers/media/util/FileUtilsTest.java8
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