Skip to content

Commit bc296e7

Browse files
author
Esben Sparre Andreasen
committed
JS: generalize internal AngularJS::BuiltinServiceCall to handle calls
1 parent a652f75 commit bc296e7

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

javascript/ql/src/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -714,47 +714,48 @@ private class AngularMethodCall extends AngularJSCall {
714714
* A call to a builtin service or one of its methods.
715715
*/
716716
private class BuiltinServiceCall extends AngularJSCall {
717-
MethodCallExpr mce;
717+
CallExpr call;
718718

719719
BuiltinServiceCall() {
720720
exists(BuiltinServiceReference service |
721-
service.getAMethodCall(_) = this and
722-
mce = this
721+
service.getAMethodCall(_) = this or
722+
service.getACall() = this |
723+
call = this
723724
)
724725
}
725726

726727
override predicate interpretsArgumentAsHtml(Expr e) {
727728
exists(ServiceReference service, string methodName |
728729
service.getName() = "$sce" and
729-
mce = service.getAMethodCall(methodName)
730+
call = service.getAMethodCall(methodName)
730731
|
731732
// specialized call
732733
(methodName = "trustAsHtml" or methodName = "trustAsCss") and
733-
e = mce.getArgument(0)
734+
e = call.getArgument(0)
734735
or
735736
// generic call with enum argument
736737
methodName = "trustAs" and
737738
exists(DataFlow::PropRead prn |
738-
prn.asExpr() = mce.getArgument(0) and
739+
prn.asExpr() = call.getArgument(0) and
739740
(prn = service.getAPropertyAccess("HTML") or prn = service.getAPropertyAccess("CSS")) and
740-
e = mce.getArgument(1)
741+
e = call.getArgument(1)
741742
)
742743
)
743744
}
744745

745746
override predicate storesArgumentGlobally(Expr e) {
746747
exists(ServiceReference service, string serviceName, string methodName |
747748
service.getName() = serviceName and
748-
mce = service.getAMethodCall(methodName)
749+
call = service.getAMethodCall(methodName)
749750
|
750751
// AngularJS caches (only available during runtime, so similar to sessionStorage)
751752
(serviceName = "$cacheFactory" or serviceName = "$templateCache") and
752753
methodName = "put" and
753-
e = mce.getArgument(1)
754+
e = call.getArgument(1)
754755
or
755756
serviceName = "$cookies" and
756757
(methodName = "put" or methodName = "putObject") and
757-
e = mce.getArgument(1)
758+
e = call.getArgument(1)
758759
)
759760
}
760761

0 commit comments

Comments
 (0)