Skip to content

Commit a892579

Browse files
authored
Merge pull request #22401 from MathiasVP/javascript-another-shallow-copy-library
JS: Model the `merge-descriptors` library as a shallow extender
2 parents 542599e + 58c6e80 commit a892579

4 files changed

Lines changed: 25 additions & 11 deletions

File tree

javascript/ql/lib/semmle/javascript/Extend.qll

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,17 @@ private class ExtendCallShallow extends ExtendCall {
146146
override predicate isDeep() { none() }
147147
}
148148

149+
/** A shallow extend call of form `mergeDescriptors(dst, src)`. */
150+
private class MergeDescriptorsCall extends ExtendCall {
151+
MergeDescriptorsCall() { this = DataFlow::moduleImport("merge-descriptors").getACall() }
152+
153+
override DataFlow::Node getASourceOperand() { result = this.getArgument(1) }
154+
155+
override DataFlow::Node getDestinationOperand() { result = this.getArgument(0) }
156+
157+
override predicate isDeep() { none() }
158+
}
159+
149160
/**
150161
* A shallow extend call of form `extend(src1, src2, ...)`.
151162
*/

javascript/ql/test/library-tests/Extend/ExtendCalls.expected

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,18 @@
2929
| tst.js:64:1:64:48 | checkSh ... arg())) | OK |
3030
| tst.js:65:1:65:54 | checkSh ... arg())) | OK |
3131
| tst.js:66:1:66:45 | checkSh ... arg())) | OK |
32-
| tst.js:67:1:67:52 | checkSh ... arg())) | OK |
33-
| tst.js:68:1:68:53 | checkSh ... arg())) | OK |
32+
| tst.js:67:1:67:57 | checkSh ... arg())) | OK |
33+
| tst.js:68:1:68:52 | checkSh ... arg())) | OK |
3434
| tst.js:69:1:69:53 | checkSh ... arg())) | OK |
35-
| tst.js:70:1:70:55 | checkSh ... arg())) | OK |
36-
| tst.js:71:1:71:52 | checkSh ... arg())) | OK |
37-
| tst.js:72:1:72:51 | checkSh ... arg())) | OK |
35+
| tst.js:70:1:70:53 | checkSh ... arg())) | OK |
36+
| tst.js:71:1:71:55 | checkSh ... arg())) | OK |
37+
| tst.js:72:1:72:52 | checkSh ... arg())) | OK |
3838
| tst.js:73:1:73:51 | checkSh ... arg())) | OK |
39-
| tst.js:74:1:74:53 | checkSh ... arg())) | OK |
39+
| tst.js:74:1:74:51 | checkSh ... arg())) | OK |
4040
| tst.js:75:1:75:53 | checkSh ... arg())) | OK |
41-
| tst.js:79:1:79:45 | checkSh ... arg())) | OK |
42-
| tst.js:80:1:80:55 | checkSh ... arg())) | OK |
43-
| tst.js:81:1:81:51 | checkSh ... arg())) | OK |
44-
| tst.js:85:1:85:44 | checkDe ... arg())) | OK |
45-
| tst.js:86:1:86:61 | checkDe ... arg())) | OK |
41+
| tst.js:76:1:76:53 | checkSh ... arg())) | OK |
42+
| tst.js:80:1:80:45 | checkSh ... arg())) | OK |
43+
| tst.js:81:1:81:55 | checkSh ... arg())) | OK |
44+
| tst.js:82:1:82:51 | checkSh ... arg())) | OK |
45+
| tst.js:86:1:86:44 | checkDe ... arg())) | OK |
46+
| tst.js:87:1:87:61 | checkDe ... arg())) | OK |

javascript/ql/test/library-tests/Extend/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"lodash.mergewith": "^4.6.1",
1818
"merge": "^1.2.0",
1919
"merge-deep": "^3.0.2",
20+
"merge-descriptors": "^1.0.3",
2021
"merge-options": "^1.0.1",
2122
"mixin-deep": "^2.0.0",
2223
"mixin-object": "^3.0.0",

javascript/ql/test/library-tests/Extend/tst.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ checkShallow(Object.assign(base(), arg()));
6464
checkShallow(require("defaults")(base(), arg()));
6565
checkShallow(require("extend-shallow")(base(), arg()));
6666
checkShallow(require("merge")(base(), arg()));
67+
checkShallow(require("merge-descriptors")(base(), arg()));
6768
checkShallow(require("mixin-object")(base(), arg()));
6869
checkShallow(require("object-assign")(base(), arg()));
6970
checkShallow(require("object.assign")(base(), arg()));

0 commit comments

Comments
 (0)