From f81e11d51ca758037198249178ae86d2fb7b3792 Mon Sep 17 00:00:00 2001 From: Ashish Kumar Date: Wed, 1 Mar 2023 14:34:42 +0000 Subject: [PATCH] Restricting DocumentsProvider#getType by implementing getTypeAnonymous - getTypeAnonymous can be accessed by anyone. It does not reveal any sensitive information. Bug: b/271262541 Test: build and manual test Change-Id: I300a3be0904c44214f3ab206c30314855feaa57b --- core/api/current.txt | 1 + core/java/android/provider/DocumentsProvider.java | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/core/api/current.txt b/core/api/current.txt index a7f69374ff008..600adde36063f 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -36849,6 +36849,7 @@ package android.provider { method public String[] getDocumentStreamTypes(String, String); method public String getDocumentType(String) throws java.io.FileNotFoundException; method public final String getType(android.net.Uri); + method @Nullable public final String getTypeAnonymous(@NonNull android.net.Uri); method public final android.net.Uri insert(android.net.Uri, android.content.ContentValues); method public boolean isChildDocument(String, String); method public String moveDocument(String, String, String) throws java.io.FileNotFoundException; diff --git a/core/java/android/provider/DocumentsProvider.java b/core/java/android/provider/DocumentsProvider.java index 07d500176fe5c..5b527c70b4f75 100644 --- a/core/java/android/provider/DocumentsProvider.java +++ b/core/java/android/provider/DocumentsProvider.java @@ -978,6 +978,19 @@ public abstract class DocumentsProvider extends ContentProvider { } } + /** + * An unrestricted version of getType, which does not reveal sensitive information + */ + @Override + public final @Nullable String getTypeAnonymous(@NonNull Uri uri) { + switch (mMatcher.match(uri)) { + case MATCH_ROOT: + return DocumentsContract.Root.MIME_TYPE_ITEM; + default: + return null; + } + } + /** * Implementation is provided by the parent class. Can be overridden to * provide additional functionality, but subclasses must always