@@ -75,58 +75,41 @@ private class RealmStore extends CleartextStorageDatabaseSink instanceof DataFlo
7575 }
7676}
7777
78- /**
79- * A `DataFlow::Node` that is an expression stored with the GRDB library.
80- */
81- private class GrdbStore extends CleartextStorageDatabaseSink {
82- GrdbStore ( ) {
83- exists ( CallExpr call , MethodDecl method |
84- call .getStaticTarget ( ) = method and
85- call .getArgumentWithLabel ( "arguments" ) .getExpr ( ) = this .asExpr ( )
86- |
87- method
88- .hasQualifiedName ( "Database" ,
89- [ "allStatements(sql:arguments:)" , "execute(sql:arguments:)" , ] )
90- or
91- method .hasQualifiedName ( "SQLRequest" , "init(sql:arguments:adapter:cached:)" )
92- or
93- method .hasQualifiedName ( "SQL" , [ "init(sql:arguments:)" , "append(sql:arguments:)" ] )
94- or
95- method .hasQualifiedName ( "SQLStatementCursor" , "init(database:sql:arguments:prepFlags:)" )
96- or
97- method
98- .hasQualifiedName ( "TableRecord" ,
99- [
100- "select(sql:arguments:)" , "select(sql:arguments:as:)" , "filter(sql:arguments:)" ,
101- "order(sql:arguments:)"
102- ] )
103- or
104- method
105- .hasQualifiedName ( [ "Row" , "DatabaseValueConvertible" , "FetchableRecord" ] ,
106- [
107- "fetchCursor(_:sql:arguments:adapter:)" , "fetchAll(_:sql:arguments:adapter:)" ,
108- "fetchSet(_:sql:arguments:adapter:)" , "fetchOne(_:sql:arguments:adapter:)"
109- ] )
110- or
111- method
112- .hasQualifiedName ( "FetchableRecord" ,
113- [
114- "fetchCursor(_:arguments:adapter:)" , "fetchAll(_:arguments:adapter:)" ,
115- "fetchSet(_:arguments:adapter:)" , "fetchOne(_:arguments:adapter:)" ,
116- ] )
117- or
118- method .hasQualifiedName ( "Statement" , [ "execute(arguments:)" ] )
119- or
120- method
121- .hasQualifiedName ( "CommonTableExpression" , "init(recursive:named:columns:sql:arguments:)" )
122- )
123- or
124- exists ( CallExpr call , MethodDecl method |
125- call .getStaticTarget ( ) = method and
126- call .getArgument ( 0 ) .getExpr ( ) = this .asExpr ( )
127- |
128- method .hasQualifiedName ( "Statement" , "setArguments(_:)" )
129- )
78+ private class CleartextStorageDatabaseSinks extends SinkModelCsv {
79+ override predicate row ( string row ) {
80+ row =
81+ [
82+ // GRDB sinks
83+ ";Database;true;allStatements(sql:arguments:);;;Argument[1];database-store" ,
84+ ";Database;true;execute(sql:arguments:);;;Argument[1];database-store" ,
85+ ";SQLRequest;true;init(sql:arguments:adapter:cached:);;;Argument[1];database-store" ,
86+ ";SQL;true;init(sql:arguments:);;;Argument[1];database-store" ,
87+ ";SQL;true;append(sql:arguments:);;;Argument[1];database-store" ,
88+ ";SQLStatementCursor;true;init(database:sql:arguments:prepFlags:);;;Argument[2];database-store" ,
89+ ";TableRecord;true;select(sql:arguments:);;;Argument[1];database-store" ,
90+ ";TableRecord;true;select(sql:arguments:as:);;;Argument[1];database-store" ,
91+ ";TableRecord;true;filter(sql:arguments:);;;Argument[1];database-store" ,
92+ ";TableRecord;true;order(sql:arguments:);;;Argument[1];database-store" ,
93+ ";Row;true;fetchCursor(_:sql:arguments:adapter:);;;Argument[2];database-store" ,
94+ ";Row;true;fetchAll(_:sql:arguments:adapter:);;;Argument[2];database-store" ,
95+ ";Row;true;fetchSet(_:sql:arguments:adapter:);;;Argument[2];database-store" ,
96+ ";Row;true;fetchOne(_:sql:arguments:adapter:);;;Argument[2];database-store" ,
97+ ";DatabaseValueConvertible;true;fetchCursor(_:sql:arguments:adapter:);;;Argument[2];database-store" ,
98+ ";DatabaseValueConvertible;true;fetchAll(_:sql:arguments:adapter:);;;Argument[2];database-store" ,
99+ ";DatabaseValueConvertible;true;fetchSet(_:sql:arguments:adapter:);;;Argument[2];database-store" ,
100+ ";DatabaseValueConvertible;true;fetchOne(_:sql:arguments:adapter:);;;Argument[2];database-store" ,
101+ ";FetchableRecord;true;fetchCursor(_:sql:arguments:adapter:);;;Argument[2];database-store" ,
102+ ";FetchableRecord;true;fetchAll(_:sql:arguments:adapter:);;;Argument[2];database-store" ,
103+ ";FetchableRecord;true;fetchSet(_:sql:arguments:adapter:);;;Argument[2];database-store" ,
104+ ";FetchableRecord;true;fetchOne(_:sql:arguments:adapter:);;;Argument[2];database-store" ,
105+ ";FetchableRecord;true;fetchCursor(_:arguments:adapter:);;;Argument[1];database-store" ,
106+ ";FetchableRecord;true;fetchAll(_:arguments:adapter:);;;Argument[1];database-store" ,
107+ ";FetchableRecord;true;fetchSet(_:arguments:adapter:);;;Argument[1];database-store" ,
108+ ";FetchableRecord;true;fetchOne(_:arguments:adapter:);;;Argument[1];database-store" ,
109+ ";Statement;true;execute(arguments:);;;Argument[0];database-store" ,
110+ ";CommonTableExpression;true;init(recursive:named:columns:sql:arguments:);;;Argument[4];database-store" ,
111+ ";Statement;true;setArguments(_:);;;Argument[0];database-store"
112+ ]
130113 }
131114}
132115
0 commit comments