Skip to content

Commit 60fb1a3

Browse files
authored
Merge pull request github#5995 from erik-krogh/webpack-merge
Approved by esbena
2 parents 7663095 + 143bf9d commit 60fb1a3

File tree

4 files changed

+31
-0
lines changed

4 files changed

+31
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
lgtm,codescanning
2+
* The security queries recognize the merge call from [webpack-merge](https://npmjs.com/package/webpack-merge).
3+
Affected packages are
4+
[webpack-merge](https://npmjs.com/package/webpack-merge)

javascript/ql/src/semmle/javascript/Extend.qll

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,3 +188,23 @@ private class CloneStep extends PreCallGraphStep {
188188
)
189189
}
190190
}
191+
192+
/**
193+
* A deep extend call from the [webpack-merge](https://npmjs.org/package/webpack-merge) library.
194+
*/
195+
private class WebpackMergeDeep extends ExtendCall, DataFlow::CallNode {
196+
WebpackMergeDeep() {
197+
this = DataFlow::moduleMember("webpack-merge", "merge").getACall()
198+
or
199+
this =
200+
DataFlow::moduleMember("webpack-merge", ["mergeWithCustomize", "mergeWithRules"])
201+
.getACall()
202+
.getACall()
203+
}
204+
205+
override DataFlow::Node getASourceOperand() { result = getAnArgument() }
206+
207+
override DataFlow::Node getDestinationOperand() { none() }
208+
209+
override predicate isDeep() { any() }
210+
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,5 @@
4141
| tst.js:79:1:79:45 | checkSh ... arg())) | OK |
4242
| tst.js:80:1:80:55 | checkSh ... arg())) | OK |
4343
| 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 |

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,8 @@ checkShallow(require('lodash').extend(base(), arg()));
7979
checkShallow(require("xtend")(base(), arg()));
8080
checkShallow(require("xtend/immutable")(base(), arg()));
8181
checkShallow(require("ramda").merge(base(), arg()));
82+
83+
// webpack-merge. deep.
84+
const webpackMerge = require('webpack-merge');
85+
checkDeep(webpackMerge.merge(base(), arg()));
86+
checkDeep(webpackMerge.mergeWithCustomize({})(base(), arg()));

0 commit comments

Comments
 (0)