@@ -110,72 +110,51 @@ private class SQLiteSinkCsv extends SinkModelCsv {
110110 }
111111}
112112
113- private class QueryBuilderBuildMethod extends TaintPreservingCallable {
114- int argument ;
115-
116- QueryBuilderBuildMethod ( ) {
117- this .getDeclaringType ( ) .getASourceSupertype * ( ) instanceof TypeSQLiteQueryBuilder and
118- (
119- // buildQuery(String[] projectionIn, String selection, String groupBy, String having, String sortOrder, String limit)
120- // buildQuery(String[] projectionIn, String selection, String[] selectionArgs, String groupBy, String having, String sortOrder, String limit)
121- // buildUnionQuery(String[] subQueries, String sortOrder, String limit)
122- this .hasName ( [ "buildQuery" , "buildUnionQuery" ] ) and
123- argument = [ - 1 .. getNumberOfParameters ( ) ]
124- or
125- // buildUnionSubQuery(String typeDiscriminatorColumn, String[] unionColumns, Set<String> columnsPresentInTable, int computedColumnsOffset, String typeDiscriminatorValue, String selection, String[] selectionArgs, String groupBy, String having)
126- // buildUnionSubQuery(String typeDiscriminatorColumn, String[] unionColumns, Set<String> columnsPresentInTable, int computedColumnsOffset, String typeDiscriminatorValue, String selection, String groupBy, String having)
127- this .hasName ( "buildUnionSubQuery" ) and
128- argument = [ - 1 .. getNumberOfParameters ( ) ] and
129- argument != 3
130- or
131- // static buildQueryString(boolean distinct, String tables, String[] columns, String where, String groupBy, String having, String orderBy, String limit)
132- hasName ( "buildQueryString" ) and
133- argument = [ 1 .. getNumberOfParameters ( ) ]
134- )
135- }
136-
137- override predicate returnsTaintFrom ( int arg ) { argument = arg }
138- }
139-
140- private class QueryBuilderAppendMethod extends TaintPreservingCallable {
141- QueryBuilderAppendMethod ( ) {
142- this .getDeclaringType ( ) .getASourceSupertype * ( ) instanceof TypeSQLiteQueryBuilder and
143- // setProjectionMap(Map<String, String> columnMap)
144- // setTables(String inTables)
145- // appendWhere(CharSequence inWhere)
146- // appendWhereStandalone(CharSequence inWhere)
147- // static appendColumns(StringBuilder s, String[] columns)
148- this .hasName ( [
149- "setProjectionMap" , "setTables" , "appendWhere" , "appendWhereStandalone" , "appendColumns"
150- ] )
151- }
152-
153- override predicate transfersTaint ( int src , int sink ) {
154- if hasName ( "appendColumns" ) then ( src = 1 and sink = 0 ) else ( src = 0 and sink = - 1 )
155- }
156- }
157-
158- private class UnsafeAppendUtilMethod extends TaintPreservingCallable {
159- UnsafeAppendUtilMethod ( ) {
160- this .getDeclaringType ( ) instanceof TypeDatabaseUtils and
161- // String[] appendSelectionArgs(String[] originalValues, String[] newValues)
162- // String concatenateWhere(String a, String b)
163- this .hasName ( [ "appendSelectionArgs" , "concatenateWhere" ] )
164- }
165-
166- override predicate returnsTaintFrom ( int arg ) { arg = [ 0 .. getNumberOfParameters ( ) ] }
167- }
168-
169- private class TaintPreservingQueryMethod extends TaintPreservingCallable {
170- TaintPreservingQueryMethod ( ) {
171- (
172- this .getDeclaringType ( ) instanceof AndroidContentProvider or
173- this .getDeclaringType ( ) instanceof AndroidContentResolver
174- ) and
175- // Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder, CancellationSignal cancellationSignal)
176- // Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
177- this .hasName ( "query" )
113+ private class SqlFlowStep extends SummaryModelCsv {
114+ override predicate row ( string row ) {
115+ row =
116+ [
117+ //"package;type;overrides;name;signature;ext;inputspec;outputspec;kind",
118+ // buildQuery(String[] projectionIn, String selection, String groupBy, String having, String sortOrder, String limit)
119+ // buildQuery(String[] projectionIn, String selection, String[] selectionArgs, String groupBy, String having, String sortOrder, String limit)
120+ // buildUnionQuery(String[] subQueries, String sortOrder, String limit)
121+ "android.database.sqlite;SQLiteQueryBuilder;true;buildQuery;(String[],String,String,String,String,String);;Argument[-1];ReturnValue;taint" ,
122+ "android.database.sqlite;SQLiteQueryBuilder;true;buildQuery;(String[],String,String,String,String,String);;ArrayElement of Argument[0];ReturnValue;taint" ,
123+ "android.database.sqlite;SQLiteQueryBuilder;true;buildQuery;(String[],String,String,String,String,String);;Argument[1..5];ReturnValue;taint" ,
124+ "android.database.sqlite;SQLiteQueryBuilder;true;buildQuery;(String[],String,String[],String,String,String,String);;Argument[-1];ReturnValue;taint" ,
125+ "android.database.sqlite;SQLiteQueryBuilder;true;buildQuery;(String[],String,String[],String,String,String,String);;ArrayElement of Argument[0];ReturnValue;taint" ,
126+ "android.database.sqlite;SQLiteQueryBuilder;true;buildQuery;(String[],String,String[],String,String,String,String);;Argument[1];ReturnValue;taint" ,
127+ "android.database.sqlite;SQLiteQueryBuilder;true;buildQuery;(String[],String,String[],String,String,String,String);;Argument[3..6];ReturnValue;taint" ,
128+ "android.database.sqlite;SQLiteQueryBuilder;true;buildUnionQuery;(String[],String,String);;Argument[-1];ReturnValue;taint" ,
129+ "android.database.sqlite;SQLiteQueryBuilder;true;buildUnionQuery;(String[],String,String);;ArrayElement of Argument[0];ReturnValue;taint" ,
130+ "android.database.sqlite;SQLiteQueryBuilder;true;buildUnionQuery;(String[],String,String);;Argument[1..2];ReturnValue;taint" ,
131+ // buildUnionSubQuery(String typeDiscriminatorColumn, String[] unionColumns, Set<String> columnsPresentInTable, int computedColumnsOffset, String typeDiscriminatorValue, String selection, String[] selectionArgs, String groupBy, String having)
132+ // buildUnionSubQuery(String typeDiscriminatorColumn, String[] unionColumns, Set<String> columnsPresentInTable, int computedColumnsOffset, String typeDiscriminatorValue, String selection, String groupBy, String having)
133+ "android.database.sqlite;SQLiteQueryBuilder;true;buildUnionSubQuery;(String,String[],Set,int,String,String,String[],String,String);;Argument[-1..0];ReturnValue;taint" ,
134+ "android.database.sqlite;SQLiteQueryBuilder;true;buildUnionSubQuery;(String,String[],Set,int,String,String,String[],String,String);;ArrayElement of Argument[1];ReturnValue;taint" ,
135+ "android.database.sqlite;SQLiteQueryBuilder;true;buildUnionSubQuery;(String,String[],Set,int,String,String,String[],String,String);;Element of Argument[2];ReturnValue;taint" ,
136+ "android.database.sqlite;SQLiteQueryBuilder;true;buildUnionSubQuery;(String,String[],Set,int,String,String,String[],String,String);;Argument[4..5];ReturnValue;taint" ,
137+ "android.database.sqlite;SQLiteQueryBuilder;true;buildUnionSubQuery;(String,String[],Set,int,String,String,String[],String,String);;Argument[7..8];ReturnValue;taint" ,
138+ "android.database.sqlite;SQLiteQueryBuilder;true;buildUnionSubQuery;(String,String[],Set,int,String,String,String,String);;Argument[-1..0];ReturnValue;taint" ,
139+ "android.database.sqlite;SQLiteQueryBuilder;true;buildUnionSubQuery;(String,String[],Set,int,String,String,String,String);;ArrayElement of Argument[1];ReturnValue;taint" ,
140+ "android.database.sqlite;SQLiteQueryBuilder;true;buildUnionSubQuery;(String,String[],Set,int,String,String,String,String);;Element of Argument[2];ReturnValue;taint" ,
141+ "android.database.sqlite;SQLiteQueryBuilder;true;buildUnionSubQuery;(String,String[],Set,int,String,String,String,String);;Argument[4..7];ReturnValue;taint" ,
142+ // static buildQueryString(boolean distinct, String tables, String[] columns, String where, String groupBy, String having, String orderBy, String limit)
143+ "android.database.sqlite;SQLiteQueryBuilder;true;buildQueryString;(boolean,String,String[],String,String,String,String,String);;Argument[1];ReturnValue;taint" ,
144+ "android.database.sqlite;SQLiteQueryBuilder;true;buildQueryString;(boolean,String,String[],String,String,String,String,String);;ArrayElement of Argument[2];ReturnValue;taint" ,
145+ "android.database.sqlite;SQLiteQueryBuilder;true;buildQueryString;(boolean,String,String[],String,String,String,String,String);;Argument[3..7];ReturnValue;taint" ,
146+ "android.database.sqlite;SQLiteQueryBuilder;true;setProjectionMap;(Map);;MapKey of Argument[0];Argument[-1];taint" ,
147+ "android.database.sqlite;SQLiteQueryBuilder;true;setProjectionMap;(Map);;MapValue of Argument[0];Argument[-1];taint" ,
148+ "android.database.sqlite;SQLiteQueryBuilder;true;setTables;(String);;Argument[0];Argument[-1];taint" ,
149+ "android.database.sqlite;SQLiteQueryBuilder;true;appendWhere;(CharSequence);;Argument[0];Argument[-1];taint" ,
150+ "android.database.sqlite;SQLiteQueryBuilder;true;appendWhereStandalone;(CharSequence);;Argument[0];Argument[-1];taint" ,
151+ "android.database.sqlite;SQLiteQueryBuilder;true;appendColumns;(StringBuilder,String[]);;ArrayElement of Argument[1];Argument[0];taint" ,
152+ "android.database;DatabaseUtils;false;appendSelectionArgs;(String[],String[]);;ArrayElement of Argument[0..1];ArrayElement of ReturnValue;taint" ,
153+ "android.database;DatabaseUtils;false;concatenateWhere;(String,String);;Argument[0..1];ReturnValue;taint" ,
154+ "android.content;ContentProvider;true;query;(Uri,String[],String,String[],String);;Argument[0];ReturnValue;taint" ,
155+ "android.content;ContentProvider;true;query;(Uri,String[],String,String[],String,CancellationSignal);;Argument[0];ReturnValue;taint" ,
156+ "android.content;ContentResolver;true;query;(Uri,String[],String,String[],String);;Argument[0];ReturnValue;taint" ,
157+ "android.content;ContentResolver;true;query;(Uri,String[],String,String[],String,CancellationSignal);;Argument[0];ReturnValue;taint"
158+ ]
178159 }
179-
180- override predicate returnsTaintFrom ( int arg ) { arg = 0 }
181160}
0 commit comments