Skip to content

Commit 6526761

Browse files
committed
JS: configure MaD report generators to include javascript
1 parent 80fb021 commit 6526761

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
@@ -55,3 +55,50 @@ private class TaintStepFromSummary extends TaintTracking::SharedTaintStep {
5555
summaryStepNodes(pred, succ, "taint")
5656
}
5757
}
58+
59+
private predicate relevantNamespace(string namespace) {
60+
Shared::sourceModel(namespace, _, _, _) or
61+
Shared::sinkModel(namespace, _, _, _) or
62+
Shared::summaryModel(namespace, _, _, _, _, _)
63+
}
64+
65+
private predicate namespaceLink(string shortns, string longns) {
66+
relevantNamespace(shortns) and
67+
relevantNamespace(longns) and
68+
longns.prefix(longns.indexOf(".")) = shortns
69+
}
70+
71+
private predicate canonicalNamespace(string namespace) {
72+
relevantNamespace(namespace) and not namespaceLink(_, namespace)
73+
}
74+
75+
private predicate canonicalNamespaceLink(string namespace, string subns) {
76+
canonicalNamespace(namespace) and
77+
(subns = namespace or namespaceLink(namespace, subns))
78+
}
79+
80+
predicate modelCoverage(string namespace, int namespaces, string kind, string part, int n) {
81+
namespaces = strictcount(string subns | canonicalNamespaceLink(namespace, subns)) and
82+
(
83+
part = "source" and
84+
n =
85+
strictcount(string subns, string type |
86+
canonicalNamespaceLink(namespace, subns) and
87+
Shared::sourceModel(subns, type, _, kind)
88+
)
89+
or
90+
part = "sink" and
91+
n =
92+
strictcount(string subns, string type |
93+
canonicalNamespaceLink(namespace, subns) and
94+
Shared::sinkModel(subns, type, _, kind)
95+
)
96+
or
97+
part = "summary" and
98+
n =
99+
strictcount(string subns, string type |
100+
canonicalNamespaceLink(namespace, subns) and
101+
Shared::summaryModel(subns, type, _, _, _, kind)
102+
)
103+
)
104+
}

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

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

196196
/** Holds if a sink model exists for the given parameters. */
197-
private predicate sinkModel(string package, string type, string path, string kind) {
197+
predicate sinkModel(string package, string type, string path, string kind) {
198198
exists(string row |
199199
sinkModel(row) and
200200
row.splitAt(";", 0) = package and
@@ -205,7 +205,7 @@ private predicate sinkModel(string package, string type, string path, string kin
205205
}
206206

207207
/** Holds if a summary model `row` exists for the given parameters. */
208-
private predicate summaryModel(
208+
predicate summaryModel(
209209
string package, string type, string path, string input, string output, string kind
210210
) {
211211
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)