Fix crash in discardPurgeableFiles with proper selection syntax.
Jean-Baptiste Queru [Wed, 1 Jul 2009 22:27:28 +0000 (15:27 -0700)]
The basic crash is that this codepath was doing a query to the download
provider without properly quoting its selection arguments (which is
mandated by the download provider).

A secondary crash is that the DESTINATION column wasn't readable.

This fixes bug 1941125.

Tested by force-calling discardPurgeableFiles for each download
to /cache, locally adding a few debugging statements to be sure
that the codepath was getting executed, and doing a market download.

docs/index.html
src/com/android/providers/downloads/DownloadProvider.java
src/com/android/providers/downloads/Helpers.java

index a073a00..0004b72 100644 (file)
@@ -231,6 +231,7 @@ Here's the list of columns that can currently be read/queried, with comments:
 <tr><td > <code>_DATA</code> </td><td > Probably should not be visible to applications. <b>WARNING</b> Security concern: This holds filenames, including those of private files. While file permissions are supposed to kick in and protect the files, hiding private filenames deeper in would probably be a reasonable idea. </td></tr>
 <tr><td > <code>MIMETYPE</code> </td><td > Needs to be visible so that app can display the icon matching the mime type.  Intended to be visible by 3rd-party download UIs. <b>TODO</b> Security TBD before we implement support for 3rd-party UIs. </td></tr>
 <tr><td > <code>VISIBILITY</code> </td><td > Needs to be visible in case an app has both visible and invisible downloads. No obvious security concern. </td></tr>
+<tr><td > <code>DESTINATION</code> </td><td > Needs to be visible in case an app has multiple destinations and wants to distinguish between them. Also used internally by the download manager. No obvious security concern. </td></tr>
 <tr><td > <code>STATUS</code> </td><td > Needs to be visible (1004). No obvious security concern. </td></tr>
 <tr><td > <code>LAST_MODIFICATION</code> </td><td > Needs to be visible, e.g. so that apps can sort downloads by date of last activity, or discard old downloads. No obvious security concern. </td></tr>
 <tr><td > <code>NOTIFICATION_PACKAGE</code> </td><td > Allows individual apps running under shared UIDs to identify their own downloads. No security concern: can be queried through package manager. </td></tr>
index f7cdd51..e5f2576 100644 (file)
@@ -82,6 +82,7 @@ public final class DownloadProvider extends ContentProvider {
         Downloads._DATA,
         Downloads.MIMETYPE,
         Downloads.VISIBILITY,
+        Downloads.DESTINATION,
         Downloads.CONTROL,
         Downloads.STATUS,
         Downloads.LAST_MODIFICATION,
index 7c6070f..72be60e 100644 (file)
@@ -427,9 +427,9 @@ public class Helpers {
                 Downloads.CONTENT_URI,
                 null,
                 "( " +
-                Downloads.STATUS + " = " + Downloads.STATUS_SUCCESS + " AND " +
-                Downloads.DESTINATION + " = " + Downloads.DESTINATION_CACHE_PARTITION_PURGEABLE
-                + " )",
+                Downloads.STATUS + " = '" + Downloads.STATUS_SUCCESS + "' AND " +
+                Downloads.DESTINATION + " = '" + Downloads.DESTINATION_CACHE_PARTITION_PURGEABLE
+                + "' )",
                 null,
                 Downloads.LAST_MODIFICATION);
         if (cursor == null) {