Skip to content

Commit 2c05ee8

Browse files
asger-semmleasgerf
authored andcommitted
JS: Add regression test
1 parent 9bd3c4a commit 2c05ee8

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,22 @@ nodes
832832
| PrototypePollutionUtility/tests.js:338:28:338:35 | src[key] |
833833
| PrototypePollutionUtility/tests.js:338:28:338:35 | src[key] |
834834
| PrototypePollutionUtility/tests.js:338:28:338:35 | src[key] |
835+
| PrototypePollutionUtility/tests.js:348:40:348:45 | source |
836+
| PrototypePollutionUtility/tests.js:350:37:350:39 | key |
837+
| PrototypePollutionUtility/tests.js:350:37:350:39 | key |
838+
| PrototypePollutionUtility/tests.js:355:66:355:71 | source |
839+
| PrototypePollutionUtility/tests.js:355:66:355:76 | source[key] |
840+
| PrototypePollutionUtility/tests.js:355:66:355:76 | source[key] |
841+
| PrototypePollutionUtility/tests.js:355:66:355:76 | source[key] |
842+
| PrototypePollutionUtility/tests.js:357:24:357:26 | key |
843+
| PrototypePollutionUtility/tests.js:357:24:357:26 | key |
844+
| PrototypePollutionUtility/tests.js:357:31:357:36 | source |
845+
| PrototypePollutionUtility/tests.js:357:31:357:41 | source[key] |
846+
| PrototypePollutionUtility/tests.js:357:31:357:41 | source[key] |
847+
| PrototypePollutionUtility/tests.js:357:31:357:41 | source[key] |
848+
| PrototypePollutionUtility/tests.js:357:31:357:41 | source[key] |
849+
| PrototypePollutionUtility/tests.js:357:31:357:41 | source[key] |
850+
| PrototypePollutionUtility/tests.js:357:38:357:40 | key |
835851
| examples/PrototypePollutionUtility.js:1:16:1:18 | dst |
836852
| examples/PrototypePollutionUtility.js:1:16:1:18 | dst |
837853
| examples/PrototypePollutionUtility.js:1:21:1:23 | src |
@@ -1984,6 +2000,23 @@ edges
19842000
| PrototypePollutionUtility/tests.js:338:28:338:30 | src | PrototypePollutionUtility/tests.js:338:28:338:35 | src[key] |
19852001
| PrototypePollutionUtility/tests.js:338:28:338:30 | src | PrototypePollutionUtility/tests.js:338:28:338:35 | src[key] |
19862002
| PrototypePollutionUtility/tests.js:338:28:338:35 | src[key] | PrototypePollutionUtility/tests.js:338:28:338:35 | src[key] |
2003+
| PrototypePollutionUtility/tests.js:348:40:348:45 | source | PrototypePollutionUtility/tests.js:355:66:355:71 | source |
2004+
| PrototypePollutionUtility/tests.js:348:40:348:45 | source | PrototypePollutionUtility/tests.js:357:31:357:36 | source |
2005+
| PrototypePollutionUtility/tests.js:350:37:350:39 | key | PrototypePollutionUtility/tests.js:357:24:357:26 | key |
2006+
| PrototypePollutionUtility/tests.js:350:37:350:39 | key | PrototypePollutionUtility/tests.js:357:24:357:26 | key |
2007+
| PrototypePollutionUtility/tests.js:350:37:350:39 | key | PrototypePollutionUtility/tests.js:357:24:357:26 | key |
2008+
| PrototypePollutionUtility/tests.js:350:37:350:39 | key | PrototypePollutionUtility/tests.js:357:24:357:26 | key |
2009+
| PrototypePollutionUtility/tests.js:350:37:350:39 | key | PrototypePollutionUtility/tests.js:357:38:357:40 | key |
2010+
| PrototypePollutionUtility/tests.js:350:37:350:39 | key | PrototypePollutionUtility/tests.js:357:38:357:40 | key |
2011+
| PrototypePollutionUtility/tests.js:355:66:355:71 | source | PrototypePollutionUtility/tests.js:355:66:355:76 | source[key] |
2012+
| PrototypePollutionUtility/tests.js:355:66:355:76 | source[key] | PrototypePollutionUtility/tests.js:348:40:348:45 | source |
2013+
| PrototypePollutionUtility/tests.js:355:66:355:76 | source[key] | PrototypePollutionUtility/tests.js:348:40:348:45 | source |
2014+
| PrototypePollutionUtility/tests.js:355:66:355:76 | source[key] | PrototypePollutionUtility/tests.js:348:40:348:45 | source |
2015+
| PrototypePollutionUtility/tests.js:357:31:357:36 | source | PrototypePollutionUtility/tests.js:357:31:357:41 | source[key] |
2016+
| PrototypePollutionUtility/tests.js:357:31:357:36 | source | PrototypePollutionUtility/tests.js:357:31:357:41 | source[key] |
2017+
| PrototypePollutionUtility/tests.js:357:31:357:41 | source[key] | PrototypePollutionUtility/tests.js:357:31:357:41 | source[key] |
2018+
| PrototypePollutionUtility/tests.js:357:38:357:40 | key | PrototypePollutionUtility/tests.js:357:31:357:41 | source[key] |
2019+
| PrototypePollutionUtility/tests.js:357:38:357:40 | key | PrototypePollutionUtility/tests.js:357:31:357:41 | source[key] |
19872020
| examples/PrototypePollutionUtility.js:1:16:1:18 | dst | examples/PrototypePollutionUtility.js:5:19:5:21 | dst |
19882021
| examples/PrototypePollutionUtility.js:1:16:1:18 | dst | examples/PrototypePollutionUtility.js:5:19:5:21 | dst |
19892022
| examples/PrototypePollutionUtility.js:1:16:1:18 | dst | examples/PrototypePollutionUtility.js:7:13:7:15 | dst |

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,3 +340,23 @@ function mergeSelective(dst, src) {
340340
}
341341
}
342342
}
343+
344+
function isNonArrayObject(item) {
345+
return item && typeof item === 'object' && !Array.isArray(item);
346+
}
347+
348+
function mergePlainObjectsOnly(target, source) {
349+
if (isNonArrayObject(target) && isNonArrayObject(source)) {
350+
Object.keys(source).forEach(key => {
351+
if (key === '__proto__') {
352+
return;
353+
}
354+
if (isNonArrayObject(source[key]) && key in target) {
355+
target[key] = mergePlainObjectsOnly(target[key], source[key], options);
356+
} else {
357+
target[key] = source[key]; // OK
358+
}
359+
});
360+
}
361+
return target;
362+
}

0 commit comments

Comments
 (0)