Merge remote-tracking branch 'upstream/main' into incomplete-hostname

This commit is contained in:
Arthur Baars
2022-03-16 12:31:12 +01:00
1166 changed files with 65711 additions and 51908 deletions

View File

@@ -1,3 +0,0 @@
import javascript
query predicate test_AccessorMethods(AccessorMethodDefinition amd) { any() }

View File

@@ -1,3 +0,0 @@
import javascript
query predicate test_ClassDefinition_getName(ClassDefinition cd, string res) { res = cd.getName() }

View File

@@ -1,5 +0,0 @@
import javascript
query predicate test_ClassDefinition_getSuperClass(ClassDefinition cd, Expr res) {
res = cd.getSuperClass()
}

View File

@@ -1,3 +0,0 @@
import javascript
query predicate test_ClassDefinitions(ClassDefinition cd) { any() }

View File

@@ -1,17 +0,0 @@
import javascript
class Configuration extends DataFlow::Configuration {
Configuration() { this = "ClassDataFlowTestingConfig" }
override predicate isSource(DataFlow::Node source) {
source.getEnclosingExpr().(StringLiteral).getValue().toLowerCase() = "source"
}
override predicate isSink(DataFlow::Node sink) {
any(DataFlow::CallNode call | call.getCalleeName() = "sink").getAnArgument() = sink
}
}
query predicate dataflow(DataFlow::Node pred, DataFlow::Node succ) {
any(Configuration c).hasFlow(pred, succ)
}

View File

@@ -1,5 +0,0 @@
import javascript
query predicate test_ClassNodeConstructor(DataFlow::ClassNode class_, DataFlow::FunctionNode res) {
res = class_.getConstructor()
}

View File

@@ -1,7 +0,0 @@
import javascript
query predicate test_ClassNodeInstanceMethod(
DataFlow::ClassNode class_, string name, DataFlow::FunctionNode res
) {
res = class_.getInstanceMethod(name)
}

View File

@@ -1,7 +0,0 @@
import javascript
query predicate test_ClassNodeStaticMethod(
DataFlow::ClassNode class_, string name, DataFlow::FunctionNode res
) {
res = class_.getStaticMethod(name)
}

View File

@@ -1,3 +0,0 @@
import javascript
query predicate test_ComputedMethods(MethodDefinition md) { md.isComputed() }

View File

@@ -1,3 +0,0 @@
import javascript
query predicate test_ConstructorDefinitions(ConstructorDefinition cd) { any() }

View File

@@ -1,3 +0,0 @@
import javascript
query predicate test_FieldInits(FieldDefinition field, Expr res) { res = field.getInit() }

View File

@@ -1,3 +0,0 @@
import javascript
query predicate test_Fields(FieldDefinition field, Expr res) { res = field.getNameExpr() }

View File

@@ -1,7 +0,0 @@
import javascript
query predicate test_MethodDefinitions(
MethodDefinition md, Expr res0, FunctionExpr res1, ClassDefinition res2
) {
res0 = md.getNameExpr() and res1 = md.getBody() and res2 = md.getDeclaringClass()
}

View File

@@ -1,3 +0,0 @@
import javascript
query predicate test_MethodNames(MethodDefinition md, string res) { res = md.getName() }

View File

@@ -1,3 +0,0 @@
import javascript
query predicate test_NewTargetExpr(NewTargetExpr e) { any() }

View File

@@ -1,6 +0,0 @@
import javascript
query string getAccessModifier(DataFlow::PropRef ref, Expr prop) {
prop = ref.getPropertyNameExpr() and
if ref.isPrivateField() then result = "Private" else result = "Public"
}

View File

@@ -1,3 +0,0 @@
import javascript
query predicate test_StaticMethods(MethodDefinition md) { md.isStatic() }

View File

@@ -1,3 +0,0 @@
import javascript
query predicate test_SuperExpr(SuperExpr s) { any() }

View File

@@ -1,3 +0,0 @@
import javascript
query predicate test_SyntheticConstructors(ConstructorDefinition cd) { cd.isSynthetic() }

View File

@@ -1,3 +0,0 @@
import javascript
query predicate test_getAMember(ClassDefinition c, MemberDeclaration res) { res = c.getAMember() }

View File

@@ -2,14 +2,11 @@ import javascript
import semmle.javascript.dataflow.InferredTypes
import semmle.javascript.dataflow.CustomAbstractValueDefinitions
class MyCustomAbstractValueDefinition extends CustomAbstractValueDefinition {
DataFlow::ValueNode node;
class MyCustomAbstractValueDefinition extends CustomAbstractValueDefinition, AST::ValueNode {
MyCustomAbstractValueDefinition() {
DataFlow::valueNode(this) = node and
node instanceof DataFlow::ObjectLiteralNode and
this.flow() instanceof DataFlow::ObjectLiteralNode and
exists(DataFlow::PropWrite pwn |
pwn.writes(node, "custom", any(BooleanLiteral l | l.getValue() = "true").flow())
pwn.writes(this.flow(), "custom", any(BooleanLiteral l | l.getValue() = "true").flow())
)
}

View File

@@ -1,35 +1,30 @@
| classes.js:1:1:2:1 | class Foo {\\n} | classes.js:4:1:4:3 | Foo |
| classes.js:7:5:8:5 | class L ... {\\n } | classes.js:10:5:10:12 | LocalFoo |
| es2015.js:1:10:1:11 | fn | es2015.js:2:3:2:4 | fn |
| es2015.js:5:16:5:16 | i | es2015.js:5:32:5:32 | i |
| es2015.js:5:16:5:16 | i | es2015.js:5:34:5:34 | i |
| es2015modules.js:1:10:1:12 | foo | es2015modules.js:4:3:4:5 | foo |
| es2015modules.js:1:15:1:24 | bar as baz | es2015modules.js:6:3:6:5 | baz |
| es2015modules.js:10:10:10:13 | quux | es2015modules.js:7:3:7:6 | quux |
| es2015modules.js:15:17:15:17 | f | es2015modules.js:12:1:12:1 | f |
| es2015modules.js:16:25:16:25 | g | es2015modules.js:13:1:13:1 | g |
| fundecls.js:3:12:3:12 | f | fundecls.js:4:3:4:3 | f |
| fundecls.js:9:10:9:10 | s | fundecls.js:7:1:7:1 | s |
| fundecls.js:12:12:12:12 | f | fundecls.js:10:3:10:3 | f |
| fundecls.js:18:12:18:12 | f | fundecls.js:17:3:17:3 | f |
| fundecls.js:23:12:23:12 | f | fundecls.js:24:3:24:3 | f |
| fundecls.js:34:12:34:12 | f | fundecls.js:35:3:35:3 | f |
| fundecls.js:39:11:39:11 | x | fundecls.js:40:7:40:7 | x |
| fundecls.js:41:14:41:14 | f | fundecls.js:45:3:45:3 | f |
| fundecls.js:43:14:43:14 | f | fundecls.js:45:3:45:3 | f |
| fundecls.js:48:11:48:11 | x | fundecls.js:50:7:50:7 | x |
| tst.js:1:12:1:12 | o | tst.js:3:12:3:12 | o |
| tst.js:1:12:1:12 | o | tst.js:5:16:5:16 | o |
| tst.js:2:9:2:14 | y = 23 | tst.js:8:17:8:17 | y |
| tst.js:2:17:2:21 | i = 0 | tst.js:4:5:4:5 | i |
| tst.js:2:17:2:21 | i = 0 | tst.js:7:6:7:6 | i |
| tst.js:4:3:4:5 | ++i | tst.js:4:5:4:5 | i |
| tst.js:4:3:4:5 | ++i | tst.js:7:6:7:6 | i |
| tst.js:5:11:5:11 | z | tst.js:6:7:6:7 | z |
| tst.js:5:11:5:11 | z | tst.js:8:14:8:14 | z |
| tst.js:7:4:7:6 | --i | tst.js:7:6:7:6 | i |
| tst.js:12:2:12:7 | x = 42 | tst.js:14:9:14:9 | x |
| tst.js:19:11:19:11 | x | tst.js:18:9:18:9 | x |
| tst.js:23:6:23:23 | {a = b, c = d} = e | tst.js:24:2:24:2 | a |
| tst.js:23:6:23:23 | {a = b, c = d} = e | tst.js:24:6:24:6 | c |
| tst.js:26:11:26:11 | a | tst.js:27:2:27:2 | a |
| classes.js:7:5:8:5 | def@7:5 | classes.js:10:5:10:12 | LocalFoo |
| es2015.js:1:10:1:11 | def@1:10 | es2015.js:2:3:2:4 | fn |
| es2015.js:5:16:5:16 | def@5:16 | es2015.js:5:32:5:32 | i |
| es2015.js:5:16:5:16 | def@5:16 | es2015.js:5:34:5:34 | i |
| es2015modules.js:1:10:1:12 | def@1:10 | es2015modules.js:4:3:4:5 | foo |
| es2015modules.js:1:15:1:24 | def@1:15 | es2015modules.js:6:3:6:5 | baz |
| es2015modules.js:10:10:10:13 | def@10:10 | es2015modules.js:7:3:7:6 | quux |
| es2015modules.js:15:17:15:17 | def@15:17 | es2015modules.js:12:1:12:1 | f |
| es2015modules.js:16:25:16:25 | def@16:25 | es2015modules.js:13:1:13:1 | g |
| fundecls.js:3:12:3:12 | def@3:12 | fundecls.js:4:3:4:3 | f |
| fundecls.js:12:12:12:12 | def@12:12 | fundecls.js:10:3:10:3 | f |
| fundecls.js:18:12:18:12 | def@18:12 | fundecls.js:17:3:17:3 | f |
| fundecls.js:23:12:23:12 | def@23:12 | fundecls.js:24:3:24:3 | f |
| fundecls.js:27:2:27:2 | implicitInit@27:2 | fundecls.js:28:3:28:3 | f |
| fundecls.js:34:12:34:12 | def@34:12 | fundecls.js:35:3:35:3 | f |
| fundecls.js:39:11:39:11 | def@39:11 | fundecls.js:40:7:40:7 | x |
| fundecls.js:45:3:45:3 | phi@45:3 | fundecls.js:45:3:45:3 | f |
| fundecls.js:48:11:48:11 | def@48:11 | fundecls.js:50:7:50:7 | x |
| tst.js:1:12:1:12 | def@1:12 | tst.js:3:12:3:12 | o |
| tst.js:1:12:1:12 | def@1:12 | tst.js:5:16:5:16 | o |
| tst.js:2:9:2:14 | def@2:9 | tst.js:8:17:8:17 | y |
| tst.js:3:2:3:2 | phi@3:2 | tst.js:4:5:4:5 | i |
| tst.js:5:2:5:2 | phi@5:2 | tst.js:7:6:7:6 | i |
| tst.js:5:2:5:2 | phi@5:2 | tst.js:8:14:8:14 | z |
| tst.js:5:11:5:11 | def@5:11 | tst.js:6:7:6:7 | z |
| tst.js:12:2:12:7 | def@12:2 | tst.js:14:9:14:9 | x |
| tst.js:19:11:19:11 | def@19:11 | tst.js:18:9:18:9 | x |
| tst.js:23:6:23:23 | def@23:6 | tst.js:24:2:24:2 | a |
| tst.js:23:6:23:23 | def@23:6 | tst.js:24:6:24:6 | c |
| tst.js:26:11:26:11 | def@26:11 | tst.js:27:2:27:2 | a |

View File

@@ -1,5 +1,5 @@
import javascript
from VarDef def, VarUse use
where definitionReaches(_, def, use)
from SsaVariable def, VarUse use
where def.getAUse() = use
select def, use

View File

@@ -1,5 +1,5 @@
import Metrics.ES20xxFeatures
from ASTNode nd, int version, string category
from AstNode nd, int version, string category
where isES20xxFeature(nd, version, category)
select nd, version, category

View File

@@ -1,3 +1,3 @@
import javascript
query predicate test_getParent(Expr e, ASTNode res) { res = e.getParent() }
query predicate test_getParent(Expr e, AstNode res) { res = e.getParent() }

View File

@@ -10,7 +10,7 @@ query predicate externalDecl(ExternalDecl decl) { any() }
query predicate externalTypedef(ExternalTypedef typ) { any() }
query predicate externalVarDecl_getInit(ExternalVarDecl decl, ASTNode init) {
query predicate externalVarDecl_getInit(ExternalVarDecl decl, AstNode init) {
decl.getInit() = init
}

View File

@@ -1,4 +1,4 @@
import semmle.javascript.JSON
from JSONParseError jpe
from JsonParseError jpe
select jpe

View File

@@ -1,6 +1,6 @@
import semmle.javascript.JSON
from JSONObject obj, string prop, JSONValue val, string strval
from JsonObject obj, string prop, JsonValue val, string strval
where
val = obj.getPropValue(prop) and
(

View File

@@ -1,4 +1,4 @@
import semmle.javascript.JSON
from JSONValue v
from JsonValue v
select v

View File

@@ -1,44 +1,44 @@
nodes
| invalid.json:1:1:1:4 | [JSONString] "hi" | semmle.label | [JSONString] "hi" |
| invalid.json:1:1:1:4 | [JSONString] "hi" | semmle.order | 1 |
| tst.json:1:1:15:2 | [JSONArray] [{name: ...}, ...] | semmle.label | [JSONArray] [{name: ...}, ...] |
| tst.json:1:1:15:2 | [JSONArray] [{name: ...}, ...] | semmle.order | 2 |
| tst.json:1:2:8:1 | [JSONObject] {name: ...} | semmle.label | [JSONObject] {name: ...} |
| tst.json:2:11:2:21 | [JSONString] "Jim Knopf" | semmle.label | [JSONString] "Jim Knopf" |
| tst.json:3:14:7:3 | [JSONObject] {street: ...} | semmle.label | [JSONObject] {street: ...} |
| tst.json:4:15:4:18 | [JSONNull] null | semmle.label | [JSONNull] null |
| tst.json:5:15:5:16 | [JSONNumber] -1 | semmle.label | [JSONNumber] -1 |
| tst.json:6:16:6:27 | [JSONString] "Lummerland" | semmle.label | [JSONString] "Lummerland" |
| tst.json:8:4:15:1 | [JSONObject] {name: ...} | semmle.label | [JSONObject] {name: ...} |
| tst.json:9:11:9:25 | [JSONString] "Frau Mahlzahn" | semmle.label | [JSONString] "Frau Mahlzahn" |
| tst.json:10:14:14:3 | [JSONObject] {street: ...} | semmle.label | [JSONObject] {street: ...} |
| tst.json:11:15:11:28 | [JSONString] "Alte Strasse" | semmle.label | [JSONString] "Alte Strasse" |
| tst.json:12:15:12:17 | [JSONNumber] 133 | semmle.label | [JSONNumber] 133 |
| tst.json:13:16:13:27 | [JSONString] "Kummerland" | semmle.label | [JSONString] "Kummerland" |
| invalid.json:1:1:1:4 | [JsonString] "hi" | semmle.label | [JsonString] "hi" |
| invalid.json:1:1:1:4 | [JsonString] "hi" | semmle.order | 1 |
| tst.json:1:1:15:2 | [JsonArray] [{name: ...}, ...] | semmle.label | [JsonArray] [{name: ...}, ...] |
| tst.json:1:1:15:2 | [JsonArray] [{name: ...}, ...] | semmle.order | 2 |
| tst.json:1:2:8:1 | [JsonObject] {name: ...} | semmle.label | [JsonObject] {name: ...} |
| tst.json:2:11:2:21 | [JsonString] "Jim Knopf" | semmle.label | [JsonString] "Jim Knopf" |
| tst.json:3:14:7:3 | [JsonObject] {street: ...} | semmle.label | [JsonObject] {street: ...} |
| tst.json:4:15:4:18 | [JsonNull] null | semmle.label | [JsonNull] null |
| tst.json:5:15:5:16 | [JsonNumber] -1 | semmle.label | [JsonNumber] -1 |
| tst.json:6:16:6:27 | [JsonString] "Lummerland" | semmle.label | [JsonString] "Lummerland" |
| tst.json:8:4:15:1 | [JsonObject] {name: ...} | semmle.label | [JsonObject] {name: ...} |
| tst.json:9:11:9:25 | [JsonString] "Frau Mahlzahn" | semmle.label | [JsonString] "Frau Mahlzahn" |
| tst.json:10:14:14:3 | [JsonObject] {street: ...} | semmle.label | [JsonObject] {street: ...} |
| tst.json:11:15:11:28 | [JsonString] "Alte Strasse" | semmle.label | [JsonString] "Alte Strasse" |
| tst.json:12:15:12:17 | [JsonNumber] 133 | semmle.label | [JsonNumber] 133 |
| tst.json:13:16:13:27 | [JsonString] "Kummerland" | semmle.label | [JsonString] "Kummerland" |
edges
| tst.json:1:1:15:2 | [JSONArray] [{name: ...}, ...] | tst.json:1:2:8:1 | [JSONObject] {name: ...} | semmle.label | 0 |
| tst.json:1:1:15:2 | [JSONArray] [{name: ...}, ...] | tst.json:1:2:8:1 | [JSONObject] {name: ...} | semmle.order | 0 |
| tst.json:1:1:15:2 | [JSONArray] [{name: ...}, ...] | tst.json:8:4:15:1 | [JSONObject] {name: ...} | semmle.label | 1 |
| tst.json:1:1:15:2 | [JSONArray] [{name: ...}, ...] | tst.json:8:4:15:1 | [JSONObject] {name: ...} | semmle.order | 1 |
| tst.json:1:2:8:1 | [JSONObject] {name: ...} | tst.json:2:11:2:21 | [JSONString] "Jim Knopf" | semmle.label | 0 |
| tst.json:1:2:8:1 | [JSONObject] {name: ...} | tst.json:2:11:2:21 | [JSONString] "Jim Knopf" | semmle.order | 0 |
| tst.json:1:2:8:1 | [JSONObject] {name: ...} | tst.json:3:14:7:3 | [JSONObject] {street: ...} | semmle.label | 1 |
| tst.json:1:2:8:1 | [JSONObject] {name: ...} | tst.json:3:14:7:3 | [JSONObject] {street: ...} | semmle.order | 1 |
| tst.json:3:14:7:3 | [JSONObject] {street: ...} | tst.json:4:15:4:18 | [JSONNull] null | semmle.label | 0 |
| tst.json:3:14:7:3 | [JSONObject] {street: ...} | tst.json:4:15:4:18 | [JSONNull] null | semmle.order | 0 |
| tst.json:3:14:7:3 | [JSONObject] {street: ...} | tst.json:5:15:5:16 | [JSONNumber] -1 | semmle.label | 1 |
| tst.json:3:14:7:3 | [JSONObject] {street: ...} | tst.json:5:15:5:16 | [JSONNumber] -1 | semmle.order | 1 |
| tst.json:3:14:7:3 | [JSONObject] {street: ...} | tst.json:6:16:6:27 | [JSONString] "Lummerland" | semmle.label | 2 |
| tst.json:3:14:7:3 | [JSONObject] {street: ...} | tst.json:6:16:6:27 | [JSONString] "Lummerland" | semmle.order | 2 |
| tst.json:8:4:15:1 | [JSONObject] {name: ...} | tst.json:9:11:9:25 | [JSONString] "Frau Mahlzahn" | semmle.label | 0 |
| tst.json:8:4:15:1 | [JSONObject] {name: ...} | tst.json:9:11:9:25 | [JSONString] "Frau Mahlzahn" | semmle.order | 0 |
| tst.json:8:4:15:1 | [JSONObject] {name: ...} | tst.json:10:14:14:3 | [JSONObject] {street: ...} | semmle.label | 1 |
| tst.json:8:4:15:1 | [JSONObject] {name: ...} | tst.json:10:14:14:3 | [JSONObject] {street: ...} | semmle.order | 1 |
| tst.json:10:14:14:3 | [JSONObject] {street: ...} | tst.json:11:15:11:28 | [JSONString] "Alte Strasse" | semmle.label | 0 |
| tst.json:10:14:14:3 | [JSONObject] {street: ...} | tst.json:11:15:11:28 | [JSONString] "Alte Strasse" | semmle.order | 0 |
| tst.json:10:14:14:3 | [JSONObject] {street: ...} | tst.json:12:15:12:17 | [JSONNumber] 133 | semmle.label | 1 |
| tst.json:10:14:14:3 | [JSONObject] {street: ...} | tst.json:12:15:12:17 | [JSONNumber] 133 | semmle.order | 1 |
| tst.json:10:14:14:3 | [JSONObject] {street: ...} | tst.json:13:16:13:27 | [JSONString] "Kummerland" | semmle.label | 2 |
| tst.json:10:14:14:3 | [JSONObject] {street: ...} | tst.json:13:16:13:27 | [JSONString] "Kummerland" | semmle.order | 2 |
| tst.json:1:1:15:2 | [JsonArray] [{name: ...}, ...] | tst.json:1:2:8:1 | [JsonObject] {name: ...} | semmle.label | 0 |
| tst.json:1:1:15:2 | [JsonArray] [{name: ...}, ...] | tst.json:1:2:8:1 | [JsonObject] {name: ...} | semmle.order | 0 |
| tst.json:1:1:15:2 | [JsonArray] [{name: ...}, ...] | tst.json:8:4:15:1 | [JsonObject] {name: ...} | semmle.label | 1 |
| tst.json:1:1:15:2 | [JsonArray] [{name: ...}, ...] | tst.json:8:4:15:1 | [JsonObject] {name: ...} | semmle.order | 1 |
| tst.json:1:2:8:1 | [JsonObject] {name: ...} | tst.json:2:11:2:21 | [JsonString] "Jim Knopf" | semmle.label | 0 |
| tst.json:1:2:8:1 | [JsonObject] {name: ...} | tst.json:2:11:2:21 | [JsonString] "Jim Knopf" | semmle.order | 0 |
| tst.json:1:2:8:1 | [JsonObject] {name: ...} | tst.json:3:14:7:3 | [JsonObject] {street: ...} | semmle.label | 1 |
| tst.json:1:2:8:1 | [JsonObject] {name: ...} | tst.json:3:14:7:3 | [JsonObject] {street: ...} | semmle.order | 1 |
| tst.json:3:14:7:3 | [JsonObject] {street: ...} | tst.json:4:15:4:18 | [JsonNull] null | semmle.label | 0 |
| tst.json:3:14:7:3 | [JsonObject] {street: ...} | tst.json:4:15:4:18 | [JsonNull] null | semmle.order | 0 |
| tst.json:3:14:7:3 | [JsonObject] {street: ...} | tst.json:5:15:5:16 | [JsonNumber] -1 | semmle.label | 1 |
| tst.json:3:14:7:3 | [JsonObject] {street: ...} | tst.json:5:15:5:16 | [JsonNumber] -1 | semmle.order | 1 |
| tst.json:3:14:7:3 | [JsonObject] {street: ...} | tst.json:6:16:6:27 | [JsonString] "Lummerland" | semmle.label | 2 |
| tst.json:3:14:7:3 | [JsonObject] {street: ...} | tst.json:6:16:6:27 | [JsonString] "Lummerland" | semmle.order | 2 |
| tst.json:8:4:15:1 | [JsonObject] {name: ...} | tst.json:9:11:9:25 | [JsonString] "Frau Mahlzahn" | semmle.label | 0 |
| tst.json:8:4:15:1 | [JsonObject] {name: ...} | tst.json:9:11:9:25 | [JsonString] "Frau Mahlzahn" | semmle.order | 0 |
| tst.json:8:4:15:1 | [JsonObject] {name: ...} | tst.json:10:14:14:3 | [JsonObject] {street: ...} | semmle.label | 1 |
| tst.json:8:4:15:1 | [JsonObject] {name: ...} | tst.json:10:14:14:3 | [JsonObject] {street: ...} | semmle.order | 1 |
| tst.json:10:14:14:3 | [JsonObject] {street: ...} | tst.json:11:15:11:28 | [JsonString] "Alte Strasse" | semmle.label | 0 |
| tst.json:10:14:14:3 | [JsonObject] {street: ...} | tst.json:11:15:11:28 | [JsonString] "Alte Strasse" | semmle.order | 0 |
| tst.json:10:14:14:3 | [JsonObject] {street: ...} | tst.json:12:15:12:17 | [JsonNumber] 133 | semmle.label | 1 |
| tst.json:10:14:14:3 | [JsonObject] {street: ...} | tst.json:12:15:12:17 | [JsonNumber] 133 | semmle.order | 1 |
| tst.json:10:14:14:3 | [JsonObject] {street: ...} | tst.json:13:16:13:27 | [JsonString] "Kummerland" | semmle.label | 2 |
| tst.json:10:14:14:3 | [JsonObject] {street: ...} | tst.json:13:16:13:27 | [JsonString] "Kummerland" | semmle.order | 2 |
graphProperties
| semmle.graphKind | tree |

View File

@@ -20,37 +20,37 @@ nodes
| tst.js:2:19:2:21 | [Label] rel | semmle.label | [Label] rel |
| tst.js:2:19:2:44 | [Property] rel: "noopener noreferrer" | semmle.label | [Property] rel: "noopener noreferrer" |
| tst.js:2:24:2:44 | [Literal] "noopener noreferrer" | semmle.label | [Literal] "noopener noreferrer" |
| tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | semmle.label | [JSXElement] <a href ... */}</a> |
| tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | semmle.label | [JsxElement] <a href ... */}</a> |
| tst.js:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | semmle.label | [ExprStmt] <a href ... /}</a>; |
| tst.js:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | semmle.order | 3 |
| tst.js:3:2:3:2 | [Label] a | semmle.label | [Label] a |
| tst.js:3:4:3:7 | [Label] href | semmle.label | [Label] href |
| tst.js:3:4:3:14 | [JSXAttribute] href={href} | semmle.label | [JSXAttribute] href={href} |
| tst.js:3:4:3:14 | [JsxAttribute] href={href} | semmle.label | [JsxAttribute] href={href} |
| tst.js:3:10:3:13 | [VarRef] href | semmle.label | [VarRef] href |
| tst.js:3:16:3:21 | [Label] target | semmle.label | [Label] target |
| tst.js:3:16:3:30 | [JSXAttribute] target="_blank" | semmle.label | [JSXAttribute] target="_blank" |
| tst.js:3:16:3:30 | [JsxAttribute] target="_blank" | semmle.label | [JsxAttribute] target="_blank" |
| tst.js:3:23:3:30 | [Literal] "_blank" | semmle.label | [Literal] "_blank" |
| tst.js:3:32:3:45 | [JSXAttribute] {...linkTypes} | semmle.label | [JSXAttribute] {...linkTypes} |
| tst.js:3:32:3:45 | [JsxAttribute] {...linkTypes} | semmle.label | [JsxAttribute] {...linkTypes} |
| tst.js:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.label | [SpreadElement] ...linkTypes |
| tst.js:3:36:3:44 | [VarRef] linkTypes | semmle.label | [VarRef] linkTypes |
| tst.js:3:47:3:54 | [Literal] Link to | semmle.label | [Literal] Link to |
| tst.js:3:56:3:59 | [VarRef] href | semmle.label | [VarRef] href |
| tst.js:3:61:3:62 | [Literal] . | semmle.label | [Literal] . |
| tst.js:3:64:3:101 | [JSXEmptyExpr] | semmle.label | [JSXEmptyExpr] |
| tst.js:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | semmle.label | [JSXElement] <MyComp ... "bar"/> |
| tst.js:3:64:3:101 | [JsxEmptyExpr] | semmle.label | [JsxEmptyExpr] |
| tst.js:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | semmle.label | [JsxElement] <MyComp ... "bar"/> |
| tst.js:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | semmle.label | [ExprStmt] <MyComp ... bar"/>; |
| tst.js:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | semmle.order | 4 |
| tst.js:4:2:4:13 | [VarRef] MyComponents | semmle.label | [VarRef] MyComponents |
| tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.label | [DotExpr] MyCompo ... ncyLink |
| tst.js:4:15:4:23 | [Label] FancyLink | semmle.label | [Label] FancyLink |
| tst.js:4:25:4:27 | [Label] foo | semmle.label | [Label] foo |
| tst.js:4:25:4:33 | [JSXAttribute] foo="bar" | semmle.label | [JSXAttribute] foo="bar" |
| tst.js:4:25:4:33 | [JsxAttribute] foo="bar" | semmle.label | [JsxAttribute] foo="bar" |
| tst.js:4:29:4:33 | [Literal] "bar" | semmle.label | [Literal] "bar" |
| tst.js:5:1:5:6 | [JSXElement] <Foo/> | semmle.label | [JSXElement] <Foo/> |
| tst.js:5:1:5:6 | [JsxElement] <Foo/> | semmle.label | [JsxElement] <Foo/> |
| tst.js:5:1:5:7 | [ExprStmt] <Foo/>; | semmle.label | [ExprStmt] <Foo/>; |
| tst.js:5:1:5:7 | [ExprStmt] <Foo/>; | semmle.order | 5 |
| tst.js:5:2:5:4 | [VarRef] Foo | semmle.label | [VarRef] Foo |
| tst.js:6:1:6:10 | [JSXElement] <Foo-Bar/> | semmle.label | [JSXElement] <Foo-Bar/> |
| tst.js:6:1:6:10 | [JsxElement] <Foo-Bar/> | semmle.label | [JsxElement] <Foo-Bar/> |
| tst.js:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | semmle.label | [ExprStmt] <Foo-Bar/>; |
| tst.js:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | semmle.order | 6 |
| tst.js:6:2:6:8 | [Label] Foo-Bar | semmle.label | [Label] Foo-Bar |
@@ -58,9 +58,9 @@ nodes
| tst.js:7:1:7:52 | [DeclStmt] var fragment = ... | semmle.order | 7 |
| tst.js:7:5:7:12 | [VarDecl] fragment | semmle.label | [VarDecl] fragment |
| tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | semmle.label | [VariableDeclarator] fragmen ... ext </> |
| tst.js:7:16:7:52 | [JSXFragment] <> frag ... ext </> | semmle.label | [JSXFragment] <> frag ... ext </> |
| tst.js:7:16:7:52 | [JsxFragment] <> frag ... ext </> | semmle.label | [JsxFragment] <> frag ... ext </> |
| tst.js:7:18:7:32 | [Literal] fragment text | semmle.label | [Literal] fragment text |
| tst.js:7:33:7:38 | [JSXElement] <Foo/> | semmle.label | [JSXElement] <Foo/> |
| tst.js:7:33:7:38 | [JsxElement] <Foo/> | semmle.label | [JsxElement] <Foo/> |
| tst.js:7:34:7:36 | [VarRef] Foo | semmle.label | [VarRef] Foo |
| tst.js:7:39:7:49 | [Literal] more text | semmle.label | [Literal] more text |
| tstest.tsx:1:1:1:32 | [DeclStmt] var href = ... | semmle.label | [DeclStmt] var href = ... |
@@ -76,37 +76,37 @@ nodes
| tstest.tsx:2:19:2:21 | [Label] rel | semmle.label | [Label] rel |
| tstest.tsx:2:19:2:44 | [Property] rel: "noopener noreferrer" | semmle.label | [Property] rel: "noopener noreferrer" |
| tstest.tsx:2:24:2:44 | [Literal] "noopener noreferrer" | semmle.label | [Literal] "noopener noreferrer" |
| tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | semmle.label | [JSXElement] <a href ... */}</a> |
| tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | semmle.label | [JsxElement] <a href ... */}</a> |
| tstest.tsx:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | semmle.label | [ExprStmt] <a href ... /}</a>; |
| tstest.tsx:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | semmle.order | 10 |
| tstest.tsx:3:2:3:2 | [Label] a | semmle.label | [Label] a |
| tstest.tsx:3:4:3:7 | [Label] href | semmle.label | [Label] href |
| tstest.tsx:3:4:3:14 | [JSXAttribute] href={href} | semmle.label | [JSXAttribute] href={href} |
| tstest.tsx:3:4:3:14 | [JsxAttribute] href={href} | semmle.label | [JsxAttribute] href={href} |
| tstest.tsx:3:10:3:13 | [VarRef] href | semmle.label | [VarRef] href |
| tstest.tsx:3:16:3:21 | [Label] target | semmle.label | [Label] target |
| tstest.tsx:3:16:3:30 | [JSXAttribute] target="_blank" | semmle.label | [JSXAttribute] target="_blank" |
| tstest.tsx:3:16:3:30 | [JsxAttribute] target="_blank" | semmle.label | [JsxAttribute] target="_blank" |
| tstest.tsx:3:23:3:30 | [Literal] "_blank" | semmle.label | [Literal] "_blank" |
| tstest.tsx:3:32:3:45 | [JSXAttribute] {...linkTypes} | semmle.label | [JSXAttribute] {...linkTypes} |
| tstest.tsx:3:32:3:45 | [JsxAttribute] {...linkTypes} | semmle.label | [JsxAttribute] {...linkTypes} |
| tstest.tsx:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.label | [SpreadElement] ...linkTypes |
| tstest.tsx:3:36:3:44 | [VarRef] linkTypes | semmle.label | [VarRef] linkTypes |
| tstest.tsx:3:47:3:54 | [Literal] Link to | semmle.label | [Literal] Link to |
| tstest.tsx:3:56:3:59 | [VarRef] href | semmle.label | [VarRef] href |
| tstest.tsx:3:61:3:62 | [Literal] . | semmle.label | [Literal] . |
| tstest.tsx:3:63:3:102 | [JSXEmptyExpr] {/*TODO ... text*/} | semmle.label | [JSXEmptyExpr] {/*TODO ... text*/} |
| tstest.tsx:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | semmle.label | [JSXElement] <MyComp ... "bar"/> |
| tstest.tsx:3:63:3:102 | [JsxEmptyExpr] {/*TODO ... text*/} | semmle.label | [JsxEmptyExpr] {/*TODO ... text*/} |
| tstest.tsx:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | semmle.label | [JsxElement] <MyComp ... "bar"/> |
| tstest.tsx:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | semmle.label | [ExprStmt] <MyComp ... bar"/>; |
| tstest.tsx:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | semmle.order | 11 |
| tstest.tsx:4:2:4:13 | [VarRef] MyComponents | semmle.label | [VarRef] MyComponents |
| tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.label | [DotExpr] MyCompo ... ncyLink |
| tstest.tsx:4:15:4:23 | [Label] FancyLink | semmle.label | [Label] FancyLink |
| tstest.tsx:4:25:4:27 | [Label] foo | semmle.label | [Label] foo |
| tstest.tsx:4:25:4:33 | [JSXAttribute] foo="bar" | semmle.label | [JSXAttribute] foo="bar" |
| tstest.tsx:4:25:4:33 | [JsxAttribute] foo="bar" | semmle.label | [JsxAttribute] foo="bar" |
| tstest.tsx:4:29:4:33 | [Literal] "bar" | semmle.label | [Literal] "bar" |
| tstest.tsx:5:1:5:6 | [JSXElement] <Foo/> | semmle.label | [JSXElement] <Foo/> |
| tstest.tsx:5:1:5:6 | [JsxElement] <Foo/> | semmle.label | [JsxElement] <Foo/> |
| tstest.tsx:5:1:5:7 | [ExprStmt] <Foo/>; | semmle.label | [ExprStmt] <Foo/>; |
| tstest.tsx:5:1:5:7 | [ExprStmt] <Foo/>; | semmle.order | 12 |
| tstest.tsx:5:2:5:4 | [VarRef] Foo | semmle.label | [VarRef] Foo |
| tstest.tsx:6:1:6:10 | [JSXElement] <Foo-Bar/> | semmle.label | [JSXElement] <Foo-Bar/> |
| tstest.tsx:6:1:6:10 | [JsxElement] <Foo-Bar/> | semmle.label | [JsxElement] <Foo-Bar/> |
| tstest.tsx:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | semmle.label | [ExprStmt] <Foo-Bar/>; |
| tstest.tsx:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | semmle.order | 13 |
| tstest.tsx:6:2:6:8 | [Label] Foo-Bar | semmle.label | [Label] Foo-Bar |
@@ -114,40 +114,40 @@ nodes
| tstest.tsx:7:1:7:52 | [DeclStmt] var fragment = ... | semmle.order | 14 |
| tstest.tsx:7:5:7:12 | [VarDecl] fragment | semmle.label | [VarDecl] fragment |
| tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | semmle.label | [VariableDeclarator] fragmen ... ext </> |
| tstest.tsx:7:16:7:52 | [JSXFragment] <> frag ... ext </> | semmle.label | [JSXFragment] <> frag ... ext </> |
| tstest.tsx:7:16:7:52 | [JsxFragment] <> frag ... ext </> | semmle.label | [JsxFragment] <> frag ... ext </> |
| tstest.tsx:7:19:7:32 | [Literal] fragment text | semmle.label | [Literal] fragment text |
| tstest.tsx:7:33:7:38 | [JSXElement] <Foo/> | semmle.label | [JSXElement] <Foo/> |
| tstest.tsx:7:33:7:38 | [JsxElement] <Foo/> | semmle.label | [JsxElement] <Foo/> |
| tstest.tsx:7:34:7:36 | [VarRef] Foo | semmle.label | [VarRef] Foo |
| tstest.tsx:7:40:7:49 | [Literal] more text | semmle.label | [Literal] more text |
edges
| file://:0:0:0:0 | (Attributes) | tst.js:3:4:3:14 | [JSXAttribute] href={href} | semmle.label | 0 |
| file://:0:0:0:0 | (Attributes) | tst.js:3:4:3:14 | [JSXAttribute] href={href} | semmle.order | 0 |
| file://:0:0:0:0 | (Attributes) | tst.js:3:16:3:30 | [JSXAttribute] target="_blank" | semmle.label | 1 |
| file://:0:0:0:0 | (Attributes) | tst.js:3:16:3:30 | [JSXAttribute] target="_blank" | semmle.order | 1 |
| file://:0:0:0:0 | (Attributes) | tst.js:3:32:3:45 | [JSXAttribute] {...linkTypes} | semmle.label | 2 |
| file://:0:0:0:0 | (Attributes) | tst.js:3:32:3:45 | [JSXAttribute] {...linkTypes} | semmle.order | 2 |
| file://:0:0:0:0 | (Attributes) | tst.js:4:25:4:33 | [JSXAttribute] foo="bar" | semmle.label | 0 |
| file://:0:0:0:0 | (Attributes) | tst.js:4:25:4:33 | [JSXAttribute] foo="bar" | semmle.order | 0 |
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:4:3:14 | [JSXAttribute] href={href} | semmle.label | 0 |
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:4:3:14 | [JSXAttribute] href={href} | semmle.order | 0 |
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:16:3:30 | [JSXAttribute] target="_blank" | semmle.label | 1 |
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:16:3:30 | [JSXAttribute] target="_blank" | semmle.order | 1 |
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:32:3:45 | [JSXAttribute] {...linkTypes} | semmle.label | 2 |
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:32:3:45 | [JSXAttribute] {...linkTypes} | semmle.order | 2 |
| file://:0:0:0:0 | (Attributes) | tstest.tsx:4:25:4:33 | [JSXAttribute] foo="bar" | semmle.label | 0 |
| file://:0:0:0:0 | (Attributes) | tstest.tsx:4:25:4:33 | [JSXAttribute] foo="bar" | semmle.order | 0 |
| file://:0:0:0:0 | (Attributes) | tst.js:3:4:3:14 | [JsxAttribute] href={href} | semmle.label | 0 |
| file://:0:0:0:0 | (Attributes) | tst.js:3:4:3:14 | [JsxAttribute] href={href} | semmle.order | 0 |
| file://:0:0:0:0 | (Attributes) | tst.js:3:16:3:30 | [JsxAttribute] target="_blank" | semmle.label | 1 |
| file://:0:0:0:0 | (Attributes) | tst.js:3:16:3:30 | [JsxAttribute] target="_blank" | semmle.order | 1 |
| file://:0:0:0:0 | (Attributes) | tst.js:3:32:3:45 | [JsxAttribute] {...linkTypes} | semmle.label | 2 |
| file://:0:0:0:0 | (Attributes) | tst.js:3:32:3:45 | [JsxAttribute] {...linkTypes} | semmle.order | 2 |
| file://:0:0:0:0 | (Attributes) | tst.js:4:25:4:33 | [JsxAttribute] foo="bar" | semmle.label | 0 |
| file://:0:0:0:0 | (Attributes) | tst.js:4:25:4:33 | [JsxAttribute] foo="bar" | semmle.order | 0 |
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:4:3:14 | [JsxAttribute] href={href} | semmle.label | 0 |
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:4:3:14 | [JsxAttribute] href={href} | semmle.order | 0 |
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:16:3:30 | [JsxAttribute] target="_blank" | semmle.label | 1 |
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:16:3:30 | [JsxAttribute] target="_blank" | semmle.order | 1 |
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:32:3:45 | [JsxAttribute] {...linkTypes} | semmle.label | 2 |
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:32:3:45 | [JsxAttribute] {...linkTypes} | semmle.order | 2 |
| file://:0:0:0:0 | (Attributes) | tstest.tsx:4:25:4:33 | [JsxAttribute] foo="bar" | semmle.label | 0 |
| file://:0:0:0:0 | (Attributes) | tstest.tsx:4:25:4:33 | [JsxAttribute] foo="bar" | semmle.order | 0 |
| file://:0:0:0:0 | (Body) | tst.js:3:47:3:54 | [Literal] Link to | semmle.label | 0 |
| file://:0:0:0:0 | (Body) | tst.js:3:47:3:54 | [Literal] Link to | semmle.order | 0 |
| file://:0:0:0:0 | (Body) | tst.js:3:56:3:59 | [VarRef] href | semmle.label | 1 |
| file://:0:0:0:0 | (Body) | tst.js:3:56:3:59 | [VarRef] href | semmle.order | 1 |
| file://:0:0:0:0 | (Body) | tst.js:3:61:3:62 | [Literal] . | semmle.label | 2 |
| file://:0:0:0:0 | (Body) | tst.js:3:61:3:62 | [Literal] . | semmle.order | 2 |
| file://:0:0:0:0 | (Body) | tst.js:3:64:3:101 | [JSXEmptyExpr] | semmle.label | 3 |
| file://:0:0:0:0 | (Body) | tst.js:3:64:3:101 | [JSXEmptyExpr] | semmle.order | 3 |
| file://:0:0:0:0 | (Body) | tst.js:3:64:3:101 | [JsxEmptyExpr] | semmle.label | 3 |
| file://:0:0:0:0 | (Body) | tst.js:3:64:3:101 | [JsxEmptyExpr] | semmle.order | 3 |
| file://:0:0:0:0 | (Body) | tst.js:7:18:7:32 | [Literal] fragment text | semmle.label | 0 |
| file://:0:0:0:0 | (Body) | tst.js:7:18:7:32 | [Literal] fragment text | semmle.order | 0 |
| file://:0:0:0:0 | (Body) | tst.js:7:33:7:38 | [JSXElement] <Foo/> | semmle.label | 1 |
| file://:0:0:0:0 | (Body) | tst.js:7:33:7:38 | [JSXElement] <Foo/> | semmle.order | 1 |
| file://:0:0:0:0 | (Body) | tst.js:7:33:7:38 | [JsxElement] <Foo/> | semmle.label | 1 |
| file://:0:0:0:0 | (Body) | tst.js:7:33:7:38 | [JsxElement] <Foo/> | semmle.order | 1 |
| file://:0:0:0:0 | (Body) | tst.js:7:39:7:49 | [Literal] more text | semmle.label | 2 |
| file://:0:0:0:0 | (Body) | tst.js:7:39:7:49 | [Literal] more text | semmle.order | 2 |
| file://:0:0:0:0 | (Body) | tstest.tsx:3:47:3:54 | [Literal] Link to | semmle.label | 0 |
@@ -156,12 +156,12 @@ edges
| file://:0:0:0:0 | (Body) | tstest.tsx:3:56:3:59 | [VarRef] href | semmle.order | 1 |
| file://:0:0:0:0 | (Body) | tstest.tsx:3:61:3:62 | [Literal] . | semmle.label | 2 |
| file://:0:0:0:0 | (Body) | tstest.tsx:3:61:3:62 | [Literal] . | semmle.order | 2 |
| file://:0:0:0:0 | (Body) | tstest.tsx:3:63:3:102 | [JSXEmptyExpr] {/*TODO ... text*/} | semmle.label | 3 |
| file://:0:0:0:0 | (Body) | tstest.tsx:3:63:3:102 | [JSXEmptyExpr] {/*TODO ... text*/} | semmle.order | 3 |
| file://:0:0:0:0 | (Body) | tstest.tsx:3:63:3:102 | [JsxEmptyExpr] {/*TODO ... text*/} | semmle.label | 3 |
| file://:0:0:0:0 | (Body) | tstest.tsx:3:63:3:102 | [JsxEmptyExpr] {/*TODO ... text*/} | semmle.order | 3 |
| file://:0:0:0:0 | (Body) | tstest.tsx:7:19:7:32 | [Literal] fragment text | semmle.label | 0 |
| file://:0:0:0:0 | (Body) | tstest.tsx:7:19:7:32 | [Literal] fragment text | semmle.order | 0 |
| file://:0:0:0:0 | (Body) | tstest.tsx:7:33:7:38 | [JSXElement] <Foo/> | semmle.label | 1 |
| file://:0:0:0:0 | (Body) | tstest.tsx:7:33:7:38 | [JSXElement] <Foo/> | semmle.order | 1 |
| file://:0:0:0:0 | (Body) | tstest.tsx:7:33:7:38 | [JsxElement] <Foo/> | semmle.label | 1 |
| file://:0:0:0:0 | (Body) | tstest.tsx:7:33:7:38 | [JsxElement] <Foo/> | semmle.order | 1 |
| file://:0:0:0:0 | (Body) | tstest.tsx:7:40:7:49 | [Literal] more text | semmle.label | 2 |
| file://:0:0:0:0 | (Body) | tstest.tsx:7:40:7:49 | [Literal] more text | semmle.order | 2 |
| tst.js:1:1:1:32 | [DeclStmt] var href = ... | tst.js:1:5:1:31 | [VariableDeclarator] href = ... le.com" | semmle.label | 1 |
@@ -182,58 +182,58 @@ edges
| tst.js:2:19:2:44 | [Property] rel: "noopener noreferrer" | tst.js:2:19:2:21 | [Label] rel | semmle.order | 1 |
| tst.js:2:19:2:44 | [Property] rel: "noopener noreferrer" | tst.js:2:24:2:44 | [Literal] "noopener noreferrer" | semmle.label | 2 |
| tst.js:2:19:2:44 | [Property] rel: "noopener noreferrer" | tst.js:2:24:2:44 | [Literal] "noopener noreferrer" | semmle.order | 2 |
| tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | file://:0:0:0:0 | (Attributes) | semmle.label | 2 |
| tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | file://:0:0:0:0 | (Attributes) | semmle.order | 2 |
| tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | file://:0:0:0:0 | (Body) | semmle.label | 1 |
| tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | file://:0:0:0:0 | (Body) | semmle.order | 1 |
| tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | tst.js:3:2:3:2 | [Label] a | semmle.label | 0 |
| tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | tst.js:3:2:3:2 | [Label] a | semmle.order | 0 |
| tst.js:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | semmle.label | 1 |
| tst.js:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | semmle.order | 1 |
| tst.js:3:4:3:14 | [JSXAttribute] href={href} | tst.js:3:4:3:7 | [Label] href | semmle.label | 1 |
| tst.js:3:4:3:14 | [JSXAttribute] href={href} | tst.js:3:4:3:7 | [Label] href | semmle.order | 1 |
| tst.js:3:4:3:14 | [JSXAttribute] href={href} | tst.js:3:10:3:13 | [VarRef] href | semmle.label | 2 |
| tst.js:3:4:3:14 | [JSXAttribute] href={href} | tst.js:3:10:3:13 | [VarRef] href | semmle.order | 2 |
| tst.js:3:16:3:30 | [JSXAttribute] target="_blank" | tst.js:3:16:3:21 | [Label] target | semmle.label | 1 |
| tst.js:3:16:3:30 | [JSXAttribute] target="_blank" | tst.js:3:16:3:21 | [Label] target | semmle.order | 1 |
| tst.js:3:16:3:30 | [JSXAttribute] target="_blank" | tst.js:3:23:3:30 | [Literal] "_blank" | semmle.label | 2 |
| tst.js:3:16:3:30 | [JSXAttribute] target="_blank" | tst.js:3:23:3:30 | [Literal] "_blank" | semmle.order | 2 |
| tst.js:3:32:3:45 | [JSXAttribute] {...linkTypes} | tst.js:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.label | 1 |
| tst.js:3:32:3:45 | [JSXAttribute] {...linkTypes} | tst.js:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.order | 1 |
| tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | file://:0:0:0:0 | (Attributes) | semmle.label | 2 |
| tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | file://:0:0:0:0 | (Attributes) | semmle.order | 2 |
| tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | file://:0:0:0:0 | (Body) | semmle.label | 1 |
| tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | file://:0:0:0:0 | (Body) | semmle.order | 1 |
| tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | tst.js:3:2:3:2 | [Label] a | semmle.label | 0 |
| tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | tst.js:3:2:3:2 | [Label] a | semmle.order | 0 |
| tst.js:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | semmle.label | 1 |
| tst.js:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | semmle.order | 1 |
| tst.js:3:4:3:14 | [JsxAttribute] href={href} | tst.js:3:4:3:7 | [Label] href | semmle.label | 1 |
| tst.js:3:4:3:14 | [JsxAttribute] href={href} | tst.js:3:4:3:7 | [Label] href | semmle.order | 1 |
| tst.js:3:4:3:14 | [JsxAttribute] href={href} | tst.js:3:10:3:13 | [VarRef] href | semmle.label | 2 |
| tst.js:3:4:3:14 | [JsxAttribute] href={href} | tst.js:3:10:3:13 | [VarRef] href | semmle.order | 2 |
| tst.js:3:16:3:30 | [JsxAttribute] target="_blank" | tst.js:3:16:3:21 | [Label] target | semmle.label | 1 |
| tst.js:3:16:3:30 | [JsxAttribute] target="_blank" | tst.js:3:16:3:21 | [Label] target | semmle.order | 1 |
| tst.js:3:16:3:30 | [JsxAttribute] target="_blank" | tst.js:3:23:3:30 | [Literal] "_blank" | semmle.label | 2 |
| tst.js:3:16:3:30 | [JsxAttribute] target="_blank" | tst.js:3:23:3:30 | [Literal] "_blank" | semmle.order | 2 |
| tst.js:3:32:3:45 | [JsxAttribute] {...linkTypes} | tst.js:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.label | 1 |
| tst.js:3:32:3:45 | [JsxAttribute] {...linkTypes} | tst.js:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.order | 1 |
| tst.js:3:32:3:45 | [SpreadElement] ...linkTypes | tst.js:3:36:3:44 | [VarRef] linkTypes | semmle.label | 1 |
| tst.js:3:32:3:45 | [SpreadElement] ...linkTypes | tst.js:3:36:3:44 | [VarRef] linkTypes | semmle.order | 1 |
| tst.js:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | file://:0:0:0:0 | (Attributes) | semmle.label | 2 |
| tst.js:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | file://:0:0:0:0 | (Attributes) | semmle.order | 2 |
| tst.js:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.label | 0 |
| tst.js:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.order | 0 |
| tst.js:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | tst.js:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | semmle.label | 1 |
| tst.js:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | tst.js:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | semmle.order | 1 |
| tst.js:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | file://:0:0:0:0 | (Attributes) | semmle.label | 2 |
| tst.js:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | file://:0:0:0:0 | (Attributes) | semmle.order | 2 |
| tst.js:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.label | 0 |
| tst.js:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.order | 0 |
| tst.js:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | tst.js:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | semmle.label | 1 |
| tst.js:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | tst.js:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | semmle.order | 1 |
| tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | tst.js:4:2:4:13 | [VarRef] MyComponents | semmle.label | 1 |
| tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | tst.js:4:2:4:13 | [VarRef] MyComponents | semmle.order | 1 |
| tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | tst.js:4:15:4:23 | [Label] FancyLink | semmle.label | 2 |
| tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | tst.js:4:15:4:23 | [Label] FancyLink | semmle.order | 2 |
| tst.js:4:25:4:33 | [JSXAttribute] foo="bar" | tst.js:4:25:4:27 | [Label] foo | semmle.label | 1 |
| tst.js:4:25:4:33 | [JSXAttribute] foo="bar" | tst.js:4:25:4:27 | [Label] foo | semmle.order | 1 |
| tst.js:4:25:4:33 | [JSXAttribute] foo="bar" | tst.js:4:29:4:33 | [Literal] "bar" | semmle.label | 2 |
| tst.js:4:25:4:33 | [JSXAttribute] foo="bar" | tst.js:4:29:4:33 | [Literal] "bar" | semmle.order | 2 |
| tst.js:5:1:5:6 | [JSXElement] <Foo/> | tst.js:5:2:5:4 | [VarRef] Foo | semmle.label | 0 |
| tst.js:5:1:5:6 | [JSXElement] <Foo/> | tst.js:5:2:5:4 | [VarRef] Foo | semmle.order | 0 |
| tst.js:5:1:5:7 | [ExprStmt] <Foo/>; | tst.js:5:1:5:6 | [JSXElement] <Foo/> | semmle.label | 1 |
| tst.js:5:1:5:7 | [ExprStmt] <Foo/>; | tst.js:5:1:5:6 | [JSXElement] <Foo/> | semmle.order | 1 |
| tst.js:6:1:6:10 | [JSXElement] <Foo-Bar/> | tst.js:6:2:6:8 | [Label] Foo-Bar | semmle.label | 0 |
| tst.js:6:1:6:10 | [JSXElement] <Foo-Bar/> | tst.js:6:2:6:8 | [Label] Foo-Bar | semmle.order | 0 |
| tst.js:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | tst.js:6:1:6:10 | [JSXElement] <Foo-Bar/> | semmle.label | 1 |
| tst.js:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | tst.js:6:1:6:10 | [JSXElement] <Foo-Bar/> | semmle.order | 1 |
| tst.js:4:25:4:33 | [JsxAttribute] foo="bar" | tst.js:4:25:4:27 | [Label] foo | semmle.label | 1 |
| tst.js:4:25:4:33 | [JsxAttribute] foo="bar" | tst.js:4:25:4:27 | [Label] foo | semmle.order | 1 |
| tst.js:4:25:4:33 | [JsxAttribute] foo="bar" | tst.js:4:29:4:33 | [Literal] "bar" | semmle.label | 2 |
| tst.js:4:25:4:33 | [JsxAttribute] foo="bar" | tst.js:4:29:4:33 | [Literal] "bar" | semmle.order | 2 |
| tst.js:5:1:5:6 | [JsxElement] <Foo/> | tst.js:5:2:5:4 | [VarRef] Foo | semmle.label | 0 |
| tst.js:5:1:5:6 | [JsxElement] <Foo/> | tst.js:5:2:5:4 | [VarRef] Foo | semmle.order | 0 |
| tst.js:5:1:5:7 | [ExprStmt] <Foo/>; | tst.js:5:1:5:6 | [JsxElement] <Foo/> | semmle.label | 1 |
| tst.js:5:1:5:7 | [ExprStmt] <Foo/>; | tst.js:5:1:5:6 | [JsxElement] <Foo/> | semmle.order | 1 |
| tst.js:6:1:6:10 | [JsxElement] <Foo-Bar/> | tst.js:6:2:6:8 | [Label] Foo-Bar | semmle.label | 0 |
| tst.js:6:1:6:10 | [JsxElement] <Foo-Bar/> | tst.js:6:2:6:8 | [Label] Foo-Bar | semmle.order | 0 |
| tst.js:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | tst.js:6:1:6:10 | [JsxElement] <Foo-Bar/> | semmle.label | 1 |
| tst.js:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | tst.js:6:1:6:10 | [JsxElement] <Foo-Bar/> | semmle.order | 1 |
| tst.js:7:1:7:52 | [DeclStmt] var fragment = ... | tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | semmle.label | 1 |
| tst.js:7:1:7:52 | [DeclStmt] var fragment = ... | tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | semmle.order | 1 |
| tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tst.js:7:5:7:12 | [VarDecl] fragment | semmle.label | 1 |
| tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tst.js:7:5:7:12 | [VarDecl] fragment | semmle.order | 1 |
| tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tst.js:7:16:7:52 | [JSXFragment] <> frag ... ext </> | semmle.label | 2 |
| tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tst.js:7:16:7:52 | [JSXFragment] <> frag ... ext </> | semmle.order | 2 |
| tst.js:7:16:7:52 | [JSXFragment] <> frag ... ext </> | file://:0:0:0:0 | (Body) | semmle.label | 1 |
| tst.js:7:16:7:52 | [JSXFragment] <> frag ... ext </> | file://:0:0:0:0 | (Body) | semmle.order | 1 |
| tst.js:7:33:7:38 | [JSXElement] <Foo/> | tst.js:7:34:7:36 | [VarRef] Foo | semmle.label | 0 |
| tst.js:7:33:7:38 | [JSXElement] <Foo/> | tst.js:7:34:7:36 | [VarRef] Foo | semmle.order | 0 |
| tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tst.js:7:16:7:52 | [JsxFragment] <> frag ... ext </> | semmle.label | 2 |
| tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tst.js:7:16:7:52 | [JsxFragment] <> frag ... ext </> | semmle.order | 2 |
| tst.js:7:16:7:52 | [JsxFragment] <> frag ... ext </> | file://:0:0:0:0 | (Body) | semmle.label | 1 |
| tst.js:7:16:7:52 | [JsxFragment] <> frag ... ext </> | file://:0:0:0:0 | (Body) | semmle.order | 1 |
| tst.js:7:33:7:38 | [JsxElement] <Foo/> | tst.js:7:34:7:36 | [VarRef] Foo | semmle.label | 0 |
| tst.js:7:33:7:38 | [JsxElement] <Foo/> | tst.js:7:34:7:36 | [VarRef] Foo | semmle.order | 0 |
| tstest.tsx:1:1:1:32 | [DeclStmt] var href = ... | tstest.tsx:1:5:1:31 | [VariableDeclarator] href = ... le.com" | semmle.label | 1 |
| tstest.tsx:1:1:1:32 | [DeclStmt] var href = ... | tstest.tsx:1:5:1:31 | [VariableDeclarator] href = ... le.com" | semmle.order | 1 |
| tstest.tsx:1:5:1:31 | [VariableDeclarator] href = ... le.com" | tstest.tsx:1:5:1:8 | [VarDecl] href | semmle.label | 1 |
@@ -252,57 +252,57 @@ edges
| tstest.tsx:2:19:2:44 | [Property] rel: "noopener noreferrer" | tstest.tsx:2:19:2:21 | [Label] rel | semmle.order | 1 |
| tstest.tsx:2:19:2:44 | [Property] rel: "noopener noreferrer" | tstest.tsx:2:24:2:44 | [Literal] "noopener noreferrer" | semmle.label | 2 |
| tstest.tsx:2:19:2:44 | [Property] rel: "noopener noreferrer" | tstest.tsx:2:24:2:44 | [Literal] "noopener noreferrer" | semmle.order | 2 |
| tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | file://:0:0:0:0 | (Attributes) | semmle.label | 2 |
| tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | file://:0:0:0:0 | (Attributes) | semmle.order | 2 |
| tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | file://:0:0:0:0 | (Body) | semmle.label | 1 |
| tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | file://:0:0:0:0 | (Body) | semmle.order | 1 |
| tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | tstest.tsx:3:2:3:2 | [Label] a | semmle.label | 0 |
| tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | tstest.tsx:3:2:3:2 | [Label] a | semmle.order | 0 |
| tstest.tsx:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | semmle.label | 1 |
| tstest.tsx:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | semmle.order | 1 |
| tstest.tsx:3:4:3:14 | [JSXAttribute] href={href} | tstest.tsx:3:4:3:7 | [Label] href | semmle.label | 1 |
| tstest.tsx:3:4:3:14 | [JSXAttribute] href={href} | tstest.tsx:3:4:3:7 | [Label] href | semmle.order | 1 |
| tstest.tsx:3:4:3:14 | [JSXAttribute] href={href} | tstest.tsx:3:10:3:13 | [VarRef] href | semmle.label | 2 |
| tstest.tsx:3:4:3:14 | [JSXAttribute] href={href} | tstest.tsx:3:10:3:13 | [VarRef] href | semmle.order | 2 |
| tstest.tsx:3:16:3:30 | [JSXAttribute] target="_blank" | tstest.tsx:3:16:3:21 | [Label] target | semmle.label | 1 |
| tstest.tsx:3:16:3:30 | [JSXAttribute] target="_blank" | tstest.tsx:3:16:3:21 | [Label] target | semmle.order | 1 |
| tstest.tsx:3:16:3:30 | [JSXAttribute] target="_blank" | tstest.tsx:3:23:3:30 | [Literal] "_blank" | semmle.label | 2 |
| tstest.tsx:3:16:3:30 | [JSXAttribute] target="_blank" | tstest.tsx:3:23:3:30 | [Literal] "_blank" | semmle.order | 2 |
| tstest.tsx:3:32:3:45 | [JSXAttribute] {...linkTypes} | tstest.tsx:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.label | 1 |
| tstest.tsx:3:32:3:45 | [JSXAttribute] {...linkTypes} | tstest.tsx:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.order | 1 |
| tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | file://:0:0:0:0 | (Attributes) | semmle.label | 2 |
| tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | file://:0:0:0:0 | (Attributes) | semmle.order | 2 |
| tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | file://:0:0:0:0 | (Body) | semmle.label | 1 |
| tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | file://:0:0:0:0 | (Body) | semmle.order | 1 |
| tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | tstest.tsx:3:2:3:2 | [Label] a | semmle.label | 0 |
| tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | tstest.tsx:3:2:3:2 | [Label] a | semmle.order | 0 |
| tstest.tsx:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | semmle.label | 1 |
| tstest.tsx:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | semmle.order | 1 |
| tstest.tsx:3:4:3:14 | [JsxAttribute] href={href} | tstest.tsx:3:4:3:7 | [Label] href | semmle.label | 1 |
| tstest.tsx:3:4:3:14 | [JsxAttribute] href={href} | tstest.tsx:3:4:3:7 | [Label] href | semmle.order | 1 |
| tstest.tsx:3:4:3:14 | [JsxAttribute] href={href} | tstest.tsx:3:10:3:13 | [VarRef] href | semmle.label | 2 |
| tstest.tsx:3:4:3:14 | [JsxAttribute] href={href} | tstest.tsx:3:10:3:13 | [VarRef] href | semmle.order | 2 |
| tstest.tsx:3:16:3:30 | [JsxAttribute] target="_blank" | tstest.tsx:3:16:3:21 | [Label] target | semmle.label | 1 |
| tstest.tsx:3:16:3:30 | [JsxAttribute] target="_blank" | tstest.tsx:3:16:3:21 | [Label] target | semmle.order | 1 |
| tstest.tsx:3:16:3:30 | [JsxAttribute] target="_blank" | tstest.tsx:3:23:3:30 | [Literal] "_blank" | semmle.label | 2 |
| tstest.tsx:3:16:3:30 | [JsxAttribute] target="_blank" | tstest.tsx:3:23:3:30 | [Literal] "_blank" | semmle.order | 2 |
| tstest.tsx:3:32:3:45 | [JsxAttribute] {...linkTypes} | tstest.tsx:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.label | 1 |
| tstest.tsx:3:32:3:45 | [JsxAttribute] {...linkTypes} | tstest.tsx:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.order | 1 |
| tstest.tsx:3:32:3:45 | [SpreadElement] ...linkTypes | tstest.tsx:3:36:3:44 | [VarRef] linkTypes | semmle.label | 1 |
| tstest.tsx:3:32:3:45 | [SpreadElement] ...linkTypes | tstest.tsx:3:36:3:44 | [VarRef] linkTypes | semmle.order | 1 |
| tstest.tsx:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | file://:0:0:0:0 | (Attributes) | semmle.label | 2 |
| tstest.tsx:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | file://:0:0:0:0 | (Attributes) | semmle.order | 2 |
| tstest.tsx:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.label | 0 |
| tstest.tsx:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.order | 0 |
| tstest.tsx:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | tstest.tsx:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | semmle.label | 1 |
| tstest.tsx:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | tstest.tsx:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | semmle.order | 1 |
| tstest.tsx:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | file://:0:0:0:0 | (Attributes) | semmle.label | 2 |
| tstest.tsx:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | file://:0:0:0:0 | (Attributes) | semmle.order | 2 |
| tstest.tsx:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.label | 0 |
| tstest.tsx:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.order | 0 |
| tstest.tsx:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | tstest.tsx:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | semmle.label | 1 |
| tstest.tsx:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | tstest.tsx:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | semmle.order | 1 |
| tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | tstest.tsx:4:2:4:13 | [VarRef] MyComponents | semmle.label | 1 |
| tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | tstest.tsx:4:2:4:13 | [VarRef] MyComponents | semmle.order | 1 |
| tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | tstest.tsx:4:15:4:23 | [Label] FancyLink | semmle.label | 2 |
| tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | tstest.tsx:4:15:4:23 | [Label] FancyLink | semmle.order | 2 |
| tstest.tsx:4:25:4:33 | [JSXAttribute] foo="bar" | tstest.tsx:4:25:4:27 | [Label] foo | semmle.label | 1 |
| tstest.tsx:4:25:4:33 | [JSXAttribute] foo="bar" | tstest.tsx:4:25:4:27 | [Label] foo | semmle.order | 1 |
| tstest.tsx:4:25:4:33 | [JSXAttribute] foo="bar" | tstest.tsx:4:29:4:33 | [Literal] "bar" | semmle.label | 2 |
| tstest.tsx:4:25:4:33 | [JSXAttribute] foo="bar" | tstest.tsx:4:29:4:33 | [Literal] "bar" | semmle.order | 2 |
| tstest.tsx:5:1:5:6 | [JSXElement] <Foo/> | tstest.tsx:5:2:5:4 | [VarRef] Foo | semmle.label | 0 |
| tstest.tsx:5:1:5:6 | [JSXElement] <Foo/> | tstest.tsx:5:2:5:4 | [VarRef] Foo | semmle.order | 0 |
| tstest.tsx:5:1:5:7 | [ExprStmt] <Foo/>; | tstest.tsx:5:1:5:6 | [JSXElement] <Foo/> | semmle.label | 1 |
| tstest.tsx:5:1:5:7 | [ExprStmt] <Foo/>; | tstest.tsx:5:1:5:6 | [JSXElement] <Foo/> | semmle.order | 1 |
| tstest.tsx:6:1:6:10 | [JSXElement] <Foo-Bar/> | tstest.tsx:6:2:6:8 | [Label] Foo-Bar | semmle.label | 0 |
| tstest.tsx:6:1:6:10 | [JSXElement] <Foo-Bar/> | tstest.tsx:6:2:6:8 | [Label] Foo-Bar | semmle.order | 0 |
| tstest.tsx:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | tstest.tsx:6:1:6:10 | [JSXElement] <Foo-Bar/> | semmle.label | 1 |
| tstest.tsx:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | tstest.tsx:6:1:6:10 | [JSXElement] <Foo-Bar/> | semmle.order | 1 |
| tstest.tsx:4:25:4:33 | [JsxAttribute] foo="bar" | tstest.tsx:4:25:4:27 | [Label] foo | semmle.label | 1 |
| tstest.tsx:4:25:4:33 | [JsxAttribute] foo="bar" | tstest.tsx:4:25:4:27 | [Label] foo | semmle.order | 1 |
| tstest.tsx:4:25:4:33 | [JsxAttribute] foo="bar" | tstest.tsx:4:29:4:33 | [Literal] "bar" | semmle.label | 2 |
| tstest.tsx:4:25:4:33 | [JsxAttribute] foo="bar" | tstest.tsx:4:29:4:33 | [Literal] "bar" | semmle.order | 2 |
| tstest.tsx:5:1:5:6 | [JsxElement] <Foo/> | tstest.tsx:5:2:5:4 | [VarRef] Foo | semmle.label | 0 |
| tstest.tsx:5:1:5:6 | [JsxElement] <Foo/> | tstest.tsx:5:2:5:4 | [VarRef] Foo | semmle.order | 0 |
| tstest.tsx:5:1:5:7 | [ExprStmt] <Foo/>; | tstest.tsx:5:1:5:6 | [JsxElement] <Foo/> | semmle.label | 1 |
| tstest.tsx:5:1:5:7 | [ExprStmt] <Foo/>; | tstest.tsx:5:1:5:6 | [JsxElement] <Foo/> | semmle.order | 1 |
| tstest.tsx:6:1:6:10 | [JsxElement] <Foo-Bar/> | tstest.tsx:6:2:6:8 | [Label] Foo-Bar | semmle.label | 0 |
| tstest.tsx:6:1:6:10 | [JsxElement] <Foo-Bar/> | tstest.tsx:6:2:6:8 | [Label] Foo-Bar | semmle.order | 0 |
| tstest.tsx:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | tstest.tsx:6:1:6:10 | [JsxElement] <Foo-Bar/> | semmle.label | 1 |
| tstest.tsx:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | tstest.tsx:6:1:6:10 | [JsxElement] <Foo-Bar/> | semmle.order | 1 |
| tstest.tsx:7:1:7:52 | [DeclStmt] var fragment = ... | tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | semmle.label | 1 |
| tstest.tsx:7:1:7:52 | [DeclStmt] var fragment = ... | tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | semmle.order | 1 |
| tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tstest.tsx:7:5:7:12 | [VarDecl] fragment | semmle.label | 1 |
| tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tstest.tsx:7:5:7:12 | [VarDecl] fragment | semmle.order | 1 |
| tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tstest.tsx:7:16:7:52 | [JSXFragment] <> frag ... ext </> | semmle.label | 2 |
| tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tstest.tsx:7:16:7:52 | [JSXFragment] <> frag ... ext </> | semmle.order | 2 |
| tstest.tsx:7:16:7:52 | [JSXFragment] <> frag ... ext </> | file://:0:0:0:0 | (Body) | semmle.label | 1 |
| tstest.tsx:7:16:7:52 | [JSXFragment] <> frag ... ext </> | file://:0:0:0:0 | (Body) | semmle.order | 1 |
| tstest.tsx:7:33:7:38 | [JSXElement] <Foo/> | tstest.tsx:7:34:7:36 | [VarRef] Foo | semmle.label | 0 |
| tstest.tsx:7:33:7:38 | [JSXElement] <Foo/> | tstest.tsx:7:34:7:36 | [VarRef] Foo | semmle.order | 0 |
| tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tstest.tsx:7:16:7:52 | [JsxFragment] <> frag ... ext </> | semmle.label | 2 |
| tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tstest.tsx:7:16:7:52 | [JsxFragment] <> frag ... ext </> | semmle.order | 2 |
| tstest.tsx:7:16:7:52 | [JsxFragment] <> frag ... ext </> | file://:0:0:0:0 | (Body) | semmle.label | 1 |
| tstest.tsx:7:16:7:52 | [JsxFragment] <> frag ... ext </> | file://:0:0:0:0 | (Body) | semmle.order | 1 |
| tstest.tsx:7:33:7:38 | [JsxElement] <Foo/> | tstest.tsx:7:34:7:36 | [VarRef] Foo | semmle.label | 0 |
| tstest.tsx:7:33:7:38 | [JsxElement] <Foo/> | tstest.tsx:7:34:7:36 | [VarRef] Foo | semmle.order | 0 |
graphProperties
| semmle.graphKind | tree |

View File

@@ -1,22 +1,22 @@
import javascript
query predicate htmlElements(JSXElement e) { e.getNameExpr() instanceof Label }
query predicate htmlElements(JsxElement e) { e.getNameExpr() instanceof Label }
query predicate jsxElementAttribute(JSXElement elt, int i, JSXAttribute attr) {
query predicate jsxElementAttribute(JsxElement elt, int i, JsxAttribute attr) {
attr = elt.getAttribute(i)
}
query predicate jsxElementAttributeName(JSXElement elt, int i, string name) {
query predicate jsxElementAttributeName(JsxElement elt, int i, string name) {
name = elt.getAttribute(i).getName()
}
query predicate jsxElementBody(JSXElement elt, int i, Expr body) { elt.getBodyElement(i) = body }
query predicate jsxElementBody(JsxElement elt, int i, Expr body) { elt.getBodyElement(i) = body }
query predicate jsxElementName(JSXElement elt, JSXName nameExpr, string name) {
query predicate jsxElementName(JsxElement elt, JsxName nameExpr, string name) {
elt.getNameExpr() = nameExpr and
name = elt.getName()
}
query predicate jsxFragments(JSXFragment fragment, int i, Expr body) {
query predicate jsxFragments(JsxFragment fragment, int i, Expr body) {
fragment.getBodyElement(i) = body
}

View File

@@ -2,4 +2,4 @@ import javascript
query File files() { any() }
query PackageJSON packageJsons() { any() }
query PackageJson packageJsons() { any() }

View File

@@ -38,7 +38,7 @@ getMainModule
| src/node_modules/d/package.json:1:1:4:1 | {\\n "na ... main"\\n} | d | src/node_modules/d/main.js:1:1:2:0 | <toplevel> |
| src/node_modules/third-party-module/package.json:1:1:5:1 | {\\n "na ... y.js"\\n} | third-party-module | src/node_modules/third-party-module/fancy.js:1:1:4:0 | <toplevel> |
| src/package.json:1:1:20:1 | {\\n "na ... "\\n }\\n} | test-package | src/index.js:1:1:4:0 | <toplevel> |
packageJSON
packageJson
| src/node_modules/b/package.json:1:1:4:1 | {\\n "na ... "lib"\\n} |
| src/node_modules/c/package.json:1:1:4:1 | {\\n "na ... src/"\\n} |
| src/node_modules/d/package.json:1:1:4:1 | {\\n "na ... main"\\n} |

View File

@@ -1,7 +1,7 @@
import javascript
import semmle.javascript.dependencies.Dependencies
query predicate dependencies(PackageJSON pkgjson, string pkg, string version) {
query predicate dependencies(PackageJson pkgjson, string pkg, string version) {
pkgjson.declaresDependency(pkg, version)
}
@@ -9,22 +9,22 @@ query predicate importedFile(Require r, File f) { f = r.getImportedFile() }
query predicate importedModule(Require r, Module m) { m = r.getImportedModule() }
query predicate modules(NPMPackage pkg, string name, Module mod) {
query predicate modules(NpmPackage pkg, string name, Module mod) {
name = pkg.getPackageName() and
mod = pkg.getAModule()
}
query predicate npm(PackageJSON pkg, string name, string version) {
query predicate npm(PackageJson pkg, string name, string version) {
name = pkg.getPackageName() and
version = pkg.getVersion()
}
query predicate getMainModule(PackageJSON pkg, string name, Module mod) {
query predicate getMainModule(PackageJson pkg, string name, Module mod) {
name = pkg.getPackageName() and
mod = pkg.getMainModule()
}
query predicate packageJSON(PackageJSON json) { any() }
query predicate packageJson(PackageJson json) { any() }
query predicate dependencyInfo(Dependency dep, string name, string version) {
dep.info(name, version)

View File

@@ -1,4 +1,4 @@
import semmle.javascript.SourceMaps
from SourceMappingComment smc
select smc, smc.getSourceMappingURL()
select smc, smc.getSourceMappingUrl()

View File

@@ -1,7 +1,7 @@
import javascript
query predicate test_CallSignature(
CallSignature call, string declType, ASTNode body, string abstractness
CallSignature call, string declType, AstNode body, string abstractness
) {
(if call.isAbstract() then abstractness = "abstract" else abstractness = "not abstract") and
declType = call.getDeclaringType().describe() and
@@ -9,7 +9,7 @@ query predicate test_CallSignature(
}
query predicate test_IndexSignature(
IndexSignature sig, string declType, ASTNode body, string abstractness
IndexSignature sig, string declType, AstNode body, string abstractness
) {
(if sig.isAbstract() then abstractness = "abstract" else abstractness = "not abstract") and
declType = sig.getDeclaringType().describe() and

View File

@@ -6,4 +6,4 @@ query predicate resolveableImport(Import imp, Module mod) {
not mod.getTopLevel().isExterns()
}
query Module getMain(PackageJSON json) { result = json.getMainModule() }
query Module getMain(PackageJson json) { result = json.getMainModule() }

View File

@@ -1,6 +1,6 @@
import javascript
abstract class Violation extends ASTNode {
abstract class Violation extends AstNode {
abstract string reason();
}
@@ -11,17 +11,17 @@ abstract class Violation extends ASTNode {
* The assertion holds if `name1 = name2`, indicating that `X` resolved to the right interface.
*/
class TypeResolutionAssertion extends TupleTypeExpr, Violation {
InterfaceDeclaration interface;
LocalTypeAccess typeAccess;
string expected;
string actual;
TypeResolutionAssertion() {
typeAccess = getElementType(0) and
expected = getElementType(1).(StringLiteralTypeExpr).getValue() and
typeAccess.getLocalTypeName() = interface.getIdentifier().(TypeDecl).getLocalTypeName() and
actual = interface.getField("where").getTypeAnnotation().(StringLiteralTypeExpr).getValue() and
actual != expected
exists(InterfaceDeclaration interface, LocalTypeAccess typeAccess |
typeAccess = getElementType(0) and
expected = getElementType(1).(StringLiteralTypeExpr).getValue() and
typeAccess.getLocalTypeName() = interface.getIdentifier().(TypeDecl).getLocalTypeName() and
actual = interface.getField("where").getTypeAnnotation().(StringLiteralTypeExpr).getValue() and
actual != expected
)
}
override string reason() {

View File

@@ -1,6 +1,6 @@
import javascript
query predicate symbols(ASTNode astNode, CanonicalName symbol) { ast_node_symbol(astNode, symbol) }
query predicate symbols(AstNode astNode, CanonicalName symbol) { ast_node_symbol(astNode, symbol) }
from Import imprt
select imprt, imprt.getImportedModule()

View File

@@ -1,7 +1,7 @@
import javascript
query predicate test_ChildIndex(ASTNode node, string res) {
exists(ASTNode child1, ASTNode child2, int index |
query predicate test_ChildIndex(AstNode node, string res) {
exists(AstNode child1, AstNode child2, int index |
node.getChild(index) = child1 and node.getChild(index) = child2 and child1 != child2
|
res = "There are two different children at index " + index.toString()

View File

@@ -1,6 +1,6 @@
import javascript
abstract class Violation extends ASTNode {
abstract class Violation extends AstNode {
abstract string reason();
}

View File

@@ -23,9 +23,7 @@ class ApiObject extends DataFlow::NewNode {
}
class Connection extends DataFlow::SourceNode {
ApiObject api;
Connection() { this = api.ref().getAMethodCall("createConnection") }
Connection() { this = any(ApiObject api).ref().getAMethodCall("createConnection") }
DataFlow::SourceNode ref(DataFlow::TypeTracker t) {
t.start() and
@@ -49,9 +47,7 @@ class Connection extends DataFlow::SourceNode {
}
class DataValue extends DataFlow::SourceNode {
Connection connection;
DataValue() { this = connection.getACallback().getParameter(0) }
DataValue() { this = any(Connection connection).getACallback().getParameter(0) }
DataFlow::SourceNode ref(DataFlow::TypeTracker t) {
t.start() and

View File

@@ -1,17 +1,20 @@
import semmle.javascript.frameworks.React
query predicate test_JSXname(JSXElement element, JSXName jsxname, string name, string type) {
query predicate test_JSXname(JsxElement element, JsxName jsxname, string name, string type) {
name = jsxname.getValue() and
(
jsxname instanceof Identifier and type = "Identifier"
or
jsxname instanceof ThisExpr and type = "thisExpr"
or
jsxname.(DotExpr).getBase() instanceof JSXName and type = "dot"
jsxname.(DotExpr).getBase() instanceof JsxName and type = "dot"
or
jsxname instanceof JSXQualifiedName and type = "qualifiedName"
jsxname instanceof JsxQualifiedName and type = "qualifiedName"
) and
element.getNameExpr() = jsxname
}
query ThisExpr test_JSXName_this(JSXElement element) { result.getParentExpr+() = element }
query ThisExpr test_JsxName_this(JsxElement element) { result.getParentExpr+() = element }
/** DEPRECATED: Alias for test_JsxName_this */
deprecated ThisExpr test_JSXName_this(JSXElement element) { result = test_JsxName_this(element) }

View File

@@ -300,7 +300,7 @@ test_JSXname
| useHigherOrderComponent.jsx:5:12:5:39 | <SomeCo ... "red"/> | useHigherOrderComponent.jsx:5:13:5:25 | SomeComponent | SomeComponent | Identifier |
| useHigherOrderComponent.jsx:11:12:11:46 | <LazyLo ... lazy"/> | useHigherOrderComponent.jsx:11:13:11:31 | LazyLoadedComponent | LazyLoadedComponent | Identifier |
| useHigherOrderComponent.jsx:17:12:17:48 | <LazyLo ... azy2"/> | useHigherOrderComponent.jsx:17:13:17:32 | LazyLoadedComponent2 | LazyLoadedComponent2 | Identifier |
test_JSXName_this
test_JsxName_this
| es5.js:4:12:4:45 | <div>He ... }</div> | es5.js:4:24:4:27 | this |
| es5.js:20:12:20:44 | <h1>Hel ... e}</h1> | es5.js:20:24:20:27 | this |
| es6.js:3:12:3:45 | <div>He ... }</div> | es6.js:3:24:3:27 | this |

View File

@@ -1,21 +1,21 @@
import javascript
query predicate punycode(DataFlow::Node n) { n = punycode::punycodeMember(_) }
query predicate punycode(DataFlow::Node n) { n = Punycode::punycodeMember(_) }
query predicate querydashstring(DataFlow::Node n) { n = querydashstring::querydashstringMember(_) }
query predicate querydashstring(DataFlow::Node n) { n = Querydashstring::querydashstringMember(_) }
query predicate querystring(DataFlow::Node n) { n = querystring::querystringMember(_) }
query predicate querystring(DataFlow::Node n) { n = Querystring::querystringMember(_) }
query predicate querystringify(DataFlow::Node n) { n = querystringify::querystringifyMember(_) }
query predicate querystringify(DataFlow::Node n) { n = Querystringify::querystringifyMember(_) }
query predicate uridashjs(DataFlow::Node n) { n = uridashjs::uridashjsMember(_) }
query predicate uridashjs(DataFlow::Node n) { n = Uridashjs::uridashjsMember(_) }
query predicate urijs(DataFlow::Node n) { n = urijs::urijs() }
query predicate urijs(DataFlow::Node n) { n = Urijs::urijs() }
query predicate uriLibraryStep(DataFlow::Node pred, DataFlow::Node succ) {
TaintTracking::uriStep(pred, succ)
}
query predicate url(DataFlow::Node n) { n = url::urlMember(_) }
query predicate url(DataFlow::Node n) { n = Url::urlMember(_) }
query predicate urlParse(DataFlow::Node n) { n = urlParse::urlParse() }
query predicate urlParse(DataFlow::Node n) { n = UrlParse::urlParse() }

View File

@@ -1,4 +1,3 @@
WARNING: Type JQueryMethodCall has been deprecated and may be removed in future (JQueryMethodCall.ql:3,6-22)
| tracking.js:7:5:7:24 | this.elm.html('foo') | html |
| tracking.js:14:5:14:17 | e.html('foo') | html |
| tracking.js:15:5:15:26 | e.attr( ... 'foo') | attr |

View File

@@ -1,4 +1,4 @@
import javascript
from JQueryMethodCall jqmc
from JQuery::MethodCall jqmc
select jqmc, jqmc.getMethodName()

View File

@@ -1,4 +1,3 @@
WARNING: Type JQueryMethodCall has been deprecated and may be removed in future (interpretsArgumentAsHtml.ql:3,6-22)
| tracking.js:7:5:7:24 | this.elm.html('foo') | tracking.js:7:19:7:23 | 'foo' |
| tracking.js:14:5:14:17 | e.html('foo') | tracking.js:14:12:14:16 | 'foo' |
| tracking.js:23:7:23:15 | $('#foo') | tracking.js:23:9:23:14 | '#foo' |

View File

@@ -1,5 +1,5 @@
import javascript
from JQueryMethodCall mc, Expr e
where mc.interpretsArgumentAsHtml(e)
select mc, e
from JQuery::MethodCall mc, DataFlow::Node node
where mc.interpretsArgumentAsHtml(node)
select mc, node

View File

@@ -52,6 +52,11 @@ nodes
| child_process-test.js:83:19:83:36 | req.query.fileName |
| child_process-test.js:85:37:85:54 | req.query.fileName |
| child_process-test.js:85:37:85:54 | req.query.fileName |
| child_process-test.js:94:11:94:35 | "ping " ... ms.host |
| child_process-test.js:94:11:94:35 | "ping " ... ms.host |
| child_process-test.js:94:21:94:30 | ctx.params |
| child_process-test.js:94:21:94:30 | ctx.params |
| child_process-test.js:94:21:94:35 | ctx.params.host |
| exec-sh2.js:9:17:9:23 | command |
| exec-sh2.js:10:40:10:46 | command |
| exec-sh2.js:10:40:10:46 | command |
@@ -229,6 +234,10 @@ edges
| child_process-test.js:83:19:83:36 | req.query.fileName | child_process-test.js:83:19:83:36 | req.query.fileName |
| child_process-test.js:85:37:85:54 | req.query.fileName | lib/subLib/index.js:7:32:7:35 | name |
| child_process-test.js:85:37:85:54 | req.query.fileName | lib/subLib/index.js:7:32:7:35 | name |
| child_process-test.js:94:21:94:30 | ctx.params | child_process-test.js:94:21:94:35 | ctx.params.host |
| child_process-test.js:94:21:94:30 | ctx.params | child_process-test.js:94:21:94:35 | ctx.params.host |
| child_process-test.js:94:21:94:35 | ctx.params.host | child_process-test.js:94:11:94:35 | "ping " ... ms.host |
| child_process-test.js:94:21:94:35 | ctx.params.host | child_process-test.js:94:11:94:35 | "ping " ... ms.host |
| exec-sh2.js:9:17:9:23 | command | exec-sh2.js:10:40:10:46 | command |
| exec-sh2.js:9:17:9:23 | command | exec-sh2.js:10:40:10:46 | command |
| exec-sh2.js:14:9:14:49 | cmd | exec-sh2.js:15:12:15:14 | cmd |
@@ -365,6 +374,7 @@ edges
| child_process-test.js:67:3:67:21 | cp.spawn(cmd, args) | child_process-test.js:6:25:6:31 | req.url | child_process-test.js:48:15:48:17 | cmd | This command depends on $@. | child_process-test.js:6:25:6:31 | req.url | a user-provided value |
| child_process-test.js:75:29:75:31 | cmd | child_process-test.js:73:25:73:31 | req.url | child_process-test.js:75:29:75:31 | cmd | This command depends on $@. | child_process-test.js:73:25:73:31 | req.url | a user-provided value |
| child_process-test.js:83:19:83:36 | req.query.fileName | child_process-test.js:83:19:83:36 | req.query.fileName | child_process-test.js:83:19:83:36 | req.query.fileName | This command depends on $@. | child_process-test.js:83:19:83:36 | req.query.fileName | a user-provided value |
| child_process-test.js:94:11:94:35 | "ping " ... ms.host | child_process-test.js:94:21:94:30 | ctx.params | child_process-test.js:94:11:94:35 | "ping " ... ms.host | This command depends on $@. | child_process-test.js:94:21:94:30 | ctx.params | a user-provided value |
| exec-sh2.js:10:12:10:57 | cp.spaw ... ptions) | exec-sh2.js:14:25:14:31 | req.url | exec-sh2.js:10:40:10:46 | command | This command depends on $@. | exec-sh2.js:14:25:14:31 | req.url | a user-provided value |
| exec-sh.js:15:12:15:61 | cp.spaw ... ptions) | exec-sh.js:19:25:19:31 | req.url | exec-sh.js:15:44:15:50 | command | This command depends on $@. | exec-sh.js:19:25:19:31 | req.url | a user-provided value |
| execSeries.js:14:41:14:47 | command | execSeries.js:18:34:18:40 | req.url | execSeries.js:14:41:14:47 | command | This command depends on $@. | execSeries.js:18:34:18:40 | req.url | a user-provided value |

View File

@@ -85,4 +85,11 @@ new webpackDevServer(compiler, {
require("my-sub-lib").foo(req.query.fileName); // calls lib/subLib/index.js#foo
});
}
});
import Router from "koa-router";
const router = new Router();
router.get("/ping/:host", async (ctx) => {
cp.exec("ping " + ctx.params.host); // NOT OK
});

View File

@@ -8,3 +8,4 @@
| tst.js:39:2:39:29 | rejectU ... ndirect | Disabling certificate validation is strongly discouraged. |
| tst.js:45:2:45:28 | rejectU ... !!false | Disabling certificate validation is strongly discouraged. |
| tst.js:48:2:48:26 | rejectU ... : !true | Disabling certificate validation is strongly discouraged. |
| tst.js:74:9:74:33 | rejectU ... : false | Disabling certificate validation is strongly discouraged. |

View File

@@ -68,3 +68,10 @@ new https.Agent({
new https.Agent({
rejectUnauthorized: typeof getOptions().rejectUnauthorized === 'boolean' ? getOptions().rejectUnauthorized : undefined // OK
});
function getSomeunsafeOptions() {
return {
rejectUnauthorized: false // NOT OK
}
}
new https.Agent(getSomeunsafeOptions());

View File

@@ -1,8 +1,8 @@
import javascript
query predicate test_query19(PackageDependencies deps, string res) {
exists(NPMPackage pkg, string name |
deps = pkg.getPackageJSON().getDependencies() and
exists(NpmPackage pkg, string name |
deps = pkg.getPackageJson().getDependencies() and
deps.getADependency(name, _) and
not exists(Require req | req.getTopLevel() = pkg.getAModule() |
name = req.getImportedPath().getValue()

View File

@@ -9,17 +9,17 @@ import javascript
import Osprey
import RAML
RAMLMethod getSpecification(OspreyMethod om) {
exists(RAMLResource rr, File f, string rPath |
RamlMethod getSpecification(OspreyMethod om) {
exists(RamlResource rr, File f, string rPath |
rr.getLocation().getFile() = f and
f = om.getDefinition().getAPI().getSpecFile() and
f = om.getDefinition().getApi().getSpecFile() and
rPath = om.getResourcePath() and
rr.getPath() = rPath.regexpReplaceAll("/:([^/]+)/", "/{$1}/") and
result = rr.getMethod(om.getVerb())
)
}
from MethodResponseSetStatus mrss, RAMLMethod rm
from MethodResponseSetStatus mrss, RamlMethod rm
where
rm = getSpecification(mrss.getMethod()) and
not exists(rm.getResponse(mrss.getStatusCode()))

View File

@@ -13,8 +13,8 @@ class Osprey extends Variable {
}
/** A call to `osprey.create`. */
class OspreyCreateAPICall extends MethodCallExpr {
OspreyCreateAPICall() {
class OspreyCreateApiCall extends MethodCallExpr {
OspreyCreateApiCall() {
getReceiver().(VarAccess).getVariable() instanceof Osprey and
getMethodName() = "create"
}
@@ -29,22 +29,31 @@ class OspreyCreateAPICall extends MethodCallExpr {
}
}
/** A variable in which an Osprey API object is stored. */
class OspreyAPI extends Variable {
OspreyAPI() { getAnAssignedExpr() instanceof OspreyCreateAPICall }
/** DEPRECATED: Alias for OspreyCreateApiCall */
deprecated class OspreyCreateAPICall = OspreyCreateApiCall;
File getSpecFile() { result = getAnAssignedExpr().(OspreyCreateAPICall).getSpecFile() }
/** A variable in which an Osprey API object is stored. */
class OspreyApi extends Variable {
OspreyApi() { getAnAssignedExpr() instanceof OspreyCreateApiCall }
File getSpecFile() { result = getAnAssignedExpr().(OspreyCreateApiCall).getSpecFile() }
}
/** DEPRECATED: Alias for OspreyApi */
deprecated class OspreyAPI = OspreyApi;
/** An Osprey REST method definition. */
class OspreyMethodDefinition extends MethodCallExpr {
OspreyMethodDefinition() {
exists(OspreyAPI api | getReceiver() = api.getAnAccess()) and
exists(OspreyApi api | getReceiver() = api.getAnAccess()) and
getMethodName() = httpVerb()
}
/** Get the API to which this method belongs. */
OspreyAPI getAPI() { getReceiver() = result.getAnAccess() }
OspreyApi getApi() { getReceiver() = result.getAnAccess() }
/** DEPRECATED: Alias for getApi */
deprecated OspreyAPI getAPI() { result = getApi() }
/** Get the verb which this method implements. */
string getVerb() { result = getMethodName() }

View File

@@ -3,14 +3,17 @@ import javascript
import HTTP
/** A RAML specification. */
class RAMLSpec extends YAMLDocument, YAMLMapping {
RAMLSpec() { getLocation().getFile().getExtension() = "raml" }
class RamlSpec extends YAMLDocument, YAMLMapping {
RamlSpec() { getLocation().getFile().getExtension() = "raml" }
}
/** DEPRECATED: Alias for RamlSpec */
deprecated class RAMLSpec = RamlSpec;
/** A RAML resource specification. */
class RAMLResource extends YAMLMapping {
RAMLResource() {
getDocument() instanceof RAMLSpec and
class RamlResource extends YAMLMapping {
RamlResource() {
getDocument() instanceof RamlSpec and
exists(YAMLMapping m, string name |
this = m.lookup(name) and
name.matches("/%")
@@ -19,25 +22,28 @@ class RAMLResource extends YAMLMapping {
/** Get the path of this resource relative to the API root. */
string getPath() {
exists(RAMLSpec spec | this = spec.lookup(result))
exists(RamlSpec spec | this = spec.lookup(result))
or
exists(RAMLResource that, string p |
exists(RamlResource that, string p |
this = that.lookup(p) and
result = that.getPath() + p
)
}
/** Get the method for this resource with the given verb. */
RAMLMethod getMethod(string verb) {
RamlMethod getMethod(string verb) {
verb = httpVerb() and
result = lookup(verb)
}
}
/** DEPRECATED: Alias for RamlResource */
deprecated class RAMLResource = RamlResource;
/** A RAML method specification. */
class RAMLMethod extends YAMLValue {
RAMLMethod() {
getDocument() instanceof RAMLSpec and
class RamlMethod extends YAMLValue {
RamlMethod() {
getDocument() instanceof RamlSpec and
exists(YAMLMapping obj | this = obj.lookup(httpVerb()))
}
@@ -50,3 +56,6 @@ class RAMLMethod extends YAMLValue {
)
}
}
/** DEPRECATED: Alias for RamlMethod */
deprecated class RAMLMethod = RamlMethod;

View File

@@ -1,9 +1,9 @@
import javascript
/** A RAML specification. */
class RAMLSpec extends YAMLDocument, YAMLMapping {
RAMLSpec() { getLocation().getFile().getExtension() = "raml" }
class RamlSpec extends YAMLDocument, YAMLMapping {
RamlSpec() { getLocation().getFile().getExtension() = "raml" }
}
from RAMLSpec s
from RamlSpec s
select s

View File

@@ -3,14 +3,14 @@ import javascript
string httpVerb() { result = ["get", "put", "post", "delete"] }
/** A RAML specification. */
class RAMLSpec extends YAMLDocument, YAMLMapping {
RAMLSpec() { getLocation().getFile().getExtension() = "raml" }
class RamlSpec extends YAMLDocument, YAMLMapping {
RamlSpec() { getLocation().getFile().getExtension() = "raml" }
}
/** A RAML resource specification. */
class RAMLResource extends YAMLMapping {
RAMLResource() {
getDocument() instanceof RAMLSpec and
class RamlResource extends YAMLMapping {
RamlResource() {
getDocument() instanceof RamlSpec and
exists(YAMLMapping m, string name |
this = m.lookup(name) and
name.matches("/%")
@@ -19,25 +19,25 @@ class RAMLResource extends YAMLMapping {
/** Get the path of this resource relative to the API root. */
string getPath() {
exists(RAMLSpec spec | this = spec.lookup(result))
exists(RamlSpec spec | this = spec.lookup(result))
or
exists(RAMLResource that, string p |
exists(RamlResource that, string p |
this = that.lookup(p) and
result = that.getPath() + p
)
}
/** Get the method for this resource with the given verb. */
RAMLMethod getMethod(string verb) {
RamlMethod getMethod(string verb) {
verb = httpVerb() and
result = lookup(verb)
}
}
/** A RAML method specification. */
class RAMLMethod extends YAMLValue {
RAMLMethod() {
getDocument() instanceof RAMLSpec and
class RamlMethod extends YAMLValue {
RamlMethod() {
getDocument() instanceof RamlSpec and
exists(YAMLMapping obj | this = obj.lookup(httpVerb()))
}
@@ -51,5 +51,5 @@ class RAMLMethod extends YAMLValue {
}
}
from RAMLResource rr
from RamlResource rr
select rr, rr.getPath()

View File

@@ -3,14 +3,14 @@ import javascript
string httpVerb() { result = ["get", "put", "post", "delete"] }
/** A RAML specification. */
class RAMLSpec extends YAMLDocument, YAMLMapping {
RAMLSpec() { getLocation().getFile().getExtension() = "raml" }
class RamlSpec extends YAMLDocument, YAMLMapping {
RamlSpec() { getLocation().getFile().getExtension() = "raml" }
}
/** A RAML resource specification. */
class RAMLResource extends YAMLMapping {
RAMLResource() {
getDocument() instanceof RAMLSpec and
class RamlResource extends YAMLMapping {
RamlResource() {
getDocument() instanceof RamlSpec and
exists(YAMLMapping m, string name |
this = m.lookup(name) and
name.matches("/%")
@@ -19,24 +19,24 @@ class RAMLResource extends YAMLMapping {
/** Get the path of this resource relative to the API root. */
string getPath() {
exists(RAMLSpec spec | this = spec.lookup(result))
exists(RamlSpec spec | this = spec.lookup(result))
or
exists(RAMLResource that, string p |
exists(RamlResource that, string p |
this = that.lookup(p) and
result = that.getPath() + p
)
}
/** Get the method for this resource with the given verb. */
RAMLMethod getMethod(string verb) {
RamlMethod getMethod(string verb) {
verb = httpVerb() and
result = lookup(verb)
}
}
class RAMLMethod extends YAMLValue {
RAMLMethod() {
getDocument() instanceof RAMLSpec and
class RamlMethod extends YAMLValue {
RamlMethod() {
getDocument() instanceof RamlSpec and
exists(YAMLMapping obj | this = obj.lookup(httpVerb()))
}
}

View File

@@ -3,14 +3,14 @@ import javascript
string httpVerb() { result = ["get", "put", "post", "delete"] }
/** A RAML specification. */
class RAMLSpec extends YAMLDocument, YAMLMapping {
RAMLSpec() { getLocation().getFile().getExtension() = "raml" }
class RamlSpec extends YAMLDocument, YAMLMapping {
RamlSpec() { getLocation().getFile().getExtension() = "raml" }
}
/** A RAML resource specification. */
class RAMLResource extends YAMLMapping {
RAMLResource() {
getDocument() instanceof RAMLSpec and
class RamlResource extends YAMLMapping {
RamlResource() {
getDocument() instanceof RamlSpec and
exists(YAMLMapping m, string name |
this = m.lookup(name) and
name.matches("/%")
@@ -19,25 +19,25 @@ class RAMLResource extends YAMLMapping {
/** Get the path of this resource relative to the API root. */
string getPath() {
exists(RAMLSpec spec | this = spec.lookup(result))
exists(RamlSpec spec | this = spec.lookup(result))
or
exists(RAMLResource that, string p |
exists(RamlResource that, string p |
this = that.lookup(p) and
result = that.getPath() + p
)
}
/** Get the method for this resource with the given verb. */
RAMLMethod getMethod(string verb) {
RamlMethod getMethod(string verb) {
verb = httpVerb() and
result = lookup(verb)
}
}
/** A RAML method specification. */
class RAMLMethod extends YAMLValue {
RAMLMethod() {
getDocument() instanceof RAMLSpec and
class RamlMethod extends YAMLValue {
RamlMethod() {
getDocument() instanceof RamlSpec and
exists(YAMLMapping obj | this = obj.lookup(httpVerb()))
}
@@ -51,5 +51,5 @@ class RAMLMethod extends YAMLValue {
}
}
from RAMLMethod m
from RamlMethod m
select m