From 6bbd72823d6c986a2384b4c88cf3ead316697fcf Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 5 Dec 2024 09:30:03 +0100 Subject: [PATCH 1/2] Data flow: Remove `allowParameterReturnInSelf` restriction --- .../cpp/dataflow/internal/DataFlowPrivate.qll | 9 -------- .../ir/dataflow/internal/DataFlowPrivate.qll | 17 -------------- .../dataflow/internal/DataFlowPrivate.qll | 17 -------------- .../go/dataflow/internal/DataFlowPrivate.qll | 14 ----------- .../dataflow/internal/DataFlowPrivate.qll | 16 ------------- .../dataflow/new/internal/DataFlowPrivate.qll | 19 --------------- .../dataflow/internal/DataFlowPrivate.qll | 17 -------------- .../rust/dataflow/internal/DataFlowImpl.qll | 14 ----------- shared/dataflow/codeql/dataflow/DataFlow.qll | 9 -------- .../codeql/dataflow/VariableCapture.qll | 15 ------------ .../codeql/dataflow/internal/DataFlowImpl.qll | 23 ++----------------- .../dataflow/internal/DataFlowImplCommon.qll | 3 --- .../dataflow/internal/FlowSummaryImpl.qll | 12 ---------- .../dataflow/internal/DataFlowPrivate.qll | 19 --------------- 14 files changed, 2 insertions(+), 202 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll index b14979470b04..b29187d754be 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll @@ -296,15 +296,6 @@ predicate knownSinkModel(Node sink, string model) { none() } class DataFlowSecondLevelScope = Unit; -/** - * Holds if flow is allowed to pass from parameter `p` and back to itself as a - * side-effect, resulting in a summary from `p` to itself. - * - * One example would be to allow flow like `p.foo = p.bar;`, which is disallowed - * by default as a heuristic. - */ -predicate allowParameterReturnInSelf(ParameterNode p) { none() } - /** An approximated `Content`. */ class ContentApprox = Unit; diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll index 8f0ae53171e3..fb0a1872ed6b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll @@ -1342,23 +1342,6 @@ predicate knownSourceModel(Node source, string model) { External::sourceNode(sou predicate knownSinkModel(Node sink, string model) { External::sinkNode(sink, _, model) } -/** - * Holds if flow is allowed to pass from parameter `p` and back to itself as a - * side-effect, resulting in a summary from `p` to itself. - * - * One example would be to allow flow like `p.foo = p.bar;`, which is disallowed - * by default as a heuristic. - */ -predicate allowParameterReturnInSelf(ParameterNode p) { - p instanceof IndirectParameterNode - or - // models-as-data summarized flow - exists(DataFlowCallable c, ParameterPosition pos | - p.isParameterOf(c, pos) and - FlowSummaryImpl::Private::summaryAllowParameterReturnInSelf(c.asSummarizedCallable(), pos) - ) -} - private predicate fieldHasApproxName(Field f, string s) { s = f.getName().charAt(0) and // Reads and writes of union fields are tracked using `UnionContent`. diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index 5b1342bacd55..4765215c5826 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -3084,23 +3084,6 @@ predicate knownSinkModel(Node sink, string model) { sinkNode(sink, _, model) } class DataFlowSecondLevelScope = Unit; -/** - * Holds if flow is allowed to pass from parameter `p` and back to itself as a - * side-effect, resulting in a summary from `p` to itself. - * - * One example would be to allow flow like `p.foo = p.bar;`, which is disallowed - * by default as a heuristic. - */ -predicate allowParameterReturnInSelf(ParameterNode p) { - exists(DataFlowCallable c, ParameterPosition pos | - parameterNode(p, c, pos) and - FlowSummaryImpl::Private::summaryAllowParameterReturnInSelf(c.asSummarizedCallable(), pos) - ) - or - VariableCapture::Flow::heuristicAllowInstanceParameterReturnInSelf(p.(DelegateSelfReferenceNode) - .getCallable()) -} - /** An approximated `Content`. */ class ContentApprox extends TContentApprox { /** Gets a textual representation of this approximated `Content`. */ diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll index 2fcbf2d350f2..b7a4bd475500 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll @@ -438,20 +438,6 @@ predicate knownSinkModel(Node sink, string model) { sinkNode(sink, _, model) } class DataFlowSecondLevelScope = Unit; -/** - * Holds if flow is allowed to pass from parameter `p` and back to itself as a - * side-effect, resulting in a summary from `p` to itself. - * - * One example would be to allow flow like `p.foo = p.bar;`, which is disallowed - * by default as a heuristic. - */ -predicate allowParameterReturnInSelf(ParameterNode p) { - exists(DataFlowCallable c, int pos | - p.isParameterOf(c, pos) and - FlowSummaryImpl::Private::summaryAllowParameterReturnInSelf(c.asSummarizedCallable(), pos) - ) -} - /** An approximated `Content`. */ class ContentApprox = Unit; diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index 589d75c3635d..2ae8dc552271 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -695,22 +695,6 @@ private Expr getRelatedExpr(Node n) { /** Gets the second-level scope containing the node `n`, if any. */ DataFlowSecondLevelScope getSecondLevelScope(Node n) { result.getANode() = n } -/** - * Holds if flow is allowed to pass from parameter `p` and back to itself as a - * side-effect, resulting in a summary from `p` to itself. - * - * One example would be to allow flow like `p.foo = p.bar;`, which is disallowed - * by default as a heuristic. - */ -predicate allowParameterReturnInSelf(ParameterNode p) { - exists(DataFlowCallable c, ParameterPosition pos | - parameterNode(p, c, pos) and - FlowSummaryImpl::Private::summaryAllowParameterReturnInSelf(c.asSummarizedCallable(), pos) - ) - or - CaptureFlow::heuristicAllowInstanceParameterReturnInSelf(p.(InstanceParameterNode).getCallable()) -} - /** An approximated `Content`. */ class ContentApprox extends TContentApprox { /** Gets a textual representation of this approximated `Content`. */ diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index b29be706c4fc..7920851e41a0 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -1096,25 +1096,6 @@ predicate knownSinkModel(Node sink, string model) { class DataFlowSecondLevelScope = Unit; -/** - * Holds if flow is allowed to pass from parameter `p` and back to itself as a - * side-effect, resulting in a summary from `p` to itself. - * - * One example would be to allow flow like `p.foo = p.bar;`, which is disallowed - * by default as a heuristic. - */ -predicate allowParameterReturnInSelf(ParameterNode p) { - exists(DataFlowCallable c, ParameterPosition pos | - p.(ParameterNodeImpl).isParameterOf(c, pos) and - FlowSummaryImpl::Private::summaryAllowParameterReturnInSelf(c.asLibraryCallable(), pos) - ) - or - exists(Function f | - VariableCapture::Flow::heuristicAllowInstanceParameterReturnInSelf(f) and - p = TSynthCapturedVariablesParameterNode(f) - ) -} - /** An approximated `Content`. */ class ContentApprox = Unit; diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index 260fb3cab6f9..7bfecbb1bf1d 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -2107,23 +2107,6 @@ predicate knownSinkModel(Node sink, string model) { class DataFlowSecondLevelScope = Unit; -/** - * Holds if flow is allowed to pass from parameter `p` and back to itself as a - * side-effect, resulting in a summary from `p` to itself. - * - * One example would be to allow flow like `p.foo = p.bar;`, which is disallowed - * by default as a heuristic. - */ -predicate allowParameterReturnInSelf(ParameterNodeImpl p) { - exists(DataFlowCallable c, ParameterPosition pos | - p.isParameterOf(c, pos) and - FlowSummaryImpl::Private::summaryAllowParameterReturnInSelf(c.asLibraryCallable(), pos) - ) - or - VariableCapture::Flow::heuristicAllowInstanceParameterReturnInSelf(p.(LambdaSelfReferenceNode) - .getCallable()) -} - /** An approximated `Content`. */ class ContentApprox extends TContentApprox { string toString() { diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index 734dfb4f2696..1d07f3af4bd3 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -990,20 +990,6 @@ module RustDataFlow implements InputSig { */ predicate isUnreachableInCall(NodeRegion nr, DataFlowCall call) { none() } - /** - * Holds if flow is allowed to pass from parameter `p` and back to itself as a - * side-effect, resulting in a summary from `p` to itself. - * - * One example would be to allow flow like `p.foo = p.bar;`, which is disallowed - * by default as a heuristic. - */ - predicate allowParameterReturnInSelf(ParameterNode p) { - exists(DataFlowCallable c, ParameterPosition pos | - p.isParameterOf(c, pos) and - FlowSummaryImpl::Private::summaryAllowParameterReturnInSelf(c.asLibraryCallable(), pos) - ) - } - /** * Holds if the value of `node2` is given by `node1`. * diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index 7a2f78089778..2c1a078a6998 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -267,15 +267,6 @@ signature module InputSig { default int accessPathLimit() { result = 5 } - /** - * Holds if flow is allowed to pass from parameter `p` and back to itself as a - * side-effect, resulting in a summary from `p` to itself. - * - * One example would be to allow flow like `p.foo = p.bar;`, which is disallowed - * by default as a heuristic. - */ - predicate allowParameterReturnInSelf(ParameterNode p); - /** * Holds if the value of `node2` is given by `node1`. * diff --git a/shared/dataflow/codeql/dataflow/VariableCapture.qll b/shared/dataflow/codeql/dataflow/VariableCapture.qll index 8aa1804792be..1af56c988439 100644 --- a/shared/dataflow/codeql/dataflow/VariableCapture.qll +++ b/shared/dataflow/codeql/dataflow/VariableCapture.qll @@ -245,9 +245,6 @@ signature module OutputSig I> { /** Holds if there is a read step from `node1` to `node2`. */ predicate readStep(ClosureNode node1, I::CapturedVariable v, ClosureNode node2); - /** Holds if this-to-this summaries are expected for `c`. */ - predicate heuristicAllowInstanceParameterReturnInSelf(I::Callable c); - /** Holds if captured variable `v` is cleared at `node`. */ predicate clearsContent(ClosureNode node, I::CapturedVariable v); } @@ -579,18 +576,6 @@ module Flow Input> implements OutputSig exists(Callable c | ce.hasBody(c) and captureAccess(v, c)) } - predicate heuristicAllowInstanceParameterReturnInSelf(Callable c) { - // If multiple variables are captured, then we should allow flow from one to - // another, which entails a this-to-this summary. - 2 <= strictcount(CapturedVariable v | captureAccess(v, c)) - or - // Constructors that capture a variable may assign it to a field, which also - // entails a this-to-this summary. If there are multiple constructors, then - // they might call each other, so if one constructor captures a variable we - // allow this-to-this summaries for all of them. - exists(ClosureExpr ce | ce.hasBody(c) and c.isConstructor() and hasConstructorCapture(ce, _)) - } - /** Holds if a constructor, if any, for the closure defined by `ce` captures `v`. */ private predicate hasConstructorCapture(ClosureExpr ce, CapturedVariable v) { exists(Callable c | ce.hasBody(c) and c.isConstructor() and captureAccess(v, c)) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 313934378c63..49e359978e30 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -498,21 +498,6 @@ module MakeImpl Lang> { ) } - /** - * Holds if flow from `p` to a return node of kind `kind` is allowed. - * - * We don't expect a parameter to return stored in itself, unless - * explicitly allowed - */ - bindingset[p, kind] - private predicate parameterFlowThroughAllowed(ParamNodeEx p, ReturnKindExt kind) { - exists(ParameterPosition pos | p.isParameterOf(_, pos) | - not kind.(ParamUpdateReturnKind).getPosition() = pos - or - allowParameterReturnInSelfEx(p) - ) - } - private module Stage1 implements StageSig { class Ap = Unit; @@ -936,8 +921,7 @@ module MakeImpl Lang> { throughFlowNodeCand(p) and returnFlowCallableNodeCand(c, kind) and p.getEnclosingCallable() = c and - exists(ap) and - parameterFlowThroughAllowed(p, kind) + exists(ap) ) } @@ -2103,7 +2087,6 @@ module MakeImpl Lang> { TSummaryCtxSome(pragma[only_bind_into](p), _, _, pragma[only_bind_into](argAp), _) and not outBarrier(ret, state) and kind = ret.getKind() and - parameterFlowThroughAllowed(p, kind) and argApa = getApprox(argAp) and PrevStage::returnMayFlowThrough(ret, pragma[only_bind_into](argApa), apa, kind) ) @@ -2439,7 +2422,6 @@ module MakeImpl Lang> { ) { revFlow(pragma[only_bind_into](p), state, TReturnCtxMaybeFlowThrough(pos), apSome(returnAp), pragma[only_bind_into](ap)) and - parameterFlowThroughAllowed(p, pos.getKind()) and PrevStage::parameterMayFlowThrough(p, getApprox(ap)) } @@ -2525,8 +2507,7 @@ module MakeImpl Lang> { private predicate parameterFlowsThroughRev( ParamNodeEx p, Ap ap, ReturnPosition pos, Ap returnAp ) { - revFlow(p, _, TReturnCtxMaybeFlowThrough(pos), apSome(returnAp), ap) and - parameterFlowThroughAllowed(p, pos.getKind()) + revFlow(p, _, TReturnCtxMaybeFlowThrough(pos), apSome(returnAp), ap) } pragma[nomagic] diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll index 4016199ccec6..f8c4664c1876 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll @@ -1680,9 +1680,6 @@ module MakeImplCommon Lang> { reverseStepThroughInputOutputAlias(node1, node2, model) } - cached - predicate allowParameterReturnInSelfEx(ParamNodeEx p) { allowParameterReturnInSelf(p.asNode()) } - cached predicate paramMustFlow(ParamNode p, ArgNode arg) { localMustFlowStep+(p, arg) } diff --git a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll index e1770ca482a6..aebe564666db 100644 --- a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll @@ -1051,18 +1051,6 @@ module Make< ) } - /** - * Holds if flow is allowed to pass from the parameter at position `pos` of `c`, - * to a return node, and back out to the parameter. - */ - predicate summaryAllowParameterReturnInSelf(SummarizedCallable c, ParameterPosition ppos) { - exists(SummaryComponentStack inputContents, SummaryComponentStack outputContents | - summary(c, inputContents, outputContents, _, _) and - inputContents.bottom() = pragma[only_bind_into](TArgumentSummaryComponent(ppos)) and - outputContents.bottom() = pragma[only_bind_into](TArgumentSummaryComponent(ppos)) - ) - } - signature module TypesInputSig { /** Gets the type of content `c`. */ DataFlowType getContentType(ContentSet c); diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll index c84298771fb2..198d51402002 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll @@ -1420,25 +1420,6 @@ predicate knownSinkModel(Node sink, string model) { sinkNode(sink, _, model) } class DataFlowSecondLevelScope = Unit; -/** - * Holds if flow is allowed to pass from parameter `p` and back to itself as a - * side-effect, resulting in a summary from `p` to itself. - * - * One example would be to allow flow like `p.foo = p.bar;`, which is disallowed - * by default as a heuristic. - */ -predicate allowParameterReturnInSelf(ParameterNode p) { - exists(Callable c | - c = p.(ParameterNodeImpl).getEnclosingCallable().asSourceCallable() and - CaptureFlow::heuristicAllowInstanceParameterReturnInSelf(c) - ) - or - exists(DataFlowCallable c, ParameterPosition pos | - p.(ParameterNodeImpl).isParameterOf(c, pos) and - FlowSummaryImpl::Private::summaryAllowParameterReturnInSelf(c.asSummarizedCallable(), pos) - ) -} - /** An approximated `Content`. */ class ContentApprox = Unit; From 4adea3e2bce407fecc00eef310224a6bbb21ac83 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 5 Dec 2024 10:01:27 +0100 Subject: [PATCH 2/2] Update expected test output --- .../dataflow/fields/path-flow.expected | 3 + .../DecompressionBombs.expected | 181 ++++++++++++++++++ .../frameworks/GoMicro/LogInjection.expected | 9 + .../frameworks/Twirp/RequestForgery.expected | 56 ++++++ .../UnhandledCloseWritableHandle.expected | 12 ++ .../CWE-312/CleartextLogging.expected | 12 ++ .../frameworks/stream/test.expected | 9 + 7 files changed, 282 insertions(+) diff --git a/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected b/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected index 98e930290732..653a3198b3f1 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected @@ -741,6 +741,7 @@ edges | struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | provenance | | | struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | provenance | | | struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | provenance | | +| struct_init.c:15:8:15:9 | ab [post update] [a] | struct_init.c:14:24:14:25 | ab [Return] [a] | provenance | | | struct_init.c:15:8:15:9 | ab [post update] [a] | struct_init.c:14:24:14:25 | ab [a] | provenance | | | struct_init.c:15:12:15:12 | a | realistic.cpp:41:17:41:17 | o | provenance | | | struct_init.c:15:12:15:12 | a | struct_init.c:15:12:15:12 | ref arg a | provenance | | @@ -1549,6 +1550,7 @@ nodes | simple.cpp:118:11:118:20 | call to user_input | semmle.label | call to user_input | | simple.cpp:120:8:120:8 | a [i] | semmle.label | a [i] | | simple.cpp:120:10:120:10 | i | semmle.label | i | +| struct_init.c:14:24:14:25 | ab [Return] [a] | semmle.label | ab [Return] [a] | | struct_init.c:14:24:14:25 | ab [a] | semmle.label | ab [a] | | struct_init.c:14:24:14:25 | ab [a] | semmle.label | ab [a] | | struct_init.c:14:24:14:25 | ab [a] | semmle.label | ab [a] | @@ -1663,6 +1665,7 @@ subpaths | simple.cpp:84:14:84:20 | this [f2, f1] | simple.cpp:78:9:78:15 | this [f2, f1] | simple.cpp:79:19:79:20 | f1 | simple.cpp:84:14:84:20 | call to getf2f1 | | struct_init.c:15:12:15:12 | a | realistic.cpp:41:17:41:17 | o | realistic.cpp:41:17:41:17 | o | struct_init.c:15:12:15:12 | ref arg a | | struct_init.c:22:11:22:11 | a | realistic.cpp:41:17:41:17 | o | realistic.cpp:41:17:41:17 | o | struct_init.c:22:11:22:11 | ref arg a | +| struct_init.c:24:10:24:12 | & ... [a] | struct_init.c:14:24:14:25 | ab [a] | struct_init.c:14:24:14:25 | ab [Return] [a] | struct_init.c:24:10:24:12 | ref arg & ... [a] | | struct_init.c:24:10:24:12 | & ... [a] | struct_init.c:14:24:14:25 | ab [a] | struct_init.c:14:24:14:25 | ab [a] | struct_init.c:24:10:24:12 | ref arg & ... [a] | | struct_init.c:31:23:31:23 | a | realistic.cpp:41:17:41:17 | o | realistic.cpp:41:17:41:17 | o | struct_init.c:31:23:31:23 | ref arg a | #select diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index 34703cdeef4e..327112a417ff 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -48,24 +48,43 @@ | test.go:629:2:629:8 | tarRead | test.go:93:5:93:16 | selection of Body | test.go:629:2:629:8 | tarRead | This decompression is $@. | test.go:93:5:93:16 | selection of Body | decompressing compressed data without managing output size | edges | test.go:59:16:59:44 | call to FormValue | test.go:128:20:128:27 | definition of filename | provenance | Src:MaD:2 | +| test.go:60:15:60:26 | selection of Body | test.go:60:15:60:26 | selection of Body | provenance | Src:MaD:1 | | test.go:60:15:60:26 | selection of Body | test.go:158:19:158:22 | definition of file | provenance | Src:MaD:1 | +| test.go:61:24:61:35 | selection of Body | test.go:61:24:61:35 | selection of Body | provenance | Src:MaD:1 | | test.go:61:24:61:35 | selection of Body | test.go:169:28:169:31 | definition of file | provenance | Src:MaD:1 | +| test.go:62:13:62:24 | selection of Body | test.go:62:13:62:24 | selection of Body | provenance | Src:MaD:1 | | test.go:62:13:62:24 | selection of Body | test.go:181:17:181:20 | definition of file | provenance | Src:MaD:1 | +| test.go:64:8:64:19 | selection of Body | test.go:64:8:64:19 | selection of Body | provenance | Src:MaD:1 | | test.go:64:8:64:19 | selection of Body | test.go:208:12:208:15 | definition of file | provenance | Src:MaD:1 | +| test.go:66:8:66:19 | selection of Body | test.go:66:8:66:19 | selection of Body | provenance | Src:MaD:1 | | test.go:66:8:66:19 | selection of Body | test.go:233:12:233:15 | definition of file | provenance | Src:MaD:1 | +| test.go:68:17:68:28 | selection of Body | test.go:68:17:68:28 | selection of Body | provenance | Src:MaD:1 | | test.go:68:17:68:28 | selection of Body | test.go:258:21:258:24 | definition of file | provenance | Src:MaD:1 | +| test.go:70:13:70:24 | selection of Body | test.go:70:13:70:24 | selection of Body | provenance | Src:MaD:1 | | test.go:70:13:70:24 | selection of Body | test.go:283:17:283:20 | definition of file | provenance | Src:MaD:1 | +| test.go:72:16:72:27 | selection of Body | test.go:72:16:72:27 | selection of Body | provenance | Src:MaD:1 | | test.go:72:16:72:27 | selection of Body | test.go:308:20:308:23 | definition of file | provenance | Src:MaD:1 | +| test.go:74:7:74:18 | selection of Body | test.go:74:7:74:18 | selection of Body | provenance | Src:MaD:1 | | test.go:74:7:74:18 | selection of Body | test.go:333:11:333:14 | definition of file | provenance | Src:MaD:1 | +| test.go:76:9:76:20 | selection of Body | test.go:76:9:76:20 | selection of Body | provenance | Src:MaD:1 | | test.go:76:9:76:20 | selection of Body | test.go:358:13:358:16 | definition of file | provenance | Src:MaD:1 | +| test.go:78:18:78:29 | selection of Body | test.go:78:18:78:29 | selection of Body | provenance | Src:MaD:1 | | test.go:78:18:78:29 | selection of Body | test.go:384:22:384:25 | definition of file | provenance | Src:MaD:1 | +| test.go:80:5:80:16 | selection of Body | test.go:80:5:80:16 | selection of Body | provenance | Src:MaD:1 | | test.go:80:5:80:16 | selection of Body | test.go:412:9:412:12 | definition of file | provenance | Src:MaD:1 | +| test.go:82:7:82:18 | selection of Body | test.go:82:7:82:18 | selection of Body | provenance | Src:MaD:1 | | test.go:82:7:82:18 | selection of Body | test.go:447:11:447:14 | definition of file | provenance | Src:MaD:1 | +| test.go:84:15:84:26 | selection of Body | test.go:84:15:84:26 | selection of Body | provenance | Src:MaD:1 | | test.go:84:15:84:26 | selection of Body | test.go:440:19:440:21 | definition of src | provenance | Src:MaD:1 | +| test.go:85:16:85:27 | selection of Body | test.go:85:16:85:27 | selection of Body | provenance | Src:MaD:1 | | test.go:85:16:85:27 | selection of Body | test.go:472:20:472:23 | definition of file | provenance | Src:MaD:1 | +| test.go:87:16:87:27 | selection of Body | test.go:87:16:87:27 | selection of Body | provenance | Src:MaD:1 | | test.go:87:16:87:27 | selection of Body | test.go:499:20:499:23 | definition of file | provenance | Src:MaD:1 | +| test.go:89:17:89:28 | selection of Body | test.go:89:17:89:28 | selection of Body | provenance | Src:MaD:1 | | test.go:89:17:89:28 | selection of Body | test.go:526:21:526:24 | definition of file | provenance | Src:MaD:1 | +| test.go:91:15:91:26 | selection of Body | test.go:91:15:91:26 | selection of Body | provenance | Src:MaD:1 | | test.go:91:15:91:26 | selection of Body | test.go:555:19:555:22 | definition of file | provenance | Src:MaD:1 | +| test.go:93:5:93:16 | selection of Body | test.go:93:5:93:16 | selection of Body | provenance | Src:MaD:1 | | test.go:93:5:93:16 | selection of Body | test.go:580:9:580:12 | definition of file | provenance | Src:MaD:1 | | test.go:128:20:128:27 | definition of filename | test.go:130:33:130:40 | filename | provenance | | | test.go:128:20:128:27 | definition of filename | test.go:143:51:143:58 | filename | provenance | | @@ -77,6 +96,7 @@ edges | test.go:143:51:143:58 | filename | test.go:143:2:143:59 | ... := ...[0] | provenance | Config | | test.go:145:12:145:12 | f | test.go:145:12:145:19 | call to Open | provenance | Config | | test.go:145:12:145:19 | call to Open | test.go:147:37:147:38 | rc | provenance | | +| test.go:158:19:158:22 | definition of file | test.go:158:19:158:22 | definition of file [Return] | provenance | | | test.go:158:19:158:22 | definition of file | test.go:159:25:159:28 | file | provenance | | | test.go:159:2:159:29 | ... := ...[0] | test.go:160:48:160:52 | file1 | provenance | | | test.go:159:25:159:28 | file | test.go:159:2:159:29 | ... := ...[0] | provenance | MaD:6 | @@ -85,6 +105,7 @@ edges | test.go:160:48:160:52 | file1 | test.go:160:32:160:53 | call to NewReader | provenance | MaD:5 | | test.go:163:3:163:36 | ... := ...[0] | test.go:164:36:164:51 | fileReaderCloser | provenance | | | test.go:163:26:163:29 | file | test.go:163:3:163:36 | ... := ...[0] | provenance | MaD:4 | +| test.go:169:28:169:31 | definition of file | test.go:169:28:169:31 | definition of file [Return] | provenance | | | test.go:169:28:169:31 | definition of file | test.go:170:25:170:28 | file | provenance | | | test.go:170:2:170:29 | ... := ...[0] | test.go:171:57:171:61 | file2 | provenance | | | test.go:170:25:170:28 | file | test.go:170:2:170:29 | ... := ...[0] | provenance | MaD:6 | @@ -93,133 +114,201 @@ edges | test.go:171:57:171:61 | file2 | test.go:171:41:171:62 | call to NewReader | provenance | MaD:5 | | test.go:175:26:175:29 | file | test.go:175:26:175:36 | call to Open | provenance | Config | | test.go:175:26:175:36 | call to Open | test.go:176:36:176:51 | fileReaderCloser | provenance | | +| test.go:181:17:181:20 | definition of file | test.go:181:17:181:20 | definition of file [Return] | provenance | | | test.go:181:17:181:20 | definition of file | test.go:184:41:184:44 | file | provenance | | | test.go:184:2:184:73 | ... := ...[0] | test.go:186:2:186:12 | bzip2Reader | provenance | | | test.go:184:2:184:73 | ... := ...[0] | test.go:187:26:187:36 | bzip2Reader | provenance | | | test.go:184:41:184:44 | file | test.go:184:2:184:73 | ... := ...[0] | provenance | Config | +| test.go:187:2:187:8 | definition of tarRead | test.go:189:18:189:24 | tarRead | provenance | | | test.go:187:12:187:37 | call to NewReader | test.go:189:18:189:24 | tarRead | provenance | | | test.go:187:26:187:36 | bzip2Reader | test.go:187:12:187:37 | call to NewReader | provenance | MaD:3 | +| test.go:189:18:189:24 | tarRead | test.go:187:2:187:8 | definition of tarRead | provenance | | | test.go:189:18:189:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:208:12:208:15 | definition of file | test.go:208:12:208:15 | definition of file [Return] | provenance | | | test.go:208:12:208:15 | definition of file | test.go:211:33:211:36 | file | provenance | | | test.go:211:17:211:37 | call to NewReader | test.go:213:2:213:12 | bzip2Reader | provenance | | | test.go:211:17:211:37 | call to NewReader | test.go:214:26:214:36 | bzip2Reader | provenance | | | test.go:211:33:211:36 | file | test.go:211:17:211:37 | call to NewReader | provenance | Config | +| test.go:214:2:214:8 | definition of tarRead | test.go:216:18:216:24 | tarRead | provenance | | | test.go:214:12:214:37 | call to NewReader | test.go:216:18:216:24 | tarRead | provenance | | | test.go:214:26:214:36 | bzip2Reader | test.go:214:12:214:37 | call to NewReader | provenance | MaD:3 | +| test.go:216:18:216:24 | tarRead | test.go:214:2:214:8 | definition of tarRead | provenance | | | test.go:216:18:216:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:233:12:233:15 | definition of file | test.go:233:12:233:15 | definition of file [Return] | provenance | | | test.go:233:12:233:15 | definition of file | test.go:236:33:236:36 | file | provenance | | | test.go:236:17:236:37 | call to NewReader | test.go:238:2:238:12 | flateReader | provenance | | | test.go:236:17:236:37 | call to NewReader | test.go:239:26:239:36 | flateReader | provenance | | | test.go:236:33:236:36 | file | test.go:236:17:236:37 | call to NewReader | provenance | Config | +| test.go:239:2:239:8 | definition of tarRead | test.go:241:18:241:24 | tarRead | provenance | | | test.go:239:12:239:37 | call to NewReader | test.go:241:18:241:24 | tarRead | provenance | | | test.go:239:26:239:36 | flateReader | test.go:239:12:239:37 | call to NewReader | provenance | MaD:3 | +| test.go:241:18:241:24 | tarRead | test.go:239:2:239:8 | definition of tarRead | provenance | | | test.go:241:18:241:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:258:21:258:24 | definition of file | test.go:258:21:258:24 | definition of file [Return] | provenance | | | test.go:258:21:258:24 | definition of file | test.go:261:42:261:45 | file | provenance | | | test.go:261:17:261:46 | call to NewReader | test.go:263:2:263:12 | flateReader | provenance | | | test.go:261:17:261:46 | call to NewReader | test.go:264:26:264:36 | flateReader | provenance | | | test.go:261:42:261:45 | file | test.go:261:17:261:46 | call to NewReader | provenance | Config | +| test.go:264:2:264:8 | definition of tarRead | test.go:266:18:266:24 | tarRead | provenance | | | test.go:264:12:264:37 | call to NewReader | test.go:266:18:266:24 | tarRead | provenance | | | test.go:264:26:264:36 | flateReader | test.go:264:12:264:37 | call to NewReader | provenance | MaD:3 | +| test.go:266:18:266:24 | tarRead | test.go:264:2:264:8 | definition of tarRead | provenance | | | test.go:266:18:266:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:283:17:283:20 | definition of file | test.go:283:17:283:20 | definition of file [Return] | provenance | | | test.go:283:17:283:20 | definition of file | test.go:286:41:286:44 | file | provenance | | | test.go:286:2:286:73 | ... := ...[0] | test.go:288:2:288:12 | flateReader | provenance | | | test.go:286:2:286:73 | ... := ...[0] | test.go:289:26:289:36 | flateReader | provenance | | | test.go:286:41:286:44 | file | test.go:286:2:286:73 | ... := ...[0] | provenance | Config | +| test.go:289:2:289:8 | definition of tarRead | test.go:291:18:291:24 | tarRead | provenance | | | test.go:289:12:289:37 | call to NewReader | test.go:291:18:291:24 | tarRead | provenance | | | test.go:289:26:289:36 | flateReader | test.go:289:12:289:37 | call to NewReader | provenance | MaD:3 | +| test.go:291:18:291:24 | tarRead | test.go:289:2:289:8 | definition of tarRead | provenance | | | test.go:291:18:291:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:308:20:308:23 | definition of file | test.go:308:20:308:23 | definition of file [Return] | provenance | | | test.go:308:20:308:23 | definition of file | test.go:311:43:311:46 | file | provenance | | | test.go:311:2:311:47 | ... := ...[0] | test.go:313:2:313:11 | zlibReader | provenance | | | test.go:311:2:311:47 | ... := ...[0] | test.go:314:26:314:35 | zlibReader | provenance | | | test.go:311:43:311:46 | file | test.go:311:2:311:47 | ... := ...[0] | provenance | Config | +| test.go:314:2:314:8 | definition of tarRead | test.go:316:18:316:24 | tarRead | provenance | | | test.go:314:12:314:36 | call to NewReader | test.go:316:18:316:24 | tarRead | provenance | | | test.go:314:26:314:35 | zlibReader | test.go:314:12:314:36 | call to NewReader | provenance | MaD:3 | +| test.go:316:18:316:24 | tarRead | test.go:314:2:314:8 | definition of tarRead | provenance | | | test.go:316:18:316:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:333:11:333:14 | definition of file | test.go:333:11:333:14 | definition of file [Return] | provenance | | | test.go:333:11:333:14 | definition of file | test.go:336:34:336:37 | file | provenance | | | test.go:336:2:336:38 | ... := ...[0] | test.go:338:2:338:11 | zlibReader | provenance | | | test.go:336:2:336:38 | ... := ...[0] | test.go:339:26:339:35 | zlibReader | provenance | | | test.go:336:34:336:37 | file | test.go:336:2:336:38 | ... := ...[0] | provenance | Config | +| test.go:339:2:339:8 | definition of tarRead | test.go:341:18:341:24 | tarRead | provenance | | | test.go:339:12:339:36 | call to NewReader | test.go:341:18:341:24 | tarRead | provenance | | | test.go:339:26:339:35 | zlibReader | test.go:339:12:339:36 | call to NewReader | provenance | MaD:3 | +| test.go:341:18:341:24 | tarRead | test.go:339:2:339:8 | definition of tarRead | provenance | | | test.go:341:18:341:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:358:13:358:16 | definition of file | test.go:358:13:358:16 | definition of file [Return] | provenance | | | test.go:358:13:358:16 | definition of file | test.go:361:35:361:38 | file | provenance | | | test.go:361:18:361:39 | call to NewReader | test.go:363:2:363:13 | snappyReader | provenance | | | test.go:361:18:361:39 | call to NewReader | test.go:364:2:364:13 | snappyReader | provenance | | | test.go:361:18:361:39 | call to NewReader | test.go:365:26:365:37 | snappyReader | provenance | | | test.go:361:35:361:38 | file | test.go:361:18:361:39 | call to NewReader | provenance | Config | +| test.go:365:2:365:8 | definition of tarRead | test.go:367:18:367:24 | tarRead | provenance | | | test.go:365:12:365:38 | call to NewReader | test.go:367:18:367:24 | tarRead | provenance | | | test.go:365:26:365:37 | snappyReader | test.go:365:12:365:38 | call to NewReader | provenance | MaD:3 | +| test.go:367:18:367:24 | tarRead | test.go:365:2:365:8 | definition of tarRead | provenance | | | test.go:367:18:367:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:384:22:384:25 | definition of file | test.go:384:22:384:25 | definition of file [Return] | provenance | | | test.go:384:22:384:25 | definition of file | test.go:387:44:387:47 | file | provenance | | | test.go:387:18:387:48 | call to NewReader | test.go:389:2:389:13 | snappyReader | provenance | | | test.go:387:18:387:48 | call to NewReader | test.go:391:2:391:13 | snappyReader | provenance | | | test.go:387:18:387:48 | call to NewReader | test.go:392:2:392:13 | snappyReader | provenance | | | test.go:387:18:387:48 | call to NewReader | test.go:393:26:393:37 | snappyReader | provenance | | | test.go:387:44:387:47 | file | test.go:387:18:387:48 | call to NewReader | provenance | Config | +| test.go:393:2:393:8 | definition of tarRead | test.go:395:18:395:24 | tarRead | provenance | | | test.go:393:12:393:38 | call to NewReader | test.go:395:18:395:24 | tarRead | provenance | | | test.go:393:26:393:37 | snappyReader | test.go:393:12:393:38 | call to NewReader | provenance | MaD:3 | +| test.go:395:18:395:24 | tarRead | test.go:393:2:393:8 | definition of tarRead | provenance | | | test.go:395:18:395:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:412:9:412:12 | definition of file | test.go:412:9:412:12 | definition of file [Return] | provenance | | | test.go:412:9:412:12 | definition of file | test.go:415:27:415:30 | file | provenance | | | test.go:415:14:415:31 | call to NewReader | test.go:417:2:417:9 | s2Reader | provenance | | | test.go:415:14:415:31 | call to NewReader | test.go:418:2:418:9 | s2Reader | provenance | | | test.go:415:14:415:31 | call to NewReader | test.go:420:2:420:9 | s2Reader | provenance | | | test.go:415:14:415:31 | call to NewReader | test.go:421:26:421:33 | s2Reader | provenance | | | test.go:415:27:415:30 | file | test.go:415:14:415:31 | call to NewReader | provenance | Config | +| test.go:421:2:421:8 | definition of tarRead | test.go:423:18:423:24 | tarRead | provenance | | | test.go:421:12:421:34 | call to NewReader | test.go:423:18:423:24 | tarRead | provenance | | | test.go:421:26:421:33 | s2Reader | test.go:421:12:421:34 | call to NewReader | provenance | MaD:3 | +| test.go:423:18:423:24 | tarRead | test.go:421:2:421:8 | definition of tarRead | provenance | | | test.go:423:18:423:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:440:19:440:21 | definition of src | test.go:440:19:440:21 | definition of src [Return] | provenance | | | test.go:440:19:440:21 | definition of src | test.go:441:34:441:36 | src | provenance | | | test.go:441:2:441:37 | ... := ...[0] | test.go:444:12:444:32 | type conversion | provenance | | | test.go:441:34:441:36 | src | test.go:441:2:441:37 | ... := ...[0] | provenance | Config | | test.go:444:12:444:32 | type conversion | test.go:445:23:445:28 | newSrc | provenance | | +| test.go:447:11:447:14 | definition of file | test.go:447:11:447:14 | definition of file [Return] | provenance | | | test.go:447:11:447:14 | definition of file | test.go:450:34:450:37 | file | provenance | | | test.go:450:2:450:38 | ... := ...[0] | test.go:452:2:452:11 | gzipReader | provenance | | | test.go:450:2:450:38 | ... := ...[0] | test.go:453:26:453:35 | gzipReader | provenance | | | test.go:450:34:450:37 | file | test.go:450:2:450:38 | ... := ...[0] | provenance | Config | +| test.go:453:2:453:8 | definition of tarRead | test.go:455:18:455:24 | tarRead | provenance | | | test.go:453:12:453:36 | call to NewReader | test.go:455:18:455:24 | tarRead | provenance | | | test.go:453:26:453:35 | gzipReader | test.go:453:12:453:36 | call to NewReader | provenance | MaD:3 | +| test.go:455:18:455:24 | tarRead | test.go:453:2:453:8 | definition of tarRead | provenance | | | test.go:455:18:455:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:472:20:472:23 | definition of file | test.go:472:20:472:23 | definition of file [Return] | provenance | | | test.go:472:20:472:23 | definition of file | test.go:475:43:475:46 | file | provenance | | | test.go:475:2:475:47 | ... := ...[0] | test.go:477:2:477:11 | gzipReader | provenance | | | test.go:475:2:475:47 | ... := ...[0] | test.go:479:2:479:11 | gzipReader | provenance | | | test.go:475:2:475:47 | ... := ...[0] | test.go:480:26:480:35 | gzipReader | provenance | | | test.go:475:43:475:46 | file | test.go:475:2:475:47 | ... := ...[0] | provenance | Config | +| test.go:480:2:480:8 | definition of tarRead | test.go:482:18:482:24 | tarRead | provenance | | | test.go:480:12:480:36 | call to NewReader | test.go:482:18:482:24 | tarRead | provenance | | | test.go:480:26:480:35 | gzipReader | test.go:480:12:480:36 | call to NewReader | provenance | MaD:3 | +| test.go:482:18:482:24 | tarRead | test.go:480:2:480:8 | definition of tarRead | provenance | | | test.go:482:18:482:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:499:20:499:23 | definition of file | test.go:499:20:499:23 | definition of file [Return] | provenance | | | test.go:499:20:499:23 | definition of file | test.go:502:45:502:48 | file | provenance | | | test.go:502:2:502:49 | ... := ...[0] | test.go:504:2:504:12 | pgzipReader | provenance | | | test.go:502:2:502:49 | ... := ...[0] | test.go:506:2:506:12 | pgzipReader | provenance | | | test.go:502:2:502:49 | ... := ...[0] | test.go:507:26:507:36 | pgzipReader | provenance | | | test.go:502:45:502:48 | file | test.go:502:2:502:49 | ... := ...[0] | provenance | Config | +| test.go:507:2:507:8 | definition of tarRead | test.go:509:18:509:24 | tarRead | provenance | | | test.go:507:12:507:37 | call to NewReader | test.go:509:18:509:24 | tarRead | provenance | | | test.go:507:26:507:36 | pgzipReader | test.go:507:12:507:37 | call to NewReader | provenance | MaD:3 | +| test.go:509:18:509:24 | tarRead | test.go:507:2:507:8 | definition of tarRead | provenance | | | test.go:509:18:509:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:526:21:526:24 | definition of file | test.go:526:21:526:24 | definition of file [Return] | provenance | | | test.go:526:21:526:24 | definition of file | test.go:529:43:529:46 | file | provenance | | | test.go:529:2:529:47 | ... := ...[0] | test.go:531:2:531:11 | zstdReader | provenance | | | test.go:529:2:529:47 | ... := ...[0] | test.go:533:2:533:11 | zstdReader | provenance | | | test.go:529:2:529:47 | ... := ...[0] | test.go:535:2:535:11 | zstdReader | provenance | | | test.go:529:2:529:47 | ... := ...[0] | test.go:536:26:536:35 | zstdReader | provenance | | | test.go:529:43:529:46 | file | test.go:529:2:529:47 | ... := ...[0] | provenance | Config | +| test.go:536:2:536:8 | definition of tarRead | test.go:538:18:538:24 | tarRead | provenance | | | test.go:536:12:536:36 | call to NewReader | test.go:538:18:538:24 | tarRead | provenance | | | test.go:536:26:536:35 | zstdReader | test.go:536:12:536:36 | call to NewReader | provenance | MaD:3 | +| test.go:538:18:538:24 | tarRead | test.go:536:2:536:8 | definition of tarRead | provenance | | | test.go:538:18:538:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:555:19:555:22 | definition of file | test.go:555:19:555:22 | definition of file [Return] | provenance | | | test.go:555:19:555:22 | definition of file | test.go:558:38:558:41 | file | provenance | | | test.go:558:16:558:42 | call to NewReader | test.go:560:2:560:11 | zstdReader | provenance | | | test.go:558:16:558:42 | call to NewReader | test.go:561:26:561:35 | zstdReader | provenance | | | test.go:558:38:558:41 | file | test.go:558:16:558:42 | call to NewReader | provenance | Config | +| test.go:561:2:561:8 | definition of tarRead | test.go:563:18:563:24 | tarRead | provenance | | | test.go:561:12:561:36 | call to NewReader | test.go:563:18:563:24 | tarRead | provenance | | | test.go:561:26:561:35 | zstdReader | test.go:561:12:561:36 | call to NewReader | provenance | MaD:3 | +| test.go:563:18:563:24 | tarRead | test.go:561:2:561:8 | definition of tarRead | provenance | | | test.go:563:18:563:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:580:9:580:12 | definition of file | test.go:580:9:580:12 | definition of file [Return] | provenance | | | test.go:580:9:580:12 | definition of file | test.go:583:30:583:33 | file | provenance | | | test.go:583:2:583:34 | ... := ...[0] | test.go:585:2:585:9 | xzReader | provenance | | | test.go:583:2:583:34 | ... := ...[0] | test.go:586:26:586:33 | xzReader | provenance | | | test.go:583:30:583:33 | file | test.go:583:2:583:34 | ... := ...[0] | provenance | Config | +| test.go:586:2:586:8 | definition of tarRead | test.go:589:18:589:24 | tarRead | provenance | | +| test.go:586:2:586:8 | definition of tarRead | test.go:590:19:590:25 | tarRead | provenance | | +| test.go:586:2:586:8 | definition of tarRead | test.go:591:22:591:28 | tarRead | provenance | | +| test.go:586:2:586:8 | definition of tarRead | test.go:592:20:592:26 | tarRead | provenance | | | test.go:586:12:586:34 | call to NewReader | test.go:589:18:589:24 | tarRead | provenance | | | test.go:586:12:586:34 | call to NewReader | test.go:590:19:590:25 | tarRead | provenance | | +| test.go:586:12:586:34 | call to NewReader | test.go:591:22:591:28 | tarRead | provenance | | +| test.go:586:12:586:34 | call to NewReader | test.go:592:20:592:26 | tarRead | provenance | | | test.go:586:26:586:33 | xzReader | test.go:586:12:586:34 | call to NewReader | provenance | MaD:3 | +| test.go:589:18:589:24 | tarRead | test.go:586:2:586:8 | definition of tarRead | provenance | | | test.go:589:18:589:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:590:19:590:25 | tarRead | test.go:586:2:586:8 | definition of tarRead | provenance | | | test.go:590:19:590:25 | tarRead | test.go:627:23:627:29 | definition of tarRead | provenance | | +| test.go:591:22:591:28 | tarRead | test.go:586:2:586:8 | definition of tarRead | provenance | | +| test.go:591:22:591:28 | tarRead | test.go:642:26:642:32 | definition of tarRead | provenance | | +| test.go:592:20:592:26 | tarRead | test.go:586:2:586:8 | definition of tarRead | provenance | | +| test.go:592:20:592:26 | tarRead | test.go:633:24:633:30 | definition of tarRead | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | provenance | | | test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | provenance | | | test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | provenance | | | test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | provenance | | @@ -229,7 +318,10 @@ edges | test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | provenance | | | test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | provenance | | | test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | provenance | | +| test.go:627:23:627:29 | definition of tarRead | test.go:627:23:627:29 | definition of tarRead [Return] | provenance | | | test.go:627:23:627:29 | definition of tarRead | test.go:629:2:629:8 | tarRead | provenance | | +| test.go:633:24:633:30 | definition of tarRead | test.go:633:24:633:30 | definition of tarRead [Return] | provenance | | +| test.go:642:26:642:32 | definition of tarRead | test.go:642:26:642:32 | definition of tarRead [Return] | provenance | | models | 1 | Source: net/http; Request; true; Body; ; ; ; remote; manual | | 2 | Source: net/http; Request; true; FormValue; ; ; ReturnValue; remote; manual | @@ -270,6 +362,7 @@ nodes | test.go:145:12:145:19 | call to Open | semmle.label | call to Open | | test.go:147:37:147:38 | rc | semmle.label | rc | | test.go:158:19:158:22 | definition of file | semmle.label | definition of file | +| test.go:158:19:158:22 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:159:2:159:29 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:159:25:159:28 | file | semmle.label | file | | test.go:160:2:160:69 | ... := ...[0] | semmle.label | ... := ...[0] | @@ -279,6 +372,7 @@ nodes | test.go:163:26:163:29 | file | semmle.label | file | | test.go:164:36:164:51 | fileReaderCloser | semmle.label | fileReaderCloser | | test.go:169:28:169:31 | definition of file | semmle.label | definition of file | +| test.go:169:28:169:31 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:170:2:170:29 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:170:25:170:28 | file | semmle.label | file | | test.go:171:2:171:78 | ... := ...[0] | semmle.label | ... := ...[0] | @@ -288,132 +382,167 @@ nodes | test.go:175:26:175:36 | call to Open | semmle.label | call to Open | | test.go:176:36:176:51 | fileReaderCloser | semmle.label | fileReaderCloser | | test.go:181:17:181:20 | definition of file | semmle.label | definition of file | +| test.go:181:17:181:20 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:184:2:184:73 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:184:41:184:44 | file | semmle.label | file | | test.go:186:2:186:12 | bzip2Reader | semmle.label | bzip2Reader | +| test.go:187:2:187:8 | definition of tarRead | semmle.label | definition of tarRead | | test.go:187:12:187:37 | call to NewReader | semmle.label | call to NewReader | | test.go:187:26:187:36 | bzip2Reader | semmle.label | bzip2Reader | | test.go:189:18:189:24 | tarRead | semmle.label | tarRead | | test.go:208:12:208:15 | definition of file | semmle.label | definition of file | +| test.go:208:12:208:15 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:211:17:211:37 | call to NewReader | semmle.label | call to NewReader | | test.go:211:33:211:36 | file | semmle.label | file | | test.go:213:2:213:12 | bzip2Reader | semmle.label | bzip2Reader | +| test.go:214:2:214:8 | definition of tarRead | semmle.label | definition of tarRead | | test.go:214:12:214:37 | call to NewReader | semmle.label | call to NewReader | | test.go:214:26:214:36 | bzip2Reader | semmle.label | bzip2Reader | | test.go:216:18:216:24 | tarRead | semmle.label | tarRead | | test.go:233:12:233:15 | definition of file | semmle.label | definition of file | +| test.go:233:12:233:15 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:236:17:236:37 | call to NewReader | semmle.label | call to NewReader | | test.go:236:33:236:36 | file | semmle.label | file | | test.go:238:2:238:12 | flateReader | semmle.label | flateReader | +| test.go:239:2:239:8 | definition of tarRead | semmle.label | definition of tarRead | | test.go:239:12:239:37 | call to NewReader | semmle.label | call to NewReader | | test.go:239:26:239:36 | flateReader | semmle.label | flateReader | | test.go:241:18:241:24 | tarRead | semmle.label | tarRead | | test.go:258:21:258:24 | definition of file | semmle.label | definition of file | +| test.go:258:21:258:24 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:261:17:261:46 | call to NewReader | semmle.label | call to NewReader | | test.go:261:42:261:45 | file | semmle.label | file | | test.go:263:2:263:12 | flateReader | semmle.label | flateReader | +| test.go:264:2:264:8 | definition of tarRead | semmle.label | definition of tarRead | | test.go:264:12:264:37 | call to NewReader | semmle.label | call to NewReader | | test.go:264:26:264:36 | flateReader | semmle.label | flateReader | | test.go:266:18:266:24 | tarRead | semmle.label | tarRead | | test.go:283:17:283:20 | definition of file | semmle.label | definition of file | +| test.go:283:17:283:20 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:286:2:286:73 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:286:41:286:44 | file | semmle.label | file | | test.go:288:2:288:12 | flateReader | semmle.label | flateReader | +| test.go:289:2:289:8 | definition of tarRead | semmle.label | definition of tarRead | | test.go:289:12:289:37 | call to NewReader | semmle.label | call to NewReader | | test.go:289:26:289:36 | flateReader | semmle.label | flateReader | | test.go:291:18:291:24 | tarRead | semmle.label | tarRead | | test.go:308:20:308:23 | definition of file | semmle.label | definition of file | +| test.go:308:20:308:23 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:311:2:311:47 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:311:43:311:46 | file | semmle.label | file | | test.go:313:2:313:11 | zlibReader | semmle.label | zlibReader | +| test.go:314:2:314:8 | definition of tarRead | semmle.label | definition of tarRead | | test.go:314:12:314:36 | call to NewReader | semmle.label | call to NewReader | | test.go:314:26:314:35 | zlibReader | semmle.label | zlibReader | | test.go:316:18:316:24 | tarRead | semmle.label | tarRead | | test.go:333:11:333:14 | definition of file | semmle.label | definition of file | +| test.go:333:11:333:14 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:336:2:336:38 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:336:34:336:37 | file | semmle.label | file | | test.go:338:2:338:11 | zlibReader | semmle.label | zlibReader | +| test.go:339:2:339:8 | definition of tarRead | semmle.label | definition of tarRead | | test.go:339:12:339:36 | call to NewReader | semmle.label | call to NewReader | | test.go:339:26:339:35 | zlibReader | semmle.label | zlibReader | | test.go:341:18:341:24 | tarRead | semmle.label | tarRead | | test.go:358:13:358:16 | definition of file | semmle.label | definition of file | +| test.go:358:13:358:16 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:361:18:361:39 | call to NewReader | semmle.label | call to NewReader | | test.go:361:35:361:38 | file | semmle.label | file | | test.go:363:2:363:13 | snappyReader | semmle.label | snappyReader | | test.go:364:2:364:13 | snappyReader | semmle.label | snappyReader | +| test.go:365:2:365:8 | definition of tarRead | semmle.label | definition of tarRead | | test.go:365:12:365:38 | call to NewReader | semmle.label | call to NewReader | | test.go:365:26:365:37 | snappyReader | semmle.label | snappyReader | | test.go:367:18:367:24 | tarRead | semmle.label | tarRead | | test.go:384:22:384:25 | definition of file | semmle.label | definition of file | +| test.go:384:22:384:25 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:387:18:387:48 | call to NewReader | semmle.label | call to NewReader | | test.go:387:44:387:47 | file | semmle.label | file | | test.go:389:2:389:13 | snappyReader | semmle.label | snappyReader | | test.go:391:2:391:13 | snappyReader | semmle.label | snappyReader | | test.go:392:2:392:13 | snappyReader | semmle.label | snappyReader | +| test.go:393:2:393:8 | definition of tarRead | semmle.label | definition of tarRead | | test.go:393:12:393:38 | call to NewReader | semmle.label | call to NewReader | | test.go:393:26:393:37 | snappyReader | semmle.label | snappyReader | | test.go:395:18:395:24 | tarRead | semmle.label | tarRead | | test.go:412:9:412:12 | definition of file | semmle.label | definition of file | +| test.go:412:9:412:12 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:415:14:415:31 | call to NewReader | semmle.label | call to NewReader | | test.go:415:27:415:30 | file | semmle.label | file | | test.go:417:2:417:9 | s2Reader | semmle.label | s2Reader | | test.go:418:2:418:9 | s2Reader | semmle.label | s2Reader | | test.go:420:2:420:9 | s2Reader | semmle.label | s2Reader | +| test.go:421:2:421:8 | definition of tarRead | semmle.label | definition of tarRead | | test.go:421:12:421:34 | call to NewReader | semmle.label | call to NewReader | | test.go:421:26:421:33 | s2Reader | semmle.label | s2Reader | | test.go:423:18:423:24 | tarRead | semmle.label | tarRead | | test.go:440:19:440:21 | definition of src | semmle.label | definition of src | +| test.go:440:19:440:21 | definition of src [Return] | semmle.label | definition of src [Return] | | test.go:441:2:441:37 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:441:34:441:36 | src | semmle.label | src | | test.go:444:12:444:32 | type conversion | semmle.label | type conversion | | test.go:445:23:445:28 | newSrc | semmle.label | newSrc | | test.go:447:11:447:14 | definition of file | semmle.label | definition of file | +| test.go:447:11:447:14 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:450:2:450:38 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:450:34:450:37 | file | semmle.label | file | | test.go:452:2:452:11 | gzipReader | semmle.label | gzipReader | +| test.go:453:2:453:8 | definition of tarRead | semmle.label | definition of tarRead | | test.go:453:12:453:36 | call to NewReader | semmle.label | call to NewReader | | test.go:453:26:453:35 | gzipReader | semmle.label | gzipReader | | test.go:455:18:455:24 | tarRead | semmle.label | tarRead | | test.go:472:20:472:23 | definition of file | semmle.label | definition of file | +| test.go:472:20:472:23 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:475:2:475:47 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:475:43:475:46 | file | semmle.label | file | | test.go:477:2:477:11 | gzipReader | semmle.label | gzipReader | | test.go:479:2:479:11 | gzipReader | semmle.label | gzipReader | +| test.go:480:2:480:8 | definition of tarRead | semmle.label | definition of tarRead | | test.go:480:12:480:36 | call to NewReader | semmle.label | call to NewReader | | test.go:480:26:480:35 | gzipReader | semmle.label | gzipReader | | test.go:482:18:482:24 | tarRead | semmle.label | tarRead | | test.go:499:20:499:23 | definition of file | semmle.label | definition of file | +| test.go:499:20:499:23 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:502:2:502:49 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:502:45:502:48 | file | semmle.label | file | | test.go:504:2:504:12 | pgzipReader | semmle.label | pgzipReader | | test.go:506:2:506:12 | pgzipReader | semmle.label | pgzipReader | +| test.go:507:2:507:8 | definition of tarRead | semmle.label | definition of tarRead | | test.go:507:12:507:37 | call to NewReader | semmle.label | call to NewReader | | test.go:507:26:507:36 | pgzipReader | semmle.label | pgzipReader | | test.go:509:18:509:24 | tarRead | semmle.label | tarRead | | test.go:526:21:526:24 | definition of file | semmle.label | definition of file | +| test.go:526:21:526:24 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:529:2:529:47 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:529:43:529:46 | file | semmle.label | file | | test.go:531:2:531:11 | zstdReader | semmle.label | zstdReader | | test.go:533:2:533:11 | zstdReader | semmle.label | zstdReader | | test.go:535:2:535:11 | zstdReader | semmle.label | zstdReader | +| test.go:536:2:536:8 | definition of tarRead | semmle.label | definition of tarRead | | test.go:536:12:536:36 | call to NewReader | semmle.label | call to NewReader | | test.go:536:26:536:35 | zstdReader | semmle.label | zstdReader | | test.go:538:18:538:24 | tarRead | semmle.label | tarRead | | test.go:555:19:555:22 | definition of file | semmle.label | definition of file | +| test.go:555:19:555:22 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:558:16:558:42 | call to NewReader | semmle.label | call to NewReader | | test.go:558:38:558:41 | file | semmle.label | file | | test.go:560:2:560:11 | zstdReader | semmle.label | zstdReader | +| test.go:561:2:561:8 | definition of tarRead | semmle.label | definition of tarRead | | test.go:561:12:561:36 | call to NewReader | semmle.label | call to NewReader | | test.go:561:26:561:35 | zstdReader | semmle.label | zstdReader | | test.go:563:18:563:24 | tarRead | semmle.label | tarRead | | test.go:580:9:580:12 | definition of file | semmle.label | definition of file | +| test.go:580:9:580:12 | definition of file [Return] | semmle.label | definition of file [Return] | | test.go:583:2:583:34 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:583:30:583:33 | file | semmle.label | file | | test.go:585:2:585:9 | xzReader | semmle.label | xzReader | +| test.go:586:2:586:8 | definition of tarRead | semmle.label | definition of tarRead | | test.go:586:12:586:34 | call to NewReader | semmle.label | call to NewReader | | test.go:586:26:586:33 | xzReader | semmle.label | xzReader | | test.go:589:18:589:24 | tarRead | semmle.label | tarRead | | test.go:590:19:590:25 | tarRead | semmle.label | tarRead | +| test.go:591:22:591:28 | tarRead | semmle.label | tarRead | +| test.go:592:20:592:26 | tarRead | semmle.label | tarRead | | test.go:611:22:611:28 | definition of tarRead | semmle.label | definition of tarRead | | test.go:611:22:611:28 | definition of tarRead | semmle.label | definition of tarRead | | test.go:611:22:611:28 | definition of tarRead | semmle.label | definition of tarRead | @@ -423,6 +552,15 @@ nodes | test.go:611:22:611:28 | definition of tarRead | semmle.label | definition of tarRead | | test.go:611:22:611:28 | definition of tarRead | semmle.label | definition of tarRead | | test.go:611:22:611:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:611:22:611:28 | definition of tarRead [Return] | semmle.label | definition of tarRead [Return] | +| test.go:611:22:611:28 | definition of tarRead [Return] | semmle.label | definition of tarRead [Return] | +| test.go:611:22:611:28 | definition of tarRead [Return] | semmle.label | definition of tarRead [Return] | +| test.go:611:22:611:28 | definition of tarRead [Return] | semmle.label | definition of tarRead [Return] | +| test.go:611:22:611:28 | definition of tarRead [Return] | semmle.label | definition of tarRead [Return] | +| test.go:611:22:611:28 | definition of tarRead [Return] | semmle.label | definition of tarRead [Return] | +| test.go:611:22:611:28 | definition of tarRead [Return] | semmle.label | definition of tarRead [Return] | +| test.go:611:22:611:28 | definition of tarRead [Return] | semmle.label | definition of tarRead [Return] | +| test.go:611:22:611:28 | definition of tarRead [Return] | semmle.label | definition of tarRead [Return] | | test.go:621:25:621:31 | tarRead | semmle.label | tarRead | | test.go:621:25:621:31 | tarRead | semmle.label | tarRead | | test.go:621:25:621:31 | tarRead | semmle.label | tarRead | @@ -433,5 +571,48 @@ nodes | test.go:621:25:621:31 | tarRead | semmle.label | tarRead | | test.go:621:25:621:31 | tarRead | semmle.label | tarRead | | test.go:627:23:627:29 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:627:23:627:29 | definition of tarRead [Return] | semmle.label | definition of tarRead [Return] | | test.go:629:2:629:8 | tarRead | semmle.label | tarRead | +| test.go:633:24:633:30 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:633:24:633:30 | definition of tarRead [Return] | semmle.label | definition of tarRead [Return] | +| test.go:642:26:642:32 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:642:26:642:32 | definition of tarRead [Return] | semmle.label | definition of tarRead [Return] | subpaths +| test.go:60:15:60:26 | selection of Body | test.go:158:19:158:22 | definition of file | test.go:158:19:158:22 | definition of file [Return] | test.go:60:15:60:26 | selection of Body | +| test.go:61:24:61:35 | selection of Body | test.go:169:28:169:31 | definition of file | test.go:169:28:169:31 | definition of file [Return] | test.go:61:24:61:35 | selection of Body | +| test.go:62:13:62:24 | selection of Body | test.go:181:17:181:20 | definition of file | test.go:181:17:181:20 | definition of file [Return] | test.go:62:13:62:24 | selection of Body | +| test.go:64:8:64:19 | selection of Body | test.go:208:12:208:15 | definition of file | test.go:208:12:208:15 | definition of file [Return] | test.go:64:8:64:19 | selection of Body | +| test.go:66:8:66:19 | selection of Body | test.go:233:12:233:15 | definition of file | test.go:233:12:233:15 | definition of file [Return] | test.go:66:8:66:19 | selection of Body | +| test.go:68:17:68:28 | selection of Body | test.go:258:21:258:24 | definition of file | test.go:258:21:258:24 | definition of file [Return] | test.go:68:17:68:28 | selection of Body | +| test.go:70:13:70:24 | selection of Body | test.go:283:17:283:20 | definition of file | test.go:283:17:283:20 | definition of file [Return] | test.go:70:13:70:24 | selection of Body | +| test.go:72:16:72:27 | selection of Body | test.go:308:20:308:23 | definition of file | test.go:308:20:308:23 | definition of file [Return] | test.go:72:16:72:27 | selection of Body | +| test.go:74:7:74:18 | selection of Body | test.go:333:11:333:14 | definition of file | test.go:333:11:333:14 | definition of file [Return] | test.go:74:7:74:18 | selection of Body | +| test.go:76:9:76:20 | selection of Body | test.go:358:13:358:16 | definition of file | test.go:358:13:358:16 | definition of file [Return] | test.go:76:9:76:20 | selection of Body | +| test.go:78:18:78:29 | selection of Body | test.go:384:22:384:25 | definition of file | test.go:384:22:384:25 | definition of file [Return] | test.go:78:18:78:29 | selection of Body | +| test.go:80:5:80:16 | selection of Body | test.go:412:9:412:12 | definition of file | test.go:412:9:412:12 | definition of file [Return] | test.go:80:5:80:16 | selection of Body | +| test.go:82:7:82:18 | selection of Body | test.go:447:11:447:14 | definition of file | test.go:447:11:447:14 | definition of file [Return] | test.go:82:7:82:18 | selection of Body | +| test.go:84:15:84:26 | selection of Body | test.go:440:19:440:21 | definition of src | test.go:440:19:440:21 | definition of src [Return] | test.go:84:15:84:26 | selection of Body | +| test.go:85:16:85:27 | selection of Body | test.go:472:20:472:23 | definition of file | test.go:472:20:472:23 | definition of file [Return] | test.go:85:16:85:27 | selection of Body | +| test.go:87:16:87:27 | selection of Body | test.go:499:20:499:23 | definition of file | test.go:499:20:499:23 | definition of file [Return] | test.go:87:16:87:27 | selection of Body | +| test.go:89:17:89:28 | selection of Body | test.go:526:21:526:24 | definition of file | test.go:526:21:526:24 | definition of file [Return] | test.go:89:17:89:28 | selection of Body | +| test.go:91:15:91:26 | selection of Body | test.go:555:19:555:22 | definition of file | test.go:555:19:555:22 | definition of file [Return] | test.go:91:15:91:26 | selection of Body | +| test.go:93:5:93:16 | selection of Body | test.go:580:9:580:12 | definition of file | test.go:580:9:580:12 | definition of file [Return] | test.go:93:5:93:16 | selection of Body | +| test.go:189:18:189:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | test.go:187:2:187:8 | definition of tarRead | +| test.go:216:18:216:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | test.go:214:2:214:8 | definition of tarRead | +| test.go:241:18:241:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | test.go:239:2:239:8 | definition of tarRead | +| test.go:266:18:266:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | test.go:264:2:264:8 | definition of tarRead | +| test.go:291:18:291:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | test.go:289:2:289:8 | definition of tarRead | +| test.go:316:18:316:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | test.go:314:2:314:8 | definition of tarRead | +| test.go:341:18:341:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | test.go:339:2:339:8 | definition of tarRead | +| test.go:367:18:367:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | test.go:365:2:365:8 | definition of tarRead | +| test.go:395:18:395:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | test.go:393:2:393:8 | definition of tarRead | +| test.go:423:18:423:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | test.go:421:2:421:8 | definition of tarRead | +| test.go:455:18:455:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | test.go:453:2:453:8 | definition of tarRead | +| test.go:482:18:482:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | test.go:480:2:480:8 | definition of tarRead | +| test.go:509:18:509:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | test.go:507:2:507:8 | definition of tarRead | +| test.go:538:18:538:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | test.go:536:2:536:8 | definition of tarRead | +| test.go:563:18:563:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | test.go:561:2:561:8 | definition of tarRead | +| test.go:589:18:589:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | test.go:611:22:611:28 | definition of tarRead [Return] | test.go:586:2:586:8 | definition of tarRead | +| test.go:590:19:590:25 | tarRead | test.go:627:23:627:29 | definition of tarRead | test.go:627:23:627:29 | definition of tarRead [Return] | test.go:586:2:586:8 | definition of tarRead | +| test.go:591:22:591:28 | tarRead | test.go:642:26:642:32 | definition of tarRead | test.go:642:26:642:32 | definition of tarRead [Return] | test.go:586:2:586:8 | definition of tarRead | +| test.go:592:20:592:26 | tarRead | test.go:633:24:633:30 | definition of tarRead | test.go:633:24:633:30 | definition of tarRead [Return] | test.go:586:2:586:8 | definition of tarRead | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/GoMicro/LogInjection.expected b/go/ql/test/library-tests/semmle/go/frameworks/GoMicro/LogInjection.expected index 8e113c12ef73..9bf442d46e9a 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/GoMicro/LogInjection.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/GoMicro/LogInjection.expected @@ -1,9 +1,11 @@ edges | main.go:18:46:18:48 | definition of req | main.go:18:46:18:48 | definition of req [Return] | provenance | | +| main.go:18:46:18:48 | definition of req | main.go:18:46:18:48 | definition of req [Return] | provenance | | | main.go:18:46:18:48 | definition of req | main.go:21:28:21:31 | name | provenance | | | main.go:18:46:18:48 | definition of req | main.go:21:28:21:31 | name | provenance | | | main.go:18:46:18:48 | definition of req [Return] | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in [Return] | provenance | | +| proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in [Return] | provenance | | | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:86:37:86:38 | in | provenance | | | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:86:37:86:38 | in | provenance | | | proto/Hello.pb.micro.go:85:53:85:54 | definition of in [Return] | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | @@ -11,16 +13,23 @@ edges | proto/Hello.pb.micro.go:86:37:86:38 | in | main.go:18:46:18:48 | definition of req | provenance | | | proto/Hello.pb.micro.go:86:37:86:38 | in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | | proto/Hello.pb.micro.go:86:37:86:38 | in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | +| proto/Hello.pb.micro.go:86:37:86:38 | in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | nodes | main.go:18:46:18:48 | definition of req | semmle.label | definition of req | | main.go:18:46:18:48 | definition of req | semmle.label | definition of req | | main.go:18:46:18:48 | definition of req [Return] | semmle.label | definition of req [Return] | +| main.go:18:46:18:48 | definition of req [Return] | semmle.label | definition of req [Return] | | main.go:21:28:21:31 | name | semmle.label | name | | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | semmle.label | definition of in | | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | semmle.label | definition of in | | proto/Hello.pb.micro.go:85:53:85:54 | definition of in [Return] | semmle.label | definition of in [Return] | +| proto/Hello.pb.micro.go:85:53:85:54 | definition of in [Return] | semmle.label | definition of in [Return] | | proto/Hello.pb.micro.go:86:37:86:38 | in | semmle.label | in | | proto/Hello.pb.micro.go:86:37:86:38 | in | semmle.label | in | subpaths +| proto/Hello.pb.micro.go:86:37:86:38 | in | main.go:18:46:18:48 | definition of req | main.go:18:46:18:48 | definition of req [Return] | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | +| proto/Hello.pb.micro.go:86:37:86:38 | in | main.go:18:46:18:48 | definition of req | main.go:18:46:18:48 | definition of req [Return] | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | +| proto/Hello.pb.micro.go:86:37:86:38 | in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in [Return] | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | +| proto/Hello.pb.micro.go:86:37:86:38 | in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in [Return] | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | #select | main.go:21:28:21:31 | name | main.go:18:46:18:48 | definition of req | main.go:21:28:21:31 | name | This log entry depends on a $@. | main.go:18:46:18:48 | definition of req | user-provided value | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected b/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected index 82c4c950c6e4..69a5f682afd5 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected @@ -2,19 +2,43 @@ | server/main.go:30:38:30:48 | selection of Text | rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | server/main.go:30:38:30:48 | selection of Text | The $@ of this request depends on a $@. | server/main.go:30:38:30:48 | selection of Text | URL | rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | user-provided value | | server/main.go:30:38:30:48 | selection of Text | server/main.go:19:56:19:61 | definition of params | server/main.go:30:38:30:48 | selection of Text | The $@ of this request depends on a $@. | server/main.go:30:38:30:48 | selection of Text | URL | server/main.go:19:56:19:61 | definition of params | user-provided value | edges +| client/main.go:16:35:16:78 | &... | client/main.go:16:35:16:78 | &... | provenance | | +| client/main.go:16:35:16:78 | &... | rpc/notes/service.twirp.go:87:70:87:71 | definition of in | provenance | | +| client/main.go:16:35:16:78 | &... | rpc/notes/service.twirp.go:226:66:226:67 | definition of in | provenance | | | client/main.go:16:35:16:78 | &... | server/main.go:19:56:19:61 | definition of params | provenance | | +| rpc/notes/service.twirp.go:87:70:87:71 | definition of in | rpc/notes/service.twirp.go:87:70:87:71 | definition of in [Return] | provenance | | +| rpc/notes/service.twirp.go:93:38:93:40 | definition of req | rpc/notes/service.twirp.go:93:38:93:40 | definition of req [Return] | provenance | | +| rpc/notes/service.twirp.go:116:74:116:75 | definition of in | rpc/notes/service.twirp.go:116:74:116:75 | definition of in [Return] | provenance | | +| rpc/notes/service.twirp.go:226:66:226:67 | definition of in | rpc/notes/service.twirp.go:226:66:226:67 | definition of in [Return] | provenance | | +| rpc/notes/service.twirp.go:232:38:232:40 | definition of req | rpc/notes/service.twirp.go:232:38:232:40 | definition of req [Return] | provenance | | +| rpc/notes/service.twirp.go:255:70:255:71 | definition of in | rpc/notes/service.twirp.go:255:70:255:71 | definition of in [Return] | provenance | | | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | rpc/notes/service.twirp.go:477:44:477:51 | typedReq | provenance | | +| rpc/notes/service.twirp.go:477:44:477:51 | typedReq | rpc/notes/service.twirp.go:87:70:87:71 | definition of in | provenance | | +| rpc/notes/service.twirp.go:477:44:477:51 | typedReq | rpc/notes/service.twirp.go:226:66:226:67 | definition of in | provenance | | +| rpc/notes/service.twirp.go:477:44:477:51 | typedReq | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | provenance | | | rpc/notes/service.twirp.go:477:44:477:51 | typedReq | server/main.go:19:56:19:61 | definition of params | provenance | | | rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | rpc/notes/service.twirp.go:495:35:495:44 | reqContent | provenance | | +| rpc/notes/service.twirp.go:495:35:495:44 | reqContent | rpc/notes/service.twirp.go:87:70:87:71 | definition of in | provenance | | +| rpc/notes/service.twirp.go:495:35:495:44 | reqContent | rpc/notes/service.twirp.go:226:66:226:67 | definition of in | provenance | | +| rpc/notes/service.twirp.go:495:35:495:44 | reqContent | rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | provenance | | | rpc/notes/service.twirp.go:495:35:495:44 | reqContent | server/main.go:19:56:19:61 | definition of params | provenance | | | rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | rpc/notes/service.twirp.go:544:27:544:29 | buf | provenance | | | rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | provenance | Src:MaD:1 MaD:3 | | rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | provenance | | | rpc/notes/service.twirp.go:544:27:544:29 | buf | rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | provenance | MaD:2 | | rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | rpc/notes/service.twirp.go:558:44:558:51 | typedReq | provenance | | +| rpc/notes/service.twirp.go:558:44:558:51 | typedReq | rpc/notes/service.twirp.go:87:70:87:71 | definition of in | provenance | | +| rpc/notes/service.twirp.go:558:44:558:51 | typedReq | rpc/notes/service.twirp.go:226:66:226:67 | definition of in | provenance | | +| rpc/notes/service.twirp.go:558:44:558:51 | typedReq | rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | provenance | | | rpc/notes/service.twirp.go:558:44:558:51 | typedReq | server/main.go:19:56:19:61 | definition of params | provenance | | | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | provenance | | +| rpc/notes/service.twirp.go:576:35:576:44 | reqContent | rpc/notes/service.twirp.go:87:70:87:71 | definition of in | provenance | | +| rpc/notes/service.twirp.go:576:35:576:44 | reqContent | rpc/notes/service.twirp.go:226:66:226:67 | definition of in | provenance | | +| rpc/notes/service.twirp.go:576:35:576:44 | reqContent | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | provenance | | | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | server/main.go:19:56:19:61 | definition of params | provenance | | +| rpc/notes/service.twirp.go:1203:102:1203:103 | definition of in | rpc/notes/service.twirp.go:1203:102:1203:103 | definition of in [Return] | provenance | | +| rpc/notes/service.twirp.go:1252:98:1252:99 | definition of in | rpc/notes/service.twirp.go:1252:98:1252:99 | definition of in [Return] | provenance | | +| server/main.go:19:56:19:61 | definition of params | server/main.go:19:56:19:61 | definition of params [Return] | provenance | | | server/main.go:19:56:19:61 | definition of params | server/main.go:19:56:19:61 | definition of params [Return] | provenance | | | server/main.go:19:56:19:61 | definition of params | server/main.go:30:38:30:48 | selection of Text | provenance | | | server/main.go:19:56:19:61 | definition of params | server/main.go:30:38:30:48 | selection of Text | provenance | | @@ -29,6 +53,18 @@ models | 3 | Summary: io; ; false; ReadAll; ; ; Argument[0]; ReturnValue[0]; taint; manual | nodes | client/main.go:16:35:16:78 | &... | semmle.label | &... | +| rpc/notes/service.twirp.go:87:70:87:71 | definition of in | semmle.label | definition of in | +| rpc/notes/service.twirp.go:87:70:87:71 | definition of in [Return] | semmle.label | definition of in [Return] | +| rpc/notes/service.twirp.go:93:38:93:40 | definition of req | semmle.label | definition of req | +| rpc/notes/service.twirp.go:93:38:93:40 | definition of req [Return] | semmle.label | definition of req [Return] | +| rpc/notes/service.twirp.go:116:74:116:75 | definition of in | semmle.label | definition of in | +| rpc/notes/service.twirp.go:116:74:116:75 | definition of in [Return] | semmle.label | definition of in [Return] | +| rpc/notes/service.twirp.go:226:66:226:67 | definition of in | semmle.label | definition of in | +| rpc/notes/service.twirp.go:226:66:226:67 | definition of in [Return] | semmle.label | definition of in [Return] | +| rpc/notes/service.twirp.go:232:38:232:40 | definition of req | semmle.label | definition of req | +| rpc/notes/service.twirp.go:232:38:232:40 | definition of req [Return] | semmle.label | definition of req [Return] | +| rpc/notes/service.twirp.go:255:70:255:71 | definition of in | semmle.label | definition of in | +| rpc/notes/service.twirp.go:255:70:255:71 | definition of in [Return] | semmle.label | definition of in [Return] | | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | semmle.label | definition of typedReq | | rpc/notes/service.twirp.go:477:44:477:51 | typedReq | semmle.label | typedReq | | rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | semmle.label | capture variable reqContent | @@ -41,8 +77,28 @@ nodes | rpc/notes/service.twirp.go:558:44:558:51 | typedReq | semmle.label | typedReq | | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | semmle.label | capture variable reqContent | | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | semmle.label | reqContent | +| rpc/notes/service.twirp.go:1203:102:1203:103 | definition of in | semmle.label | definition of in | +| rpc/notes/service.twirp.go:1203:102:1203:103 | definition of in [Return] | semmle.label | definition of in [Return] | +| rpc/notes/service.twirp.go:1252:98:1252:99 | definition of in | semmle.label | definition of in | +| rpc/notes/service.twirp.go:1252:98:1252:99 | definition of in [Return] | semmle.label | definition of in [Return] | | server/main.go:19:56:19:61 | definition of params | semmle.label | definition of params | | server/main.go:19:56:19:61 | definition of params | semmle.label | definition of params | | server/main.go:19:56:19:61 | definition of params [Return] | semmle.label | definition of params [Return] | +| server/main.go:19:56:19:61 | definition of params [Return] | semmle.label | definition of params [Return] | | server/main.go:30:38:30:48 | selection of Text | semmle.label | selection of Text | subpaths +| client/main.go:16:35:16:78 | &... | rpc/notes/service.twirp.go:87:70:87:71 | definition of in | rpc/notes/service.twirp.go:87:70:87:71 | definition of in [Return] | client/main.go:16:35:16:78 | &... | +| client/main.go:16:35:16:78 | &... | rpc/notes/service.twirp.go:226:66:226:67 | definition of in | rpc/notes/service.twirp.go:226:66:226:67 | definition of in [Return] | client/main.go:16:35:16:78 | &... | +| client/main.go:16:35:16:78 | &... | server/main.go:19:56:19:61 | definition of params | server/main.go:19:56:19:61 | definition of params [Return] | client/main.go:16:35:16:78 | &... | +| rpc/notes/service.twirp.go:477:44:477:51 | typedReq | rpc/notes/service.twirp.go:87:70:87:71 | definition of in | rpc/notes/service.twirp.go:87:70:87:71 | definition of in [Return] | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | +| rpc/notes/service.twirp.go:477:44:477:51 | typedReq | rpc/notes/service.twirp.go:226:66:226:67 | definition of in | rpc/notes/service.twirp.go:226:66:226:67 | definition of in [Return] | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | +| rpc/notes/service.twirp.go:477:44:477:51 | typedReq | server/main.go:19:56:19:61 | definition of params | server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | +| rpc/notes/service.twirp.go:495:35:495:44 | reqContent | rpc/notes/service.twirp.go:87:70:87:71 | definition of in | rpc/notes/service.twirp.go:87:70:87:71 | definition of in [Return] | rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | +| rpc/notes/service.twirp.go:495:35:495:44 | reqContent | rpc/notes/service.twirp.go:226:66:226:67 | definition of in | rpc/notes/service.twirp.go:226:66:226:67 | definition of in [Return] | rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | +| rpc/notes/service.twirp.go:495:35:495:44 | reqContent | server/main.go:19:56:19:61 | definition of params | server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | +| rpc/notes/service.twirp.go:558:44:558:51 | typedReq | rpc/notes/service.twirp.go:87:70:87:71 | definition of in | rpc/notes/service.twirp.go:87:70:87:71 | definition of in [Return] | rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | +| rpc/notes/service.twirp.go:558:44:558:51 | typedReq | rpc/notes/service.twirp.go:226:66:226:67 | definition of in | rpc/notes/service.twirp.go:226:66:226:67 | definition of in [Return] | rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | +| rpc/notes/service.twirp.go:558:44:558:51 | typedReq | server/main.go:19:56:19:61 | definition of params | server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | +| rpc/notes/service.twirp.go:576:35:576:44 | reqContent | rpc/notes/service.twirp.go:87:70:87:71 | definition of in | rpc/notes/service.twirp.go:87:70:87:71 | definition of in [Return] | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | +| rpc/notes/service.twirp.go:576:35:576:44 | reqContent | rpc/notes/service.twirp.go:226:66:226:67 | definition of in | rpc/notes/service.twirp.go:226:66:226:67 | definition of in [Return] | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | +| rpc/notes/service.twirp.go:576:35:576:44 | reqContent | server/main.go:19:56:19:61 | definition of params | server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | diff --git a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected index dc54af70dbba..983e06e8466f 100644 --- a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected +++ b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected @@ -8,16 +8,23 @@ | tests.go:110:9:110:9 | f | tests.go:108:5:108:78 | ... := ...[0] | tests.go:110:9:110:9 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:108:15:108:78 | call to OpenFile | call to OpenFile | | tests.go:129:3:129:3 | f | tests.go:125:5:125:78 | ... := ...[0] | tests.go:129:3:129:3 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:125:15:125:78 | call to OpenFile | call to OpenFile | edges +| tests.go:8:24:8:24 | definition of f | tests.go:8:24:8:24 | definition of f [Return] | provenance | | | tests.go:8:24:8:24 | definition of f | tests.go:9:8:9:8 | f | provenance | | | tests.go:12:32:12:32 | definition of f | tests.go:13:13:13:13 | capture variable f | provenance | | | tests.go:13:13:13:13 | capture variable f | tests.go:14:3:14:3 | f | provenance | | +| tests.go:31:5:31:5 | definition of f | tests.go:32:21:32:21 | f | provenance | | +| tests.go:31:5:31:5 | definition of f | tests.go:33:29:33:29 | f | provenance | | | tests.go:31:5:31:78 | ... := ...[0] | tests.go:32:21:32:21 | f | provenance | Src:MaD:1 | | tests.go:31:5:31:78 | ... := ...[0] | tests.go:33:29:33:29 | f | provenance | Src:MaD:1 | | tests.go:32:21:32:21 | f | tests.go:8:24:8:24 | definition of f | provenance | | +| tests.go:32:21:32:21 | f | tests.go:31:5:31:5 | definition of f | provenance | | | tests.go:33:29:33:29 | f | tests.go:12:32:12:32 | definition of f | provenance | | +| tests.go:45:5:45:5 | definition of f | tests.go:46:21:46:21 | f | provenance | | +| tests.go:45:5:45:5 | definition of f | tests.go:47:29:47:29 | f | provenance | | | tests.go:45:5:45:76 | ... := ...[0] | tests.go:46:21:46:21 | f | provenance | Src:MaD:1 | | tests.go:45:5:45:76 | ... := ...[0] | tests.go:47:29:47:29 | f | provenance | Src:MaD:1 | | tests.go:46:21:46:21 | f | tests.go:8:24:8:24 | definition of f | provenance | | +| tests.go:46:21:46:21 | f | tests.go:45:5:45:5 | definition of f | provenance | | | tests.go:47:29:47:29 | f | tests.go:12:32:12:32 | definition of f | provenance | | | tests.go:54:5:54:78 | ... := ...[0] | tests.go:56:3:56:3 | f | provenance | Src:MaD:1 | | tests.go:66:5:66:76 | ... := ...[0] | tests.go:68:3:68:3 | f | provenance | Src:MaD:1 | @@ -27,13 +34,16 @@ models | 1 | Source: os; ; false; OpenFile; ; ; ReturnValue[0]; file; manual | nodes | tests.go:8:24:8:24 | definition of f | semmle.label | definition of f | +| tests.go:8:24:8:24 | definition of f [Return] | semmle.label | definition of f [Return] | | tests.go:9:8:9:8 | f | semmle.label | f | | tests.go:12:32:12:32 | definition of f | semmle.label | definition of f | | tests.go:13:13:13:13 | capture variable f | semmle.label | capture variable f | | tests.go:14:3:14:3 | f | semmle.label | f | +| tests.go:31:5:31:5 | definition of f | semmle.label | definition of f | | tests.go:31:5:31:78 | ... := ...[0] | semmle.label | ... := ...[0] | | tests.go:32:21:32:21 | f | semmle.label | f | | tests.go:33:29:33:29 | f | semmle.label | f | +| tests.go:45:5:45:5 | definition of f | semmle.label | definition of f | | tests.go:45:5:45:76 | ... := ...[0] | semmle.label | ... := ...[0] | | tests.go:46:21:46:21 | f | semmle.label | f | | tests.go:47:29:47:29 | f | semmle.label | f | @@ -46,3 +56,5 @@ nodes | tests.go:125:5:125:78 | ... := ...[0] | semmle.label | ... := ...[0] | | tests.go:129:3:129:3 | f | semmle.label | f | subpaths +| tests.go:32:21:32:21 | f | tests.go:8:24:8:24 | definition of f | tests.go:8:24:8:24 | definition of f [Return] | tests.go:31:5:31:5 | definition of f | +| tests.go:46:21:46:21 | f | tests.go:8:24:8:24 | definition of f | tests.go:8:24:8:24 | definition of f [Return] | tests.go:45:5:45:5 | definition of f | diff --git a/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected b/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected index 3435eff77754..57cf4944db1f 100644 --- a/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected +++ b/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected @@ -90,14 +90,20 @@ edges | passwords.go:127:14:127:19 | config [y] | passwords.go:127:14:127:21 | selection of y | provenance | | | protobuf.go:11:2:11:6 | definition of query [pointer, Description] | protobuf.go:12:2:12:6 | query [pointer, Description] | provenance | | | protobuf.go:11:2:11:6 | definition of query [pointer, Description] | protobuf.go:14:14:14:18 | query [pointer, Description] | provenance | | +| protobuf.go:11:2:11:6 | definition of query [pointer, Description] | protobuf.go:15:14:15:18 | query [pointer, Description] | provenance | | | protobuf.go:12:2:12:6 | implicit dereference [Description] | protobuf.go:11:2:11:6 | definition of query [pointer, Description] | provenance | | | protobuf.go:12:2:12:6 | query [pointer, Description] | protobuf.go:12:2:12:6 | implicit dereference [Description] | provenance | | | protobuf.go:12:22:12:29 | password | protobuf.go:12:2:12:6 | implicit dereference [Description] | provenance | | +| protobuf.go:14:14:14:18 | query [pointer, Description] | protobuf.go:11:2:11:6 | definition of query [pointer, Description] | provenance | | | protobuf.go:14:14:14:18 | query [pointer, Description] | protobuf.go:14:14:14:35 | call to GetDescription | provenance | | | protobuf.go:14:14:14:18 | query [pointer, Description] | protos/query/query.pb.go:117:7:117:7 | definition of x [pointer, Description] | provenance | | +| protobuf.go:15:14:15:18 | query [pointer, Description] | protobuf.go:11:2:11:6 | definition of query [pointer, Description] | provenance | | +| protobuf.go:15:14:15:18 | query [pointer, Description] | protos/query/query.pb.go:124:7:124:7 | definition of x [pointer, Description] | provenance | | +| protos/query/query.pb.go:117:7:117:7 | definition of x [pointer, Description] | protos/query/query.pb.go:117:7:117:7 | definition of x [Return] [pointer, Description] | provenance | | | protos/query/query.pb.go:117:7:117:7 | definition of x [pointer, Description] | protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | provenance | | | protos/query/query.pb.go:119:10:119:10 | implicit dereference [Description] | protos/query/query.pb.go:119:10:119:22 | selection of Description | provenance | | | protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | protos/query/query.pb.go:119:10:119:10 | implicit dereference [Description] | provenance | | +| protos/query/query.pb.go:124:7:124:7 | definition of x [pointer, Description] | protos/query/query.pb.go:124:7:124:7 | definition of x [Return] [pointer, Description] | provenance | | models | 1 | Source: net/http; Request; true; Header; ; ; ; remote; manual | nodes @@ -190,9 +196,15 @@ nodes | protobuf.go:12:22:12:29 | password | semmle.label | password | | protobuf.go:14:14:14:18 | query [pointer, Description] | semmle.label | query [pointer, Description] | | protobuf.go:14:14:14:35 | call to GetDescription | semmle.label | call to GetDescription | +| protobuf.go:15:14:15:18 | query [pointer, Description] | semmle.label | query [pointer, Description] | +| protos/query/query.pb.go:117:7:117:7 | definition of x [Return] [pointer, Description] | semmle.label | definition of x [Return] [pointer, Description] | | protos/query/query.pb.go:117:7:117:7 | definition of x [pointer, Description] | semmle.label | definition of x [pointer, Description] | | protos/query/query.pb.go:119:10:119:10 | implicit dereference [Description] | semmle.label | implicit dereference [Description] | | protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | semmle.label | x [pointer, Description] | | protos/query/query.pb.go:119:10:119:22 | selection of Description | semmle.label | selection of Description | +| protos/query/query.pb.go:124:7:124:7 | definition of x [Return] [pointer, Description] | semmle.label | definition of x [Return] [pointer, Description] | +| protos/query/query.pb.go:124:7:124:7 | definition of x [pointer, Description] | semmle.label | definition of x [pointer, Description] | subpaths +| protobuf.go:14:14:14:18 | query [pointer, Description] | protos/query/query.pb.go:117:7:117:7 | definition of x [pointer, Description] | protos/query/query.pb.go:117:7:117:7 | definition of x [Return] [pointer, Description] | protobuf.go:11:2:11:6 | definition of query [pointer, Description] | | protobuf.go:14:14:14:18 | query [pointer, Description] | protos/query/query.pb.go:117:7:117:7 | definition of x [pointer, Description] | protos/query/query.pb.go:119:10:119:22 | selection of Description | protobuf.go:14:14:14:35 | call to GetDescription | +| protobuf.go:15:14:15:18 | query [pointer, Description] | protos/query/query.pb.go:124:7:124:7 | definition of x [pointer, Description] | protos/query/query.pb.go:124:7:124:7 | definition of x [Return] [pointer, Description] | protobuf.go:11:2:11:6 | definition of query [pointer, Description] | diff --git a/java/ql/test/library-tests/frameworks/stream/test.expected b/java/ql/test/library-tests/frameworks/stream/test.expected index 185ec01a6a70..0b232489a8b4 100644 --- a/java/ql/test/library-tests/frameworks/stream/test.expected +++ b/java/ql/test/library-tests/frameworks/stream/test.expected @@ -364,11 +364,15 @@ edges | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | Test.java:267:29:267:30 | a1 : Object[] [[]] : Object | provenance | | | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | Test.java:266:29:266:30 | a2 : Object[] [[]] : Object | provenance | | | Test.java:266:21:266:22 | a1 [post update] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 [Return] : Object[] [[]] : Object | provenance | | +| Test.java:266:21:266:22 | a1 [post update] : Object[] [[]] : Object | Test.java:267:29:267:30 | a1 : Object[] [[]] : Object | provenance | | | Test.java:266:29:266:30 | a2 : Object[] [[]] : Object | Test.java:266:29:266:33 | ...[...] : Object | provenance | | | Test.java:266:29:266:33 | ...[...] : Object | Test.java:266:21:266:22 | a1 [post update] : Object[] [[]] : Object | provenance | | | Test.java:267:21:267:22 | a2 [post update] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 [Return] : Object[] [[]] : Object | provenance | | +| Test.java:267:21:267:22 | a2 [post update] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 [Return] : Object[] [[]] : Object | provenance | | +| Test.java:267:29:267:30 | a1 : Object[] [[]] : Object | Test.java:267:29:267:33 | ...[...] : Object | provenance | | | Test.java:267:29:267:30 | a1 : Object[] [[]] : Object | Test.java:267:29:267:33 | ...[...] : Object | provenance | | | Test.java:267:29:267:33 | ...[...] : Object | Test.java:267:21:267:22 | a2 [post update] : Object[] [[]] : Object | provenance | | +| Test.java:267:29:267:33 | ...[...] : Object | Test.java:267:21:267:22 | a2 [post update] : Object[] [[]] : Object | provenance | | | Test.java:269:18:269:20 | out : Object[] [[]] : Object | Test.java:269:18:269:23 | ...[...] | provenance | | | Test.java:273:33:273:62 | of(...) : Stream [] : Object | Test.java:274:13:274:14 | in : Stream [] : Object | provenance | | | Test.java:273:43:273:61 | source(...) : Object | Test.java:273:33:273:62 | of(...) : Stream [] : Object | provenance | MaD:55 | @@ -812,12 +816,16 @@ nodes | Test.java:265:18:265:19 | a1 [Return] : Object[] [[]] : Object | semmle.label | a1 [Return] : Object[] [[]] : Object | | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | semmle.label | a2 : Object[] [[]] : Object | | Test.java:265:22:265:23 | a2 [Return] : Object[] [[]] : Object | semmle.label | a2 [Return] : Object[] [[]] : Object | +| Test.java:265:22:265:23 | a2 [Return] : Object[] [[]] : Object | semmle.label | a2 [Return] : Object[] [[]] : Object | | Test.java:266:21:266:22 | a1 [post update] : Object[] [[]] : Object | semmle.label | a1 [post update] : Object[] [[]] : Object | | Test.java:266:29:266:30 | a2 : Object[] [[]] : Object | semmle.label | a2 : Object[] [[]] : Object | | Test.java:266:29:266:33 | ...[...] : Object | semmle.label | ...[...] : Object | | Test.java:267:21:267:22 | a2 [post update] : Object[] [[]] : Object | semmle.label | a2 [post update] : Object[] [[]] : Object | +| Test.java:267:21:267:22 | a2 [post update] : Object[] [[]] : Object | semmle.label | a2 [post update] : Object[] [[]] : Object | +| Test.java:267:29:267:30 | a1 : Object[] [[]] : Object | semmle.label | a1 : Object[] [[]] : Object | | Test.java:267:29:267:30 | a1 : Object[] [[]] : Object | semmle.label | a1 : Object[] [[]] : Object | | Test.java:267:29:267:33 | ...[...] : Object | semmle.label | ...[...] : Object | +| Test.java:267:29:267:33 | ...[...] : Object | semmle.label | ...[...] : Object | | Test.java:269:18:269:20 | out : Object[] [[]] : Object | semmle.label | out : Object[] [[]] : Object | | Test.java:269:18:269:23 | ...[...] | semmle.label | ...[...] | | Test.java:273:33:273:62 | of(...) : Stream [] : Object | semmle.label | of(...) : Stream [] : Object | @@ -1040,6 +1048,7 @@ subpaths | Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:264:21:264:21 | x : Object | Test.java:264:18:264:18 | a [Return] : Object[] [[]] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | | Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 [Return] : Object[] [[]] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | | Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 [Return] : Object[] [[]] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | +| Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 [Return] : Object[] [[]] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | | Test.java:289:29:289:31 | out : Stream [] : Object | Test.java:17:22:17:38 | s : Stream [] : Object | Test.java:17:50:17:68 | next(...) : Object | Test.java:289:18:289:32 | getElement(...) | | Test.java:319:29:319:31 | out : Stream [] : Object | Test.java:17:22:17:38 | s : Stream [] : Object | Test.java:17:50:17:68 | next(...) : Object | Test.java:319:18:319:32 | getElement(...) | | Test.java:335:29:335:31 | out : Stream [] : Object | Test.java:17:22:17:38 | s : Stream [] : Object | Test.java:17:50:17:68 | next(...) : Object | Test.java:335:18:335:32 | getElement(...) |