Skip to content

Commit ea63414

Browse files
author
Esben Sparre Andreasen
authored
Merge pull request github#2016 from asger-semmle/jquery
Add type tracking and type info to jQuery model
2 parents daabb2c + c09e748 commit ea63414

File tree

18 files changed

+332
-105
lines changed

18 files changed

+332
-105
lines changed

javascript/ql/src/semmle/javascript/Extend.qll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ private class ExtendCallWithFlag extends ExtendCall {
4747
name = "node.extend"
4848
)
4949
or
50-
this = jquery().getAPropertyRead("extend").getACall()
50+
// Match $.extend using the source of `$` only, as ExtendCall should not
51+
// depend on type tracking.
52+
this = JQuery::dollarSource().getAMemberCall("extend")
5153
}
5254

5355
/**

javascript/ql/src/semmle/javascript/JSDoc.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,7 @@ class JSDocNamedTypeExpr extends @jsdoc_named_type_expr, JSDocTypeExpr {
336336
/**
337337
* Gets the qualified name of this name by resolving its prefix, if any.
338338
*/
339+
cached
339340
private string resolvedName() {
340341
exists(string prefix, string suffix, JSDoc::Environment env |
341342
hasNamePartsAndEnv(prefix, suffix, env) and

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -631,11 +631,11 @@ private class RouteParamSource extends RemoteFlowSource {
631631
* AngularJS expose a jQuery-like interface through `angular.html(..)`.
632632
* The interface may be backed by an actual jQuery implementation.
633633
*/
634-
private class JQLiteObject extends JQueryObject {
634+
private class JQLiteObject extends JQuery::ObjectSource::Range {
635635
JQLiteObject() {
636-
this = angular().getAMemberCall("element").asExpr()
636+
this = angular().getAMemberCall("element")
637637
or
638-
exists(SimpleParameter param |
638+
exists(Parameter param | this = DataFlow::parameterNode(param) |
639639
// element parameters to user-functions invoked by AngularJS
640640
param = any(LinkFunction link).getElementParameter()
641641
or
@@ -652,15 +652,13 @@ private class JQLiteObject extends JQueryObject {
652652
param = f.getAstNode().(Function).getParameter(i)
653653
)
654654
)
655-
|
656-
this = param.getAnInitialUse()
657655
)
658656
or
659657
exists(ServiceReference element |
660658
element.getName() = "$rootElement" or
661659
element.getName() = "$document"
662660
|
663-
this = element.getAnAccess()
661+
this = element.getAReference()
664662
)
665663
}
666664
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ abstract class ServiceReference extends TServiceReference {
3434
*/
3535
abstract string getName();
3636

37+
/**
38+
* Gets a data flow node that may refer to this service.
39+
*/
40+
DataFlow::SourceNode getAReference() {
41+
result = DataFlow::parameterNode(any(ServiceRequest request).getDependencyParameter(this))
42+
}
43+
3744
/**
3845
* Gets an access to the referenced service.
3946
*/

0 commit comments

Comments
 (0)