@@ -9,6 +9,7 @@ private import semmle.code.csharp.frameworks.system.data.Entity
99private import semmle.code.csharp.frameworks.system.collections.Generic
1010private import semmle.code.csharp.frameworks.Sql
1111private import semmle.code.csharp.dataflow.FlowSummary
12+ private import semmle.code.csharp.dataflow.ExternalFlow
1213private import semmle.code.csharp.dataflow.internal.DataFlowPrivate as DataFlowPrivate
1314
1415/**
@@ -234,26 +235,29 @@ module EntityFramework {
234235 override Expr getSql ( ) { result = this .getArgumentForParameter ( sqlParam ) }
235236 }
236237
237- /** A call to `System.Data.Entity.DbSet.SqlQuery`. */
238- class SystemDataEntityDbSetSqlExpr extends SqlExpr , MethodCall {
239- SystemDataEntityDbSetSqlExpr ( ) {
240- this .getTarget ( ) = any ( SystemDataEntity:: DbSet dbSet ) .getSqlQueryMethod ( )
238+ /** The sink method `System.Data.Entity.DbSet.SqlQuery`. */
239+ private class SystemDataEntityDbSetSqlQuerySinkModelCsv extends SinkModelCsv {
240+ override predicate row ( string row ) {
241+ row =
242+ [ "System.Data.Entity;DbSet;false;SqlQuery;(System.String,System.Object[]);;Argument[0];sql" ]
241243 }
242-
243- override Expr getSql ( ) { result = this .getArgumentForName ( "sql" ) }
244244 }
245245
246- /** A call to a method in `System.Data.Entity.Database` that executes SQL. */
247- class SystemDataEntityDatabaseSqlExpr extends SqlExpr , MethodCall {
248- SystemDataEntityDatabaseSqlExpr ( ) {
249- exists ( SystemDataEntity:: Database db |
250- this .getTarget ( ) = db .getSqlQueryMethod ( ) or
251- this .getTarget ( ) = db .getExecuteSqlCommandMethod ( ) or
252- this .getTarget ( ) = db .getExecuteSqlCommandAsyncMethod ( )
253- )
246+ /** A sink method in `System.Data.Entity.Database` that executes SQL. */
247+ private class SystemDataEntityDatabaseSinkModelCsv extends SinkModelCsv {
248+ override predicate row ( string row ) {
249+ row =
250+ [
251+ "System.Data.Entity;Database;false;SqlQuery;(System.Type,System.String,System.Object[]);;Argument[1];sql" ,
252+ "System.Data.Entity;Database;false;SqlQuery<>;(System.String,System.Object[]);;Argument[0];sql" ,
253+ "System.Data.Entity;Database;false;ExecuteSqlCommand;(System.String,System.Object[]);;Argument[0];sql" ,
254+ "System.Data.Entity;Database;false;ExecuteSqlCommand;(System.Data.Entity.TransactionalBehavior,System.String,System.Object[]);;Argument[1];sql" ,
255+ "System.Data.Entity;Database;false;ExecuteSqlCommandAsync;(System.Data.Entity.TransactionalBehavior,System.String,System.Threading.CancellationToken,System.Object[]);;Argument[1];sql" ,
256+ "System.Data.Entity;Database;false;ExecuteSqlCommandAsync;(System.String,System.Threading.CancellationToken,System.Object[]);;Argument[0];sql" ,
257+ "System.Data.Entity;Database;false;ExecuteSqlCommandAsync;(System.String,System.Object[]);;Argument[0];sql" ,
258+ "System.Data.Entity;Database;false;ExecuteSqlCommandAsync;(System.Data.Entity.TransactionalBehavior,System.String,System.Object[]);;Argument[1];sql"
259+ ]
254260 }
255-
256- override Expr getSql ( ) { result = this .getArgumentForName ( "sql" ) }
257261 }
258262
259263 /** Holds if `t` is compatible with a DB column type. */
0 commit comments