From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Oli Lan Date: Wed, 27 Jul 2022 17:18:23 +0000 Subject: [PATCH] Revert "Prevent exfiltration of system files via user image settings." This reverts commit fac28abbe64a1c3e430414f35139988ef96edb7c. Reason for revert: regression if multiple crop system crop handlers are present Bug: 239914925 Change-Id: I1784eec7ffa2af0b48fa0d0d075e015ebfb7fa47 (cherry picked from commit 889b93dd4ec351889db69b528d81cdc3f63968fc) Merged-In: I1784eec7ffa2af0b48fa0d0d075e015ebfb7fa47 --- .../preferences/EditUserPhotoController.java | 33 +++++-------------- 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/src/com/android/emergency/preferences/EditUserPhotoController.java b/src/com/android/emergency/preferences/EditUserPhotoController.java index 8aeb8b0..77bed01 100644 --- a/src/com/android/emergency/preferences/EditUserPhotoController.java +++ b/src/com/android/emergency/preferences/EditUserPhotoController.java @@ -22,7 +22,6 @@ import android.content.ClipData; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; -import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.database.Cursor; import android.graphics.Bitmap; @@ -74,7 +73,6 @@ public class EditUserPhotoController { private static final int REQUEST_CODE_TAKE_PHOTO = 10002; private static final int REQUEST_CODE_CROP_PHOTO = 10003; - private static final String PRE_CROP_PICTURE_FILE_NAME = "PreCropEditUserPhoto.jpg"; private static final String CROP_PICTURE_FILE_NAME = "CropEditUserPhoto.jpg"; private static final String TAKE_PICTURE_FILE_NAME = "TakeEditUserPhoto2.jpg"; private static final String NEW_USER_PHOTO_FILE_NAME = "NewUserPhoto.png"; @@ -87,7 +85,6 @@ public class EditUserPhotoController { private final Fragment mFragment; private final ImageView mImageView; - private final Uri mPreCropPictureUri; private final Uri mCropPictureUri; private final Uri mTakePictureUri; @@ -99,7 +96,6 @@ public class EditUserPhotoController { mContext = view.getContext(); mFragment = fragment; mImageView = view; - mPreCropPictureUri = createTempImageUri(mContext, PRE_CROP_PICTURE_FILE_NAME, !waiting); mCropPictureUri = createTempImageUri(mContext, CROP_PICTURE_FILE_NAME, !waiting); mTakePictureUri = createTempImageUri(mContext, TAKE_PICTURE_FILE_NAME, !waiting); mPhotoSize = getPhotoSize(mContext); @@ -126,7 +122,7 @@ public class EditUserPhotoController { case REQUEST_CODE_TAKE_PHOTO: case REQUEST_CODE_CHOOSE_PHOTO: if (mTakePictureUri.equals(pictureUri)) { - cropPhoto(pictureUri); + cropPhoto(); } else { copyAndCropPhoto(pictureUri); } @@ -235,7 +231,7 @@ public class EditUserPhotoController { protected Void doInBackground(Void... params) { final ContentResolver cr = mContext.getContentResolver(); try (InputStream in = cr.openInputStream(pictureUri); - OutputStream out = cr.openOutputStream(mPreCropPictureUri)) { + OutputStream out = cr.openOutputStream(mTakePictureUri)) { Streams.copy(in, out); } catch (IOException e) { Log.w(TAG, "Failed to copy photo", e); @@ -246,32 +242,21 @@ public class EditUserPhotoController { @Override protected void onPostExecute(Void result) { if (!mFragment.isAdded()) return; - cropPhoto(mPreCropPictureUri); + cropPhoto(); } }.execute(); } - private void cropPhoto(final Uri pictureUri) { + private void cropPhoto() { Intent intent = new Intent(ACTION_CROP); - intent.setDataAndType(pictureUri, "image/*"); + intent.setDataAndType(mTakePictureUri, "image/*"); appendOutputExtra(intent, mCropPictureUri); appendCropExtras(intent); - if (startSystemActivityForResult(intent, REQUEST_CODE_CROP_PHOTO)) { - return; - } - onPhotoCropped(mTakePictureUri, false); - } - - private boolean startSystemActivityForResult(Intent intent, int code) { - ActivityInfo info = intent.resolveActivityInfo(mContext.getPackageManager(), - PackageManager.MATCH_SYSTEM_ONLY); - if (info == null) { - Log.w(TAG, "No system package activity could be found for code " + code); - return false; + if (intent.resolveActivity(mContext.getPackageManager()) != null) { + mFragment.startActivityForResult(intent, REQUEST_CODE_CROP_PHOTO); + } else { + onPhotoCropped(mTakePictureUri, false); } - intent.setPackage(info.packageName); - mFragment.startActivityForResult(intent, code); - return true; } private void appendOutputExtra(Intent intent, Uri pictureUri) {