@@ -5,6 +5,36 @@ private import semmle.code.java.dataflow.DataFlow
55private import semmle.code.java.dataflow.FlowSteps
66private import semmle.code.java.dataflow.ExternalFlow
77
8+ /** The class `androidx.slice.SliceProvider`. */
9+ class SliceProvider extends Class {
10+ SliceProvider ( ) { this .hasQualifiedName ( "androidx.slice" , "SliceProvider" ) }
11+ }
12+
13+ /**
14+ * An additional value step for modeling the lifecycle of a `SliceProvider`.
15+ * It connects the `PostUpdateNode` of any update done to the provider object in
16+ * `onCreateSliceProvider` to the instance parameter of `onBindSlice`.
17+ */
18+ private class SliceProviderLifecycleStep extends AdditionalValueStep {
19+ override predicate step ( DataFlow:: Node node1 , DataFlow:: Node node2 ) {
20+ exists ( Method onCreate , Method onBind , RefType declaringClass |
21+ declaringClass .getASupertype * ( ) instanceof SliceProvider and
22+ onCreate .getDeclaringType ( ) = declaringClass and
23+ onCreate .hasName ( "onCreateSliceProvider" ) and
24+ onBind .getDeclaringType ( ) = declaringClass and
25+ onBind .hasName ( "onBindSlice" )
26+ |
27+ node1
28+ .( DataFlow:: PostUpdateNode )
29+ .getPreUpdateNode ( )
30+ .( DataFlow:: InstanceAccessNode )
31+ .isOwnInstanceAccess ( ) and
32+ node1 .getEnclosingCallable ( ) = onCreate and
33+ node2 .( DataFlow:: InstanceParameterNode ) .getEnclosingCallable ( ) = onBind
34+ )
35+ }
36+ }
37+
838private class SliceActionsInheritTaint extends DataFlow:: SyntheticFieldContent ,
939 TaintInheritingContent {
1040 SliceActionsInheritTaint ( ) { this .getField ( ) .matches ( "androidx.slice.Slice.action" ) }
0 commit comments