Skip to content

Commit 4ae9959

Browse files
authored
Merge pull request github#6801 from atorralba/atorralba/android_slice_models
Android: Add `androidx.slice.builders` models
2 parents 5a2ef83 + 8ffa195 commit 4ae9959

32 files changed

+3566
-3
lines changed

java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ private module Frameworks {
7979
private import internal.ContainerFlow
8080
private import semmle.code.java.frameworks.android.Android
8181
private import semmle.code.java.frameworks.android.Intent
82+
private import semmle.code.java.frameworks.android.Slice
8283
private import semmle.code.java.frameworks.android.SQLite
8384
private import semmle.code.java.frameworks.android.XssSinks
8485
private import semmle.code.java.frameworks.ApacheHttp
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
/** Provides classes and predicates related to `androidx.slice`. */
2+
3+
import java
4+
private import semmle.code.java.dataflow.DataFlow
5+
private import semmle.code.java.dataflow.FlowSteps
6+
private import semmle.code.java.dataflow.ExternalFlow
7+
8+
private class SliceActionsInheritTaint extends DataFlow::SyntheticFieldContent,
9+
TaintInheritingContent {
10+
SliceActionsInheritTaint() { this.getField().matches("androidx.slice.Slice.action") }
11+
}
12+
13+
private class SliceBuildersSummaryModels extends SummaryModelCsv {
14+
override predicate row(string row) {
15+
row =
16+
[
17+
"androidx.slice.builders;ListBuilder;true;addAction;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
18+
"androidx.slice.builders;ListBuilder;true;addGridRow;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
19+
"androidx.slice.builders;ListBuilder;true;addInputRange;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
20+
"androidx.slice.builders;ListBuilder;true;addRange;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
21+
"androidx.slice.builders;ListBuilder;true;addRating;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
22+
"androidx.slice.builders;ListBuilder;true;addRow;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
23+
"androidx.slice.builders;ListBuilder;true;addSelection;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
24+
"androidx.slice.builders;ListBuilder;true;setHeader;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
25+
"androidx.slice.builders;ListBuilder;true;setSeeMoreAction;(PendingIntent);;Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
26+
"androidx.slice.builders;ListBuilder;true;setSeeMoreRow;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
27+
"androidx.slice.builders;ListBuilder;true;build;;;SyntheticField[androidx.slice.Slice.action] of Argument[-1];ReturnValue;taint",
28+
"androidx.slice.builders;ListBuilder$HeaderBuilder;true;setPrimaryAction;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
29+
"androidx.slice.builders;ListBuilder$InputRangeBuilder;true;addEndItem;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
30+
"androidx.slice.builders;ListBuilder$InputRangeBuilder;true;setInputAction;(PendingIntent);;Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
31+
"androidx.slice.builders;ListBuilder$InputRangeBuilder;true;setPrimaryAction;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
32+
"androidx.slice.builders;ListBuilder$RangeBuilder;true;setPrimaryAction;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
33+
"androidx.slice.builders;ListBuilder$RatingBuilder;true;setInputAction;(PendingIntent);;Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
34+
"androidx.slice.builders;ListBuilder$RatingBuilder;true;setPrimaryAction;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
35+
"androidx.slice.builders;ListBuilder$RowBuilder;true;addEndItem;(SliceAction,boolean);;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
36+
"androidx.slice.builders;ListBuilder$RowBuilder;true;addEndItem;(SliceAction);;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
37+
"androidx.slice.builders;ListBuilder$RowBuilder;true;setPrimaryAction;;;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
38+
"androidx.slice.builders;ListBuilder$RowBuilder;true;setTitleItem;(SliceAction,boolean);;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
39+
"androidx.slice.builders;ListBuilder$RowBuilder;true;setTitleItem;(SliceAction);;SyntheticField[androidx.slice.Slice.action] of Argument[0];SyntheticField[androidx.slice.Slice.action] of Argument[-1];taint",
40+
"androidx.slice.builders;SliceAction;true;create;(PendingIntent,IconCompat,int,CharSequence);;Argument[0];SyntheticField[androidx.slice.Slice.action] of ReturnValue;taint",
41+
"androidx.slice.builders;SliceAction;true;createDeeplink;(PendingIntent,IconCompat,int,CharSequence);;Argument[0];SyntheticField[androidx.slice.Slice.action] of ReturnValue;taint",
42+
"androidx.slice.builders;SliceAction;true;createToggle;(PendingIntent,CharSequence,boolean);;Argument[0];SyntheticField[androidx.slice.Slice.action] of ReturnValue;taint",
43+
"androidx.slice.builders;SliceAction;true;getAction;;;SyntheticField[androidx.slice.Slice.action] of Argument[-1];ReturnValue;taint",
44+
// Fluent models
45+
"androidx.slice.builders;ListBuilder;true;" +
46+
[
47+
"addAction", "addGridRow", "addInputRange", "addRange", "addRating", "addRow",
48+
"addSelection", "setAccentColor", "setHeader", "setHostExtras", "setIsError",
49+
"setKeywords", "setLayoutDirection", "setSeeMoreAction", "setSeeMoreRow"
50+
] + ";;;Argument[-1];ReturnValue;value",
51+
"androidx.slice.builders;ListBuilder$HeaderBuilder;true;" +
52+
[
53+
"setContentDescription", "setLayoutDirection", "setPrimaryAction", "setSubtitle",
54+
"setSummary", "setTitle"
55+
] + ";;;Argument[-1];ReturnValue;value",
56+
"androidx.slice.builders;ListBuilder$InputRangeBuilder;true;" +
57+
[
58+
"addEndItem", "setContentDescription", "setInputAction", "setLayoutDirection", "setMax",
59+
"setMin", "setPrimaryAction", "setSubtitle", "setThumb", "setTitle", "setTitleItem",
60+
"setValue"
61+
] + ";;;Argument[-1];ReturnValue;value",
62+
"androidx.slice.builders;ListBuilder$RangeBuilder;true;" +
63+
[
64+
"setContentDescription", "setMax", "setMode", "setPrimaryAction", "setSubtitle",
65+
"setTitle", "setTitleItem", "setValue"
66+
] + ";;;Argument[-1];ReturnValue;value",
67+
"androidx.slice.builders;ListBuilder$RatingBuilder;true;" +
68+
[
69+
"setContentDescription", "setInputAction", "setMax", "setMin", "setPrimaryAction",
70+
"setSubtitle", "setTitle", "setTitleItem", "setValue"
71+
] + ";;;Argument[-1];ReturnValue;value",
72+
"androidx.slice.builders;ListBuilder$RowBuilder;true;" +
73+
[
74+
"addEndItem", "setContentDescription", "setEndOfSection", "setLayoutDirection",
75+
"setPrimaryAction", "setSubtitle", "setTitle", "setTitleItem"
76+
] + ";;;Argument[-1];ReturnValue;value",
77+
"androidx.slice.builders;SliceAction;true;" +
78+
["setChecked", "setContentDescription", "setPriority"] +
79+
";;;Argument[-1];ReturnValue;value"
80+
]
81+
}
82+
}
83+
84+
private class SliceProviderSourceModels extends SourceModelCsv {
85+
override predicate row(string row) {
86+
row =
87+
[
88+
"androidx.slice;SliceProvider;true;onBindSlice;;;Parameter[0];contentprovider",
89+
"androidx.slice;SliceProvider;true;onCreatePermissionRequest;;;Parameter[0];contentprovider",
90+
"androidx.slice;SliceProvider;true;onMapIntentToUri;;;Parameter[0];contentprovider",
91+
"androidx.slice;SliceProvider;true;onSlicePinned;;;Parameter[0];contentprovider",
92+
"androidx.slice;SliceProvider;true;onSliceUnpinned;;;Parameter[0];contentprovider"
93+
]
94+
}
95+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest
3+
xmlns:android="http://schemas.android.com/apk/res/android"
4+
android:versionCode="1"
5+
android:versionName="1.0"
6+
package="com.example.app">
7+
8+
<application
9+
android:allowBackup="true"
10+
android:icon="@mipmap/ic_launcher"
11+
android:roundIcon="@mipmap/ic_launcher_round"
12+
android:label="@string/app_name"
13+
android:supportsRtl="true"
14+
android:theme="@style/AppTheme">
15+
16+
<activity
17+
android:name=".MainActivity"
18+
android:icon="@drawable/ic_launcher"
19+
android:label="@string/app_name">
20+
<intent-filter>
21+
<action android:name="android.intent.action.MAIN" />
22+
<category android:name="android.intent.category.LAUNCHER" />
23+
</intent-filter>
24+
</activity>
25+
26+
<provider
27+
android:name=".TestSources"
28+
android:authority="com.example.myapp.Test"
29+
android:exported="true" />
30+
31+
</application>
32+
</manifest>

0 commit comments

Comments
 (0)