mirror of
https://github.com/github/codeql.git
synced 2026-05-02 20:25:13 +02:00
JS: Verify models even if package is not used in database
This commit is contained in:
@@ -149,6 +149,14 @@ module ModelInput {
|
||||
|
||||
private import ModelInput
|
||||
|
||||
/**
|
||||
* An empty class, except in specific tests.
|
||||
*
|
||||
* If this is non-empty, all models are parsed even if the package is not
|
||||
* considered relevant for the current database.
|
||||
*/
|
||||
abstract class TestAllModels extends Unit { }
|
||||
|
||||
/**
|
||||
* Append `;dummy` to the value of `s` to work around the fact that `string.split(delim,n)`
|
||||
* does not preserve empty trailing substrings.
|
||||
@@ -237,7 +245,11 @@ private predicate isRelevantPackage(string package) {
|
||||
summaryModel(package, _, _, _, _, _) or
|
||||
typeModel(package, _, _, _, _)
|
||||
) and
|
||||
Specific::isPackageUsed(package)
|
||||
(
|
||||
Specific::isPackageUsed(package)
|
||||
or
|
||||
exists(TestAllModels t)
|
||||
)
|
||||
or
|
||||
exists(string other |
|
||||
isRelevantPackage(other) and
|
||||
|
||||
@@ -88,16 +88,3 @@ syntaxErrors
|
||||
| Member[foo]Member[bar] |
|
||||
| Member[foo]] |
|
||||
| Member[foo]].Member[bar] |
|
||||
warning
|
||||
| CSV type row should have 5 columns but has 2: testlib;TooFewColumns |
|
||||
| CSV type row should have 5 columns but has 8: testlib;TooManyColumns;;;Member[Foo].Instance;too;many;columns |
|
||||
| Invalid argument '0-1' in token 'Argument[0-1]' in access path: Method[foo].Argument[0-1] |
|
||||
| Invalid argument '*' in token 'Argument[*]' in access path: Method[foo].Argument[*] |
|
||||
| Invalid token 'Argument' is missing its arguments, in access path: Method[foo].Argument |
|
||||
| Invalid token 'Member' is missing its arguments, in access path: Method[foo].Member |
|
||||
| Invalid token name 'Arg' in access path: Method[foo].Arg[0] |
|
||||
| Invalid token name 'Method' in access path: Method[foo].Arg[0] |
|
||||
| Invalid token name 'Method' in access path: Method[foo].Argument |
|
||||
| Invalid token name 'Method' in access path: Method[foo].Argument[0-1] |
|
||||
| Invalid token name 'Method' in access path: Method[foo].Argument[*] |
|
||||
| Invalid token name 'Method' in access path: Method[foo].Member |
|
||||
|
||||
@@ -73,20 +73,3 @@ class SyntaxErrorTest extends ModelInput::SinkModelCsv {
|
||||
}
|
||||
|
||||
query predicate syntaxErrors(AccessPathSyntax::AccessPath path) { path.hasSyntaxError() }
|
||||
|
||||
private class InvalidTypeModel extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"testlib;TooManyColumns;;;Member[Foo].Instance;too;many;columns", //
|
||||
"testlib;TooFewColumns", //
|
||||
"testlib;X;testlib;Y;Method[foo].Arg[0]", //
|
||||
"testlib;X;testlib;Y;Method[foo].Argument[0-1]", //
|
||||
"testlib;X;testlib;Y;Method[foo].Argument[*]", //
|
||||
"testlib;X;testlib;Y;Method[foo].Argument", //
|
||||
"testlib;X;testlib;Y;Method[foo].Member", //
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
query predicate warning = ModelOutput::getAWarning/0;
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
| CSV type row should have 5 columns but has 2: test;TooFewColumns |
|
||||
| CSV type row should have 5 columns but has 8: test;TooManyColumns;;;Member[Foo].Instance;too;many;columns |
|
||||
| Invalid argument '0-1' in token 'Argument[0-1]' in access path: Method[foo].Argument[0-1] |
|
||||
| Invalid argument '0..' in token 'Argument[0..]' in access path: Argument[0..].Member[password] |
|
||||
| Invalid argument '0..' in token 'Argument[0..]' in access path: Argument[0..].Member[username] |
|
||||
| Invalid argument '0..' in token 'Argument[0..]' in access path: Member[executeSql].Argument[0..].Parameter[1] |
|
||||
| Invalid argument '0..' in token 'Argument[0..]' in access path: Member[run].Argument[0..].Parameter[1] |
|
||||
| Invalid argument '*' in token 'Argument[*]' in access path: Method[foo].Argument[*] |
|
||||
| Invalid token 'Argument' is missing its arguments, in access path: Method[foo].Argument |
|
||||
| Invalid token 'Member' is missing its arguments, in access path: Method[foo].Member |
|
||||
| Invalid token name 'Arg' in access path: Method[foo].Arg[0] |
|
||||
| Invalid token name 'Method' in access path: Method[foo].Arg[0] |
|
||||
| Invalid token name 'Method' in access path: Method[foo].Argument |
|
||||
| Invalid token name 'Method' in access path: Method[foo].Argument[0-1] |
|
||||
| Invalid token name 'Method' in access path: Method[foo].Argument[*] |
|
||||
| Invalid token name 'Method' in access path: Method[foo].Member |
|
||||
24
javascript/ql/test/library-tests/frameworks/data/warnings.ql
Normal file
24
javascript/ql/test/library-tests/frameworks/data/warnings.ql
Normal file
@@ -0,0 +1,24 @@
|
||||
import javascript
|
||||
import semmle.javascript.frameworks.data.internal.AccessPathSyntax as AccessPathSyntax
|
||||
import semmle.javascript.frameworks.data.internal.ApiGraphModels as ApiGraphModels
|
||||
|
||||
private class InvalidTypeModel extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"test;TooManyColumns;;;Member[Foo].Instance;too;many;columns", //
|
||||
"test;TooFewColumns", //
|
||||
"test;X;test;Y;Method[foo].Arg[0]", //
|
||||
"test;X;test;Y;Method[foo].Argument[0-1]", //
|
||||
"test;X;test;Y;Method[foo].Argument[*]", //
|
||||
"test;X;test;Y;Method[foo].Argument", //
|
||||
"test;X;test;Y;Method[foo].Member", //
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
class IsTesting extends ApiGraphModels::TestAllModels {
|
||||
IsTesting() { this = this }
|
||||
}
|
||||
|
||||
query predicate warning = ModelOutput::getAWarning/0;
|
||||
Reference in New Issue
Block a user