[Libreoffice-commits] core.git: android/source

Michael Weghorn (via logerrit) logerrit at kemper.freedesktop.org
Tue May 11 08:06:27 UTC 2021


 android/source/src/java/org/libreoffice/ui/FileUtilities.java |    3 +++
 1 file changed, 3 insertions(+)

New commits:
commit 55c17dff49166e8ad036f02fc97db40137158d43
Author:     Michael Weghorn <m.weghorn at posteo.de>
AuthorDate: Tue May 11 08:39:21 2021 +0200
Commit:     Michael Weghorn <m.weghorn at posteo.de>
CommitDate: Tue May 11 10:05:45 2021 +0200

    android: Don't crash trying to process non-existing file from recents
    
    When the "Recent files" list in Android Viewer contained an entry
    for an Uri that was no longer pointing to a valid file, a
    SecurityException was thrown trying to query the display name
    from it.
    
    Catch the SecurityException that is thrown and just return an
    empty string, the document is then not displayed in the
    "Recent files" list.
    
    One scenario:
    
    1) open file located in the "Download" directory from within the app
    2) close the app
    3) delete the file
    4) open the app again
    
    -> crash, with this backtrace in ADB log:
    
        05-11 08:37:14.230  3892  4707 E DatabaseUtils: java.lang.SecurityException: Permission Denial: reading com.android.providers.downloads.DownloadStorageProvider uri content://com.android.providers.downloads.documents/document/msf%3A1091 from pid=6981, uid=10177 requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs
        05-11 08:37:14.230  3892  4707 E DatabaseUtils:         at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:804)
        05-11 08:37:14.230  3892  4707 E DatabaseUtils:         at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:670)
        05-11 08:37:14.230  3892  4707 E DatabaseUtils:         at android.content.ContentProvider$Transport.query(ContentProvider.java:238)
        05-11 08:37:14.230  3892  4707 E DatabaseUtils:         at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:106)
        05-11 08:37:14.230  3892  4707 E DatabaseUtils:         at android.os.Binder.execTransactInternal(Binder.java:1138)
        05-11 08:37:14.230  3892  4707 E DatabaseUtils:         at android.os.Binder.execTransact(Binder.java:1102)
        05-11 08:37:14.230  6981  6981 D AndroidRuntime: Shutting down VM
        05-11 08:37:14.231  6981  6981 E AndroidRuntime: FATAL EXCEPTION: main
        05-11 08:37:14.231  6981  6981 E AndroidRuntime: Process: org.libreoffice, PID: 6981
        05-11 08:37:14.231  6981  6981 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{org.libreoffice/org.libreoffice.ui.LibreOfficeUIActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.downloads.DownloadStorageProvider uri content://com.android.providers.downloads.documents/document/msf%3A1091 from pid=6981, uid=10177 requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3333)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3477)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2043)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:106)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:216)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:7464)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:955)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime: Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.downloads.DownloadStorageProvider uri content://com.android.providers.downloads.documents/document/msf%3A1091 from pid=6981, uid=10177 requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.os.Parcel.createExceptionOrNull(Parcel.java:2285)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.os.Parcel.createException(Parcel.java:2269)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.os.Parcel.readException(Parcel.java:2252)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.content.ContentProviderProxy.query(ContentProviderNative.java:472)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.content.ContentResolver.query(ContentResolver.java:1112)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at org.libreoffice.ui.FileUtilities.retrieveDisplayNameForDocumentUri(FileUtilities.java:137)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at org.libreoffice.ui.LibreOfficeUIActivity.createUI(LibreOfficeUIActivity.java:206)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at org.libreoffice.ui.LibreOfficeUIActivity.onCreate(LibreOfficeUIActivity.java:147)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.app.Activity.performCreate(Activity.java:7990)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.app.Activity.performCreate(Activity.java:7979)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3308)
        05-11 08:37:14.231  6981  6981 E AndroidRuntime:        ... 11 more
        05-11 08:37:14.233  2293  3174 W ActivityTaskManager:   Force finishing activity org.libreoffice/.ui.LibreOfficeUIActivity
    
    Change-Id: I7a8e824e557dba8771cf1f210ae89d6f60498737
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115374
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.weghorn at posteo.de>

diff --git a/android/source/src/java/org/libreoffice/ui/FileUtilities.java b/android/source/src/java/org/libreoffice/ui/FileUtilities.java
index 38ea9054fd59..4c9c0d6d10eb 100644
--- a/android/source/src/java/org/libreoffice/ui/FileUtilities.java
+++ b/android/source/src/java/org/libreoffice/ui/FileUtilities.java
@@ -138,6 +138,9 @@ public class FileUtilities {
             if (cursor != null && cursor.moveToFirst()) {
                 displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
             }
+        } catch (SecurityException e) {
+            // thrown e.g. when Uri has become invalid, e.g. corresponding file has been deleted
+            Log.i(LOGTAG, "SecurityException when trying to receive display name for Uri " + docUri);
         } finally {
             if (cursor != null) {
                 cursor.close();


More information about the Libreoffice-commits mailing list