mirror of
https://github.com/github/codeql.git
synced 2026-04-30 11:15:13 +02:00
Merge pull request #2618 from erik-krogh/ExceptionalPromise
Approved by asgerf
This commit is contained in:
@@ -0,0 +1 @@
|
||||
| tst.js:4:15:4:22 | "source" | tst.js:9:7:9:24 | readTaint(tainted) |
|
||||
@@ -0,0 +1,26 @@
|
||||
import javascript
|
||||
|
||||
class Configuration extends TaintTracking::Configuration {
|
||||
Configuration() { this = "PromiseFlowTestingConfig" }
|
||||
|
||||
override predicate isSource(DataFlow::Node source) {
|
||||
source.getEnclosingExpr().getStringValue() = "source"
|
||||
}
|
||||
|
||||
override predicate isSink(DataFlow::Node sink) {
|
||||
any(DataFlow::InvokeNode call | call.getCalleeName() = "sink").getAnArgument() = sink
|
||||
}
|
||||
|
||||
// When the source code states that "foo" is being read, "bar" is additionally being read.
|
||||
override predicate isAdditionalLoadStep(DataFlow::Node pred, DataFlow::Node succ, string prop) {
|
||||
exists(DataFlow::PropRead read | read = succ |
|
||||
read.getBase() = pred and
|
||||
read.getPropertyName() = "foo"
|
||||
) and
|
||||
prop = "bar"
|
||||
}
|
||||
}
|
||||
|
||||
from DataFlow::Node pred, DataFlow::Node succ, Configuration cfg
|
||||
where cfg.hasFlow(pred, succ)
|
||||
select pred, succ
|
||||
10
javascript/ql/test/library-tests/CustomLoadStoreSteps/tst.js
Normal file
10
javascript/ql/test/library-tests/CustomLoadStoreSteps/tst.js
Normal file
@@ -0,0 +1,10 @@
|
||||
// When the source code states that "foo" is being read, "bar" is additionally being read.
|
||||
|
||||
(function () {
|
||||
var source = "source";
|
||||
var tainted = { bar: source };
|
||||
function readTaint(x) {
|
||||
return x.foo;
|
||||
}
|
||||
sink(readTaint(tainted));
|
||||
})();
|
||||
@@ -23,11 +23,11 @@
|
||||
| partial.js:5:15:5:24 | "tainted1" | partial.js:21:15:21:15 | x |
|
||||
| partial.js:5:15:5:24 | "tainted1" | partial.js:27:15:27:15 | x |
|
||||
| promises.js:2:16:2:24 | "tainted" | promises.js:7:16:7:18 | val |
|
||||
| promises.js:2:16:2:24 | "tainted" | promises.js:38:32:38:32 | v |
|
||||
| promises.js:11:22:11:31 | "resolved" | promises.js:19:20:19:20 | v |
|
||||
| promises.js:11:22:11:31 | "resolved" | promises.js:27:16:27:16 | v |
|
||||
| promises.js:12:22:12:31 | "rejected" | promises.js:21:20:21:20 | v |
|
||||
| promises.js:12:22:12:31 | "rejected" | promises.js:24:20:24:20 | v |
|
||||
| promises.js:12:22:12:31 | "rejected" | promises.js:27:16:27:16 | v |
|
||||
| promises.js:32:24:32:37 | "also tainted" | promises.js:38:32:38:32 | v |
|
||||
| properties2.js:7:14:7:21 | "source" | properties2.js:8:12:8:24 | foo(source).p |
|
||||
| properties2.js:7:14:7:21 | "source" | properties2.js:33:13:33:20 | getP(o3) |
|
||||
| properties.js:2:16:2:24 | "tainted" | properties.js:5:14:5:23 | a.someProp |
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
| partial.js:5:15:5:24 | "tainted1" | partial.js:21:15:21:15 | x |
|
||||
| partial.js:5:15:5:24 | "tainted1" | partial.js:27:15:27:15 | x |
|
||||
| promises.js:2:16:2:24 | "tainted" | promises.js:7:16:7:18 | val |
|
||||
| promises.js:2:16:2:24 | "tainted" | promises.js:38:32:38:32 | v |
|
||||
| promises.js:11:22:11:31 | "resolved" | promises.js:19:20:19:20 | v |
|
||||
| promises.js:11:22:11:31 | "resolved" | promises.js:27:16:27:16 | v |
|
||||
| promises.js:12:22:12:31 | "rejected" | promises.js:21:20:21:20 | v |
|
||||
| promises.js:12:22:12:31 | "rejected" | promises.js:24:20:24:20 | v |
|
||||
| promises.js:12:22:12:31 | "rejected" | promises.js:27:16:27:16 | v |
|
||||
| promises.js:32:24:32:37 | "also tainted" | promises.js:38:32:38:32 | v |
|
||||
| properties2.js:7:14:7:21 | "source" | properties2.js:8:12:8:24 | foo(source).p |
|
||||
| properties2.js:7:14:7:21 | "source" | properties2.js:33:13:33:20 | getP(o3) |
|
||||
| properties.js:2:16:2:24 | "tainted" | properties.js:5:14:5:23 | a.someProp |
|
||||
|
||||
@@ -30,10 +30,8 @@
|
||||
| promises.js:2:16:2:24 | "tainted" | promises.js:7:16:7:18 | val |
|
||||
| promises.js:2:16:2:24 | "tainted" | promises.js:38:32:38:32 | v |
|
||||
| promises.js:11:22:11:31 | "resolved" | promises.js:19:20:19:20 | v |
|
||||
| promises.js:11:22:11:31 | "resolved" | promises.js:27:16:27:16 | v |
|
||||
| promises.js:12:22:12:31 | "rejected" | promises.js:21:20:21:20 | v |
|
||||
| promises.js:12:22:12:31 | "rejected" | promises.js:24:20:24:20 | v |
|
||||
| promises.js:12:22:12:31 | "rejected" | promises.js:27:16:27:16 | v |
|
||||
| promises.js:32:24:32:37 | "also tainted" | promises.js:38:32:38:32 | v |
|
||||
| properties2.js:7:14:7:21 | "source" | properties2.js:8:12:8:24 | foo(source).p |
|
||||
| properties2.js:7:14:7:21 | "source" | properties2.js:33:13:33:20 | getP(o3) |
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
| missing | promises.js:1:2:1:2 | source | promises.js:6:26:6:28 | val |
|
||||
| missing | promises.js:1:2:1:2 | source | promises.js:7:16:7:18 | val |
|
||||
| missing | promises.js:1:2:1:2 | source | promises.js:37:11:37:11 | v |
|
||||
| missing | promises.js:1:2:1:2 | source | promises.js:38:32:38:32 | v |
|
||||
| missing | promises.js:2:16:2:24 | "tainted" | promises.js:6:26:6:28 | val |
|
||||
| missing | promises.js:2:16:2:24 | "tainted" | promises.js:7:16:7:18 | val |
|
||||
| missing | promises.js:2:16:2:24 | "tainted" | promises.js:37:11:37:11 | v |
|
||||
| missing | promises.js:2:16:2:24 | "tainted" | promises.js:38:32:38:32 | v |
|
||||
| missing | promises.js:10:30:17:3 | exceptional return of anonymous function | promises.js:20:7:20:7 | v |
|
||||
| missing | promises.js:10:30:17:3 | exceptional return of anonymous function | promises.js:21:20:21:20 | v |
|
||||
| missing | promises.js:10:30:17:3 | exceptional return of anonymous function | promises.js:23:19:23:19 | v |
|
||||
| missing | promises.js:10:30:17:3 | exceptional return of anonymous function | promises.js:24:20:24:20 | v |
|
||||
| missing | promises.js:11:22:11:31 | "resolved" | promises.js:18:18:18:18 | v |
|
||||
| missing | promises.js:11:22:11:31 | "resolved" | promises.js:19:20:19:20 | v |
|
||||
| missing | promises.js:12:22:12:31 | "rejected" | promises.js:20:7:20:7 | v |
|
||||
| missing | promises.js:12:22:12:31 | "rejected" | promises.js:21:20:21:20 | v |
|
||||
| missing | promises.js:12:22:12:31 | "rejected" | promises.js:23:19:23:19 | v |
|
||||
| missing | promises.js:12:22:12:31 | "rejected" | promises.js:24:20:24:20 | v |
|
||||
| missing | promises.js:13:9:13:21 | exceptional return of Math.random() | promises.js:20:7:20:7 | v |
|
||||
| missing | promises.js:13:9:13:21 | exceptional return of Math.random() | promises.js:21:20:21:20 | v |
|
||||
| missing | promises.js:13:9:13:21 | exceptional return of Math.random() | promises.js:23:19:23:19 | v |
|
||||
| missing | promises.js:13:9:13:21 | exceptional return of Math.random() | promises.js:24:20:24:20 | v |
|
||||
| missing | promises.js:14:7:14:21 | exceptional return of res(res_source) | promises.js:20:7:20:7 | v |
|
||||
| missing | promises.js:14:7:14:21 | exceptional return of res(res_source) | promises.js:21:20:21:20 | v |
|
||||
| missing | promises.js:14:7:14:21 | exceptional return of res(res_source) | promises.js:23:19:23:19 | v |
|
||||
| missing | promises.js:14:7:14:21 | exceptional return of res(res_source) | promises.js:24:20:24:20 | v |
|
||||
| missing | promises.js:16:7:16:21 | exceptional return of rej(rej_source) | promises.js:20:7:20:7 | v |
|
||||
| missing | promises.js:16:7:16:21 | exceptional return of rej(rej_source) | promises.js:21:20:21:20 | v |
|
||||
| missing | promises.js:16:7:16:21 | exceptional return of rej(rej_source) | promises.js:23:19:23:19 | v |
|
||||
| missing | promises.js:16:7:16:21 | exceptional return of rej(rej_source) | promises.js:24:20:24:20 | v |
|
||||
| missing | promises.js:32:24:32:37 | "also tainted" | promises.js:37:11:37:11 | v |
|
||||
| missing | promises.js:32:24:32:37 | "also tainted" | promises.js:38:32:38:32 | v |
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
promise2.catch((v) => {
|
||||
var rej_sink = v;
|
||||
});
|
||||
promise2.finally((v) => {
|
||||
promise2.finally((v) => { // no promise implementation sends an argument to the finally handler. So there is no data-flow here.
|
||||
var sink = v;
|
||||
});
|
||||
|
||||
|
||||
@@ -1,4 +1,74 @@
|
||||
| additional-promises.js:2:13:2:57 | new Pin ... ct) {}) |
|
||||
| flow.js:7:11:7:59 | new Pro ... ource)) |
|
||||
| flow.js:10:11:10:58 | new Pro ... ource)) |
|
||||
| flow.js:13:11:13:58 | new Pro ... ource)) |
|
||||
| flow.js:20:2:20:24 | Promise ... source) |
|
||||
| flow.js:22:2:22:24 | Promise ... source) |
|
||||
| flow.js:24:2:24:49 | new Pro ... ource)) |
|
||||
| flow.js:26:2:26:49 | new Pro ... ource)) |
|
||||
| flow.js:28:2:28:23 | Promise ... ("foo") |
|
||||
| flow.js:28:2:28:41 | Promise ... source) |
|
||||
| flow.js:30:2:30:24 | Promise ... source) |
|
||||
| flow.js:30:2:30:41 | Promise ... "foo") |
|
||||
| flow.js:32:2:32:49 | new Pro ... ource)) |
|
||||
| flow.js:34:2:34:24 | Promise ... source) |
|
||||
| flow.js:34:2:34:41 | Promise ... => { }) |
|
||||
| flow.js:36:11:36:33 | Promise ... source) |
|
||||
| flow.js:37:11:37:29 | p5.catch(() => { }) |
|
||||
| flow.js:40:2:40:49 | new Pro ... ource)) |
|
||||
| flow.js:40:2:40:65 | new Pro ... => { }) |
|
||||
| flow.js:42:2:42:49 | new Pro ... ource)) |
|
||||
| flow.js:42:2:42:76 | new Pro ... => { }) |
|
||||
| flow.js:44:2:44:24 | Promise ... source) |
|
||||
| flow.js:44:2:44:41 | Promise ... => { }) |
|
||||
| flow.js:44:2:44:58 | Promise ... => { }) |
|
||||
| flow.js:44:2:44:75 | Promise ... => { }) |
|
||||
| flow.js:46:2:46:24 | Promise ... source) |
|
||||
| flow.js:46:2:46:43 | Promise ... => { }) |
|
||||
| flow.js:48:2:48:36 | new Pro ... urce }) |
|
||||
| flow.js:53:2:53:22 | createP ... source) |
|
||||
| flow.js:55:11:55:58 | new Pro ... ource)) |
|
||||
| flow.js:56:11:56:27 | p8.then(() => {}) |
|
||||
| flow.js:57:12:57:31 | p9.finally(() => {}) |
|
||||
| flow.js:60:12:60:59 | new Pro ... ource)) |
|
||||
| flow.js:61:12:61:29 | p11.then(() => {}) |
|
||||
| flow.js:65:9:65:56 | new Pro ... ource)) |
|
||||
| flow.js:74:10:74:57 | new Pro ... ource)) |
|
||||
| flow.js:76:2:76:17 | chainedPromise() |
|
||||
| flow.js:76:2:76:32 | chained ... => {}) |
|
||||
| flow.js:86:23:86:70 | new Pro ... ource)) |
|
||||
| flow.js:89:3:89:27 | ("foo", ... => {}) |
|
||||
| flow.js:91:21:91:68 | new Pro ... ource)) |
|
||||
| flow.js:100:28:100:75 | new Pro ... ource)) |
|
||||
| flow.js:103:2:103:48 | new Pro ... "BLA")) |
|
||||
| flow.js:103:2:103:76 | new Pro ... ource}) |
|
||||
| flow.js:105:2:105:48 | new Pro ... "BLA")) |
|
||||
| flow.js:105:2:105:77 | new Pro ... ource}) |
|
||||
| flow.js:107:17:107:64 | new Pro ... ource)) |
|
||||
| flow.js:109:2:109:48 | new Pro ... "BLA")) |
|
||||
| flow.js:109:2:109:71 | new Pro ... jected) |
|
||||
| flow.js:111:2:111:48 | new Pro ... "BLA")) |
|
||||
| flow.js:111:2:111:69 | new Pro ... jected) |
|
||||
| flow.js:113:2:113:48 | new Pro ... "BLA")) |
|
||||
| flow.js:113:2:113:69 | new Pro ... jected) |
|
||||
| flow.js:117:2:117:48 | new Pro ... "BLA")) |
|
||||
| flow.js:117:2:117:69 | new Pro ... solved) |
|
||||
| flow.js:119:2:119:48 | new Pro ... "BLA")) |
|
||||
| flow.js:119:2:119:69 | new Pro ... solved) |
|
||||
| flow.js:121:2:121:21 | Promise.resolve(123) |
|
||||
| flow.js:121:2:121:41 | Promise ... solved) |
|
||||
| flow.js:123:2:123:21 | Promise.resolve(123) |
|
||||
| flow.js:123:2:123:41 | Promise ... solved) |
|
||||
| flow.js:125:2:125:21 | Promise.resolve(123) |
|
||||
| flow.js:125:2:125:41 | Promise ... jected) |
|
||||
| flow.js:127:2:127:21 | Promise.resolve(123) |
|
||||
| flow.js:127:2:127:41 | Promise ... jected) |
|
||||
| flow.js:129:2:129:52 | new Pro ... olved)) |
|
||||
| flow.js:131:2:131:26 | Promise ... solved) |
|
||||
| interflow.js:6:3:6:25 | loadScr ... urce()) |
|
||||
| interflow.js:6:3:7:26 | loadScr ... () { }) |
|
||||
| interflow.js:6:3:8:26 | loadScr ... () { }) |
|
||||
| interflow.js:11:12:15:6 | new Pro ... \\n }) |
|
||||
| promises.js:3:17:5:4 | new Pro ... );\\n }) |
|
||||
| promises.js:10:18:17:4 | new Pro ... );\\n }) |
|
||||
| promises.js:33:19:35:6 | new Pro ... \\n }) |
|
||||
|
||||
132
javascript/ql/test/library-tests/Promises/flow.js
Normal file
132
javascript/ql/test/library-tests/Promises/flow.js
Normal file
@@ -0,0 +1,132 @@
|
||||
(async function () {
|
||||
var source = "source";
|
||||
|
||||
var p1 = Promise.resolve(source);
|
||||
sink(await p1); // NOT OK
|
||||
|
||||
var p2 = new Promise((resolve, reject) => resolve(source));
|
||||
sink(await p2); // NOT OK
|
||||
|
||||
var p3 = new Promise((resolve, reject) => reject(source));
|
||||
sink(await p3); // OK!
|
||||
|
||||
var p4 = new Promise((resolve, reject) => reject(source));
|
||||
try {
|
||||
var foo = await p4;
|
||||
} catch (e) {
|
||||
sink(e); // NOT OK!
|
||||
}
|
||||
|
||||
Promise.resolve(source).then(x => sink(x)); // NOT OK!
|
||||
|
||||
Promise.resolve(source).then(x => foo(x), y => sink(y)); // OK!
|
||||
|
||||
new Promise((resolve, reject) => reject(source)).then(x => sink(x)); // OK!
|
||||
|
||||
new Promise((resolve, reject) => reject(source)).then(x => foo(x), y => sink(y)); // NOT OK!
|
||||
|
||||
Promise.resolve("foo").then(x => source).then(z => sink(z)); // NOT OK!
|
||||
|
||||
Promise.resolve(source).then(x => "foo").then(z => sink(z)); // OK!
|
||||
|
||||
new Promise((resolve, reject) => reject(source)).catch(x => sink(x)); // NOT OK!
|
||||
|
||||
Promise.resolve(source).catch(() => { }).then(a => sink(a)); // NOT OK!
|
||||
|
||||
var p5 = Promise.resolve(source);
|
||||
var p6 = p5.catch(() => { });
|
||||
var p7 = p6.then(a => sink(a)); // NOT OK!
|
||||
|
||||
new Promise((resolve, reject) => reject(source)).then(() => { }).catch(x => sink(x)); // NOT OK!
|
||||
|
||||
new Promise((resolve, reject) => reject(source)).then(() => { }, () => { }).catch(x => sink(x)); // OK!
|
||||
|
||||
Promise.resolve(source).catch(() => { }).catch(() => { }).catch(() => { }).then(a => sink(a)); // NOT OK!
|
||||
|
||||
Promise.resolve(source).finally(() => { }).then(a => sink(a)); // NOT OK!
|
||||
|
||||
new Promise(() => { throw source }).catch(x => sink(x)); // NOT OK!
|
||||
|
||||
function createPromise(src) {
|
||||
return Promise.resolve(src);
|
||||
}
|
||||
createPromise(source).then(v => sink(v)); // NOT OK!
|
||||
|
||||
var p8 = new Promise((resolve, reject) => reject(source));
|
||||
var p9 = p8.then(() => {});
|
||||
var p10 = p9.finally(() => {});
|
||||
p10.catch((x) => sink(x)); // NOT OK!
|
||||
|
||||
var p11 = new Promise((resolve, reject) => reject(source));
|
||||
var p12 = p11.then(() => {});
|
||||
p12.catch(x => sink(x)); // NOT OK!
|
||||
|
||||
async function throws() {
|
||||
await new Promise((resolve, reject) => reject(source));
|
||||
}
|
||||
try {
|
||||
throws();
|
||||
} catch(e) {
|
||||
sink(e); // NOT OK!
|
||||
}
|
||||
|
||||
function chainedPromise() {
|
||||
return new Promise((resolve, reject) => reject(source)).then(() => {});
|
||||
}
|
||||
chainedPromise().then(() => {}).catch(e => sink(e)); // NOT OK!
|
||||
|
||||
function leaksResolvedPromise(p) {
|
||||
p.then(x => sink(x)); // NOT OK!
|
||||
}
|
||||
leaksResolvedPromise(Promise.resolve(source));
|
||||
|
||||
function leaksRejectedPromise(p) {
|
||||
p.catch(e => sink(e)); // NOT OK!
|
||||
}
|
||||
leaksRejectedPromise(new Promise((resolve, reject) => reject(source)));
|
||||
|
||||
function leaksRejectedAgain(p) {
|
||||
("foo", p).then(() => {}).catch(e => sink(e)); // NOT OK!
|
||||
}
|
||||
leaksRejectedAgain(new Promise((resolve, reject) => reject(source)).then(() => {}));
|
||||
|
||||
async function returnsRejected(p) {
|
||||
try {
|
||||
await p;
|
||||
} catch(e) {
|
||||
return e;
|
||||
}
|
||||
}
|
||||
var foo = returnsRejected(new Promise((resolve, reject) => reject(source)));
|
||||
sink(foo); // NOT OK!
|
||||
|
||||
new Promise((resolve, reject) => reject("BLA")).catch(x => {return source}).then(x => sink(x)); // NOT OK
|
||||
|
||||
new Promise((resolve, reject) => reject("BLA")).finally(x => {throw source}).catch(x => sink(x)); // NOT OK
|
||||
|
||||
var rejected = new Promise((resolve, reject) => reject(source));
|
||||
|
||||
new Promise((resolve, reject) => reject("BLA")).finally(x => rejected).catch(x => sink(x)); // NOT OK
|
||||
|
||||
new Promise((resolve, reject) => reject("BLA")).catch(x => rejected).then(x => sink(x)) // OK
|
||||
|
||||
new Promise((resolve, reject) => reject("BLA")).catch(x => rejected).catch(x => sink(x)) // NOT OK
|
||||
|
||||
var resolved = Promise.resolve(source);
|
||||
|
||||
new Promise((resolve, reject) => reject("BLA")).catch(x => resolved).catch(x => sink(x)) // OK
|
||||
|
||||
new Promise((resolve, reject) => reject("BLA")).catch(x => resolved).then(x => sink(x)) // NOT OK
|
||||
|
||||
Promise.resolve(123).then(x => resolved).catch(x => sink(x)) // OK
|
||||
|
||||
Promise.resolve(123).then(x => resolved).then(x => sink(x)) // NOT OK
|
||||
|
||||
Promise.resolve(123).then(x => rejected).catch(x => sink(x)) // NOT OK
|
||||
|
||||
Promise.resolve(123).then(x => rejected).then(x => sink(x)) // OK
|
||||
|
||||
new Promise((resolve, reject) => resolve(resolved)).then(x => sink(x)); // NOT OK
|
||||
|
||||
Promise.resolve(resolved).then(x => sink(x)); // NOT OK
|
||||
})();
|
||||
34
javascript/ql/test/library-tests/Promises/flow.qll
Normal file
34
javascript/ql/test/library-tests/Promises/flow.qll
Normal file
@@ -0,0 +1,34 @@
|
||||
import javascript
|
||||
|
||||
class Configuration extends DataFlow::Configuration {
|
||||
Configuration() { this = "PromiseDataFlowFlowTestingConfig" }
|
||||
|
||||
override predicate isSource(DataFlow::Node source) {
|
||||
source.getEnclosingExpr().getStringValue() = "source"
|
||||
}
|
||||
|
||||
override predicate isSink(DataFlow::Node sink) {
|
||||
any(DataFlow::InvokeNode call | call.getCalleeName() = "sink").getAnArgument() = sink
|
||||
}
|
||||
}
|
||||
|
||||
class TaintConfig extends TaintTracking::Configuration {
|
||||
TaintConfig() { this = "PromiseTaintFlowTestingConfig" }
|
||||
|
||||
override predicate isSource(DataFlow::Node source) {
|
||||
source.getEnclosingExpr().getStringValue() = "source"
|
||||
}
|
||||
|
||||
override predicate isSink(DataFlow::Node sink) {
|
||||
any(DataFlow::InvokeNode call | call.getCalleeName() = "sink").getAnArgument() = sink
|
||||
}
|
||||
}
|
||||
|
||||
query predicate flow(DataFlow::Node source, DataFlow::Node sink) {
|
||||
any(Configuration c).hasFlow(source, sink)
|
||||
}
|
||||
|
||||
query predicate exclusiveTaintFlow(DataFlow::Node source, DataFlow::Node sink) {
|
||||
not any(Configuration c).hasFlow(source, sink) and
|
||||
any(TaintConfig c).hasFlow(source, sink)
|
||||
}
|
||||
20
javascript/ql/test/library-tests/Promises/interflow.js
Normal file
20
javascript/ql/test/library-tests/Promises/interflow.js
Normal file
@@ -0,0 +1,20 @@
|
||||
(function () {
|
||||
function getSource() {
|
||||
var source = "source"; // step 1
|
||||
return source; // step 2
|
||||
}
|
||||
loadScript(getSource()) // step 3
|
||||
.then(function () { })
|
||||
.then(function () { })
|
||||
.catch(handleError);
|
||||
function loadScript(src) { // step 4 (is summarized)
|
||||
return new Promise(function (resolve, reject) {
|
||||
setTimeout(function (error) {
|
||||
reject(new Error('Blah: ' + src)); // step 5
|
||||
}, 1000);
|
||||
});
|
||||
}
|
||||
function handleError(error) { // step 6
|
||||
sink(error); // step 7
|
||||
}
|
||||
})();
|
||||
1
javascript/ql/test/library-tests/Promises/options
Normal file
1
javascript/ql/test/library-tests/Promises/options
Normal file
@@ -0,0 +1 @@
|
||||
semmle-extractor-options: --experimental
|
||||
@@ -1,38 +1,222 @@
|
||||
test_ResolvedPromiseDefinition
|
||||
| flow.js:4:11:4:33 | Promise ... source) | flow.js:4:27:4:32 | source |
|
||||
| flow.js:20:2:20:24 | Promise ... source) | flow.js:20:18:20:23 | source |
|
||||
| flow.js:22:2:22:24 | Promise ... source) | flow.js:22:18:22:23 | source |
|
||||
| flow.js:28:2:28:23 | Promise ... ("foo") | flow.js:28:18:28:22 | "foo" |
|
||||
| flow.js:30:2:30:24 | Promise ... source) | flow.js:30:18:30:23 | source |
|
||||
| flow.js:34:2:34:24 | Promise ... source) | flow.js:34:18:34:23 | source |
|
||||
| flow.js:36:11:36:33 | Promise ... source) | flow.js:36:27:36:32 | source |
|
||||
| flow.js:44:2:44:24 | Promise ... source) | flow.js:44:18:44:23 | source |
|
||||
| flow.js:46:2:46:24 | Promise ... source) | flow.js:46:18:46:23 | source |
|
||||
| flow.js:51:10:51:29 | Promise.resolve(src) | flow.js:51:26:51:28 | src |
|
||||
| flow.js:81:23:81:45 | Promise ... source) | flow.js:81:39:81:44 | source |
|
||||
| flow.js:115:17:115:39 | Promise ... source) | flow.js:115:33:115:38 | source |
|
||||
| flow.js:121:2:121:21 | Promise.resolve(123) | flow.js:121:18:121:20 | 123 |
|
||||
| flow.js:123:2:123:21 | Promise.resolve(123) | flow.js:123:18:123:20 | 123 |
|
||||
| flow.js:125:2:125:21 | Promise.resolve(123) | flow.js:125:18:125:20 | 123 |
|
||||
| flow.js:127:2:127:21 | Promise.resolve(123) | flow.js:127:18:127:20 | 123 |
|
||||
| flow.js:131:2:131:26 | Promise ... solved) | flow.js:131:18:131:25 | resolved |
|
||||
| promises.js:53:19:53:41 | Promise ... source) | promises.js:53:35:53:40 | source |
|
||||
| promises.js:62:19:62:41 | Promise ... source) | promises.js:62:35:62:40 | source |
|
||||
| promises.js:71:5:71:27 | Promise ... source) | promises.js:71:21:71:26 | source |
|
||||
test_PromiseDefinition_getARejectHandler
|
||||
| flow.js:26:2:26:49 | new Pro ... ource)) | flow.js:26:69:26:80 | y => sink(y) |
|
||||
| flow.js:32:2:32:49 | new Pro ... ource)) | flow.js:32:57:32:68 | x => sink(x) |
|
||||
| flow.js:42:2:42:49 | new Pro ... ource)) | flow.js:42:67:42:75 | () => { } |
|
||||
| flow.js:48:2:48:36 | new Pro ... urce }) | flow.js:48:44:48:55 | x => sink(x) |
|
||||
| flow.js:103:2:103:48 | new Pro ... "BLA")) | flow.js:103:56:103:75 | x => {return source} |
|
||||
| flow.js:105:2:105:48 | new Pro ... "BLA")) | flow.js:105:58:105:76 | x => {throw source} |
|
||||
| flow.js:109:2:109:48 | new Pro ... "BLA")) | flow.js:109:58:109:70 | x => rejected |
|
||||
| flow.js:111:2:111:48 | new Pro ... "BLA")) | flow.js:111:56:111:68 | x => rejected |
|
||||
| flow.js:113:2:113:48 | new Pro ... "BLA")) | flow.js:113:56:113:68 | x => rejected |
|
||||
| flow.js:117:2:117:48 | new Pro ... "BLA")) | flow.js:117:56:117:68 | x => resolved |
|
||||
| flow.js:119:2:119:48 | new Pro ... "BLA")) | flow.js:119:56:119:68 | x => resolved |
|
||||
| promises.js:10:18:17:4 | new Pro ... );\\n }) | promises.js:20:6:22:3 | (v) => ... v;\\n } |
|
||||
| promises.js:10:18:17:4 | new Pro ... );\\n }) | promises.js:23:18:25:3 | (v) => ... v;\\n } |
|
||||
| promises.js:10:18:17:4 | new Pro ... );\\n }) | promises.js:26:20:28:3 | (v) => ... v;\\n } |
|
||||
test_PromiseDefinition_getExecutor
|
||||
| flow.js:7:11:7:59 | new Pro ... ource)) | flow.js:7:23:7:58 | (resolv ... source) |
|
||||
| flow.js:10:11:10:58 | new Pro ... ource)) | flow.js:10:23:10:57 | (resolv ... source) |
|
||||
| flow.js:13:11:13:58 | new Pro ... ource)) | flow.js:13:23:13:57 | (resolv ... source) |
|
||||
| flow.js:24:2:24:49 | new Pro ... ource)) | flow.js:24:14:24:48 | (resolv ... source) |
|
||||
| flow.js:26:2:26:49 | new Pro ... ource)) | flow.js:26:14:26:48 | (resolv ... source) |
|
||||
| flow.js:32:2:32:49 | new Pro ... ource)) | flow.js:32:14:32:48 | (resolv ... source) |
|
||||
| flow.js:40:2:40:49 | new Pro ... ource)) | flow.js:40:14:40:48 | (resolv ... source) |
|
||||
| flow.js:42:2:42:49 | new Pro ... ource)) | flow.js:42:14:42:48 | (resolv ... source) |
|
||||
| flow.js:48:2:48:36 | new Pro ... urce }) | flow.js:48:14:48:35 | () => { ... ource } |
|
||||
| flow.js:55:11:55:58 | new Pro ... ource)) | flow.js:55:23:55:57 | (resolv ... source) |
|
||||
| flow.js:60:12:60:59 | new Pro ... ource)) | flow.js:60:24:60:58 | (resolv ... source) |
|
||||
| flow.js:65:9:65:56 | new Pro ... ource)) | flow.js:65:21:65:55 | (resolv ... source) |
|
||||
| flow.js:74:10:74:57 | new Pro ... ource)) | flow.js:74:22:74:56 | (resolv ... source) |
|
||||
| flow.js:86:23:86:70 | new Pro ... ource)) | flow.js:86:35:86:69 | (resolv ... source) |
|
||||
| flow.js:91:21:91:68 | new Pro ... ource)) | flow.js:91:33:91:67 | (resolv ... source) |
|
||||
| flow.js:100:28:100:75 | new Pro ... ource)) | flow.js:100:40:100:74 | (resolv ... source) |
|
||||
| flow.js:103:2:103:48 | new Pro ... "BLA")) | flow.js:103:14:103:47 | (resolv ... ("BLA") |
|
||||
| flow.js:105:2:105:48 | new Pro ... "BLA")) | flow.js:105:14:105:47 | (resolv ... ("BLA") |
|
||||
| flow.js:107:17:107:64 | new Pro ... ource)) | flow.js:107:29:107:63 | (resolv ... source) |
|
||||
| flow.js:109:2:109:48 | new Pro ... "BLA")) | flow.js:109:14:109:47 | (resolv ... ("BLA") |
|
||||
| flow.js:111:2:111:48 | new Pro ... "BLA")) | flow.js:111:14:111:47 | (resolv ... ("BLA") |
|
||||
| flow.js:113:2:113:48 | new Pro ... "BLA")) | flow.js:113:14:113:47 | (resolv ... ("BLA") |
|
||||
| flow.js:117:2:117:48 | new Pro ... "BLA")) | flow.js:117:14:117:47 | (resolv ... ("BLA") |
|
||||
| flow.js:119:2:119:48 | new Pro ... "BLA")) | flow.js:119:14:119:47 | (resolv ... ("BLA") |
|
||||
| flow.js:129:2:129:52 | new Pro ... olved)) | flow.js:129:14:129:51 | (resolv ... solved) |
|
||||
| interflow.js:11:12:15:6 | new Pro ... \\n }) | interflow.js:11:24:15:5 | functio ... ;\\n } |
|
||||
| promises.js:3:17:5:4 | new Pro ... );\\n }) | promises.js:3:29:5:3 | functio ... e);\\n } |
|
||||
| promises.js:10:18:17:4 | new Pro ... );\\n }) | promises.js:10:30:17:3 | (res, r ... e);\\n } |
|
||||
| promises.js:33:19:35:6 | new Pro ... \\n }) | promises.js:33:31:35:5 | functio ... ;\\n } |
|
||||
| promises.js:43:19:45:6 | Q.Promi ... \\n }) | promises.js:43:29:45:5 | functio ... ;\\n } |
|
||||
test_PromiseDefinition_getAFinallyHandler
|
||||
| flow.js:105:2:105:48 | new Pro ... "BLA")) | flow.js:105:58:105:76 | x => {throw source} |
|
||||
| flow.js:109:2:109:48 | new Pro ... "BLA")) | flow.js:109:58:109:70 | x => rejected |
|
||||
| promises.js:10:18:17:4 | new Pro ... );\\n }) | promises.js:26:20:28:3 | (v) => ... v;\\n } |
|
||||
test_PromiseDefinition
|
||||
| flow.js:7:11:7:59 | new Pro ... ource)) |
|
||||
| flow.js:10:11:10:58 | new Pro ... ource)) |
|
||||
| flow.js:13:11:13:58 | new Pro ... ource)) |
|
||||
| flow.js:24:2:24:49 | new Pro ... ource)) |
|
||||
| flow.js:26:2:26:49 | new Pro ... ource)) |
|
||||
| flow.js:32:2:32:49 | new Pro ... ource)) |
|
||||
| flow.js:40:2:40:49 | new Pro ... ource)) |
|
||||
| flow.js:42:2:42:49 | new Pro ... ource)) |
|
||||
| flow.js:48:2:48:36 | new Pro ... urce }) |
|
||||
| flow.js:55:11:55:58 | new Pro ... ource)) |
|
||||
| flow.js:60:12:60:59 | new Pro ... ource)) |
|
||||
| flow.js:65:9:65:56 | new Pro ... ource)) |
|
||||
| flow.js:74:10:74:57 | new Pro ... ource)) |
|
||||
| flow.js:86:23:86:70 | new Pro ... ource)) |
|
||||
| flow.js:91:21:91:68 | new Pro ... ource)) |
|
||||
| flow.js:100:28:100:75 | new Pro ... ource)) |
|
||||
| flow.js:103:2:103:48 | new Pro ... "BLA")) |
|
||||
| flow.js:105:2:105:48 | new Pro ... "BLA")) |
|
||||
| flow.js:107:17:107:64 | new Pro ... ource)) |
|
||||
| flow.js:109:2:109:48 | new Pro ... "BLA")) |
|
||||
| flow.js:111:2:111:48 | new Pro ... "BLA")) |
|
||||
| flow.js:113:2:113:48 | new Pro ... "BLA")) |
|
||||
| flow.js:117:2:117:48 | new Pro ... "BLA")) |
|
||||
| flow.js:119:2:119:48 | new Pro ... "BLA")) |
|
||||
| flow.js:129:2:129:52 | new Pro ... olved)) |
|
||||
| interflow.js:11:12:15:6 | new Pro ... \\n }) |
|
||||
| promises.js:3:17:5:4 | new Pro ... );\\n }) |
|
||||
| promises.js:10:18:17:4 | new Pro ... );\\n }) |
|
||||
| promises.js:33:19:35:6 | new Pro ... \\n }) |
|
||||
| promises.js:43:19:45:6 | Q.Promi ... \\n }) |
|
||||
test_PromiseDefinition_getAResolveHandler
|
||||
| flow.js:24:2:24:49 | new Pro ... ource)) | flow.js:24:56:24:67 | x => sink(x) |
|
||||
| flow.js:26:2:26:49 | new Pro ... ource)) | flow.js:26:56:26:66 | x => foo(x) |
|
||||
| flow.js:40:2:40:49 | new Pro ... ource)) | flow.js:40:56:40:64 | () => { } |
|
||||
| flow.js:42:2:42:49 | new Pro ... ource)) | flow.js:42:56:42:64 | () => { } |
|
||||
| flow.js:55:11:55:58 | new Pro ... ource)) | flow.js:56:19:56:26 | () => {} |
|
||||
| flow.js:60:12:60:59 | new Pro ... ource)) | flow.js:61:21:61:28 | () => {} |
|
||||
| flow.js:74:10:74:57 | new Pro ... ource)) | flow.js:74:64:74:71 | () => {} |
|
||||
| flow.js:91:21:91:68 | new Pro ... ource)) | flow.js:91:75:91:82 | () => {} |
|
||||
| flow.js:105:2:105:48 | new Pro ... "BLA")) | flow.js:105:58:105:76 | x => {throw source} |
|
||||
| flow.js:109:2:109:48 | new Pro ... "BLA")) | flow.js:109:58:109:70 | x => rejected |
|
||||
| flow.js:129:2:129:52 | new Pro ... olved)) | flow.js:129:59:129:70 | x => sink(x) |
|
||||
| promises.js:3:17:5:4 | new Pro ... );\\n }) | promises.js:6:16:8:3 | functio ... al;\\n } |
|
||||
| promises.js:10:18:17:4 | new Pro ... );\\n }) | promises.js:18:17:20:3 | (v) => ... v;\\n } |
|
||||
| promises.js:10:18:17:4 | new Pro ... );\\n }) | promises.js:26:20:28:3 | (v) => ... v;\\n } |
|
||||
| promises.js:33:19:35:6 | new Pro ... \\n }) | promises.js:36:18:38:5 | functio ... ;\\n } |
|
||||
| promises.js:43:19:45:6 | Q.Promi ... \\n }) | promises.js:46:18:48:5 | functio ... ;\\n } |
|
||||
test_PromiseDefinition_getRejectParameter
|
||||
| flow.js:7:11:7:59 | new Pro ... ource)) | flow.js:7:33:7:38 | reject |
|
||||
| flow.js:10:11:10:58 | new Pro ... ource)) | flow.js:10:33:10:38 | reject |
|
||||
| flow.js:13:11:13:58 | new Pro ... ource)) | flow.js:13:33:13:38 | reject |
|
||||
| flow.js:24:2:24:49 | new Pro ... ource)) | flow.js:24:24:24:29 | reject |
|
||||
| flow.js:26:2:26:49 | new Pro ... ource)) | flow.js:26:24:26:29 | reject |
|
||||
| flow.js:32:2:32:49 | new Pro ... ource)) | flow.js:32:24:32:29 | reject |
|
||||
| flow.js:40:2:40:49 | new Pro ... ource)) | flow.js:40:24:40:29 | reject |
|
||||
| flow.js:42:2:42:49 | new Pro ... ource)) | flow.js:42:24:42:29 | reject |
|
||||
| flow.js:55:11:55:58 | new Pro ... ource)) | flow.js:55:33:55:38 | reject |
|
||||
| flow.js:60:12:60:59 | new Pro ... ource)) | flow.js:60:34:60:39 | reject |
|
||||
| flow.js:65:9:65:56 | new Pro ... ource)) | flow.js:65:31:65:36 | reject |
|
||||
| flow.js:74:10:74:57 | new Pro ... ource)) | flow.js:74:32:74:37 | reject |
|
||||
| flow.js:86:23:86:70 | new Pro ... ource)) | flow.js:86:45:86:50 | reject |
|
||||
| flow.js:91:21:91:68 | new Pro ... ource)) | flow.js:91:43:91:48 | reject |
|
||||
| flow.js:100:28:100:75 | new Pro ... ource)) | flow.js:100:50:100:55 | reject |
|
||||
| flow.js:103:2:103:48 | new Pro ... "BLA")) | flow.js:103:24:103:29 | reject |
|
||||
| flow.js:105:2:105:48 | new Pro ... "BLA")) | flow.js:105:24:105:29 | reject |
|
||||
| flow.js:107:17:107:64 | new Pro ... ource)) | flow.js:107:39:107:44 | reject |
|
||||
| flow.js:109:2:109:48 | new Pro ... "BLA")) | flow.js:109:24:109:29 | reject |
|
||||
| flow.js:111:2:111:48 | new Pro ... "BLA")) | flow.js:111:24:111:29 | reject |
|
||||
| flow.js:113:2:113:48 | new Pro ... "BLA")) | flow.js:113:24:113:29 | reject |
|
||||
| flow.js:117:2:117:48 | new Pro ... "BLA")) | flow.js:117:24:117:29 | reject |
|
||||
| flow.js:119:2:119:48 | new Pro ... "BLA")) | flow.js:119:24:119:29 | reject |
|
||||
| flow.js:129:2:129:52 | new Pro ... olved)) | flow.js:129:24:129:29 | reject |
|
||||
| interflow.js:11:12:15:6 | new Pro ... \\n }) | interflow.js:11:43:11:48 | reject |
|
||||
| promises.js:3:17:5:4 | new Pro ... );\\n }) | promises.js:3:48:3:53 | reject |
|
||||
| promises.js:10:18:17:4 | new Pro ... );\\n }) | promises.js:10:36:10:38 | rej |
|
||||
| promises.js:33:19:35:6 | new Pro ... \\n }) | promises.js:33:50:33:55 | reject |
|
||||
| promises.js:43:19:45:6 | Q.Promi ... \\n }) | promises.js:43:48:43:53 | reject |
|
||||
test_PromiseDefinition_getResolveParameter
|
||||
| flow.js:7:11:7:59 | new Pro ... ource)) | flow.js:7:24:7:30 | resolve |
|
||||
| flow.js:10:11:10:58 | new Pro ... ource)) | flow.js:10:24:10:30 | resolve |
|
||||
| flow.js:13:11:13:58 | new Pro ... ource)) | flow.js:13:24:13:30 | resolve |
|
||||
| flow.js:24:2:24:49 | new Pro ... ource)) | flow.js:24:15:24:21 | resolve |
|
||||
| flow.js:26:2:26:49 | new Pro ... ource)) | flow.js:26:15:26:21 | resolve |
|
||||
| flow.js:32:2:32:49 | new Pro ... ource)) | flow.js:32:15:32:21 | resolve |
|
||||
| flow.js:40:2:40:49 | new Pro ... ource)) | flow.js:40:15:40:21 | resolve |
|
||||
| flow.js:42:2:42:49 | new Pro ... ource)) | flow.js:42:15:42:21 | resolve |
|
||||
| flow.js:55:11:55:58 | new Pro ... ource)) | flow.js:55:24:55:30 | resolve |
|
||||
| flow.js:60:12:60:59 | new Pro ... ource)) | flow.js:60:25:60:31 | resolve |
|
||||
| flow.js:65:9:65:56 | new Pro ... ource)) | flow.js:65:22:65:28 | resolve |
|
||||
| flow.js:74:10:74:57 | new Pro ... ource)) | flow.js:74:23:74:29 | resolve |
|
||||
| flow.js:86:23:86:70 | new Pro ... ource)) | flow.js:86:36:86:42 | resolve |
|
||||
| flow.js:91:21:91:68 | new Pro ... ource)) | flow.js:91:34:91:40 | resolve |
|
||||
| flow.js:100:28:100:75 | new Pro ... ource)) | flow.js:100:41:100:47 | resolve |
|
||||
| flow.js:103:2:103:48 | new Pro ... "BLA")) | flow.js:103:15:103:21 | resolve |
|
||||
| flow.js:105:2:105:48 | new Pro ... "BLA")) | flow.js:105:15:105:21 | resolve |
|
||||
| flow.js:107:17:107:64 | new Pro ... ource)) | flow.js:107:30:107:36 | resolve |
|
||||
| flow.js:109:2:109:48 | new Pro ... "BLA")) | flow.js:109:15:109:21 | resolve |
|
||||
| flow.js:111:2:111:48 | new Pro ... "BLA")) | flow.js:111:15:111:21 | resolve |
|
||||
| flow.js:113:2:113:48 | new Pro ... "BLA")) | flow.js:113:15:113:21 | resolve |
|
||||
| flow.js:117:2:117:48 | new Pro ... "BLA")) | flow.js:117:15:117:21 | resolve |
|
||||
| flow.js:119:2:119:48 | new Pro ... "BLA")) | flow.js:119:15:119:21 | resolve |
|
||||
| flow.js:129:2:129:52 | new Pro ... olved)) | flow.js:129:15:129:21 | resolve |
|
||||
| interflow.js:11:12:15:6 | new Pro ... \\n }) | interflow.js:11:34:11:40 | resolve |
|
||||
| promises.js:3:17:5:4 | new Pro ... );\\n }) | promises.js:3:39:3:45 | resolve |
|
||||
| promises.js:10:18:17:4 | new Pro ... );\\n }) | promises.js:10:31:10:33 | res |
|
||||
| promises.js:33:19:35:6 | new Pro ... \\n }) | promises.js:33:41:33:47 | resolve |
|
||||
| promises.js:43:19:45:6 | Q.Promi ... \\n }) | promises.js:43:39:43:45 | resolve |
|
||||
test_PromiseDefinition_getACatchHandler
|
||||
| flow.js:32:2:32:49 | new Pro ... ource)) | flow.js:32:57:32:68 | x => sink(x) |
|
||||
| flow.js:48:2:48:36 | new Pro ... urce }) | flow.js:48:44:48:55 | x => sink(x) |
|
||||
| flow.js:103:2:103:48 | new Pro ... "BLA")) | flow.js:103:56:103:75 | x => {return source} |
|
||||
| flow.js:111:2:111:48 | new Pro ... "BLA")) | flow.js:111:56:111:68 | x => rejected |
|
||||
| flow.js:113:2:113:48 | new Pro ... "BLA")) | flow.js:113:56:113:68 | x => rejected |
|
||||
| flow.js:117:2:117:48 | new Pro ... "BLA")) | flow.js:117:56:117:68 | x => resolved |
|
||||
| flow.js:119:2:119:48 | new Pro ... "BLA")) | flow.js:119:56:119:68 | x => resolved |
|
||||
| promises.js:10:18:17:4 | new Pro ... );\\n }) | promises.js:23:18:25:3 | (v) => ... v;\\n } |
|
||||
flow
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:5:7:5:14 | await p1 |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:8:7:8:14 | await p2 |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:17:8:17:8 | e |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:20:41:20:41 | x |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:26:79:26:79 | y |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:28:58:28:58 | z |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:32:67:32:67 | x |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:34:58:34:58 | a |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:38:29:38:29 | a |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:40:83:40:83 | x |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:44:92:44:92 | a |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:46:60:46:60 | a |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:48:54:48:54 | x |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:53:39:53:39 | v |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:58:24:58:24 | x |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:62:22:62:22 | x |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:70:8:70:8 | e |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:76:50:76:50 | e |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:79:20:79:20 | x |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:84:21:84:21 | e |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:89:45:89:45 | e |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:101:7:101:9 | foo |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:103:93:103:93 | x |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:105:95:105:95 | x |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:109:89:109:89 | x |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:113:87:113:87 | x |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:119:86:119:86 | x |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:123:58:123:58 | x |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:125:59:125:59 | x |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:129:69:129:69 | x |
|
||||
| flow.js:2:15:2:22 | "source" | flow.js:131:43:131:43 | x |
|
||||
exclusiveTaintFlow
|
||||
| interflow.js:3:18:3:25 | "source" | interflow.js:18:10:18:14 | error |
|
||||
|
||||
@@ -7,3 +7,4 @@ import PromiseDefinition_getAResolveHandler
|
||||
import PromiseDefinition_getRejectParameter
|
||||
import PromiseDefinition_getResolveParameter
|
||||
import PromiseDefinition_getACatchHandler
|
||||
import flow
|
||||
Reference in New Issue
Block a user