split fuzzy read/writes on collections into 2 pseudo-properties

This commit is contained in:
Erik Krogh Kristensen
2020-04-01 14:25:41 +02:00
parent b1bf7f9f3d
commit 957b60f84b
4 changed files with 35 additions and 20 deletions

View File

@@ -11,7 +11,9 @@ dataFlow
| tst.js:2:16:2:23 | source() | tst.js:46:7:46:7 | e |
| tst.js:2:16:2:23 | source() | tst.js:50:10:50:10 | e |
| tst.js:2:16:2:23 | source() | tst.js:53:8:53:21 | map.get("key") |
| tst.js:2:16:2:23 | source() | tst.js:55:8:55:28 | map.get ... nKey()) |
| tst.js:2:16:2:23 | source() | tst.js:59:8:59:22 | map2.get("foo") |
| tst.js:2:16:2:23 | source() | tst.js:64:8:64:26 | map3.get(unknown()) |
| tst.js:2:16:2:23 | source() | tst.js:69:8:69:26 | map3.get(unknown()) |
typeTracking
| tst.js:2:16:2:23 | source() | tst.js:2:16:2:23 | source() |
| tst.js:2:16:2:23 | source() | tst.js:6:14:6:14 | e |

View File

@@ -12,7 +12,7 @@
})
var map = new Map();
map.set("key", source); map.set(unknownKey(), source);
map.set("key", source);
map.forEach(v => {
sink(v);
});
@@ -52,5 +52,19 @@
sink(map.get("key")); // NOT OK.
sink(map.get("nonExistingKey")); // OK.
sink(map.get(unknownKey())); // NOT OK (for data-flow). OK for type-tracking.
// unknown write, known read
var map2 = new map();
map2.set(unknown(), source);
sink(map2.get("foo")); // NOT OK (for data-flow). OK for type-tracking.
// unknown write, unknown read
var map3 = new map();
map3.set(unknown(), source);
sink(map3.get(unknown())); // NOT OK (for data-flow). OK for type-tracking.
// known write, unknown read
var map4 = new map();
map4.set("foo", source);
sink(map3.get(unknown())); // NOT OK (for data-flow). OK for type-tracking.
})();