Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 22a3dede authored by Abhijeet Kaur's avatar Abhijeet Kaur Committed by Automerger Merge Worker
Browse files

Validate user-supplied tree URIs in DocumentsProvider calls am: eca247f2

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12513169

Change-Id: Ibc90fe5e176678bf3a10e5a876e3a5da772302ee
parents 0827cf25 eca247f2
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -218,8 +218,15 @@ public abstract class DocumentsProvider extends ContentProvider {
    }

    /** {@hide} */
    private void enforceTree(Uri documentUri) {
        if (isTreeUri(documentUri)) {
    private void enforceTreeForExtraUris(Bundle extras) {
        enforceTree(extras.getParcelable(DocumentsContract.EXTRA_URI));
        enforceTree(extras.getParcelable(DocumentsContract.EXTRA_PARENT_URI));
        enforceTree(extras.getParcelable(DocumentsContract.EXTRA_TARGET_URI));
    }

    /** {@hide} */
    private void enforceTree(@Nullable Uri documentUri) {
        if (documentUri != null && isTreeUri(documentUri)) {
            final String parent = getTreeDocumentId(documentUri);
            final String child = getDocumentId(documentUri);
            if (Objects.equals(parent, child)) {
@@ -1080,6 +1087,9 @@ public abstract class DocumentsProvider extends ContentProvider {
        final Context context = getContext();
        final Bundle out = new Bundle();

        // If the URI is a tree URI performs some validation.
        enforceTreeForExtraUris(extras);

        final Uri extraUri = validateIncomingNullableUri(
                extras.getParcelable(DocumentsContract.EXTRA_URI));
        final Uri extraTargetUri = validateIncomingNullableUri(
@@ -1110,9 +1120,6 @@ public abstract class DocumentsProvider extends ContentProvider {
                    "Requested authority " + authority + " doesn't match provider " + mAuthority);
        }

        // If the URI is a tree URI performs some validation.
        enforceTree(documentUri);

        if (METHOD_IS_CHILD_DOCUMENT.equals(method)) {
            enforceReadPermissionInner(documentUri, getCallingPackage(),
                    getCallingAttributionTag(), null);