Skip to content

Commit 077bbb2

Browse files
authored
Merge pull request #21159 from asgerf/js/vue-prop-function
JS: Add support for props callbacks in Vue router configs
2 parents 06b99b2 + 9fa856f commit 077bbb2

File tree

4 files changed

+38
-15
lines changed

4 files changed

+38
-15
lines changed

javascript/ql/lib/semmle/javascript/frameworks/Vue.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,10 @@ module Vue {
667667
or
668668
result = routeConfig().getMember("beforeEnter").getParameter([0, 1]).asSource()
669669
or
670+
result = routeConfig().getMember("props").getParameter(0).asSource()
671+
or
672+
result = routeConfig().getMember("props").getAMember().getParameter(0).asSource()
673+
or
670674
exists(Component c |
671675
result = c.getABoundFunction().getAFunctionValue().getReceiver().getAPropertyRead("$route")
672676
or
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* The model of `vue-router` now properly detects taint sources in cases where
5+
the `props` property is a callback.

javascript/ql/test/library-tests/frameworks/Vue/router.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,17 @@ export const router = new Router({
1616
from.query.x;
1717
}
1818
}
19-
]
20-
}
19+
],
20+
props: route => ({
21+
x: route.query.x
22+
}),
23+
},
24+
{
25+
props: {
26+
x: route => route.query.x,
27+
y: route => route.query.y
28+
},
29+
},
2130
],
2231
scrollBehavior(to, from, savedPosition) {
2332
to.query.x;
@@ -34,4 +43,3 @@ router.afterEach((to, from) => {
3443
to.query.x;
3544
from.query.x;
3645
});
37-

javascript/ql/test/library-tests/frameworks/Vue/tests.expected

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -182,12 +182,15 @@ remoteFlowSource
182182
| router.js:9:17:9:26 | from.query |
183183
| router.js:15:25:15:32 | to.query |
184184
| router.js:16:25:16:34 | from.query |
185-
| router.js:23:9:23:16 | to.query |
186-
| router.js:24:9:24:18 | from.query |
187-
| router.js:29:5:29:12 | to.query |
188-
| router.js:30:5:30:14 | from.query |
189-
| router.js:34:5:34:12 | to.query |
190-
| router.js:35:5:35:14 | from.query |
185+
| router.js:21:20:21:30 | route.query |
186+
| router.js:26:29:26:39 | route.query |
187+
| router.js:27:29:27:39 | route.query |
188+
| router.js:32:9:32:16 | to.query |
189+
| router.js:33:9:33:18 | from.query |
190+
| router.js:38:5:38:12 | to.query |
191+
| router.js:39:5:39:14 | from.query |
192+
| router.js:43:5:43:12 | to.query |
193+
| router.js:44:5:44:14 | from.query |
191194
parseErrors
192195
attribute
193196
| compont-with-route.vue:2:8:2:21 | v-html=dataA | v-html |
@@ -227,12 +230,15 @@ threatModelSource
227230
| router.js:9:17:9:26 | from.query | remote |
228231
| router.js:15:25:15:32 | to.query | remote |
229232
| router.js:16:25:16:34 | from.query | remote |
230-
| router.js:23:9:23:16 | to.query | remote |
231-
| router.js:24:9:24:18 | from.query | remote |
232-
| router.js:29:5:29:12 | to.query | remote |
233-
| router.js:30:5:30:14 | from.query | remote |
234-
| router.js:34:5:34:12 | to.query | remote |
235-
| router.js:35:5:35:14 | from.query | remote |
233+
| router.js:21:20:21:30 | route.query | remote |
234+
| router.js:26:29:26:39 | route.query | remote |
235+
| router.js:27:29:27:39 | route.query | remote |
236+
| router.js:32:9:32:16 | to.query | remote |
237+
| router.js:33:9:33:18 | from.query | remote |
238+
| router.js:38:5:38:12 | to.query | remote |
239+
| router.js:39:5:39:14 | from.query | remote |
240+
| router.js:43:5:43:12 | to.query | remote |
241+
| router.js:44:5:44:14 | from.query | remote |
236242
| single-component-file-1.vue:7:45:7:54 | this.input | view-component-input |
237243
| single-file-component-3-script.js:5:42:5:51 | this.input | view-component-input |
238244
| single-file-component-4.vue:21:14:21:23 | this.input | view-component-input |

0 commit comments

Comments
 (0)