Skip to content

Commit a447645

Browse files
asger-semmleasgerf
authored andcommitted
JS: Add test with typeof on value
1 parent bd9405a commit a447645

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed

javascript/ql/test/query-tests/Security/CWE-400/PrototypePollutionUtility.expected

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,42 @@ nodes
743743
| PrototypePollutionUtility/tests.js:293:37:293:44 | src[key] |
744744
| PrototypePollutionUtility/tests.js:293:41:293:43 | key |
745745
| PrototypePollutionUtility/tests.js:293:41:293:43 | key |
746+
| PrototypePollutionUtility/tests.js:301:27:301:29 | dst |
747+
| PrototypePollutionUtility/tests.js:301:27:301:29 | dst |
748+
| PrototypePollutionUtility/tests.js:301:32:301:34 | src |
749+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key |
750+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key |
751+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key |
752+
| PrototypePollutionUtility/tests.js:304:17:304:32 | value |
753+
| PrototypePollutionUtility/tests.js:304:17:304:32 | value |
754+
| PrototypePollutionUtility/tests.js:304:17:304:32 | value |
755+
| PrototypePollutionUtility/tests.js:304:25:304:27 | src |
756+
| PrototypePollutionUtility/tests.js:304:25:304:32 | src[key] |
757+
| PrototypePollutionUtility/tests.js:304:25:304:32 | src[key] |
758+
| PrototypePollutionUtility/tests.js:304:25:304:32 | src[key] |
759+
| PrototypePollutionUtility/tests.js:304:25:304:32 | src[key] |
760+
| PrototypePollutionUtility/tests.js:304:29:304:31 | key |
761+
| PrototypePollutionUtility/tests.js:304:29:304:31 | key |
762+
| PrototypePollutionUtility/tests.js:306:34:306:36 | dst |
763+
| PrototypePollutionUtility/tests.js:306:34:306:36 | dst |
764+
| PrototypePollutionUtility/tests.js:306:34:306:41 | dst[key] |
765+
| PrototypePollutionUtility/tests.js:306:34:306:41 | dst[key] |
766+
| PrototypePollutionUtility/tests.js:306:34:306:41 | dst[key] |
767+
| PrototypePollutionUtility/tests.js:306:34:306:41 | dst[key] |
768+
| PrototypePollutionUtility/tests.js:306:38:306:40 | key |
769+
| PrototypePollutionUtility/tests.js:306:38:306:40 | key |
770+
| PrototypePollutionUtility/tests.js:306:44:306:48 | value |
771+
| PrototypePollutionUtility/tests.js:306:44:306:48 | value |
772+
| PrototypePollutionUtility/tests.js:308:17:308:19 | dst |
773+
| PrototypePollutionUtility/tests.js:308:17:308:19 | dst |
774+
| PrototypePollutionUtility/tests.js:308:17:308:19 | dst |
775+
| PrototypePollutionUtility/tests.js:308:21:308:23 | key |
776+
| PrototypePollutionUtility/tests.js:308:21:308:23 | key |
777+
| PrototypePollutionUtility/tests.js:308:21:308:23 | key |
778+
| PrototypePollutionUtility/tests.js:308:28:308:32 | value |
779+
| PrototypePollutionUtility/tests.js:308:28:308:32 | value |
780+
| PrototypePollutionUtility/tests.js:308:28:308:32 | value |
781+
| PrototypePollutionUtility/tests.js:308:28:308:32 | value |
746782
| examples/PrototypePollutionUtility.js:1:16:1:18 | dst |
747783
| examples/PrototypePollutionUtility.js:1:16:1:18 | dst |
748784
| examples/PrototypePollutionUtility.js:1:21:1:23 | src |
@@ -1782,6 +1818,54 @@ edges
17821818
| PrototypePollutionUtility/tests.js:293:41:293:43 | key | PrototypePollutionUtility/tests.js:293:37:293:44 | src[key] |
17831819
| PrototypePollutionUtility/tests.js:293:41:293:43 | key | PrototypePollutionUtility/tests.js:293:37:293:44 | src[key] |
17841820
| PrototypePollutionUtility/tests.js:293:41:293:43 | key | PrototypePollutionUtility/tests.js:293:37:293:44 | src[key] |
1821+
| PrototypePollutionUtility/tests.js:301:27:301:29 | dst | PrototypePollutionUtility/tests.js:306:34:306:36 | dst |
1822+
| PrototypePollutionUtility/tests.js:301:27:301:29 | dst | PrototypePollutionUtility/tests.js:306:34:306:36 | dst |
1823+
| PrototypePollutionUtility/tests.js:301:27:301:29 | dst | PrototypePollutionUtility/tests.js:308:17:308:19 | dst |
1824+
| PrototypePollutionUtility/tests.js:301:27:301:29 | dst | PrototypePollutionUtility/tests.js:308:17:308:19 | dst |
1825+
| PrototypePollutionUtility/tests.js:301:27:301:29 | dst | PrototypePollutionUtility/tests.js:308:17:308:19 | dst |
1826+
| PrototypePollutionUtility/tests.js:301:27:301:29 | dst | PrototypePollutionUtility/tests.js:308:17:308:19 | dst |
1827+
| PrototypePollutionUtility/tests.js:301:32:301:34 | src | PrototypePollutionUtility/tests.js:304:25:304:27 | src |
1828+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key | PrototypePollutionUtility/tests.js:304:29:304:31 | key |
1829+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key | PrototypePollutionUtility/tests.js:304:29:304:31 | key |
1830+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key | PrototypePollutionUtility/tests.js:304:29:304:31 | key |
1831+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key | PrototypePollutionUtility/tests.js:304:29:304:31 | key |
1832+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key | PrototypePollutionUtility/tests.js:306:38:306:40 | key |
1833+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key | PrototypePollutionUtility/tests.js:306:38:306:40 | key |
1834+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key | PrototypePollutionUtility/tests.js:306:38:306:40 | key |
1835+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key | PrototypePollutionUtility/tests.js:306:38:306:40 | key |
1836+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key | PrototypePollutionUtility/tests.js:308:21:308:23 | key |
1837+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key | PrototypePollutionUtility/tests.js:308:21:308:23 | key |
1838+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key | PrototypePollutionUtility/tests.js:308:21:308:23 | key |
1839+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key | PrototypePollutionUtility/tests.js:308:21:308:23 | key |
1840+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key | PrototypePollutionUtility/tests.js:308:21:308:23 | key |
1841+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key | PrototypePollutionUtility/tests.js:308:21:308:23 | key |
1842+
| PrototypePollutionUtility/tests.js:302:14:302:16 | key | PrototypePollutionUtility/tests.js:308:21:308:23 | key |
1843+
| PrototypePollutionUtility/tests.js:304:17:304:32 | value | PrototypePollutionUtility/tests.js:306:44:306:48 | value |
1844+
| PrototypePollutionUtility/tests.js:304:17:304:32 | value | PrototypePollutionUtility/tests.js:306:44:306:48 | value |
1845+
| PrototypePollutionUtility/tests.js:304:17:304:32 | value | PrototypePollutionUtility/tests.js:308:28:308:32 | value |
1846+
| PrototypePollutionUtility/tests.js:304:17:304:32 | value | PrototypePollutionUtility/tests.js:308:28:308:32 | value |
1847+
| PrototypePollutionUtility/tests.js:304:17:304:32 | value | PrototypePollutionUtility/tests.js:308:28:308:32 | value |
1848+
| PrototypePollutionUtility/tests.js:304:17:304:32 | value | PrototypePollutionUtility/tests.js:308:28:308:32 | value |
1849+
| PrototypePollutionUtility/tests.js:304:17:304:32 | value | PrototypePollutionUtility/tests.js:308:28:308:32 | value |
1850+
| PrototypePollutionUtility/tests.js:304:17:304:32 | value | PrototypePollutionUtility/tests.js:308:28:308:32 | value |
1851+
| PrototypePollutionUtility/tests.js:304:25:304:27 | src | PrototypePollutionUtility/tests.js:304:25:304:32 | src[key] |
1852+
| PrototypePollutionUtility/tests.js:304:25:304:32 | src[key] | PrototypePollutionUtility/tests.js:304:17:304:32 | value |
1853+
| PrototypePollutionUtility/tests.js:304:25:304:32 | src[key] | PrototypePollutionUtility/tests.js:304:17:304:32 | value |
1854+
| PrototypePollutionUtility/tests.js:304:25:304:32 | src[key] | PrototypePollutionUtility/tests.js:304:17:304:32 | value |
1855+
| PrototypePollutionUtility/tests.js:304:25:304:32 | src[key] | PrototypePollutionUtility/tests.js:304:17:304:32 | value |
1856+
| PrototypePollutionUtility/tests.js:304:25:304:32 | src[key] | PrototypePollutionUtility/tests.js:304:17:304:32 | value |
1857+
| PrototypePollutionUtility/tests.js:304:29:304:31 | key | PrototypePollutionUtility/tests.js:304:25:304:32 | src[key] |
1858+
| PrototypePollutionUtility/tests.js:304:29:304:31 | key | PrototypePollutionUtility/tests.js:304:25:304:32 | src[key] |
1859+
| PrototypePollutionUtility/tests.js:306:34:306:36 | dst | PrototypePollutionUtility/tests.js:306:34:306:41 | dst[key] |
1860+
| PrototypePollutionUtility/tests.js:306:34:306:36 | dst | PrototypePollutionUtility/tests.js:306:34:306:41 | dst[key] |
1861+
| PrototypePollutionUtility/tests.js:306:34:306:41 | dst[key] | PrototypePollutionUtility/tests.js:301:27:301:29 | dst |
1862+
| PrototypePollutionUtility/tests.js:306:34:306:41 | dst[key] | PrototypePollutionUtility/tests.js:301:27:301:29 | dst |
1863+
| PrototypePollutionUtility/tests.js:306:34:306:41 | dst[key] | PrototypePollutionUtility/tests.js:301:27:301:29 | dst |
1864+
| PrototypePollutionUtility/tests.js:306:34:306:41 | dst[key] | PrototypePollutionUtility/tests.js:301:27:301:29 | dst |
1865+
| PrototypePollutionUtility/tests.js:306:38:306:40 | key | PrototypePollutionUtility/tests.js:306:34:306:41 | dst[key] |
1866+
| PrototypePollutionUtility/tests.js:306:38:306:40 | key | PrototypePollutionUtility/tests.js:306:34:306:41 | dst[key] |
1867+
| PrototypePollutionUtility/tests.js:306:44:306:48 | value | PrototypePollutionUtility/tests.js:301:32:301:34 | src |
1868+
| PrototypePollutionUtility/tests.js:306:44:306:48 | value | PrototypePollutionUtility/tests.js:301:32:301:34 | src |
17851869
| examples/PrototypePollutionUtility.js:1:16:1:18 | dst | examples/PrototypePollutionUtility.js:5:19:5:21 | dst |
17861870
| examples/PrototypePollutionUtility.js:1:16:1:18 | dst | examples/PrototypePollutionUtility.js:5:19:5:21 | dst |
17871871
| examples/PrototypePollutionUtility.js:1:16:1:18 | dst | examples/PrototypePollutionUtility.js:7:13:7:15 | dst |
@@ -1899,4 +1983,5 @@ edges
18991983
| PrototypePollutionUtility/tests.js:233:5:233:13 | map[key1] | PrototypePollutionUtility/tests.js:238:14:238:16 | key | PrototypePollutionUtility/tests.js:233:5:233:13 | map[key1] | Properties are copied from $@ to $@ without guarding against prototype pollution. | PrototypePollutionUtility/tests.js:238:21:238:24 | data | data | PrototypePollutionUtility/tests.js:233:5:233:13 | map[key1] | this object |
19001984
| PrototypePollutionUtility/tests.js:270:13:270:15 | dst | PrototypePollutionUtility/tests.js:265:19:265:26 | entry[0] | PrototypePollutionUtility/tests.js:270:13:270:15 | dst | Properties are copied from $@ to $@ without guarding against prototype pollution. | PrototypePollutionUtility/tests.js:264:20:264:22 | src | src | PrototypePollutionUtility/tests.js:270:13:270:15 | dst | dst |
19011985
| PrototypePollutionUtility/tests.js:280:13:280:15 | dst | PrototypePollutionUtility/tests.js:276:34:276:36 | key | PrototypePollutionUtility/tests.js:280:13:280:15 | dst | Properties are copied from $@ to $@ without guarding against prototype pollution. | PrototypePollutionUtility/tests.js:276:21:276:23 | src | src | PrototypePollutionUtility/tests.js:280:13:280:15 | dst | dst |
1986+
| PrototypePollutionUtility/tests.js:308:17:308:19 | dst | PrototypePollutionUtility/tests.js:302:14:302:16 | key | PrototypePollutionUtility/tests.js:308:17:308:19 | dst | Properties are copied from $@ to $@ without guarding against prototype pollution. | PrototypePollutionUtility/tests.js:302:21:302:23 | src | src | PrototypePollutionUtility/tests.js:308:17:308:19 | dst | dst |
19021987
| examples/PrototypePollutionUtility.js:7:13:7:15 | dst | examples/PrototypePollutionUtility.js:2:14:2:16 | key | examples/PrototypePollutionUtility.js:7:13:7:15 | dst | Properties are copied from $@ to $@ without guarding against prototype pollution. | examples/PrototypePollutionUtility.js:2:21:2:23 | src | src | examples/PrototypePollutionUtility.js:7:13:7:15 | dst | dst |

javascript/ql/test/query-tests/Security/CWE-400/PrototypePollutionUtility/tests.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,3 +297,16 @@ function copyWithPath(dst, src, path) {
297297
}
298298
return dst;
299299
}
300+
301+
function typeofObjectTest(dst, src) {
302+
for (let key in src) {
303+
if (src.hasOwnProperty(key)) {
304+
let value = src[key];
305+
if (dst[key] && typeof value === 'object') {
306+
typeofObjectTest(dst[key], value);
307+
} else {
308+
dst[key] = value; // NOT OK
309+
}
310+
}
311+
}
312+
}

0 commit comments

Comments
 (0)