Skip to content

Commit a5d1325

Browse files
committed
add support for the change-case library
1 parent db4c8df commit a5d1325

File tree

4 files changed

+27
-0
lines changed

4 files changed

+27
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
lgtm,codescanning
2+
* The dataflow libraries now model dataflow through case changing libraries.
3+
Affected packages are
4+
[change-case](https://www.npmjs.com/package/change-case)

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,3 +103,18 @@ private class LibraryFormatter extends PrintfStyleCall {
103103

104104
override predicate returnsFormatted() { returns = true }
105105
}
106+
107+
/**
108+
* A taint step through a case changing function.
109+
*/
110+
private class CaseChangingStep extends TaintTracking::SharedTaintStep {
111+
override predicate step(DataFlow::Node pred, DataFlow::Node succ) {
112+
exists(DataFlow::SourceNode callee, DataFlow::CallNode call |
113+
callee = DataFlow::moduleMember("change-case", _)
114+
|
115+
call = callee.getACall() and
116+
pred = call.getArgument(0) and
117+
succ = call
118+
)
119+
}
120+
}

javascript/ql/test/library-tests/TaintTracking/BasicTaintTracking.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ typeInferenceMismatch
3535
| callbacks.js:53:23:53:30 | source() | callbacks.js:58:10:58:10 | x |
3636
| capture-flow.js:9:11:9:18 | source() | capture-flow.js:14:10:14:16 | outer() |
3737
| captured-sanitizer.js:25:3:25:10 | source() | captured-sanitizer.js:15:10:15:10 | x |
38+
| case.js:2:16:2:23 | source() | case.js:5:8:5:35 | changeC ... source) |
3839
| closure.js:6:15:6:22 | source() | closure.js:8:8:8:31 | string. ... (taint) |
3940
| closure.js:6:15:6:22 | source() | closure.js:9:8:9:25 | string.trim(taint) |
4041
| closure.js:6:15:6:22 | source() | closure.js:10:8:10:33 | string. ... nt, 50) |
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
function foo() {
2+
let source = source();
3+
4+
const changeCase = require("change-case");
5+
sink(changeCase.camelCase(source)); // NOT OK
6+
7+
}

0 commit comments

Comments
 (0)