@@ -270,15 +270,27 @@ private module Sqlite {
270270 */
271271private module MsSql {
272272 /** Gets a reference to the `mssql` module. */
273- DataFlow:: ModuleImportNode mssql ( ) { result . getPath ( ) = "mssql" }
273+ DataFlow:: SourceNode mssql ( ) { result = DataFlow :: moduleImport ( "mssql" ) }
274274
275- /** Gets an expression that creates a request object. */
276- DataFlow:: SourceNode request ( ) {
277- // new require('mssql').Request()
278- result = mssql ( ) .getAConstructorInvocation ( "Request" )
275+ /** Gets a data flow node referring to a request object. */
276+ private DataFlow:: SourceNode request ( DataFlow:: TypeTracker t ) {
277+ t .start ( ) and
278+ (
279+ // new require('mssql').Request()
280+ result = mssql ( ) .getAConstructorInvocation ( "Request" )
281+ or
282+ // request.input(...)
283+ result = request ( ) .getAMethodCall ( "input" )
284+ )
279285 or
280- // request.input(...)
281- result = request ( ) .getAMethodCall ( "input" )
286+ exists ( DataFlow:: TypeTracker t2 |
287+ result = request ( t2 ) .track ( t2 , t )
288+ )
289+ }
290+
291+ /** Gets a data flow node referring to a request object. */
292+ DataFlow:: SourceNode request ( ) {
293+ result = request ( DataFlow:: TypeTracker:: end ( ) )
282294 }
283295
284296 /** A tagged template evaluated as a query. */
@@ -293,15 +305,13 @@ private module MsSql {
293305 }
294306
295307 /** A call to a MsSql query method. */
296- private class QueryCall extends DatabaseAccess , DataFlow:: ValueNode {
297- override MethodCallExpr astNode ;
298-
308+ private class QueryCall extends DatabaseAccess , DataFlow:: MethodCallNode {
299309 QueryCall ( ) {
300- exists ( string meth | this = request ( ) .getAMethodCall ( meth ) | meth = "query" or meth = "batch" )
310+ this = request ( ) .getAMethodCall ( [ "query" , "batch" ] )
301311 }
302312
303313 override DataFlow:: Node getAQueryArgument ( ) {
304- result = DataFlow :: valueNode ( astNode . getArgument ( 0 ) )
314+ result = getArgument ( 0 )
305315 }
306316 }
307317
0 commit comments