Backport ChooserTarget package source check from N
Fix a bug where a ChooserTargetService could supply a ChooserTarget pointing at a non-exported activity outside of its own package and have it launch. Bug 28384423 Change-Id: I3f5854f91c5695ad9253d71055ef58224df47008
This commit is contained in:
@@ -616,7 +616,19 @@ public class ChooserActivity extends ResolverActivity {
|
|||||||
}
|
}
|
||||||
intent.setComponent(mChooserTarget.getComponentName());
|
intent.setComponent(mChooserTarget.getComponentName());
|
||||||
intent.putExtras(mChooserTarget.getIntentExtras());
|
intent.putExtras(mChooserTarget.getIntentExtras());
|
||||||
activity.startActivityAsCaller(intent, options, true, userId);
|
|
||||||
|
// Important: we will ignore the target security checks in ActivityManager
|
||||||
|
// if and only if the ChooserTarget's target package is the same package
|
||||||
|
// where we got the ChooserTargetService that provided it. This lets a
|
||||||
|
// ChooserTargetService provide a non-exported or permission-guarded target
|
||||||
|
// to the chooser for the user to pick.
|
||||||
|
//
|
||||||
|
// If mSourceInfo is null, we got this ChooserTarget from the caller or elsewhere
|
||||||
|
// so we'll obey the caller's normal security checks.
|
||||||
|
final boolean ignoreTargetSecurity = mSourceInfo != null
|
||||||
|
&& mSourceInfo.getResolvedComponentName().getPackageName()
|
||||||
|
.equals(mChooserTarget.getComponentName().getPackageName());
|
||||||
|
activity.startActivityAsCaller(intent, options, ignoreTargetSecurity, userId);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user