Skip to content

Commit 445b573

Browse files
committed
Debug and move type trackers to a new file
1 parent 8e059c4 commit 445b573

File tree

2 files changed

+67
-10
lines changed

2 files changed

+67
-10
lines changed

javascript/frameworks/ui5/lib/advanced_security/javascript/frameworks/ui5/UI5.qll

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ class Renderer extends SapExtendCall {
285285

286286
class CustomControl extends SapExtendCall {
287287
CustomControl() {
288-
this.getReceiver().getALocalSource() =
288+
this =
289289
TypeTrackers::hasDependency(["sap/ui/core/Control", "sap.ui.core.Control"])
290290
.getAMemberCall("extend") or
291291
exists(CustomControl superControl |
@@ -493,7 +493,7 @@ class CustomController extends SapExtendCall {
493493

494494
CustomController() {
495495
(
496-
this.getReceiver().getALocalSource() =
496+
this =
497497
TypeTrackers::hasDependency(["sap/ui/core/mvc/Controller", "sap.ui.core.mvc.Controller"])
498498
.getAMemberCall("extend")
499499
or
@@ -895,7 +895,7 @@ module ManifestJson {
895895
* Gets the view this target is associated with.
896896
*/
897897
UI5View getView() {
898-
result.getControllerName() =
898+
result.getController().getModuleName() =
899899
getSubstringAfterLastOccurrenceOfCharacter(this.getViewName(), "/")
900900
}
901901

@@ -1550,10 +1550,3 @@ bindingset[input, character]
15501550
private string getSubstringAfterLastOccurrenceOfCharacter(string input, string character) {
15511551
result = input.splitAt(character, countCharacterInString(input, character))
15521552
}
1553-
1554-
private module Notebook {
1555-
MethodCallNode test1(CustomController controller) {
1556-
controller.getModuleName() = "EffortDriver" and
1557-
result = controller.getOwnerComponentRef()
1558-
}
1559-
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import javascript
2+
import DataFlow
3+
4+
module TypeTrackers {
5+
private SourceNode hasDependency(TypeTracker t, string dependencyPath) {
6+
t.start() and
7+
exists(UserModule d |
8+
d.getADependency() = dependencyPath and
9+
result = d.getRequiredObject(dependencyPath).asSourceNode()
10+
)
11+
or
12+
exists(TypeTracker t2 | result = hasDependency(t2, dependencyPath).track(t2, t))
13+
}
14+
15+
SourceNode hasDependency(string dependencyPath) {
16+
result = hasDependency(TypeTracker::end(), dependencyPath)
17+
}
18+
19+
private MethodCallNode getOwnerComponentRef(TypeTracker t, CustomController customController) {
20+
customController.getAThisNode() = result.getReceiver() and
21+
result.getMethodName() = "getOwnerComponent"
22+
or
23+
exists(TypeTracker t2 | result = getOwnerComponentRef(t2, customController).track(t2, t))
24+
}
25+
26+
/* owner component ref */
27+
MethodCallNode getOwnerComponentRef(CustomController customController) {
28+
result = getOwnerComponentRef(TypeTracker::end(), customController)
29+
}
30+
}
31+
32+
module Test {
33+
private import semmle.javascript.dataflow.TypeTracking
34+
35+
private class ObjFieldStep extends SharedTypeTrackingStep {
36+
override predicate step(DataFlow::Node node1, DataFlow::Node node2) {
37+
exists(DataFlow::SourceNode object, string name |
38+
methodStepPred(object, name, node1) and
39+
methodStepSucc(object, name, node2)
40+
)
41+
}
42+
}
43+
44+
private DataFlow::SourceNode objectWithMethods() {
45+
result.flowsTo(any(DataFlow::CallNode call | call.getCalleeName() = "extend").getAnArgument())
46+
}
47+
48+
private DataFlow::SourceNode getAnAlias(DataFlow::SourceNode object) {
49+
object = objectWithMethods() and
50+
(
51+
result = object
52+
or
53+
result = getAnAlias(object).getAPropertySource().(DataFlow::FunctionNode).getReceiver()
54+
)
55+
}
56+
57+
private predicate methodStepPred(DataFlow::SourceNode object, string name, DataFlow::Node rhs) {
58+
rhs = getAnAlias(object).getAPropertyWrite(name).getRhs()
59+
}
60+
61+
private predicate methodStepSucc(DataFlow::SourceNode object, string name, DataFlow::Node read) {
62+
read = getAnAlias(object).getAPropertyRead(name)
63+
}
64+
}

0 commit comments

Comments
 (0)