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

Commit a01a0fae authored by Dianne Hackborn's avatar Dianne Hackborn
Browse files

Fix issue #18510117: Returning from an activity started with...

...startActivityForResult causes SecurityExpcetion

The ReferrerIntent hack was becoming visible to apps, which caused
a mismatch between marshalling/unmarshalling of the IPC call.

Change-Id: Ibcb788327b5bae4426efc826551799fa87d1cbaa
parent 76de8982
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2436,7 +2436,7 @@ public final class ActivityThread {
    private void deliverNewIntents(ActivityClientRecord r, List<ReferrerIntent> intents) {
        final int N = intents.size();
        for (int i=0; i<N; i++) {
            Intent intent = intents.get(i);
            ReferrerIntent intent = intents.get(i);
            intent.setExtrasClassLoader(r.activity.getClassLoader());
            intent.prepareToEnterProcess();
            r.activity.mFragments.noteStateNotSaved();
+9 −6
Original line number Diff line number Diff line
@@ -1208,14 +1208,17 @@ public class Instrumentation {
     * @param intent The new intent being received.
     */
    public void callActivityOnNewIntent(Activity activity, Intent intent) {
        activity.onNewIntent(intent);
    }

    /**
     * @hide
     */
    public void callActivityOnNewIntent(Activity activity, ReferrerIntent intent) {
        final String oldReferrer = activity.mReferrer;
        try {
            try {
                activity.mReferrer = ((ReferrerIntent)intent).mReferrer;
            } catch (ClassCastException e) {
                activity.mReferrer = null;
            }
            activity.onNewIntent(intent);
            activity.mReferrer = intent.mReferrer;
            callActivityOnNewIntent(activity, new Intent(intent));
        } finally {
            activity.mReferrer = oldReferrer;
        }