@@ -711,50 +711,52 @@ private class AngularMethodCall extends AngularJSCall {
711711}
712712
713713/**
714- * A call to a method on a builtin service .
714+ * A call to a builtin service or one of its methods .
715715 */
716- private class ServiceMethodCall extends AngularJSCall {
717- MethodCallExpr mce ;
716+ private class BuiltinServiceCall extends AngularJSCall {
717+ CallExpr call ;
718718
719- ServiceMethodCall ( ) {
719+ BuiltinServiceCall ( ) {
720720 exists ( BuiltinServiceReference service |
721- service .getAMethodCall ( _) = this and
722- mce = this
721+ service .getAMethodCall ( _) = this or
722+ service .getACall ( ) = this
723+ |
724+ call = this
723725 )
724726 }
725727
726728 override predicate interpretsArgumentAsHtml ( Expr e ) {
727729 exists ( ServiceReference service , string methodName |
728730 service .getName ( ) = "$sce" and
729- mce = service .getAMethodCall ( methodName )
731+ call = service .getAMethodCall ( methodName )
730732 |
731733 // specialized call
732734 ( methodName = "trustAsHtml" or methodName = "trustAsCss" ) and
733- e = mce .getArgument ( 0 )
735+ e = call .getArgument ( 0 )
734736 or
735737 // generic call with enum argument
736738 methodName = "trustAs" and
737739 exists ( DataFlow:: PropRead prn |
738- prn .asExpr ( ) = mce .getArgument ( 0 ) and
740+ prn .asExpr ( ) = call .getArgument ( 0 ) and
739741 ( prn = service .getAPropertyAccess ( "HTML" ) or prn = service .getAPropertyAccess ( "CSS" ) ) and
740- e = mce .getArgument ( 1 )
742+ e = call .getArgument ( 1 )
741743 )
742744 )
743745 }
744746
745747 override predicate storesArgumentGlobally ( Expr e ) {
746748 exists ( ServiceReference service , string serviceName , string methodName |
747749 service .getName ( ) = serviceName and
748- mce = service .getAMethodCall ( methodName )
750+ call = service .getAMethodCall ( methodName )
749751 |
750752 // AngularJS caches (only available during runtime, so similar to sessionStorage)
751753 ( serviceName = "$cacheFactory" or serviceName = "$templateCache" ) and
752754 methodName = "put" and
753- e = mce .getArgument ( 1 )
755+ e = call .getArgument ( 1 )
754756 or
755757 serviceName = "$cookies" and
756758 ( methodName = "put" or methodName = "putObject" ) and
757- e = mce .getArgument ( 1 )
759+ e = call .getArgument ( 1 )
758760 )
759761 }
760762
@@ -768,23 +770,25 @@ private class ServiceMethodCall extends AngularJSCall {
768770 methodName = "$watchCollection" or
769771 methodName = "$watchGroup"
770772 |
771- e = scope .getAMethodCall ( methodName ) .getArgument ( 0 )
773+ call = scope .getAMethodCall ( methodName ) and
774+ e = call .getArgument ( 0 )
772775 )
773776 or
774777 exists ( ServiceReference service |
775778 service .getName ( ) = "$compile" or
776779 service .getName ( ) = "$parse" or
777780 service .getName ( ) = "$interpolate"
778781 |
779- e = service .getACall ( ) .getArgument ( 0 )
782+ call = service .getACall ( ) and
783+ e = call .getArgument ( 0 )
780784 )
781785 or
782- exists ( ServiceReference service , CallExpr filter , CallExpr filterInvocation |
786+ exists ( ServiceReference service , CallExpr filterInvocation |
783787 // `$filter('orderBy')(collection, expression)`
784788 service .getName ( ) = "$filter" and
785- filter = service .getACall ( ) and
786- filter .getArgument ( 0 ) .mayHaveStringValue ( "orderBy" ) and
787- filterInvocation .getCallee ( ) = filter and
789+ call = service .getACall ( ) and
790+ call .getArgument ( 0 ) .mayHaveStringValue ( "orderBy" ) and
791+ filterInvocation .getCallee ( ) = call and
788792 e = filterInvocation .getArgument ( 1 )
789793 )
790794 }
0 commit comments