summaryrefslogtreecommitdiffstats
path: root/src/com/android
diff options
context:
space:
mode:
authorSudheer Shanka <sudheersai@google.com>2019-03-01 19:31:04 -0800
committerSudheer Shanka <sudheersai@google.com>2019-03-02 12:15:40 -0800
commit4c42ba042dad3772f0d3eddd823a0e295d671e39 (patch)
treee6ac17e93d736792ac08584504cb3db7faa0abf0 /src/com/android
parent50d0910a9b0a7eccbd5ef7ad30904ccc238dac43 (diff)
downloadandroid_packages_providers_DownloadProvider-4c42ba042dad3772f0d3eddd823a0e295d671e39.tar.gz
android_packages_providers_DownloadProvider-4c42ba042dad3772f0d3eddd823a0e295d671e39.tar.bz2
android_packages_providers_DownloadProvider-4c42ba042dad3772f0d3eddd823a0e295d671e39.zip
Canonicalize filepaths before saving to db.
Bug: 126888145 Bug: 122475235 Test: atest DownloadProviderTests Test: atest cts/tests/app/src/android/app/cts/DownloadManagerTest.java Change-Id: I96fa73d3a18e94986043c45dc4e12a47d62eeea6
Diffstat (limited to 'src/com/android')
-rw-r--r--src/com/android/providers/downloads/DownloadProvider.java40
1 files changed, 31 insertions, 9 deletions
diff --git a/src/com/android/providers/downloads/DownloadProvider.java b/src/com/android/providers/downloads/DownloadProvider.java
index b4a28182..db1f7cf2 100644
--- a/src/com/android/providers/downloads/DownloadProvider.java
+++ b/src/com/android/providers/downloads/DownloadProvider.java
@@ -389,8 +389,14 @@ public final class DownloadProvider extends ContentProvider {
final ContentValues updateValues = new ContentValues();
while (cursor.moveToNext()) {
reader.updateFromDatabase(info);
- final Uri mediaStoreUri = updateMediaProvider(client, null,
- convertToMediaProviderValues(info));
+ final ContentValues mediaValues;
+ try {
+ mediaValues = convertToMediaProviderValues(info);
+ } catch (IllegalArgumentException e) {
+ Log.e(Constants.TAG, "Error getting media content values from " + info, e);
+ continue;
+ }
+ final Uri mediaStoreUri = updateMediaProvider(client, null, mediaValues);
if (mediaStoreUri != null) {
updateValues.clear();
updateValues.put(Downloads.Impl.COLUMN_MEDIASTORE_URI,
@@ -866,8 +872,14 @@ public final class DownloadProvider extends ContentProvider {
}
private ContentValues convertToMediaProviderValues(DownloadInfo info) {
+ final String filePath;
+ try {
+ filePath = new File(info.mFileName).getCanonicalPath();
+ } catch (IOException e) {
+ throw new IllegalArgumentException(e);
+ }
final ContentValues mediaValues = new ContentValues();
- mediaValues.put(MediaStore.Downloads.DATA, info.mFileName);
+ mediaValues.put(MediaStore.Downloads.DATA, filePath);
mediaValues.put(MediaStore.Downloads.SIZE, info.mTotalBytes);
mediaValues.put(MediaStore.Downloads.DOWNLOAD_URI, info.mUri);
mediaValues.put(MediaStore.Downloads.REFERER_URI, info.mReferer);
@@ -881,9 +893,15 @@ public final class DownloadProvider extends ContentProvider {
}
private ContentValues convertToMediaProviderValues(ContentValues downloadValues) {
+ final String filePath;
+ try {
+ filePath = new File(downloadValues.getAsString(Downloads.Impl._DATA))
+ .getCanonicalPath();
+ } catch (IOException e) {
+ throw new IllegalArgumentException(e);
+ }
final ContentValues mediaValues = new ContentValues();
- mediaValues.put(MediaStore.Downloads.DATA,
- downloadValues.getAsString(Downloads.Impl._DATA));
+ mediaValues.put(MediaStore.Downloads.DATA, filePath);
mediaValues.put(MediaStore.Downloads.SIZE,
downloadValues.getAsLong(Downloads.Impl.COLUMN_TOTAL_BYTES));
mediaValues.put(MediaStore.Downloads.DOWNLOAD_URI,
@@ -911,10 +929,14 @@ public final class DownloadProvider extends ContentProvider {
if (fileUri != null) {
path = fileUri.getPath();
}
- final File app = new File(path);
- final File system = mStorageManager.translateAppToSystem(app, pid, uid);
- // If the input was file uri, we need to return a file uri
- return fileUri == null ? system.getPath() : Uri.fromFile(system).toString();
+ try {
+ final File app = new File(path).getCanonicalFile();
+ final File system = mStorageManager.translateAppToSystem(app, pid, uid);
+ // If the input was file uri, we need to return a file uri
+ return fileUri == null ? system.getPath() : Uri.fromFile(system).toString();
+ } catch (IOException e) {
+ throw new IllegalArgumentException(e);
+ }
}
private @Nullable String translateSystemToApp(@Nullable String path, int pid, int uid) {