@@ -67,11 +67,14 @@ private class IntentFlagsOrDataChangedSanitizer extends IntentUriPermissionManip
67
67
this .asExpr ( ) = ma .getQualifier ( )
68
68
|
69
69
m .hasName ( "removeFlags" ) and
70
- bitwiseLocalTaintStep * ( any ( GrantReadUriPermissionFlag f ) .getAnAccess ( ) , ma .getArgument ( 0 ) ) and
71
- bitwiseLocalTaintStep * ( any ( GrantWriteUriPermissionFlag f ) .getAnAccess ( ) , ma .getArgument ( 0 ) )
70
+ bitwiseLocalTaintStep * ( DataFlow:: exprNode ( any ( GrantReadUriPermissionFlag f ) .getAnAccess ( ) ) ,
71
+ DataFlow:: exprNode ( ma .getArgument ( 0 ) ) ) and
72
+ bitwiseLocalTaintStep * ( DataFlow:: exprNode ( any ( GrantWriteUriPermissionFlag f ) .getAnAccess ( ) ) ,
73
+ DataFlow:: exprNode ( ma .getArgument ( 0 ) ) )
72
74
or
73
75
m .hasName ( "setFlags" ) and
74
- not bitwiseLocalTaintStep * ( any ( GrantUriPermissionFlag f ) .getAnAccess ( ) , ma .getArgument ( 0 ) )
76
+ not bitwiseLocalTaintStep * ( DataFlow:: exprNode ( any ( GrantUriPermissionFlag f ) .getAnAccess ( ) ) ,
77
+ DataFlow:: exprNode ( ma .getArgument ( 0 ) ) )
75
78
or
76
79
m .hasName ( "setData" )
77
80
)
@@ -110,7 +113,7 @@ private predicate intentFlagsOrDataChecked(Guard g, Expr intent, boolean branch)
110
113
ma .getMethod ( ) = m and
111
114
m .getDeclaringType ( ) instanceof TypeIntent and
112
115
m .hasName ( [ "getFlags" , "getData" ] ) and
113
- bitwiseLocalTaintStep * ( ma , checkedValue )
116
+ bitwiseLocalTaintStep * ( DataFlow :: exprNode ( ma ) , DataFlow :: exprNode ( checkedValue ) )
114
117
|
115
118
bitwiseCheck ( g , branch ) and
116
119
checkedValue = g .( EqualityTest ) .getAnOperand ( ) .( AndBitwiseExpr )
@@ -137,7 +140,7 @@ private predicate bitwiseCheck(Guard g, boolean branch) {
137
140
* Holds if taint can flow from `source` to `sink` in one local step,
138
141
* including bitwise operations.
139
142
*/
140
- private predicate bitwiseLocalTaintStep ( Expr source , Expr sink ) {
141
- TaintTracking:: localTaintStep ( DataFlow :: exprNode ( source ) , DataFlow :: exprNode ( sink ) ) or
142
- source = sink .( BinaryExpr ) .getAnOperand ( )
143
+ private predicate bitwiseLocalTaintStep ( DataFlow :: Node source , DataFlow :: Node sink ) {
144
+ TaintTracking:: localTaintStep ( source , sink ) or
145
+ source . asExpr ( ) = sink . asExpr ( ) . ( BitwiseExpr ) .( BinaryExpr ) .getAnOperand ( )
143
146
}
0 commit comments