mirror of
https://github.com/github/codeql.git
synced 2026-05-01 03:35:13 +02:00
JS: Add support for " of " syntax to help during transition
This commit is contained in:
@@ -49,6 +49,23 @@ class AccessPath extends string instanceof AccessPath::Range {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An access path that uses `A of B` syntax, which should now be written as `B.A`.
|
||||
*
|
||||
* This is a compatibility layer to help test at checkpoints during transition to the new syntax.
|
||||
*/
|
||||
private class LegacyAccessPath extends AccessPath {
|
||||
LegacyAccessPath() { this.matches("% of %") }
|
||||
|
||||
private string getRawSplit(int n) { result = this.splitAt(" of ", n) }
|
||||
|
||||
private int getNumRawSplits() { result = strictcount(int n | exists(getRawSplit(n))) }
|
||||
|
||||
override string getRawToken(int n) { result = getRawSplit(getNumRawSplits() - n - 1) }
|
||||
|
||||
override predicate hasSyntaxError() { none() }
|
||||
}
|
||||
|
||||
/**
|
||||
* An access part token such as `Argument[1]` or `ReturnValue`, appearing in one or more access paths.
|
||||
*/
|
||||
|
||||
@@ -28,6 +28,7 @@ taintFlow
|
||||
| test.js:76:31:76:38 | source() | test.js:76:31:76:38 | source() |
|
||||
| test.js:77:34:77:41 | source() | test.js:77:34:77:41 | source() |
|
||||
| test.js:81:28:81:35 | source() | test.js:81:28:81:35 | source() |
|
||||
| test.js:87:40:87:47 | source() | test.js:87:40:87:47 | source() |
|
||||
isSink
|
||||
| test.js:46:18:46:25 | source() | test-sink |
|
||||
| test.js:47:22:47:29 | source() | test-sink |
|
||||
@@ -71,6 +72,7 @@ isSink
|
||||
| test.js:78:34:78:34 | 3 | test-sink |
|
||||
| test.js:81:28:81:35 | source() | test-sink |
|
||||
| test.js:82:28:82:28 | 1 | test-sink |
|
||||
| test.js:87:40:87:47 | source() | test-sink |
|
||||
syntaxErrors
|
||||
| Member[foo |
|
||||
| Member[foo] .Member[bar] |
|
||||
|
||||
@@ -83,4 +83,6 @@ function testSinks() {
|
||||
testlib.mySinkIfArityTwo(source(), 2, 3); // OK
|
||||
testlib.mySinkIfArityTwo(1, source(), 3); // OK
|
||||
testlib.mySinkIfArityTwo(1, 2, source()); // OK
|
||||
|
||||
testlib.one.two.three().legacySyntax(source()); // NOT OK
|
||||
}
|
||||
|
||||
@@ -34,6 +34,13 @@ class Sinks extends ModelInput::SinkModelCsv {
|
||||
}
|
||||
}
|
||||
|
||||
class LegacySyntaxTest extends ModelInput::SinkModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
"testlib;;Argument[0] of Member[legacySyntax] of ReturnValue of Member[three] of Member[two] of Member[one];test-sink"
|
||||
}
|
||||
}
|
||||
|
||||
class BasicTaintTracking extends TaintTracking::Configuration {
|
||||
BasicTaintTracking() { this = "BasicTaintTracking" }
|
||||
|
||||
@@ -58,21 +65,17 @@ query predicate isSink(DataFlow::Node node, string kind) {
|
||||
|
||||
class SyntaxErrorTest extends ModelInput::SinkModelCsv {
|
||||
override predicate row(string row) {
|
||||
row = [
|
||||
"testlib;;Member[foo],Member[bar];test-sink",
|
||||
"testlib;;Member[foo] Member[bar];test-sink",
|
||||
"testlib;;Member[foo]. Member[bar];test-sink",
|
||||
"testlib;;Member[foo], Member[bar];test-sink",
|
||||
"testlib;;Member[foo]..Member[bar];test-sink",
|
||||
"testlib;;Member[foo] .Member[bar];test-sink",
|
||||
"testlib;;Member[foo]Member[bar];test-sink",
|
||||
"testlib;;Member[foo;test-sink",
|
||||
"testlib;;Member[foo]];test-sink",
|
||||
"testlib;;Member[foo]].Member[bar];test-sink"
|
||||
]
|
||||
row =
|
||||
[
|
||||
"testlib;;Member[foo],Member[bar];test-sink", "testlib;;Member[foo] Member[bar];test-sink",
|
||||
"testlib;;Member[foo]. Member[bar];test-sink",
|
||||
"testlib;;Member[foo], Member[bar];test-sink",
|
||||
"testlib;;Member[foo]..Member[bar];test-sink",
|
||||
"testlib;;Member[foo] .Member[bar];test-sink", "testlib;;Member[foo]Member[bar];test-sink",
|
||||
"testlib;;Member[foo;test-sink", "testlib;;Member[foo]];test-sink",
|
||||
"testlib;;Member[foo]].Member[bar];test-sink"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
query predicate syntaxErrors(AccessPathSyntax::AccessPath path) {
|
||||
path.hasSyntaxError()
|
||||
}
|
||||
query predicate syntaxErrors(AccessPathSyntax::AccessPath path) { path.hasSyntaxError() }
|
||||
|
||||
Reference in New Issue
Block a user