diff options
author | Philip P. Moltmann <moltmann@google.com> | 2019-11-06 11:51:03 -0800 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2019-11-06 11:51:03 -0800 |
commit | d8b1a3522f6c2a3d455e6f15020aebc9ebe4c033 (patch) | |
tree | e4191fcdbd76b74da834280081fa12fbd609aa2b | |
parent | 74c6bafea170f238a7e35178c4175c06e2ae3ac0 (diff) | |
parent | cede54cce10db0e3a3a00a7a2617a37df1553146 (diff) | |
download | android_packages_apps_PackageInstaller-d8b1a3522f6c2a3d455e6f15020aebc9ebe4c033.tar.gz android_packages_apps_PackageInstaller-d8b1a3522f6c2a3d455e6f15020aebc9ebe4c033.tar.bz2 android_packages_apps_PackageInstaller-d8b1a3522f6c2a3d455e6f15020aebc9ebe4c033.zip |
Always copy file before parsing it for installing
am: cede54cce1
Change-Id: Ief5f92017590a69a70a2192e60298bc49488c2cd
-rw-r--r-- | src/com/android/packageinstaller/InstallStart.java | 18 | ||||
-rw-r--r-- | src/com/android/packageinstaller/PackageInstallerActivity.java | 11 |
2 files changed, 13 insertions, 16 deletions
diff --git a/src/com/android/packageinstaller/InstallStart.java b/src/com/android/packageinstaller/InstallStart.java index 1eb6de80..fa118534 100644 --- a/src/com/android/packageinstaller/InstallStart.java +++ b/src/com/android/packageinstaller/InstallStart.java @@ -21,6 +21,7 @@ import android.app.Activity; import android.app.ActivityManager; import android.app.AppGlobals; import android.app.IActivityManager; +import android.content.ContentResolver; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; @@ -42,7 +43,6 @@ import com.android.internal.annotations.VisibleForTesting; public class InstallStart extends Activity { private static final String LOG_TAG = InstallStart.class.getSimpleName(); - private static final String SCHEME_CONTENT = "content"; private static final String DOWNLOADS_AUTHORITY = "downloads"; private IActivityManager mIActivityManager; private IPackageManager mIPackageManager; @@ -110,20 +110,20 @@ public class InstallStart extends Activity { } else { Uri packageUri = intent.getData(); - if (packageUri == null) { - // if there's nothing to do, quietly slip into the ether + if (packageUri != null && (packageUri.getScheme().equals(ContentResolver.SCHEME_FILE) + || packageUri.getScheme().equals(ContentResolver.SCHEME_CONTENT))) { + // Copy file to prevent it from being changed underneath this process + nextActivity.setClass(this, InstallStaging.class); + } else if (packageUri != null && packageUri.getScheme().equals( + PackageInstallerActivity.SCHEME_PACKAGE)) { + nextActivity.setClass(this, PackageInstallerActivity.class); + } else { Intent result = new Intent(); result.putExtra(Intent.EXTRA_INSTALL_RESULT, PackageManager.INSTALL_FAILED_INVALID_URI); setResult(RESULT_FIRST_USER, result); nextActivity = null; - } else { - if (packageUri.getScheme().equals(SCHEME_CONTENT)) { - nextActivity.setClass(this, InstallStaging.class); - } else { - nextActivity.setClass(this, PackageInstallerActivity.class); - } } } diff --git a/src/com/android/packageinstaller/PackageInstallerActivity.java b/src/com/android/packageinstaller/PackageInstallerActivity.java index f0e42d72..650ee80c 100644 --- a/src/com/android/packageinstaller/PackageInstallerActivity.java +++ b/src/com/android/packageinstaller/PackageInstallerActivity.java @@ -25,6 +25,7 @@ import android.app.DialogFragment; import android.app.Fragment; import android.app.FragmentTransaction; import android.content.ActivityNotFoundException; +import android.content.ContentResolver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -74,8 +75,7 @@ public class PackageInstallerActivity extends OverlayTouchActivity implements On private static final int REQUEST_TRUST_EXTERNAL_SOURCE = 1; - private static final String SCHEME_FILE = "file"; - private static final String SCHEME_PACKAGE = "package"; + static final String SCHEME_PACKAGE = "package"; static final String EXTRA_CALLING_PACKAGE = "EXTRA_CALLING_PACKAGE"; static final String EXTRA_ORIGINAL_SOURCE_INFO = "EXTRA_ORIGINAL_SOURCE_INFO"; @@ -570,7 +570,7 @@ public class PackageInstallerActivity extends OverlayTouchActivity implements On mPm.getApplicationIcon(mPkgInfo.applicationInfo)); } break; - case SCHEME_FILE: { + case ContentResolver.SCHEME_FILE: { File sourceFile = new File(packageUri.getPath()); PackageParser.Package parsed = PackageUtil.getPackageInfo(this, sourceFile); @@ -588,10 +588,7 @@ public class PackageInstallerActivity extends OverlayTouchActivity implements On } break; default: { - Log.w(TAG, "Unsupported scheme " + scheme); - setPmResult(PackageManager.INSTALL_FAILED_INVALID_URI); - finish(); - return false; + throw new IllegalArgumentException("Unexpected URI scheme " + packageUri); } } |