mirror of
https://github.com/github/codeql.git
synced 2026-05-05 05:35:13 +02:00
JavaScript: Lift call graph library to data flow graph.
This commit is contained in:
@@ -1,4 +0,0 @@
|
||||
import javascript
|
||||
|
||||
from CallSite c
|
||||
select c, c.getACallee()
|
||||
@@ -26,4 +26,11 @@ class OtherSub extends PseudoClass {
|
||||
super();
|
||||
console.log(this.x);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function sum(x, y, z) {
|
||||
return x+y+z;
|
||||
}
|
||||
sum(...[1, 2, 3]);
|
||||
sum(1, ...[2, 3]);
|
||||
sum(1, ...[2], 3);
|
||||
|
||||
@@ -9,10 +9,16 @@
|
||||
| es2015.js:10:5:10:22 | arguments.callee() | es2015.js:8:2:12:1 | functio ... \\n };\\n} |
|
||||
| es2015.js:16:5:16:11 | super() | es2015.js:2:14:4:3 | () {\\n ... ");\\n } |
|
||||
| es2015.js:26:5:26:11 | super() | es2015.js:20:1:22:1 | functio ... = 42;\\n} |
|
||||
| es2015.js:34:1:34:17 | sum(...[1, 2, 3]) | es2015.js:31:1:33:1 | functio ... +y+z;\\n} |
|
||||
| es2015.js:35:1:35:17 | sum(1, ...[2, 3]) | es2015.js:31:1:33:1 | functio ... +y+z;\\n} |
|
||||
| es2015.js:36:1:36:17 | sum(1, ...[2], 3) | es2015.js:31:1:33:1 | functio ... +y+z;\\n} |
|
||||
| m.js:2:1:2:11 | exports.f() | m.js:1:13:1:25 | function() {} |
|
||||
| m.js:3:1:3:18 | module.exports.f() | m.js:1:13:1:25 | function() {} |
|
||||
| n.js:2:1:2:5 | m.f() | m.js:1:13:1:25 | function() {} |
|
||||
| n.js:5:1:5:6 | m2.f() | m2.js:2:6:2:18 | function() {} |
|
||||
| reflection.js:7:1:7:22 | reflective call | reflection.js:1:1:3:1 | functio ... x+y;\\n} |
|
||||
| reflection.js:8:1:8:25 | add.app ... 3, 19]) | reflection.js:5:15:5:39 | functio ... n 56; } |
|
||||
| reflection.js:8:1:8:25 | reflective call | reflection.js:1:1:3:1 | functio ... x+y;\\n} |
|
||||
| tst.js:6:1:6:3 | f() | tst.js:1:1:1:15 | function f() {} |
|
||||
| tst.js:7:1:7:3 | g() | tst.js:2:9:2:21 | function() {} |
|
||||
| tst.js:8:1:8:3 | h() | tst.js:3:5:3:17 | function() {} |
|
||||
@@ -38,3 +44,5 @@
|
||||
| tst.js:60:15:60:21 | new A() | tst.js:44:1:44:15 | function A() {} |
|
||||
| tst.js:64:13:64:19 | new B() | tst.js:50:1:50:15 | function B() {} |
|
||||
| tst.js:66:5:66:9 | b.f() | tst.js:65:11:65:23 | function() {} |
|
||||
| tst.js:69:1:69:10 | globalfn() | tst3.js:1:1:1:22 | functio ... fn() {} |
|
||||
| tst.js:70:1:70:11 | globalfn2() | tst3.js:2:1:2:23 | functio ... n2() {} |
|
||||
@@ -0,0 +1,4 @@
|
||||
import javascript
|
||||
|
||||
from DataFlow::InvokeNode c
|
||||
select c, c.getACallee()
|
||||
@@ -0,0 +1,18 @@
|
||||
| classes.js:4:7:4:26 | console.log("Hello") | classes.js:4:19:4:25 | "Hello" |
|
||||
| classes.js:14:7:14:27 | console ... ello!") | classes.js:14:19:14:26 | "Hello!" |
|
||||
| es2015.js:3:5:3:21 | console.log("hi") | es2015.js:3:17:3:20 | "hi" |
|
||||
| es2015.js:27:5:27:23 | console.log(this.x) | es2015.js:27:17:27:22 | this.x |
|
||||
| es2015.js:35:1:35:17 | sum(1, ...[2, 3]) | es2015.js:35:5:35:5 | 1 |
|
||||
| es2015.js:36:1:36:17 | sum(1, ...[2], 3) | es2015.js:36:5:36:5 | 1 |
|
||||
| es2015.js:36:1:36:17 | sum(1, ...[2], 3) | es2015.js:36:16:36:16 | 3 |
|
||||
| n.js:1:9:1:22 | require('./m') | n.js:1:17:1:21 | './m' |
|
||||
| n.js:4:10:4:24 | require('./m2') | n.js:4:18:4:23 | './m2' |
|
||||
| reflection.js:7:1:7:22 | add.cal ... 23, 19) | reflection.js:7:10:7:13 | null |
|
||||
| reflection.js:7:1:7:22 | add.cal ... 23, 19) | reflection.js:7:16:7:17 | 23 |
|
||||
| reflection.js:7:1:7:22 | add.cal ... 23, 19) | reflection.js:7:20:7:21 | 19 |
|
||||
| reflection.js:7:1:7:22 | reflective call | reflection.js:7:16:7:17 | 23 |
|
||||
| reflection.js:7:1:7:22 | reflective call | reflection.js:7:20:7:21 | 19 |
|
||||
| reflection.js:8:1:8:25 | add.app ... 3, 19]) | reflection.js:8:11:8:14 | null |
|
||||
| reflection.js:8:1:8:25 | add.app ... 3, 19]) | reflection.js:8:17:8:24 | [23, 19] |
|
||||
| tst.js:22:1:22:4 | l(k) | tst.js:22:3:22:3 | k |
|
||||
| tst.js:42:2:42:29 | functio ... x; }(o) | tst.js:42:28:42:28 | o |
|
||||
@@ -0,0 +1,4 @@
|
||||
import javascript
|
||||
|
||||
from DataFlow::InvokeNode invk
|
||||
select invk, invk.getAnArgument()
|
||||
@@ -0,0 +1,17 @@
|
||||
| classes.js:4:7:4:26 | console.log("Hello") | 0 | classes.js:4:19:4:25 | "Hello" |
|
||||
| classes.js:14:7:14:27 | console ... ello!") | 0 | classes.js:14:19:14:26 | "Hello!" |
|
||||
| es2015.js:3:5:3:21 | console.log("hi") | 0 | es2015.js:3:17:3:20 | "hi" |
|
||||
| es2015.js:27:5:27:23 | console.log(this.x) | 0 | es2015.js:27:17:27:22 | this.x |
|
||||
| es2015.js:35:1:35:17 | sum(1, ...[2, 3]) | 0 | es2015.js:35:5:35:5 | 1 |
|
||||
| es2015.js:36:1:36:17 | sum(1, ...[2], 3) | 0 | es2015.js:36:5:36:5 | 1 |
|
||||
| n.js:1:9:1:22 | require('./m') | 0 | n.js:1:17:1:21 | './m' |
|
||||
| n.js:4:10:4:24 | require('./m2') | 0 | n.js:4:18:4:23 | './m2' |
|
||||
| reflection.js:7:1:7:22 | add.cal ... 23, 19) | 0 | reflection.js:7:10:7:13 | null |
|
||||
| reflection.js:7:1:7:22 | add.cal ... 23, 19) | 1 | reflection.js:7:16:7:17 | 23 |
|
||||
| reflection.js:7:1:7:22 | add.cal ... 23, 19) | 2 | reflection.js:7:20:7:21 | 19 |
|
||||
| reflection.js:7:1:7:22 | reflective call | 0 | reflection.js:7:16:7:17 | 23 |
|
||||
| reflection.js:7:1:7:22 | reflective call | 1 | reflection.js:7:20:7:21 | 19 |
|
||||
| reflection.js:8:1:8:25 | add.app ... 3, 19]) | 0 | reflection.js:8:11:8:14 | null |
|
||||
| reflection.js:8:1:8:25 | add.app ... 3, 19]) | 1 | reflection.js:8:17:8:24 | [23, 19] |
|
||||
| tst.js:22:1:22:4 | l(k) | 0 | tst.js:22:3:22:3 | k |
|
||||
| tst.js:42:2:42:29 | functio ... x; }(o) | 0 | tst.js:42:28:42:28 | o |
|
||||
@@ -0,0 +1,4 @@
|
||||
import javascript
|
||||
|
||||
from DataFlow::InvokeNode invk, int i
|
||||
select invk, i, invk.getArgument(i)
|
||||
@@ -0,0 +1,49 @@
|
||||
| a.js:2:1:2:5 | foo() | foo |
|
||||
| a.js:3:1:3:5 | bar() | bar |
|
||||
| a.js:4:1:4:5 | qux() | qux |
|
||||
| a.js:7:1:7:5 | baz() | baz |
|
||||
| classes.js:4:7:4:26 | console.log("Hello") | log |
|
||||
| classes.js:8:7:8:18 | this.hello() | hello |
|
||||
| classes.js:14:7:14:27 | console ... ello!") | log |
|
||||
| classes.js:18:3:18:9 | new B() | B |
|
||||
| classes.js:18:3:18:17 | new B().hello() | hello |
|
||||
| es2015.js:3:5:3:21 | console.log("hi") | log |
|
||||
| es2015.js:6:1:6:18 | new ExampleClass() | ExampleClass |
|
||||
| es2015.js:10:5:10:22 | arguments.callee() | callee |
|
||||
| es2015.js:27:5:27:23 | console.log(this.x) | log |
|
||||
| es2015.js:34:1:34:17 | sum(...[1, 2, 3]) | sum |
|
||||
| es2015.js:35:1:35:17 | sum(1, ...[2, 3]) | sum |
|
||||
| es2015.js:36:1:36:17 | sum(1, ...[2], 3) | sum |
|
||||
| m.js:2:1:2:11 | exports.f() | f |
|
||||
| m.js:3:1:3:18 | module.exports.f() | f |
|
||||
| n.js:1:9:1:22 | require('./m') | require |
|
||||
| n.js:2:1:2:5 | m.f() | f |
|
||||
| n.js:4:10:4:24 | require('./m2') | require |
|
||||
| n.js:5:1:5:6 | m2.f() | f |
|
||||
| reflection.js:4:5:4:12 | sneaky() | sneaky |
|
||||
| reflection.js:7:1:7:22 | add.cal ... 23, 19) | call |
|
||||
| reflection.js:8:1:8:25 | add.app ... 3, 19]) | apply |
|
||||
| tst.js:6:1:6:3 | f() | f |
|
||||
| tst.js:7:1:7:3 | g() | g |
|
||||
| tst.js:8:1:8:3 | h() | h |
|
||||
| tst.js:9:1:9:3 | k() | k |
|
||||
| tst.js:14:2:14:4 | m() | m |
|
||||
| tst.js:15:2:15:4 | l() | l |
|
||||
| tst.js:16:2:16:19 | arguments.callee() | callee |
|
||||
| tst.js:17:2:17:4 | n() | n |
|
||||
| tst.js:18:2:18:4 | p() | p |
|
||||
| tst.js:19:2:19:4 | f() | f |
|
||||
| tst.js:22:1:22:4 | l(k) | l |
|
||||
| tst.js:24:1:24:7 | new f() | f |
|
||||
| tst.js:25:1:25:5 | new g | g |
|
||||
| tst.js:33:4:33:11 | this.g() | g |
|
||||
| tst.js:41:1:41:5 | o.f() | f |
|
||||
| tst.js:42:1:42:34 | (functi ... o)).f() | f |
|
||||
| tst.js:46:2:46:9 | this.g() | g |
|
||||
| tst.js:53:3:53:10 | this.g() | g |
|
||||
| tst.js:56:17:56:29 | Math.random() | random |
|
||||
| tst.js:60:15:60:21 | new A() | A |
|
||||
| tst.js:64:13:64:19 | new B() | B |
|
||||
| tst.js:66:5:66:9 | b.f() | f |
|
||||
| tst.js:69:1:69:10 | globalfn() | globalfn |
|
||||
| tst.js:70:1:70:11 | globalfn2() | globalfn2 |
|
||||
@@ -0,0 +1,4 @@
|
||||
import javascript
|
||||
|
||||
from DataFlow::InvokeNode invk
|
||||
select invk, invk.getCalleeName()
|
||||
@@ -0,0 +1,57 @@
|
||||
| a.js:2:1:2:5 | foo() | a.js:2:1:2:3 | foo |
|
||||
| a.js:3:1:3:5 | bar() | a.js:3:1:3:3 | bar |
|
||||
| a.js:4:1:4:5 | qux() | a.js:4:1:4:3 | qux |
|
||||
| a.js:7:1:7:5 | baz() | a.js:7:1:7:3 | baz |
|
||||
| classes.js:4:7:4:26 | console.log("Hello") | classes.js:4:7:4:17 | console.log |
|
||||
| classes.js:8:7:8:18 | this.hello() | classes.js:8:7:8:16 | this.hello |
|
||||
| classes.js:12:21:12:20 | super(...args) | classes.js:12:21:12:20 | super |
|
||||
| classes.js:14:7:14:27 | console ... ello!") | classes.js:14:7:14:17 | console.log |
|
||||
| classes.js:18:3:18:9 | new B() | classes.js:18:7:18:7 | B |
|
||||
| classes.js:18:3:18:17 | new B().hello() | classes.js:18:3:18:15 | new B().hello |
|
||||
| es2015.js:3:5:3:21 | console.log("hi") | es2015.js:3:5:3:15 | console.log |
|
||||
| es2015.js:6:1:6:18 | new ExampleClass() | es2015.js:6:5:6:16 | ExampleClass |
|
||||
| es2015.js:10:5:10:22 | arguments.callee() | es2015.js:10:5:10:20 | arguments.callee |
|
||||
| es2015.js:16:5:16:11 | super() | es2015.js:16:5:16:9 | super |
|
||||
| es2015.js:26:5:26:11 | super() | es2015.js:26:5:26:9 | super |
|
||||
| es2015.js:27:5:27:23 | console.log(this.x) | es2015.js:27:5:27:15 | console.log |
|
||||
| es2015.js:34:1:34:17 | sum(...[1, 2, 3]) | es2015.js:34:1:34:3 | sum |
|
||||
| es2015.js:35:1:35:17 | sum(1, ...[2, 3]) | es2015.js:35:1:35:3 | sum |
|
||||
| es2015.js:36:1:36:17 | sum(1, ...[2], 3) | es2015.js:36:1:36:3 | sum |
|
||||
| m.js:2:1:2:11 | exports.f() | m.js:2:1:2:9 | exports.f |
|
||||
| m.js:3:1:3:18 | module.exports.f() | m.js:3:1:3:16 | module.exports.f |
|
||||
| n.js:1:9:1:22 | require('./m') | n.js:1:9:1:15 | require |
|
||||
| n.js:2:1:2:5 | m.f() | n.js:2:1:2:3 | m.f |
|
||||
| n.js:4:10:4:24 | require('./m2') | n.js:4:10:4:16 | require |
|
||||
| n.js:5:1:5:6 | m2.f() | n.js:5:1:5:4 | m2.f |
|
||||
| reflection.js:4:5:4:12 | sneaky() | reflection.js:4:5:4:10 | sneaky |
|
||||
| reflection.js:7:1:7:22 | add.cal ... 23, 19) | reflection.js:7:1:7:8 | add.call |
|
||||
| reflection.js:7:1:7:22 | reflective call | reflection.js:7:1:7:3 | add |
|
||||
| reflection.js:8:1:8:25 | add.app ... 3, 19]) | reflection.js:8:1:8:9 | add.apply |
|
||||
| reflection.js:8:1:8:25 | reflective call | reflection.js:8:1:8:3 | add |
|
||||
| tst.js:6:1:6:3 | f() | tst.js:6:1:6:1 | f |
|
||||
| tst.js:7:1:7:3 | g() | tst.js:7:1:7:1 | g |
|
||||
| tst.js:8:1:8:3 | h() | tst.js:8:1:8:1 | h |
|
||||
| tst.js:9:1:9:3 | k() | tst.js:9:1:9:1 | k |
|
||||
| tst.js:14:2:14:4 | m() | tst.js:14:2:14:2 | m |
|
||||
| tst.js:15:2:15:4 | l() | tst.js:15:2:15:2 | l |
|
||||
| tst.js:16:2:16:19 | arguments.callee() | tst.js:16:2:16:17 | arguments.callee |
|
||||
| tst.js:17:2:17:4 | n() | tst.js:17:2:17:2 | n |
|
||||
| tst.js:18:2:18:4 | p() | tst.js:18:2:18:2 | p |
|
||||
| tst.js:19:2:19:4 | f() | tst.js:19:2:19:2 | f |
|
||||
| tst.js:22:1:22:4 | l(k) | tst.js:22:1:22:1 | l |
|
||||
| tst.js:24:1:24:7 | new f() | tst.js:24:5:24:5 | f |
|
||||
| tst.js:25:1:25:5 | new g | tst.js:25:5:25:5 | g |
|
||||
| tst.js:27:1:27:16 | (function(){})() | tst.js:27:1:27:14 | (function(){}) |
|
||||
| tst.js:28:2:28:15 | function(){}() | tst.js:28:2:28:13 | function(){} |
|
||||
| tst.js:33:4:33:11 | this.g() | tst.js:33:4:33:9 | this.g |
|
||||
| tst.js:41:1:41:5 | o.f() | tst.js:41:1:41:3 | o.f |
|
||||
| tst.js:42:1:42:34 | (functi ... o)).f() | tst.js:42:1:42:32 | (functi ... }(o)).f |
|
||||
| tst.js:42:2:42:29 | functio ... x; }(o) | tst.js:42:2:42:26 | functio ... rn x; } |
|
||||
| tst.js:46:2:46:9 | this.g() | tst.js:46:2:46:7 | this.g |
|
||||
| tst.js:53:3:53:10 | this.g() | tst.js:53:3:53:8 | this.g |
|
||||
| tst.js:56:17:56:29 | Math.random() | tst.js:56:17:56:27 | Math.random |
|
||||
| tst.js:60:15:60:21 | new A() | tst.js:60:19:60:19 | A |
|
||||
| tst.js:64:13:64:19 | new B() | tst.js:64:17:64:17 | B |
|
||||
| tst.js:66:5:66:9 | b.f() | tst.js:66:5:66:7 | b.f |
|
||||
| tst.js:69:1:69:10 | globalfn() | tst.js:69:1:69:8 | globalfn |
|
||||
| tst.js:70:1:70:11 | globalfn2() | tst.js:70:1:70:9 | globalfn2 |
|
||||
@@ -0,0 +1,4 @@
|
||||
import javascript
|
||||
|
||||
from DataFlow::InvokeNode invk
|
||||
select invk, invk.getCalleeNode()
|
||||
@@ -0,0 +1,11 @@
|
||||
| classes.js:4:7:4:26 | console.log("Hello") | classes.js:4:19:4:25 | "Hello" |
|
||||
| classes.js:14:7:14:27 | console ... ello!") | classes.js:14:19:14:26 | "Hello!" |
|
||||
| es2015.js:3:5:3:21 | console.log("hi") | es2015.js:3:17:3:20 | "hi" |
|
||||
| es2015.js:27:5:27:23 | console.log(this.x) | es2015.js:27:17:27:22 | this.x |
|
||||
| n.js:1:9:1:22 | require('./m') | n.js:1:17:1:21 | './m' |
|
||||
| n.js:4:10:4:24 | require('./m2') | n.js:4:18:4:23 | './m2' |
|
||||
| reflection.js:7:1:7:22 | add.cal ... 23, 19) | reflection.js:7:20:7:21 | 19 |
|
||||
| reflection.js:7:1:7:22 | reflective call | reflection.js:7:20:7:21 | 19 |
|
||||
| reflection.js:8:1:8:25 | add.app ... 3, 19]) | reflection.js:8:17:8:24 | [23, 19] |
|
||||
| tst.js:22:1:22:4 | l(k) | tst.js:22:3:22:3 | k |
|
||||
| tst.js:42:2:42:29 | functio ... x; }(o) | tst.js:42:28:42:28 | o |
|
||||
@@ -0,0 +1,4 @@
|
||||
import javascript
|
||||
|
||||
from DataFlow::InvokeNode invk
|
||||
select invk, invk.getLastArgument()
|
||||
@@ -0,0 +1,52 @@
|
||||
| a.js:2:1:2:5 | foo() | 0 |
|
||||
| a.js:3:1:3:5 | bar() | 0 |
|
||||
| a.js:4:1:4:5 | qux() | 0 |
|
||||
| a.js:7:1:7:5 | baz() | 0 |
|
||||
| classes.js:4:7:4:26 | console.log("Hello") | 1 |
|
||||
| classes.js:8:7:8:18 | this.hello() | 0 |
|
||||
| classes.js:14:7:14:27 | console ... ello!") | 1 |
|
||||
| classes.js:18:3:18:9 | new B() | 0 |
|
||||
| classes.js:18:3:18:17 | new B().hello() | 0 |
|
||||
| es2015.js:3:5:3:21 | console.log("hi") | 1 |
|
||||
| es2015.js:6:1:6:18 | new ExampleClass() | 0 |
|
||||
| es2015.js:10:5:10:22 | arguments.callee() | 0 |
|
||||
| es2015.js:16:5:16:11 | super() | 0 |
|
||||
| es2015.js:26:5:26:11 | super() | 0 |
|
||||
| es2015.js:27:5:27:23 | console.log(this.x) | 1 |
|
||||
| m.js:2:1:2:11 | exports.f() | 0 |
|
||||
| m.js:3:1:3:18 | module.exports.f() | 0 |
|
||||
| n.js:1:9:1:22 | require('./m') | 1 |
|
||||
| n.js:2:1:2:5 | m.f() | 0 |
|
||||
| n.js:4:10:4:24 | require('./m2') | 1 |
|
||||
| n.js:5:1:5:6 | m2.f() | 0 |
|
||||
| reflection.js:4:5:4:12 | sneaky() | 0 |
|
||||
| reflection.js:7:1:7:22 | add.cal ... 23, 19) | 3 |
|
||||
| reflection.js:7:1:7:22 | reflective call | 2 |
|
||||
| reflection.js:8:1:8:25 | add.app ... 3, 19]) | 2 |
|
||||
| tst.js:6:1:6:3 | f() | 0 |
|
||||
| tst.js:7:1:7:3 | g() | 0 |
|
||||
| tst.js:8:1:8:3 | h() | 0 |
|
||||
| tst.js:9:1:9:3 | k() | 0 |
|
||||
| tst.js:14:2:14:4 | m() | 0 |
|
||||
| tst.js:15:2:15:4 | l() | 0 |
|
||||
| tst.js:16:2:16:19 | arguments.callee() | 0 |
|
||||
| tst.js:17:2:17:4 | n() | 0 |
|
||||
| tst.js:18:2:18:4 | p() | 0 |
|
||||
| tst.js:19:2:19:4 | f() | 0 |
|
||||
| tst.js:22:1:22:4 | l(k) | 1 |
|
||||
| tst.js:24:1:24:7 | new f() | 0 |
|
||||
| tst.js:25:1:25:5 | new g | 0 |
|
||||
| tst.js:27:1:27:16 | (function(){})() | 0 |
|
||||
| tst.js:28:2:28:15 | function(){}() | 0 |
|
||||
| tst.js:33:4:33:11 | this.g() | 0 |
|
||||
| tst.js:41:1:41:5 | o.f() | 0 |
|
||||
| tst.js:42:1:42:34 | (functi ... o)).f() | 0 |
|
||||
| tst.js:42:2:42:29 | functio ... x; }(o) | 1 |
|
||||
| tst.js:46:2:46:9 | this.g() | 0 |
|
||||
| tst.js:53:3:53:10 | this.g() | 0 |
|
||||
| tst.js:56:17:56:29 | Math.random() | 0 |
|
||||
| tst.js:60:15:60:21 | new A() | 0 |
|
||||
| tst.js:64:13:64:19 | new B() | 0 |
|
||||
| tst.js:66:5:66:9 | b.f() | 0 |
|
||||
| tst.js:69:1:69:10 | globalfn() | 0 |
|
||||
| tst.js:70:1:70:11 | globalfn2() | 0 |
|
||||
@@ -0,0 +1,4 @@
|
||||
import javascript
|
||||
|
||||
from DataFlow::InvokeNode invk
|
||||
select invk, invk.getNumArgument()
|
||||
@@ -0,0 +1 @@
|
||||
| tst.js:69:1:69:10 | globalfn() |
|
||||
@@ -0,0 +1,5 @@
|
||||
import javascript
|
||||
|
||||
from DataFlow::InvokeNode invk
|
||||
where invk.isImprecise()
|
||||
select invk
|
||||
@@ -0,0 +1,30 @@
|
||||
| a.js:7:1:7:5 | baz() |
|
||||
| classes.js:4:7:4:26 | console.log("Hello") |
|
||||
| classes.js:8:7:8:18 | this.hello() |
|
||||
| classes.js:14:7:14:27 | console ... ello!") |
|
||||
| classes.js:18:3:18:17 | new B().hello() |
|
||||
| es2015.js:3:5:3:21 | console.log("hi") |
|
||||
| es2015.js:27:5:27:23 | console.log(this.x) |
|
||||
| m.js:2:1:2:11 | exports.f() |
|
||||
| m.js:3:1:3:18 | module.exports.f() |
|
||||
| n.js:1:9:1:22 | require('./m') |
|
||||
| n.js:2:1:2:5 | m.f() |
|
||||
| n.js:4:10:4:24 | require('./m2') |
|
||||
| n.js:5:1:5:6 | m2.f() |
|
||||
| reflection.js:7:1:7:22 | add.cal ... 23, 19) |
|
||||
| reflection.js:8:1:8:25 | add.app ... 3, 19]) |
|
||||
| tst.js:6:1:6:3 | f() |
|
||||
| tst.js:7:1:7:3 | g() |
|
||||
| tst.js:9:1:9:3 | k() |
|
||||
| tst.js:14:2:14:4 | m() |
|
||||
| tst.js:17:2:17:4 | n() |
|
||||
| tst.js:19:2:19:4 | f() |
|
||||
| tst.js:24:1:24:7 | new f() |
|
||||
| tst.js:25:1:25:5 | new g |
|
||||
| tst.js:33:4:33:11 | this.g() |
|
||||
| tst.js:41:1:41:5 | o.f() |
|
||||
| tst.js:42:1:42:34 | (functi ... o)).f() |
|
||||
| tst.js:46:2:46:9 | this.g() |
|
||||
| tst.js:53:3:53:10 | this.g() |
|
||||
| tst.js:56:17:56:29 | Math.random() |
|
||||
| tst.js:66:5:66:9 | b.f() |
|
||||
@@ -0,0 +1,5 @@
|
||||
import javascript
|
||||
|
||||
from DataFlow::InvokeNode invk
|
||||
where invk.isIncomplete()
|
||||
select invk
|
||||
@@ -0,0 +1,31 @@
|
||||
| a.js:7:1:7:5 | baz() |
|
||||
| classes.js:4:7:4:26 | console.log("Hello") |
|
||||
| classes.js:8:7:8:18 | this.hello() |
|
||||
| classes.js:14:7:14:27 | console ... ello!") |
|
||||
| classes.js:18:3:18:17 | new B().hello() |
|
||||
| es2015.js:3:5:3:21 | console.log("hi") |
|
||||
| es2015.js:27:5:27:23 | console.log(this.x) |
|
||||
| m.js:2:1:2:11 | exports.f() |
|
||||
| m.js:3:1:3:18 | module.exports.f() |
|
||||
| n.js:1:9:1:22 | require('./m') |
|
||||
| n.js:2:1:2:5 | m.f() |
|
||||
| n.js:4:10:4:24 | require('./m2') |
|
||||
| n.js:5:1:5:6 | m2.f() |
|
||||
| reflection.js:7:1:7:22 | add.cal ... 23, 19) |
|
||||
| reflection.js:8:1:8:25 | add.app ... 3, 19]) |
|
||||
| tst.js:6:1:6:3 | f() |
|
||||
| tst.js:7:1:7:3 | g() |
|
||||
| tst.js:9:1:9:3 | k() |
|
||||
| tst.js:14:2:14:4 | m() |
|
||||
| tst.js:17:2:17:4 | n() |
|
||||
| tst.js:19:2:19:4 | f() |
|
||||
| tst.js:24:1:24:7 | new f() |
|
||||
| tst.js:25:1:25:5 | new g |
|
||||
| tst.js:33:4:33:11 | this.g() |
|
||||
| tst.js:41:1:41:5 | o.f() |
|
||||
| tst.js:42:1:42:34 | (functi ... o)).f() |
|
||||
| tst.js:46:2:46:9 | this.g() |
|
||||
| tst.js:53:3:53:10 | this.g() |
|
||||
| tst.js:56:17:56:29 | Math.random() |
|
||||
| tst.js:66:5:66:9 | b.f() |
|
||||
| tst.js:69:1:69:10 | globalfn() |
|
||||
@@ -0,0 +1,5 @@
|
||||
import javascript
|
||||
|
||||
from DataFlow::InvokeNode invk
|
||||
where invk.isUncertain()
|
||||
select invk
|
||||
@@ -0,0 +1,8 @@
|
||||
function add(x, y) {
|
||||
return x+y;
|
||||
}
|
||||
if (sneaky())
|
||||
add.apply = function() { return 56; };
|
||||
|
||||
add.call(null, 23, 19);
|
||||
add.apply(null, [23, 19]);
|
||||
@@ -64,4 +64,7 @@ C.prototype.g = function() {};
|
||||
var b = new B();
|
||||
b.f = function() {};
|
||||
b.f();
|
||||
});
|
||||
});
|
||||
|
||||
globalfn();
|
||||
globalfn2();
|
||||
|
||||
1
javascript/ql/test/library-tests/CallGraphs/tst2.js
Normal file
1
javascript/ql/test/library-tests/CallGraphs/tst2.js
Normal file
@@ -0,0 +1 @@
|
||||
var globalfn = null;
|
||||
2
javascript/ql/test/library-tests/CallGraphs/tst3.js
Normal file
2
javascript/ql/test/library-tests/CallGraphs/tst3.js
Normal file
@@ -0,0 +1,2 @@
|
||||
function globalfn() {}
|
||||
function globalfn2() {}
|
||||
@@ -1,4 +1,4 @@
|
||||
import javascript
|
||||
|
||||
from CallSite call
|
||||
from DataFlow::InvokeNode call
|
||||
select call, call.getACallee()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import javascript
|
||||
|
||||
from NewExpr new, ClassDefinition klass
|
||||
where klass.getConstructor().getInit() = new.(CallSite).getACallee()
|
||||
from DataFlow::NewNode new, ClassDefinition klass
|
||||
where klass.getConstructor().getInit() = new.getACallee()
|
||||
select new.getFile().getBaseName(), new.getCalleeName(), klass.getFile().getBaseName(), klass.getName()
|
||||
|
||||
Reference in New Issue
Block a user