Skip to content

Commit e2927b2

Browse files
committed
Updated tanstack to use API graph.
1 parent 3587ba5 commit e2927b2

File tree

4 files changed

+18
-21
lines changed

4 files changed

+18
-21
lines changed

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

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,17 @@ private import javascript
1010
*/
1111
class TanstackStep extends DataFlow::AdditionalFlowStep {
1212
override predicate step(DataFlow::Node node1, DataFlow::Node node2) {
13-
exists(DataFlow::CallNode useQuery |
13+
exists(API::CallNode useQuery |
1414
useQuery = useQueryCall() and
15-
node1 =
16-
useQuery
17-
.getArgument(0)
18-
.getALocalSource()
19-
.getAPropertyWrite("queryFn")
20-
.getRhs()
21-
.getAFunctionValue()
22-
.getAReturn() and
23-
node2 = useQuery.getAPropertyRead("data")
15+
node1 = useQuery.getParameter(0).getMember("queryFn").getReturn().getPromised().asSink() and
16+
node2 = useQuery.getReturn().getMember("data").asSource()
2417
)
2518
}
2619
}
2720

2821
/**
2922
* Retrieves a call node representing a useQuery invocation from the '@tanstack/react-query' module.
3023
*/
31-
DataFlow::CallNode useQueryCall() {
32-
result = DataFlow::moduleImport("@tanstack/react-query").getAPropertyRead("useQuery").getACall()
24+
API::CallNode useQueryCall() {
25+
result = API::moduleImport("@tanstack/react-query").getMember("useQuery").getACall()
3326
}
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#select
2-
| test.jsx:25:29:25:32 | data | test.jsx:5:28:5:63 | fetch(" ... ntent") | test.jsx:25:29:25:32 | data | Cross-site scripting vulnerability due to $@. | test.jsx:5:28:5:63 | fetch(" ... ntent") | user-provided value |
2+
| test.jsx:27:29:27:32 | data | test.jsx:5:28:5:63 | fetch(" ... ntent") | test.jsx:27:29:27:32 | data | Cross-site scripting vulnerability due to $@. | test.jsx:5:28:5:63 | fetch(" ... ntent") | user-provided value |
33
edges
44
| test.jsx:5:11:5:63 | response | test.jsx:6:24:6:31 | response | provenance | |
55
| test.jsx:5:22:5:63 | await f ... ntent") | test.jsx:5:11:5:63 | response | provenance | |
@@ -8,8 +8,8 @@ edges
88
| test.jsx:6:18:6:38 | await r ... .json() | test.jsx:6:11:6:38 | data | provenance | |
99
| test.jsx:6:24:6:31 | response | test.jsx:6:24:6:38 | response.json() | provenance | |
1010
| test.jsx:6:24:6:38 | response.json() | test.jsx:6:18:6:38 | await r ... .json() | provenance | |
11-
| test.jsx:7:12:7:15 | data | test.jsx:11:11:15:5 | data | provenance | |
12-
| test.jsx:11:11:15:5 | data | test.jsx:25:29:25:32 | data | provenance | |
11+
| test.jsx:7:12:7:15 | data | test.jsx:15:11:17:5 | data | provenance | |
12+
| test.jsx:15:11:17:5 | data | test.jsx:27:29:27:32 | data | provenance | |
1313
nodes
1414
| test.jsx:5:11:5:63 | response | semmle.label | response |
1515
| test.jsx:5:22:5:63 | await f ... ntent") | semmle.label | await f ... ntent") |
@@ -19,6 +19,6 @@ nodes
1919
| test.jsx:6:24:6:31 | response | semmle.label | response |
2020
| test.jsx:6:24:6:38 | response.json() | semmle.label | response.json() |
2121
| test.jsx:7:12:7:15 | data | semmle.label | data |
22-
| test.jsx:11:11:15:5 | data | semmle.label | data |
23-
| test.jsx:25:29:25:32 | data | semmle.label | data |
22+
| test.jsx:15:11:17:5 | data | semmle.label | data |
23+
| test.jsx:27:29:27:32 | data | semmle.label | data |
2424
subpaths

javascript/ql/test/query-tests/Security/CWE-079/DomBasedXssWithResponseThreat/test.jsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
import React from "react";
2-
import { useQuery } from "@tanstack/react-query";
2+
import { useQuery } from "./wrapper";
33

44
const fetchContent = async () => {
55
const response = await fetch("https://example.com/content"); // $ Source[js/xss]
66
const data = await response.json();
77
return data;
88
};
99

10+
const getQueryOptions = () => {
11+
return {queryFn: fetchContent};
12+
}
13+
1014
const ContentWithDangerousHtml = () => {
1115
const { data, error, isLoading } = useQuery(
12-
{
13-
queryFn: fetchContent
14-
}
16+
getQueryOptions()
1517
);
1618

1719
if (isLoading) return <div>Loading...</div>;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
import { useQuery } from "@tanstack/react-query";
2+
export { useQuery}

0 commit comments

Comments
 (0)