From b4f08f8b91b2a7bb96e86e40d91bef9daf88e4a1 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Fri, 23 Sep 2022 21:18:31 -0400 Subject: [PATCH] Add support for Android Manifest `` element --- .../lib/semmle/code/xml/AndroidManifest.qll | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/xml/AndroidManifest.qll b/java/ql/lib/semmle/code/xml/AndroidManifest.qll index 2bcfeafee1b..69c8825019b 100644 --- a/java/ql/lib/semmle/code/xml/AndroidManifest.qll +++ b/java/ql/lib/semmle/code/xml/AndroidManifest.qll @@ -131,6 +131,35 @@ class AndroidActivityXmlElement extends AndroidComponentXmlElement { AndroidActivityXmlElement() { this.getName() = "activity" } } +/** + * An `` element in an Android manifest file. + */ +class AndroidActivityAliasXmlElement extends AndroidComponentXmlElement { + AndroidActivityAliasXmlElement() { this.getName() = "activity-alias" } + + /** + * Get and resolve the name of the target activity from the `android:targetActivity` attribute. + */ + string getResolvedTargetActivityName() { + exists(AndroidXmlAttribute attr | + attr = this.getAnAttribute() and attr.getName() = "targetActivity" + | + result = getResolvedIdentifier(attr) + ) + } + + /** + * Gets the `` element referenced by the `android:targetActivity` attribute. + */ + AndroidActivityXmlElement getTarget() { + exists(AndroidActivityXmlElement activity | + activity.getResolvedComponentName() = this.getResolvedTargetActivityName() + | + result = activity + ) + } +} + /** * A `` element in an Android manifest file. */ @@ -235,7 +264,7 @@ class AndroidPathPermissionXmlElement extends XmlElement { class AndroidComponentXmlElement extends XmlElement { AndroidComponentXmlElement() { this.getParent() instanceof AndroidApplicationXmlElement and - this.getName().regexpMatch("(activity|service|receiver|provider)") + this.getName().regexpMatch("(activity|activity-alias|service|receiver|provider)") } /**