Skip to content

Commit 8f8621f

Browse files
authored
Merge pull request #8022 from asgerf/js/url-parse-qs
Approved by esbena
2 parents 0bf6c83 + 8b55a24 commit 8f8621f

File tree

4 files changed

+14
-2
lines changed

4 files changed

+14
-2
lines changed

javascript/ql/lib/semmle/javascript/frameworks/UriLibraries.qll

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,12 @@ module querystringify {
175175
* Gets a data flow source node for member `name` of the querystringify library.
176176
*/
177177
DataFlow::SourceNode querystringifyMember(string name) {
178-
result = DataFlow::moduleMember("querystringify", name)
178+
result = querystringify().getMember(name).getAnImmediateUse()
179+
}
180+
181+
/** Gets an API node referring to the `querystringify` module. */
182+
private API::Node querystringify() {
183+
result = [API::moduleImport("querystringify"), API::moduleImport("url-parse").getMember("qs")]
179184
}
180185

181186
/**
@@ -184,7 +189,7 @@ module querystringify {
184189
private class Step extends TaintTracking::SharedTaintStep {
185190
override predicate uriStep(DataFlow::Node pred, DataFlow::Node succ) {
186191
exists(DataFlow::CallNode call |
187-
call = querystringifyMember(["parse", "stringify"]).getACall() and
192+
call = querystringify().getMember(["parse", "stringify"]).getACall() and
188193
pred = call.getAnArgument() and
189194
succ = call
190195
)

javascript/ql/test/library-tests/frameworks/UriLibraries/UriLibraryStep.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
| querystring.js:9:26:9:26 | x | querystring.js:9:5:9:27 | queryst ... cape(x) |
4646
| querystringify.js:3:30:3:30 | x | querystringify.js:3:9:3:31 | queryst ... arse(x) |
4747
| querystringify.js:5:30:5:30 | x | querystringify.js:5:5:5:31 | queryst ... gify(x) |
48+
| querystringify.js:8:23:8:23 | x | querystringify.js:8:1:8:24 | queryst ... arse(x) |
4849
| uri-js.js:3:19:3:19 | x | uri-js.js:3:9:3:20 | URI.parse(x) |
4950
| uri-js.js:5:19:5:19 | x | uri-js.js:5:5:5:20 | URI.serialize(x) |
5051
| uri-js.js:7:17:7:17 | x | uri-js.js:7:5:7:18 | URI.resolve(x) |

javascript/ql/test/library-tests/frameworks/UriLibraries/querystringify.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,6 @@ var querystringify = require("querystringify");
33
var r = querystringify.parse(x);
44

55
r = querystringify.stringify(x);
6+
7+
var querystringify2 = require('url-parse').qs;
8+
querystringify2.parse(x);

javascript/ql/test/library-tests/frameworks/UriLibraries/tests.expected

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ querystring
1717
querystringify
1818
| querystringify.js:3:9:3:28 | querystringify.parse |
1919
| querystringify.js:5:5:5:28 | queryst ... ringify |
20+
| querystringify.js:8:1:8:21 | queryst ... 2.parse |
2021
uridashjs
2122
| uri-js.js:3:9:3:17 | URI.parse |
2223
| uri-js.js:5:5:5:17 | URI.serialize |
@@ -76,6 +77,7 @@ uriLibraryStep
7677
| querystring.js:9:26:9:26 | x | querystring.js:9:5:9:27 | queryst ... cape(x) |
7778
| querystringify.js:3:30:3:30 | x | querystringify.js:3:9:3:31 | queryst ... arse(x) |
7879
| querystringify.js:5:30:5:30 | x | querystringify.js:5:5:5:31 | queryst ... gify(x) |
80+
| querystringify.js:8:23:8:23 | x | querystringify.js:8:1:8:24 | queryst ... arse(x) |
7981
| uri-js.js:3:19:3:19 | x | uri-js.js:3:9:3:20 | URI.parse(x) |
8082
| uri-js.js:5:19:5:19 | x | uri-js.js:5:5:5:20 | URI.serialize(x) |
8183
| uri-js.js:7:17:7:17 | x | uri-js.js:7:5:7:18 | URI.resolve(x) |
@@ -101,4 +103,5 @@ url
101103
| url.js:5:5:5:14 | url.format |
102104
| url.js:7:5:7:15 | url.resolve |
103105
urlParse
106+
| querystringify.js:7:23:7:42 | require('url-parse') |
104107
| url-parse.js:1:13:1:32 | require('url-parse') |

0 commit comments

Comments
 (0)