Validate user-supplied tree URIs in DocumentsProvider calls am: eca247f2d3
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12513169 Change-Id: Ibc90fe5e176678bf3a10e5a876e3a5da772302ee
This commit is contained in:
@@ -218,8 +218,15 @@ public abstract class DocumentsProvider extends ContentProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** {@hide} */
|
/** {@hide} */
|
||||||
private void enforceTree(Uri documentUri) {
|
private void enforceTreeForExtraUris(Bundle extras) {
|
||||||
if (isTreeUri(documentUri)) {
|
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 parent = getTreeDocumentId(documentUri);
|
||||||
final String child = getDocumentId(documentUri);
|
final String child = getDocumentId(documentUri);
|
||||||
if (Objects.equals(parent, child)) {
|
if (Objects.equals(parent, child)) {
|
||||||
@@ -1080,6 +1087,9 @@ public abstract class DocumentsProvider extends ContentProvider {
|
|||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
final Bundle out = new Bundle();
|
final Bundle out = new Bundle();
|
||||||
|
|
||||||
|
// If the URI is a tree URI performs some validation.
|
||||||
|
enforceTreeForExtraUris(extras);
|
||||||
|
|
||||||
final Uri extraUri = validateIncomingNullableUri(
|
final Uri extraUri = validateIncomingNullableUri(
|
||||||
extras.getParcelable(DocumentsContract.EXTRA_URI));
|
extras.getParcelable(DocumentsContract.EXTRA_URI));
|
||||||
final Uri extraTargetUri = validateIncomingNullableUri(
|
final Uri extraTargetUri = validateIncomingNullableUri(
|
||||||
@@ -1110,9 +1120,6 @@ public abstract class DocumentsProvider extends ContentProvider {
|
|||||||
"Requested authority " + authority + " doesn't match provider " + mAuthority);
|
"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)) {
|
if (METHOD_IS_CHILD_DOCUMENT.equals(method)) {
|
||||||
enforceReadPermissionInner(documentUri, getCallingPackage(),
|
enforceReadPermissionInner(documentUri, getCallingPackage(),
|
||||||
getCallingAttributionTag(), null);
|
getCallingAttributionTag(), null);
|
||||||
|
|||||||
Reference in New Issue
Block a user