@@ -26,8 +26,8 @@ abstract class UrlResourceSink extends DataFlow::Node {
26
26
private class CrossOriginUrlResourceSink extends JavaScriptEnabledUrlResourceSink {
27
27
CrossOriginUrlResourceSink ( ) {
28
28
exists ( WebViewRef webview |
29
- webViewLoadUrl ( this .asExpr ( ) , webview . getAnAccess ( ) ) and
30
- isAllowFileAccessEnabled ( webview . getAnAccess ( ) )
29
+ webViewLoadUrl ( this .asExpr ( ) , webview ) and
30
+ isAllowFileAccessEnabled ( webview )
31
31
)
32
32
}
33
33
@@ -42,8 +42,8 @@ private class CrossOriginUrlResourceSink extends JavaScriptEnabledUrlResourceSin
42
42
private class JavaScriptEnabledUrlResourceSink extends UrlResourceSink {
43
43
JavaScriptEnabledUrlResourceSink ( ) {
44
44
exists ( WebViewRef webview |
45
- webViewLoadUrl ( this .asExpr ( ) , webview . getAnAccess ( ) ) and
46
- isJSEnabled ( webview . getAnAccess ( ) )
45
+ webViewLoadUrl ( this .asExpr ( ) , webview ) and
46
+ isJSEnabled ( webview )
47
47
)
48
48
}
49
49
@@ -67,15 +67,15 @@ private class WebViewRef extends Element {
67
67
}
68
68
69
69
/**
70
- * Holds if a `WebViewLoadUrlMethod` is called on `webview`
70
+ * Holds if a `WebViewLoadUrlMethod` is called on an access of `webview`
71
71
* with `urlArg` as its first argument.
72
72
*/
73
- private predicate webViewLoadUrl ( Argument urlArg , DataFlow :: Node webview ) {
73
+ private predicate webViewLoadUrl ( Argument urlArg , WebViewRef webview ) {
74
74
exists ( MethodAccess loadUrl |
75
75
loadUrl .getArgument ( 0 ) = urlArg and
76
76
loadUrl .getMethod ( ) instanceof WebViewLoadUrlMethod
77
77
|
78
- webview = DataFlow:: getInstanceArgument ( loadUrl )
78
+ webview . getAnAccess ( ) = DataFlow:: getInstanceArgument ( loadUrl )
79
79
or
80
80
// `webview` is received as a parameter of an event method in a custom `WebViewClient`,
81
81
// so we need to find `WebViews` that use that specific `WebViewClient`.
@@ -84,37 +84,37 @@ private predicate webViewLoadUrl(Argument urlArg, DataFlow::Node webview) {
84
84
setWebClient .getArgument ( 0 ) .getType ( ) = eventMethod .getDeclaringType ( ) and
85
85
loadUrl .getQualifier ( ) = eventMethod .getWebViewParameter ( ) .getAnAccess ( )
86
86
|
87
- webview = DataFlow:: getInstanceArgument ( setWebClient )
87
+ webview . getAnAccess ( ) = DataFlow:: getInstanceArgument ( setWebClient )
88
88
)
89
89
)
90
90
}
91
91
92
92
/**
93
- * Holds if `webview` is a `WebView` and its option `setJavascriptEnabled`
93
+ * Holds if `webview`'s option `setJavascriptEnabled`
94
94
* has been set to `true` via a `WebSettings` object obtained from it.
95
95
*/
96
- private predicate isJSEnabled ( DataFlow:: Node webview ) {
97
- webview .getType ( ) .( RefType ) .getASupertype * ( ) instanceof TypeWebView and
96
+ private predicate isJSEnabled ( WebViewRef webview ) {
98
97
exists ( MethodAccess allowJs , MethodAccess settings |
99
98
allowJs .getMethod ( ) instanceof AllowJavaScriptMethod and
100
99
allowJs .getArgument ( 0 ) .( CompileTimeConstantExpr ) .getBooleanValue ( ) = true and
101
100
settings .getMethod ( ) instanceof WebViewGetSettingsMethod and
102
101
DataFlow:: localExprFlow ( settings , allowJs .getQualifier ( ) ) and
103
- DataFlow:: localFlow ( webview , DataFlow:: getInstanceArgument ( settings ) )
102
+ DataFlow:: localFlow ( webview . getAnAccess ( ) , DataFlow:: getInstanceArgument ( settings ) )
104
103
)
105
104
}
106
105
107
106
/**
108
- * Holds if `webview` is a `WebView` and its options `setAllowUniversalAccessFromFileURLs` or
109
- * `setAllowFileAccessFromFileURLs` have been set to `true`.
107
+ * Holds if `webview`'s options `setAllowUniversalAccessFromFileURLs` or
108
+ * `setAllowFileAccessFromFileURLs` have been set to `true` via a `WebSettings` object
109
+ * obtained from it.
110
110
*/
111
- private predicate isAllowFileAccessEnabled ( DataFlow :: Node webview ) {
111
+ private predicate isAllowFileAccessEnabled ( WebViewRef webview ) {
112
112
exists ( MethodAccess allowFileAccess , MethodAccess settings |
113
113
allowFileAccess .getMethod ( ) instanceof CrossOriginAccessMethod and
114
114
allowFileAccess .getArgument ( 0 ) .( CompileTimeConstantExpr ) .getBooleanValue ( ) = true and
115
115
settings .getMethod ( ) instanceof WebViewGetSettingsMethod and
116
116
DataFlow:: localExprFlow ( settings , allowFileAccess .getQualifier ( ) ) and
117
- DataFlow:: localFlow ( webview , DataFlow:: getInstanceArgument ( settings ) )
117
+ DataFlow:: localFlow ( webview . getAnAccess ( ) , DataFlow:: getInstanceArgument ( settings ) )
118
118
)
119
119
}
120
120
0 commit comments