mirror of
https://github.com/github/codeql.git
synced 2026-05-01 19:55:15 +02:00
Ruby: Add flow summaries for String methods
This commit is contained in:
@@ -10,6 +10,7 @@ import core.Object::Object
|
||||
import core.Kernel::Kernel
|
||||
import core.Module
|
||||
import core.Array
|
||||
import core.String
|
||||
import core.Regexp
|
||||
|
||||
/**
|
||||
|
||||
533
ruby/ql/lib/codeql/ruby/frameworks/core/String.qll
Normal file
533
ruby/ql/lib/codeql/ruby/frameworks/core/String.qll
Normal file
@@ -0,0 +1,533 @@
|
||||
/** Provides flow summaries for the `String` class. */
|
||||
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.ApiGraphs
|
||||
private import codeql.ruby.DataFlow
|
||||
private import codeql.ruby.dataflow.FlowSummary
|
||||
private import codeql.ruby.dataflow.internal.DataFlowDispatch
|
||||
|
||||
// TODO: the way we interpret `preservesValue` in this module may not be
|
||||
// correct: we assume that if the input string appears intact in the output,
|
||||
// then value is preserves. This means that we consider appending or prepending
|
||||
// characters to the string to be value-preserving.
|
||||
// We may want to be stricter here, and define value-preserving as when the
|
||||
// output string exactly matches the input string.
|
||||
/**
|
||||
* Provides flow summaries for the `String` class.
|
||||
*
|
||||
* The summaries are ordered (and implemented) based on
|
||||
* https://docs.ruby-lang.org/en/3.1/String.html.
|
||||
*/
|
||||
module String {
|
||||
/**
|
||||
* Value-preserving flow from the receiver to the return value.
|
||||
*/
|
||||
private predicate valueIdentityFlow(string input, string output, boolean preservesValue) {
|
||||
input = "Receiver" and
|
||||
output = "ReturnValue" and
|
||||
preservesValue = true
|
||||
}
|
||||
|
||||
/**
|
||||
* Taint-preserving (but not value-preserving) flow from the receiver to the return value.
|
||||
*/
|
||||
private predicate taintIdentityFlow(string input, string output, boolean preservesValue) {
|
||||
input = "Receiver" and
|
||||
output = "ReturnValue" and
|
||||
preservesValue = false
|
||||
}
|
||||
|
||||
private class NewSummary extends SummarizedCallable {
|
||||
NewSummary() { this = "String.new" }
|
||||
|
||||
override MethodCall getACall() {
|
||||
result = API::getTopLevelMember("String").getAnInstantiation().getExprNode().getExpr()
|
||||
}
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = "Argument[0]" and
|
||||
output = "ReturnValue" and
|
||||
preservesValue = true
|
||||
}
|
||||
}
|
||||
|
||||
private class TryConvertSummary extends SummarizedCallable {
|
||||
TryConvertSummary() { this = "String.try_convert" }
|
||||
|
||||
override MethodCall getACall() {
|
||||
result =
|
||||
API::getTopLevelMember("String").getAMethodCall("try_convert").getExprNode().getExpr()
|
||||
}
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = "Argument[0]" and
|
||||
output = "ReturnValue" and
|
||||
preservesValue = true
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for the `String#%` method.
|
||||
*/
|
||||
private class FormatSummary extends SummarizedCallable {
|
||||
private MethodCall mc;
|
||||
|
||||
FormatSummary() { this = "%" and mc.getMethodName() = this }
|
||||
|
||||
override MethodCall getACall() { result = mc }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = ["Receiver", "Argument[0]", "ArrayElement of Argument[0]"] and
|
||||
output = "ReturnValue" and
|
||||
preservesValue = true
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: * + << <=>
|
||||
/**
|
||||
* A flow summary for the `String#b` method.
|
||||
*/
|
||||
private class BSummary extends SummarizedCallable {
|
||||
private MethodCall mc;
|
||||
|
||||
BSummary() { this = "b" and mc.getMethodName() = this }
|
||||
|
||||
override MethodCall getACall() { result = mc }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
valueIdentityFlow(input, output, preservesValue)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for the `String#byteslice` method.
|
||||
*/
|
||||
private class BytesliceSummary extends SummarizedCallable {
|
||||
private MethodCall mc;
|
||||
|
||||
BytesliceSummary() { this = "byteslice" and mc.getMethodName() = this }
|
||||
|
||||
override MethodCall getACall() { result = mc }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
valueIdentityFlow(input, output, preservesValue)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#capitalize(!)`.
|
||||
*/
|
||||
private class CapitalizeSummary extends SummarizedCallable {
|
||||
private MethodCall mc;
|
||||
|
||||
CapitalizeSummary() { this = ["capitalize", "capitalize!"] and mc.getMethodName() = this }
|
||||
|
||||
override MethodCall getACall() { result = mc }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = "Receiver" and
|
||||
preservesValue = false and
|
||||
output = "ReturnValue"
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#center`, `String#ljust` and `String#rjust`.
|
||||
*/
|
||||
private class CenterSummary extends SimpleSummarizedCallable {
|
||||
CenterSummary() { this = ["center", "ljust", "rjust"] }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
(
|
||||
input = "Receiver" and
|
||||
output = "ReturnValue"
|
||||
or
|
||||
input = "Argument[1]" and
|
||||
output = "ReturnValue"
|
||||
) and
|
||||
preservesValue = false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for the `String#chomp`, `String#chomp!`, `String#chop` and `String#chop!` methods.
|
||||
*/
|
||||
private class ChompSummary extends SummarizedCallable {
|
||||
private MethodCall mc;
|
||||
|
||||
ChompSummary() { this = ["chomp", "chomp!", "chop", "chop!"] and mc.getMethodName() = this }
|
||||
|
||||
override MethodCall getACall() { result = mc }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = "Receiver" and
|
||||
preservesValue = false and
|
||||
(
|
||||
output = "ReturnValue"
|
||||
or
|
||||
this = ["chomp!", "chop!"] and output = "Receiver"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: we already have a summary for Array#clear. Check that it applies correctly to String#clear.
|
||||
/**
|
||||
* A flow summary for `String#concat` and `String#prepend`.
|
||||
*/
|
||||
private class ConcatSummary extends SimpleSummarizedCallable {
|
||||
ConcatSummary() { this = ["concat", "prepend"] }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = ["Receiver", "Argument[_]"] and
|
||||
output = ["ReturnValue", "Receiver"] and
|
||||
preservesValue = true
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#delete(!)`, `String#delete_prefix(!)` and `String#delete_suffix(!)`.
|
||||
*/
|
||||
private class DeleteSummary extends SimpleSummarizedCallable {
|
||||
DeleteSummary() { this = ["delete", "delete_prefix", "delete_suffix"] + ["", "!"] }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
taintIdentityFlow(input, output, preservesValue)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#downcase(!)`, `String#upcase` and `String#swapcase(!)`.
|
||||
*/
|
||||
private class DowncaseSummary extends SimpleSummarizedCallable {
|
||||
DowncaseSummary() { this = ["downcase", "upcase", "swapcase"] + ["", "!"] }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
taintIdentityFlow(input, output, preservesValue)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#dump` and `String#undump`.
|
||||
*/
|
||||
private class DumpSummary extends SimpleSummarizedCallable {
|
||||
DumpSummary() { this = ["dump", "undump"] }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
taintIdentityFlow(input, output, preservesValue)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#each_line` and `String#lines`.
|
||||
*/
|
||||
private class EachLineSummary extends SummarizedCallable {
|
||||
MethodCall mc;
|
||||
|
||||
EachLineSummary() { this = ["each_line", "lines"] and mc.getMethodName() = this }
|
||||
|
||||
override MethodCall getACall() { result = mc }
|
||||
|
||||
predicate hasBlock() { exists(Block b | b = mc.getBlock()) }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
preservesValue = false and
|
||||
input = "Receiver" and
|
||||
(
|
||||
output = "Parameter[0] of BlockArgument"
|
||||
or
|
||||
not this.hasBlock() and output = "ArrayElement[?] of ReturnValue"
|
||||
or
|
||||
this.hasBlock() and output = "ReturnValue"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#encode(!)` and `String#unicode_normalize(!)`.
|
||||
*/
|
||||
private class EncodeSummary extends SimpleSummarizedCallable {
|
||||
EncodeSummary() { this = ["encode", "unicode_normalize"] + ["", "!"] }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
taintIdentityFlow(input, output, preservesValue)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#force_encoding`.
|
||||
*/
|
||||
private class ForceEncodingSummary extends SimpleSummarizedCallable {
|
||||
ForceEncodingSummary() { this = "force_encoding" }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = "Receiver" and
|
||||
output = "ReturnValue" and
|
||||
preservesValue = false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#freeze`.
|
||||
*/
|
||||
private class FreezeSummary extends SimpleSummarizedCallable {
|
||||
FreezeSummary() { this = "freeze" }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
valueIdentityFlow(input, output, preservesValue)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#gsub(!)` and `String#sub(!)`.
|
||||
*/
|
||||
private class GsubSummary extends SimpleSummarizedCallable {
|
||||
GsubSummary() { this = ["sub", "gsub"] + ["", "!"] }
|
||||
|
||||
// str.gsub(pattern, replacement) -> new_str
|
||||
// str.gsub(pattern) {|match| block } -> new_str
|
||||
// str.gsub(pattern) -> enumerator of matches
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
// receiver -> return value
|
||||
// replacement -> return value
|
||||
// block return -> return value
|
||||
(
|
||||
input = ["Receiver", "Argument[1]"] and
|
||||
preservesValue = false
|
||||
or
|
||||
input = "ReturnValue of BlockArgument" and preservesValue = true
|
||||
) and
|
||||
output = "ReturnValue"
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#insert`.
|
||||
*/
|
||||
private class InsertSummary extends SimpleSummarizedCallable {
|
||||
InsertSummary() { this = "insert" }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
(
|
||||
input = "Receiver" and preservesValue = false
|
||||
or
|
||||
input = "Argument[1]" and preservesValue = true
|
||||
) and
|
||||
output = "ReturnValue"
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#inspect`.
|
||||
*/
|
||||
private class InspectSummary extends SimpleSummarizedCallable {
|
||||
InspectSummary() { this = "inspect" }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
taintIdentityFlow(input, output, preservesValue)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#strip(!)`, `String#lstrip(!)` and `String#rstrip(!)`.
|
||||
*/
|
||||
private class StripSummary extends SimpleSummarizedCallable {
|
||||
StripSummary() { this = ["strip", "lstrip", "rstrip"] + ["", "!"] }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
valueIdentityFlow(input, output, preservesValue)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#next(!)` and `String#succ(!)`.
|
||||
*/
|
||||
private class NextSummary extends SimpleSummarizedCallable {
|
||||
NextSummary() { this = ["next", "succ"] + ["", "!"] }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
taintIdentityFlow(input, output, preservesValue)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#partition` and `String#rpartition`.
|
||||
*/
|
||||
private class PartitionSummary extends SimpleSummarizedCallable {
|
||||
PartitionSummary() { this = ["partition", "rpartition"] }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = "Receiver" and
|
||||
output = "ArrayElement[" + [0, 1, 2] + "] of ReturnValue" and
|
||||
preservesValue = false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#replace`.
|
||||
*/
|
||||
private class ReplaceSummary extends SimpleSummarizedCallable {
|
||||
ReplaceSummary() { this = "replace" }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = "Argument[0]" and
|
||||
output = ["ReturnValue", "Receiver"] and
|
||||
preservesValue = true
|
||||
}
|
||||
// TODO: we should also clear any existing content in Receiver
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#reverse(!)`.
|
||||
*/
|
||||
private class ReverseSummary extends SimpleSummarizedCallable {
|
||||
ReverseSummary() { this = ["reverse", "reverse!"] }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
taintIdentityFlow(input, output, preservesValue)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#scan`.
|
||||
*/
|
||||
private class ScanSummary extends SummarizedCallable {
|
||||
private MethodCall mc;
|
||||
|
||||
ScanSummary() { this = "scan" and mc.getMethodName() = this }
|
||||
|
||||
override MethodCall getACall() { result = mc }
|
||||
|
||||
private predicate hasBlock() { exists(Block b | b = mc.getBlock()) }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = "Receiver" and
|
||||
(
|
||||
// scan(pattern) {|match, ...| block } -> str
|
||||
not this.hasBlock() and
|
||||
output = "ArrayElement[?] of ReturnValue" and
|
||||
preservesValue = false
|
||||
or
|
||||
// Parameter[_] doesn't seem to work
|
||||
output = "Parameter[" + [0 .. 10] + "] of BlockArgument" and preservesValue = false
|
||||
or
|
||||
// scan(pattern) -> array
|
||||
this.hasBlock() and
|
||||
output = "ReturnValue" and
|
||||
preservesValue = true
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#scrub(!)`.
|
||||
*/
|
||||
private class ScrubSummary extends SummarizedCallable {
|
||||
private MethodCall mc;
|
||||
|
||||
ScrubSummary() { this = ["scrub", "scrub!"] and mc.getMethodName() = this }
|
||||
|
||||
override MethodCall getACall() { result = mc }
|
||||
|
||||
private predicate hasBlock() { exists(Block b | b = mc.getBlock()) }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = "Receiver" and
|
||||
output = "Parameter[0] of BlockArgument" and
|
||||
preservesValue = true
|
||||
or
|
||||
input = "Argument[0]" and output = "ReturnValue" and preservesValue = true
|
||||
or
|
||||
this.hasBlock() and
|
||||
input = "ReturnValue of BlockArgument" and
|
||||
output = "ReturnValue" and
|
||||
preservesValue = true
|
||||
or
|
||||
taintIdentityFlow(input, output, preservesValue)
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: what do we do about `String#shellescape`?
|
||||
/**
|
||||
* A flow summary for `String#shellsplit`.
|
||||
*/
|
||||
private class ShellSplitSummary extends SimpleSummarizedCallable {
|
||||
ShellSplitSummary() { this = "shellsplit" }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = "Receiver" and
|
||||
output = "ArrayElement[?] of ReturnValue" and
|
||||
preservesValue = false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#slice(!)`, `String#split` and `String#[]`.
|
||||
*/
|
||||
private class SliceSummary extends SimpleSummarizedCallable {
|
||||
SliceSummary() { this = ["slice", "slice!", "split", "[]"] }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
taintIdentityFlow(input, output, preservesValue)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#squeeze(!)`.
|
||||
*/
|
||||
private class SqueezeSummary extends SimpleSummarizedCallable {
|
||||
SqueezeSummary() { this = ["squeeze", "squeeze!"] }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
taintIdentityFlow(input, output, preservesValue)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#to_s` and `String.to_str`.
|
||||
*/
|
||||
private class ToStrSummary extends SimpleSummarizedCallable {
|
||||
ToStrSummary() { this = ["to_str", "to_s"] }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
valueIdentityFlow(input, output, preservesValue)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#tr`.
|
||||
*/
|
||||
private class TrSummary extends SimpleSummarizedCallable {
|
||||
TrSummary() { this = ["tr", "tr_s"] + ["", "!"] }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = ["Receiver", "Argument[1]"] and output = "ReturnValue" and preservesValue = false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for `String#upto`.
|
||||
*/
|
||||
private class UptoSummary extends SummarizedCallable {
|
||||
private MethodCall mc;
|
||||
|
||||
UptoSummary() { this = "upto" and mc.getMethodName() = this }
|
||||
|
||||
override MethodCall getACall() { result = mc }
|
||||
|
||||
private predicate hasBlock() { exists(Block b | b = mc.getBlock()) }
|
||||
|
||||
// TODO: if second arg ('exclusive') is true, the first arg is excluded
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
valueIdentityFlow(input, output, preservesValue)
|
||||
or
|
||||
input = ["Receiver", "Argument[0]"] and
|
||||
output = "Parameter[0] of BlockArgument" and
|
||||
preservesValue = true
|
||||
or
|
||||
not this.hasBlock() and
|
||||
input = "ReturnValue of BlockArgument" and
|
||||
output = "ArrayElement[?] of ReturnValue" and
|
||||
preservesValue = true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,897 @@
|
||||
failures
|
||||
| string_flow.rb:83:10:83:10 | a | Unexpected result: hasValueFlow=a |
|
||||
| string_flow.rb:221:10:221:10 | a | Unexpected result: hasValueFlow=a |
|
||||
edges
|
||||
| string_flow.rb:2:9:2:18 | call to source : | string_flow.rb:3:21:3:21 | a : |
|
||||
| string_flow.rb:2:9:2:18 | call to source : | string_flow.rb:3:21:3:21 | a : |
|
||||
| string_flow.rb:3:21:3:21 | a : | string_flow.rb:3:10:3:22 | call to new |
|
||||
| string_flow.rb:3:21:3:21 | a : | string_flow.rb:3:10:3:22 | call to new |
|
||||
| string_flow.rb:7:9:7:18 | call to source : | string_flow.rb:8:29:8:29 | a : |
|
||||
| string_flow.rb:7:9:7:18 | call to source : | string_flow.rb:8:29:8:29 | a : |
|
||||
| string_flow.rb:8:29:8:29 | a : | string_flow.rb:8:10:8:30 | call to try_convert |
|
||||
| string_flow.rb:8:29:8:29 | a : | string_flow.rb:8:10:8:30 | call to try_convert |
|
||||
| string_flow.rb:12:9:12:18 | call to source : | string_flow.rb:13:10:13:17 | ... % ... |
|
||||
| string_flow.rb:12:9:12:18 | call to source : | string_flow.rb:13:17:13:17 | a : |
|
||||
| string_flow.rb:12:9:12:18 | call to source : | string_flow.rb:13:17:13:17 | a : |
|
||||
| string_flow.rb:12:9:12:18 | call to source : | string_flow.rb:14:28:14:28 | a : |
|
||||
| string_flow.rb:12:9:12:18 | call to source : | string_flow.rb:14:28:14:28 | a : |
|
||||
| string_flow.rb:12:9:12:18 | call to source : | string_flow.rb:15:10:15:10 | a : |
|
||||
| string_flow.rb:12:9:12:18 | call to source : | string_flow.rb:15:10:15:10 | a : |
|
||||
| string_flow.rb:12:9:12:18 | call to source : | string_flow.rb:15:10:15:18 | ... % ... |
|
||||
| string_flow.rb:13:17:13:17 | a : | string_flow.rb:13:10:13:17 | ... % ... |
|
||||
| string_flow.rb:13:17:13:17 | a : | string_flow.rb:13:10:13:17 | ... % ... |
|
||||
| string_flow.rb:14:28:14:28 | a : | string_flow.rb:14:10:14:29 | ... % ... |
|
||||
| string_flow.rb:14:28:14:28 | a : | string_flow.rb:14:10:14:29 | ... % ... |
|
||||
| string_flow.rb:15:10:15:10 | a : | string_flow.rb:15:10:15:18 | ... % ... |
|
||||
| string_flow.rb:15:10:15:10 | a : | string_flow.rb:15:10:15:18 | ... % ... |
|
||||
| string_flow.rb:19:9:19:18 | call to source : | string_flow.rb:21:10:21:10 | b |
|
||||
| string_flow.rb:25:9:25:18 | call to source : | string_flow.rb:27:10:27:10 | b |
|
||||
| string_flow.rb:31:9:31:18 | call to source : | string_flow.rb:33:10:33:10 | b |
|
||||
| string_flow.rb:31:9:31:18 | call to source : | string_flow.rb:35:10:35:10 | c |
|
||||
| string_flow.rb:39:9:39:18 | call to source : | string_flow.rb:40:10:40:10 | a : |
|
||||
| string_flow.rb:39:9:39:18 | call to source : | string_flow.rb:40:10:40:10 | a : |
|
||||
| string_flow.rb:40:10:40:10 | a : | string_flow.rb:40:10:40:12 | call to b |
|
||||
| string_flow.rb:40:10:40:10 | a : | string_flow.rb:40:10:40:12 | call to b |
|
||||
| string_flow.rb:44:9:44:18 | call to source : | string_flow.rb:45:10:45:10 | a : |
|
||||
| string_flow.rb:44:9:44:18 | call to source : | string_flow.rb:45:10:45:10 | a : |
|
||||
| string_flow.rb:44:9:44:18 | call to source : | string_flow.rb:46:10:46:10 | a : |
|
||||
| string_flow.rb:44:9:44:18 | call to source : | string_flow.rb:46:10:46:10 | a : |
|
||||
| string_flow.rb:44:9:44:18 | call to source : | string_flow.rb:47:10:47:10 | a : |
|
||||
| string_flow.rb:44:9:44:18 | call to source : | string_flow.rb:47:10:47:10 | a : |
|
||||
| string_flow.rb:45:10:45:10 | a : | string_flow.rb:45:10:45:23 | call to byteslice |
|
||||
| string_flow.rb:45:10:45:10 | a : | string_flow.rb:45:10:45:23 | call to byteslice |
|
||||
| string_flow.rb:46:10:46:10 | a : | string_flow.rb:46:10:46:26 | call to byteslice |
|
||||
| string_flow.rb:46:10:46:10 | a : | string_flow.rb:46:10:46:26 | call to byteslice |
|
||||
| string_flow.rb:47:10:47:10 | a : | string_flow.rb:47:10:47:26 | call to byteslice |
|
||||
| string_flow.rb:47:10:47:10 | a : | string_flow.rb:47:10:47:26 | call to byteslice |
|
||||
| string_flow.rb:51:9:51:18 | call to source : | string_flow.rb:52:10:52:10 | a : |
|
||||
| string_flow.rb:51:9:51:18 | call to source : | string_flow.rb:53:10:53:10 | a : |
|
||||
| string_flow.rb:52:10:52:10 | a : | string_flow.rb:52:10:52:21 | call to capitalize |
|
||||
| string_flow.rb:53:10:53:10 | a : | string_flow.rb:53:10:53:22 | call to capitalize! |
|
||||
| string_flow.rb:57:9:57:18 | call to source : | string_flow.rb:58:10:58:10 | a : |
|
||||
| string_flow.rb:57:9:57:18 | call to source : | string_flow.rb:59:27:59:27 | a : |
|
||||
| string_flow.rb:57:9:57:18 | call to source : | string_flow.rb:60:10:60:10 | a : |
|
||||
| string_flow.rb:57:9:57:18 | call to source : | string_flow.rb:61:26:61:26 | a : |
|
||||
| string_flow.rb:57:9:57:18 | call to source : | string_flow.rb:62:10:62:10 | a : |
|
||||
| string_flow.rb:57:9:57:18 | call to source : | string_flow.rb:63:26:63:26 | a : |
|
||||
| string_flow.rb:58:10:58:10 | a : | string_flow.rb:58:10:58:21 | call to center |
|
||||
| string_flow.rb:59:27:59:27 | a : | string_flow.rb:59:10:59:28 | call to center |
|
||||
| string_flow.rb:60:10:60:10 | a : | string_flow.rb:60:10:60:20 | call to ljust |
|
||||
| string_flow.rb:61:26:61:26 | a : | string_flow.rb:61:10:61:27 | call to ljust |
|
||||
| string_flow.rb:62:10:62:10 | a : | string_flow.rb:62:10:62:20 | call to rjust |
|
||||
| string_flow.rb:63:26:63:26 | a : | string_flow.rb:63:10:63:27 | call to rjust |
|
||||
| string_flow.rb:67:9:67:18 | call to source : | string_flow.rb:68:10:68:10 | a : |
|
||||
| string_flow.rb:67:9:67:18 | call to source : | string_flow.rb:69:10:69:10 | a : |
|
||||
| string_flow.rb:68:10:68:10 | a : | string_flow.rb:68:10:68:16 | call to chomp |
|
||||
| string_flow.rb:69:10:69:10 | a : | string_flow.rb:69:10:69:17 | call to chomp! |
|
||||
| string_flow.rb:73:9:73:18 | call to source : | string_flow.rb:74:10:74:10 | a : |
|
||||
| string_flow.rb:73:9:73:18 | call to source : | string_flow.rb:75:10:75:10 | a : |
|
||||
| string_flow.rb:74:10:74:10 | a : | string_flow.rb:74:10:74:15 | call to chop |
|
||||
| string_flow.rb:75:10:75:10 | a : | string_flow.rb:75:10:75:16 | call to chop! |
|
||||
| string_flow.rb:81:9:81:18 | call to source : | string_flow.rb:82:5:82:5 | a : |
|
||||
| string_flow.rb:81:9:81:18 | call to source : | string_flow.rb:82:5:82:5 | a : |
|
||||
| string_flow.rb:82:5:82:5 | [post] a : | string_flow.rb:83:10:83:10 | a |
|
||||
| string_flow.rb:82:5:82:5 | [post] a : | string_flow.rb:83:10:83:10 | a |
|
||||
| string_flow.rb:82:5:82:5 | a : | string_flow.rb:82:5:82:5 | [post] a : |
|
||||
| string_flow.rb:82:5:82:5 | a : | string_flow.rb:82:5:82:5 | [post] a : |
|
||||
| string_flow.rb:87:9:87:18 | call to source : | string_flow.rb:90:19:90:19 | a : |
|
||||
| string_flow.rb:87:9:87:18 | call to source : | string_flow.rb:90:19:90:19 | a : |
|
||||
| string_flow.rb:88:9:88:18 | call to source : | string_flow.rb:90:22:90:22 | b : |
|
||||
| string_flow.rb:88:9:88:18 | call to source : | string_flow.rb:90:22:90:22 | b : |
|
||||
| string_flow.rb:90:10:90:10 | [post] c : | string_flow.rb:91:10:91:10 | c |
|
||||
| string_flow.rb:90:10:90:10 | [post] c : | string_flow.rb:91:10:91:10 | c |
|
||||
| string_flow.rb:90:19:90:19 | a : | string_flow.rb:90:10:90:10 | [post] c : |
|
||||
| string_flow.rb:90:19:90:19 | a : | string_flow.rb:90:10:90:10 | [post] c : |
|
||||
| string_flow.rb:90:19:90:19 | a : | string_flow.rb:90:10:90:23 | call to concat |
|
||||
| string_flow.rb:90:19:90:19 | a : | string_flow.rb:90:10:90:23 | call to concat |
|
||||
| string_flow.rb:90:22:90:22 | b : | string_flow.rb:90:10:90:10 | [post] c : |
|
||||
| string_flow.rb:90:22:90:22 | b : | string_flow.rb:90:10:90:10 | [post] c : |
|
||||
| string_flow.rb:90:22:90:22 | b : | string_flow.rb:90:10:90:23 | call to concat |
|
||||
| string_flow.rb:90:22:90:22 | b : | string_flow.rb:90:10:90:23 | call to concat |
|
||||
| string_flow.rb:95:9:95:18 | call to source : | string_flow.rb:98:20:98:20 | a : |
|
||||
| string_flow.rb:95:9:95:18 | call to source : | string_flow.rb:98:20:98:20 | a : |
|
||||
| string_flow.rb:96:9:96:18 | call to source : | string_flow.rb:98:23:98:23 | b : |
|
||||
| string_flow.rb:96:9:96:18 | call to source : | string_flow.rb:98:23:98:23 | b : |
|
||||
| string_flow.rb:98:10:98:10 | [post] c : | string_flow.rb:99:10:99:10 | c |
|
||||
| string_flow.rb:98:10:98:10 | [post] c : | string_flow.rb:99:10:99:10 | c |
|
||||
| string_flow.rb:98:20:98:20 | a : | string_flow.rb:98:10:98:10 | [post] c : |
|
||||
| string_flow.rb:98:20:98:20 | a : | string_flow.rb:98:10:98:10 | [post] c : |
|
||||
| string_flow.rb:98:20:98:20 | a : | string_flow.rb:98:10:98:24 | call to prepend |
|
||||
| string_flow.rb:98:20:98:20 | a : | string_flow.rb:98:10:98:24 | call to prepend |
|
||||
| string_flow.rb:98:23:98:23 | b : | string_flow.rb:98:10:98:10 | [post] c : |
|
||||
| string_flow.rb:98:23:98:23 | b : | string_flow.rb:98:10:98:10 | [post] c : |
|
||||
| string_flow.rb:98:23:98:23 | b : | string_flow.rb:98:10:98:24 | call to prepend |
|
||||
| string_flow.rb:98:23:98:23 | b : | string_flow.rb:98:10:98:24 | call to prepend |
|
||||
| string_flow.rb:103:9:103:18 | call to source : | string_flow.rb:104:10:104:10 | a : |
|
||||
| string_flow.rb:104:10:104:10 | [post] a : | string_flow.rb:105:10:105:10 | a : |
|
||||
| string_flow.rb:104:10:104:10 | [post] a : | string_flow.rb:106:10:106:10 | a : |
|
||||
| string_flow.rb:104:10:104:10 | a : | string_flow.rb:104:10:104:10 | [post] a : |
|
||||
| string_flow.rb:104:10:104:10 | a : | string_flow.rb:104:10:104:22 | call to delete |
|
||||
| string_flow.rb:105:10:105:10 | a : | string_flow.rb:105:10:105:29 | call to delete_prefix |
|
||||
| string_flow.rb:106:10:106:10 | a : | string_flow.rb:106:10:106:29 | call to delete_suffix |
|
||||
| string_flow.rb:110:9:110:18 | call to source : | string_flow.rb:111:10:111:10 | a : |
|
||||
| string_flow.rb:110:9:110:18 | call to source : | string_flow.rb:112:10:112:10 | a : |
|
||||
| string_flow.rb:110:9:110:18 | call to source : | string_flow.rb:113:10:113:10 | a : |
|
||||
| string_flow.rb:110:9:110:18 | call to source : | string_flow.rb:114:10:114:10 | a : |
|
||||
| string_flow.rb:110:9:110:18 | call to source : | string_flow.rb:115:10:115:10 | a : |
|
||||
| string_flow.rb:110:9:110:18 | call to source : | string_flow.rb:116:10:116:10 | a : |
|
||||
| string_flow.rb:111:10:111:10 | a : | string_flow.rb:111:10:111:19 | call to downcase |
|
||||
| string_flow.rb:112:10:112:10 | a : | string_flow.rb:112:10:112:20 | call to downcase! |
|
||||
| string_flow.rb:113:10:113:10 | a : | string_flow.rb:113:10:113:19 | call to swapcase |
|
||||
| string_flow.rb:114:10:114:10 | a : | string_flow.rb:114:10:114:20 | call to swapcase! |
|
||||
| string_flow.rb:115:10:115:10 | a : | string_flow.rb:115:10:115:17 | call to upcase |
|
||||
| string_flow.rb:116:10:116:10 | a : | string_flow.rb:116:10:116:18 | call to upcase! |
|
||||
| string_flow.rb:120:9:120:18 | call to source : | string_flow.rb:121:9:121:9 | a : |
|
||||
| string_flow.rb:121:9:121:9 | a : | string_flow.rb:121:9:121:14 | call to dump : |
|
||||
| string_flow.rb:121:9:121:14 | call to dump : | string_flow.rb:122:10:122:10 | b |
|
||||
| string_flow.rb:121:9:121:14 | call to dump : | string_flow.rb:123:10:123:10 | b : |
|
||||
| string_flow.rb:123:10:123:10 | b : | string_flow.rb:123:10:123:17 | call to undump |
|
||||
| string_flow.rb:127:9:127:18 | call to source : | string_flow.rb:128:9:128:9 | a : |
|
||||
| string_flow.rb:127:9:127:18 | call to source : | string_flow.rb:130:9:130:9 | a : |
|
||||
| string_flow.rb:128:9:128:9 | a : | string_flow.rb:128:9:128:40 | call to each_line : |
|
||||
| string_flow.rb:128:9:128:9 | a : | string_flow.rb:128:24:128:27 | line : |
|
||||
| string_flow.rb:128:9:128:40 | call to each_line : | string_flow.rb:129:10:129:10 | b |
|
||||
| string_flow.rb:128:24:128:27 | line : | string_flow.rb:128:35:128:38 | line |
|
||||
| string_flow.rb:130:9:130:9 | a : | string_flow.rb:130:9:130:19 | call to each_line : |
|
||||
| string_flow.rb:130:9:130:19 | call to each_line : | string_flow.rb:131:10:131:10 | c : |
|
||||
| string_flow.rb:131:10:131:10 | c : | string_flow.rb:131:10:131:15 | call to to_a : |
|
||||
| string_flow.rb:131:10:131:15 | call to to_a : | string_flow.rb:131:10:131:18 | ...[...] |
|
||||
| string_flow.rb:135:9:135:18 | call to source : | string_flow.rb:136:9:136:9 | a : |
|
||||
| string_flow.rb:135:9:135:18 | call to source : | string_flow.rb:138:9:138:9 | a : |
|
||||
| string_flow.rb:136:9:136:9 | a : | string_flow.rb:136:9:136:36 | call to lines : |
|
||||
| string_flow.rb:136:9:136:9 | a : | string_flow.rb:136:20:136:23 | line : |
|
||||
| string_flow.rb:136:9:136:36 | call to lines : | string_flow.rb:137:10:137:10 | b |
|
||||
| string_flow.rb:136:20:136:23 | line : | string_flow.rb:136:31:136:34 | line |
|
||||
| string_flow.rb:138:9:138:9 | a : | string_flow.rb:138:9:138:15 | call to lines : |
|
||||
| string_flow.rb:138:9:138:15 | call to lines : | string_flow.rb:139:10:139:10 | c : |
|
||||
| string_flow.rb:139:10:139:10 | c : | string_flow.rb:139:10:139:13 | ...[...] |
|
||||
| string_flow.rb:143:9:143:18 | call to source : | string_flow.rb:144:10:144:10 | a : |
|
||||
| string_flow.rb:143:9:143:18 | call to source : | string_flow.rb:145:10:145:10 | a : |
|
||||
| string_flow.rb:143:9:143:18 | call to source : | string_flow.rb:146:10:146:10 | a : |
|
||||
| string_flow.rb:143:9:143:18 | call to source : | string_flow.rb:147:10:147:10 | a : |
|
||||
| string_flow.rb:144:10:144:10 | a : | string_flow.rb:144:10:144:26 | call to encode |
|
||||
| string_flow.rb:145:10:145:10 | a : | string_flow.rb:145:10:145:27 | call to encode! |
|
||||
| string_flow.rb:146:10:146:10 | a : | string_flow.rb:146:10:146:28 | call to unicode_normalize |
|
||||
| string_flow.rb:147:10:147:10 | a : | string_flow.rb:147:10:147:29 | call to unicode_normalize! |
|
||||
| string_flow.rb:151:9:151:18 | call to source : | string_flow.rb:152:10:152:10 | a : |
|
||||
| string_flow.rb:152:10:152:10 | a : | string_flow.rb:152:10:152:34 | call to force_encoding |
|
||||
| string_flow.rb:156:9:156:18 | call to source : | string_flow.rb:157:10:157:10 | a : |
|
||||
| string_flow.rb:156:9:156:18 | call to source : | string_flow.rb:157:10:157:10 | a : |
|
||||
| string_flow.rb:157:10:157:10 | a : | string_flow.rb:157:10:157:17 | call to freeze |
|
||||
| string_flow.rb:157:10:157:10 | a : | string_flow.rb:157:10:157:17 | call to freeze |
|
||||
| string_flow.rb:161:9:161:18 | call to source : | string_flow.rb:163:10:163:10 | a : |
|
||||
| string_flow.rb:161:9:161:18 | call to source : | string_flow.rb:164:10:164:10 | a : |
|
||||
| string_flow.rb:161:9:161:18 | call to source : | string_flow.rb:165:10:165:10 | a : |
|
||||
| string_flow.rb:161:9:161:18 | call to source : | string_flow.rb:166:10:166:10 | a : |
|
||||
| string_flow.rb:162:9:162:18 | call to source : | string_flow.rb:163:22:163:22 | c : |
|
||||
| string_flow.rb:162:9:162:18 | call to source : | string_flow.rb:164:23:164:23 | c : |
|
||||
| string_flow.rb:163:10:163:10 | a : | string_flow.rb:163:10:163:23 | call to gsub |
|
||||
| string_flow.rb:163:22:163:22 | c : | string_flow.rb:163:10:163:23 | call to gsub |
|
||||
| string_flow.rb:164:10:164:10 | a : | string_flow.rb:164:10:164:24 | call to gsub! |
|
||||
| string_flow.rb:164:23:164:23 | c : | string_flow.rb:164:10:164:24 | call to gsub! |
|
||||
| string_flow.rb:165:10:165:10 | a : | string_flow.rb:165:10:165:43 | call to gsub |
|
||||
| string_flow.rb:165:32:165:41 | call to source : | string_flow.rb:165:10:165:43 | call to gsub |
|
||||
| string_flow.rb:165:32:165:41 | call to source : | string_flow.rb:165:10:165:43 | call to gsub |
|
||||
| string_flow.rb:166:10:166:10 | a : | string_flow.rb:166:10:166:44 | call to gsub! |
|
||||
| string_flow.rb:166:33:166:42 | call to source : | string_flow.rb:166:10:166:44 | call to gsub! |
|
||||
| string_flow.rb:166:33:166:42 | call to source : | string_flow.rb:166:10:166:44 | call to gsub! |
|
||||
| string_flow.rb:170:9:170:18 | call to source : | string_flow.rb:172:10:172:10 | a : |
|
||||
| string_flow.rb:170:9:170:18 | call to source : | string_flow.rb:173:10:173:10 | a : |
|
||||
| string_flow.rb:170:9:170:18 | call to source : | string_flow.rb:174:10:174:10 | a : |
|
||||
| string_flow.rb:170:9:170:18 | call to source : | string_flow.rb:175:10:175:10 | a : |
|
||||
| string_flow.rb:171:9:171:18 | call to source : | string_flow.rb:172:21:172:21 | c : |
|
||||
| string_flow.rb:171:9:171:18 | call to source : | string_flow.rb:173:22:173:22 | c : |
|
||||
| string_flow.rb:172:10:172:10 | a : | string_flow.rb:172:10:172:22 | call to sub |
|
||||
| string_flow.rb:172:21:172:21 | c : | string_flow.rb:172:10:172:22 | call to sub |
|
||||
| string_flow.rb:173:10:173:10 | a : | string_flow.rb:173:10:173:23 | call to sub! |
|
||||
| string_flow.rb:173:22:173:22 | c : | string_flow.rb:173:10:173:23 | call to sub! |
|
||||
| string_flow.rb:174:10:174:10 | a : | string_flow.rb:174:10:174:42 | call to sub |
|
||||
| string_flow.rb:174:31:174:40 | call to source : | string_flow.rb:174:10:174:42 | call to sub |
|
||||
| string_flow.rb:174:31:174:40 | call to source : | string_flow.rb:174:10:174:42 | call to sub |
|
||||
| string_flow.rb:175:10:175:10 | a : | string_flow.rb:175:10:175:43 | call to sub! |
|
||||
| string_flow.rb:175:32:175:41 | call to source : | string_flow.rb:175:10:175:43 | call to sub! |
|
||||
| string_flow.rb:175:32:175:41 | call to source : | string_flow.rb:175:10:175:43 | call to sub! |
|
||||
| string_flow.rb:179:9:179:18 | call to source : | string_flow.rb:180:10:180:10 | a : |
|
||||
| string_flow.rb:179:9:179:18 | call to source : | string_flow.rb:180:10:180:10 | a : |
|
||||
| string_flow.rb:180:10:180:10 | [post] a : | string_flow.rb:181:24:181:24 | a : |
|
||||
| string_flow.rb:180:10:180:10 | [post] a : | string_flow.rb:181:24:181:24 | a : |
|
||||
| string_flow.rb:180:10:180:10 | a : | string_flow.rb:180:10:180:10 | [post] a : |
|
||||
| string_flow.rb:180:10:180:10 | a : | string_flow.rb:180:10:180:10 | [post] a : |
|
||||
| string_flow.rb:180:10:180:10 | a : | string_flow.rb:180:10:180:25 | call to insert |
|
||||
| string_flow.rb:181:24:181:24 | a : | string_flow.rb:181:10:181:25 | call to insert |
|
||||
| string_flow.rb:181:24:181:24 | a : | string_flow.rb:181:10:181:25 | call to insert |
|
||||
| string_flow.rb:185:9:185:18 | call to source : | string_flow.rb:186:10:186:10 | a : |
|
||||
| string_flow.rb:186:10:186:10 | a : | string_flow.rb:186:10:186:18 | call to inspect |
|
||||
| string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:191:10:191:10 | a : |
|
||||
| string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:191:10:191:10 | a : |
|
||||
| string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:192:10:192:10 | a : |
|
||||
| string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:192:10:192:10 | a : |
|
||||
| string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:193:10:193:10 | a : |
|
||||
| string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:193:10:193:10 | a : |
|
||||
| string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:194:10:194:10 | a : |
|
||||
| string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:194:10:194:10 | a : |
|
||||
| string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:195:10:195:10 | a : |
|
||||
| string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:195:10:195:10 | a : |
|
||||
| string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:196:10:196:10 | a : |
|
||||
| string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:196:10:196:10 | a : |
|
||||
| string_flow.rb:191:10:191:10 | a : | string_flow.rb:191:10:191:16 | call to strip |
|
||||
| string_flow.rb:191:10:191:10 | a : | string_flow.rb:191:10:191:16 | call to strip |
|
||||
| string_flow.rb:192:10:192:10 | a : | string_flow.rb:192:10:192:17 | call to strip! |
|
||||
| string_flow.rb:192:10:192:10 | a : | string_flow.rb:192:10:192:17 | call to strip! |
|
||||
| string_flow.rb:193:10:193:10 | a : | string_flow.rb:193:10:193:17 | call to lstrip |
|
||||
| string_flow.rb:193:10:193:10 | a : | string_flow.rb:193:10:193:17 | call to lstrip |
|
||||
| string_flow.rb:194:10:194:10 | a : | string_flow.rb:194:10:194:18 | call to lstrip! |
|
||||
| string_flow.rb:194:10:194:10 | a : | string_flow.rb:194:10:194:18 | call to lstrip! |
|
||||
| string_flow.rb:195:10:195:10 | a : | string_flow.rb:195:10:195:17 | call to rstrip |
|
||||
| string_flow.rb:195:10:195:10 | a : | string_flow.rb:195:10:195:17 | call to rstrip |
|
||||
| string_flow.rb:196:10:196:10 | a : | string_flow.rb:196:10:196:18 | call to rstrip! |
|
||||
| string_flow.rb:196:10:196:10 | a : | string_flow.rb:196:10:196:18 | call to rstrip! |
|
||||
| string_flow.rb:200:9:200:18 | call to source : | string_flow.rb:201:10:201:10 | a : |
|
||||
| string_flow.rb:200:9:200:18 | call to source : | string_flow.rb:202:10:202:10 | a : |
|
||||
| string_flow.rb:200:9:200:18 | call to source : | string_flow.rb:203:10:203:10 | a : |
|
||||
| string_flow.rb:200:9:200:18 | call to source : | string_flow.rb:204:10:204:10 | a : |
|
||||
| string_flow.rb:201:10:201:10 | a : | string_flow.rb:201:10:201:15 | call to next |
|
||||
| string_flow.rb:202:10:202:10 | a : | string_flow.rb:202:10:202:16 | call to next! |
|
||||
| string_flow.rb:203:10:203:10 | a : | string_flow.rb:203:10:203:15 | call to succ |
|
||||
| string_flow.rb:204:10:204:10 | a : | string_flow.rb:204:10:204:16 | call to succ! |
|
||||
| string_flow.rb:208:9:208:18 | call to source : | string_flow.rb:209:9:209:9 | a : |
|
||||
| string_flow.rb:209:9:209:9 | a : | string_flow.rb:209:9:209:24 | call to partition [array element 0] : |
|
||||
| string_flow.rb:209:9:209:9 | a : | string_flow.rb:209:9:209:24 | call to partition [array element 1] : |
|
||||
| string_flow.rb:209:9:209:9 | a : | string_flow.rb:209:9:209:24 | call to partition [array element 2] : |
|
||||
| string_flow.rb:209:9:209:24 | call to partition [array element 0] : | string_flow.rb:210:10:210:10 | b [array element 0] : |
|
||||
| string_flow.rb:209:9:209:24 | call to partition [array element 1] : | string_flow.rb:211:10:211:10 | b [array element 1] : |
|
||||
| string_flow.rb:209:9:209:24 | call to partition [array element 2] : | string_flow.rb:212:10:212:10 | b [array element 2] : |
|
||||
| string_flow.rb:210:10:210:10 | b [array element 0] : | string_flow.rb:210:10:210:13 | ...[...] |
|
||||
| string_flow.rb:211:10:211:10 | b [array element 1] : | string_flow.rb:211:10:211:13 | ...[...] |
|
||||
| string_flow.rb:212:10:212:10 | b [array element 2] : | string_flow.rb:212:10:212:13 | ...[...] |
|
||||
| string_flow.rb:217:9:217:18 | call to source : | string_flow.rb:219:10:219:10 | a : |
|
||||
| string_flow.rb:217:9:217:18 | call to source : | string_flow.rb:219:10:219:10 | a : |
|
||||
| string_flow.rb:218:9:218:18 | call to source : | string_flow.rb:219:20:219:20 | b : |
|
||||
| string_flow.rb:218:9:218:18 | call to source : | string_flow.rb:219:20:219:20 | b : |
|
||||
| string_flow.rb:219:10:219:10 | [post] a : | string_flow.rb:221:10:221:10 | a |
|
||||
| string_flow.rb:219:10:219:10 | [post] a : | string_flow.rb:221:10:221:10 | a |
|
||||
| string_flow.rb:219:10:219:10 | a : | string_flow.rb:219:10:219:10 | [post] a : |
|
||||
| string_flow.rb:219:10:219:10 | a : | string_flow.rb:219:10:219:10 | [post] a : |
|
||||
| string_flow.rb:219:20:219:20 | b : | string_flow.rb:219:10:219:10 | [post] a : |
|
||||
| string_flow.rb:219:20:219:20 | b : | string_flow.rb:219:10:219:10 | [post] a : |
|
||||
| string_flow.rb:219:20:219:20 | b : | string_flow.rb:219:10:219:21 | call to replace |
|
||||
| string_flow.rb:219:20:219:20 | b : | string_flow.rb:219:10:219:21 | call to replace |
|
||||
| string_flow.rb:225:9:225:18 | call to source : | string_flow.rb:226:10:226:10 | a : |
|
||||
| string_flow.rb:226:10:226:10 | a : | string_flow.rb:226:10:226:18 | call to reverse |
|
||||
| string_flow.rb:230:9:230:18 | call to source : | string_flow.rb:231:9:231:9 | a : |
|
||||
| string_flow.rb:230:9:230:18 | call to source : | string_flow.rb:232:9:232:9 | a : |
|
||||
| string_flow.rb:230:9:230:18 | call to source : | string_flow.rb:232:9:232:9 | a : |
|
||||
| string_flow.rb:230:9:230:18 | call to source : | string_flow.rb:234:9:234:9 | a : |
|
||||
| string_flow.rb:231:9:231:9 | a : | string_flow.rb:231:24:231:24 | x : |
|
||||
| string_flow.rb:231:24:231:24 | x : | string_flow.rb:231:35:231:35 | x |
|
||||
| string_flow.rb:232:9:232:9 | a : | string_flow.rb:232:9:232:37 | call to scan : |
|
||||
| string_flow.rb:232:9:232:9 | a : | string_flow.rb:232:9:232:37 | call to scan : |
|
||||
| string_flow.rb:232:9:232:9 | a : | string_flow.rb:232:27:232:27 | y : |
|
||||
| string_flow.rb:232:9:232:37 | call to scan : | string_flow.rb:233:10:233:10 | b |
|
||||
| string_flow.rb:232:9:232:37 | call to scan : | string_flow.rb:233:10:233:10 | b |
|
||||
| string_flow.rb:232:27:232:27 | y : | string_flow.rb:232:35:232:35 | y |
|
||||
| string_flow.rb:234:9:234:9 | a : | string_flow.rb:234:9:234:19 | call to scan : |
|
||||
| string_flow.rb:234:9:234:19 | call to scan : | string_flow.rb:235:10:235:10 | b : |
|
||||
| string_flow.rb:234:9:234:19 | call to scan : | string_flow.rb:236:10:236:10 | b : |
|
||||
| string_flow.rb:235:10:235:10 | b : | string_flow.rb:235:10:235:13 | ...[...] |
|
||||
| string_flow.rb:236:10:236:10 | b : | string_flow.rb:236:10:236:13 | ...[...] |
|
||||
| string_flow.rb:240:5:240:18 | ... = ... : | string_flow.rb:244:26:244:26 | a : |
|
||||
| string_flow.rb:240:5:240:18 | ... = ... : | string_flow.rb:244:26:244:26 | a : |
|
||||
| string_flow.rb:240:5:240:18 | ... = ... : | string_flow.rb:252:27:252:27 | a : |
|
||||
| string_flow.rb:240:5:240:18 | ... = ... : | string_flow.rb:252:27:252:27 | a : |
|
||||
| string_flow.rb:240:9:240:18 | call to source : | string_flow.rb:240:5:240:18 | ... = ... : |
|
||||
| string_flow.rb:240:9:240:18 | call to source : | string_flow.rb:240:5:240:18 | ... = ... : |
|
||||
| string_flow.rb:240:9:240:18 | call to source : | string_flow.rb:241:10:241:10 | a : |
|
||||
| string_flow.rb:240:9:240:18 | call to source : | string_flow.rb:242:20:242:20 | a : |
|
||||
| string_flow.rb:240:9:240:18 | call to source : | string_flow.rb:242:20:242:20 | a : |
|
||||
| string_flow.rb:240:9:240:18 | call to source : | string_flow.rb:243:5:243:5 | a : |
|
||||
| string_flow.rb:240:9:240:18 | call to source : | string_flow.rb:243:5:243:5 | a : |
|
||||
| string_flow.rb:240:9:240:18 | call to source : | string_flow.rb:246:10:246:10 | a : |
|
||||
| string_flow.rb:240:9:240:18 | call to source : | string_flow.rb:247:21:247:21 | a : |
|
||||
| string_flow.rb:240:9:240:18 | call to source : | string_flow.rb:247:21:247:21 | a : |
|
||||
| string_flow.rb:241:10:241:10 | a : | string_flow.rb:241:10:241:21 | call to scrub |
|
||||
| string_flow.rb:242:20:242:20 | a : | string_flow.rb:242:10:242:21 | call to scrub |
|
||||
| string_flow.rb:242:20:242:20 | a : | string_flow.rb:242:10:242:21 | call to scrub |
|
||||
| string_flow.rb:243:5:243:5 | a : | string_flow.rb:243:16:243:16 | x : |
|
||||
| string_flow.rb:243:5:243:5 | a : | string_flow.rb:243:16:243:16 | x : |
|
||||
| string_flow.rb:243:16:243:16 | x : | string_flow.rb:243:24:243:24 | x |
|
||||
| string_flow.rb:243:16:243:16 | x : | string_flow.rb:243:24:243:24 | x |
|
||||
| string_flow.rb:244:26:244:26 | a : | string_flow.rb:244:10:244:28 | call to scrub |
|
||||
| string_flow.rb:244:26:244:26 | a : | string_flow.rb:244:10:244:28 | call to scrub |
|
||||
| string_flow.rb:246:10:246:10 | a : | string_flow.rb:246:10:246:22 | call to scrub! |
|
||||
| string_flow.rb:247:21:247:21 | a : | string_flow.rb:247:10:247:22 | call to scrub! |
|
||||
| string_flow.rb:247:21:247:21 | a : | string_flow.rb:247:10:247:22 | call to scrub! |
|
||||
| string_flow.rb:249:5:249:18 | ... = ... : | string_flow.rb:244:26:244:26 | a : |
|
||||
| string_flow.rb:249:5:249:18 | ... = ... : | string_flow.rb:244:26:244:26 | a : |
|
||||
| string_flow.rb:249:5:249:18 | ... = ... : | string_flow.rb:252:27:252:27 | a : |
|
||||
| string_flow.rb:249:5:249:18 | ... = ... : | string_flow.rb:252:27:252:27 | a : |
|
||||
| string_flow.rb:249:9:249:18 | call to source : | string_flow.rb:249:5:249:18 | ... = ... : |
|
||||
| string_flow.rb:249:9:249:18 | call to source : | string_flow.rb:249:5:249:18 | ... = ... : |
|
||||
| string_flow.rb:249:9:249:18 | call to source : | string_flow.rb:250:5:250:5 | a : |
|
||||
| string_flow.rb:249:9:249:18 | call to source : | string_flow.rb:250:5:250:5 | a : |
|
||||
| string_flow.rb:250:5:250:5 | a : | string_flow.rb:250:17:250:17 | x : |
|
||||
| string_flow.rb:250:5:250:5 | a : | string_flow.rb:250:17:250:17 | x : |
|
||||
| string_flow.rb:250:17:250:17 | x : | string_flow.rb:250:25:250:25 | x |
|
||||
| string_flow.rb:250:17:250:17 | x : | string_flow.rb:250:25:250:25 | x |
|
||||
| string_flow.rb:252:27:252:27 | a : | string_flow.rb:252:10:252:29 | call to scrub! |
|
||||
| string_flow.rb:252:27:252:27 | a : | string_flow.rb:252:10:252:29 | call to scrub! |
|
||||
| string_flow.rb:256:9:256:18 | call to source : | string_flow.rb:257:9:257:9 | a : |
|
||||
| string_flow.rb:257:9:257:9 | a : | string_flow.rb:257:9:257:20 | call to shellsplit [array element] : |
|
||||
| string_flow.rb:257:9:257:20 | call to shellsplit [array element] : | string_flow.rb:258:10:258:10 | b [array element] : |
|
||||
| string_flow.rb:258:10:258:10 | b [array element] : | string_flow.rb:258:10:258:13 | ...[...] |
|
||||
| string_flow.rb:262:9:262:18 | call to source : | string_flow.rb:263:9:263:9 | a : |
|
||||
| string_flow.rb:262:9:262:18 | call to source : | string_flow.rb:266:9:266:9 | a : |
|
||||
| string_flow.rb:263:9:263:9 | a : | string_flow.rb:263:9:263:18 | call to slice : |
|
||||
| string_flow.rb:263:9:263:18 | call to slice : | string_flow.rb:264:10:264:10 | b : |
|
||||
| string_flow.rb:264:10:264:10 | b : | string_flow.rb:264:10:264:13 | ...[...] |
|
||||
| string_flow.rb:266:9:266:9 | [post] a : | string_flow.rb:269:9:269:9 | a : |
|
||||
| string_flow.rb:266:9:266:9 | [post] a : | string_flow.rb:272:9:272:9 | a : |
|
||||
| string_flow.rb:266:9:266:9 | [post] a [array element 1] : | string_flow.rb:272:9:272:9 | a [array element 1] : |
|
||||
| string_flow.rb:266:9:266:9 | [post] a [array element 2] : | string_flow.rb:272:9:272:9 | a [array element 2] : |
|
||||
| string_flow.rb:266:9:266:9 | [post] a [array element] : | string_flow.rb:272:9:272:9 | a [array element] : |
|
||||
| string_flow.rb:266:9:266:9 | a : | string_flow.rb:266:9:266:9 | [post] a : |
|
||||
| string_flow.rb:266:9:266:9 | a : | string_flow.rb:266:9:266:9 | [post] a [array element 1] : |
|
||||
| string_flow.rb:266:9:266:9 | a : | string_flow.rb:266:9:266:9 | [post] a [array element 2] : |
|
||||
| string_flow.rb:266:9:266:9 | a : | string_flow.rb:266:9:266:9 | [post] a [array element] : |
|
||||
| string_flow.rb:266:9:266:9 | a : | string_flow.rb:266:9:266:19 | call to slice! : |
|
||||
| string_flow.rb:266:9:266:19 | call to slice! : | string_flow.rb:267:10:267:10 | b : |
|
||||
| string_flow.rb:267:10:267:10 | b : | string_flow.rb:267:10:267:13 | ...[...] |
|
||||
| string_flow.rb:269:9:269:9 | a : | string_flow.rb:269:9:269:20 | call to split : |
|
||||
| string_flow.rb:269:9:269:20 | call to split : | string_flow.rb:270:10:270:10 | b : |
|
||||
| string_flow.rb:270:10:270:10 | b : | string_flow.rb:270:10:270:13 | ...[...] |
|
||||
| string_flow.rb:272:9:272:9 | a : | string_flow.rb:272:9:272:14 | ...[...] : |
|
||||
| string_flow.rb:272:9:272:9 | a : | string_flow.rb:272:9:272:14 | ...[...] [array element 0] : |
|
||||
| string_flow.rb:272:9:272:9 | a : | string_flow.rb:272:9:272:14 | ...[...] [array element 1] : |
|
||||
| string_flow.rb:272:9:272:9 | a : | string_flow.rb:272:9:272:14 | ...[...] [array element] : |
|
||||
| string_flow.rb:272:9:272:9 | a [array element 1] : | string_flow.rb:272:9:272:14 | ...[...] [array element 0] : |
|
||||
| string_flow.rb:272:9:272:9 | a [array element 2] : | string_flow.rb:272:9:272:14 | ...[...] [array element 1] : |
|
||||
| string_flow.rb:272:9:272:9 | a [array element] : | string_flow.rb:272:9:272:14 | ...[...] [array element] : |
|
||||
| string_flow.rb:272:9:272:14 | ...[...] : | string_flow.rb:273:10:273:10 | b : |
|
||||
| string_flow.rb:272:9:272:14 | ...[...] [array element 0] : | string_flow.rb:273:10:273:10 | b [array element 0] : |
|
||||
| string_flow.rb:272:9:272:14 | ...[...] [array element 1] : | string_flow.rb:273:10:273:10 | b [array element 1] : |
|
||||
| string_flow.rb:272:9:272:14 | ...[...] [array element] : | string_flow.rb:273:10:273:10 | b [array element] : |
|
||||
| string_flow.rb:273:10:273:10 | b : | string_flow.rb:273:10:273:13 | ...[...] |
|
||||
| string_flow.rb:273:10:273:10 | b [array element 0] : | string_flow.rb:273:10:273:13 | ...[...] |
|
||||
| string_flow.rb:273:10:273:10 | b [array element 1] : | string_flow.rb:273:10:273:13 | ...[...] |
|
||||
| string_flow.rb:273:10:273:10 | b [array element] : | string_flow.rb:273:10:273:13 | ...[...] |
|
||||
| string_flow.rb:277:9:277:18 | call to source : | string_flow.rb:278:10:278:10 | a : |
|
||||
| string_flow.rb:277:9:277:18 | call to source : | string_flow.rb:279:10:279:10 | a : |
|
||||
| string_flow.rb:277:9:277:18 | call to source : | string_flow.rb:280:10:280:10 | a : |
|
||||
| string_flow.rb:277:9:277:18 | call to source : | string_flow.rb:281:10:281:10 | a : |
|
||||
| string_flow.rb:278:10:278:10 | a : | string_flow.rb:278:10:278:18 | call to squeeze |
|
||||
| string_flow.rb:279:10:279:10 | a : | string_flow.rb:279:10:279:23 | call to squeeze |
|
||||
| string_flow.rb:280:10:280:10 | a : | string_flow.rb:280:10:280:19 | call to squeeze! |
|
||||
| string_flow.rb:281:10:281:10 | a : | string_flow.rb:281:10:281:24 | call to squeeze! |
|
||||
| string_flow.rb:285:9:285:18 | call to source : | string_flow.rb:286:10:286:10 | a : |
|
||||
| string_flow.rb:285:9:285:18 | call to source : | string_flow.rb:286:10:286:10 | a : |
|
||||
| string_flow.rb:285:9:285:18 | call to source : | string_flow.rb:287:10:287:10 | a : |
|
||||
| string_flow.rb:285:9:285:18 | call to source : | string_flow.rb:287:10:287:10 | a : |
|
||||
| string_flow.rb:286:10:286:10 | a : | string_flow.rb:286:10:286:17 | call to to_str |
|
||||
| string_flow.rb:286:10:286:10 | a : | string_flow.rb:286:10:286:17 | call to to_str |
|
||||
| string_flow.rb:287:10:287:10 | a : | string_flow.rb:287:10:287:15 | call to to_s |
|
||||
| string_flow.rb:287:10:287:10 | a : | string_flow.rb:287:10:287:15 | call to to_s |
|
||||
| string_flow.rb:291:9:291:18 | call to source : | string_flow.rb:292:10:292:10 | a : |
|
||||
| string_flow.rb:291:9:291:18 | call to source : | string_flow.rb:293:22:293:22 | a : |
|
||||
| string_flow.rb:291:9:291:18 | call to source : | string_flow.rb:294:10:294:10 | a : |
|
||||
| string_flow.rb:291:9:291:18 | call to source : | string_flow.rb:295:23:295:23 | a : |
|
||||
| string_flow.rb:291:9:291:18 | call to source : | string_flow.rb:296:10:296:10 | a : |
|
||||
| string_flow.rb:291:9:291:18 | call to source : | string_flow.rb:297:24:297:24 | a : |
|
||||
| string_flow.rb:291:9:291:18 | call to source : | string_flow.rb:298:10:298:10 | a : |
|
||||
| string_flow.rb:291:9:291:18 | call to source : | string_flow.rb:299:25:299:25 | a : |
|
||||
| string_flow.rb:292:10:292:10 | a : | string_flow.rb:292:10:292:23 | call to tr |
|
||||
| string_flow.rb:293:22:293:22 | a : | string_flow.rb:293:10:293:23 | call to tr |
|
||||
| string_flow.rb:294:10:294:10 | a : | string_flow.rb:294:10:294:24 | call to tr! |
|
||||
| string_flow.rb:295:23:295:23 | a : | string_flow.rb:295:10:295:24 | call to tr! |
|
||||
| string_flow.rb:296:10:296:10 | a : | string_flow.rb:296:10:296:25 | call to tr_s |
|
||||
| string_flow.rb:297:24:297:24 | a : | string_flow.rb:297:10:297:25 | call to tr_s |
|
||||
| string_flow.rb:298:10:298:10 | a : | string_flow.rb:298:10:298:26 | call to tr_s! |
|
||||
| string_flow.rb:299:25:299:25 | a : | string_flow.rb:299:10:299:26 | call to tr_s! |
|
||||
| string_flow.rb:303:9:303:18 | call to source : | string_flow.rb:304:5:304:5 | a : |
|
||||
| string_flow.rb:303:9:303:18 | call to source : | string_flow.rb:304:5:304:5 | a : |
|
||||
| string_flow.rb:303:9:303:18 | call to source : | string_flow.rb:305:14:305:14 | a : |
|
||||
| string_flow.rb:303:9:303:18 | call to source : | string_flow.rb:305:14:305:14 | a : |
|
||||
| string_flow.rb:303:9:303:18 | call to source : | string_flow.rb:306:9:306:9 | a : |
|
||||
| string_flow.rb:304:5:304:5 | a : | string_flow.rb:304:20:304:20 | x : |
|
||||
| string_flow.rb:304:5:304:5 | a : | string_flow.rb:304:20:304:20 | x : |
|
||||
| string_flow.rb:304:20:304:20 | x : | string_flow.rb:304:28:304:28 | x |
|
||||
| string_flow.rb:304:20:304:20 | x : | string_flow.rb:304:28:304:28 | x |
|
||||
| string_flow.rb:305:14:305:14 | a : | string_flow.rb:305:20:305:20 | x : |
|
||||
| string_flow.rb:305:14:305:14 | a : | string_flow.rb:305:20:305:20 | x : |
|
||||
| string_flow.rb:305:20:305:20 | x : | string_flow.rb:305:28:305:28 | x |
|
||||
| string_flow.rb:305:20:305:20 | x : | string_flow.rb:305:28:305:28 | x |
|
||||
| string_flow.rb:306:9:306:9 | a : | string_flow.rb:306:9:306:19 | call to upto : |
|
||||
| string_flow.rb:306:9:306:19 | call to upto : | string_flow.rb:307:10:307:10 | c : |
|
||||
| string_flow.rb:307:10:307:10 | c : | string_flow.rb:307:10:307:13 | ...[...] |
|
||||
nodes
|
||||
| string_flow.rb:2:9:2:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:2:9:2:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:3:10:3:22 | call to new | semmle.label | call to new |
|
||||
| string_flow.rb:3:10:3:22 | call to new | semmle.label | call to new |
|
||||
| string_flow.rb:3:21:3:21 | a : | semmle.label | a : |
|
||||
| string_flow.rb:3:21:3:21 | a : | semmle.label | a : |
|
||||
| string_flow.rb:7:9:7:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:7:9:7:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:8:10:8:30 | call to try_convert | semmle.label | call to try_convert |
|
||||
| string_flow.rb:8:10:8:30 | call to try_convert | semmle.label | call to try_convert |
|
||||
| string_flow.rb:8:29:8:29 | a : | semmle.label | a : |
|
||||
| string_flow.rb:8:29:8:29 | a : | semmle.label | a : |
|
||||
| string_flow.rb:12:9:12:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:12:9:12:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:13:10:13:17 | ... % ... | semmle.label | ... % ... |
|
||||
| string_flow.rb:13:10:13:17 | ... % ... | semmle.label | ... % ... |
|
||||
| string_flow.rb:13:17:13:17 | a : | semmle.label | a : |
|
||||
| string_flow.rb:13:17:13:17 | a : | semmle.label | a : |
|
||||
| string_flow.rb:14:10:14:29 | ... % ... | semmle.label | ... % ... |
|
||||
| string_flow.rb:14:10:14:29 | ... % ... | semmle.label | ... % ... |
|
||||
| string_flow.rb:14:28:14:28 | a : | semmle.label | a : |
|
||||
| string_flow.rb:14:28:14:28 | a : | semmle.label | a : |
|
||||
| string_flow.rb:15:10:15:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:15:10:15:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:15:10:15:18 | ... % ... | semmle.label | ... % ... |
|
||||
| string_flow.rb:15:10:15:18 | ... % ... | semmle.label | ... % ... |
|
||||
| string_flow.rb:19:9:19:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:21:10:21:10 | b | semmle.label | b |
|
||||
| string_flow.rb:25:9:25:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:27:10:27:10 | b | semmle.label | b |
|
||||
| string_flow.rb:31:9:31:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:33:10:33:10 | b | semmle.label | b |
|
||||
| string_flow.rb:35:10:35:10 | c | semmle.label | c |
|
||||
| string_flow.rb:39:9:39:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:39:9:39:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:40:10:40:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:40:10:40:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:40:10:40:12 | call to b | semmle.label | call to b |
|
||||
| string_flow.rb:40:10:40:12 | call to b | semmle.label | call to b |
|
||||
| string_flow.rb:44:9:44:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:44:9:44:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:45:10:45:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:45:10:45:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:45:10:45:23 | call to byteslice | semmle.label | call to byteslice |
|
||||
| string_flow.rb:45:10:45:23 | call to byteslice | semmle.label | call to byteslice |
|
||||
| string_flow.rb:46:10:46:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:46:10:46:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:46:10:46:26 | call to byteslice | semmle.label | call to byteslice |
|
||||
| string_flow.rb:46:10:46:26 | call to byteslice | semmle.label | call to byteslice |
|
||||
| string_flow.rb:47:10:47:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:47:10:47:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:47:10:47:26 | call to byteslice | semmle.label | call to byteslice |
|
||||
| string_flow.rb:47:10:47:26 | call to byteslice | semmle.label | call to byteslice |
|
||||
| string_flow.rb:51:9:51:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:52:10:52:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:52:10:52:21 | call to capitalize | semmle.label | call to capitalize |
|
||||
| string_flow.rb:53:10:53:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:53:10:53:22 | call to capitalize! | semmle.label | call to capitalize! |
|
||||
| string_flow.rb:57:9:57:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:58:10:58:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:58:10:58:21 | call to center | semmle.label | call to center |
|
||||
| string_flow.rb:59:10:59:28 | call to center | semmle.label | call to center |
|
||||
| string_flow.rb:59:27:59:27 | a : | semmle.label | a : |
|
||||
| string_flow.rb:60:10:60:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:60:10:60:20 | call to ljust | semmle.label | call to ljust |
|
||||
| string_flow.rb:61:10:61:27 | call to ljust | semmle.label | call to ljust |
|
||||
| string_flow.rb:61:26:61:26 | a : | semmle.label | a : |
|
||||
| string_flow.rb:62:10:62:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:62:10:62:20 | call to rjust | semmle.label | call to rjust |
|
||||
| string_flow.rb:63:10:63:27 | call to rjust | semmle.label | call to rjust |
|
||||
| string_flow.rb:63:26:63:26 | a : | semmle.label | a : |
|
||||
| string_flow.rb:67:9:67:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:68:10:68:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:68:10:68:16 | call to chomp | semmle.label | call to chomp |
|
||||
| string_flow.rb:69:10:69:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:69:10:69:17 | call to chomp! | semmle.label | call to chomp! |
|
||||
| string_flow.rb:73:9:73:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:74:10:74:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:74:10:74:15 | call to chop | semmle.label | call to chop |
|
||||
| string_flow.rb:75:10:75:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:75:10:75:16 | call to chop! | semmle.label | call to chop! |
|
||||
| string_flow.rb:81:9:81:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:81:9:81:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:82:5:82:5 | [post] a : | semmle.label | [post] a : |
|
||||
| string_flow.rb:82:5:82:5 | [post] a : | semmle.label | [post] a : |
|
||||
| string_flow.rb:82:5:82:5 | a : | semmle.label | a : |
|
||||
| string_flow.rb:82:5:82:5 | a : | semmle.label | a : |
|
||||
| string_flow.rb:83:10:83:10 | a | semmle.label | a |
|
||||
| string_flow.rb:83:10:83:10 | a | semmle.label | a |
|
||||
| string_flow.rb:87:9:87:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:87:9:87:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:88:9:88:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:88:9:88:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:90:10:90:10 | [post] c : | semmle.label | [post] c : |
|
||||
| string_flow.rb:90:10:90:10 | [post] c : | semmle.label | [post] c : |
|
||||
| string_flow.rb:90:10:90:23 | call to concat | semmle.label | call to concat |
|
||||
| string_flow.rb:90:10:90:23 | call to concat | semmle.label | call to concat |
|
||||
| string_flow.rb:90:19:90:19 | a : | semmle.label | a : |
|
||||
| string_flow.rb:90:19:90:19 | a : | semmle.label | a : |
|
||||
| string_flow.rb:90:22:90:22 | b : | semmle.label | b : |
|
||||
| string_flow.rb:90:22:90:22 | b : | semmle.label | b : |
|
||||
| string_flow.rb:91:10:91:10 | c | semmle.label | c |
|
||||
| string_flow.rb:91:10:91:10 | c | semmle.label | c |
|
||||
| string_flow.rb:95:9:95:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:95:9:95:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:96:9:96:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:96:9:96:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:98:10:98:10 | [post] c : | semmle.label | [post] c : |
|
||||
| string_flow.rb:98:10:98:10 | [post] c : | semmle.label | [post] c : |
|
||||
| string_flow.rb:98:10:98:24 | call to prepend | semmle.label | call to prepend |
|
||||
| string_flow.rb:98:10:98:24 | call to prepend | semmle.label | call to prepend |
|
||||
| string_flow.rb:98:20:98:20 | a : | semmle.label | a : |
|
||||
| string_flow.rb:98:20:98:20 | a : | semmle.label | a : |
|
||||
| string_flow.rb:98:23:98:23 | b : | semmle.label | b : |
|
||||
| string_flow.rb:98:23:98:23 | b : | semmle.label | b : |
|
||||
| string_flow.rb:99:10:99:10 | c | semmle.label | c |
|
||||
| string_flow.rb:99:10:99:10 | c | semmle.label | c |
|
||||
| string_flow.rb:103:9:103:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:104:10:104:10 | [post] a : | semmle.label | [post] a : |
|
||||
| string_flow.rb:104:10:104:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:104:10:104:22 | call to delete | semmle.label | call to delete |
|
||||
| string_flow.rb:105:10:105:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:105:10:105:29 | call to delete_prefix | semmle.label | call to delete_prefix |
|
||||
| string_flow.rb:106:10:106:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:106:10:106:29 | call to delete_suffix | semmle.label | call to delete_suffix |
|
||||
| string_flow.rb:110:9:110:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:111:10:111:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:111:10:111:19 | call to downcase | semmle.label | call to downcase |
|
||||
| string_flow.rb:112:10:112:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:112:10:112:20 | call to downcase! | semmle.label | call to downcase! |
|
||||
| string_flow.rb:113:10:113:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:113:10:113:19 | call to swapcase | semmle.label | call to swapcase |
|
||||
| string_flow.rb:114:10:114:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:114:10:114:20 | call to swapcase! | semmle.label | call to swapcase! |
|
||||
| string_flow.rb:115:10:115:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:115:10:115:17 | call to upcase | semmle.label | call to upcase |
|
||||
| string_flow.rb:116:10:116:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:116:10:116:18 | call to upcase! | semmle.label | call to upcase! |
|
||||
| string_flow.rb:120:9:120:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:121:9:121:9 | a : | semmle.label | a : |
|
||||
| string_flow.rb:121:9:121:14 | call to dump : | semmle.label | call to dump : |
|
||||
| string_flow.rb:122:10:122:10 | b | semmle.label | b |
|
||||
| string_flow.rb:123:10:123:10 | b : | semmle.label | b : |
|
||||
| string_flow.rb:123:10:123:17 | call to undump | semmle.label | call to undump |
|
||||
| string_flow.rb:127:9:127:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:128:9:128:9 | a : | semmle.label | a : |
|
||||
| string_flow.rb:128:9:128:40 | call to each_line : | semmle.label | call to each_line : |
|
||||
| string_flow.rb:128:24:128:27 | line : | semmle.label | line : |
|
||||
| string_flow.rb:128:35:128:38 | line | semmle.label | line |
|
||||
| string_flow.rb:129:10:129:10 | b | semmle.label | b |
|
||||
| string_flow.rb:130:9:130:9 | a : | semmle.label | a : |
|
||||
| string_flow.rb:130:9:130:19 | call to each_line : | semmle.label | call to each_line : |
|
||||
| string_flow.rb:131:10:131:10 | c : | semmle.label | c : |
|
||||
| string_flow.rb:131:10:131:15 | call to to_a : | semmle.label | call to to_a : |
|
||||
| string_flow.rb:131:10:131:18 | ...[...] | semmle.label | ...[...] |
|
||||
| string_flow.rb:135:9:135:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:136:9:136:9 | a : | semmle.label | a : |
|
||||
| string_flow.rb:136:9:136:36 | call to lines : | semmle.label | call to lines : |
|
||||
| string_flow.rb:136:20:136:23 | line : | semmle.label | line : |
|
||||
| string_flow.rb:136:31:136:34 | line | semmle.label | line |
|
||||
| string_flow.rb:137:10:137:10 | b | semmle.label | b |
|
||||
| string_flow.rb:138:9:138:9 | a : | semmle.label | a : |
|
||||
| string_flow.rb:138:9:138:15 | call to lines : | semmle.label | call to lines : |
|
||||
| string_flow.rb:139:10:139:10 | c : | semmle.label | c : |
|
||||
| string_flow.rb:139:10:139:13 | ...[...] | semmle.label | ...[...] |
|
||||
| string_flow.rb:143:9:143:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:144:10:144:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:144:10:144:26 | call to encode | semmle.label | call to encode |
|
||||
| string_flow.rb:145:10:145:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:145:10:145:27 | call to encode! | semmle.label | call to encode! |
|
||||
| string_flow.rb:146:10:146:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:146:10:146:28 | call to unicode_normalize | semmle.label | call to unicode_normalize |
|
||||
| string_flow.rb:147:10:147:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:147:10:147:29 | call to unicode_normalize! | semmle.label | call to unicode_normalize! |
|
||||
| string_flow.rb:151:9:151:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:152:10:152:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:152:10:152:34 | call to force_encoding | semmle.label | call to force_encoding |
|
||||
| string_flow.rb:156:9:156:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:156:9:156:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:157:10:157:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:157:10:157:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:157:10:157:17 | call to freeze | semmle.label | call to freeze |
|
||||
| string_flow.rb:157:10:157:17 | call to freeze | semmle.label | call to freeze |
|
||||
| string_flow.rb:161:9:161:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:162:9:162:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:163:10:163:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:163:10:163:23 | call to gsub | semmle.label | call to gsub |
|
||||
| string_flow.rb:163:22:163:22 | c : | semmle.label | c : |
|
||||
| string_flow.rb:164:10:164:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:164:10:164:24 | call to gsub! | semmle.label | call to gsub! |
|
||||
| string_flow.rb:164:23:164:23 | c : | semmle.label | c : |
|
||||
| string_flow.rb:165:10:165:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:165:10:165:43 | call to gsub | semmle.label | call to gsub |
|
||||
| string_flow.rb:165:10:165:43 | call to gsub | semmle.label | call to gsub |
|
||||
| string_flow.rb:165:32:165:41 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:165:32:165:41 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:166:10:166:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:166:10:166:44 | call to gsub! | semmle.label | call to gsub! |
|
||||
| string_flow.rb:166:10:166:44 | call to gsub! | semmle.label | call to gsub! |
|
||||
| string_flow.rb:166:33:166:42 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:166:33:166:42 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:170:9:170:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:171:9:171:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:172:10:172:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:172:10:172:22 | call to sub | semmle.label | call to sub |
|
||||
| string_flow.rb:172:21:172:21 | c : | semmle.label | c : |
|
||||
| string_flow.rb:173:10:173:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:173:10:173:23 | call to sub! | semmle.label | call to sub! |
|
||||
| string_flow.rb:173:22:173:22 | c : | semmle.label | c : |
|
||||
| string_flow.rb:174:10:174:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:174:10:174:42 | call to sub | semmle.label | call to sub |
|
||||
| string_flow.rb:174:10:174:42 | call to sub | semmle.label | call to sub |
|
||||
| string_flow.rb:174:31:174:40 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:174:31:174:40 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:175:10:175:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:175:10:175:43 | call to sub! | semmle.label | call to sub! |
|
||||
| string_flow.rb:175:10:175:43 | call to sub! | semmle.label | call to sub! |
|
||||
| string_flow.rb:175:32:175:41 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:175:32:175:41 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:179:9:179:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:179:9:179:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:180:10:180:10 | [post] a : | semmle.label | [post] a : |
|
||||
| string_flow.rb:180:10:180:10 | [post] a : | semmle.label | [post] a : |
|
||||
| string_flow.rb:180:10:180:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:180:10:180:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:180:10:180:25 | call to insert | semmle.label | call to insert |
|
||||
| string_flow.rb:181:10:181:25 | call to insert | semmle.label | call to insert |
|
||||
| string_flow.rb:181:10:181:25 | call to insert | semmle.label | call to insert |
|
||||
| string_flow.rb:181:24:181:24 | a : | semmle.label | a : |
|
||||
| string_flow.rb:181:24:181:24 | a : | semmle.label | a : |
|
||||
| string_flow.rb:185:9:185:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:186:10:186:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:186:10:186:18 | call to inspect | semmle.label | call to inspect |
|
||||
| string_flow.rb:190:9:190:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:190:9:190:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:191:10:191:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:191:10:191:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:191:10:191:16 | call to strip | semmle.label | call to strip |
|
||||
| string_flow.rb:191:10:191:16 | call to strip | semmle.label | call to strip |
|
||||
| string_flow.rb:192:10:192:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:192:10:192:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:192:10:192:17 | call to strip! | semmle.label | call to strip! |
|
||||
| string_flow.rb:192:10:192:17 | call to strip! | semmle.label | call to strip! |
|
||||
| string_flow.rb:193:10:193:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:193:10:193:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:193:10:193:17 | call to lstrip | semmle.label | call to lstrip |
|
||||
| string_flow.rb:193:10:193:17 | call to lstrip | semmle.label | call to lstrip |
|
||||
| string_flow.rb:194:10:194:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:194:10:194:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:194:10:194:18 | call to lstrip! | semmle.label | call to lstrip! |
|
||||
| string_flow.rb:194:10:194:18 | call to lstrip! | semmle.label | call to lstrip! |
|
||||
| string_flow.rb:195:10:195:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:195:10:195:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:195:10:195:17 | call to rstrip | semmle.label | call to rstrip |
|
||||
| string_flow.rb:195:10:195:17 | call to rstrip | semmle.label | call to rstrip |
|
||||
| string_flow.rb:196:10:196:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:196:10:196:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:196:10:196:18 | call to rstrip! | semmle.label | call to rstrip! |
|
||||
| string_flow.rb:196:10:196:18 | call to rstrip! | semmle.label | call to rstrip! |
|
||||
| string_flow.rb:200:9:200:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:201:10:201:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:201:10:201:15 | call to next | semmle.label | call to next |
|
||||
| string_flow.rb:202:10:202:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:202:10:202:16 | call to next! | semmle.label | call to next! |
|
||||
| string_flow.rb:203:10:203:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:203:10:203:15 | call to succ | semmle.label | call to succ |
|
||||
| string_flow.rb:204:10:204:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:204:10:204:16 | call to succ! | semmle.label | call to succ! |
|
||||
| string_flow.rb:208:9:208:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:209:9:209:9 | a : | semmle.label | a : |
|
||||
| string_flow.rb:209:9:209:24 | call to partition [array element 0] : | semmle.label | call to partition [array element 0] : |
|
||||
| string_flow.rb:209:9:209:24 | call to partition [array element 1] : | semmle.label | call to partition [array element 1] : |
|
||||
| string_flow.rb:209:9:209:24 | call to partition [array element 2] : | semmle.label | call to partition [array element 2] : |
|
||||
| string_flow.rb:210:10:210:10 | b [array element 0] : | semmle.label | b [array element 0] : |
|
||||
| string_flow.rb:210:10:210:13 | ...[...] | semmle.label | ...[...] |
|
||||
| string_flow.rb:211:10:211:10 | b [array element 1] : | semmle.label | b [array element 1] : |
|
||||
| string_flow.rb:211:10:211:13 | ...[...] | semmle.label | ...[...] |
|
||||
| string_flow.rb:212:10:212:10 | b [array element 2] : | semmle.label | b [array element 2] : |
|
||||
| string_flow.rb:212:10:212:13 | ...[...] | semmle.label | ...[...] |
|
||||
| string_flow.rb:217:9:217:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:217:9:217:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:218:9:218:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:218:9:218:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:219:10:219:10 | [post] a : | semmle.label | [post] a : |
|
||||
| string_flow.rb:219:10:219:10 | [post] a : | semmle.label | [post] a : |
|
||||
| string_flow.rb:219:10:219:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:219:10:219:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:219:10:219:21 | call to replace | semmle.label | call to replace |
|
||||
| string_flow.rb:219:10:219:21 | call to replace | semmle.label | call to replace |
|
||||
| string_flow.rb:219:20:219:20 | b : | semmle.label | b : |
|
||||
| string_flow.rb:219:20:219:20 | b : | semmle.label | b : |
|
||||
| string_flow.rb:221:10:221:10 | a | semmle.label | a |
|
||||
| string_flow.rb:221:10:221:10 | a | semmle.label | a |
|
||||
| string_flow.rb:225:9:225:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:226:10:226:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:226:10:226:18 | call to reverse | semmle.label | call to reverse |
|
||||
| string_flow.rb:230:9:230:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:230:9:230:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:231:9:231:9 | a : | semmle.label | a : |
|
||||
| string_flow.rb:231:24:231:24 | x : | semmle.label | x : |
|
||||
| string_flow.rb:231:35:231:35 | x | semmle.label | x |
|
||||
| string_flow.rb:232:9:232:9 | a : | semmle.label | a : |
|
||||
| string_flow.rb:232:9:232:9 | a : | semmle.label | a : |
|
||||
| string_flow.rb:232:9:232:37 | call to scan : | semmle.label | call to scan : |
|
||||
| string_flow.rb:232:9:232:37 | call to scan : | semmle.label | call to scan : |
|
||||
| string_flow.rb:232:27:232:27 | y : | semmle.label | y : |
|
||||
| string_flow.rb:232:35:232:35 | y | semmle.label | y |
|
||||
| string_flow.rb:233:10:233:10 | b | semmle.label | b |
|
||||
| string_flow.rb:233:10:233:10 | b | semmle.label | b |
|
||||
| string_flow.rb:234:9:234:9 | a : | semmle.label | a : |
|
||||
| string_flow.rb:234:9:234:19 | call to scan : | semmle.label | call to scan : |
|
||||
| string_flow.rb:235:10:235:10 | b : | semmle.label | b : |
|
||||
| string_flow.rb:235:10:235:13 | ...[...] | semmle.label | ...[...] |
|
||||
| string_flow.rb:236:10:236:10 | b : | semmle.label | b : |
|
||||
| string_flow.rb:236:10:236:13 | ...[...] | semmle.label | ...[...] |
|
||||
| string_flow.rb:240:5:240:18 | ... = ... : | semmle.label | ... = ... : |
|
||||
| string_flow.rb:240:5:240:18 | ... = ... : | semmle.label | ... = ... : |
|
||||
| string_flow.rb:240:9:240:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:240:9:240:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:241:10:241:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:241:10:241:21 | call to scrub | semmle.label | call to scrub |
|
||||
| string_flow.rb:242:10:242:21 | call to scrub | semmle.label | call to scrub |
|
||||
| string_flow.rb:242:10:242:21 | call to scrub | semmle.label | call to scrub |
|
||||
| string_flow.rb:242:20:242:20 | a : | semmle.label | a : |
|
||||
| string_flow.rb:242:20:242:20 | a : | semmle.label | a : |
|
||||
| string_flow.rb:243:5:243:5 | a : | semmle.label | a : |
|
||||
| string_flow.rb:243:5:243:5 | a : | semmle.label | a : |
|
||||
| string_flow.rb:243:16:243:16 | x : | semmle.label | x : |
|
||||
| string_flow.rb:243:16:243:16 | x : | semmle.label | x : |
|
||||
| string_flow.rb:243:24:243:24 | x | semmle.label | x |
|
||||
| string_flow.rb:243:24:243:24 | x | semmle.label | x |
|
||||
| string_flow.rb:244:10:244:28 | call to scrub | semmle.label | call to scrub |
|
||||
| string_flow.rb:244:10:244:28 | call to scrub | semmle.label | call to scrub |
|
||||
| string_flow.rb:244:26:244:26 | a : | semmle.label | a : |
|
||||
| string_flow.rb:244:26:244:26 | a : | semmle.label | a : |
|
||||
| string_flow.rb:246:10:246:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:246:10:246:22 | call to scrub! | semmle.label | call to scrub! |
|
||||
| string_flow.rb:247:10:247:22 | call to scrub! | semmle.label | call to scrub! |
|
||||
| string_flow.rb:247:10:247:22 | call to scrub! | semmle.label | call to scrub! |
|
||||
| string_flow.rb:247:21:247:21 | a : | semmle.label | a : |
|
||||
| string_flow.rb:247:21:247:21 | a : | semmle.label | a : |
|
||||
| string_flow.rb:249:5:249:18 | ... = ... : | semmle.label | ... = ... : |
|
||||
| string_flow.rb:249:5:249:18 | ... = ... : | semmle.label | ... = ... : |
|
||||
| string_flow.rb:249:9:249:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:249:9:249:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:250:5:250:5 | a : | semmle.label | a : |
|
||||
| string_flow.rb:250:5:250:5 | a : | semmle.label | a : |
|
||||
| string_flow.rb:250:17:250:17 | x : | semmle.label | x : |
|
||||
| string_flow.rb:250:17:250:17 | x : | semmle.label | x : |
|
||||
| string_flow.rb:250:25:250:25 | x | semmle.label | x |
|
||||
| string_flow.rb:250:25:250:25 | x | semmle.label | x |
|
||||
| string_flow.rb:252:10:252:29 | call to scrub! | semmle.label | call to scrub! |
|
||||
| string_flow.rb:252:10:252:29 | call to scrub! | semmle.label | call to scrub! |
|
||||
| string_flow.rb:252:27:252:27 | a : | semmle.label | a : |
|
||||
| string_flow.rb:252:27:252:27 | a : | semmle.label | a : |
|
||||
| string_flow.rb:256:9:256:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:257:9:257:9 | a : | semmle.label | a : |
|
||||
| string_flow.rb:257:9:257:20 | call to shellsplit [array element] : | semmle.label | call to shellsplit [array element] : |
|
||||
| string_flow.rb:258:10:258:10 | b [array element] : | semmle.label | b [array element] : |
|
||||
| string_flow.rb:258:10:258:13 | ...[...] | semmle.label | ...[...] |
|
||||
| string_flow.rb:262:9:262:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:263:9:263:9 | a : | semmle.label | a : |
|
||||
| string_flow.rb:263:9:263:18 | call to slice : | semmle.label | call to slice : |
|
||||
| string_flow.rb:264:10:264:10 | b : | semmle.label | b : |
|
||||
| string_flow.rb:264:10:264:13 | ...[...] | semmle.label | ...[...] |
|
||||
| string_flow.rb:266:9:266:9 | [post] a : | semmle.label | [post] a : |
|
||||
| string_flow.rb:266:9:266:9 | [post] a [array element 1] : | semmle.label | [post] a [array element 1] : |
|
||||
| string_flow.rb:266:9:266:9 | [post] a [array element 2] : | semmle.label | [post] a [array element 2] : |
|
||||
| string_flow.rb:266:9:266:9 | [post] a [array element] : | semmle.label | [post] a [array element] : |
|
||||
| string_flow.rb:266:9:266:9 | a : | semmle.label | a : |
|
||||
| string_flow.rb:266:9:266:19 | call to slice! : | semmle.label | call to slice! : |
|
||||
| string_flow.rb:267:10:267:10 | b : | semmle.label | b : |
|
||||
| string_flow.rb:267:10:267:13 | ...[...] | semmle.label | ...[...] |
|
||||
| string_flow.rb:269:9:269:9 | a : | semmle.label | a : |
|
||||
| string_flow.rb:269:9:269:20 | call to split : | semmle.label | call to split : |
|
||||
| string_flow.rb:270:10:270:10 | b : | semmle.label | b : |
|
||||
| string_flow.rb:270:10:270:13 | ...[...] | semmle.label | ...[...] |
|
||||
| string_flow.rb:272:9:272:9 | a : | semmle.label | a : |
|
||||
| string_flow.rb:272:9:272:9 | a [array element 1] : | semmle.label | a [array element 1] : |
|
||||
| string_flow.rb:272:9:272:9 | a [array element 2] : | semmle.label | a [array element 2] : |
|
||||
| string_flow.rb:272:9:272:9 | a [array element] : | semmle.label | a [array element] : |
|
||||
| string_flow.rb:272:9:272:14 | ...[...] : | semmle.label | ...[...] : |
|
||||
| string_flow.rb:272:9:272:14 | ...[...] [array element 0] : | semmle.label | ...[...] [array element 0] : |
|
||||
| string_flow.rb:272:9:272:14 | ...[...] [array element 1] : | semmle.label | ...[...] [array element 1] : |
|
||||
| string_flow.rb:272:9:272:14 | ...[...] [array element] : | semmle.label | ...[...] [array element] : |
|
||||
| string_flow.rb:273:10:273:10 | b : | semmle.label | b : |
|
||||
| string_flow.rb:273:10:273:10 | b [array element 0] : | semmle.label | b [array element 0] : |
|
||||
| string_flow.rb:273:10:273:10 | b [array element 1] : | semmle.label | b [array element 1] : |
|
||||
| string_flow.rb:273:10:273:10 | b [array element] : | semmle.label | b [array element] : |
|
||||
| string_flow.rb:273:10:273:13 | ...[...] | semmle.label | ...[...] |
|
||||
| string_flow.rb:277:9:277:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:278:10:278:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:278:10:278:18 | call to squeeze | semmle.label | call to squeeze |
|
||||
| string_flow.rb:279:10:279:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:279:10:279:23 | call to squeeze | semmle.label | call to squeeze |
|
||||
| string_flow.rb:280:10:280:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:280:10:280:19 | call to squeeze! | semmle.label | call to squeeze! |
|
||||
| string_flow.rb:281:10:281:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:281:10:281:24 | call to squeeze! | semmle.label | call to squeeze! |
|
||||
| string_flow.rb:285:9:285:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:285:9:285:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:286:10:286:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:286:10:286:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:286:10:286:17 | call to to_str | semmle.label | call to to_str |
|
||||
| string_flow.rb:286:10:286:17 | call to to_str | semmle.label | call to to_str |
|
||||
| string_flow.rb:287:10:287:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:287:10:287:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:287:10:287:15 | call to to_s | semmle.label | call to to_s |
|
||||
| string_flow.rb:287:10:287:15 | call to to_s | semmle.label | call to to_s |
|
||||
| string_flow.rb:291:9:291:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:292:10:292:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:292:10:292:23 | call to tr | semmle.label | call to tr |
|
||||
| string_flow.rb:293:10:293:23 | call to tr | semmle.label | call to tr |
|
||||
| string_flow.rb:293:22:293:22 | a : | semmle.label | a : |
|
||||
| string_flow.rb:294:10:294:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:294:10:294:24 | call to tr! | semmle.label | call to tr! |
|
||||
| string_flow.rb:295:10:295:24 | call to tr! | semmle.label | call to tr! |
|
||||
| string_flow.rb:295:23:295:23 | a : | semmle.label | a : |
|
||||
| string_flow.rb:296:10:296:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:296:10:296:25 | call to tr_s | semmle.label | call to tr_s |
|
||||
| string_flow.rb:297:10:297:25 | call to tr_s | semmle.label | call to tr_s |
|
||||
| string_flow.rb:297:24:297:24 | a : | semmle.label | a : |
|
||||
| string_flow.rb:298:10:298:10 | a : | semmle.label | a : |
|
||||
| string_flow.rb:298:10:298:26 | call to tr_s! | semmle.label | call to tr_s! |
|
||||
| string_flow.rb:299:10:299:26 | call to tr_s! | semmle.label | call to tr_s! |
|
||||
| string_flow.rb:299:25:299:25 | a : | semmle.label | a : |
|
||||
| string_flow.rb:303:9:303:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:303:9:303:18 | call to source : | semmle.label | call to source : |
|
||||
| string_flow.rb:304:5:304:5 | a : | semmle.label | a : |
|
||||
| string_flow.rb:304:5:304:5 | a : | semmle.label | a : |
|
||||
| string_flow.rb:304:20:304:20 | x : | semmle.label | x : |
|
||||
| string_flow.rb:304:20:304:20 | x : | semmle.label | x : |
|
||||
| string_flow.rb:304:28:304:28 | x | semmle.label | x |
|
||||
| string_flow.rb:304:28:304:28 | x | semmle.label | x |
|
||||
| string_flow.rb:305:14:305:14 | a : | semmle.label | a : |
|
||||
| string_flow.rb:305:14:305:14 | a : | semmle.label | a : |
|
||||
| string_flow.rb:305:20:305:20 | x : | semmle.label | x : |
|
||||
| string_flow.rb:305:20:305:20 | x : | semmle.label | x : |
|
||||
| string_flow.rb:305:28:305:28 | x | semmle.label | x |
|
||||
| string_flow.rb:305:28:305:28 | x | semmle.label | x |
|
||||
| string_flow.rb:306:9:306:9 | a : | semmle.label | a : |
|
||||
| string_flow.rb:306:9:306:19 | call to upto : | semmle.label | call to upto : |
|
||||
| string_flow.rb:307:10:307:10 | c : | semmle.label | c : |
|
||||
| string_flow.rb:307:10:307:13 | ...[...] | semmle.label | ...[...] |
|
||||
subpaths
|
||||
#select
|
||||
| string_flow.rb:3:10:3:22 | call to new | string_flow.rb:2:9:2:18 | call to source : | string_flow.rb:3:10:3:22 | call to new | $@ | string_flow.rb:2:9:2:18 | call to source : | call to source : |
|
||||
| string_flow.rb:8:10:8:30 | call to try_convert | string_flow.rb:7:9:7:18 | call to source : | string_flow.rb:8:10:8:30 | call to try_convert | $@ | string_flow.rb:7:9:7:18 | call to source : | call to source : |
|
||||
| string_flow.rb:13:10:13:17 | ... % ... | string_flow.rb:12:9:12:18 | call to source : | string_flow.rb:13:10:13:17 | ... % ... | $@ | string_flow.rb:12:9:12:18 | call to source : | call to source : |
|
||||
| string_flow.rb:14:10:14:29 | ... % ... | string_flow.rb:12:9:12:18 | call to source : | string_flow.rb:14:10:14:29 | ... % ... | $@ | string_flow.rb:12:9:12:18 | call to source : | call to source : |
|
||||
| string_flow.rb:15:10:15:18 | ... % ... | string_flow.rb:12:9:12:18 | call to source : | string_flow.rb:15:10:15:18 | ... % ... | $@ | string_flow.rb:12:9:12:18 | call to source : | call to source : |
|
||||
| string_flow.rb:40:10:40:12 | call to b | string_flow.rb:39:9:39:18 | call to source : | string_flow.rb:40:10:40:12 | call to b | $@ | string_flow.rb:39:9:39:18 | call to source : | call to source : |
|
||||
| string_flow.rb:45:10:45:23 | call to byteslice | string_flow.rb:44:9:44:18 | call to source : | string_flow.rb:45:10:45:23 | call to byteslice | $@ | string_flow.rb:44:9:44:18 | call to source : | call to source : |
|
||||
| string_flow.rb:46:10:46:26 | call to byteslice | string_flow.rb:44:9:44:18 | call to source : | string_flow.rb:46:10:46:26 | call to byteslice | $@ | string_flow.rb:44:9:44:18 | call to source : | call to source : |
|
||||
| string_flow.rb:47:10:47:26 | call to byteslice | string_flow.rb:44:9:44:18 | call to source : | string_flow.rb:47:10:47:26 | call to byteslice | $@ | string_flow.rb:44:9:44:18 | call to source : | call to source : |
|
||||
| string_flow.rb:83:10:83:10 | a | string_flow.rb:81:9:81:18 | call to source : | string_flow.rb:83:10:83:10 | a | $@ | string_flow.rb:81:9:81:18 | call to source : | call to source : |
|
||||
| string_flow.rb:90:10:90:23 | call to concat | string_flow.rb:87:9:87:18 | call to source : | string_flow.rb:90:10:90:23 | call to concat | $@ | string_flow.rb:87:9:87:18 | call to source : | call to source : |
|
||||
| string_flow.rb:90:10:90:23 | call to concat | string_flow.rb:88:9:88:18 | call to source : | string_flow.rb:90:10:90:23 | call to concat | $@ | string_flow.rb:88:9:88:18 | call to source : | call to source : |
|
||||
| string_flow.rb:91:10:91:10 | c | string_flow.rb:87:9:87:18 | call to source : | string_flow.rb:91:10:91:10 | c | $@ | string_flow.rb:87:9:87:18 | call to source : | call to source : |
|
||||
| string_flow.rb:91:10:91:10 | c | string_flow.rb:88:9:88:18 | call to source : | string_flow.rb:91:10:91:10 | c | $@ | string_flow.rb:88:9:88:18 | call to source : | call to source : |
|
||||
| string_flow.rb:98:10:98:24 | call to prepend | string_flow.rb:95:9:95:18 | call to source : | string_flow.rb:98:10:98:24 | call to prepend | $@ | string_flow.rb:95:9:95:18 | call to source : | call to source : |
|
||||
| string_flow.rb:98:10:98:24 | call to prepend | string_flow.rb:96:9:96:18 | call to source : | string_flow.rb:98:10:98:24 | call to prepend | $@ | string_flow.rb:96:9:96:18 | call to source : | call to source : |
|
||||
| string_flow.rb:99:10:99:10 | c | string_flow.rb:95:9:95:18 | call to source : | string_flow.rb:99:10:99:10 | c | $@ | string_flow.rb:95:9:95:18 | call to source : | call to source : |
|
||||
| string_flow.rb:99:10:99:10 | c | string_flow.rb:96:9:96:18 | call to source : | string_flow.rb:99:10:99:10 | c | $@ | string_flow.rb:96:9:96:18 | call to source : | call to source : |
|
||||
| string_flow.rb:157:10:157:17 | call to freeze | string_flow.rb:156:9:156:18 | call to source : | string_flow.rb:157:10:157:17 | call to freeze | $@ | string_flow.rb:156:9:156:18 | call to source : | call to source : |
|
||||
| string_flow.rb:165:10:165:43 | call to gsub | string_flow.rb:165:32:165:41 | call to source : | string_flow.rb:165:10:165:43 | call to gsub | $@ | string_flow.rb:165:32:165:41 | call to source : | call to source : |
|
||||
| string_flow.rb:166:10:166:44 | call to gsub! | string_flow.rb:166:33:166:42 | call to source : | string_flow.rb:166:10:166:44 | call to gsub! | $@ | string_flow.rb:166:33:166:42 | call to source : | call to source : |
|
||||
| string_flow.rb:174:10:174:42 | call to sub | string_flow.rb:174:31:174:40 | call to source : | string_flow.rb:174:10:174:42 | call to sub | $@ | string_flow.rb:174:31:174:40 | call to source : | call to source : |
|
||||
| string_flow.rb:175:10:175:43 | call to sub! | string_flow.rb:175:32:175:41 | call to source : | string_flow.rb:175:10:175:43 | call to sub! | $@ | string_flow.rb:175:32:175:41 | call to source : | call to source : |
|
||||
| string_flow.rb:181:10:181:25 | call to insert | string_flow.rb:179:9:179:18 | call to source : | string_flow.rb:181:10:181:25 | call to insert | $@ | string_flow.rb:179:9:179:18 | call to source : | call to source : |
|
||||
| string_flow.rb:191:10:191:16 | call to strip | string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:191:10:191:16 | call to strip | $@ | string_flow.rb:190:9:190:18 | call to source : | call to source : |
|
||||
| string_flow.rb:192:10:192:17 | call to strip! | string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:192:10:192:17 | call to strip! | $@ | string_flow.rb:190:9:190:18 | call to source : | call to source : |
|
||||
| string_flow.rb:193:10:193:17 | call to lstrip | string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:193:10:193:17 | call to lstrip | $@ | string_flow.rb:190:9:190:18 | call to source : | call to source : |
|
||||
| string_flow.rb:194:10:194:18 | call to lstrip! | string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:194:10:194:18 | call to lstrip! | $@ | string_flow.rb:190:9:190:18 | call to source : | call to source : |
|
||||
| string_flow.rb:195:10:195:17 | call to rstrip | string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:195:10:195:17 | call to rstrip | $@ | string_flow.rb:190:9:190:18 | call to source : | call to source : |
|
||||
| string_flow.rb:196:10:196:18 | call to rstrip! | string_flow.rb:190:9:190:18 | call to source : | string_flow.rb:196:10:196:18 | call to rstrip! | $@ | string_flow.rb:190:9:190:18 | call to source : | call to source : |
|
||||
| string_flow.rb:219:10:219:21 | call to replace | string_flow.rb:218:9:218:18 | call to source : | string_flow.rb:219:10:219:21 | call to replace | $@ | string_flow.rb:218:9:218:18 | call to source : | call to source : |
|
||||
| string_flow.rb:221:10:221:10 | a | string_flow.rb:217:9:217:18 | call to source : | string_flow.rb:221:10:221:10 | a | $@ | string_flow.rb:217:9:217:18 | call to source : | call to source : |
|
||||
| string_flow.rb:221:10:221:10 | a | string_flow.rb:218:9:218:18 | call to source : | string_flow.rb:221:10:221:10 | a | $@ | string_flow.rb:218:9:218:18 | call to source : | call to source : |
|
||||
| string_flow.rb:233:10:233:10 | b | string_flow.rb:230:9:230:18 | call to source : | string_flow.rb:233:10:233:10 | b | $@ | string_flow.rb:230:9:230:18 | call to source : | call to source : |
|
||||
| string_flow.rb:242:10:242:21 | call to scrub | string_flow.rb:240:9:240:18 | call to source : | string_flow.rb:242:10:242:21 | call to scrub | $@ | string_flow.rb:240:9:240:18 | call to source : | call to source : |
|
||||
| string_flow.rb:243:24:243:24 | x | string_flow.rb:240:9:240:18 | call to source : | string_flow.rb:243:24:243:24 | x | $@ | string_flow.rb:240:9:240:18 | call to source : | call to source : |
|
||||
| string_flow.rb:244:10:244:28 | call to scrub | string_flow.rb:240:9:240:18 | call to source : | string_flow.rb:244:10:244:28 | call to scrub | $@ | string_flow.rb:240:9:240:18 | call to source : | call to source : |
|
||||
| string_flow.rb:244:10:244:28 | call to scrub | string_flow.rb:249:9:249:18 | call to source : | string_flow.rb:244:10:244:28 | call to scrub | $@ | string_flow.rb:249:9:249:18 | call to source : | call to source : |
|
||||
| string_flow.rb:247:10:247:22 | call to scrub! | string_flow.rb:240:9:240:18 | call to source : | string_flow.rb:247:10:247:22 | call to scrub! | $@ | string_flow.rb:240:9:240:18 | call to source : | call to source : |
|
||||
| string_flow.rb:250:25:250:25 | x | string_flow.rb:249:9:249:18 | call to source : | string_flow.rb:250:25:250:25 | x | $@ | string_flow.rb:249:9:249:18 | call to source : | call to source : |
|
||||
| string_flow.rb:252:10:252:29 | call to scrub! | string_flow.rb:240:9:240:18 | call to source : | string_flow.rb:252:10:252:29 | call to scrub! | $@ | string_flow.rb:240:9:240:18 | call to source : | call to source : |
|
||||
| string_flow.rb:252:10:252:29 | call to scrub! | string_flow.rb:249:9:249:18 | call to source : | string_flow.rb:252:10:252:29 | call to scrub! | $@ | string_flow.rb:249:9:249:18 | call to source : | call to source : |
|
||||
| string_flow.rb:286:10:286:17 | call to to_str | string_flow.rb:285:9:285:18 | call to source : | string_flow.rb:286:10:286:17 | call to to_str | $@ | string_flow.rb:285:9:285:18 | call to source : | call to source : |
|
||||
| string_flow.rb:287:10:287:15 | call to to_s | string_flow.rb:285:9:285:18 | call to source : | string_flow.rb:287:10:287:15 | call to to_s | $@ | string_flow.rb:285:9:285:18 | call to source : | call to source : |
|
||||
| string_flow.rb:304:28:304:28 | x | string_flow.rb:303:9:303:18 | call to source : | string_flow.rb:304:28:304:28 | x | $@ | string_flow.rb:303:9:303:18 | call to source : | call to source : |
|
||||
| string_flow.rb:305:28:305:28 | x | string_flow.rb:303:9:303:18 | call to source : | string_flow.rb:305:28:305:28 | x | $@ | string_flow.rb:303:9:303:18 | call to source : | call to source : |
|
||||
@@ -0,0 +1,11 @@
|
||||
/**
|
||||
* @kind path-problem
|
||||
*/
|
||||
|
||||
import ruby
|
||||
import TestUtilities.InlineFlowTest
|
||||
import PathGraph
|
||||
|
||||
from DataFlow::PathNode source, DataFlow::PathNode sink, DefaultValueFlowConf conf
|
||||
where conf.hasFlowPath(source, sink)
|
||||
select sink, source, sink, "$@", source, source.toString()
|
||||
308
ruby/ql/test/library-tests/dataflow/string-flow/string_flow.rb
Normal file
308
ruby/ql/test/library-tests/dataflow/string-flow/string_flow.rb
Normal file
@@ -0,0 +1,308 @@
|
||||
def m_new
|
||||
a = source "a"
|
||||
sink String.new(a) # $ hasValueFlow=a
|
||||
end
|
||||
|
||||
def m_try_convert
|
||||
a = source "a"
|
||||
sink String.try_convert(a) # $ hasValueFlow=a
|
||||
end
|
||||
|
||||
def m_format
|
||||
a = source "a"
|
||||
sink "%s" % a # $ hasValueFlow=a
|
||||
sink "%s %s" % ["foo", a] # $ hasValueFlow=a
|
||||
sink a % "foo" # $ hasValueFlow=a
|
||||
end
|
||||
|
||||
def m_plus
|
||||
a = source "a"
|
||||
b = a + "b"
|
||||
sink b # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_mult
|
||||
a = source "a"
|
||||
b = a * 5
|
||||
sink b # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_push
|
||||
a = source "a"
|
||||
b = a << "b"
|
||||
sink b # $ hasTaintFlow=a
|
||||
c = "c" << a
|
||||
sink c # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_b
|
||||
a = source "a"
|
||||
sink a.b # $ hasValueFlow=a
|
||||
end
|
||||
|
||||
def m_byteslice
|
||||
a = source "a"
|
||||
sink a.byteslice(1) # $ hasValueFlow=a
|
||||
sink a.byteslice(1, 2) # $ hasValueFlow=a
|
||||
sink a.byteslice(1..2) # $ hasValueFlow=a
|
||||
end
|
||||
|
||||
def m_capitalize
|
||||
a = source "a"
|
||||
sink a.capitalize # $ hasTaintFlow=a
|
||||
sink a.capitalize! # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_center
|
||||
a = source "a"
|
||||
sink a.center(10) # $ hasTaintFlow=a
|
||||
sink "foo".center(10, a) # $ hasTaintFlow=a
|
||||
sink a.ljust(10) # $ hasTaintFlow=a
|
||||
sink "foo".ljust(10, a) # $ hasTaintFlow=a
|
||||
sink a.rjust(10) # $ hasTaintFlow=a
|
||||
sink "foo".rjust(10, a) # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_chomp
|
||||
a = source "a"
|
||||
sink a.chomp # $ hasTaintFlow=a
|
||||
sink a.chomp! # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_chomp
|
||||
a = source "a"
|
||||
sink a.chop # $ hasTaintFlow=a
|
||||
sink a.chop! # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
# TODO: this currently doesn't work because the flow summary for Array#clear
|
||||
# only clears array content.
|
||||
def m_clear
|
||||
a = source "a"
|
||||
a.clear
|
||||
sink a
|
||||
end
|
||||
|
||||
def m_concat
|
||||
a = source "a"
|
||||
b = source "b"
|
||||
c = "c"
|
||||
sink c.concat(a, b) # $ hasValueFlow=a hasValueFlow=b
|
||||
sink c # $ hasValueFlow=a hasValueFlow=b
|
||||
end
|
||||
|
||||
def m_prepend
|
||||
a = source "a"
|
||||
b = source "b"
|
||||
c = "c"
|
||||
sink c.prepend(a, b) # $ hasValueFlow=a hasValueFlow=b
|
||||
sink c # $ hasValueFlow=a hasValueFlow=b
|
||||
end
|
||||
|
||||
def m_delete
|
||||
a = source "a"
|
||||
sink a.delete("b") # $ hasTaintFlow=a
|
||||
sink a.delete_prefix("b") # $ hasTaintFlow=a
|
||||
sink a.delete_suffix("b") # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_downcase
|
||||
a = source "a"
|
||||
sink a.downcase # $ hasTaintFlow=a
|
||||
sink a.downcase! # $ hasTaintFlow=a
|
||||
sink a.swapcase # $ hasTaintFlow=a
|
||||
sink a.swapcase! # $ hasTaintFlow=a
|
||||
sink a.upcase # $ hasTaintFlow=a
|
||||
sink a.upcase! # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_dump
|
||||
a = source "a"
|
||||
b = a.dump
|
||||
sink b # $ hasTaintFlow=a
|
||||
sink b.undump # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_each_line
|
||||
a = source "a"
|
||||
b = a.each_line { |line| sink line } # $ hasTaintFlow=a
|
||||
sink b # $ hasTaintFlow=a
|
||||
c = a.each_line
|
||||
sink c.to_a[0] # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_lines
|
||||
a = source "a"
|
||||
b = a.lines { |line| sink line } # $ hasTaintFlow=a
|
||||
sink b # $ hasTaintFlow=a
|
||||
c = a.lines
|
||||
sink c[0] # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_encode
|
||||
a = source "a"
|
||||
sink a.encode("ASCII") # $ hasTaintFlow=a
|
||||
sink a.encode!("ASCII") # $ hasTaintFlow=a
|
||||
sink a.unicode_normalize # $ hasTaintFlow=a
|
||||
sink a.unicode_normalize! # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_force_encoding
|
||||
a = source "a"
|
||||
sink a.force_encoding("ASCII") # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_freeze
|
||||
a = source "a"
|
||||
sink a.freeze # $ hasValueFlow=a
|
||||
end
|
||||
|
||||
def m_gsub
|
||||
a = source "a"
|
||||
c = source "c"
|
||||
sink a.gsub("b", c) # $ hasTaintFlow=a hasTaintFlow=c
|
||||
sink a.gsub!("b", c) # $ hasTaintFlow=a hasTaintFlow=c
|
||||
sink a.gsub("b") { |match| source "b" } # $ hasTaintFlow=a hasValueFlow=b
|
||||
sink a.gsub!("b") { |match| source "b" } # $ hasTaintFlow=a hasValueFlow=b
|
||||
end
|
||||
|
||||
def m_sub
|
||||
a = source "a"
|
||||
c = source "c"
|
||||
sink a.sub("b", c) # $ hasTaintFlow=a hasTaintFlow=c
|
||||
sink a.sub!("b", c) # $ hasTaintFlow=a hasTaintFlow=c
|
||||
sink a.sub("b") { |match| source "b" } # $ hasTaintFlow=a hasValueFlow=b
|
||||
sink a.sub!("b") { |match| source "b" } # $ hasTaintFlow=a hasValueFlow=b
|
||||
end
|
||||
|
||||
def m_insert
|
||||
a = source "a"
|
||||
sink a.insert(1, "c") # $ hasTaintFlow=a
|
||||
sink "c".insert(1, a) # $ hasValueFlow=a
|
||||
end
|
||||
|
||||
def m_inspect
|
||||
a = source "a"
|
||||
sink a.inspect # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_strip
|
||||
a = source "a"
|
||||
sink a.strip # $ hasValueFlow=a
|
||||
sink a.strip! # $ hasValueFlow=a
|
||||
sink a.lstrip # $ hasValueFlow=a
|
||||
sink a.lstrip! # $ hasValueFlow=a
|
||||
sink a.rstrip # $ hasValueFlow=a
|
||||
sink a.rstrip! # $ hasValueFlow=a
|
||||
end
|
||||
|
||||
def m_next
|
||||
a = source "a"
|
||||
sink a.next # $ hasTaintFlow=a
|
||||
sink a.next! # $ hasTaintFlow=a
|
||||
sink a.succ # $ hasTaintFlow=a
|
||||
sink a.succ! # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_partition
|
||||
a = source "a"
|
||||
b = a.partition("b")
|
||||
sink b[0] # $ hasTaintFlow=a
|
||||
sink b[1] # $ hasTaintFlow=a
|
||||
sink b[2] # $ hasTaintFlow=a
|
||||
sink b[3]
|
||||
end
|
||||
|
||||
def m_replace
|
||||
a = source "a"
|
||||
b = source "b"
|
||||
sink a.replace(b) # $ hasValueFlow=b
|
||||
# TODO: currently we get value flow for a, because we don't clear content
|
||||
sink a # $ hasValueFlow=b
|
||||
end
|
||||
|
||||
def m_reverse
|
||||
a = source "a"
|
||||
sink a.reverse # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_scan(i)
|
||||
a = source "a"
|
||||
b = a.scan(/b/) { |x, y| sink x } # $ hasTaintFlow=a
|
||||
b = a.scan(/b/) { |x, y| sink y } # $ hasTaintFlow=a
|
||||
sink b # $ hasValueFlow=a
|
||||
b = a.scan(/b/)
|
||||
sink b[0] # $ hasTaintFlow=a
|
||||
sink b[i] # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_scrub
|
||||
a = source "a"
|
||||
sink a.scrub("b") # $ hasTaintFlow=a
|
||||
sink "b".scrub(a) # $ hasValueFlow=a
|
||||
a.scrub { |x| sink x } # $ hasValueFlow=a
|
||||
sink("b".scrub { |x| a }) # $ hasValueFlow=a
|
||||
|
||||
sink a.scrub!("b") # $ hasTaintFlow=a
|
||||
sink "b".scrub!(a) # $ hasValueFlow=a
|
||||
|
||||
a = source "a"
|
||||
a.scrub! { |x| sink x } # $ hasValueFlow=a
|
||||
|
||||
sink("b".scrub! { |x| a }) # $ hasValueFlow=a
|
||||
end
|
||||
|
||||
def m_shellsplit(i)
|
||||
a = source "a"
|
||||
b = a.shellsplit
|
||||
sink b[i] # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_slice(i)
|
||||
a = source "a"
|
||||
b = a.slice(1)
|
||||
sink b[i] # $ hasTaintFlow=a
|
||||
|
||||
b = a.slice!(1)
|
||||
sink b[i] # $ hasTaintFlow=a
|
||||
|
||||
b = a.split("b")
|
||||
sink b[i] # $ hasTaintFlow=a
|
||||
|
||||
b = a[1,2]
|
||||
sink b[i] # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_squeeze
|
||||
a = source "a"
|
||||
sink a.squeeze # $ hasTaintFlow=a
|
||||
sink a.squeeze("b") # $ hasTaintFlow=a
|
||||
sink a.squeeze! # $ hasTaintFlow=a
|
||||
sink a.squeeze!("b") # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_to_str
|
||||
a = source "a"
|
||||
sink a.to_str # $ hasValueFlow=a
|
||||
sink a.to_s # $ hasValueFlow=a
|
||||
end
|
||||
|
||||
def m_tr
|
||||
a = source "a"
|
||||
sink a.tr("c", "d") # $ hasTaintFlow=a
|
||||
sink "b".tr("c", a) # $ hasTaintFlow=a
|
||||
sink a.tr!("c", "d") # $ hasTaintFlow=a
|
||||
sink "b".tr!("c", a) # $ hasTaintFlow=a
|
||||
sink a.tr_s("c", "d") # $ hasTaintFlow=a
|
||||
sink "b".tr_s("c", a) # $ hasTaintFlow=a
|
||||
sink a.tr_s!("c", "d") # $ hasTaintFlow=a
|
||||
sink "b".tr_s!("c", a) # $ hasTaintFlow=a
|
||||
end
|
||||
|
||||
def m_upto(i)
|
||||
a = source "a"
|
||||
a.upto("b") { |x| sink x } # $ hasValueFlow=a
|
||||
"b".upto(a) { |x| sink x } # $ hasValueFlow=a
|
||||
c = a.upto("b")
|
||||
sink c[i] # $ hasTaintFlow=a
|
||||
end
|
||||
Reference in New Issue
Block a user