Skip to content

Commit 5a1a3f0

Browse files
committed
Ruby: modgen - deduplicate getAnyParameter logic
1 parent 86ba75c commit 5a1a3f0

File tree

2 files changed

+13
-14
lines changed

2 files changed

+13
-14
lines changed

ruby/ql/src/queries/modeling/internal/Summaries.qll

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,21 @@ module Summaries {
1414
private module Config implements DataFlow::ConfigSig {
1515
predicate isSource(DataFlow::Node source) {
1616
exists(DataFlow::MethodNode methodNode | methodNode.isPublic() |
17-
getAnyParameterNode(methodNode).asSource() = source
17+
Util::getAnyParameter(methodNode) = source
1818
)
1919
}
2020

2121
predicate isSink(DataFlow::Node sink) { sink = any(DataFlow::MethodNode m).getAReturnNode() }
2222
}
2323

24-
private API::Node getAnyParameterNode(DataFlow::MethodNode methodNode) {
25-
result.asSource() =
26-
[
27-
methodNode.getParameter(_), methodNode.getKeywordParameter(_),
28-
methodNode.getBlockParameter(), methodNode.getSelfParameter()
29-
]
30-
}
31-
3224
private module ValueFlow {
3325
import DataFlow::Global<Config>
3426

3527
predicate summaryModel(string type, string path, string input, string output) {
3628
exists(DataFlow::MethodNode methodNode, API::Node paramNode |
3729
methodNode.getLocation().getFile() instanceof Util::RelevantFile and
3830
flow(paramNode.asSource(), methodNode.getAReturnNode()) and
39-
paramNode = getAnyParameterNode(methodNode)
31+
paramNode.asSource() = Util::getAnyParameter(methodNode)
4032
|
4133
Util::pathToMethod(methodNode, type, path) and
4234
input = Util::getArgumentPath(paramNode.asSource()) and
@@ -53,7 +45,7 @@ module Summaries {
5345
exists(DataFlow::MethodNode methodNode, API::Node paramNode |
5446
methodNode.getLocation().getFile() instanceof Util::RelevantFile and
5547
flow(paramNode.asSource(), methodNode.getAReturnNode()) and
56-
paramNode = getAnyParameterNode(methodNode)
48+
paramNode.asSource() = Util::getAnyParameter(methodNode)
5749
|
5850
Util::pathToMethod(methodNode, type, path) and
5951
input = Util::getArgumentPath(paramNode.asSource()) and

ruby/ql/src/queries/modeling/internal/Util.qll

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,16 @@ predicate pathToMethod(DataFlow::MethodNode method, string type, string path) {
5858
)
5959
}
6060

61-
/** Gets any parameter to `method`. This may be a positional, keyword, or block parameter. */
62-
private DataFlow::ParameterNode getAnyParameter(DataFlow::MethodNode method) {
63-
result = [method.getParameter(_), method.getKeywordParameter(_), method.getBlockParameter()]
61+
/**
62+
* Gets any parameter to `methodNode`. This may be a positional, keyword,
63+
* block, or self parameter.
64+
*/
65+
DataFlow::ParameterNode getAnyParameter(DataFlow::MethodNode methodNode) {
66+
result =
67+
[
68+
methodNode.getParameter(_), methodNode.getKeywordParameter(_), methodNode.getBlockParameter(),
69+
methodNode.getSelfParameter()
70+
]
6471
}
6572

6673
private predicate pathToNodeBase(API::Node node, string type, string path, boolean isOutput) {

0 commit comments

Comments
 (0)