8
8
import sys
9
9
import tempfile
10
10
11
+ language = "java"
11
12
12
13
def printHelp ():
13
- print ("""Usage:
14
+ print (f """Usage:
14
15
python3 GenerateFlowModel.py <library-database> <outputQll> [--with-sinks] [--with-sources] [--with-summaries] [--dry-run]
15
16
16
17
This generates summary, source and sink models for the code in the database.
17
- The files will be placed in `java /ql/lib/semmle/code/java /frameworks/<outputQll>` where
18
+ The files will be placed in `{ language } /ql/lib/semmle/code/{ language } /frameworks/<outputQll>` where
18
19
outputQll is the name (and path) of the output QLL file. Usually, models are grouped by their
19
20
respective frameworks.
20
21
@@ -27,8 +28,8 @@ def printHelp():
27
28
--dry-run: Only run the queries, but don't write to file.
28
29
29
30
Example invocations:
30
- $ python3 GenerateFlowModel.py /tmp/dbs/apache_commons-codec_45649c8 "apache/Codec .qll"
31
- $ python3 GenerateFlowModel.py /tmp/dbs/jdk15_db "javase/jdk_sinks .qll" --with-sinks
31
+ $ python3 GenerateFlowModel.py /tmp/dbs/my_library_db "mylibrary/Framework .qll"
32
+ $ python3 GenerateFlowModel.py /tmp/dbs/my_library_db "mylibrary/FrameworkSinks .qll" --with-sinks
32
33
33
34
Requirements: `codeql` should both appear on your path.
34
35
""" )
@@ -74,7 +75,7 @@ def printHelp():
74
75
filename = os .path .basename (targetQll )
75
76
shortname = filename [:- 4 ]
76
77
generatedFrameworks = os .path .join (
77
- codeQlRoot , "java /ql/lib/semmle/code/java /frameworks/" )
78
+ codeQlRoot , f" { language } /ql/lib/semmle/code/{ language } /frameworks/" )
78
79
frameworkTarget = os .path .join (generatedFrameworks , targetQll )
79
80
80
81
workDir = tempfile .mkdtemp ()
@@ -157,22 +158,18 @@ def asCsvModel(superclass, kind, rows):
157
158
else :
158
159
sourceCsv = ""
159
160
160
- qllTemplate = """
161
- /** Definitions of taint steps in the {0 } framework */
161
+ qllContents = f """
162
+ /** Definitions of taint steps in the { shortname } framework */
162
163
163
- import java
164
- private import semmle.code.java .dataflow.ExternalFlow
164
+ import { language }
165
+ private import semmle.code.{ language } .dataflow.ExternalFlow
165
166
166
- {1 }
167
- {2 }
168
- {3 }
167
+ { sinkCsv }
168
+ { sourceCsv }
169
+ { summaryCsv }
169
170
170
171
"""
171
172
172
-
173
- qllContents = qllTemplate .format (shortname , sinkCsv , sourceCsv , summaryCsv )
174
-
175
-
176
173
if dryRun :
177
174
print ("CSV Models generated, but not written to file." )
178
175
sys .exit (0 )
0 commit comments