Skip to content

Commit 1a5585c

Browse files
author
Max Schaefer
authored
Merge pull request #21 from esben-semmle/js/urilibraries-members
JS: refactor UriLibraries.qll models to use `DataFlow::moduleMember`
2 parents 6fc36f6 + 3b00b9b commit 1a5585c

File tree

15 files changed

+88
-24
lines changed

15 files changed

+88
-24
lines changed

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

Lines changed: 56 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,17 @@ module uridashjs {
9696
/**
9797
* Gets a data flow source node for the uridashjs library.
9898
*/
99-
DataFlow::SourceNode uridashjs() {
99+
deprecated DataFlow::SourceNode uridashjs() {
100100
result = DataFlow::moduleImport("uri-js")
101101
}
102102

103+
/**
104+
* Gets a data flow source node for member `name` of the uridashjs library.
105+
*/
106+
DataFlow::SourceNode uridashjsMember(string name) {
107+
result = DataFlow::moduleMember("uri-js", name)
108+
}
109+
103110
/**
104111
* A taint step in the urijs library.
105112
*/
@@ -113,7 +120,7 @@ module uridashjs {
113120
name = "serialize" or
114121
name = "resolve" or
115122
name = "normalize" |
116-
this = uridashjs().getAMemberCall(name) and
123+
this = uridashjsMember(name).getACall() and
117124
src = getAnArgument()
118125
)
119126
}
@@ -133,10 +140,17 @@ module punycode {
133140
/**
134141
* Gets a data flow source node for the punycode library.
135142
*/
136-
DataFlow::SourceNode punycode() {
143+
deprecated DataFlow::SourceNode punycode() {
137144
result = DataFlow::moduleImport("punycode")
138145
}
139146

147+
/**
148+
* Gets a data flow source node for member `name` of the punycode library.
149+
*/
150+
DataFlow::SourceNode punycodeMember(string name) {
151+
result = DataFlow::moduleMember("punycode", name)
152+
}
153+
140154
/**
141155
* A taint step in the punycode library.
142156
*/
@@ -150,7 +164,7 @@ module punycode {
150164
name = "encode" or
151165
name = "toUnicode" or
152166
name = "toASCII" |
153-
this = punycode().getAMemberCall(name) and
167+
this = punycodeMember(name).getACall() and
154168
src = getAnArgument()
155169
)
156170
}
@@ -216,10 +230,17 @@ module querystringify {
216230
/**
217231
* Gets a data flow source node for the querystringify library.
218232
*/
219-
DataFlow::SourceNode querystringify() {
233+
deprecated DataFlow::SourceNode querystringify() {
220234
result = DataFlow::moduleImport("querystringify")
221235
}
222236

237+
/**
238+
* Gets a data flow source node for member `name` of the querystringify library.
239+
*/
240+
DataFlow::SourceNode querystringifyMember(string name) {
241+
result = DataFlow::moduleMember("querystringify", name)
242+
}
243+
223244
/**
224245
* A taint step in the querystringify library.
225246
*/
@@ -231,7 +252,7 @@ module querystringify {
231252
exists (string name |
232253
name = "parse" or
233254
name = "stringify" |
234-
this = querystringify().getAMemberCall(name) and
255+
this = querystringifyMember(name).getACall() and
235256
src = getAnArgument()
236257
)
237258
}
@@ -251,10 +272,18 @@ module querydashstring {
251272
/**
252273
* Gets a data flow source node for the query-string library.
253274
*/
254-
DataFlow::SourceNode querydashstring() {
275+
deprecated DataFlow::SourceNode querydashstring() {
255276
result = DataFlow::moduleImport("query-string")
256277
}
257278

279+
280+
/**
281+
* Gets a data flow source node for member `name` of the query-string library.
282+
*/
283+
DataFlow::SourceNode querydashstringMember(string name) {
284+
result = DataFlow::moduleMember("query-string", name)
285+
}
286+
258287
/**
259288
* A taint step in the query-string library.
260289
*/
@@ -268,7 +297,7 @@ module querydashstring {
268297
name = "extract" or
269298
name = "parseUrl" or
270299
name = "stringify" |
271-
this = querydashstring().getAMemberCall(name) and
300+
this = querydashstringMember(name).getACall() and
272301
src = getAnArgument()
273302
)
274303
}
@@ -288,10 +317,18 @@ module url {
288317
/**
289318
* Gets a data flow source node for the url library.
290319
*/
291-
DataFlow::SourceNode url() {
320+
deprecated DataFlow::SourceNode url() {
292321
result = DataFlow::moduleImport("url")
293322
}
294323

324+
325+
/**
326+
* Gets a data flow source node for member `name` of the url library.
327+
*/
328+
DataFlow::SourceNode urlMember(string name) {
329+
result = DataFlow::moduleMember("url", name)
330+
}
331+
295332
/**
296333
* A taint step in the url library.
297334
*/
@@ -304,7 +341,7 @@ module url {
304341
name = "parse" or
305342
name = "format" or
306343
name = "resolve" |
307-
this = url().getAMemberCall(name) and
344+
this = urlMember(name).getACall() and
308345
src = getAnArgument()
309346
)
310347
}
@@ -324,10 +361,17 @@ module querystring {
324361
/**
325362
* Gets a data flow source node for the querystring library.
326363
*/
327-
DataFlow::SourceNode querystring() {
364+
deprecated DataFlow::SourceNode querystring() {
328365
result = DataFlow::moduleImport("querystring")
329366
}
330367

368+
/**
369+
* Gets a data flow source node for member `name` of the querystring library.
370+
*/
371+
DataFlow::SourceNode querystringMember(string name) {
372+
result = DataFlow::moduleMember("querystring", name)
373+
}
374+
331375
/**
332376
* A taint step in the querystring library.
333377
*/
@@ -341,7 +385,7 @@ module querystring {
341385
name = "unescape" or
342386
name = "parse" or
343387
name = "stringify" |
344-
this = querystring().getAMemberCall(name) and
388+
this = querystringMember(name).getACall() and
345389
src = getAnArgument()
346390
)
347391
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
| query-string.js:5:5:5:26 | querySt ... ract(x) | query-string.js:5:25:5:25 | x | query-string.js:5:5:5:26 | querySt ... ract(x) |
77
| query-string.js:7:5:7:27 | querySt ... eUrl(x) | query-string.js:7:26:7:26 | x | query-string.js:7:5:7:27 | querySt ... eUrl(x) |
88
| query-string.js:9:5:9:28 | querySt ... gify(x) | query-string.js:9:27:9:27 | x | query-string.js:9:5:9:28 | querySt ... gify(x) |
9+
| query-string_import.js:3:1:3:8 | parse(x) | query-string_import.js:3:7:3:7 | x | query-string_import.js:3:1:3:8 | parse(x) |
910
| querystring.js:3:9:3:29 | queryst ... cape(x) | querystring.js:3:28:3:28 | x | querystring.js:3:9:3:29 | queryst ... cape(x) |
1011
| querystring.js:5:5:5:24 | querystring.parse(x) | querystring.js:5:23:5:23 | x | querystring.js:5:5:5:24 | querystring.parse(x) |
1112
| querystring.js:7:5:7:28 | queryst ... gify(x) | querystring.js:7:27:7:27 | x | querystring.js:7:5:7:28 | queryst ... gify(x) |
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
| punycode.js:1:16:1:34 | require("punycode") |
1+
| punycode.js:3:9:3:23 | punycode.decode |
2+
| punycode.js:5:5:5:19 | punycode.encode |
3+
| punycode.js:7:5:7:22 | punycode.toUnicode |
4+
| punycode.js:9:5:9:20 | punycode.toASCII |
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import javascript
22

33
from DataFlow::Node n
4-
where n = punycode::punycode()
4+
where n = punycode::punycodeMember(_)
55
select n
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { parse } from "query-string";
2+
3+
parse(x);
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1-
| query-string.js:1:19:1:41 | require ... tring") |
1+
| query-string.js:3:9:3:25 | queryString.parse |
2+
| query-string.js:5:5:5:23 | queryString.extract |
3+
| query-string.js:7:5:7:24 | queryString.parseUrl |
4+
| query-string.js:9:5:9:25 | querySt ... ringify |
5+
| query-string_import.js:1:10:1:14 | parse |
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import javascript
22

33
from DataFlow::Node n
4-
where n = querydashstring::querydashstring()
4+
where n = querydashstring::querydashstringMember(_)
55
select n
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
| querystring.js:1:19:1:40 | require ... tring") |
1+
| querystring.js:3:9:3:26 | querystring.escape |
2+
| querystring.js:5:5:5:21 | querystring.parse |
3+
| querystring.js:7:5:7:25 | queryst ... ringify |
4+
| querystring.js:9:5:9:24 | querystring.unescape |
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import javascript
22

33
from DataFlow::Node n
4-
where n = querystring::querystring()
4+
where n = querystring::querystringMember(_)
55
select n
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
| querystringify.js:1:22:1:46 | require ... ngify") |
1+
| querystringify.js:3:9:3:28 | querystringify.parse |
2+
| querystringify.js:5:5:5:28 | queryst ... ringify |

0 commit comments

Comments
 (0)