@@ -57,14 +57,13 @@ private class WebViewRef extends Element {
57
57
this .( Variable ) .getType ( ) .( RefType ) .getASourceSupertype * ( ) instanceof TypeWebView
58
58
}
59
59
60
- /** Gets an access to this WebView. */
61
- Expr getAnAccess ( ) {
62
- exists ( ThisAccess t | t .getType ( ) = this and result = t |
63
- t .isOwnInstanceAccess ( ) or
64
- t .isEnclosingInstanceAccess ( this )
60
+ /** Gets an access to this WebView as a data flow node. */
61
+ DataFlow:: Node getAnAccess ( ) {
62
+ exists ( DataFlow:: InstanceAccessNode t | t .getType ( ) = this and result = t |
63
+ t .isOwnInstanceAccess ( ) or t .getInstanceAccess ( ) .isEnclosingInstanceAccess ( this )
65
64
)
66
65
or
67
- result = this .( Variable ) .getAnAccess ( )
66
+ result = DataFlow :: exprNode ( this .( Variable ) .getAnAccess ( ) )
68
67
}
69
68
}
70
69
@@ -80,20 +79,25 @@ private Expr getUnderlyingExpr(Expr e) {
80
79
* Holds if a `WebViewLoadUrlMethod` is called on `webview`
81
80
* with `urlArg` as its first argument.
82
81
*/
83
- private predicate webViewLoadUrl ( Argument urlArg , Expr webview ) {
82
+ private predicate webViewLoadUrl ( Argument urlArg , DataFlow :: Node webview ) {
84
83
exists ( MethodAccess loadUrl |
85
84
loadUrl .getArgument ( 0 ) = urlArg and
86
85
loadUrl .getMethod ( ) instanceof WebViewLoadUrlMethod
87
86
|
88
- getUnderlyingExpr ( loadUrl .getQualifier ( ) ) = webview
87
+ webview = DataFlow:: exprNode ( getUnderlyingExpr ( loadUrl .getQualifier ( ) ) )
88
+ or
89
+ webview = DataFlow:: getInstanceArgument ( loadUrl )
89
90
or
90
91
// `webview` is received as a parameter of an event method in a custom `WebViewClient`,
91
92
// so we need to find WebViews that use that specific `WebViewClient`.
92
93
exists ( WebViewClientEventMethod eventMethod , MethodAccess setWebClient |
93
94
setWebClient .getMethod ( ) instanceof WebViewSetWebViewClientMethod and
94
95
setWebClient .getArgument ( 0 ) .getType ( ) = eventMethod .getDeclaringType ( ) and
95
- getUnderlyingExpr ( setWebClient .getQualifier ( ) ) = webview and
96
96
getUnderlyingExpr ( loadUrl .getQualifier ( ) ) = eventMethod .getWebViewParameter ( ) .getAnAccess ( )
97
+ |
98
+ webview = DataFlow:: exprNode ( getUnderlyingExpr ( setWebClient .getQualifier ( ) ) )
99
+ or
100
+ webview = DataFlow:: getInstanceArgument ( setWebClient )
97
101
)
98
102
)
99
103
}
0 commit comments