summaryrefslogtreecommitdiffstats
path: root/src/com/android/providers/downloads/Helpers.java
diff options
context:
space:
mode:
authorRicardo Cerqueira <cyanogenmod@cerqueira.org>2013-11-05 20:08:34 +0000
committerRicardo Cerqueira <cyanogenmod@cerqueira.org>2013-11-05 20:08:34 +0000
commit40a32f628089f338f823b34ed832e18a164aec23 (patch)
tree301569d0a81c340425d54787155120c03c320c11 /src/com/android/providers/downloads/Helpers.java
parent907bcd0c7cf8a44e07b3cf426b605ca7694ee24d (diff)
parenta839ee4c19bfebac961f4b0aaa8aecaba114bac9 (diff)
downloadandroid_packages_providers_DownloadProvider-40a32f628089f338f823b34ed832e18a164aec23.tar.gz
android_packages_providers_DownloadProvider-40a32f628089f338f823b34ed832e18a164aec23.tar.bz2
android_packages_providers_DownloadProvider-40a32f628089f338f823b34ed832e18a164aec23.zip
Merge tag 'android-4.4_r1' into cm-11.0
Android 4.4 Release 1.0 Change-Id: I6eadeafdb9d3219bebd28325b4e290b6d5282499
Diffstat (limited to 'src/com/android/providers/downloads/Helpers.java')
-rw-r--r--src/com/android/providers/downloads/Helpers.java26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/com/android/providers/downloads/Helpers.java b/src/com/android/providers/downloads/Helpers.java
index 33205557..013faf27 100644
--- a/src/com/android/providers/downloads/Helpers.java
+++ b/src/com/android/providers/downloads/Helpers.java
@@ -16,6 +16,8 @@
package com.android.providers.downloads;
+import static com.android.providers.downloads.Constants.TAG;
+
import android.content.Context;
import android.net.Uri;
import android.os.Environment;
@@ -342,10 +344,26 @@ public class Helpers {
* Checks whether the filename looks legitimate
*/
static boolean isFilenameValid(String filename, File downloadsDataDir) {
- filename = filename.replaceFirst("/+", "/"); // normalize leading slashes
- return filename.startsWith(Environment.getDownloadCacheDirectory().toString())
- || filename.startsWith(downloadsDataDir.toString())
- || filename.startsWith(Environment.getExternalStorageDirectory().toString());
+ final String[] whitelist;
+ try {
+ filename = new File(filename).getCanonicalPath();
+ whitelist = new String[] {
+ downloadsDataDir.getCanonicalPath(),
+ Environment.getDownloadCacheDirectory().getCanonicalPath(),
+ Environment.getExternalStorageDirectory().getCanonicalPath(),
+ };
+ } catch (IOException e) {
+ Log.w(TAG, "Failed to resolve canonical path: " + e);
+ return false;
+ }
+
+ for (String test : whitelist) {
+ if (filename.startsWith(test)) {
+ return true;
+ }
+ }
+
+ return false;
}
/**