Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cede54cc authored by Philip P. Moltmann's avatar Philip P. Moltmann Committed by Evan Severson
Browse files

Always copy file before parsing it for installing

(cherry picked from commit 731ab89e)

Fixes: 129039920
Fixes: 140195904
Merged-In: Ib2abc1d84311dec40e2f9e78551850984cd7ab82
parent 217f31fb
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -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);
                }
            }
        }

+4 −7
Original line number Diff line number Diff line
@@ -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);
            }
        }