Skip to content

Commit b1f092f

Browse files
committed
add support for map.set in Immutable model
1 parent b77dd54 commit b1f092f

3 files changed

Lines changed: 10 additions & 2 deletions

File tree

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,12 @@ private module Immutable {
5050
pred = call.getOptionArgument(0, key) and
5151
result = call
5252
)
53-
// TODO: map set.
53+
or
54+
exists(DataFlow::CallNode call | call = immutableMap().getMember("set").getACall() |
55+
prop = mapValue(call.getArgument(0)) and
56+
pred = call.getArgument(1) and
57+
result = call
58+
)
5459
}
5560

5661
/**

javascript/ql/test/library-tests/frameworks/Immutable/immutable.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,6 @@ sink(map1.get("a")); // NOT OK
1212
sink(map2.get("a")); // NOT OK
1313
sink(map2.get("b")); // OK - but still flagged [INCONSISTENCY]
1414

15-
15+
const map3 = map2.set("d", source("d"));
16+
sink(map1.get("d")); // OK
17+
sink(map3.get("d")); // NOT OK

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
| immutable.js:1:16:1:26 | source("a") | immutable.js:12:6:12:18 | map2.get("a") |
44
| immutable.js:1:32:1:43 | source("b1") | immutable.js:8:6:8:18 | map1.get("b") |
55
| immutable.js:1:32:1:43 | source("b1") | immutable.js:13:6:13:18 | map2.get("b") |
6+
| immutable.js:15:28:15:38 | source("d") | immutable.js:17:6:17:18 | map3.get("d") |

0 commit comments

Comments
 (0)