@@ -180,9 +180,7 @@ module Angular2 {
180180 )
181181 }
182182
183- private class AngularTaintStep extends TaintTracking:: AdditionalTaintStep {
184- AngularTaintStep ( ) { taintStep ( _, this ) }
185-
183+ private class AngularTaintStep extends TaintTracking:: SharedTaintStep {
186184 override predicate step ( DataFlow:: Node pred , DataFlow:: Node succ ) { taintStep ( pred , succ ) }
187185 }
188186
@@ -483,14 +481,12 @@ module Angular2 {
483481 * A taint step `array -> elem` in `*ngFor="let elem of array"`, or more precisely,
484482 * a step from `array` to each access to `elem`.
485483 */
486- private class ForLoopStep extends TaintTracking:: AdditionalTaintStep {
487- ForLoopAttribute attrib ;
488-
489- ForLoopStep ( ) { this = attrib .getIterationDomain ( ) }
490-
484+ private class ForLoopStep extends TaintTracking:: SharedTaintStep {
491485 override predicate step ( DataFlow:: Node pred , DataFlow:: Node succ ) {
492- pred = this and
493- succ = attrib .getAnIteratorAccess ( )
486+ exists ( ForLoopAttribute attrib |
487+ pred = attrib .getIterationDomain ( ) and
488+ succ = attrib .getAnIteratorAccess ( )
489+ )
494490 }
495491 }
496492
@@ -513,27 +509,26 @@ module Angular2 {
513509 result .getCalleeNode ( ) .asExpr ( ) .( PipeRefExpr ) .getName ( ) = name
514510 }
515511
516- private class BuiltinPipeStep extends TaintTracking:: AdditionalTaintStep , DataFlow:: CallNode {
517- string name ;
518-
519- BuiltinPipeStep ( ) { this = getAPipeCall ( name ) }
520-
512+ private class BuiltinPipeStep extends TaintTracking:: SharedTaintStep {
521513 override predicate step ( DataFlow:: Node pred , DataFlow:: Node succ ) {
522- succ = this and
523- exists ( int i | pred = getArgument ( i ) |
524- i = 0 and
525- name =
526- [
527- "async" , "i18nPlural" , "json" , "keyvalue" , "lowercase" , "uppercase" , "titlecase" ,
528- "slice"
529- ]
514+ exists ( DataFlow:: CallNode call , string name |
515+ call = getAPipeCall ( name ) and
516+ succ = call
517+ |
518+ exists ( int i | pred = call .getArgument ( i ) |
519+ i = 0 and
520+ name =
521+ [
522+ "async" , "i18nPlural" , "json" , "keyvalue" , "lowercase" , "uppercase" , "titlecase" ,
523+ "slice"
524+ ]
525+ or
526+ i = 1 and name = "date" // date format string
527+ )
530528 or
531- i = 1 and name = "date" // date format string
529+ name = "translate" and
530+ pred = [ call .getArgument ( 1 ) , call .getOptionArgument ( 1 , _) ]
532531 )
533- or
534- name = "translate" and
535- succ = this and
536- pred = [ getArgument ( 1 ) , getOptionArgument ( 1 , _) ]
537532 }
538533 }
539534
@@ -582,27 +577,23 @@ module Angular2 {
582577 * </mat-table>
583578 * ```
584579 */
585- private class MatTableTaintStep extends TaintTracking:: AdditionalTaintStep {
586- MatTableElement table ;
587-
588- MatTableTaintStep ( ) { this = table .getDataSourceNode ( ) }
589-
580+ private class MatTableTaintStep extends TaintTracking:: SharedTaintStep {
590581 override predicate step ( DataFlow:: Node pred , DataFlow:: Node succ ) {
591- pred = this and
592- succ = table .getARowRef ( )
582+ exists ( MatTableElement table |
583+ pred = table .getDataSourceNode ( ) and
584+ succ = table .getARowRef ( )
585+ )
593586 }
594587 }
595588
596589 /** A taint step into the data array of a `MatTableDataSource` instance. */
597- private class MatTableDataSourceStep extends TaintTracking:: AdditionalTaintStep , DataFlow:: NewNode {
598- MatTableDataSourceStep ( ) {
599- this =
600- DataFlow:: moduleMember ( "@angular/material/table" , "MatTableDataSource" ) .getAnInstantiation ( )
601- }
602-
590+ private class MatTableDataSourceStep extends TaintTracking:: SharedTaintStep {
603591 override predicate step ( DataFlow:: Node pred , DataFlow:: Node succ ) {
604- pred = [ getArgument ( 0 ) , getAPropertyWrite ( "data" ) .getRhs ( ) ] and
605- succ = this
592+ exists ( DataFlow:: NewNode invoke |
593+ invoke = DataFlow:: moduleMember ( "@angular/material/table" , "MatTableDataSource" ) .getAnInstantiation ( ) and
594+ pred = [ invoke .getArgument ( 0 ) , invoke .getAPropertyWrite ( "data" ) .getRhs ( ) ] and
595+ succ = invoke
596+ )
606597 }
607598 }
608599}
0 commit comments