From 7668499885c655619b0168000dd667e2dd7805a5 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 1 Jul 2026 10:39:14 +0100 Subject: [PATCH 1/5] C++: Add a test that needs an access path at the source. --- .../dataflow/external-models/flow.ext.yml | 1 + .../dataflow/external-models/sinks.expected | 1 + .../dataflow/external-models/test.cpp | 14 +++++++++++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/cpp/ql/test/library-tests/dataflow/external-models/flow.ext.yml b/cpp/ql/test/library-tests/dataflow/external-models/flow.ext.yml index 130e13a92571..1327617425af 100644 --- a/cpp/ql/test/library-tests/dataflow/external-models/flow.ext.yml +++ b/cpp/ql/test/library-tests/dataflow/external-models/flow.ext.yml @@ -4,6 +4,7 @@ extensions: extensible: sourceModel data: # namespace, type, subtypes, name, signature, ext, output, kind, provenance - ["", "", False, "ymlSource", "", "", "ReturnValue", "local", "manual"] + - ["", "", False, "ymlFieldSource", "", "", "ReturnValue.Field[SourceWrapper::value]", "local", "manual"] - addsTo: pack: codeql/cpp-all extensible: sinkModel diff --git a/cpp/ql/test/library-tests/dataflow/external-models/sinks.expected b/cpp/ql/test/library-tests/dataflow/external-models/sinks.expected index a1f44de81589..04071183829c 100644 --- a/cpp/ql/test/library-tests/dataflow/external-models/sinks.expected +++ b/cpp/ql/test/library-tests/dataflow/external-models/sinks.expected @@ -23,3 +23,4 @@ | test.cpp:201:10:201:10 | x | test-sink | | test.cpp:218:11:218:11 | x | test-sink | | test.cpp:224:11:224:11 | c | test-sink | +| test.cpp:236:18:236:22 | value | test-sink | diff --git a/cpp/ql/test/library-tests/dataflow/external-models/test.cpp b/cpp/ql/test/library-tests/dataflow/external-models/test.cpp index ebb20bab6497..f1ec1562606b 100644 --- a/cpp/ql/test/library-tests/dataflow/external-models/test.cpp +++ b/cpp/ql/test/library-tests/dataflow/external-models/test.cpp @@ -223,4 +223,16 @@ void test_reverse_flow(unsigned i, unsigned j) { char c = s[j]; ymlSink(c); // $ ir } -} \ No newline at end of file +} + +struct SourceWrapper { + int value; +}; + +SourceWrapper ymlFieldSource(); + +void test_source_access_path() { + SourceWrapper wrapper = ymlFieldSource(); + ymlSink(wrapper.value); // $ MISSING: ir +} + From 717a846ab0a3e1716598f3da12f231abf9c2f216 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 1 Jul 2026 10:48:05 +0100 Subject: [PATCH 2/5] C++: Support for access path at sources and sinks. --- .../semmle/code/cpp/dataflow/ExternalFlow.qll | 5 +- .../cpp/dataflow/internal/FlowSummaryImpl.qll | 88 +++++++++++++++++-- .../ir/dataflow/internal/DataFlowNodes.qll | 37 +++++++- .../ir/dataflow/internal/DataFlowPrivate.qll | 2 + .../cpp/ir/dataflow/internal/DataFlowUtil.qll | 6 ++ 5 files changed, 128 insertions(+), 10 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll index 29da7f7204c0..123d99ca75c0 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll @@ -115,6 +115,7 @@ private import new.DataFlow private import semmle.code.cpp.controlflow.IRGuards private import semmle.code.cpp.ir.dataflow.internal.DataFlowPrivate as Private private import semmle.code.cpp.ir.dataflow.internal.DataFlowUtil +private import semmle.code.cpp.ir.dataflow.internal.DataFlowNodes as Nodes private import internal.FlowSummaryImpl private import internal.FlowSummaryImpl::Public private import internal.FlowSummaryImpl::Private @@ -952,9 +953,7 @@ private module Cached { */ cached predicate sourceNode(DataFlow::Node node, string kind, string model) { - exists(SourceSinkInterpretationInput::InterpretNode n | - isSourceNode(n, kind, model) and n.asNode() = node - ) + node.(Nodes::FlowSummaryNode).isSource(kind, model) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll index 66b33b1ed522..806062825dc6 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll @@ -13,13 +13,32 @@ private import semmle.code.cpp.dataflow.ExternalFlow private import semmle.code.cpp.ir.IR module Input implements InputSig { - private import codeql.util.Void - class SummarizedCallableBase = Function; - class SourceBase = Void; + abstract private class SourceSinkBase extends Element { + /** Gets the call associated with this element, if any. */ + CallInstruction getCall() { none() } + + /** Gets the function associated with this element, if any. */ + Function getFunction() { none() } + + /** Gets the enclosing function of this element. */ + abstract Declaration getEnclosingFunction(); + } + + abstract class SourceBase extends SourceSinkBase { } + + abstract class SinkBase extends SourceSinkBase { } + + private class SourceSinkCall extends SourceBase, SinkBase instanceof Call { + CallInstruction call; + + SourceSinkCall() { call.getUnconvertedResultExpression() = this } - class SinkBase = Void; + final override CallInstruction getCall() { result = call } + + final override Declaration getEnclosingFunction() { result = Call.super.getEnclosingFunction() } + } class FlowSummaryCallBase = CallInstruction; @@ -149,9 +168,46 @@ private module StepsInput implements Impl::Private::StepsInputSig { ) } - DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } + DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { + result.asSourceCallable() = source.getEnclosingFunction() + } + + private ArgumentNode getSourceNodeArgument( + Input::SourceBase source, Impl::Private::SummaryComponent sc + ) { + exists(Position pos, DataFlowCall call | + sc = Impl::Private::SummaryComponent::argument(pos) and + source.getCall() = call.asCallInstruction() and + result.argumentOf(call, pos) + ) + } - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } + Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { + exists(ReturnKind rk, DataFlowCall call | + s.head() = Impl::Private::SummaryComponent::return(rk) and + source.getCall() = call.asCallInstruction() and + result = getAnOutNode(call, rk) + ) + or + exists(Position pos, DataFlowCallable callable | + s.head() = Impl::Private::SummaryComponent::parameter(pos) and + result.(ParameterNode).isParameterOf(callable, pos) + | + exists(ArgumentNode arg, DataFlowCall call | + arg = getSourceNodeArgument(source, s.tail().headOfSingleton()) and + arg.argumentOf(call, pos) and + callable = call.getStaticCallTarget() + ) + or + source.getFunction() = callable.asSourceCallable() + ) + or + exists(Position pos | + s.head() = Impl::Private::SummaryComponent::argument(pos) and + result.(PostUpdateNode).getPreUpdateNode() = + getSourceNodeArgument(source, s.headOfSingleton()) + ) + } Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } @@ -310,3 +366,23 @@ module Private { } module Public = Impl::Public; + +private class SourceModelCall extends Public::SourceElement instanceof Call { + private string namespace; + private string type; + private boolean subtypes; + private string name; + private string signature; + private string ext; + + SourceModelCall() { + sourceModel(namespace, type, subtypes, name, signature, ext, _, _, _, _) and + this.getTarget() = interpretElement(namespace, type, subtypes, name, signature, ext) + } + + override predicate isSource( + string output, string kind, Public::Provenance provenance, string model + ) { + sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, provenance, model) + } +} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll index abcff398420c..53031b9f118b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll @@ -1534,11 +1534,46 @@ class FlowSummaryNode extends Node, TFlowSummaryNode { result = this.getSummaryNode().getSummarizedCallable() } + /** Gets the source element that this node belongs to, if any. */ + FlowSummaryImpl::Public::SourceElement getSourceElement() { + result = this.getSummaryNode().getSourceElement() + } + + /** Gets the sink element that this node belongs to, if any. */ + FlowSummaryImpl::Public::SinkElement getSinkElement() { + result = this.getSummaryNode().getSinkElement() + } + + /** Holds if this node is a source node of kind `kind`. */ + predicate isSource(string kind, string model) { + this.getSummaryNode().(FlowSummaryImpl::Private::SourceOutputNode).isEntry(kind, model) + } + + /** Holds if this node is a sink node of kind `kind`. */ + predicate isSink(string kind, string model) { + this.getSummaryNode().(FlowSummaryImpl::Private::SinkInputNode).isExit(kind, model) + } + + /** + * Gets the enclosing callable. For a `FlowSummaryNode` this is always the + * summarized function this node is part of. + */ override DataFlowCallable getEnclosingCallable() { result = FlowSummaryImpl::Private::getEnclosingCallable(this.getSummaryNode()) + or + // TODO: This could actually be done by the shared library. + result.asSourceCallable() = this.getSourceElement().getEnclosingFunction() + or + result.asSourceCallable() = this.getSinkElement().getEnclosingFunction() } - override Location getLocationImpl() { result = this.getSummarizedCallable().getLocation() } + override Location getLocationImpl() { + result = this.getSummarizedCallable().getLocation() + or + result = this.getSourceElement().getLocation() + or + result = this.getSinkElement().getLocation() + } override string toStringImpl() { result = this.getSummaryNode().toString() } } 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 cdcbaa438d3a..c2d205174768 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 @@ -121,6 +121,8 @@ private module Cached { // models-as-data summarized flow FlowSummaryImpl::Private::Steps::summaryJumpStep(n1.(FlowSummaryNode).getSummaryNode(), n2.(FlowSummaryNode).getSummaryNode()) + or + FlowSummaryImpl::Private::Steps::sourceJumpStep(n1.(FlowSummaryNode).getSummaryNode(), n2) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll index 2e3274c82c7c..1de1ae7931dd 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll @@ -160,6 +160,12 @@ private module Cached { // models-as-data summarized flow FlowSummaryImpl::Private::Steps::summaryLocalStep(nodeFrom, nodeTo.(FlowSummaryNode).getSummaryNode(), true, model) + or + FlowSummaryImpl::Private::Steps::sourceLocalStep(nodeFrom.(FlowSummaryNode).getSummaryNode(), + nodeTo, model) + or + FlowSummaryImpl::Private::Steps::sinkLocalStep(nodeFrom, + nodeTo.(FlowSummaryNode).getSummaryNode(), model) } private predicate simpleInstructionLocalFlowStep(Operand opFrom, Instruction iTo) { From c2f7bf107a4c11c6feb3bbe7faa8bd0712b65fe2 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 1 Jul 2026 12:24:48 +0100 Subject: [PATCH 3/5] C++: Accept test changes. --- .../dataflow/external-models/flow.expected | 342 +++++++++--------- .../dataflow/external-models/sources.expected | 64 ++-- .../dataflow/external-models/test.cpp | 2 +- .../models-as-data/testModels.expected | 29 ++ 4 files changed, 237 insertions(+), 200 deletions(-) diff --git a/cpp/ql/test/library-tests/dataflow/external-models/flow.expected b/cpp/ql/test/library-tests/dataflow/external-models/flow.expected index 641804364501..e59afbd37db7 100644 --- a/cpp/ql/test/library-tests/dataflow/external-models/flow.expected +++ b/cpp/ql/test/library-tests/dataflow/external-models/flow.expected @@ -23,98 +23,99 @@ models | 22 | Source: ; ; false; WinHttpQueryHeadersEx; ; ; Argument[*6]; remote; manual | | 23 | Source: ; ; false; WinHttpReadData; ; ; Argument[*1]; remote; manual | | 24 | Source: ; ; false; WinHttpReadDataEx; ; ; Argument[*1]; remote; manual | -| 25 | Source: ; ; false; ymlSource; ; ; ReturnValue; local; manual | -| 26 | Source: Azure::Core::Http; RawResponse; true; ExtractBodyStream; ; ; ReturnValue[*]; remote; manual | -| 27 | Source: Azure::Core::Http; RawResponse; true; GetBody; ; ; ReturnValue[*]; remote; manual | -| 28 | Source: Azure::Core::Http; RawResponse; true; GetHeaders; ; ; ReturnValue[*]; remote; manual | -| 29 | Source: Azure::Core::Http; Request; true; GetBodyStream; ; ; ReturnValue[*]; remote; manual | -| 30 | Source: Azure::Core::Http; Request; true; GetHeader; ; ; ReturnValue; remote; manual | -| 31 | Source: Azure::Core::Http; Request; true; GetHeaders; ; ; ReturnValue; remote; manual | -| 32 | Source: boost::asio; ; false; read_until; ; ; Argument[*1]; remote; manual | -| 33 | Summary: ; ; false; CommandLineToArgvA; ; ; Argument[*0]; ReturnValue[**]; taint; manual | -| 34 | Summary: ; ; false; CreateRemoteThread; ; ; Argument[@4]; Argument[3].Parameter[@0]; value; manual | -| 35 | Summary: ; ; false; CreateRemoteThreadEx; ; ; Argument[@4]; Argument[3].Parameter[@0]; value; manual | -| 36 | Summary: ; ; false; CreateThread; ; ; Argument[@3]; Argument[2].Parameter[@0]; value; manual | -| 37 | Summary: ; ; false; ReadFileEx; ; ; Argument[*3].Field[@hEvent]; Argument[4].Parameter[*2].Field[@hEvent]; value; manual | -| 38 | Summary: ; ; false; RtlCopyDeviceMemory; ; ; Argument[*@1]; Argument[*@0]; value; manual | -| 39 | Summary: ; ; false; RtlCopyMemory; ; ; Argument[*@1]; Argument[*@0]; value; manual | -| 40 | Summary: ; ; false; RtlCopyMemoryNonTemporal; ; ; Argument[*@1]; Argument[*@0]; value; manual | -| 41 | Summary: ; ; false; RtlCopyUnicodeString; ; ; Argument[*1].Field[*Buffer]; Argument[*0].Field[*Buffer]; value; manual | -| 42 | Summary: ; ; false; RtlCopyVolatileMemory; ; ; Argument[*@1]; Argument[*@0]; value; manual | -| 43 | Summary: ; ; false; RtlInitUnicodeString; ; ; Argument[*1]; Argument[*0].Field[*Buffer]; value; manual | -| 44 | Summary: ; ; false; RtlMoveMemory; ; ; Argument[*@1]; Argument[*@0]; value; manual | -| 45 | Summary: ; ; false; RtlMoveVolatileMemory; ; ; Argument[*@1]; Argument[*@0]; value; manual | -| 46 | Summary: ; ; false; WinHttpCrackUrl; ; ; Argument[*0]; Argument[*3]; taint; manual | -| 47 | Summary: ; ; false; callWithArgument; ; ; Argument[1]; Argument[0].Parameter[0]; value; manual | -| 48 | Summary: ; ; false; callWithNonTypeTemplate; (const T &); ; Argument[*0]; ReturnValue; value; manual | -| 49 | Summary: ; ; false; pthread_create; ; ; Argument[@3]; Argument[2].Parameter[@0]; value; manual | -| 50 | Summary: ; ; false; read_field_from_struct; ; ; Argument[*0].Field[MyNamespace::MyStructInNamespace::myField]; ReturnValue; value; manual | -| 51 | Summary: ; ; false; read_field_from_struct_2; ; ; Argument[*0].Field[MyGlobalStruct::myField]; ReturnValue; value; manual | -| 52 | Summary: ; ; false; ymlStepGenerated; ; ; Argument[0]; ReturnValue; taint; df-generated | -| 53 | Summary: ; ; false; ymlStepManual; ; ; Argument[0]; ReturnValue; taint; manual | -| 54 | Summary: ; ; false; ymlStepManual_with_body; ; ; Argument[0]; ReturnValue; taint; manual | -| 55 | Summary: ; MyString; true; operator[]; ; ; Argument[-1]; ReturnValue[*]; taint; manual | -| 56 | Summary: ; MyString; true; operator[]; ; ; ReturnValue[*]; Argument[-1]; taint; manual | -| 57 | Summary: ; ReverseFlow; true; get_ptr; ; ; ReturnValue[*]; Argument[-1].Field[ReverseFlow::value]; value; manual | -| 58 | Summary: ; TemplateClass1; true; templateFunction2; (U,V); ; Argument[1]; ReturnValue; value; manual | -| 59 | Summary: ; TemplateClass1; false; templateFunction; (T,U); ; Argument[0]; ReturnValue; value; manual | -| 60 | Summary: ; TemplateClass2; true; function; (U,T); ; Argument[1]; ReturnValue; value; manual | -| 61 | Summary: Azure::Core::IO; BodyStream; true; Read; ; ; Argument[-1]; Argument[*0]; taint; manual | -| 62 | Summary: Azure::Core::IO; BodyStream; true; ReadToCount; ; ; Argument[-1]; Argument[*0]; taint; manual | -| 63 | Summary: Azure::Core::IO; BodyStream; true; ReadToEnd; ; ; Argument[-1]; ReturnValue.Element; taint; manual | -| 64 | Summary: Azure; Nullable; true; Value; ; ; Argument[-1]; ReturnValue[*]; taint; manual | -| 65 | Summary: boost::asio; ; false; buffer; ; ; Argument[*0]; ReturnValue; taint; manual | +| 25 | Source: ; ; false; ymlFieldSource; ; ; ReturnValue.Field[SourceWrapper::value]; local; manual | +| 26 | Source: ; ; false; ymlSource; ; ; ReturnValue; local; manual | +| 27 | Source: Azure::Core::Http; RawResponse; true; ExtractBodyStream; ; ; ReturnValue[*]; remote; manual | +| 28 | Source: Azure::Core::Http; RawResponse; true; GetBody; ; ; ReturnValue[*]; remote; manual | +| 29 | Source: Azure::Core::Http; RawResponse; true; GetHeaders; ; ; ReturnValue[*]; remote; manual | +| 30 | Source: Azure::Core::Http; Request; true; GetBodyStream; ; ; ReturnValue[*]; remote; manual | +| 31 | Source: Azure::Core::Http; Request; true; GetHeader; ; ; ReturnValue; remote; manual | +| 32 | Source: Azure::Core::Http; Request; true; GetHeaders; ; ; ReturnValue; remote; manual | +| 33 | Source: boost::asio; ; false; read_until; ; ; Argument[*1]; remote; manual | +| 34 | Summary: ; ; false; CommandLineToArgvA; ; ; Argument[*0]; ReturnValue[**]; taint; manual | +| 35 | Summary: ; ; false; CreateRemoteThread; ; ; Argument[@4]; Argument[3].Parameter[@0]; value; manual | +| 36 | Summary: ; ; false; CreateRemoteThreadEx; ; ; Argument[@4]; Argument[3].Parameter[@0]; value; manual | +| 37 | Summary: ; ; false; CreateThread; ; ; Argument[@3]; Argument[2].Parameter[@0]; value; manual | +| 38 | Summary: ; ; false; ReadFileEx; ; ; Argument[*3].Field[@hEvent]; Argument[4].Parameter[*2].Field[@hEvent]; value; manual | +| 39 | Summary: ; ; false; RtlCopyDeviceMemory; ; ; Argument[*@1]; Argument[*@0]; value; manual | +| 40 | Summary: ; ; false; RtlCopyMemory; ; ; Argument[*@1]; Argument[*@0]; value; manual | +| 41 | Summary: ; ; false; RtlCopyMemoryNonTemporal; ; ; Argument[*@1]; Argument[*@0]; value; manual | +| 42 | Summary: ; ; false; RtlCopyUnicodeString; ; ; Argument[*1].Field[*Buffer]; Argument[*0].Field[*Buffer]; value; manual | +| 43 | Summary: ; ; false; RtlCopyVolatileMemory; ; ; Argument[*@1]; Argument[*@0]; value; manual | +| 44 | Summary: ; ; false; RtlInitUnicodeString; ; ; Argument[*1]; Argument[*0].Field[*Buffer]; value; manual | +| 45 | Summary: ; ; false; RtlMoveMemory; ; ; Argument[*@1]; Argument[*@0]; value; manual | +| 46 | Summary: ; ; false; RtlMoveVolatileMemory; ; ; Argument[*@1]; Argument[*@0]; value; manual | +| 47 | Summary: ; ; false; WinHttpCrackUrl; ; ; Argument[*0]; Argument[*3]; taint; manual | +| 48 | Summary: ; ; false; callWithArgument; ; ; Argument[1]; Argument[0].Parameter[0]; value; manual | +| 49 | Summary: ; ; false; callWithNonTypeTemplate; (const T &); ; Argument[*0]; ReturnValue; value; manual | +| 50 | Summary: ; ; false; pthread_create; ; ; Argument[@3]; Argument[2].Parameter[@0]; value; manual | +| 51 | Summary: ; ; false; read_field_from_struct; ; ; Argument[*0].Field[MyNamespace::MyStructInNamespace::myField]; ReturnValue; value; manual | +| 52 | Summary: ; ; false; read_field_from_struct_2; ; ; Argument[*0].Field[MyGlobalStruct::myField]; ReturnValue; value; manual | +| 53 | Summary: ; ; false; ymlStepGenerated; ; ; Argument[0]; ReturnValue; taint; df-generated | +| 54 | Summary: ; ; false; ymlStepManual; ; ; Argument[0]; ReturnValue; taint; manual | +| 55 | Summary: ; ; false; ymlStepManual_with_body; ; ; Argument[0]; ReturnValue; taint; manual | +| 56 | Summary: ; MyString; true; operator[]; ; ; Argument[-1]; ReturnValue[*]; taint; manual | +| 57 | Summary: ; MyString; true; operator[]; ; ; ReturnValue[*]; Argument[-1]; taint; manual | +| 58 | Summary: ; ReverseFlow; true; get_ptr; ; ; ReturnValue[*]; Argument[-1].Field[ReverseFlow::value]; value; manual | +| 59 | Summary: ; TemplateClass1; true; templateFunction2; (U,V); ; Argument[1]; ReturnValue; value; manual | +| 60 | Summary: ; TemplateClass1; false; templateFunction; (T,U); ; Argument[0]; ReturnValue; value; manual | +| 61 | Summary: ; TemplateClass2; true; function; (U,T); ; Argument[1]; ReturnValue; value; manual | +| 62 | Summary: Azure::Core::IO; BodyStream; true; Read; ; ; Argument[-1]; Argument[*0]; taint; manual | +| 63 | Summary: Azure::Core::IO; BodyStream; true; ReadToCount; ; ; Argument[-1]; Argument[*0]; taint; manual | +| 64 | Summary: Azure::Core::IO; BodyStream; true; ReadToEnd; ; ; Argument[-1]; ReturnValue.Element; taint; manual | +| 65 | Summary: Azure; Nullable; true; Value; ; ; Argument[-1]; ReturnValue[*]; taint; manual | +| 66 | Summary: boost::asio; ; false; buffer; ; ; Argument[*0]; ReturnValue; taint; manual | edges -| asio_streams.cpp:87:34:87:44 | read_until output argument | asio_streams.cpp:91:7:91:17 | recv_buffer | provenance | Src:MaD:32 | -| asio_streams.cpp:87:34:87:44 | read_until output argument | asio_streams.cpp:93:29:93:39 | *recv_buffer | provenance | Src:MaD:32 Sink:MaD:2 | +| asio_streams.cpp:87:2:87:24 | call to read_until | asio_streams.cpp:91:7:91:17 | recv_buffer | provenance | Src:MaD:33 MaD:33 | +| asio_streams.cpp:87:2:87:24 | call to read_until | asio_streams.cpp:93:29:93:39 | *recv_buffer | provenance | Src:MaD:33 MaD:33 Sink:MaD:2 | | asio_streams.cpp:97:37:97:44 | call to source | asio_streams.cpp:98:7:98:14 | send_str | provenance | TaintFunction | | asio_streams.cpp:97:37:97:44 | call to source | asio_streams.cpp:100:64:100:71 | *send_str | provenance | TaintFunction | | asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:100:44:100:62 | call to buffer | provenance | | | asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:101:7:101:17 | send_buffer | provenance | | | asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:103:29:103:39 | *send_buffer | provenance | Sink:MaD:2 | -| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:100:44:100:62 | call to buffer | provenance | MaD:65 | -| azure.cpp:253:48:253:60 | *call to GetBodyStream | azure.cpp:253:48:253:60 | *call to GetBodyStream | provenance | Src:MaD:29 | +| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:100:44:100:62 | call to buffer | provenance | MaD:66 | | azure.cpp:253:48:253:60 | *call to GetBodyStream | azure.cpp:257:5:257:8 | *resp | provenance | | | azure.cpp:253:48:253:60 | *call to GetBodyStream | azure.cpp:262:5:262:8 | *resp | provenance | | | azure.cpp:253:48:253:60 | *call to GetBodyStream | azure.cpp:266:38:266:41 | *resp | provenance | | -| azure.cpp:257:5:257:8 | *resp | azure.cpp:257:16:257:21 | Read output argument | provenance | MaD:61 | +| azure.cpp:253:48:253:60 | call to GetBodyStream | azure.cpp:253:48:253:60 | *call to GetBodyStream | provenance | Src:MaD:30 MaD:30 | +| azure.cpp:257:5:257:8 | *resp | azure.cpp:257:16:257:21 | Read output argument | provenance | MaD:62 | | azure.cpp:257:16:257:21 | Read output argument | azure.cpp:258:10:258:16 | * ... | provenance | | -| azure.cpp:262:5:262:8 | *resp | azure.cpp:262:23:262:28 | ReadToCount output argument | provenance | MaD:62 | +| azure.cpp:262:5:262:8 | *resp | azure.cpp:262:23:262:28 | ReadToCount output argument | provenance | MaD:63 | | azure.cpp:262:23:262:28 | ReadToCount output argument | azure.cpp:263:10:263:16 | * ... | provenance | | -| azure.cpp:266:38:266:41 | *resp | azure.cpp:266:44:266:52 | call to ReadToEnd [element] | provenance | MaD:63 | +| azure.cpp:266:38:266:41 | *resp | azure.cpp:266:44:266:52 | call to ReadToEnd [element] | provenance | MaD:64 | | azure.cpp:266:44:266:52 | call to ReadToEnd [element] | azure.cpp:266:44:266:52 | call to ReadToEnd [element] | provenance | | | azure.cpp:266:44:266:52 | call to ReadToEnd [element] | azure.cpp:267:10:267:12 | vec [element] | provenance | | | azure.cpp:267:10:267:12 | vec [element] | azure.cpp:267:10:267:12 | vec | provenance | | -| azure.cpp:273:62:273:64 | call to GetHeaders | azure.cpp:273:62:273:64 | call to GetHeaders | provenance | Src:MaD:28 | +| azure.cpp:273:52:273:61 | call to GetHeaders | azure.cpp:273:62:273:64 | call to GetHeaders | provenance | Src:MaD:29 MaD:29 | | azure.cpp:273:62:273:64 | call to GetHeaders | azure.cpp:274:14:274:29 | call to operator[] | provenance | TaintFunction | | azure.cpp:273:62:273:64 | call to GetHeaders | azure.cpp:274:14:274:29 | call to operator[] | provenance | TaintFunction | | azure.cpp:273:62:273:64 | call to GetHeaders | azure.cpp:274:14:274:29 | call to operator[] | provenance | TaintFunction | | azure.cpp:274:14:274:29 | call to operator[] | azure.cpp:274:10:274:29 | call to operator[] | provenance | | | azure.cpp:274:14:274:29 | call to operator[] | azure.cpp:274:14:274:29 | call to operator[] | provenance | | -| azure.cpp:277:45:277:47 | call to GetBody | azure.cpp:277:45:277:47 | call to GetBody | provenance | Src:MaD:27 | +| azure.cpp:277:38:277:44 | call to GetBody | azure.cpp:277:45:277:47 | call to GetBody | provenance | Src:MaD:28 MaD:28 | | azure.cpp:277:45:277:47 | call to GetBody | azure.cpp:278:10:278:13 | body | provenance | | | azure.cpp:277:45:277:47 | call to GetBody | azure.cpp:278:10:278:13 | body | provenance | | | azure.cpp:278:10:278:13 | body | azure.cpp:278:10:278:13 | body | provenance | | -| azure.cpp:281:68:281:84 | *call to ExtractBodyStream | azure.cpp:281:68:281:84 | *call to ExtractBodyStream | provenance | Src:MaD:26 | | azure.cpp:281:68:281:84 | *call to ExtractBodyStream | azure.cpp:282:21:282:23 | *call to get | provenance | | -| azure.cpp:282:21:282:23 | *call to get | azure.cpp:282:28:282:36 | call to ReadToEnd [element] | provenance | MaD:63 | +| azure.cpp:281:68:281:84 | call to ExtractBodyStream | azure.cpp:281:68:281:84 | *call to ExtractBodyStream | provenance | Src:MaD:27 MaD:27 | +| azure.cpp:282:21:282:23 | *call to get | azure.cpp:282:28:282:36 | call to ReadToEnd [element] | provenance | MaD:64 | | azure.cpp:282:28:282:36 | call to ReadToEnd [element] | azure.cpp:282:10:282:38 | call to ReadToEnd | provenance | | | azure.cpp:282:28:282:36 | call to ReadToEnd [element] | azure.cpp:282:28:282:36 | call to ReadToEnd [element] | provenance | | -| azure.cpp:289:24:289:56 | call to GetHeader | azure.cpp:289:63:289:65 | call to Value | provenance | MaD:64 | +| azure.cpp:289:24:289:56 | call to GetHeader | azure.cpp:289:63:289:65 | call to Value | provenance | MaD:65 | | azure.cpp:289:32:289:40 | call to GetHeader | azure.cpp:289:24:289:56 | call to GetHeader | provenance | | -| azure.cpp:289:32:289:40 | call to GetHeader | azure.cpp:289:32:289:40 | call to GetHeader | provenance | Src:MaD:30 | +| azure.cpp:289:32:289:40 | call to GetHeader | azure.cpp:289:32:289:40 | call to GetHeader | provenance | Src:MaD:31 MaD:31 | | azure.cpp:289:63:289:65 | call to Value | azure.cpp:289:63:289:65 | call to Value | provenance | | | azure.cpp:289:63:289:65 | call to Value | azure.cpp:290:10:290:20 | headerValue | provenance | | | azure.cpp:289:63:289:65 | call to Value | azure.cpp:290:10:290:20 | headerValue | provenance | | | azure.cpp:290:10:290:20 | headerValue | azure.cpp:290:10:290:20 | headerValue | provenance | | -| azure.cpp:293:58:293:67 | call to GetHeaders | azure.cpp:293:58:293:67 | call to GetHeaders | provenance | Src:MaD:31 | +| azure.cpp:293:58:293:67 | call to GetHeaders | azure.cpp:293:58:293:67 | call to GetHeaders | provenance | Src:MaD:32 MaD:32 | | azure.cpp:293:58:293:67 | call to GetHeaders | azure.cpp:294:38:294:53 | call to operator[] | provenance | TaintFunction | | azure.cpp:294:38:294:53 | call to operator[] | azure.cpp:295:10:295:20 | contentType | provenance | | | azure.cpp:294:38:294:53 | call to operator[] | azure.cpp:295:10:295:20 | contentType | provenance | | | azure.cpp:295:10:295:20 | contentType | azure.cpp:295:10:295:20 | contentType | provenance | | | test.cpp:7:47:7:52 | value2 | test.cpp:7:64:7:69 | value2 | provenance | | | test.cpp:7:64:7:69 | value2 | test.cpp:7:5:7:30 | *ymlStepGenerated_with_body | provenance | | -| test.cpp:10:10:10:18 | call to ymlSource | test.cpp:10:10:10:18 | call to ymlSource | provenance | Src:MaD:25 | +| test.cpp:10:10:10:18 | call to ymlSource | test.cpp:10:10:10:18 | call to ymlSource | provenance | Src:MaD:26 MaD:26 | | test.cpp:10:10:10:18 | call to ymlSource | test.cpp:14:10:14:10 | x | provenance | Sink:MaD:1 | | test.cpp:10:10:10:18 | call to ymlSource | test.cpp:17:24:17:24 | x | provenance | | | test.cpp:10:10:10:18 | call to ymlSource | test.cpp:21:27:21:27 | x | provenance | | @@ -122,13 +123,13 @@ edges | test.cpp:10:10:10:18 | call to ymlSource | test.cpp:32:41:32:41 | x | provenance | | | test.cpp:17:10:17:22 | call to ymlStepManual | test.cpp:17:10:17:22 | call to ymlStepManual | provenance | | | test.cpp:17:10:17:22 | call to ymlStepManual | test.cpp:18:10:18:10 | y | provenance | Sink:MaD:1 | -| test.cpp:17:24:17:24 | x | test.cpp:17:10:17:22 | call to ymlStepManual | provenance | MaD:53 | +| test.cpp:17:24:17:24 | x | test.cpp:17:10:17:22 | call to ymlStepManual | provenance | MaD:54 | | test.cpp:21:10:21:25 | call to ymlStepGenerated | test.cpp:21:10:21:25 | call to ymlStepGenerated | provenance | | | test.cpp:21:10:21:25 | call to ymlStepGenerated | test.cpp:22:10:22:10 | z | provenance | Sink:MaD:1 | -| test.cpp:21:27:21:27 | x | test.cpp:21:10:21:25 | call to ymlStepGenerated | provenance | MaD:52 | +| test.cpp:21:27:21:27 | x | test.cpp:21:10:21:25 | call to ymlStepGenerated | provenance | MaD:53 | | test.cpp:25:11:25:33 | call to ymlStepManual_with_body | test.cpp:25:11:25:33 | call to ymlStepManual_with_body | provenance | | | test.cpp:25:11:25:33 | call to ymlStepManual_with_body | test.cpp:26:10:26:11 | y2 | provenance | Sink:MaD:1 | -| test.cpp:25:35:25:35 | x | test.cpp:25:11:25:33 | call to ymlStepManual_with_body | provenance | MaD:54 | +| test.cpp:25:35:25:35 | x | test.cpp:25:11:25:33 | call to ymlStepManual_with_body | provenance | MaD:55 | | test.cpp:32:11:32:36 | call to ymlStepGenerated_with_body | test.cpp:32:11:32:36 | call to ymlStepGenerated_with_body | provenance | | | test.cpp:32:11:32:36 | call to ymlStepGenerated_with_body | test.cpp:33:10:33:11 | z2 | provenance | Sink:MaD:1 | | test.cpp:32:41:32:41 | x | test.cpp:7:47:7:52 | value2 | provenance | | @@ -138,84 +139,87 @@ edges | test.cpp:48:13:48:13 | *s [x] | test.cpp:48:16:48:16 | x | provenance | Sink:MaD:1 | | test.cpp:56:2:56:2 | *s [post update] [x] | test.cpp:59:55:59:64 | *& ... [x] | provenance | | | test.cpp:56:2:56:18 | ... = ... | test.cpp:56:2:56:2 | *s [post update] [x] | provenance | | -| test.cpp:56:8:56:16 | call to ymlSource | test.cpp:56:2:56:18 | ... = ... | provenance | Src:MaD:25 | -| test.cpp:59:55:59:64 | *& ... [x] | test.cpp:46:30:46:32 | *arg [x] | provenance | MaD:49 | +| test.cpp:56:8:56:16 | call to ymlSource | test.cpp:56:2:56:18 | ... = ... | provenance | Src:MaD:26 MaD:26 | +| test.cpp:59:55:59:64 | *& ... [x] | test.cpp:46:30:46:32 | *arg [x] | provenance | MaD:50 | | test.cpp:68:22:68:22 | y | test.cpp:69:11:69:11 | y | provenance | Sink:MaD:1 | | test.cpp:74:22:74:22 | y | test.cpp:75:11:75:11 | y | provenance | Sink:MaD:1 | | test.cpp:82:22:82:22 | y | test.cpp:83:11:83:11 | y | provenance | Sink:MaD:1 | | test.cpp:88:22:88:22 | y | test.cpp:89:11:89:11 | y | provenance | Sink:MaD:1 | -| test.cpp:94:10:94:18 | call to ymlSource | test.cpp:94:10:94:18 | call to ymlSource | provenance | Src:MaD:25 | +| test.cpp:94:10:94:18 | call to ymlSource | test.cpp:94:10:94:18 | call to ymlSource | provenance | Src:MaD:26 MaD:26 | | test.cpp:94:10:94:18 | call to ymlSource | test.cpp:97:26:97:26 | x | provenance | | | test.cpp:94:10:94:18 | call to ymlSource | test.cpp:101:26:101:26 | x | provenance | | | test.cpp:94:10:94:18 | call to ymlSource | test.cpp:103:63:103:63 | x | provenance | | | test.cpp:94:10:94:18 | call to ymlSource | test.cpp:104:62:104:62 | x | provenance | | -| test.cpp:97:26:97:26 | x | test.cpp:68:22:68:22 | y | provenance | MaD:47 | -| test.cpp:101:26:101:26 | x | test.cpp:74:22:74:22 | y | provenance | MaD:47 | -| test.cpp:103:63:103:63 | x | test.cpp:82:22:82:22 | y | provenance | MaD:47 | -| test.cpp:104:62:104:62 | x | test.cpp:88:22:88:22 | y | provenance | MaD:47 | -| test.cpp:114:10:114:18 | call to ymlSource | test.cpp:114:10:114:18 | call to ymlSource | provenance | Src:MaD:25 | +| test.cpp:97:26:97:26 | x | test.cpp:68:22:68:22 | y | provenance | MaD:48 | +| test.cpp:101:26:101:26 | x | test.cpp:74:22:74:22 | y | provenance | MaD:48 | +| test.cpp:103:63:103:63 | x | test.cpp:82:22:82:22 | y | provenance | MaD:48 | +| test.cpp:104:62:104:62 | x | test.cpp:88:22:88:22 | y | provenance | MaD:48 | +| test.cpp:114:10:114:18 | call to ymlSource | test.cpp:114:10:114:18 | call to ymlSource | provenance | Src:MaD:26 MaD:26 | | test.cpp:114:10:114:18 | call to ymlSource | test.cpp:118:44:118:44 | *x | provenance | | | test.cpp:118:11:118:42 | call to callWithNonTypeTemplate | test.cpp:118:11:118:42 | call to callWithNonTypeTemplate | provenance | | | test.cpp:118:11:118:42 | call to callWithNonTypeTemplate | test.cpp:119:10:119:11 | y2 | provenance | Sink:MaD:1 | -| test.cpp:118:44:118:44 | *x | test.cpp:118:11:118:42 | call to callWithNonTypeTemplate | provenance | MaD:48 | -| test.cpp:133:10:133:18 | call to ymlSource | test.cpp:133:10:133:18 | call to ymlSource | provenance | Src:MaD:25 | +| test.cpp:118:44:118:44 | *x | test.cpp:118:11:118:42 | call to callWithNonTypeTemplate | provenance | MaD:49 | +| test.cpp:133:10:133:18 | call to ymlSource | test.cpp:133:10:133:18 | call to ymlSource | provenance | Src:MaD:26 MaD:26 | | test.cpp:133:10:133:18 | call to ymlSource | test.cpp:134:45:134:45 | x | provenance | | | test.cpp:134:13:134:43 | call to templateFunction | test.cpp:134:13:134:43 | call to templateFunction | provenance | | | test.cpp:134:13:134:43 | call to templateFunction | test.cpp:135:10:135:10 | y | provenance | Sink:MaD:1 | -| test.cpp:134:45:134:45 | x | test.cpp:134:13:134:43 | call to templateFunction | provenance | MaD:59 | -| test.cpp:146:10:146:18 | call to ymlSource | test.cpp:146:10:146:18 | call to ymlSource | provenance | Src:MaD:25 | +| test.cpp:134:45:134:45 | x | test.cpp:134:13:134:43 | call to templateFunction | provenance | MaD:60 | +| test.cpp:146:10:146:18 | call to ymlSource | test.cpp:146:10:146:18 | call to ymlSource | provenance | Src:MaD:26 MaD:26 | | test.cpp:146:10:146:18 | call to ymlSource | test.cpp:148:26:148:26 | x | provenance | | | test.cpp:148:10:148:27 | call to function | test.cpp:148:10:148:27 | call to function | provenance | | | test.cpp:148:10:148:27 | call to function | test.cpp:149:10:149:10 | z | provenance | Sink:MaD:1 | -| test.cpp:148:26:148:26 | x | test.cpp:148:10:148:27 | call to function | provenance | MaD:60 | -| test.cpp:155:10:155:18 | call to ymlSource | test.cpp:155:10:155:18 | call to ymlSource | provenance | Src:MaD:25 | +| test.cpp:148:26:148:26 | x | test.cpp:148:10:148:27 | call to function | provenance | MaD:61 | +| test.cpp:155:10:155:18 | call to ymlSource | test.cpp:155:10:155:18 | call to ymlSource | provenance | Src:MaD:26 MaD:26 | | test.cpp:155:10:155:18 | call to ymlSource | test.cpp:157:26:157:26 | x | provenance | | | test.cpp:157:13:157:20 | call to function | test.cpp:157:13:157:20 | call to function | provenance | | | test.cpp:157:13:157:20 | call to function | test.cpp:158:10:158:10 | z | provenance | Sink:MaD:1 | -| test.cpp:157:26:157:26 | x | test.cpp:157:13:157:20 | call to function | provenance | MaD:60 | +| test.cpp:157:26:157:26 | x | test.cpp:157:13:157:20 | call to function | provenance | MaD:61 | | test.cpp:164:34:164:34 | x | test.cpp:165:69:165:69 | x | provenance | | | test.cpp:165:12:165:64 | call to templateFunction2 | test.cpp:164:7:164:7 | *templateFunction3 | provenance | | | test.cpp:165:12:165:64 | call to templateFunction2 | test.cpp:165:12:165:64 | call to templateFunction2 | provenance | | -| test.cpp:165:69:165:69 | x | test.cpp:165:12:165:64 | call to templateFunction2 | provenance | MaD:58 | -| test.cpp:170:10:170:18 | call to ymlSource | test.cpp:170:10:170:18 | call to ymlSource | provenance | Src:MaD:25 | +| test.cpp:165:69:165:69 | x | test.cpp:165:12:165:64 | call to templateFunction2 | provenance | MaD:59 | +| test.cpp:170:10:170:18 | call to ymlSource | test.cpp:170:10:170:18 | call to ymlSource | provenance | Src:MaD:26 MaD:26 | | test.cpp:170:10:170:18 | call to ymlSource | test.cpp:172:51:172:51 | x | provenance | | | test.cpp:172:13:172:44 | call to templateFunction3 | test.cpp:172:13:172:44 | call to templateFunction3 | provenance | | | test.cpp:172:13:172:44 | call to templateFunction3 | test.cpp:173:10:173:10 | y | provenance | Sink:MaD:1 | | test.cpp:172:51:172:51 | x | test.cpp:164:34:164:34 | x | provenance | | -| test.cpp:172:51:172:51 | x | test.cpp:172:13:172:44 | call to templateFunction3 | provenance | MaD:58 | +| test.cpp:172:51:172:51 | x | test.cpp:172:13:172:44 | call to templateFunction3 | provenance | MaD:59 | | test.cpp:186:2:186:2 | *s [post update] [myField] | test.cpp:187:33:187:34 | *& ... [myField] | provenance | | | test.cpp:186:2:186:24 | ... = ... | test.cpp:186:2:186:2 | *s [post update] [myField] | provenance | | -| test.cpp:186:14:186:22 | call to ymlSource | test.cpp:186:2:186:24 | ... = ... | provenance | Src:MaD:25 | +| test.cpp:186:14:186:22 | call to ymlSource | test.cpp:186:2:186:24 | ... = ... | provenance | Src:MaD:26 MaD:26 | | test.cpp:187:10:187:31 | call to read_field_from_struct | test.cpp:187:10:187:31 | call to read_field_from_struct | provenance | | | test.cpp:187:10:187:31 | call to read_field_from_struct | test.cpp:188:10:188:10 | x | provenance | Sink:MaD:1 | -| test.cpp:187:33:187:34 | *& ... [myField] | test.cpp:187:10:187:31 | call to read_field_from_struct | provenance | MaD:50 | +| test.cpp:187:33:187:34 | *& ... [myField] | test.cpp:187:10:187:31 | call to read_field_from_struct | provenance | MaD:51 | | test.cpp:199:2:199:2 | *s [post update] [myField] | test.cpp:200:35:200:36 | *& ... [myField] | provenance | | | test.cpp:199:2:199:24 | ... = ... | test.cpp:199:2:199:2 | *s [post update] [myField] | provenance | | -| test.cpp:199:14:199:22 | call to ymlSource | test.cpp:199:2:199:24 | ... = ... | provenance | Src:MaD:25 | +| test.cpp:199:14:199:22 | call to ymlSource | test.cpp:199:2:199:24 | ... = ... | provenance | Src:MaD:26 MaD:26 | | test.cpp:200:10:200:33 | call to read_field_from_struct_2 | test.cpp:200:10:200:33 | call to read_field_from_struct_2 | provenance | | | test.cpp:200:10:200:33 | call to read_field_from_struct_2 | test.cpp:201:10:201:10 | x | provenance | Sink:MaD:1 | -| test.cpp:200:35:200:36 | *& ... [myField] | test.cpp:200:10:200:33 | call to read_field_from_struct_2 | provenance | MaD:51 | +| test.cpp:200:35:200:36 | *& ... [myField] | test.cpp:200:10:200:33 | call to read_field_from_struct_2 | provenance | MaD:52 | | test.cpp:216:3:216:4 | get_ptr output argument [value] | test.cpp:217:11:217:12 | *rf [value] | provenance | | -| test.cpp:216:3:216:28 | ... = ... | test.cpp:216:3:216:4 | get_ptr output argument [value] | provenance | MaD:57 | -| test.cpp:216:18:216:26 | call to ymlSource | test.cpp:216:3:216:28 | ... = ... | provenance | Src:MaD:25 | +| test.cpp:216:3:216:28 | ... = ... | test.cpp:216:3:216:4 | get_ptr output argument [value] | provenance | MaD:58 | +| test.cpp:216:18:216:26 | call to ymlSource | test.cpp:216:3:216:28 | ... = ... | provenance | Src:MaD:26 MaD:26 | | test.cpp:217:11:217:12 | *rf [value] | test.cpp:217:14:217:18 | value | provenance | | | test.cpp:217:14:217:18 | value | test.cpp:217:14:217:18 | value | provenance | | | test.cpp:217:14:217:18 | value | test.cpp:218:11:218:11 | x | provenance | Sink:MaD:1 | | test.cpp:222:3:222:3 | operator[] output argument | test.cpp:223:12:223:12 | *s | provenance | | -| test.cpp:222:3:222:20 | ... = ... | test.cpp:222:3:222:3 | operator[] output argument | provenance | MaD:56 | -| test.cpp:222:10:222:20 | call to ymlSource | test.cpp:222:3:222:20 | ... = ... | provenance | Src:MaD:25 | -| test.cpp:223:12:223:12 | *s | test.cpp:223:13:223:15 | call to operator[] | provenance | MaD:55 | +| test.cpp:222:3:222:20 | ... = ... | test.cpp:222:3:222:3 | operator[] output argument | provenance | MaD:57 | +| test.cpp:222:10:222:18 | call to ymlSource | test.cpp:222:3:222:20 | ... = ... | provenance | Src:MaD:26 MaD:26 | +| test.cpp:223:12:223:12 | *s | test.cpp:223:13:223:15 | call to operator[] | provenance | MaD:56 | | test.cpp:223:13:223:15 | call to operator[] | test.cpp:223:13:223:15 | call to operator[] | provenance | | | test.cpp:223:13:223:15 | call to operator[] | test.cpp:224:11:224:11 | c | provenance | Sink:MaD:1 | -| windows.cpp:22:15:22:29 | *call to GetCommandLineA | windows.cpp:22:15:22:29 | *call to GetCommandLineA | provenance | Src:MaD:3 | +| test.cpp:235:26:235:39 | call to ymlFieldSource | test.cpp:235:26:235:39 | call to ymlFieldSource [value] | provenance | Src:MaD:25 | +| test.cpp:235:26:235:39 | call to ymlFieldSource [value] | test.cpp:236:10:236:16 | *wrapper [value] | provenance | | +| test.cpp:236:10:236:16 | *wrapper [value] | test.cpp:236:18:236:22 | value | provenance | Sink:MaD:1 | | windows.cpp:22:15:22:29 | *call to GetCommandLineA | windows.cpp:24:8:24:11 | * ... | provenance | | | windows.cpp:22:15:22:29 | *call to GetCommandLineA | windows.cpp:27:36:27:38 | *cmd | provenance | | +| windows.cpp:22:15:22:29 | call to GetCommandLineA | windows.cpp:22:15:22:29 | *call to GetCommandLineA | provenance | Src:MaD:3 MaD:3 | | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | provenance | | | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | windows.cpp:30:8:30:15 | * ... | provenance | | -| windows.cpp:27:36:27:38 | *cmd | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | provenance | MaD:33 | -| windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | provenance | Src:MaD:4 | +| windows.cpp:27:36:27:38 | *cmd | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | provenance | MaD:34 | | windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | windows.cpp:36:10:36:13 | * ... | provenance | | -| windows.cpp:39:36:39:38 | GetEnvironmentVariableA output argument | windows.cpp:41:10:41:13 | * ... | provenance | Src:MaD:5 | +| windows.cpp:34:17:34:38 | call to GetEnvironmentStringsA | windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | provenance | Src:MaD:4 MaD:4 | +| windows.cpp:39:5:39:27 | call to GetEnvironmentVariableA | windows.cpp:41:10:41:13 | * ... | provenance | Src:MaD:5 MaD:5 | | windows.cpp:147:16:147:27 | *lpOverlapped [*hEvent] | windows.cpp:149:42:149:53 | *lpOverlapped [*hEvent] | provenance | | | windows.cpp:149:18:149:62 | *hEvent | windows.cpp:149:18:149:62 | *hEvent | provenance | | | windows.cpp:149:18:149:62 | *hEvent | windows.cpp:151:8:151:14 | * ... | provenance | | @@ -227,37 +231,37 @@ edges | windows.cpp:159:12:159:55 | hEvent | windows.cpp:160:8:160:8 | c | provenance | | | windows.cpp:159:35:159:46 | *lpOverlapped [hEvent] | windows.cpp:159:12:159:55 | hEvent | provenance | | | windows.cpp:159:35:159:46 | *lpOverlapped [hEvent] | windows.cpp:159:12:159:55 | hEvent | provenance | | -| windows.cpp:168:35:168:40 | ReadFile output argument | windows.cpp:170:10:170:16 | * ... | provenance | Src:MaD:17 | -| windows.cpp:177:23:177:28 | ReadFileEx output argument | windows.cpp:179:10:179:16 | * ... | provenance | Src:MaD:18 | -| windows.cpp:189:21:189:26 | ReadFile output argument | windows.cpp:190:5:190:56 | *... = ... | provenance | Src:MaD:17 | +| windows.cpp:168:19:168:26 | call to ReadFile | windows.cpp:170:10:170:16 | * ... | provenance | Src:MaD:17 MaD:17 | +| windows.cpp:177:5:177:14 | call to ReadFileEx | windows.cpp:179:10:179:16 | * ... | provenance | Src:MaD:18 MaD:18 | +| windows.cpp:189:5:189:12 | call to ReadFile | windows.cpp:190:5:190:56 | *... = ... | provenance | Src:MaD:17 MaD:17 | | windows.cpp:190:5:190:14 | *overlapped [post update] [*hEvent] | windows.cpp:192:53:192:63 | *& ... [*hEvent] | provenance | | | windows.cpp:190:5:190:56 | *... = ... | windows.cpp:190:5:190:14 | *overlapped [post update] [*hEvent] | provenance | | -| windows.cpp:192:53:192:63 | *& ... [*hEvent] | windows.cpp:147:16:147:27 | *lpOverlapped [*hEvent] | provenance | MaD:37 | -| windows.cpp:198:21:198:26 | ReadFile output argument | windows.cpp:199:5:199:57 | ... = ... | provenance | Src:MaD:17 | +| windows.cpp:192:53:192:63 | *& ... [*hEvent] | windows.cpp:147:16:147:27 | *lpOverlapped [*hEvent] | provenance | MaD:38 | +| windows.cpp:198:5:198:12 | call to ReadFile | windows.cpp:199:5:199:57 | ... = ... | provenance | Src:MaD:17 MaD:17 | | windows.cpp:199:5:199:14 | *overlapped [post update] [hEvent] | windows.cpp:201:53:201:63 | *& ... [hEvent] | provenance | | | windows.cpp:199:5:199:57 | ... = ... | windows.cpp:199:5:199:14 | *overlapped [post update] [hEvent] | provenance | | -| windows.cpp:201:53:201:63 | *& ... [hEvent] | windows.cpp:157:16:157:27 | *lpOverlapped [hEvent] | provenance | MaD:37 | -| windows.cpp:209:84:209:89 | NtReadFile output argument | windows.cpp:211:10:211:16 | * ... | provenance | Src:MaD:16 | -| windows.cpp:286:23:286:35 | *call to MapViewOfFile | windows.cpp:286:23:286:35 | *call to MapViewOfFile | provenance | Src:MaD:12 | +| windows.cpp:201:53:201:63 | *& ... [hEvent] | windows.cpp:157:16:157:27 | *lpOverlapped [hEvent] | provenance | MaD:38 | +| windows.cpp:209:23:209:32 | call to NtReadFile | windows.cpp:211:10:211:16 | * ... | provenance | Src:MaD:16 MaD:16 | | windows.cpp:286:23:286:35 | *call to MapViewOfFile | windows.cpp:287:20:287:52 | *pMapView | provenance | | +| windows.cpp:286:23:286:35 | call to MapViewOfFile | windows.cpp:286:23:286:35 | *call to MapViewOfFile | provenance | Src:MaD:12 MaD:12 | | windows.cpp:287:20:287:52 | *pMapView | windows.cpp:289:10:289:16 | * ... | provenance | | -| windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | provenance | Src:MaD:9 | | windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | windows.cpp:294:20:294:52 | *pMapView | provenance | | +| windows.cpp:293:23:293:36 | call to MapViewOfFile2 | windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | provenance | Src:MaD:9 MaD:9 | | windows.cpp:294:20:294:52 | *pMapView | windows.cpp:296:10:296:16 | * ... | provenance | | -| windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | provenance | Src:MaD:10 | | windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | windows.cpp:303:20:303:52 | *pMapView | provenance | | +| windows.cpp:302:23:302:36 | call to MapViewOfFile3 | windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | provenance | Src:MaD:10 MaD:10 | | windows.cpp:303:20:303:52 | *pMapView | windows.cpp:305:10:305:16 | * ... | provenance | | -| windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | provenance | Src:MaD:11 | | windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | windows.cpp:312:20:312:52 | *pMapView | provenance | | +| windows.cpp:311:23:311:43 | call to MapViewOfFile3FromApp | windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | provenance | Src:MaD:11 MaD:11 | | windows.cpp:312:20:312:52 | *pMapView | windows.cpp:314:10:314:16 | * ... | provenance | | -| windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | provenance | Src:MaD:13 | | windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | windows.cpp:319:20:319:52 | *pMapView | provenance | | +| windows.cpp:318:23:318:37 | call to MapViewOfFileEx | windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | provenance | Src:MaD:13 MaD:13 | | windows.cpp:319:20:319:52 | *pMapView | windows.cpp:321:10:321:16 | * ... | provenance | | -| windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | provenance | Src:MaD:14 | | windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | windows.cpp:326:20:326:52 | *pMapView | provenance | | +| windows.cpp:325:23:325:42 | call to MapViewOfFileFromApp | windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | provenance | Src:MaD:14 MaD:14 | | windows.cpp:326:20:326:52 | *pMapView | windows.cpp:328:10:328:16 | * ... | provenance | | -| windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | provenance | Src:MaD:15 | | windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | windows.cpp:333:20:333:52 | *pMapView | provenance | | +| windows.cpp:332:23:332:40 | call to MapViewOfFileNuma2 | windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | provenance | Src:MaD:15 MaD:15 | | windows.cpp:333:20:333:52 | *pMapView | windows.cpp:335:10:335:16 | * ... | provenance | | | windows.cpp:403:26:403:36 | *lpParameter [x] | windows.cpp:405:10:405:25 | *lpParameter [x] | provenance | | | windows.cpp:405:10:405:25 | *lpParameter [x] | windows.cpp:406:8:406:8 | *s [x] | provenance | | @@ -273,9 +277,9 @@ edges | windows.cpp:431:3:431:3 | *s [post update] [x] | windows.cpp:464:7:464:8 | *& ... [x] | provenance | | | windows.cpp:431:3:431:16 | ... = ... | windows.cpp:431:3:431:3 | *s [post update] [x] | provenance | | | windows.cpp:431:9:431:14 | call to source | windows.cpp:431:3:431:16 | ... = ... | provenance | | -| windows.cpp:439:7:439:8 | *& ... [x] | windows.cpp:403:26:403:36 | *lpParameter [x] | provenance | MaD:36 | -| windows.cpp:451:7:451:8 | *& ... [x] | windows.cpp:410:26:410:36 | *lpParameter [x] | provenance | MaD:34 | -| windows.cpp:464:7:464:8 | *& ... [x] | windows.cpp:417:26:417:36 | *lpParameter [x] | provenance | MaD:35 | +| windows.cpp:439:7:439:8 | *& ... [x] | windows.cpp:403:26:403:36 | *lpParameter [x] | provenance | MaD:37 | +| windows.cpp:451:7:451:8 | *& ... [x] | windows.cpp:410:26:410:36 | *lpParameter [x] | provenance | MaD:35 | +| windows.cpp:464:7:464:8 | *& ... [x] | windows.cpp:417:26:417:36 | *lpParameter [x] | provenance | MaD:36 | | windows.cpp:533:11:533:16 | call to source | windows.cpp:533:11:533:16 | call to source | provenance | | | windows.cpp:533:11:533:16 | call to source | windows.cpp:537:40:537:41 | *& ... | provenance | | | windows.cpp:533:11:533:16 | call to source | windows.cpp:542:38:542:39 | *& ... | provenance | | @@ -284,61 +288,61 @@ edges | windows.cpp:533:11:533:16 | call to source | windows.cpp:568:32:568:33 | *& ... | provenance | | | windows.cpp:533:11:533:16 | call to source | windows.cpp:573:40:573:41 | *& ... | provenance | | | windows.cpp:537:27:537:37 | RtlCopyVolatileMemory output argument | windows.cpp:538:10:538:23 | access to array | provenance | | -| windows.cpp:537:40:537:41 | *& ... | windows.cpp:537:27:537:37 | RtlCopyVolatileMemory output argument | provenance | MaD:42 | +| windows.cpp:537:40:537:41 | *& ... | windows.cpp:537:27:537:37 | RtlCopyVolatileMemory output argument | provenance | MaD:43 | | windows.cpp:542:25:542:35 | RtlCopyDeviceMemory output argument | windows.cpp:543:10:543:23 | access to array | provenance | | -| windows.cpp:542:38:542:39 | *& ... | windows.cpp:542:25:542:35 | RtlCopyDeviceMemory output argument | provenance | MaD:38 | +| windows.cpp:542:38:542:39 | *& ... | windows.cpp:542:25:542:35 | RtlCopyDeviceMemory output argument | provenance | MaD:39 | | windows.cpp:547:19:547:29 | RtlCopyMemory output argument | windows.cpp:548:10:548:23 | access to array | provenance | | -| windows.cpp:547:32:547:33 | *& ... | windows.cpp:547:19:547:29 | RtlCopyMemory output argument | provenance | MaD:39 | +| windows.cpp:547:32:547:33 | *& ... | windows.cpp:547:19:547:29 | RtlCopyMemory output argument | provenance | MaD:40 | | windows.cpp:552:30:552:40 | RtlCopyMemoryNonTemporal output argument | windows.cpp:553:10:553:23 | access to array | provenance | | -| windows.cpp:552:43:552:44 | *& ... | windows.cpp:552:30:552:40 | RtlCopyMemoryNonTemporal output argument | provenance | MaD:40 | +| windows.cpp:552:43:552:44 | *& ... | windows.cpp:552:30:552:40 | RtlCopyMemoryNonTemporal output argument | provenance | MaD:41 | | windows.cpp:559:5:559:24 | ... = ... | windows.cpp:561:39:561:44 | *buffer | provenance | | | windows.cpp:559:17:559:24 | call to source | windows.cpp:559:5:559:24 | ... = ... | provenance | | | windows.cpp:561:26:561:36 | RtlInitUnicodeString output argument [*Buffer] | windows.cpp:562:10:562:19 | *src_string [*Buffer] | provenance | | | windows.cpp:561:26:561:36 | RtlInitUnicodeString output argument [*Buffer] | windows.cpp:563:40:563:50 | *& ... [*Buffer] | provenance | | -| windows.cpp:561:39:561:44 | *buffer | windows.cpp:561:26:561:36 | RtlInitUnicodeString output argument [*Buffer] | provenance | MaD:43 | +| windows.cpp:561:39:561:44 | *buffer | windows.cpp:561:26:561:36 | RtlInitUnicodeString output argument [*Buffer] | provenance | MaD:44 | | windows.cpp:562:10:562:19 | *src_string [*Buffer] | windows.cpp:562:10:562:29 | access to array | provenance | | | windows.cpp:562:10:562:19 | *src_string [*Buffer] | windows.cpp:562:21:562:26 | *Buffer | provenance | | | windows.cpp:562:21:562:26 | *Buffer | windows.cpp:562:10:562:29 | access to array | provenance | | | windows.cpp:563:26:563:37 | RtlCopyUnicodeString output argument [*Buffer] | windows.cpp:564:10:564:20 | *dest_string [*Buffer] | provenance | | -| windows.cpp:563:40:563:50 | *& ... [*Buffer] | windows.cpp:563:26:563:37 | RtlCopyUnicodeString output argument [*Buffer] | provenance | MaD:41 | +| windows.cpp:563:40:563:50 | *& ... [*Buffer] | windows.cpp:563:26:563:37 | RtlCopyUnicodeString output argument [*Buffer] | provenance | MaD:42 | | windows.cpp:564:10:564:20 | *dest_string [*Buffer] | windows.cpp:564:10:564:30 | access to array | provenance | | | windows.cpp:564:10:564:20 | *dest_string [*Buffer] | windows.cpp:564:22:564:27 | *Buffer | provenance | | | windows.cpp:564:22:564:27 | *Buffer | windows.cpp:564:10:564:30 | access to array | provenance | | | windows.cpp:568:19:568:29 | RtlMoveMemory output argument | windows.cpp:569:10:569:23 | access to array | provenance | | -| windows.cpp:568:32:568:33 | *& ... | windows.cpp:568:19:568:29 | RtlMoveMemory output argument | provenance | MaD:44 | +| windows.cpp:568:32:568:33 | *& ... | windows.cpp:568:19:568:29 | RtlMoveMemory output argument | provenance | MaD:45 | | windows.cpp:573:27:573:37 | RtlMoveVolatileMemory output argument | windows.cpp:574:10:574:23 | access to array | provenance | | -| windows.cpp:573:40:573:41 | *& ... | windows.cpp:573:27:573:37 | RtlMoveVolatileMemory output argument | provenance | MaD:45 | -| windows.cpp:645:45:645:50 | WinHttpReadData output argument | windows.cpp:647:10:647:16 | * ... | provenance | Src:MaD:23 | -| windows.cpp:652:48:652:53 | WinHttpReadDataEx output argument | windows.cpp:654:10:654:16 | * ... | provenance | Src:MaD:24 | -| windows.cpp:659:47:659:52 | WinHttpQueryHeaders output argument | windows.cpp:661:10:661:16 | * ... | provenance | Src:MaD:19 | -| windows.cpp:669:70:669:79 | WinHttpQueryHeadersEx output argument | windows.cpp:673:10:673:29 | * ... | provenance | Src:MaD:21 | -| windows.cpp:669:82:669:87 | WinHttpQueryHeadersEx output argument | windows.cpp:671:10:671:16 | * ... | provenance | Src:MaD:22 | -| windows.cpp:669:105:669:112 | WinHttpQueryHeadersEx output argument | windows.cpp:675:10:675:27 | * ... | provenance | Src:MaD:20 | +| windows.cpp:573:40:573:41 | *& ... | windows.cpp:573:27:573:37 | RtlMoveVolatileMemory output argument | provenance | MaD:46 | +| windows.cpp:645:19:645:33 | call to WinHttpReadData | windows.cpp:647:10:647:16 | * ... | provenance | Src:MaD:23 MaD:23 | +| windows.cpp:652:20:652:36 | call to WinHttpReadDataEx | windows.cpp:654:10:654:16 | * ... | provenance | Src:MaD:24 MaD:24 | +| windows.cpp:659:5:659:23 | call to WinHttpQueryHeaders | windows.cpp:661:10:661:16 | * ... | provenance | Src:MaD:19 MaD:19 | +| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | windows.cpp:671:10:671:16 | * ... | provenance | Src:MaD:22 MaD:22 | +| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | windows.cpp:673:10:673:29 | * ... | provenance | Src:MaD:21 MaD:21 | +| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | windows.cpp:675:10:675:27 | * ... | provenance | Src:MaD:20 MaD:20 | | windows.cpp:728:5:728:28 | ... = ... | windows.cpp:729:35:729:35 | *x | provenance | | | windows.cpp:728:12:728:28 | call to source | windows.cpp:728:5:728:28 | ... = ... | provenance | | -| windows.cpp:729:35:729:35 | *x | windows.cpp:729:44:729:57 | WinHttpCrackUrl output argument | provenance | MaD:46 | +| windows.cpp:729:35:729:35 | *x | windows.cpp:729:44:729:57 | WinHttpCrackUrl output argument | provenance | MaD:47 | | windows.cpp:729:44:729:57 | WinHttpCrackUrl output argument | windows.cpp:731:10:731:36 | * ... | provenance | | | windows.cpp:729:44:729:57 | WinHttpCrackUrl output argument | windows.cpp:733:10:733:35 | * ... | provenance | | | windows.cpp:729:44:729:57 | WinHttpCrackUrl output argument | windows.cpp:735:10:735:37 | * ... | provenance | | -| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:901:15:901:53 | *& ... | provenance | Src:MaD:7 | -| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:905:10:905:31 | * ... | provenance | Src:MaD:7 | -| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:907:10:907:42 | * ... | provenance | Src:MaD:7 | -| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:909:10:909:57 | * ... | provenance | Src:MaD:7 | -| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:911:10:911:60 | * ... | provenance | Src:MaD:7 | -| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:912:54:912:63 | FileHandle | provenance | Src:MaD:7 | -| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:914:10:914:70 | * ... | provenance | Src:MaD:7 | -| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:916:10:916:72 | * ... | provenance | Src:MaD:7 | -| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:918:10:918:64 | * ... | provenance | Src:MaD:7 | -| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:920:10:920:51 | * ... | provenance | Src:MaD:7 | -| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:922:10:922:52 | * ... | provenance | Src:MaD:7 | -| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:924:10:924:63 | * ... | provenance | Src:MaD:7 | +| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:901:15:901:53 | *& ... | provenance | Src:MaD:7 MaD:7 | +| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:905:10:905:31 | * ... | provenance | Src:MaD:7 MaD:7 | +| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:907:10:907:42 | * ... | provenance | Src:MaD:7 MaD:7 | +| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:909:10:909:57 | * ... | provenance | Src:MaD:7 MaD:7 | +| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:911:10:911:60 | * ... | provenance | Src:MaD:7 MaD:7 | +| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:912:54:912:63 | FileHandle | provenance | Src:MaD:7 MaD:7 | +| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:914:10:914:70 | * ... | provenance | Src:MaD:7 MaD:7 | +| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:916:10:916:72 | * ... | provenance | Src:MaD:7 MaD:7 | +| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:918:10:918:64 | * ... | provenance | Src:MaD:7 MaD:7 | +| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:920:10:920:51 | * ... | provenance | Src:MaD:7 MaD:7 | +| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:922:10:922:52 | * ... | provenance | Src:MaD:7 MaD:7 | +| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:924:10:924:63 | * ... | provenance | Src:MaD:7 MaD:7 | | windows.cpp:901:15:901:53 | *& ... | windows.cpp:903:10:903:11 | * ... | provenance | | -| windows.cpp:929:70:929:75 | HttpReceiveRequestEntityBody output argument | windows.cpp:931:10:931:16 | * ... | provenance | Src:MaD:8 | -| windows.cpp:936:70:936:78 | HttpReceiveClientCertificate output argument | windows.cpp:937:15:937:48 | *& ... | provenance | Src:MaD:6 | -| windows.cpp:936:70:936:78 | HttpReceiveClientCertificate output argument | windows.cpp:941:10:941:31 | * ... | provenance | Src:MaD:6 | +| windows.cpp:929:20:929:47 | call to HttpReceiveRequestEntityBody | windows.cpp:931:10:931:16 | * ... | provenance | Src:MaD:8 MaD:8 | +| windows.cpp:936:20:936:47 | call to HttpReceiveClientCertificate | windows.cpp:937:15:937:48 | *& ... | provenance | Src:MaD:6 MaD:6 | +| windows.cpp:936:20:936:47 | call to HttpReceiveClientCertificate | windows.cpp:941:10:941:31 | * ... | provenance | Src:MaD:6 MaD:6 | | windows.cpp:937:15:937:48 | *& ... | windows.cpp:939:10:939:11 | * ... | provenance | | nodes -| asio_streams.cpp:87:34:87:44 | read_until output argument | semmle.label | read_until output argument | +| asio_streams.cpp:87:2:87:24 | call to read_until | semmle.label | call to read_until | | asio_streams.cpp:91:7:91:17 | recv_buffer | semmle.label | recv_buffer | | asio_streams.cpp:93:29:93:39 | *recv_buffer | semmle.label | *recv_buffer | | asio_streams.cpp:97:37:97:44 | call to source | semmle.label | call to source | @@ -349,7 +353,7 @@ nodes | asio_streams.cpp:101:7:101:17 | send_buffer | semmle.label | send_buffer | | asio_streams.cpp:103:29:103:39 | *send_buffer | semmle.label | *send_buffer | | azure.cpp:253:48:253:60 | *call to GetBodyStream | semmle.label | *call to GetBodyStream | -| azure.cpp:253:48:253:60 | *call to GetBodyStream | semmle.label | *call to GetBodyStream | +| azure.cpp:253:48:253:60 | call to GetBodyStream | semmle.label | call to GetBodyStream | | azure.cpp:257:5:257:8 | *resp | semmle.label | *resp | | azure.cpp:257:16:257:21 | Read output argument | semmle.label | Read output argument | | azure.cpp:258:10:258:16 | * ... | semmle.label | * ... | @@ -361,19 +365,19 @@ nodes | azure.cpp:266:44:266:52 | call to ReadToEnd [element] | semmle.label | call to ReadToEnd [element] | | azure.cpp:267:10:267:12 | vec | semmle.label | vec | | azure.cpp:267:10:267:12 | vec [element] | semmle.label | vec [element] | -| azure.cpp:273:62:273:64 | call to GetHeaders | semmle.label | call to GetHeaders | +| azure.cpp:273:52:273:61 | call to GetHeaders | semmle.label | call to GetHeaders | | azure.cpp:273:62:273:64 | call to GetHeaders | semmle.label | call to GetHeaders | | azure.cpp:274:10:274:29 | call to operator[] | semmle.label | call to operator[] | | azure.cpp:274:14:274:29 | call to operator[] | semmle.label | call to operator[] | | azure.cpp:274:14:274:29 | call to operator[] | semmle.label | call to operator[] | | azure.cpp:274:14:274:29 | call to operator[] | semmle.label | call to operator[] | -| azure.cpp:277:45:277:47 | call to GetBody | semmle.label | call to GetBody | +| azure.cpp:277:38:277:44 | call to GetBody | semmle.label | call to GetBody | | azure.cpp:277:45:277:47 | call to GetBody | semmle.label | call to GetBody | | azure.cpp:278:10:278:13 | body | semmle.label | body | | azure.cpp:278:10:278:13 | body | semmle.label | body | | azure.cpp:278:10:278:13 | body | semmle.label | body | | azure.cpp:281:68:281:84 | *call to ExtractBodyStream | semmle.label | *call to ExtractBodyStream | -| azure.cpp:281:68:281:84 | *call to ExtractBodyStream | semmle.label | *call to ExtractBodyStream | +| azure.cpp:281:68:281:84 | call to ExtractBodyStream | semmle.label | call to ExtractBodyStream | | azure.cpp:282:10:282:38 | call to ReadToEnd | semmle.label | call to ReadToEnd | | azure.cpp:282:21:282:23 | *call to get | semmle.label | *call to get | | azure.cpp:282:28:282:36 | call to ReadToEnd [element] | semmle.label | call to ReadToEnd [element] | @@ -494,22 +498,26 @@ nodes | test.cpp:218:11:218:11 | x | semmle.label | x | | test.cpp:222:3:222:3 | operator[] output argument | semmle.label | operator[] output argument | | test.cpp:222:3:222:20 | ... = ... | semmle.label | ... = ... | -| test.cpp:222:10:222:20 | call to ymlSource | semmle.label | call to ymlSource | +| test.cpp:222:10:222:18 | call to ymlSource | semmle.label | call to ymlSource | | test.cpp:223:12:223:12 | *s | semmle.label | *s | | test.cpp:223:13:223:15 | call to operator[] | semmle.label | call to operator[] | | test.cpp:223:13:223:15 | call to operator[] | semmle.label | call to operator[] | | test.cpp:224:11:224:11 | c | semmle.label | c | +| test.cpp:235:26:235:39 | call to ymlFieldSource | semmle.label | call to ymlFieldSource | +| test.cpp:235:26:235:39 | call to ymlFieldSource [value] | semmle.label | call to ymlFieldSource [value] | +| test.cpp:236:10:236:16 | *wrapper [value] | semmle.label | *wrapper [value] | +| test.cpp:236:18:236:22 | value | semmle.label | value | | windows.cpp:22:15:22:29 | *call to GetCommandLineA | semmle.label | *call to GetCommandLineA | -| windows.cpp:22:15:22:29 | *call to GetCommandLineA | semmle.label | *call to GetCommandLineA | +| windows.cpp:22:15:22:29 | call to GetCommandLineA | semmle.label | call to GetCommandLineA | | windows.cpp:24:8:24:11 | * ... | semmle.label | * ... | | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | semmle.label | **call to CommandLineToArgvA | | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | semmle.label | **call to CommandLineToArgvA | | windows.cpp:27:36:27:38 | *cmd | semmle.label | *cmd | | windows.cpp:30:8:30:15 | * ... | semmle.label | * ... | | windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | semmle.label | *call to GetEnvironmentStringsA | -| windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | semmle.label | *call to GetEnvironmentStringsA | +| windows.cpp:34:17:34:38 | call to GetEnvironmentStringsA | semmle.label | call to GetEnvironmentStringsA | | windows.cpp:36:10:36:13 | * ... | semmle.label | * ... | -| windows.cpp:39:36:39:38 | GetEnvironmentVariableA output argument | semmle.label | GetEnvironmentVariableA output argument | +| windows.cpp:39:5:39:27 | call to GetEnvironmentVariableA | semmle.label | call to GetEnvironmentVariableA | | windows.cpp:41:10:41:13 | * ... | semmle.label | * ... | | windows.cpp:147:16:147:27 | *lpOverlapped [*hEvent] | semmle.label | *lpOverlapped [*hEvent] | | windows.cpp:149:18:149:62 | *hEvent | semmle.label | *hEvent | @@ -522,46 +530,46 @@ nodes | windows.cpp:159:12:159:55 | hEvent | semmle.label | hEvent | | windows.cpp:159:35:159:46 | *lpOverlapped [hEvent] | semmle.label | *lpOverlapped [hEvent] | | windows.cpp:160:8:160:8 | c | semmle.label | c | -| windows.cpp:168:35:168:40 | ReadFile output argument | semmle.label | ReadFile output argument | +| windows.cpp:168:19:168:26 | call to ReadFile | semmle.label | call to ReadFile | | windows.cpp:170:10:170:16 | * ... | semmle.label | * ... | -| windows.cpp:177:23:177:28 | ReadFileEx output argument | semmle.label | ReadFileEx output argument | +| windows.cpp:177:5:177:14 | call to ReadFileEx | semmle.label | call to ReadFileEx | | windows.cpp:179:10:179:16 | * ... | semmle.label | * ... | -| windows.cpp:189:21:189:26 | ReadFile output argument | semmle.label | ReadFile output argument | +| windows.cpp:189:5:189:12 | call to ReadFile | semmle.label | call to ReadFile | | windows.cpp:190:5:190:14 | *overlapped [post update] [*hEvent] | semmle.label | *overlapped [post update] [*hEvent] | | windows.cpp:190:5:190:56 | *... = ... | semmle.label | *... = ... | | windows.cpp:192:53:192:63 | *& ... [*hEvent] | semmle.label | *& ... [*hEvent] | -| windows.cpp:198:21:198:26 | ReadFile output argument | semmle.label | ReadFile output argument | +| windows.cpp:198:5:198:12 | call to ReadFile | semmle.label | call to ReadFile | | windows.cpp:199:5:199:14 | *overlapped [post update] [hEvent] | semmle.label | *overlapped [post update] [hEvent] | | windows.cpp:199:5:199:57 | ... = ... | semmle.label | ... = ... | | windows.cpp:201:53:201:63 | *& ... [hEvent] | semmle.label | *& ... [hEvent] | -| windows.cpp:209:84:209:89 | NtReadFile output argument | semmle.label | NtReadFile output argument | +| windows.cpp:209:23:209:32 | call to NtReadFile | semmle.label | call to NtReadFile | | windows.cpp:211:10:211:16 | * ... | semmle.label | * ... | | windows.cpp:286:23:286:35 | *call to MapViewOfFile | semmle.label | *call to MapViewOfFile | -| windows.cpp:286:23:286:35 | *call to MapViewOfFile | semmle.label | *call to MapViewOfFile | +| windows.cpp:286:23:286:35 | call to MapViewOfFile | semmle.label | call to MapViewOfFile | | windows.cpp:287:20:287:52 | *pMapView | semmle.label | *pMapView | | windows.cpp:289:10:289:16 | * ... | semmle.label | * ... | | windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | semmle.label | *call to MapViewOfFile2 | -| windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | semmle.label | *call to MapViewOfFile2 | +| windows.cpp:293:23:293:36 | call to MapViewOfFile2 | semmle.label | call to MapViewOfFile2 | | windows.cpp:294:20:294:52 | *pMapView | semmle.label | *pMapView | | windows.cpp:296:10:296:16 | * ... | semmle.label | * ... | | windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | semmle.label | *call to MapViewOfFile3 | -| windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | semmle.label | *call to MapViewOfFile3 | +| windows.cpp:302:23:302:36 | call to MapViewOfFile3 | semmle.label | call to MapViewOfFile3 | | windows.cpp:303:20:303:52 | *pMapView | semmle.label | *pMapView | | windows.cpp:305:10:305:16 | * ... | semmle.label | * ... | | windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | semmle.label | *call to MapViewOfFile3FromApp | -| windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | semmle.label | *call to MapViewOfFile3FromApp | +| windows.cpp:311:23:311:43 | call to MapViewOfFile3FromApp | semmle.label | call to MapViewOfFile3FromApp | | windows.cpp:312:20:312:52 | *pMapView | semmle.label | *pMapView | | windows.cpp:314:10:314:16 | * ... | semmle.label | * ... | | windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | semmle.label | *call to MapViewOfFileEx | -| windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | semmle.label | *call to MapViewOfFileEx | +| windows.cpp:318:23:318:37 | call to MapViewOfFileEx | semmle.label | call to MapViewOfFileEx | | windows.cpp:319:20:319:52 | *pMapView | semmle.label | *pMapView | | windows.cpp:321:10:321:16 | * ... | semmle.label | * ... | | windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | semmle.label | *call to MapViewOfFileFromApp | -| windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | semmle.label | *call to MapViewOfFileFromApp | +| windows.cpp:325:23:325:42 | call to MapViewOfFileFromApp | semmle.label | call to MapViewOfFileFromApp | | windows.cpp:326:20:326:52 | *pMapView | semmle.label | *pMapView | | windows.cpp:328:10:328:16 | * ... | semmle.label | * ... | | windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | semmle.label | *call to MapViewOfFileNuma2 | -| windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | semmle.label | *call to MapViewOfFileNuma2 | +| windows.cpp:332:23:332:40 | call to MapViewOfFileNuma2 | semmle.label | call to MapViewOfFileNuma2 | | windows.cpp:333:20:333:52 | *pMapView | semmle.label | *pMapView | | windows.cpp:335:10:335:16 | * ... | semmle.label | * ... | | windows.cpp:403:26:403:36 | *lpParameter [x] | semmle.label | *lpParameter [x] | @@ -614,15 +622,15 @@ nodes | windows.cpp:573:27:573:37 | RtlMoveVolatileMemory output argument | semmle.label | RtlMoveVolatileMemory output argument | | windows.cpp:573:40:573:41 | *& ... | semmle.label | *& ... | | windows.cpp:574:10:574:23 | access to array | semmle.label | access to array | -| windows.cpp:645:45:645:50 | WinHttpReadData output argument | semmle.label | WinHttpReadData output argument | +| windows.cpp:645:19:645:33 | call to WinHttpReadData | semmle.label | call to WinHttpReadData | | windows.cpp:647:10:647:16 | * ... | semmle.label | * ... | -| windows.cpp:652:48:652:53 | WinHttpReadDataEx output argument | semmle.label | WinHttpReadDataEx output argument | +| windows.cpp:652:20:652:36 | call to WinHttpReadDataEx | semmle.label | call to WinHttpReadDataEx | | windows.cpp:654:10:654:16 | * ... | semmle.label | * ... | -| windows.cpp:659:47:659:52 | WinHttpQueryHeaders output argument | semmle.label | WinHttpQueryHeaders output argument | +| windows.cpp:659:5:659:23 | call to WinHttpQueryHeaders | semmle.label | call to WinHttpQueryHeaders | | windows.cpp:661:10:661:16 | * ... | semmle.label | * ... | -| windows.cpp:669:70:669:79 | WinHttpQueryHeadersEx output argument | semmle.label | WinHttpQueryHeadersEx output argument | -| windows.cpp:669:82:669:87 | WinHttpQueryHeadersEx output argument | semmle.label | WinHttpQueryHeadersEx output argument | -| windows.cpp:669:105:669:112 | WinHttpQueryHeadersEx output argument | semmle.label | WinHttpQueryHeadersEx output argument | +| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | semmle.label | call to WinHttpQueryHeadersEx | +| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | semmle.label | call to WinHttpQueryHeadersEx | +| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | semmle.label | call to WinHttpQueryHeadersEx | | windows.cpp:671:10:671:16 | * ... | semmle.label | * ... | | windows.cpp:673:10:673:29 | * ... | semmle.label | * ... | | windows.cpp:675:10:675:27 | * ... | semmle.label | * ... | @@ -633,7 +641,7 @@ nodes | windows.cpp:731:10:731:36 | * ... | semmle.label | * ... | | windows.cpp:733:10:733:35 | * ... | semmle.label | * ... | | windows.cpp:735:10:735:37 | * ... | semmle.label | * ... | -| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | semmle.label | HttpReceiveHttpRequest output argument | +| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | semmle.label | call to HttpReceiveHttpRequest | | windows.cpp:901:15:901:53 | *& ... | semmle.label | *& ... | | windows.cpp:903:10:903:11 | * ... | semmle.label | * ... | | windows.cpp:905:10:905:31 | * ... | semmle.label | * ... | @@ -647,9 +655,9 @@ nodes | windows.cpp:920:10:920:51 | * ... | semmle.label | * ... | | windows.cpp:922:10:922:52 | * ... | semmle.label | * ... | | windows.cpp:924:10:924:63 | * ... | semmle.label | * ... | -| windows.cpp:929:70:929:75 | HttpReceiveRequestEntityBody output argument | semmle.label | HttpReceiveRequestEntityBody output argument | +| windows.cpp:929:20:929:47 | call to HttpReceiveRequestEntityBody | semmle.label | call to HttpReceiveRequestEntityBody | | windows.cpp:931:10:931:16 | * ... | semmle.label | * ... | -| windows.cpp:936:70:936:78 | HttpReceiveClientCertificate output argument | semmle.label | HttpReceiveClientCertificate output argument | +| windows.cpp:936:20:936:47 | call to HttpReceiveClientCertificate | semmle.label | call to HttpReceiveClientCertificate | | windows.cpp:937:15:937:48 | *& ... | semmle.label | *& ... | | windows.cpp:939:10:939:11 | * ... | semmle.label | * ... | | windows.cpp:941:10:941:31 | * ... | semmle.label | * ... | diff --git a/cpp/ql/test/library-tests/dataflow/external-models/sources.expected b/cpp/ql/test/library-tests/dataflow/external-models/sources.expected index 6585c88dc6dd..d9c621c36cf3 100644 --- a/cpp/ql/test/library-tests/dataflow/external-models/sources.expected +++ b/cpp/ql/test/library-tests/dataflow/external-models/sources.expected @@ -1,8 +1,8 @@ -| asio_streams.cpp:87:34:87:44 | read_until output argument | remote | -| azure.cpp:253:48:253:60 | *call to GetBodyStream | remote | -| azure.cpp:273:62:273:64 | call to GetHeaders | remote | -| azure.cpp:277:45:277:47 | call to GetBody | remote | -| azure.cpp:281:68:281:84 | *call to ExtractBodyStream | remote | +| asio_streams.cpp:87:2:87:24 | call to read_until | remote | +| azure.cpp:253:48:253:60 | call to GetBodyStream | remote | +| azure.cpp:273:52:273:61 | call to GetHeaders | remote | +| azure.cpp:277:38:277:44 | call to GetBody | remote | +| azure.cpp:281:68:281:84 | call to ExtractBodyStream | remote | | azure.cpp:289:32:289:40 | call to GetHeader | remote | | azure.cpp:293:58:293:67 | call to GetHeaders | remote | | test.cpp:10:10:10:18 | call to ymlSource | local | @@ -16,30 +16,30 @@ | test.cpp:186:14:186:22 | call to ymlSource | local | | test.cpp:199:14:199:22 | call to ymlSource | local | | test.cpp:216:18:216:26 | call to ymlSource | local | -| test.cpp:222:10:222:20 | call to ymlSource | local | -| windows.cpp:22:15:22:29 | *call to GetCommandLineA | local | -| windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | local | -| windows.cpp:39:36:39:38 | GetEnvironmentVariableA output argument | local | -| windows.cpp:168:35:168:40 | ReadFile output argument | local | -| windows.cpp:177:23:177:28 | ReadFileEx output argument | local | -| windows.cpp:189:21:189:26 | ReadFile output argument | local | -| windows.cpp:192:23:192:29 | ReadFileEx output argument | local | -| windows.cpp:198:21:198:26 | ReadFile output argument | local | -| windows.cpp:201:23:201:29 | ReadFileEx output argument | local | -| windows.cpp:209:84:209:89 | NtReadFile output argument | local | -| windows.cpp:286:23:286:35 | *call to MapViewOfFile | local | -| windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | local | -| windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | local | -| windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | local | -| windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | local | -| windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | local | -| windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | local | -| windows.cpp:645:45:645:50 | WinHttpReadData output argument | remote | -| windows.cpp:652:48:652:53 | WinHttpReadDataEx output argument | remote | -| windows.cpp:659:47:659:52 | WinHttpQueryHeaders output argument | remote | -| windows.cpp:669:70:669:79 | WinHttpQueryHeadersEx output argument | remote | -| windows.cpp:669:82:669:87 | WinHttpQueryHeadersEx output argument | remote | -| windows.cpp:669:105:669:112 | WinHttpQueryHeadersEx output argument | remote | -| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | remote | -| windows.cpp:929:70:929:75 | HttpReceiveRequestEntityBody output argument | remote | -| windows.cpp:936:70:936:78 | HttpReceiveClientCertificate output argument | remote | +| test.cpp:222:10:222:18 | call to ymlSource | local | +| windows.cpp:22:15:22:29 | call to GetCommandLineA | local | +| windows.cpp:34:17:34:38 | call to GetEnvironmentStringsA | local | +| windows.cpp:39:5:39:27 | call to GetEnvironmentVariableA | local | +| windows.cpp:168:19:168:26 | call to ReadFile | local | +| windows.cpp:177:5:177:14 | call to ReadFileEx | local | +| windows.cpp:189:5:189:12 | call to ReadFile | local | +| windows.cpp:192:5:192:14 | call to ReadFileEx | local | +| windows.cpp:198:5:198:12 | call to ReadFile | local | +| windows.cpp:201:5:201:14 | call to ReadFileEx | local | +| windows.cpp:209:23:209:32 | call to NtReadFile | local | +| windows.cpp:286:23:286:35 | call to MapViewOfFile | local | +| windows.cpp:293:23:293:36 | call to MapViewOfFile2 | local | +| windows.cpp:302:23:302:36 | call to MapViewOfFile3 | local | +| windows.cpp:311:23:311:43 | call to MapViewOfFile3FromApp | local | +| windows.cpp:318:23:318:37 | call to MapViewOfFileEx | local | +| windows.cpp:325:23:325:42 | call to MapViewOfFileFromApp | local | +| windows.cpp:332:23:332:40 | call to MapViewOfFileNuma2 | local | +| windows.cpp:645:19:645:33 | call to WinHttpReadData | remote | +| windows.cpp:652:20:652:36 | call to WinHttpReadDataEx | remote | +| windows.cpp:659:5:659:23 | call to WinHttpQueryHeaders | remote | +| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | remote | +| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | remote | +| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | remote | +| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | remote | +| windows.cpp:929:20:929:47 | call to HttpReceiveRequestEntityBody | remote | +| windows.cpp:936:20:936:47 | call to HttpReceiveClientCertificate | remote | diff --git a/cpp/ql/test/library-tests/dataflow/external-models/test.cpp b/cpp/ql/test/library-tests/dataflow/external-models/test.cpp index f1ec1562606b..aa021b967afc 100644 --- a/cpp/ql/test/library-tests/dataflow/external-models/test.cpp +++ b/cpp/ql/test/library-tests/dataflow/external-models/test.cpp @@ -233,6 +233,6 @@ SourceWrapper ymlFieldSource(); void test_source_access_path() { SourceWrapper wrapper = ymlFieldSource(); - ymlSink(wrapper.value); // $ MISSING: ir + ymlSink(wrapper.value); // $ ir } diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.expected b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.expected index 7d1e2bc9327a..a60e8aac10c2 100644 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.expected +++ b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.expected @@ -18,6 +18,10 @@ postIsInSameCallable reverseRead argHasPostUpdate postWithInFlow +| tests.cpp:60:30:60:31 | remoteMadSourceIndirectArg0 output argument | PostUpdateNode should not be the target of local flow. | +| tests.cpp:63:33:63:33 | remoteMadSourceIndirectArg1 output argument | PostUpdateNode should not be the target of local flow. | +| tests.cpp:295:39:295:40 | memberRemoteMadSourceIndirectArg0 output argument | PostUpdateNode should not be the target of local flow. | +| tests.cpp:369:2:369:4 | qualifierSource output argument | PostUpdateNode should not be the target of local flow. | viableImplInCallContextTooLarge uniqueParameterNodeAtPosition uniqueParameterNodePosition @@ -28,6 +32,7 @@ multipleArgumentCall lambdaCallEnclosingCallableMismatch speculativeStepAlreadyHasModel testFailures +| tests.cpp:77:11:77:17 | // $ ir | Missing result: ir | summaryCalls | file://:0:0:0:0 | [summary] call to [summary param] 0 in madCallArg0ReturnToReturn in madCallArg0ReturnToReturn | | file://:0:0:0:0 | [summary] call to [summary param] 0 in madCallArg0ReturnToReturnFirst in madCallArg0ReturnToReturnFirst | @@ -283,6 +288,21 @@ sourceCallables | tests.cpp:433:6:433:10 | array | | tests.cpp:434:6:434:6 | y | flowSummaryNode +| tests.cpp:36:7:36:20 | call to localMadSource | | | test_sources | +| tests.cpp:37:7:37:21 | call to remoteMadSource | | | test_sources | +| tests.cpp:39:7:39:24 | call to localMadSourceVoid | | | test_sources | +| tests.cpp:40:7:40:27 | call to localMadSourceHasBody | | | test_sources | +| tests.cpp:45:10:45:23 | call to localMadSource | | | test_sources | +| tests.cpp:53:7:53:29 | call to remoteMadSourceIndirect | | | test_sources | +| tests.cpp:54:8:54:30 | call to remoteMadSourceIndirect | | | test_sources | +| tests.cpp:55:8:55:36 | call to remoteMadSourceDoubleIndirect | | | test_sources | +| tests.cpp:56:9:56:37 | call to remoteMadSourceDoubleIndirect | | | test_sources | +| tests.cpp:60:2:60:28 | call to remoteMadSourceIndirectArg0 | | | test_sources | +| tests.cpp:63:2:63:28 | call to remoteMadSourceIndirectArg1 | | | test_sources | +| tests.cpp:67:10:67:23 | call to localMadSource | | | test_sources | +| tests.cpp:70:7:70:57 | call to namespace2LocalMadSource | | | test_sources | +| tests.cpp:111:14:111:27 | call to localMadSource | | | test_sinks | +| tests.cpp:112:22:112:44 | call to remoteMadSourceIndirect | | | test_sinks | | tests.cpp:127:5:127:19 | [summary param] 0 in madArg0ToReturn | ParameterNode | madArg0ToReturn | madArg0ToReturn | | tests.cpp:127:5:127:19 | [summary] to write: ReturnValue in madArg0ToReturn | ReturnNode | madArg0ToReturn | madArg0ToReturn | | tests.cpp:128:6:128:28 | [summary param] 0 in madArg0ToReturnIndirect | ParameterNode | madArg0ToReturnIndirect | madArg0ToReturnIndirect | @@ -325,6 +345,8 @@ flowSummaryNode | tests.cpp:148:13:148:40 | [summary param] 0 in madArg0ToReturnFieldIndirect | ParameterNode | madArg0ToReturnFieldIndirect | madArg0ToReturnFieldIndirect | | tests.cpp:148:13:148:40 | [summary] to write: ReturnValue in madArg0ToReturnFieldIndirect | ReturnNode | madArg0ToReturnFieldIndirect | madArg0ToReturnFieldIndirect | | tests.cpp:148:13:148:40 | [summary] to write: ReturnValue.Field[*MyContainer::ptr]/Field[*ptr] in madArg0ToReturnFieldIndirect | | madArg0ToReturnFieldIndirect | madArg0ToReturnFieldIndirect | +| tests.cpp:225:30:225:44 | call to remoteMadSource | | | test_summaries | +| tests.cpp:226:39:226:53 | call to remoteMadSource | | | test_summaries | | tests.cpp:250:7:250:19 | [summary param] 0 in madArg0ToSelf | ParameterNode | madArg0ToSelf | madArg0ToSelf | | tests.cpp:250:7:250:19 | [summary param] this in madArg0ToSelf | ParameterNode | madArg0ToSelf | madArg0ToSelf | | tests.cpp:250:7:250:19 | [summary] to write: Argument[this] in madArg0ToSelf | PostUpdateNode | madArg0ToSelf | madArg0ToSelf | @@ -339,6 +361,13 @@ flowSummaryNode | tests.cpp:254:6:254:21 | [summary] to write: ReturnValue in madFieldToReturn | ReturnNode | madFieldToReturn | madFieldToReturn | | tests.cpp:277:7:277:30 | [summary param] this in namespaceMadSelfToReturn | ParameterNode | namespaceMadSelfToReturn | namespaceMadSelfToReturn | | tests.cpp:277:7:277:30 | [summary] to write: ReturnValue in namespaceMadSelfToReturn | ReturnNode | namespaceMadSelfToReturn | namespaceMadSelfToReturn | +| tests.cpp:292:10:292:30 | call to memberRemoteMadSource | | | test_class_members | +| tests.cpp:295:5:295:37 | call to memberRemoteMadSourceIndirectArg0 | | | test_class_members | +| tests.cpp:300:11:300:31 | call to memberRemoteMadSource | | | test_class_members | +| tests.cpp:301:11:301:33 | call to subtypeRemoteMadSource1 | | | test_class_members | +| tests.cpp:303:11:303:33 | call to subtypeRemoteMadSource2 | | | test_class_members | +| tests.cpp:351:26:351:46 | call to memberRemoteMadSource | | | test_class_members | +| tests.cpp:369:6:369:20 | call to qualifierSource | | | test_class_members | | tests.cpp:392:5:392:29 | [summary param] 0 in madCallArg0ReturnToReturn | ParameterNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | | tests.cpp:392:5:392:29 | [summary] read: Argument[0].Parameter[this pointer] in madCallArg0ReturnToReturn | PostUpdateNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | | tests.cpp:392:5:392:29 | [summary] read: Argument[0].ReturnValue in madCallArg0ReturnToReturn | OutNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | From 15f09e877605a0cb62971c4c6470fabce3336d5b Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Thu, 2 Jul 2026 15:23:10 +0100 Subject: [PATCH 4/5] C++: Work around problems I can't seem to solve for access paths at sources and sinks. --- cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll | 4 ++++ .../semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll index 123d99ca75c0..f67b6c5eb2d3 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll @@ -953,6 +953,10 @@ private module Cached { */ cached predicate sourceNode(DataFlow::Node node, string kind, string model) { + exists(SourceSinkInterpretationInput::InterpretNode n | + isSourceNode(n, kind, model) and n.asNode() = node + ) + or node.(Nodes::FlowSummaryNode).isSource(kind, model) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll index 806062825dc6..d33310488275 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll @@ -376,7 +376,10 @@ private class SourceModelCall extends Public::SourceElement instanceof Call { private string ext; SourceModelCall() { - sourceModel(namespace, type, subtypes, name, signature, ext, _, _, _, _) and + exists(string output | + sourceModel(namespace, type, subtypes, name, signature, ext, output, _, _, _) and + output.matches("%" + Input::encodeContent(_, _) + "%") + ) and this.getTarget() = interpretElement(namespace, type, subtypes, name, signature, ext) } From 966e83bd1b835f94908ec202939b603ee0bb94b4 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Thu, 2 Jul 2026 15:23:45 +0100 Subject: [PATCH 5/5] C++: Accept test changes. --- .../dataflow/external-models/flow.expected | 172 +++++++++--------- .../dataflow/external-models/sources.expected | 64 +++---- .../models-as-data/testModels.expected | 29 --- 3 files changed, 118 insertions(+), 147 deletions(-) diff --git a/cpp/ql/test/library-tests/dataflow/external-models/flow.expected b/cpp/ql/test/library-tests/dataflow/external-models/flow.expected index e59afbd37db7..40f55bbbda81 100644 --- a/cpp/ql/test/library-tests/dataflow/external-models/flow.expected +++ b/cpp/ql/test/library-tests/dataflow/external-models/flow.expected @@ -66,18 +66,18 @@ models | 65 | Summary: Azure; Nullable; true; Value; ; ; Argument[-1]; ReturnValue[*]; taint; manual | | 66 | Summary: boost::asio; ; false; buffer; ; ; Argument[*0]; ReturnValue; taint; manual | edges -| asio_streams.cpp:87:2:87:24 | call to read_until | asio_streams.cpp:91:7:91:17 | recv_buffer | provenance | Src:MaD:33 MaD:33 | -| asio_streams.cpp:87:2:87:24 | call to read_until | asio_streams.cpp:93:29:93:39 | *recv_buffer | provenance | Src:MaD:33 MaD:33 Sink:MaD:2 | +| asio_streams.cpp:87:34:87:44 | read_until output argument | asio_streams.cpp:91:7:91:17 | recv_buffer | provenance | Src:MaD:33 | +| asio_streams.cpp:87:34:87:44 | read_until output argument | asio_streams.cpp:93:29:93:39 | *recv_buffer | provenance | Src:MaD:33 Sink:MaD:2 | | asio_streams.cpp:97:37:97:44 | call to source | asio_streams.cpp:98:7:98:14 | send_str | provenance | TaintFunction | | asio_streams.cpp:97:37:97:44 | call to source | asio_streams.cpp:100:64:100:71 | *send_str | provenance | TaintFunction | | asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:100:44:100:62 | call to buffer | provenance | | | asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:101:7:101:17 | send_buffer | provenance | | | asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:103:29:103:39 | *send_buffer | provenance | Sink:MaD:2 | | asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:100:44:100:62 | call to buffer | provenance | MaD:66 | +| azure.cpp:253:48:253:60 | *call to GetBodyStream | azure.cpp:253:48:253:60 | *call to GetBodyStream | provenance | Src:MaD:30 | | azure.cpp:253:48:253:60 | *call to GetBodyStream | azure.cpp:257:5:257:8 | *resp | provenance | | | azure.cpp:253:48:253:60 | *call to GetBodyStream | azure.cpp:262:5:262:8 | *resp | provenance | | | azure.cpp:253:48:253:60 | *call to GetBodyStream | azure.cpp:266:38:266:41 | *resp | provenance | | -| azure.cpp:253:48:253:60 | call to GetBodyStream | azure.cpp:253:48:253:60 | *call to GetBodyStream | provenance | Src:MaD:30 MaD:30 | | azure.cpp:257:5:257:8 | *resp | azure.cpp:257:16:257:21 | Read output argument | provenance | MaD:62 | | azure.cpp:257:16:257:21 | Read output argument | azure.cpp:258:10:258:16 | * ... | provenance | | | azure.cpp:262:5:262:8 | *resp | azure.cpp:262:23:262:28 | ReadToCount output argument | provenance | MaD:63 | @@ -86,36 +86,36 @@ edges | azure.cpp:266:44:266:52 | call to ReadToEnd [element] | azure.cpp:266:44:266:52 | call to ReadToEnd [element] | provenance | | | azure.cpp:266:44:266:52 | call to ReadToEnd [element] | azure.cpp:267:10:267:12 | vec [element] | provenance | | | azure.cpp:267:10:267:12 | vec [element] | azure.cpp:267:10:267:12 | vec | provenance | | -| azure.cpp:273:52:273:61 | call to GetHeaders | azure.cpp:273:62:273:64 | call to GetHeaders | provenance | Src:MaD:29 MaD:29 | +| azure.cpp:273:62:273:64 | call to GetHeaders | azure.cpp:273:62:273:64 | call to GetHeaders | provenance | Src:MaD:29 | | azure.cpp:273:62:273:64 | call to GetHeaders | azure.cpp:274:14:274:29 | call to operator[] | provenance | TaintFunction | | azure.cpp:273:62:273:64 | call to GetHeaders | azure.cpp:274:14:274:29 | call to operator[] | provenance | TaintFunction | | azure.cpp:273:62:273:64 | call to GetHeaders | azure.cpp:274:14:274:29 | call to operator[] | provenance | TaintFunction | | azure.cpp:274:14:274:29 | call to operator[] | azure.cpp:274:10:274:29 | call to operator[] | provenance | | | azure.cpp:274:14:274:29 | call to operator[] | azure.cpp:274:14:274:29 | call to operator[] | provenance | | -| azure.cpp:277:38:277:44 | call to GetBody | azure.cpp:277:45:277:47 | call to GetBody | provenance | Src:MaD:28 MaD:28 | +| azure.cpp:277:45:277:47 | call to GetBody | azure.cpp:277:45:277:47 | call to GetBody | provenance | Src:MaD:28 | | azure.cpp:277:45:277:47 | call to GetBody | azure.cpp:278:10:278:13 | body | provenance | | | azure.cpp:277:45:277:47 | call to GetBody | azure.cpp:278:10:278:13 | body | provenance | | | azure.cpp:278:10:278:13 | body | azure.cpp:278:10:278:13 | body | provenance | | +| azure.cpp:281:68:281:84 | *call to ExtractBodyStream | azure.cpp:281:68:281:84 | *call to ExtractBodyStream | provenance | Src:MaD:27 | | azure.cpp:281:68:281:84 | *call to ExtractBodyStream | azure.cpp:282:21:282:23 | *call to get | provenance | | -| azure.cpp:281:68:281:84 | call to ExtractBodyStream | azure.cpp:281:68:281:84 | *call to ExtractBodyStream | provenance | Src:MaD:27 MaD:27 | | azure.cpp:282:21:282:23 | *call to get | azure.cpp:282:28:282:36 | call to ReadToEnd [element] | provenance | MaD:64 | | azure.cpp:282:28:282:36 | call to ReadToEnd [element] | azure.cpp:282:10:282:38 | call to ReadToEnd | provenance | | | azure.cpp:282:28:282:36 | call to ReadToEnd [element] | azure.cpp:282:28:282:36 | call to ReadToEnd [element] | provenance | | | azure.cpp:289:24:289:56 | call to GetHeader | azure.cpp:289:63:289:65 | call to Value | provenance | MaD:65 | | azure.cpp:289:32:289:40 | call to GetHeader | azure.cpp:289:24:289:56 | call to GetHeader | provenance | | -| azure.cpp:289:32:289:40 | call to GetHeader | azure.cpp:289:32:289:40 | call to GetHeader | provenance | Src:MaD:31 MaD:31 | +| azure.cpp:289:32:289:40 | call to GetHeader | azure.cpp:289:32:289:40 | call to GetHeader | provenance | Src:MaD:31 | | azure.cpp:289:63:289:65 | call to Value | azure.cpp:289:63:289:65 | call to Value | provenance | | | azure.cpp:289:63:289:65 | call to Value | azure.cpp:290:10:290:20 | headerValue | provenance | | | azure.cpp:289:63:289:65 | call to Value | azure.cpp:290:10:290:20 | headerValue | provenance | | | azure.cpp:290:10:290:20 | headerValue | azure.cpp:290:10:290:20 | headerValue | provenance | | -| azure.cpp:293:58:293:67 | call to GetHeaders | azure.cpp:293:58:293:67 | call to GetHeaders | provenance | Src:MaD:32 MaD:32 | +| azure.cpp:293:58:293:67 | call to GetHeaders | azure.cpp:293:58:293:67 | call to GetHeaders | provenance | Src:MaD:32 | | azure.cpp:293:58:293:67 | call to GetHeaders | azure.cpp:294:38:294:53 | call to operator[] | provenance | TaintFunction | | azure.cpp:294:38:294:53 | call to operator[] | azure.cpp:295:10:295:20 | contentType | provenance | | | azure.cpp:294:38:294:53 | call to operator[] | azure.cpp:295:10:295:20 | contentType | provenance | | | azure.cpp:295:10:295:20 | contentType | azure.cpp:295:10:295:20 | contentType | provenance | | | test.cpp:7:47:7:52 | value2 | test.cpp:7:64:7:69 | value2 | provenance | | | test.cpp:7:64:7:69 | value2 | test.cpp:7:5:7:30 | *ymlStepGenerated_with_body | provenance | | -| test.cpp:10:10:10:18 | call to ymlSource | test.cpp:10:10:10:18 | call to ymlSource | provenance | Src:MaD:26 MaD:26 | +| test.cpp:10:10:10:18 | call to ymlSource | test.cpp:10:10:10:18 | call to ymlSource | provenance | Src:MaD:26 | | test.cpp:10:10:10:18 | call to ymlSource | test.cpp:14:10:14:10 | x | provenance | Sink:MaD:1 | | test.cpp:10:10:10:18 | call to ymlSource | test.cpp:17:24:17:24 | x | provenance | | | test.cpp:10:10:10:18 | call to ymlSource | test.cpp:21:27:21:27 | x | provenance | | @@ -139,13 +139,13 @@ edges | test.cpp:48:13:48:13 | *s [x] | test.cpp:48:16:48:16 | x | provenance | Sink:MaD:1 | | test.cpp:56:2:56:2 | *s [post update] [x] | test.cpp:59:55:59:64 | *& ... [x] | provenance | | | test.cpp:56:2:56:18 | ... = ... | test.cpp:56:2:56:2 | *s [post update] [x] | provenance | | -| test.cpp:56:8:56:16 | call to ymlSource | test.cpp:56:2:56:18 | ... = ... | provenance | Src:MaD:26 MaD:26 | +| test.cpp:56:8:56:16 | call to ymlSource | test.cpp:56:2:56:18 | ... = ... | provenance | Src:MaD:26 | | test.cpp:59:55:59:64 | *& ... [x] | test.cpp:46:30:46:32 | *arg [x] | provenance | MaD:50 | | test.cpp:68:22:68:22 | y | test.cpp:69:11:69:11 | y | provenance | Sink:MaD:1 | | test.cpp:74:22:74:22 | y | test.cpp:75:11:75:11 | y | provenance | Sink:MaD:1 | | test.cpp:82:22:82:22 | y | test.cpp:83:11:83:11 | y | provenance | Sink:MaD:1 | | test.cpp:88:22:88:22 | y | test.cpp:89:11:89:11 | y | provenance | Sink:MaD:1 | -| test.cpp:94:10:94:18 | call to ymlSource | test.cpp:94:10:94:18 | call to ymlSource | provenance | Src:MaD:26 MaD:26 | +| test.cpp:94:10:94:18 | call to ymlSource | test.cpp:94:10:94:18 | call to ymlSource | provenance | Src:MaD:26 | | test.cpp:94:10:94:18 | call to ymlSource | test.cpp:97:26:97:26 | x | provenance | | | test.cpp:94:10:94:18 | call to ymlSource | test.cpp:101:26:101:26 | x | provenance | | | test.cpp:94:10:94:18 | call to ymlSource | test.cpp:103:63:103:63 | x | provenance | | @@ -154,22 +154,22 @@ edges | test.cpp:101:26:101:26 | x | test.cpp:74:22:74:22 | y | provenance | MaD:48 | | test.cpp:103:63:103:63 | x | test.cpp:82:22:82:22 | y | provenance | MaD:48 | | test.cpp:104:62:104:62 | x | test.cpp:88:22:88:22 | y | provenance | MaD:48 | -| test.cpp:114:10:114:18 | call to ymlSource | test.cpp:114:10:114:18 | call to ymlSource | provenance | Src:MaD:26 MaD:26 | +| test.cpp:114:10:114:18 | call to ymlSource | test.cpp:114:10:114:18 | call to ymlSource | provenance | Src:MaD:26 | | test.cpp:114:10:114:18 | call to ymlSource | test.cpp:118:44:118:44 | *x | provenance | | | test.cpp:118:11:118:42 | call to callWithNonTypeTemplate | test.cpp:118:11:118:42 | call to callWithNonTypeTemplate | provenance | | | test.cpp:118:11:118:42 | call to callWithNonTypeTemplate | test.cpp:119:10:119:11 | y2 | provenance | Sink:MaD:1 | | test.cpp:118:44:118:44 | *x | test.cpp:118:11:118:42 | call to callWithNonTypeTemplate | provenance | MaD:49 | -| test.cpp:133:10:133:18 | call to ymlSource | test.cpp:133:10:133:18 | call to ymlSource | provenance | Src:MaD:26 MaD:26 | +| test.cpp:133:10:133:18 | call to ymlSource | test.cpp:133:10:133:18 | call to ymlSource | provenance | Src:MaD:26 | | test.cpp:133:10:133:18 | call to ymlSource | test.cpp:134:45:134:45 | x | provenance | | | test.cpp:134:13:134:43 | call to templateFunction | test.cpp:134:13:134:43 | call to templateFunction | provenance | | | test.cpp:134:13:134:43 | call to templateFunction | test.cpp:135:10:135:10 | y | provenance | Sink:MaD:1 | | test.cpp:134:45:134:45 | x | test.cpp:134:13:134:43 | call to templateFunction | provenance | MaD:60 | -| test.cpp:146:10:146:18 | call to ymlSource | test.cpp:146:10:146:18 | call to ymlSource | provenance | Src:MaD:26 MaD:26 | +| test.cpp:146:10:146:18 | call to ymlSource | test.cpp:146:10:146:18 | call to ymlSource | provenance | Src:MaD:26 | | test.cpp:146:10:146:18 | call to ymlSource | test.cpp:148:26:148:26 | x | provenance | | | test.cpp:148:10:148:27 | call to function | test.cpp:148:10:148:27 | call to function | provenance | | | test.cpp:148:10:148:27 | call to function | test.cpp:149:10:149:10 | z | provenance | Sink:MaD:1 | | test.cpp:148:26:148:26 | x | test.cpp:148:10:148:27 | call to function | provenance | MaD:61 | -| test.cpp:155:10:155:18 | call to ymlSource | test.cpp:155:10:155:18 | call to ymlSource | provenance | Src:MaD:26 MaD:26 | +| test.cpp:155:10:155:18 | call to ymlSource | test.cpp:155:10:155:18 | call to ymlSource | provenance | Src:MaD:26 | | test.cpp:155:10:155:18 | call to ymlSource | test.cpp:157:26:157:26 | x | provenance | | | test.cpp:157:13:157:20 | call to function | test.cpp:157:13:157:20 | call to function | provenance | | | test.cpp:157:13:157:20 | call to function | test.cpp:158:10:158:10 | z | provenance | Sink:MaD:1 | @@ -178,7 +178,7 @@ edges | test.cpp:165:12:165:64 | call to templateFunction2 | test.cpp:164:7:164:7 | *templateFunction3 | provenance | | | test.cpp:165:12:165:64 | call to templateFunction2 | test.cpp:165:12:165:64 | call to templateFunction2 | provenance | | | test.cpp:165:69:165:69 | x | test.cpp:165:12:165:64 | call to templateFunction2 | provenance | MaD:59 | -| test.cpp:170:10:170:18 | call to ymlSource | test.cpp:170:10:170:18 | call to ymlSource | provenance | Src:MaD:26 MaD:26 | +| test.cpp:170:10:170:18 | call to ymlSource | test.cpp:170:10:170:18 | call to ymlSource | provenance | Src:MaD:26 | | test.cpp:170:10:170:18 | call to ymlSource | test.cpp:172:51:172:51 | x | provenance | | | test.cpp:172:13:172:44 | call to templateFunction3 | test.cpp:172:13:172:44 | call to templateFunction3 | provenance | | | test.cpp:172:13:172:44 | call to templateFunction3 | test.cpp:173:10:173:10 | y | provenance | Sink:MaD:1 | @@ -186,40 +186,40 @@ edges | test.cpp:172:51:172:51 | x | test.cpp:172:13:172:44 | call to templateFunction3 | provenance | MaD:59 | | test.cpp:186:2:186:2 | *s [post update] [myField] | test.cpp:187:33:187:34 | *& ... [myField] | provenance | | | test.cpp:186:2:186:24 | ... = ... | test.cpp:186:2:186:2 | *s [post update] [myField] | provenance | | -| test.cpp:186:14:186:22 | call to ymlSource | test.cpp:186:2:186:24 | ... = ... | provenance | Src:MaD:26 MaD:26 | +| test.cpp:186:14:186:22 | call to ymlSource | test.cpp:186:2:186:24 | ... = ... | provenance | Src:MaD:26 | | test.cpp:187:10:187:31 | call to read_field_from_struct | test.cpp:187:10:187:31 | call to read_field_from_struct | provenance | | | test.cpp:187:10:187:31 | call to read_field_from_struct | test.cpp:188:10:188:10 | x | provenance | Sink:MaD:1 | | test.cpp:187:33:187:34 | *& ... [myField] | test.cpp:187:10:187:31 | call to read_field_from_struct | provenance | MaD:51 | | test.cpp:199:2:199:2 | *s [post update] [myField] | test.cpp:200:35:200:36 | *& ... [myField] | provenance | | | test.cpp:199:2:199:24 | ... = ... | test.cpp:199:2:199:2 | *s [post update] [myField] | provenance | | -| test.cpp:199:14:199:22 | call to ymlSource | test.cpp:199:2:199:24 | ... = ... | provenance | Src:MaD:26 MaD:26 | +| test.cpp:199:14:199:22 | call to ymlSource | test.cpp:199:2:199:24 | ... = ... | provenance | Src:MaD:26 | | test.cpp:200:10:200:33 | call to read_field_from_struct_2 | test.cpp:200:10:200:33 | call to read_field_from_struct_2 | provenance | | | test.cpp:200:10:200:33 | call to read_field_from_struct_2 | test.cpp:201:10:201:10 | x | provenance | Sink:MaD:1 | | test.cpp:200:35:200:36 | *& ... [myField] | test.cpp:200:10:200:33 | call to read_field_from_struct_2 | provenance | MaD:52 | | test.cpp:216:3:216:4 | get_ptr output argument [value] | test.cpp:217:11:217:12 | *rf [value] | provenance | | | test.cpp:216:3:216:28 | ... = ... | test.cpp:216:3:216:4 | get_ptr output argument [value] | provenance | MaD:58 | -| test.cpp:216:18:216:26 | call to ymlSource | test.cpp:216:3:216:28 | ... = ... | provenance | Src:MaD:26 MaD:26 | +| test.cpp:216:18:216:26 | call to ymlSource | test.cpp:216:3:216:28 | ... = ... | provenance | Src:MaD:26 | | test.cpp:217:11:217:12 | *rf [value] | test.cpp:217:14:217:18 | value | provenance | | | test.cpp:217:14:217:18 | value | test.cpp:217:14:217:18 | value | provenance | | | test.cpp:217:14:217:18 | value | test.cpp:218:11:218:11 | x | provenance | Sink:MaD:1 | | test.cpp:222:3:222:3 | operator[] output argument | test.cpp:223:12:223:12 | *s | provenance | | | test.cpp:222:3:222:20 | ... = ... | test.cpp:222:3:222:3 | operator[] output argument | provenance | MaD:57 | -| test.cpp:222:10:222:18 | call to ymlSource | test.cpp:222:3:222:20 | ... = ... | provenance | Src:MaD:26 MaD:26 | +| test.cpp:222:10:222:20 | call to ymlSource | test.cpp:222:3:222:20 | ... = ... | provenance | Src:MaD:26 | | test.cpp:223:12:223:12 | *s | test.cpp:223:13:223:15 | call to operator[] | provenance | MaD:56 | | test.cpp:223:13:223:15 | call to operator[] | test.cpp:223:13:223:15 | call to operator[] | provenance | | | test.cpp:223:13:223:15 | call to operator[] | test.cpp:224:11:224:11 | c | provenance | Sink:MaD:1 | | test.cpp:235:26:235:39 | call to ymlFieldSource | test.cpp:235:26:235:39 | call to ymlFieldSource [value] | provenance | Src:MaD:25 | | test.cpp:235:26:235:39 | call to ymlFieldSource [value] | test.cpp:236:10:236:16 | *wrapper [value] | provenance | | | test.cpp:236:10:236:16 | *wrapper [value] | test.cpp:236:18:236:22 | value | provenance | Sink:MaD:1 | +| windows.cpp:22:15:22:29 | *call to GetCommandLineA | windows.cpp:22:15:22:29 | *call to GetCommandLineA | provenance | Src:MaD:3 | | windows.cpp:22:15:22:29 | *call to GetCommandLineA | windows.cpp:24:8:24:11 | * ... | provenance | | | windows.cpp:22:15:22:29 | *call to GetCommandLineA | windows.cpp:27:36:27:38 | *cmd | provenance | | -| windows.cpp:22:15:22:29 | call to GetCommandLineA | windows.cpp:22:15:22:29 | *call to GetCommandLineA | provenance | Src:MaD:3 MaD:3 | | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | provenance | | | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | windows.cpp:30:8:30:15 | * ... | provenance | | | windows.cpp:27:36:27:38 | *cmd | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | provenance | MaD:34 | +| windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | provenance | Src:MaD:4 | | windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | windows.cpp:36:10:36:13 | * ... | provenance | | -| windows.cpp:34:17:34:38 | call to GetEnvironmentStringsA | windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | provenance | Src:MaD:4 MaD:4 | -| windows.cpp:39:5:39:27 | call to GetEnvironmentVariableA | windows.cpp:41:10:41:13 | * ... | provenance | Src:MaD:5 MaD:5 | +| windows.cpp:39:36:39:38 | GetEnvironmentVariableA output argument | windows.cpp:41:10:41:13 | * ... | provenance | Src:MaD:5 | | windows.cpp:147:16:147:27 | *lpOverlapped [*hEvent] | windows.cpp:149:42:149:53 | *lpOverlapped [*hEvent] | provenance | | | windows.cpp:149:18:149:62 | *hEvent | windows.cpp:149:18:149:62 | *hEvent | provenance | | | windows.cpp:149:18:149:62 | *hEvent | windows.cpp:151:8:151:14 | * ... | provenance | | @@ -231,37 +231,37 @@ edges | windows.cpp:159:12:159:55 | hEvent | windows.cpp:160:8:160:8 | c | provenance | | | windows.cpp:159:35:159:46 | *lpOverlapped [hEvent] | windows.cpp:159:12:159:55 | hEvent | provenance | | | windows.cpp:159:35:159:46 | *lpOverlapped [hEvent] | windows.cpp:159:12:159:55 | hEvent | provenance | | -| windows.cpp:168:19:168:26 | call to ReadFile | windows.cpp:170:10:170:16 | * ... | provenance | Src:MaD:17 MaD:17 | -| windows.cpp:177:5:177:14 | call to ReadFileEx | windows.cpp:179:10:179:16 | * ... | provenance | Src:MaD:18 MaD:18 | -| windows.cpp:189:5:189:12 | call to ReadFile | windows.cpp:190:5:190:56 | *... = ... | provenance | Src:MaD:17 MaD:17 | +| windows.cpp:168:35:168:40 | ReadFile output argument | windows.cpp:170:10:170:16 | * ... | provenance | Src:MaD:17 | +| windows.cpp:177:23:177:28 | ReadFileEx output argument | windows.cpp:179:10:179:16 | * ... | provenance | Src:MaD:18 | +| windows.cpp:189:21:189:26 | ReadFile output argument | windows.cpp:190:5:190:56 | *... = ... | provenance | Src:MaD:17 | | windows.cpp:190:5:190:14 | *overlapped [post update] [*hEvent] | windows.cpp:192:53:192:63 | *& ... [*hEvent] | provenance | | | windows.cpp:190:5:190:56 | *... = ... | windows.cpp:190:5:190:14 | *overlapped [post update] [*hEvent] | provenance | | | windows.cpp:192:53:192:63 | *& ... [*hEvent] | windows.cpp:147:16:147:27 | *lpOverlapped [*hEvent] | provenance | MaD:38 | -| windows.cpp:198:5:198:12 | call to ReadFile | windows.cpp:199:5:199:57 | ... = ... | provenance | Src:MaD:17 MaD:17 | +| windows.cpp:198:21:198:26 | ReadFile output argument | windows.cpp:199:5:199:57 | ... = ... | provenance | Src:MaD:17 | | windows.cpp:199:5:199:14 | *overlapped [post update] [hEvent] | windows.cpp:201:53:201:63 | *& ... [hEvent] | provenance | | | windows.cpp:199:5:199:57 | ... = ... | windows.cpp:199:5:199:14 | *overlapped [post update] [hEvent] | provenance | | | windows.cpp:201:53:201:63 | *& ... [hEvent] | windows.cpp:157:16:157:27 | *lpOverlapped [hEvent] | provenance | MaD:38 | -| windows.cpp:209:23:209:32 | call to NtReadFile | windows.cpp:211:10:211:16 | * ... | provenance | Src:MaD:16 MaD:16 | +| windows.cpp:209:84:209:89 | NtReadFile output argument | windows.cpp:211:10:211:16 | * ... | provenance | Src:MaD:16 | +| windows.cpp:286:23:286:35 | *call to MapViewOfFile | windows.cpp:286:23:286:35 | *call to MapViewOfFile | provenance | Src:MaD:12 | | windows.cpp:286:23:286:35 | *call to MapViewOfFile | windows.cpp:287:20:287:52 | *pMapView | provenance | | -| windows.cpp:286:23:286:35 | call to MapViewOfFile | windows.cpp:286:23:286:35 | *call to MapViewOfFile | provenance | Src:MaD:12 MaD:12 | | windows.cpp:287:20:287:52 | *pMapView | windows.cpp:289:10:289:16 | * ... | provenance | | +| windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | provenance | Src:MaD:9 | | windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | windows.cpp:294:20:294:52 | *pMapView | provenance | | -| windows.cpp:293:23:293:36 | call to MapViewOfFile2 | windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | provenance | Src:MaD:9 MaD:9 | | windows.cpp:294:20:294:52 | *pMapView | windows.cpp:296:10:296:16 | * ... | provenance | | +| windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | provenance | Src:MaD:10 | | windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | windows.cpp:303:20:303:52 | *pMapView | provenance | | -| windows.cpp:302:23:302:36 | call to MapViewOfFile3 | windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | provenance | Src:MaD:10 MaD:10 | | windows.cpp:303:20:303:52 | *pMapView | windows.cpp:305:10:305:16 | * ... | provenance | | +| windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | provenance | Src:MaD:11 | | windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | windows.cpp:312:20:312:52 | *pMapView | provenance | | -| windows.cpp:311:23:311:43 | call to MapViewOfFile3FromApp | windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | provenance | Src:MaD:11 MaD:11 | | windows.cpp:312:20:312:52 | *pMapView | windows.cpp:314:10:314:16 | * ... | provenance | | +| windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | provenance | Src:MaD:13 | | windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | windows.cpp:319:20:319:52 | *pMapView | provenance | | -| windows.cpp:318:23:318:37 | call to MapViewOfFileEx | windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | provenance | Src:MaD:13 MaD:13 | | windows.cpp:319:20:319:52 | *pMapView | windows.cpp:321:10:321:16 | * ... | provenance | | +| windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | provenance | Src:MaD:14 | | windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | windows.cpp:326:20:326:52 | *pMapView | provenance | | -| windows.cpp:325:23:325:42 | call to MapViewOfFileFromApp | windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | provenance | Src:MaD:14 MaD:14 | | windows.cpp:326:20:326:52 | *pMapView | windows.cpp:328:10:328:16 | * ... | provenance | | +| windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | provenance | Src:MaD:15 | | windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | windows.cpp:333:20:333:52 | *pMapView | provenance | | -| windows.cpp:332:23:332:40 | call to MapViewOfFileNuma2 | windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | provenance | Src:MaD:15 MaD:15 | | windows.cpp:333:20:333:52 | *pMapView | windows.cpp:335:10:335:16 | * ... | provenance | | | windows.cpp:403:26:403:36 | *lpParameter [x] | windows.cpp:405:10:405:25 | *lpParameter [x] | provenance | | | windows.cpp:405:10:405:25 | *lpParameter [x] | windows.cpp:406:8:406:8 | *s [x] | provenance | | @@ -312,37 +312,37 @@ edges | windows.cpp:568:32:568:33 | *& ... | windows.cpp:568:19:568:29 | RtlMoveMemory output argument | provenance | MaD:45 | | windows.cpp:573:27:573:37 | RtlMoveVolatileMemory output argument | windows.cpp:574:10:574:23 | access to array | provenance | | | windows.cpp:573:40:573:41 | *& ... | windows.cpp:573:27:573:37 | RtlMoveVolatileMemory output argument | provenance | MaD:46 | -| windows.cpp:645:19:645:33 | call to WinHttpReadData | windows.cpp:647:10:647:16 | * ... | provenance | Src:MaD:23 MaD:23 | -| windows.cpp:652:20:652:36 | call to WinHttpReadDataEx | windows.cpp:654:10:654:16 | * ... | provenance | Src:MaD:24 MaD:24 | -| windows.cpp:659:5:659:23 | call to WinHttpQueryHeaders | windows.cpp:661:10:661:16 | * ... | provenance | Src:MaD:19 MaD:19 | -| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | windows.cpp:671:10:671:16 | * ... | provenance | Src:MaD:22 MaD:22 | -| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | windows.cpp:673:10:673:29 | * ... | provenance | Src:MaD:21 MaD:21 | -| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | windows.cpp:675:10:675:27 | * ... | provenance | Src:MaD:20 MaD:20 | +| windows.cpp:645:45:645:50 | WinHttpReadData output argument | windows.cpp:647:10:647:16 | * ... | provenance | Src:MaD:23 | +| windows.cpp:652:48:652:53 | WinHttpReadDataEx output argument | windows.cpp:654:10:654:16 | * ... | provenance | Src:MaD:24 | +| windows.cpp:659:47:659:52 | WinHttpQueryHeaders output argument | windows.cpp:661:10:661:16 | * ... | provenance | Src:MaD:19 | +| windows.cpp:669:70:669:79 | WinHttpQueryHeadersEx output argument | windows.cpp:673:10:673:29 | * ... | provenance | Src:MaD:21 | +| windows.cpp:669:82:669:87 | WinHttpQueryHeadersEx output argument | windows.cpp:671:10:671:16 | * ... | provenance | Src:MaD:22 | +| windows.cpp:669:105:669:112 | WinHttpQueryHeadersEx output argument | windows.cpp:675:10:675:27 | * ... | provenance | Src:MaD:20 | | windows.cpp:728:5:728:28 | ... = ... | windows.cpp:729:35:729:35 | *x | provenance | | | windows.cpp:728:12:728:28 | call to source | windows.cpp:728:5:728:28 | ... = ... | provenance | | | windows.cpp:729:35:729:35 | *x | windows.cpp:729:44:729:57 | WinHttpCrackUrl output argument | provenance | MaD:47 | | windows.cpp:729:44:729:57 | WinHttpCrackUrl output argument | windows.cpp:731:10:731:36 | * ... | provenance | | | windows.cpp:729:44:729:57 | WinHttpCrackUrl output argument | windows.cpp:733:10:733:35 | * ... | provenance | | | windows.cpp:729:44:729:57 | WinHttpCrackUrl output argument | windows.cpp:735:10:735:37 | * ... | provenance | | -| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:901:15:901:53 | *& ... | provenance | Src:MaD:7 MaD:7 | -| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:905:10:905:31 | * ... | provenance | Src:MaD:7 MaD:7 | -| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:907:10:907:42 | * ... | provenance | Src:MaD:7 MaD:7 | -| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:909:10:909:57 | * ... | provenance | Src:MaD:7 MaD:7 | -| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:911:10:911:60 | * ... | provenance | Src:MaD:7 MaD:7 | -| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:912:54:912:63 | FileHandle | provenance | Src:MaD:7 MaD:7 | -| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:914:10:914:70 | * ... | provenance | Src:MaD:7 MaD:7 | -| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:916:10:916:72 | * ... | provenance | Src:MaD:7 MaD:7 | -| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:918:10:918:64 | * ... | provenance | Src:MaD:7 MaD:7 | -| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:920:10:920:51 | * ... | provenance | Src:MaD:7 MaD:7 | -| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:922:10:922:52 | * ... | provenance | Src:MaD:7 MaD:7 | -| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | windows.cpp:924:10:924:63 | * ... | provenance | Src:MaD:7 MaD:7 | +| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:901:15:901:53 | *& ... | provenance | Src:MaD:7 | +| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:905:10:905:31 | * ... | provenance | Src:MaD:7 | +| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:907:10:907:42 | * ... | provenance | Src:MaD:7 | +| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:909:10:909:57 | * ... | provenance | Src:MaD:7 | +| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:911:10:911:60 | * ... | provenance | Src:MaD:7 | +| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:912:54:912:63 | FileHandle | provenance | Src:MaD:7 | +| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:914:10:914:70 | * ... | provenance | Src:MaD:7 | +| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:916:10:916:72 | * ... | provenance | Src:MaD:7 | +| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:918:10:918:64 | * ... | provenance | Src:MaD:7 | +| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:920:10:920:51 | * ... | provenance | Src:MaD:7 | +| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:922:10:922:52 | * ... | provenance | Src:MaD:7 | +| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | windows.cpp:924:10:924:63 | * ... | provenance | Src:MaD:7 | | windows.cpp:901:15:901:53 | *& ... | windows.cpp:903:10:903:11 | * ... | provenance | | -| windows.cpp:929:20:929:47 | call to HttpReceiveRequestEntityBody | windows.cpp:931:10:931:16 | * ... | provenance | Src:MaD:8 MaD:8 | -| windows.cpp:936:20:936:47 | call to HttpReceiveClientCertificate | windows.cpp:937:15:937:48 | *& ... | provenance | Src:MaD:6 MaD:6 | -| windows.cpp:936:20:936:47 | call to HttpReceiveClientCertificate | windows.cpp:941:10:941:31 | * ... | provenance | Src:MaD:6 MaD:6 | +| windows.cpp:929:70:929:75 | HttpReceiveRequestEntityBody output argument | windows.cpp:931:10:931:16 | * ... | provenance | Src:MaD:8 | +| windows.cpp:936:70:936:78 | HttpReceiveClientCertificate output argument | windows.cpp:937:15:937:48 | *& ... | provenance | Src:MaD:6 | +| windows.cpp:936:70:936:78 | HttpReceiveClientCertificate output argument | windows.cpp:941:10:941:31 | * ... | provenance | Src:MaD:6 | | windows.cpp:937:15:937:48 | *& ... | windows.cpp:939:10:939:11 | * ... | provenance | | nodes -| asio_streams.cpp:87:2:87:24 | call to read_until | semmle.label | call to read_until | +| asio_streams.cpp:87:34:87:44 | read_until output argument | semmle.label | read_until output argument | | asio_streams.cpp:91:7:91:17 | recv_buffer | semmle.label | recv_buffer | | asio_streams.cpp:93:29:93:39 | *recv_buffer | semmle.label | *recv_buffer | | asio_streams.cpp:97:37:97:44 | call to source | semmle.label | call to source | @@ -353,7 +353,7 @@ nodes | asio_streams.cpp:101:7:101:17 | send_buffer | semmle.label | send_buffer | | asio_streams.cpp:103:29:103:39 | *send_buffer | semmle.label | *send_buffer | | azure.cpp:253:48:253:60 | *call to GetBodyStream | semmle.label | *call to GetBodyStream | -| azure.cpp:253:48:253:60 | call to GetBodyStream | semmle.label | call to GetBodyStream | +| azure.cpp:253:48:253:60 | *call to GetBodyStream | semmle.label | *call to GetBodyStream | | azure.cpp:257:5:257:8 | *resp | semmle.label | *resp | | azure.cpp:257:16:257:21 | Read output argument | semmle.label | Read output argument | | azure.cpp:258:10:258:16 | * ... | semmle.label | * ... | @@ -365,19 +365,19 @@ nodes | azure.cpp:266:44:266:52 | call to ReadToEnd [element] | semmle.label | call to ReadToEnd [element] | | azure.cpp:267:10:267:12 | vec | semmle.label | vec | | azure.cpp:267:10:267:12 | vec [element] | semmle.label | vec [element] | -| azure.cpp:273:52:273:61 | call to GetHeaders | semmle.label | call to GetHeaders | +| azure.cpp:273:62:273:64 | call to GetHeaders | semmle.label | call to GetHeaders | | azure.cpp:273:62:273:64 | call to GetHeaders | semmle.label | call to GetHeaders | | azure.cpp:274:10:274:29 | call to operator[] | semmle.label | call to operator[] | | azure.cpp:274:14:274:29 | call to operator[] | semmle.label | call to operator[] | | azure.cpp:274:14:274:29 | call to operator[] | semmle.label | call to operator[] | | azure.cpp:274:14:274:29 | call to operator[] | semmle.label | call to operator[] | -| azure.cpp:277:38:277:44 | call to GetBody | semmle.label | call to GetBody | +| azure.cpp:277:45:277:47 | call to GetBody | semmle.label | call to GetBody | | azure.cpp:277:45:277:47 | call to GetBody | semmle.label | call to GetBody | | azure.cpp:278:10:278:13 | body | semmle.label | body | | azure.cpp:278:10:278:13 | body | semmle.label | body | | azure.cpp:278:10:278:13 | body | semmle.label | body | | azure.cpp:281:68:281:84 | *call to ExtractBodyStream | semmle.label | *call to ExtractBodyStream | -| azure.cpp:281:68:281:84 | call to ExtractBodyStream | semmle.label | call to ExtractBodyStream | +| azure.cpp:281:68:281:84 | *call to ExtractBodyStream | semmle.label | *call to ExtractBodyStream | | azure.cpp:282:10:282:38 | call to ReadToEnd | semmle.label | call to ReadToEnd | | azure.cpp:282:21:282:23 | *call to get | semmle.label | *call to get | | azure.cpp:282:28:282:36 | call to ReadToEnd [element] | semmle.label | call to ReadToEnd [element] | @@ -498,7 +498,7 @@ nodes | test.cpp:218:11:218:11 | x | semmle.label | x | | test.cpp:222:3:222:3 | operator[] output argument | semmle.label | operator[] output argument | | test.cpp:222:3:222:20 | ... = ... | semmle.label | ... = ... | -| test.cpp:222:10:222:18 | call to ymlSource | semmle.label | call to ymlSource | +| test.cpp:222:10:222:20 | call to ymlSource | semmle.label | call to ymlSource | | test.cpp:223:12:223:12 | *s | semmle.label | *s | | test.cpp:223:13:223:15 | call to operator[] | semmle.label | call to operator[] | | test.cpp:223:13:223:15 | call to operator[] | semmle.label | call to operator[] | @@ -508,16 +508,16 @@ nodes | test.cpp:236:10:236:16 | *wrapper [value] | semmle.label | *wrapper [value] | | test.cpp:236:18:236:22 | value | semmle.label | value | | windows.cpp:22:15:22:29 | *call to GetCommandLineA | semmle.label | *call to GetCommandLineA | -| windows.cpp:22:15:22:29 | call to GetCommandLineA | semmle.label | call to GetCommandLineA | +| windows.cpp:22:15:22:29 | *call to GetCommandLineA | semmle.label | *call to GetCommandLineA | | windows.cpp:24:8:24:11 | * ... | semmle.label | * ... | | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | semmle.label | **call to CommandLineToArgvA | | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | semmle.label | **call to CommandLineToArgvA | | windows.cpp:27:36:27:38 | *cmd | semmle.label | *cmd | | windows.cpp:30:8:30:15 | * ... | semmle.label | * ... | | windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | semmle.label | *call to GetEnvironmentStringsA | -| windows.cpp:34:17:34:38 | call to GetEnvironmentStringsA | semmle.label | call to GetEnvironmentStringsA | +| windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | semmle.label | *call to GetEnvironmentStringsA | | windows.cpp:36:10:36:13 | * ... | semmle.label | * ... | -| windows.cpp:39:5:39:27 | call to GetEnvironmentVariableA | semmle.label | call to GetEnvironmentVariableA | +| windows.cpp:39:36:39:38 | GetEnvironmentVariableA output argument | semmle.label | GetEnvironmentVariableA output argument | | windows.cpp:41:10:41:13 | * ... | semmle.label | * ... | | windows.cpp:147:16:147:27 | *lpOverlapped [*hEvent] | semmle.label | *lpOverlapped [*hEvent] | | windows.cpp:149:18:149:62 | *hEvent | semmle.label | *hEvent | @@ -530,46 +530,46 @@ nodes | windows.cpp:159:12:159:55 | hEvent | semmle.label | hEvent | | windows.cpp:159:35:159:46 | *lpOverlapped [hEvent] | semmle.label | *lpOverlapped [hEvent] | | windows.cpp:160:8:160:8 | c | semmle.label | c | -| windows.cpp:168:19:168:26 | call to ReadFile | semmle.label | call to ReadFile | +| windows.cpp:168:35:168:40 | ReadFile output argument | semmle.label | ReadFile output argument | | windows.cpp:170:10:170:16 | * ... | semmle.label | * ... | -| windows.cpp:177:5:177:14 | call to ReadFileEx | semmle.label | call to ReadFileEx | +| windows.cpp:177:23:177:28 | ReadFileEx output argument | semmle.label | ReadFileEx output argument | | windows.cpp:179:10:179:16 | * ... | semmle.label | * ... | -| windows.cpp:189:5:189:12 | call to ReadFile | semmle.label | call to ReadFile | +| windows.cpp:189:21:189:26 | ReadFile output argument | semmle.label | ReadFile output argument | | windows.cpp:190:5:190:14 | *overlapped [post update] [*hEvent] | semmle.label | *overlapped [post update] [*hEvent] | | windows.cpp:190:5:190:56 | *... = ... | semmle.label | *... = ... | | windows.cpp:192:53:192:63 | *& ... [*hEvent] | semmle.label | *& ... [*hEvent] | -| windows.cpp:198:5:198:12 | call to ReadFile | semmle.label | call to ReadFile | +| windows.cpp:198:21:198:26 | ReadFile output argument | semmle.label | ReadFile output argument | | windows.cpp:199:5:199:14 | *overlapped [post update] [hEvent] | semmle.label | *overlapped [post update] [hEvent] | | windows.cpp:199:5:199:57 | ... = ... | semmle.label | ... = ... | | windows.cpp:201:53:201:63 | *& ... [hEvent] | semmle.label | *& ... [hEvent] | -| windows.cpp:209:23:209:32 | call to NtReadFile | semmle.label | call to NtReadFile | +| windows.cpp:209:84:209:89 | NtReadFile output argument | semmle.label | NtReadFile output argument | | windows.cpp:211:10:211:16 | * ... | semmle.label | * ... | | windows.cpp:286:23:286:35 | *call to MapViewOfFile | semmle.label | *call to MapViewOfFile | -| windows.cpp:286:23:286:35 | call to MapViewOfFile | semmle.label | call to MapViewOfFile | +| windows.cpp:286:23:286:35 | *call to MapViewOfFile | semmle.label | *call to MapViewOfFile | | windows.cpp:287:20:287:52 | *pMapView | semmle.label | *pMapView | | windows.cpp:289:10:289:16 | * ... | semmle.label | * ... | | windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | semmle.label | *call to MapViewOfFile2 | -| windows.cpp:293:23:293:36 | call to MapViewOfFile2 | semmle.label | call to MapViewOfFile2 | +| windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | semmle.label | *call to MapViewOfFile2 | | windows.cpp:294:20:294:52 | *pMapView | semmle.label | *pMapView | | windows.cpp:296:10:296:16 | * ... | semmle.label | * ... | | windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | semmle.label | *call to MapViewOfFile3 | -| windows.cpp:302:23:302:36 | call to MapViewOfFile3 | semmle.label | call to MapViewOfFile3 | +| windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | semmle.label | *call to MapViewOfFile3 | | windows.cpp:303:20:303:52 | *pMapView | semmle.label | *pMapView | | windows.cpp:305:10:305:16 | * ... | semmle.label | * ... | | windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | semmle.label | *call to MapViewOfFile3FromApp | -| windows.cpp:311:23:311:43 | call to MapViewOfFile3FromApp | semmle.label | call to MapViewOfFile3FromApp | +| windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | semmle.label | *call to MapViewOfFile3FromApp | | windows.cpp:312:20:312:52 | *pMapView | semmle.label | *pMapView | | windows.cpp:314:10:314:16 | * ... | semmle.label | * ... | | windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | semmle.label | *call to MapViewOfFileEx | -| windows.cpp:318:23:318:37 | call to MapViewOfFileEx | semmle.label | call to MapViewOfFileEx | +| windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | semmle.label | *call to MapViewOfFileEx | | windows.cpp:319:20:319:52 | *pMapView | semmle.label | *pMapView | | windows.cpp:321:10:321:16 | * ... | semmle.label | * ... | | windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | semmle.label | *call to MapViewOfFileFromApp | -| windows.cpp:325:23:325:42 | call to MapViewOfFileFromApp | semmle.label | call to MapViewOfFileFromApp | +| windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | semmle.label | *call to MapViewOfFileFromApp | | windows.cpp:326:20:326:52 | *pMapView | semmle.label | *pMapView | | windows.cpp:328:10:328:16 | * ... | semmle.label | * ... | | windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | semmle.label | *call to MapViewOfFileNuma2 | -| windows.cpp:332:23:332:40 | call to MapViewOfFileNuma2 | semmle.label | call to MapViewOfFileNuma2 | +| windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | semmle.label | *call to MapViewOfFileNuma2 | | windows.cpp:333:20:333:52 | *pMapView | semmle.label | *pMapView | | windows.cpp:335:10:335:16 | * ... | semmle.label | * ... | | windows.cpp:403:26:403:36 | *lpParameter [x] | semmle.label | *lpParameter [x] | @@ -622,15 +622,15 @@ nodes | windows.cpp:573:27:573:37 | RtlMoveVolatileMemory output argument | semmle.label | RtlMoveVolatileMemory output argument | | windows.cpp:573:40:573:41 | *& ... | semmle.label | *& ... | | windows.cpp:574:10:574:23 | access to array | semmle.label | access to array | -| windows.cpp:645:19:645:33 | call to WinHttpReadData | semmle.label | call to WinHttpReadData | +| windows.cpp:645:45:645:50 | WinHttpReadData output argument | semmle.label | WinHttpReadData output argument | | windows.cpp:647:10:647:16 | * ... | semmle.label | * ... | -| windows.cpp:652:20:652:36 | call to WinHttpReadDataEx | semmle.label | call to WinHttpReadDataEx | +| windows.cpp:652:48:652:53 | WinHttpReadDataEx output argument | semmle.label | WinHttpReadDataEx output argument | | windows.cpp:654:10:654:16 | * ... | semmle.label | * ... | -| windows.cpp:659:5:659:23 | call to WinHttpQueryHeaders | semmle.label | call to WinHttpQueryHeaders | +| windows.cpp:659:47:659:52 | WinHttpQueryHeaders output argument | semmle.label | WinHttpQueryHeaders output argument | | windows.cpp:661:10:661:16 | * ... | semmle.label | * ... | -| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | semmle.label | call to WinHttpQueryHeadersEx | -| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | semmle.label | call to WinHttpQueryHeadersEx | -| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | semmle.label | call to WinHttpQueryHeadersEx | +| windows.cpp:669:70:669:79 | WinHttpQueryHeadersEx output argument | semmle.label | WinHttpQueryHeadersEx output argument | +| windows.cpp:669:82:669:87 | WinHttpQueryHeadersEx output argument | semmle.label | WinHttpQueryHeadersEx output argument | +| windows.cpp:669:105:669:112 | WinHttpQueryHeadersEx output argument | semmle.label | WinHttpQueryHeadersEx output argument | | windows.cpp:671:10:671:16 | * ... | semmle.label | * ... | | windows.cpp:673:10:673:29 | * ... | semmle.label | * ... | | windows.cpp:675:10:675:27 | * ... | semmle.label | * ... | @@ -641,7 +641,7 @@ nodes | windows.cpp:731:10:731:36 | * ... | semmle.label | * ... | | windows.cpp:733:10:733:35 | * ... | semmle.label | * ... | | windows.cpp:735:10:735:37 | * ... | semmle.label | * ... | -| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | semmle.label | call to HttpReceiveHttpRequest | +| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | semmle.label | HttpReceiveHttpRequest output argument | | windows.cpp:901:15:901:53 | *& ... | semmle.label | *& ... | | windows.cpp:903:10:903:11 | * ... | semmle.label | * ... | | windows.cpp:905:10:905:31 | * ... | semmle.label | * ... | @@ -655,9 +655,9 @@ nodes | windows.cpp:920:10:920:51 | * ... | semmle.label | * ... | | windows.cpp:922:10:922:52 | * ... | semmle.label | * ... | | windows.cpp:924:10:924:63 | * ... | semmle.label | * ... | -| windows.cpp:929:20:929:47 | call to HttpReceiveRequestEntityBody | semmle.label | call to HttpReceiveRequestEntityBody | +| windows.cpp:929:70:929:75 | HttpReceiveRequestEntityBody output argument | semmle.label | HttpReceiveRequestEntityBody output argument | | windows.cpp:931:10:931:16 | * ... | semmle.label | * ... | -| windows.cpp:936:20:936:47 | call to HttpReceiveClientCertificate | semmle.label | call to HttpReceiveClientCertificate | +| windows.cpp:936:70:936:78 | HttpReceiveClientCertificate output argument | semmle.label | HttpReceiveClientCertificate output argument | | windows.cpp:937:15:937:48 | *& ... | semmle.label | *& ... | | windows.cpp:939:10:939:11 | * ... | semmle.label | * ... | | windows.cpp:941:10:941:31 | * ... | semmle.label | * ... | diff --git a/cpp/ql/test/library-tests/dataflow/external-models/sources.expected b/cpp/ql/test/library-tests/dataflow/external-models/sources.expected index d9c621c36cf3..6585c88dc6dd 100644 --- a/cpp/ql/test/library-tests/dataflow/external-models/sources.expected +++ b/cpp/ql/test/library-tests/dataflow/external-models/sources.expected @@ -1,8 +1,8 @@ -| asio_streams.cpp:87:2:87:24 | call to read_until | remote | -| azure.cpp:253:48:253:60 | call to GetBodyStream | remote | -| azure.cpp:273:52:273:61 | call to GetHeaders | remote | -| azure.cpp:277:38:277:44 | call to GetBody | remote | -| azure.cpp:281:68:281:84 | call to ExtractBodyStream | remote | +| asio_streams.cpp:87:34:87:44 | read_until output argument | remote | +| azure.cpp:253:48:253:60 | *call to GetBodyStream | remote | +| azure.cpp:273:62:273:64 | call to GetHeaders | remote | +| azure.cpp:277:45:277:47 | call to GetBody | remote | +| azure.cpp:281:68:281:84 | *call to ExtractBodyStream | remote | | azure.cpp:289:32:289:40 | call to GetHeader | remote | | azure.cpp:293:58:293:67 | call to GetHeaders | remote | | test.cpp:10:10:10:18 | call to ymlSource | local | @@ -16,30 +16,30 @@ | test.cpp:186:14:186:22 | call to ymlSource | local | | test.cpp:199:14:199:22 | call to ymlSource | local | | test.cpp:216:18:216:26 | call to ymlSource | local | -| test.cpp:222:10:222:18 | call to ymlSource | local | -| windows.cpp:22:15:22:29 | call to GetCommandLineA | local | -| windows.cpp:34:17:34:38 | call to GetEnvironmentStringsA | local | -| windows.cpp:39:5:39:27 | call to GetEnvironmentVariableA | local | -| windows.cpp:168:19:168:26 | call to ReadFile | local | -| windows.cpp:177:5:177:14 | call to ReadFileEx | local | -| windows.cpp:189:5:189:12 | call to ReadFile | local | -| windows.cpp:192:5:192:14 | call to ReadFileEx | local | -| windows.cpp:198:5:198:12 | call to ReadFile | local | -| windows.cpp:201:5:201:14 | call to ReadFileEx | local | -| windows.cpp:209:23:209:32 | call to NtReadFile | local | -| windows.cpp:286:23:286:35 | call to MapViewOfFile | local | -| windows.cpp:293:23:293:36 | call to MapViewOfFile2 | local | -| windows.cpp:302:23:302:36 | call to MapViewOfFile3 | local | -| windows.cpp:311:23:311:43 | call to MapViewOfFile3FromApp | local | -| windows.cpp:318:23:318:37 | call to MapViewOfFileEx | local | -| windows.cpp:325:23:325:42 | call to MapViewOfFileFromApp | local | -| windows.cpp:332:23:332:40 | call to MapViewOfFileNuma2 | local | -| windows.cpp:645:19:645:33 | call to WinHttpReadData | remote | -| windows.cpp:652:20:652:36 | call to WinHttpReadDataEx | remote | -| windows.cpp:659:5:659:23 | call to WinHttpQueryHeaders | remote | -| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | remote | -| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | remote | -| windows.cpp:669:20:669:40 | call to WinHttpQueryHeadersEx | remote | -| windows.cpp:900:20:900:41 | call to HttpReceiveHttpRequest | remote | -| windows.cpp:929:20:929:47 | call to HttpReceiveRequestEntityBody | remote | -| windows.cpp:936:20:936:47 | call to HttpReceiveClientCertificate | remote | +| test.cpp:222:10:222:20 | call to ymlSource | local | +| windows.cpp:22:15:22:29 | *call to GetCommandLineA | local | +| windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | local | +| windows.cpp:39:36:39:38 | GetEnvironmentVariableA output argument | local | +| windows.cpp:168:35:168:40 | ReadFile output argument | local | +| windows.cpp:177:23:177:28 | ReadFileEx output argument | local | +| windows.cpp:189:21:189:26 | ReadFile output argument | local | +| windows.cpp:192:23:192:29 | ReadFileEx output argument | local | +| windows.cpp:198:21:198:26 | ReadFile output argument | local | +| windows.cpp:201:23:201:29 | ReadFileEx output argument | local | +| windows.cpp:209:84:209:89 | NtReadFile output argument | local | +| windows.cpp:286:23:286:35 | *call to MapViewOfFile | local | +| windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | local | +| windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | local | +| windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | local | +| windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | local | +| windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | local | +| windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | local | +| windows.cpp:645:45:645:50 | WinHttpReadData output argument | remote | +| windows.cpp:652:48:652:53 | WinHttpReadDataEx output argument | remote | +| windows.cpp:659:47:659:52 | WinHttpQueryHeaders output argument | remote | +| windows.cpp:669:70:669:79 | WinHttpQueryHeadersEx output argument | remote | +| windows.cpp:669:82:669:87 | WinHttpQueryHeadersEx output argument | remote | +| windows.cpp:669:105:669:112 | WinHttpQueryHeadersEx output argument | remote | +| windows.cpp:900:64:900:77 | HttpReceiveHttpRequest output argument | remote | +| windows.cpp:929:70:929:75 | HttpReceiveRequestEntityBody output argument | remote | +| windows.cpp:936:70:936:78 | HttpReceiveClientCertificate output argument | remote | diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.expected b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.expected index a60e8aac10c2..7d1e2bc9327a 100644 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.expected +++ b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.expected @@ -18,10 +18,6 @@ postIsInSameCallable reverseRead argHasPostUpdate postWithInFlow -| tests.cpp:60:30:60:31 | remoteMadSourceIndirectArg0 output argument | PostUpdateNode should not be the target of local flow. | -| tests.cpp:63:33:63:33 | remoteMadSourceIndirectArg1 output argument | PostUpdateNode should not be the target of local flow. | -| tests.cpp:295:39:295:40 | memberRemoteMadSourceIndirectArg0 output argument | PostUpdateNode should not be the target of local flow. | -| tests.cpp:369:2:369:4 | qualifierSource output argument | PostUpdateNode should not be the target of local flow. | viableImplInCallContextTooLarge uniqueParameterNodeAtPosition uniqueParameterNodePosition @@ -32,7 +28,6 @@ multipleArgumentCall lambdaCallEnclosingCallableMismatch speculativeStepAlreadyHasModel testFailures -| tests.cpp:77:11:77:17 | // $ ir | Missing result: ir | summaryCalls | file://:0:0:0:0 | [summary] call to [summary param] 0 in madCallArg0ReturnToReturn in madCallArg0ReturnToReturn | | file://:0:0:0:0 | [summary] call to [summary param] 0 in madCallArg0ReturnToReturnFirst in madCallArg0ReturnToReturnFirst | @@ -288,21 +283,6 @@ sourceCallables | tests.cpp:433:6:433:10 | array | | tests.cpp:434:6:434:6 | y | flowSummaryNode -| tests.cpp:36:7:36:20 | call to localMadSource | | | test_sources | -| tests.cpp:37:7:37:21 | call to remoteMadSource | | | test_sources | -| tests.cpp:39:7:39:24 | call to localMadSourceVoid | | | test_sources | -| tests.cpp:40:7:40:27 | call to localMadSourceHasBody | | | test_sources | -| tests.cpp:45:10:45:23 | call to localMadSource | | | test_sources | -| tests.cpp:53:7:53:29 | call to remoteMadSourceIndirect | | | test_sources | -| tests.cpp:54:8:54:30 | call to remoteMadSourceIndirect | | | test_sources | -| tests.cpp:55:8:55:36 | call to remoteMadSourceDoubleIndirect | | | test_sources | -| tests.cpp:56:9:56:37 | call to remoteMadSourceDoubleIndirect | | | test_sources | -| tests.cpp:60:2:60:28 | call to remoteMadSourceIndirectArg0 | | | test_sources | -| tests.cpp:63:2:63:28 | call to remoteMadSourceIndirectArg1 | | | test_sources | -| tests.cpp:67:10:67:23 | call to localMadSource | | | test_sources | -| tests.cpp:70:7:70:57 | call to namespace2LocalMadSource | | | test_sources | -| tests.cpp:111:14:111:27 | call to localMadSource | | | test_sinks | -| tests.cpp:112:22:112:44 | call to remoteMadSourceIndirect | | | test_sinks | | tests.cpp:127:5:127:19 | [summary param] 0 in madArg0ToReturn | ParameterNode | madArg0ToReturn | madArg0ToReturn | | tests.cpp:127:5:127:19 | [summary] to write: ReturnValue in madArg0ToReturn | ReturnNode | madArg0ToReturn | madArg0ToReturn | | tests.cpp:128:6:128:28 | [summary param] 0 in madArg0ToReturnIndirect | ParameterNode | madArg0ToReturnIndirect | madArg0ToReturnIndirect | @@ -345,8 +325,6 @@ flowSummaryNode | tests.cpp:148:13:148:40 | [summary param] 0 in madArg0ToReturnFieldIndirect | ParameterNode | madArg0ToReturnFieldIndirect | madArg0ToReturnFieldIndirect | | tests.cpp:148:13:148:40 | [summary] to write: ReturnValue in madArg0ToReturnFieldIndirect | ReturnNode | madArg0ToReturnFieldIndirect | madArg0ToReturnFieldIndirect | | tests.cpp:148:13:148:40 | [summary] to write: ReturnValue.Field[*MyContainer::ptr]/Field[*ptr] in madArg0ToReturnFieldIndirect | | madArg0ToReturnFieldIndirect | madArg0ToReturnFieldIndirect | -| tests.cpp:225:30:225:44 | call to remoteMadSource | | | test_summaries | -| tests.cpp:226:39:226:53 | call to remoteMadSource | | | test_summaries | | tests.cpp:250:7:250:19 | [summary param] 0 in madArg0ToSelf | ParameterNode | madArg0ToSelf | madArg0ToSelf | | tests.cpp:250:7:250:19 | [summary param] this in madArg0ToSelf | ParameterNode | madArg0ToSelf | madArg0ToSelf | | tests.cpp:250:7:250:19 | [summary] to write: Argument[this] in madArg0ToSelf | PostUpdateNode | madArg0ToSelf | madArg0ToSelf | @@ -361,13 +339,6 @@ flowSummaryNode | tests.cpp:254:6:254:21 | [summary] to write: ReturnValue in madFieldToReturn | ReturnNode | madFieldToReturn | madFieldToReturn | | tests.cpp:277:7:277:30 | [summary param] this in namespaceMadSelfToReturn | ParameterNode | namespaceMadSelfToReturn | namespaceMadSelfToReturn | | tests.cpp:277:7:277:30 | [summary] to write: ReturnValue in namespaceMadSelfToReturn | ReturnNode | namespaceMadSelfToReturn | namespaceMadSelfToReturn | -| tests.cpp:292:10:292:30 | call to memberRemoteMadSource | | | test_class_members | -| tests.cpp:295:5:295:37 | call to memberRemoteMadSourceIndirectArg0 | | | test_class_members | -| tests.cpp:300:11:300:31 | call to memberRemoteMadSource | | | test_class_members | -| tests.cpp:301:11:301:33 | call to subtypeRemoteMadSource1 | | | test_class_members | -| tests.cpp:303:11:303:33 | call to subtypeRemoteMadSource2 | | | test_class_members | -| tests.cpp:351:26:351:46 | call to memberRemoteMadSource | | | test_class_members | -| tests.cpp:369:6:369:20 | call to qualifierSource | | | test_class_members | | tests.cpp:392:5:392:29 | [summary param] 0 in madCallArg0ReturnToReturn | ParameterNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | | tests.cpp:392:5:392:29 | [summary] read: Argument[0].Parameter[this pointer] in madCallArg0ReturnToReturn | PostUpdateNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | | tests.cpp:392:5:392:29 | [summary] read: Argument[0].ReturnValue in madCallArg0ReturnToReturn | OutNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn |