diff options
| author | 2023-05-26 14:29:47 +0000 | |
|---|---|---|
| committer | 2023-05-26 14:29:47 +0000 | |
| commit | 3f7b95fcfd5b26feab6342cda4bf1efbe6c28eca (patch) | |
| tree | bf4ae20b52c1e53ddc64040e1492cec97fa86863 | |
| parent | cf672a9a5f1cd385e5ab5a761d75adc0787225fc (diff) | |
| parent | f078924b0220efec1f817cd9632e95e7d251d053 (diff) | |
Merge "Revert "Verify URI permissions in MediaMetadata"" into tm-dev
| -rw-r--r-- | services/core/java/com/android/server/media/MediaSessionRecord.java | 53 |
1 files changed, 9 insertions, 44 deletions
diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index b459cfe6b44e..cc4895ffaf24 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -22,8 +22,6 @@ import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.app.PendingIntent; import android.content.ComponentName; -import android.content.ContentProvider; -import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; @@ -65,9 +63,6 @@ import android.util.EventLog; import android.util.Log; import android.view.KeyEvent; -import com.android.server.LocalServices; -import com.android.server.uri.UriGrantsManagerInternal; - import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; @@ -83,10 +78,6 @@ import java.util.concurrent.CopyOnWriteArrayList; // TODO(jaewan): Do not call service method directly -- introduce listener instead. public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionRecordImpl { private static final String TAG = "MediaSessionRecord"; - private static final String[] ART_URIS = new String[] { - MediaMetadata.METADATA_KEY_ALBUM_ART_URI, - MediaMetadata.METADATA_KEY_ART_URI, - MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI}; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); /** @@ -140,7 +131,6 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR private final SessionStub mSession; private final SessionCb mSessionCb; private final MediaSessionService mService; - private final UriGrantsManagerInternal mUgmInternal; private final Context mContext; private final boolean mVolumeAdjustmentForRemoteGroupSessions; @@ -202,7 +192,6 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); mAudioAttrs = DEFAULT_ATTRIBUTES; mPolicies = policies; - mUgmInternal = LocalServices.getService(UriGrantsManagerInternal.class); mVolumeAdjustmentForRemoteGroupSessions = mContext.getResources().getBoolean( com.android.internal.R.bool.config_volumeAdjustmentForRemoteGroupSessions); @@ -1029,45 +1018,21 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR public void setMetadata(MediaMetadata metadata, long duration, String metadataDescription) throws RemoteException { synchronized (mLock) { + MediaMetadata temp = metadata == null ? null : new MediaMetadata.Builder(metadata) + .build(); + // This is to guarantee that the underlying bundle is unparceled + // before we set it to prevent concurrent reads from throwing an + // exception + if (temp != null) { + temp.size(); + } + mMetadata = temp; mDuration = duration; mMetadataDescription = metadataDescription; - mMetadata = sanitizeMediaMetadata(metadata); } mHandler.post(MessageHandler.MSG_UPDATE_METADATA); } - private MediaMetadata sanitizeMediaMetadata(MediaMetadata metadata) { - if (metadata == null) { - return null; - } - MediaMetadata.Builder metadataBuilder = new MediaMetadata.Builder(metadata); - for (String key: ART_URIS) { - String uriString = metadata.getString(key); - if (TextUtils.isEmpty(uriString)) { - continue; - } - Uri uri = Uri.parse(uriString); - if (!ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) { - continue; - } - try { - mUgmInternal.checkGrantUriPermission(getUid(), - getPackageName(), - ContentProvider.getUriWithoutUserId(uri), - Intent.FLAG_GRANT_READ_URI_PERMISSION, - ContentProvider.getUserIdFromUri(uri, getUserId())); - } catch (SecurityException e) { - metadataBuilder.putString(key, null); - } - } - MediaMetadata sanitizedMetadata = metadataBuilder.build(); - // sanitizedMetadata.size() guarantees that the underlying bundle is unparceled - // before we set it to prevent concurrent reads from throwing an - // exception - sanitizedMetadata.size(); - return sanitizedMetadata; - } - @Override public void setPlaybackState(PlaybackState state) throws RemoteException { int oldState = mPlaybackState == null |