Skip to content

Commit 173f32d

Browse files
committed
JS: Recognize 'require' calls in more cases
1 parent 3b7ecd5 commit 173f32d

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

javascript/extractor/src/com/semmle/js/extractor/NodeJSDetector.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,9 @@ private static boolean isRequireCall(Expression e) {
9797
if (e instanceof CallExpression) {
9898
CallExpression call = (CallExpression) e;
9999
Expression callee = call.getCallee();
100-
return (isIdentifier(callee, "require") || isRequireCall(callee))
101-
&& call.getArguments().size() == 1;
100+
if (isIdentifier(callee, "require") && call.getArguments().size() == 1) return true;
101+
if (isRequireCall(callee)) return true;
102+
return false;
102103
} else if (e instanceof MemberExpression) {
103104
return isRequireCall(((MemberExpression) e).getObject());
104105
} else if (e instanceof AssignmentExpression) {

javascript/extractor/src/com/semmle/js/extractor/test/NodeJSDetectorTests.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,8 @@ public void testUMD() {
164164

165165
@Test
166166
public void amdefine() {
167-
// not currently detected
168167
isNodeJS(
169-
"if (typeof define !== 'function') define = require('amdefine')(module, require);", false);
168+
"if (typeof define !== 'function') define = require('amdefine')(module, require);", true);
170169
}
171170

172171
@Test
@@ -202,4 +201,14 @@ public void requireInIf() {
202201
+ "}",
203202
true);
204203
}
204+
205+
@Test
206+
public void requireAndCall() {
207+
isNodeJS("var foo = require('foo')();", true);
208+
}
209+
210+
@Test
211+
public void requireAndCallMethod() {
212+
isNodeJS("var foo = require('foo').bar();", true);
213+
}
205214
}

0 commit comments

Comments
 (0)