Skip to content

Commit 4c00dba

Browse files
committed
JS: configure MaD report generators to include javascript
1 parent 1e62b48 commit 4c00dba

File tree

10 files changed

+86
-5
lines changed

10 files changed

+86
-5
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package,sink,source,sink:credentials[password],sink:credentials[user name],sink:sql-injection,source:database-access-result
2+
@google-cloud/spanner,3,4,,,3,4
3+
sequelize,4,1,1,1,2,1
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
JavaScript framework & library support
2+
================================
3+
4+
.. csv-table::
5+
:header-rows: 1
6+
:class: fullWidthTable
7+
:widths: auto
8+
9+
Framework / library,Package,Flow sources,Taint & value steps,Sinks (total)
10+
Others,"``@google-cloud/spanner``, ``sequelize``",5,,7
11+
Totals,,5,,7
12+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
CWE,Sink identifier,Label
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Framework name,URL,Namespace prefixes

javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,50 @@ private class TaintStepFromSummary extends TaintTracking::SharedTaintStep {
5959
summaryStepNodes(pred, succ, "taint")
6060
}
6161
}
62+
63+
private predicate relevantNamespace(string namespace) {
64+
Shared::sourceModel(namespace, _, _, _) or
65+
Shared::sinkModel(namespace, _, _, _) or
66+
Shared::summaryModel(namespace, _, _, _, _, _)
67+
}
68+
69+
private predicate namespaceLink(string shortns, string longns) {
70+
relevantNamespace(shortns) and
71+
relevantNamespace(longns) and
72+
longns.prefix(longns.indexOf(".")) = shortns
73+
}
74+
75+
private predicate canonicalNamespace(string namespace) {
76+
relevantNamespace(namespace) and not namespaceLink(_, namespace)
77+
}
78+
79+
private predicate canonicalNamespaceLink(string namespace, string subns) {
80+
canonicalNamespace(namespace) and
81+
(subns = namespace or namespaceLink(namespace, subns))
82+
}
83+
84+
predicate modelCoverage(string namespace, int namespaces, string kind, string part, int n) {
85+
namespaces = strictcount(string subns | canonicalNamespaceLink(namespace, subns)) and
86+
(
87+
part = "source" and
88+
n =
89+
strictcount(string subns, string type |
90+
canonicalNamespaceLink(namespace, subns) and
91+
Shared::sourceModel(subns, type, _, kind)
92+
)
93+
or
94+
part = "sink" and
95+
n =
96+
strictcount(string subns, string type |
97+
canonicalNamespaceLink(namespace, subns) and
98+
Shared::sinkModel(subns, type, _, kind)
99+
)
100+
or
101+
part = "summary" and
102+
n =
103+
strictcount(string subns, string type |
104+
canonicalNamespaceLink(namespace, subns) and
105+
Shared::summaryModel(subns, type, _, _, _, kind)
106+
)
107+
)
108+
}

javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ predicate sourceModel(string package, string type, string path, string kind) {
176176
}
177177

178178
/** Holds if a sink model exists for the given parameters. */
179-
private predicate sinkModel(string package, string type, string path, string kind) {
179+
predicate sinkModel(string package, string type, string path, string kind) {
180180
exists(string row |
181181
sinkModel(row) and
182182
row.splitAt(";", 0) = package and
@@ -187,7 +187,7 @@ private predicate sinkModel(string package, string type, string path, string kin
187187
}
188188

189189
/** Holds if a summary model `row` exists for the given parameters. */
190-
private predicate summaryModel(
190+
predicate summaryModel(
191191
string package, string type, string path, string input, string output, string kind
192192
) {
193193
exists(string row |

javascript/ql/src/meta/Coverage.ql

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/**
2+
* @name Framework coverage
3+
* @description The number of API endpoints covered by CSV models sorted by
4+
* package and source-, sink-, and summary-kind.
5+
* @kind table
6+
* @id js/meta/framework-coverage
7+
*/
8+
9+
import javascript
10+
11+
from string namespace, int pkgs, string kind, string part, int n
12+
where modelCoverage(namespace, pkgs, kind, part, n)
13+
select namespace, pkgs, kind, part, n

misc/scripts/library-coverage/generate-report.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,9 @@ def add_package_stats_to_row(row, sorted_cwes, collect):
114114
utils.LanguageConfig(
115115
"java", "Java", ".java", query_prefix + "java/ql/src/meta/frameworks/Coverage.ql"),
116116
utils.LanguageConfig(
117-
"csharp", "C#", ".cs", query_prefix + "csharp/ql/src/meta/frameworks/Coverage.ql")
117+
"csharp", "C#", ".cs", query_prefix + "csharp/ql/src/meta/frameworks/Coverage.ql"),
118+
utils.LanguageConfig(
119+
"javascript", "JavaScript", ".js", query_prefix + "javascript/ql/src/meta/Coverage.ql")
118120
]
119121

120122
# The names of input and output files. The placeholder {language} is replaced with the language name.

misc/scripts/library-coverage/generate-timeseries.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,9 @@ def get_packages(config, search_path):
7474
utils.LanguageConfig(
7575
"java", "Java", ".java", "java/ql/src/meta/frameworks/Coverage.ql", ["java/ql/lib/config/semmlecode.dbscheme", "java/ql/src/config/semmlecode.dbscheme"]),
7676
utils.LanguageConfig(
77-
"csharp", "C#", ".cs", "csharp/ql/src/meta/frameworks/Coverage.ql", ["csharp/ql/lib/semmlecode.csharp.dbscheme", "csharp/ql/src/semmlecode.csharp.dbscheme"])
77+
"csharp", "C#", ".cs", "csharp/ql/src/meta/frameworks/Coverage.ql", ["csharp/ql/lib/semmlecode.csharp.dbscheme", "csharp/ql/src/semmlecode.csharp.dbscheme"]),
78+
utils.LanguageConfig(
79+
"javascript", "JavaScript", ".js", "javascript/ql/src/meta/Coverage.ql", ["javascript/ql/lib/semmlecode.javascript.dbscheme", "javascript/ql/src/semmlecode.javascript.dbscheme"])
7880
]
7981

8082
output_prefix = "framework-coverage-timeseries-"

misc/scripts/library-coverage/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,4 @@
2121
repo_output_rst = documentation_folder + output_rst_file_name
2222
repo_output_csv = documentation_folder + output_csv_file_name
2323

24-
languages = ['java', 'csharp']
24+
languages = ['java', 'csharp', 'javascript']

0 commit comments

Comments
 (0)