Skip to content

Commit 609b16b

Browse files
committed
implement Immutable OrderedMap
1 parent 2e7bf9b commit 609b16b

File tree

3 files changed

+8
-3
lines changed

3 files changed

+8
-3
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ private module Immutable {
3535
*/
3636
API::Node immutableCollection() {
3737
// keep this list in sync with the constructors defined in `storeStep`.
38-
result = immutableImport().getMember(["Map", "List", "fromJS"]).getReturn()
38+
result = immutableImport().getMember(["Map", "OrderedMap", "List", "fromJS"]).getReturn()
3939
or
4040
result = immutableCollection().getMember(["set", "map", "filter", "push"]).getReturn()
4141
}
@@ -46,7 +46,7 @@ private module Immutable {
4646
DataFlow::SourceNode storeStep(DataFlow::Node pred, string prop) {
4747
// Immutable.Map() and Immutable.fromJS().
4848
exists(DataFlow::CallNode call |
49-
call = immutableImport().getMember(["Map", "fromJS"]).getACall()
49+
call = immutableImport().getMember(["Map", "OrderedMap", "fromJS"]).getACall()
5050
|
5151
pred = call.getOptionArgument(0, prop) and
5252
result = call

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
var obj = { a: source("a"), b: source("b1") };
22
sink(obj["a"]); // NOT OK
33

4-
const { Map, fromJS, List } = require('immutable');
4+
const { Map, fromJS, List, OrderedMap } = require('immutable');
55

66
const map1 = Map(obj);
77

@@ -31,3 +31,7 @@ List(["safe"]).map(x => source()).forEach(x => sink(x)); // NOT OK
3131
List([source()]).map(x => x).filter(x => true).toList().forEach(x => sink(x)); // NOT OK
3232

3333
List(["safe"]).push(source()).forEach(x => sink(x)); // NOT OK
34+
35+
36+
const map4 = OrderedMap({}).set("f", source());
37+
sink(map4.get("f")); // 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
@@ -10,3 +10,4 @@
1010
| immutable.js:29:25:29:32 | source() | immutable.js:29:53:29:53 | x |
1111
| immutable.js:31:7:31:14 | source() | immutable.js:31:75:31:75 | x |
1212
| immutable.js:33:21:33:28 | source() | immutable.js:33:49:33:49 | x |
13+
| immutable.js:36:38:36:45 | source() | immutable.js:37:6:37:18 | map4.get("f") |

0 commit comments

Comments
 (0)