<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>InferModules__SiofTrace (infer.InferModules__SiofTrace)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc %%VERSION%%"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> – <a href="../index.html">infer</a> &#x00BB; InferModules__SiofTrace</nav><h1>Module <code>InferModules__SiofTrace</code></h1></header><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <a href="../InferModules/SinkTrace/index.html#module-type-S">InferModules.SinkTrace.S</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="../InferModules/SinkTrace/module-type-S/Sink/Kind/index.html#type-t">Sink.Kind.t</a> = <a href="../../InferIR/InferIR/Pvar/index.html#type-t">InferIR.Pvar.t</a></code></span></summary><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <a href="../InferModules/Trace/index.html#module-type-S">InferModules.Trace.S</a></code></span></summary><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <a href="../InferModules/Trace/index.html#module-type-Spec">InferModules.Trace.Spec</a></code></span></summary><div class="spec module" id="module-Source"><a href="#module-Source" class="anchor"></a><code><span class="keyword">module</span> <a href="Source/index.html">Source</a> : <a href="../InferModules/Source/index.html#module-type-S">InferModules.Source.S</a></code></div><div class="spec module" id="module-Sink"><a href="#module-Sink" class="anchor"></a><code><span class="keyword">module</span> <a href="Sink/index.html">Sink</a> : <a href="../InferModules/Sink/index.html#module-type-S">InferModules.Sink.S</a></code></div><div class="spec module" id="module-Sanitizer"><a href="#module-Sanitizer" class="anchor"></a><code><span class="keyword">module</span> <a href="Sanitizer/index.html">Sanitizer</a> : <a href="../InferModules/Sanitizer/index.html#module-type-S">InferModules.Sanitizer.S</a></code></div><dl><dt class="spec value" id="val-get_report"><a href="#val-get_report" class="anchor"></a><code><span class="keyword">val</span> get_report : <a href="Source/index.html#type-t">Source.t</a> <span>&#45;&gt;</span> <a href="Sink/index.html#type-t">Sink.t</a> <span>&#45;&gt;</span> <span><a href="Sanitizer/index.html#type-t">Sanitizer.t</a> list</span> <span>&#45;&gt;</span> <span><a href="../../InferBase/InferBase/IssueType/index.html#type-t">InferBase.IssueType.t</a> option</span></code></dt><dd><p>return Some(issue) a trace from source to sink passing through the given sanitizers should be reported, None otherwise</p></dd></dl></details></div></div></div><div><div class="spec include"><div class="doc"><p>bottom = this trace has no source or sink data</p><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <a href="../InferModules/AbstractDomain/index.html#module-type-WithBottom">InferModules.AbstractDomain.WithBottom</a></code></span></summary><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <a href="../InferModules/AbstractDomain/index.html#module-type-S">InferModules.AbstractDomain.S</a></code></span></summary><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <a href="../InferModules/AbstractDomain/index.html#module-type-NoJoin">InferModules.AbstractDomain.NoJoin</a></code></span></summary><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <a href="../../InferStdlib/InferStdlib/PrettyPrintable/index.html#module-type-PrintableType">InferStdlib.PrettyPrintable.PrintableType</a></code></span></summary><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code></dt></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <a href="../../InferStdlib/InferStdlib/PrettyPrintable/index.html#module-F">InferStdlib.PrettyPrintable.F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl></details></div></div></div><dl><dt class="spec value" id="val-(&lt;=)"><a href="#val-(&lt;=)" class="anchor"></a><code><span class="keyword">val</span> (&lt;=) : <span>lhs:<a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span>rhs:<a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> bool</code></dt><dd><p>the implication relation: <code>lhs &lt;= rhs</code> means <code>lhs |- rhs</code></p></dd></dl></details></div></div></div><dl><dt class="spec value" id="val-join"><a href="#val-join" class="anchor"></a><code><span class="keyword">val</span> join : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-widen"><a href="#val-widen" class="anchor"></a><code><span class="keyword">val</span> widen : <span>prev:<a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span>next:<a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span>num_iters:int</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt></dl></details></div></div></div><dl><dt class="spec value" id="val-bottom"><a href="#val-bottom" class="anchor"></a><code><span class="keyword">val</span> bottom : <a href="index.html#type-t">t</a></code></dt><dd><p>The bottom value of the domain.</p></dd></dl><dl><dt class="spec value" id="val-is_bottom"><a href="#val-is_bottom" class="anchor"></a><code><span class="keyword">val</span> is_bottom : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> bool</code></dt><dd><p>Return true if this is the bottom value</p></dd></dl></details></div></div></div><div class="spec module" id="module-Sources"><a href="#module-Sources" class="anchor"></a><code><span class="keyword">module</span> <a href="Sources/index.html">Sources</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="spec module" id="module-Sinks"><a href="#module-Sinks" class="anchor"></a><code><span class="keyword">module</span> Sinks = <a href="Sink/index.html#module-Set">Sink.Set</a></code></div><div class="spec module" id="module-Passthroughs"><a href="#module-Passthroughs" class="anchor"></a><code><span class="keyword">module</span> Passthroughs = <a href="../InferModules/Passthrough/index.html#module-Set">InferModules.Passthrough.Set</a></code></div><dl><dt class="spec type" id="type-path"><a href="#type-path" class="anchor"></a><code><span class="keyword">type</span> path</code><code> = <a href="index.html#module-Passthroughs">Passthroughs</a>.t * <span><span>(<a href="Source/index.html#type-t">Source.t</a> * <a href="index.html#module-Passthroughs">Passthroughs</a>.t)</span> list</span> * <span><span>(<a href="Sink/index.html#type-t">Sink.t</a> * <a href="index.html#module-Passthroughs">Passthroughs</a>.t)</span> list</span></code></dt><dd><p>path from a source to a sink with passthroughs at each step in the call stack. the first set of passthroughs are the ones in the &quot;reporting&quot; procedure that calls the first function in both the source and sink stack</p></dd></dl><dl><dt class="spec type" id="type-report"><a href="#type-report" class="anchor"></a><code><span class="keyword">type</span> report</code><code> = </code><code>{</code><table class="record"><tr id="type-report.issue" class="anchored"><td class="def field"><a href="#type-report.issue" class="anchor"></a><code>issue : <a href="../../InferBase/InferBase/IssueType/index.html#type-t">InferBase.IssueType.t</a>;</code></td></tr><tr id="type-report.path_source" class="anchored"><td class="def field"><a href="#type-report.path_source" class="anchor"></a><code>path_source : <a href="Source/index.html#type-t">Source.t</a>;</code></td></tr><tr id="type-report.path_sink" class="anchored"><td class="def field"><a href="#type-report.path_sink" class="anchor"></a><code>path_sink : <a href="Sink/index.html#type-t">Sink.t</a>;</code></td></tr><tr id="type-report.path_passthroughs" class="anchored"><td class="def field"><a href="#type-report.path_passthroughs" class="anchor"></a><code>path_passthroughs : <a href="index.html#module-Passthroughs">Passthroughs</a>.t;</code></td></tr></table><code>}</code></dt></dl><dl><dt class="spec value" id="val-sources"><a href="#val-sources" class="anchor"></a><code><span class="keyword">val</span> sources : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="Sources/index.html#type-t">Sources.t</a></code></dt><dd><p>get the sources of the trace.</p></dd></dl><dl><dt class="spec value" id="val-sinks"><a href="#val-sinks" class="anchor"></a><code><span class="keyword">val</span> sinks : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#module-Sinks">Sinks</a>.t</code></dt><dd><p>get the sinks of the trace</p></dd></dl><dl><dt class="spec value" id="val-passthroughs"><a href="#val-passthroughs" class="anchor"></a><code><span class="keyword">val</span> passthroughs : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#module-Passthroughs">Passthroughs</a>.t</code></dt><dd><p>get the passthroughs of the trace</p></dd></dl><dl><dt class="spec value" id="val-get_reports"><a href="#val-get_reports" class="anchor"></a><code><span class="keyword">val</span> get_reports : <span>?&#8288;cur_site:<a href="../../InferIR/InferIR/CallSite/index.html#type-t">InferIR.CallSite.t</a></span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="index.html#type-report">report</a> list</span></code></dt><dd><p>get the reportable source-sink flows in this trace. specifying <code>cur_site</code> restricts the reported paths to ones introduced by the call at <code>cur_site</code></p></dd></dl><dl><dt class="spec value" id="val-get_reportable_paths"><a href="#val-get_reportable_paths" class="anchor"></a><code><span class="keyword">val</span> get_reportable_paths : <span>?&#8288;cur_site:<a href="../../InferIR/InferIR/CallSite/index.html#type-t">InferIR.CallSite.t</a></span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span>trace_of_pname:<span>(<a href="../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a>)</span></span> <span>&#45;&gt;</span> <span><a href="index.html#type-path">path</a> list</span></code></dt><dd><p>get a path for each of the reportable source -&gt; sink flows in this trace. specifying <code>cur_site</code> restricts the reported paths to ones introduced by the call at <code>cur_site</code></p></dd></dl><dl><dt class="spec value" id="val-to_loc_trace"><a href="#val-to_loc_trace" class="anchor"></a><code><span class="keyword">val</span> to_loc_trace : <span>?&#8288;desc_of_source:<span>(<a href="Source/index.html#type-t">Source.t</a> <span>&#45;&gt;</span> string)</span></span> <span>&#45;&gt;</span> <span>?&#8288;source_should_nest:<span>(<a href="Source/index.html#type-t">Source.t</a> <span>&#45;&gt;</span> bool)</span></span> <span>&#45;&gt;</span> <span>?&#8288;desc_of_sink:<span>(<a href="Sink/index.html#type-t">Sink.t</a> <span>&#45;&gt;</span> string)</span></span> <span>&#45;&gt;</span> <span>?&#8288;sink_should_nest:<span>(<a href="Sink/index.html#type-t">Sink.t</a> <span>&#45;&gt;</span> bool)</span></span> <span>&#45;&gt;</span> <a href="index.html#type-path">path</a> <span>&#45;&gt;</span> <a href="../../InferIR/InferIR/Errlog/index.html#type-loc_trace">InferIR.Errlog.loc_trace</a></code></dt><dd><p>create a loc_trace from a path; <code>source_should_nest s</code> should be true when we are going one deeper into a call-chain, ie when lt_level should be bumper in the next loc_trace_elem, and similarly for <code>sink_should_nest</code></p></dd></dl><dl><dt class="spec value" id="val-of_source"><a href="#val-of_source" class="anchor"></a><code><span class="keyword">val</span> of_source : <a href="Source/index.html#type-t">Source.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>create a trace from a source</p></dd></dl><dl><dt class="spec value" id="val-of_footprint"><a href="#val-of_footprint" class="anchor"></a><code><span class="keyword">val</span> of_footprint : <a href="../../InferIR/InferIR/AccessPath/Abs/index.html#type-t">InferIR.AccessPath.Abs.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>create a trace from a footprint access path</p></dd></dl><dl><dt class="spec value" id="val-add_source"><a href="#val-add_source" class="anchor"></a><code><span class="keyword">val</span> add_source : <a href="Source/index.html#type-t">Source.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>add a source to the current trace</p></dd></dl><dl><dt class="spec value" id="val-add_sink"><a href="#val-add_sink" class="anchor"></a><code><span class="keyword">val</span> add_sink : <a href="Sink/index.html#type-t">Sink.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>add a sink to the current trace.</p></dd></dl><dl><dt class="spec value" id="val-add_sanitizer"><a href="#val-add_sanitizer" class="anchor"></a><code><span class="keyword">val</span> add_sanitizer : <a href="Sanitizer/index.html#type-t">Sanitizer.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>add a sanitizer to the current trace</p></dd></dl><dl><dt class="spec value" id="val-update_sources"><a href="#val-update_sources" class="anchor"></a><code><span class="keyword">val</span> update_sources : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="Sources/index.html#type-t">Sources.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-update_sinks"><a href="#val-update_sinks" class="anchor"></a><code><span class="keyword">val</span> update_sinks : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#module-Sinks">Sinks</a>.t <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>replace sinks with new ones</p></dd></dl><dl><dt class="spec value" id="val-get_footprint_indexes"><a href="#val-get_footprint_indexes" class="anchor"></a><code><span class="keyword">val</span> get_footprint_indexes : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="../../InferStdlib/InferStdlib/index.html#module-IntSet">InferStdlib.IntSet</a>.t</code></dt><dd><p>get the footprint indexes for all of the sources in the trace</p></dd></dl><dl><dt class="spec value" id="val-append"><a href="#val-append" class="anchor"></a><code><span class="keyword">val</span> append : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="../../InferIR/InferIR/CallSite/index.html#type-t">InferIR.CallSite.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>append the trace for given call site to the current caller trace</p></dd></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <a href="../InferModules/Trace/index.html#module-F">InferModules.Trace.F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt><dt class="spec value" id="val-pp_path"><a href="#val-pp_path" class="anchor"></a><code><span class="keyword">val</span> pp_path : <a href="../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span>&#45;&gt;</span> <a href="../InferModules/Trace/index.html#module-F">InferModules.Trace.F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-path">path</a> <span>&#45;&gt;</span> unit</code></dt><dd><p>pretty-print a path in the context of the given procname</p></dd></dl></details></div></div></div><dl><dt class="spec type" id="type-sink_path"><a href="#type-sink_path" class="anchor"></a><code><span class="keyword">type</span> sink_path</code><code> = <a href="../InferModules__Passthrough/index.html#module-Set">InferModules.Passthrough.Set</a>.t * <span><span>(<a href="Sink/index.html#type-t">Sink.t</a> * <a href="../InferModules__Passthrough/index.html#module-Set">InferModules.Passthrough.Set</a>.t)</span> list</span></code></dt><dd><p>A path from some procedure via the given passthroughs to the given call stack, with passthroughs for each callee</p></dd></dl><dl><dt class="spec value" id="val-get_reportable_sink_paths"><a href="#val-get_reportable_sink_paths" class="anchor"></a><code><span class="keyword">val</span> get_reportable_sink_paths : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span>trace_of_pname:<span>(<a href="../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a>)</span></span> <span>&#45;&gt;</span> <span><a href="index.html#type-sink_path">sink_path</a> list</span></code></dt><dd><p>get a path for each of the reportable flows to a sink in this trace</p></dd></dl><dl><dt class="spec value" id="val-get_reportable_sink_path"><a href="#val-get_reportable_sink_path" class="anchor"></a><code><span class="keyword">val</span> get_reportable_sink_path : <a href="Sink/index.html#type-t">Sink.t</a> <span>&#45;&gt;</span> <span>trace_of_pname:<span>(<a href="../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a>)</span></span> <span>&#45;&gt;</span> <span><a href="index.html#type-sink_path">sink_path</a> option</span></code></dt><dd><p>get a report for a single sink</p></dd></dl><dl><dt class="spec value" id="val-with_callsite"><a href="#val-with_callsite" class="anchor"></a><code><span class="keyword">val</span> with_callsite : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="../../InferIR/InferIR/CallSite/index.html#type-t">InferIR.CallSite.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dd><p>update sink with the given call site</p></dd></dl><dl><dt class="spec value" id="val-of_sink"><a href="#val-of_sink" class="anchor"></a><code><span class="keyword">val</span> of_sink : <a href="Sink/index.html#type-t">Sink.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-to_sink_loc_trace"><a href="#val-to_sink_loc_trace" class="anchor"></a><code><span class="keyword">val</span> to_sink_loc_trace : <span>?&#8288;desc_of_sink:<span>(<a href="Sink/index.html#type-t">Sink.t</a> <span>&#45;&gt;</span> string)</span></span> <span>&#45;&gt;</span> <span>?&#8288;sink_should_nest:<span>(<a href="Sink/index.html#type-t">Sink.t</a> <span>&#45;&gt;</span> bool)</span></span> <span>&#45;&gt;</span> <a href="index.html#type-sink_path">sink_path</a> <span>&#45;&gt;</span> <span><a href="../../InferIR/InferIR/Errlog/index.html#type-loc_trace_elem">InferIR.Errlog.loc_trace_elem</a> list</span></code></dt></dl></details></div></div></div><div class="spec module" id="module-GlobalVar"><a href="#module-GlobalVar" class="anchor"></a><code><span class="keyword">module</span> GlobalVar : <a href="../../InferStdlib/InferStdlib/PrettyPrintable/index.html#module-type-PrintableOrderedType">InferStdlib.PrettyPrintable.PrintableOrderedType</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="../../InferStdlib/InferStdlib/PrettyPrintable/index.html#module-type-PrintableOrderedType">PrintableOrderedType</a>.t = <a href="../../InferIR/InferIR/Pvar/index.html#type-t">InferIR.Pvar.t</a></code></div><div class="spec module" id="module-GlobalVarSet"><a href="#module-GlobalVarSet" class="anchor"></a><code><span class="keyword">module</span> GlobalVarSet : <a href="../../InferStdlib/InferStdlib/PrettyPrintable/index.html#module-type-PPSet">InferStdlib.PrettyPrintable.PPSet</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="../../InferStdlib/InferStdlib/PrettyPrintable/index.html#module-type-PPSet">PPSet</a>.elt = <a href="../../InferIR/InferIR/Pvar/index.html#type-t">InferIR.Pvar.t</a></code></div><dl><dt class="spec value" id="val-make_access"><a href="#val-make_access" class="anchor"></a><code><span class="keyword">val</span> make_access : <a href="../../InferIR/InferIR/Pvar/index.html#type-t">InferIR.Pvar.t</a> <span>&#45;&gt;</span> <a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a> <span>&#45;&gt;</span> <a href="Sink/index.html#type-t">Sink.t</a></code></dt><dt class="spec value" id="val-trace_of_error"><a href="#val-trace_of_error" class="anchor"></a><code><span class="keyword">val</span> trace_of_error : <a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> <a href="index.html#type-sink_path">sink_path</a> <span>&#45;&gt;</span> <span><a href="../../InferIR/InferIR/Errlog/index.html#type-loc_trace_elem">InferIR.Errlog.loc_trace_elem</a> list</span></code></dt></dl></div></body></html>