Skip to content

Commit 95e20a0

Browse files
committed
JS: Port IncompleteUrlSchemeCheck test
1 parent 563471d commit 95e20a0

File tree

3 files changed

+25
-18
lines changed

3 files changed

+25
-18
lines changed

javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.expected

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#select
12
| IncompleteUrlSchemeCheck.js:5:9:5:35 | u.start ... ript:") | This check does not consider data: and vbscript:. |
23
| IncompleteUrlSchemeCheck.js:16:9:16:39 | badProt ... otocol) | This check does not consider vbscript:. |
34
| IncompleteUrlSchemeCheck.js:23:9:23:43 | badProt ... scheme) | This check does not consider vbscript:. |
@@ -13,3 +14,8 @@
1314
| IncompleteUrlSchemeCheck.js:104:6:104:39 | /^(java ... scheme) | This check does not consider vbscript:. |
1415
| IncompleteUrlSchemeCheck.js:110:12:112:29 | url // ... :/, "") | This check does not consider vbscript:. |
1516
| IncompleteUrlSchemeCheck.js:124:11:124:34 | url.rep ... :/, "") | This check does not consider vbscript:. |
17+
testFailures
18+
| IncompleteUrlSchemeCheck.js:94:10:94:15 | This check does not consider vbscript:. | Unexpected result: Alert |
19+
| IncompleteUrlSchemeCheck.js:95:25:95:34 | // $ Alert | Missing result: Alert |
20+
| IncompleteUrlSchemeCheck.js:110:12:112:29 | This check does not consider vbscript:. | Unexpected result: Alert |
21+
| IncompleteUrlSchemeCheck.js:110:17:110:26 | // $ Alert | Missing result: Alert |

javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.js

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as dummy from 'dummy';
22

33
function sanitizeUrl(url) {
44
let u = decodeURI(url).trim().toLowerCase();
5-
if (u.startsWith("javascript:")) // NOT OK
5+
if (u.startsWith("javascript:")) // $ Alert
66
return "about:blank";
77
return url;
88
}
@@ -13,28 +13,28 @@ let badProtocolsGood = ['javascript:', 'data:', 'vbscript:'];
1313

1414
function test2(url) {
1515
let protocol = new URL(url).protocol;
16-
if (badProtocols.includes(protocol)) // NOT OK
16+
if (badProtocols.includes(protocol)) // $ Alert
1717
return "about:blank";
1818
return url;
1919
}
2020

2121
function test3(url) {
2222
let scheme = goog.uri.utils.getScheme(url);
23-
if (badProtocolNoColon.includes(scheme)) // NOT OK
23+
if (badProtocolNoColon.includes(scheme)) // $ Alert
2424
return "about:blank";
2525
return url;
2626
}
2727

2828
function test4(url) {
2929
let scheme = url.split(':')[0];
30-
if (badProtocolNoColon.includes(scheme)) // NOT OK
30+
if (badProtocolNoColon.includes(scheme)) // $ Alert
3131
return "about:blank";
3232
return url;
3333
}
3434

3535
function test5(url) {
3636
let scheme = url.split(':')[0];
37-
if (scheme === "javascript") // NOT OK
37+
if (scheme === "javascript") // $ Alert
3838
return "about:blank";
3939
return url;
4040
}
@@ -48,51 +48,51 @@ function test6(url) {
4848

4949
function test7(url) {
5050
let scheme = url.split(/:/)[0];
51-
if (scheme === "javascript") // NOT OK
51+
if (scheme === "javascript") // $ Alert
5252
return "about:blank";
5353
return url;
5454
}
5555

5656
function test8(url) {
5757
let scheme = goog.uri.utils.getScheme(url);
58-
if ("javascript|data".split("|").indexOf(scheme) !== -1) // NOT OK
58+
if ("javascript|data".split("|").indexOf(scheme) !== -1) // $ Alert
5959
return "about:blank";
6060
return url;
6161
}
6262

6363
function test9(url) {
6464
let scheme = goog.uri.utils.getScheme(url);
65-
if ("javascript" === scheme || "data" === scheme) // NOT OK
65+
if ("javascript" === scheme || "data" === scheme) // $ Alert
6666
return "about:blank";
6767
return url;
6868
}
6969

7070
function test10(url) {
7171
let scheme = goog.uri.utils.getScheme(url);
72-
if (/^(javascript|data)$/.exec(scheme) !== null) // NOT OK
72+
if (/^(javascript|data)$/.exec(scheme) !== null) // $ Alert
7373
return "about:blank";
7474
return url;
7575
}
7676

7777
function test11(url) {
7878
let scheme = goog.uri.utils.getScheme(url);
79-
if (/^(javascript|data)$/.exec(scheme) === null) // NOT OK
79+
if (/^(javascript|data)$/.exec(scheme) === null) // $ Alert
8080
return url;
8181
return "about:blank";
8282
}
8383

8484

8585
function test12(url) {
8686
let scheme = goog.uri.utils.getScheme(url);
87-
if (!/^(javascript|data)$/.exec(scheme)) // NOT OK
87+
if (!/^(javascript|data)$/.exec(scheme)) // $ Alert
8888
return url;
8989
return "about:blank";
9090
}
9191

9292
function test13(url) {
9393
let scheme = goog.uri.utils.getScheme(url);
9494
switch (scheme) {
95-
case "javascript": // NOT OK
95+
case "javascript": // $ Alert
9696
case "data":
9797
return "about:blank";
9898
default:
@@ -101,13 +101,13 @@ function test13(url) {
101101
}
102102
function test14(url) {
103103
let scheme = goog.uri.utils.getScheme(url);
104-
if (/^(javascript|data)$/.exec(scheme)) // NOT OK
104+
if (/^(javascript|data)$/.exec(scheme)) // $ Alert
105105
return "about:blank";
106106
return url;
107107
}
108108

109109
function chain1(url) {
110-
return url // NOT OK
110+
return url // $ Alert
111111
.replace(/javascript:/, "")
112112
.replace(/data:/, "");
113113
}
@@ -121,10 +121,10 @@ function chain2(url) {
121121

122122
function chain3(url) {
123123
url = url.replace(/javascript:/, "")
124-
url = url.replace(/data:/, ""); // NOT OK
124+
url = url.replace(/data:/, ""); // $ Alert
125125
return url;
126126
}
127127

128128
function chain4(url) {
129-
return url.replace(/(javascript|data):/, ""); // NOT OK - but not flagged [INCONSISTENCY]
130-
}
129+
return url.replace(/(javascript|data):/, ""); // $ MISSING: Alert
130+
}
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
Security/CWE-020/IncompleteUrlSchemeCheck.ql
1+
query: Security/CWE-020/IncompleteUrlSchemeCheck.ql
2+
postprocess: utils/test/InlineExpectationsTestQuery.ql

0 commit comments

Comments
 (0)