mirror of
https://github.com/github/codeql.git
synced 2026-04-29 18:55:14 +02:00
Ruby: add flow summary for Enumerable#index_by
This commit is contained in:
@@ -284,7 +284,17 @@ module ActiveSupport {
|
||||
preservesValue = true
|
||||
}
|
||||
}
|
||||
// TODO: index_by, index_with, pick, pluck (they require Hash dataflow)
|
||||
|
||||
private class IndexBySummary extends SimpleSummarizedCallable {
|
||||
IndexBySummary() { this = "index_by" }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = "Argument[self].Element[any]" and
|
||||
output = ["Argument[block].Parameter[0]", "ReturnValue.Element[?]"] and
|
||||
preservesValue = true
|
||||
}
|
||||
}
|
||||
// TODO: index_with, pick, pluck (they require Hash dataflow)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -258,6 +258,34 @@ edges
|
||||
| hash_extensions.rb:58:10:58:10 | x [element :a] : | hash_extensions.rb:58:10:58:14 | ...[...] |
|
||||
| hash_extensions.rb:59:10:59:10 | x [element :b] : | hash_extensions.rb:59:10:59:14 | ...[...] |
|
||||
| hash_extensions.rb:59:10:59:10 | x [element :b] : | hash_extensions.rb:59:10:59:14 | ...[...] |
|
||||
| hash_extensions.rb:67:15:67:25 | call to source : | hash_extensions.rb:68:9:68:14 | values [element 0] : |
|
||||
| hash_extensions.rb:67:15:67:25 | call to source : | hash_extensions.rb:68:9:68:14 | values [element 0] : |
|
||||
| hash_extensions.rb:67:28:67:38 | call to source : | hash_extensions.rb:68:9:68:14 | values [element 1] : |
|
||||
| hash_extensions.rb:67:28:67:38 | call to source : | hash_extensions.rb:68:9:68:14 | values [element 1] : |
|
||||
| hash_extensions.rb:67:41:67:51 | call to source : | hash_extensions.rb:68:9:68:14 | values [element 2] : |
|
||||
| hash_extensions.rb:67:41:67:51 | call to source : | hash_extensions.rb:68:9:68:14 | values [element 2] : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 0] : | hash_extensions.rb:68:9:71:7 | call to index_by [element] : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 0] : | hash_extensions.rb:68:9:71:7 | call to index_by [element] : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 0] : | hash_extensions.rb:68:29:68:33 | value : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 0] : | hash_extensions.rb:68:29:68:33 | value : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 1] : | hash_extensions.rb:68:9:71:7 | call to index_by [element] : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 1] : | hash_extensions.rb:68:9:71:7 | call to index_by [element] : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 1] : | hash_extensions.rb:68:29:68:33 | value : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 1] : | hash_extensions.rb:68:29:68:33 | value : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 2] : | hash_extensions.rb:68:9:71:7 | call to index_by [element] : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 2] : | hash_extensions.rb:68:9:71:7 | call to index_by [element] : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 2] : | hash_extensions.rb:68:29:68:33 | value : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 2] : | hash_extensions.rb:68:29:68:33 | value : |
|
||||
| hash_extensions.rb:68:9:71:7 | call to index_by [element] : | hash_extensions.rb:73:10:73:10 | h [element] : |
|
||||
| hash_extensions.rb:68:9:71:7 | call to index_by [element] : | hash_extensions.rb:73:10:73:10 | h [element] : |
|
||||
| hash_extensions.rb:68:9:71:7 | call to index_by [element] : | hash_extensions.rb:74:10:74:10 | h [element] : |
|
||||
| hash_extensions.rb:68:9:71:7 | call to index_by [element] : | hash_extensions.rb:74:10:74:10 | h [element] : |
|
||||
| hash_extensions.rb:68:29:68:33 | value : | hash_extensions.rb:69:14:69:18 | value |
|
||||
| hash_extensions.rb:68:29:68:33 | value : | hash_extensions.rb:69:14:69:18 | value |
|
||||
| hash_extensions.rb:73:10:73:10 | h [element] : | hash_extensions.rb:73:10:73:16 | ...[...] |
|
||||
| hash_extensions.rb:73:10:73:10 | h [element] : | hash_extensions.rb:73:10:73:16 | ...[...] |
|
||||
| hash_extensions.rb:74:10:74:10 | h [element] : | hash_extensions.rb:74:10:74:16 | ...[...] |
|
||||
| hash_extensions.rb:74:10:74:10 | h [element] : | hash_extensions.rb:74:10:74:16 | ...[...] |
|
||||
nodes
|
||||
| active_support.rb:10:9:10:18 | call to source : | semmle.label | call to source : |
|
||||
| active_support.rb:11:10:11:10 | x : | semmle.label | x : |
|
||||
@@ -594,6 +622,32 @@ nodes
|
||||
| hash_extensions.rb:59:10:59:10 | x [element :b] : | semmle.label | x [element :b] : |
|
||||
| hash_extensions.rb:59:10:59:14 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:59:10:59:14 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:67:15:67:25 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:67:15:67:25 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:67:28:67:38 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:67:28:67:38 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:67:41:67:51 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:67:41:67:51 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 0] : | semmle.label | values [element 0] : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 0] : | semmle.label | values [element 0] : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 1] : | semmle.label | values [element 1] : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 1] : | semmle.label | values [element 1] : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 2] : | semmle.label | values [element 2] : |
|
||||
| hash_extensions.rb:68:9:68:14 | values [element 2] : | semmle.label | values [element 2] : |
|
||||
| hash_extensions.rb:68:9:71:7 | call to index_by [element] : | semmle.label | call to index_by [element] : |
|
||||
| hash_extensions.rb:68:9:71:7 | call to index_by [element] : | semmle.label | call to index_by [element] : |
|
||||
| hash_extensions.rb:68:29:68:33 | value : | semmle.label | value : |
|
||||
| hash_extensions.rb:68:29:68:33 | value : | semmle.label | value : |
|
||||
| hash_extensions.rb:69:14:69:18 | value | semmle.label | value |
|
||||
| hash_extensions.rb:69:14:69:18 | value | semmle.label | value |
|
||||
| hash_extensions.rb:73:10:73:10 | h [element] : | semmle.label | h [element] : |
|
||||
| hash_extensions.rb:73:10:73:10 | h [element] : | semmle.label | h [element] : |
|
||||
| hash_extensions.rb:73:10:73:16 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:73:10:73:16 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:74:10:74:10 | h [element] : | semmle.label | h [element] : |
|
||||
| hash_extensions.rb:74:10:74:10 | h [element] : | semmle.label | h [element] : |
|
||||
| hash_extensions.rb:74:10:74:16 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:74:10:74:16 | ...[...] | semmle.label | ...[...] |
|
||||
subpaths
|
||||
#select
|
||||
| active_support.rb:182:10:182:13 | ...[...] | active_support.rb:180:10:180:17 | call to source : | active_support.rb:182:10:182:13 | ...[...] | $@ | active_support.rb:180:10:180:17 | call to source : | call to source : |
|
||||
@@ -622,3 +676,12 @@ subpaths
|
||||
| hash_extensions.rb:56:10:56:14 | ...[...] | hash_extensions.rb:50:52:50:61 | call to taint : | hash_extensions.rb:56:10:56:14 | ...[...] | $@ | hash_extensions.rb:50:52:50:61 | call to taint : | call to taint : |
|
||||
| hash_extensions.rb:58:10:58:14 | ...[...] | hash_extensions.rb:50:14:50:23 | call to taint : | hash_extensions.rb:58:10:58:14 | ...[...] | $@ | hash_extensions.rb:50:14:50:23 | call to taint : | call to taint : |
|
||||
| hash_extensions.rb:59:10:59:14 | ...[...] | hash_extensions.rb:50:29:50:38 | call to taint : | hash_extensions.rb:59:10:59:14 | ...[...] | $@ | hash_extensions.rb:50:29:50:38 | call to taint : | call to taint : |
|
||||
| hash_extensions.rb:69:14:69:18 | value | hash_extensions.rb:67:15:67:25 | call to source : | hash_extensions.rb:69:14:69:18 | value | $@ | hash_extensions.rb:67:15:67:25 | call to source : | call to source : |
|
||||
| hash_extensions.rb:69:14:69:18 | value | hash_extensions.rb:67:28:67:38 | call to source : | hash_extensions.rb:69:14:69:18 | value | $@ | hash_extensions.rb:67:28:67:38 | call to source : | call to source : |
|
||||
| hash_extensions.rb:69:14:69:18 | value | hash_extensions.rb:67:41:67:51 | call to source : | hash_extensions.rb:69:14:69:18 | value | $@ | hash_extensions.rb:67:41:67:51 | call to source : | call to source : |
|
||||
| hash_extensions.rb:73:10:73:16 | ...[...] | hash_extensions.rb:67:15:67:25 | call to source : | hash_extensions.rb:73:10:73:16 | ...[...] | $@ | hash_extensions.rb:67:15:67:25 | call to source : | call to source : |
|
||||
| hash_extensions.rb:73:10:73:16 | ...[...] | hash_extensions.rb:67:28:67:38 | call to source : | hash_extensions.rb:73:10:73:16 | ...[...] | $@ | hash_extensions.rb:67:28:67:38 | call to source : | call to source : |
|
||||
| hash_extensions.rb:73:10:73:16 | ...[...] | hash_extensions.rb:67:41:67:51 | call to source : | hash_extensions.rb:73:10:73:16 | ...[...] | $@ | hash_extensions.rb:67:41:67:51 | call to source : | call to source : |
|
||||
| hash_extensions.rb:74:10:74:16 | ...[...] | hash_extensions.rb:67:15:67:25 | call to source : | hash_extensions.rb:74:10:74:16 | ...[...] | $@ | hash_extensions.rb:67:15:67:25 | call to source : | call to source : |
|
||||
| hash_extensions.rb:74:10:74:16 | ...[...] | hash_extensions.rb:67:28:67:38 | call to source : | hash_extensions.rb:74:10:74:16 | ...[...] | $@ | hash_extensions.rb:67:28:67:38 | call to source : | call to source : |
|
||||
| hash_extensions.rb:74:10:74:16 | ...[...] | hash_extensions.rb:67:41:67:51 | call to source : | hash_extensions.rb:74:10:74:16 | ...[...] | $@ | hash_extensions.rb:67:41:67:51 | call to source : | call to source : |
|
||||
|
||||
@@ -62,3 +62,16 @@ def m_extract!(x)
|
||||
end
|
||||
|
||||
m_extract!(:c)
|
||||
|
||||
def m_index_by
|
||||
values = [source("a"), source("b"), source("c")]
|
||||
h = values.index_by do |value|
|
||||
sink value # $ hasValueFlow=a $ hasValueFlow=b $ hasValueFlow=c
|
||||
make_key(value)
|
||||
end
|
||||
|
||||
sink h[:foo] # $ hasValueFlow=a $ hasValueFlow=b $ hasValueFlow=c
|
||||
sink h[:bar] # $ hasValueFlow=a $ hasValueFlow=b $ hasValueFlow=c
|
||||
end
|
||||
|
||||
m_index_by()
|
||||
|
||||
Reference in New Issue
Block a user