@@ -67,11 +67,14 @@ private class IntentFlagsOrDataChangedSanitizer extends IntentUriPermissionManip
6767 this .asExpr ( ) = ma .getQualifier ( )
6868 |
6969 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 ) ) )
7274 or
7375 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 ) ) )
7578 or
7679 m .hasName ( "setData" )
7780 )
@@ -110,7 +113,7 @@ private predicate intentFlagsOrDataChecked(Guard g, Expr intent, boolean branch)
110113 ma .getMethod ( ) = m and
111114 m .getDeclaringType ( ) instanceof TypeIntent and
112115 m .hasName ( [ "getFlags" , "getData" ] ) and
113- bitwiseLocalTaintStep * ( ma , checkedValue )
116+ bitwiseLocalTaintStep * ( DataFlow :: exprNode ( ma ) , DataFlow :: exprNode ( checkedValue ) )
114117 |
115118 bitwiseCheck ( g , branch ) and
116119 checkedValue = g .( EqualityTest ) .getAnOperand ( ) .( AndBitwiseExpr )
@@ -137,7 +140,7 @@ private predicate bitwiseCheck(Guard g, boolean branch) {
137140 * Holds if taint can flow from `source` to `sink` in one local step,
138141 * including bitwise operations.
139142 */
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 ( )
143146}
0 commit comments