diff options
author | Ricardo Cerqueira <cyanogenmod@cerqueira.org> | 2013-11-05 20:08:34 +0000 |
---|---|---|
committer | Ricardo Cerqueira <cyanogenmod@cerqueira.org> | 2013-11-05 20:08:34 +0000 |
commit | 40a32f628089f338f823b34ed832e18a164aec23 (patch) | |
tree | 301569d0a81c340425d54787155120c03c320c11 /src/com/android/providers/downloads/Helpers.java | |
parent | 907bcd0c7cf8a44e07b3cf426b605ca7694ee24d (diff) | |
parent | a839ee4c19bfebac961f4b0aaa8aecaba114bac9 (diff) | |
download | android_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.java | 26 |
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; } /** |