diff options
author | Philip P. Moltmann <moltmann@google.com> | 2017-07-07 11:41:03 -0700 |
---|---|---|
committer | Evan Severson <evanseverson@google.com> | 2019-11-06 19:26:17 +0000 |
commit | cede54cce10db0e3a3a00a7a2617a37df1553146 (patch) | |
tree | 08f89fbd8ac4e6ade85713bb0ea42f9392605f8b | |
parent | 217f31fb5da6a08b2172d292fa5b8f440c02ae3a (diff) | |
download | android_packages_apps_PackageInstaller-cede54cce10db0e3a3a00a7a2617a37df1553146.tar.gz android_packages_apps_PackageInstaller-cede54cce10db0e3a3a00a7a2617a37df1553146.tar.bz2 android_packages_apps_PackageInstaller-cede54cce10db0e3a3a00a7a2617a37df1553146.zip |
Always copy file before parsing it for installing
(cherry picked from commit 731ab89e06eb9a8d0b0ba8fc7e4df45c42c8741e)
Fixes: 129039920
Fixes: 140195904
Merged-In: Ib2abc1d84311dec40e2f9e78551850984cd7ab82
-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 0f41c982..d005c37d 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"; @@ -568,7 +568,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); @@ -586,10 +586,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); } } |