Skip to content

Commit 4b1f918

Browse files
committed
JS: Extend getABulkExportedNode and use it in PackageExports
1 parent cce3c02 commit 4b1f918

File tree

3 files changed

+19
-0
lines changed

3 files changed

+19
-0
lines changed

javascript/ql/lib/semmle/javascript/AMD.qll

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,19 @@ class AmdModule extends Module {
313313
name = pwn.getPropertyName()
314314
)
315315
}
316+
317+
override DataFlow::Node getABulkExportedNode() {
318+
// Assigned to `module.exports` via the factory's `module` parameter
319+
exists(AbstractModuleObject m, DataFlow::PropWrite write |
320+
m.getModule() = this and
321+
write.getPropertyName() = "exports" and
322+
write.getBase().analyze().getAValue() = m and
323+
result = write.getRhs()
324+
)
325+
or
326+
// Returned from factory function
327+
result = getDefine().getModuleExpr().flow()
328+
}
316329
}
317330

318331
/**

javascript/ql/lib/semmle/javascript/Closure.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,10 @@ module Closure {
177177
)
178178
)
179179
}
180+
181+
override DataFlow::Node getABulkExportedNode() {
182+
result = getExportsVariable().getAnAssignedExpr().flow()
183+
}
180184
}
181185

182186
/**

javascript/ql/lib/semmle/javascript/PackageExports.qll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,4 +171,6 @@ private DataFlow::Node getAnExportFromModule(Module mod) {
171171
result.analyze().getAValue() = mod.(AmdModule).getDefine().getAModuleExportsValue()
172172
or
173173
result = mod.getAnExportedValue(_)
174+
or
175+
result = mod.getABulkExportedNode()
174176
}

0 commit comments

Comments
 (0)