This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
<!DOCTYPE html>
<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>SiofTrace (infer.Checkers.SiofTrace)</title><linkrel="stylesheet"href="../../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc 1.5.0"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><scriptsrc="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><divclass="content"><header><nav><ahref="../index.html">Up</a>–<ahref="../../index.html">infer</a>»<ahref="../index.html">Checkers</a>» SiofTrace</nav><h1>Module <code>Checkers.SiofTrace</code></h1></header><div><divclass="spec include"><divclass="doc"><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include</span><ahref="../../Absint/SinkTrace/index.html#module-type-S">Absint.SinkTrace.S</a><spanclass="keyword">with</span><spanclass="keyword">type</span><ahref="../../Absint/SinkTrace/module-type-S/Sink/Kind/index.html#type-t">Sink.Kind.t</a> = <ahref="../../IR/Pvar/index.html#type-t">IR.Pvar.t</a></code></span></summary><div><divclass="spec include"><divclass="doc"><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include</span><ahref="../../Absint/TaintTrace/index.html#module-type-S">Absint.TaintTrace.S</a></code></span></summary><div><divclass="spec include"><divclass="doc"><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include</span><ahref="../../Absint/TaintTrace/index.html#module-type-Spec">Absint.TaintTrace.Spec</a></code></span></summary><divclass="spec module"id="module-Source"><ahref="#module-Source"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Source/index.html">Source</a> : <ahref="../../Absint/Source/index.html#module-type-S">Absint.Source.S</a></code></div><divclass="spec module"id="module-Sink"><ahref="#module-Sink"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Sink/index.html">Sink</a> : <ahref="../../Absint/Sink/index.html#module-type-S">Absint.Sink.S</a></code></div><divclass="spec module"id="module-Sanitizer"><ahref="#module-Sanitizer"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Sanitizer/index.html">Sanitizer</a> : <ahref="../../Absint/Sanitizer/index.html#module-type-S">Absint.Sanitizer.S</a></code></div><dl><dtclass="spec value"id="val-get_report"><ahref="#val-get_report"class="anchor"></a><code><spanclass="keyword">val</span> get_report : <ahref="Source/index.html#type-t">Source.t</a><span>-></span><ahref="Sink/index.html#type-t">Sink.t</a><span>-></span><span><ahref="Sanitizer/index.html#type-t">Sanitizer.t</a> list</span><span>-></span><span><ahref="../../IBase/IssueType/index.html#type-t">IBase.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><divclass="spec include"><divclass="doc"><p>bottom = this trace has no source or sink data</p><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include</span><ahref="../../Absint/AbstractDomain/index.html#module-type-WithBottom">Absint.AbstractDomain.WithBottom</a></code></span></summary><div><divclass="spec include"><divclass="doc"><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include</span><ahref="../../Absint/AbstractDomain/index.html#module-type-S">Absint.AbstractDomain.S</a></code></span></summary><div><divclass="spec include"><divclass="doc"><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include</span><ahref="../../Absint/AbstractDomain/index.html#module-type-NoJoin">Absint.AbstractDomain.NoJoin</a></code></span></summary><div><divclass="spec include"><divclass="doc"><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include</span><ahref="../../IStdlib/PrettyPrintable/index.html#module-type-PrintableType">IStdlib.PrettyPrintable.PrintableType</a></code></span></summary><dl><dtclass="spec type"id="type-t"><ahref="#type-t"class="anchor"></a><code><spanclass="keyword">type</span> t</code></dt></dl><dl><dtclass="spec value"id="val-pp"><ahref="#val-pp"class="anchor"></a><code><spanclass="keyword">val</span> pp : <ahref="../../IStdlib/PrettyPrintable/index.html#module-F">IStdlib.PrettyPrintable.F</a>.formatter <span>-></span><ahref="index.html#type-t">t</a><span>-></span> unit</code></dt></dl></details></div></div></div><dl><dtclass="spec value"id="val-leq"><ahref="#val-leq"class="anchor"></a><code><spanclass="keyword">val</span> leq : <span>lhs:<ahref="index.html#type-t">t</a></span><span>-></span><span>rhs:<ahref="index.html#type-t">t</a></span><span>-></span> bool</code></dt><dd><p>the implication relation: <code>lhs <= rhs</code> means <code>lhs |- rhs</code></p></dd></dl></details></div></div></div><dl><dtclass="spec value"id="val-join"><ahref="#val-join"class="anchor"></a><code><spanclass="keyword">val</span> join : <ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dtclass="spec value"id="val-widen"><ahref="#val-widen"class="anchor"></a><code><spanclass="keyword">val</span> widen : <span>prev:<ahref="index.html#type-t">t</a></span><span>-></span><span>next:<ahref="index.html#type-t">t</a></span><span>-></span><span>num_iters:int</span><span>-></span><ahref="index.html#type-t">t</a></code></dt></dl></details></div></div></div><dl><dtclass="spec value"id="val-bottom"><ahref="#val-bottom"class="anchor"></a><code><spanclass="keyword">val</span> bottom : <ahref="index.html#type-t">t</a></code></dt><dd><p>The bottom value of the domain.</p></dd></dl><dl><dtclass="spec value"id="val-is_bottom"><ahref="#val-is_bottom"class="anchor"></a><code><spanclass="keyword">val</span> is_bottom : <ahref="index.html#type-t">t</a><span>-></span> bool</code></dt><dd><p>Return true if this is the bottom value</p></dd></dl></details></div></div></div><divclass="spec module"id="module-Sources"><ahref="#module-Sources"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Sources/index.html">Sources</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><divclass="spec module"id="module-Sinks"><ahref="#module-Sinks"class="anchor"></a><code><spanclass="keyword">module</span> Sinks = <ahref="Sink/index.html#module-Set">Sink.Set</a></code></div><divclass="spec module"id="module-Passthroughs"><ahref="#module-Passthroughs"class="anchor"></a><code><spanclass="keyword">module</span> Passthroughs = <ahref="../../Absint/Passthrough/index.html#module-Set">Absint.Passthrough.Set</a></code></div><dl><dtclass="spec type"id="type-path"><ahref="#type-path"class="anchor"></a><code><spanclass="keyword">type</span> path</code><code> = <ahref="index.html#module-Passthroughs">Passthroughs</a>.t * <span><span>(<ahref="Source/index.html#type-t">Source.t</a> * <ahref="index.html#module-Passthroughs">Passthroughs</a>.t)</span> list</span> * <span><span>(<ahref="Sink/index.html#type-t">Sink.t</a> * <ahref="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 "reporting" procedure that calls the first function in both the source and sink stack</p></dd></dl><dl><dtclass="spec type"id="type-report"><ahref="#type-report"class="anchor"></a><code><spanclass="keyword">type</span> report</code><code> = </code><code>{</code><tableclass="record"><trid="type-report.issue"class="anchored"><tdclass="def field"><ahref="#type-report.issue"class="anchor"></a><code>issue : <ahref="../../IBase/IssueType/index.html#type-t">IBase.IssueType.t</a>;</code></td></tr><trid="type-report.path_source"class="anchored"><tdclass="def field"><ahref="#type-report.path_source"class="anchor"></a><code>path_source : <ahref="Source/index.html#type-t">Source.t</a>;</code></td></tr><trid="type-report.path_sink"class="anchored"><tdclass="def field"><ahref="#type-report.path_sink"class="anchor"></a><code>path_sink : <ahref="Sink/index.html#type-t">Sink.t</a>;</code></td></tr><trid="type-report.path_passthroughs"class="anchored"><tdclass="def field"><ahref="#type-report.path_passthroughs"class="anchor"></a><code>path_passthroughs : <ahref="index.html#module-Passthroughs">Passthroughs</a>.t;</code></td></tr></table><code>}</code></dt></dl><dl><dtclass="spec value"id="val-sources"><ahref="#val-sources"class="anchor"></a><code><spanclass="keyword">val</span> sources : <ahref="index.html#type-t">t</a><span>-></span><ahref="Sources/index.html#type-t">Sources.t</a></code></dt><dd><p>get the sources of the trace.</p></dd></dl><dl><dtclass="spec value"id="val-sinks"><ahref="#val-sinks"class="anchor"></a><code><spanclass="keyword">val</span> sinks : <ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#module-Sinks">Sinks</a>.t</code></dt><dd><p>get the sinks of the trace</p></dd></dl><dl><dtclass="spec value"id="val-passthroughs"><ahref="#val-passthroughs"class="anchor"></a><code><spanclass="keyword">val</span> passthroughs : <ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#module-Passthroughs">Passthroughs</a>.t</code></dt><dd><p>get the passthroughs of the trace</p></dd></dl><dl><dtclass="spec value"id="val-get_reports"><ahref="#val-get_reports"class="anchor"></a><code><spanclass="keyword">val</span> get_reports : <span>?⁠cur_site:<ahref="../../Absint/CallSite/index.html#type-t">Absint.CallSite.t</a></span><span>-></span><ahref="index.html#type-t">t</a><span>-></span><span><ahref="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><dtclass="spec value"id="val-get_reportable_paths"><ahref="#val-get_reportable_paths"class="anchor"></a><code><spanclass="keyword">val</span> get_reportable_paths : <span>?⁠cur_site:<ahref="../../Absint/CallSite/index.html#type-t">Absint.CallSite.t</a></span><span>-></span><ahref="index.html#type-t">t</a><span>-></span><span>trace_of_pname:<span>(<ahref="../../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><ahref="index.html#type-t">t</a>)</span></span><span>-></span><span><ahref="index.html#type-path">path</a> list</span></code></dt><dd><p>get a path for each of 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><dtclass="spec value"id="val-to_loc_trace"><ahref="#val-to_loc_trace"class="anchor"></a><code><spanclass="keyword">val</span> to_loc_trace : <span>?⁠desc_of_source:<span>(<ahref="Source/index.html#type-t">Source.t</a><span>-></span> string)</span></span><span>-></span><span>?⁠source_should_nest:<span>(<ahref="Source/index.html#type-t">Source.t</a><span>-></span> bool)</span></span><span>-></span><span>?⁠desc_of_sink:<span>(<ahref="Sink/index.html#type-t">Sink.t</a><span>-></span> string)</span></span><span>-></span><span>?⁠sink_should_nest:<span>(<ahref="Sink/index.html#type-t">Sink.t</a><span>-></span> bool)</span></span><span>-></span><ahref="index.html#type-path">path</a><span>-></span><ahref="../../Absint/Errlog/index.html#type-loc_trace">Absint.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><dtclass="spec value"id="val-of_source"><ahref="#val-of_source"class="anchor"></a><code><spanclass="keyword">val</span> of_source : <ahref="Source/index.html#type-t">Source.t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dd><p>create a trace from a source</p></dd></dl><dl><dtclass="spec value"id="val-of_footprint"><ahref="#val-of_footprint"class="anchor"></a><code><spanclass="keyword">val</span> of_footprint : <ahref="../../Absint/AccessPath/Abs/index.html#type-t">Absint.AccessPath.Abs.t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dd><p>create a trace from a footprint access path</p></dd></dl><dl><dtclass="spec value"id="val-add_source"><ahref="#val-add_source"class="anchor"></a><code><spanclass="keyword">val</span> add_source : <ahref="Source/index.html#type-t">Source.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dd><p>add a source to the current trace</p></dd></dl><dl><dtclass="spec value"id="val-add_sink"><ahref="#val-add_sink"class="anchor"></a><code><spanclass="keyword">val</span> add_sink : <ahref="Sink/index.html#type-t">Sink.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dd><p>add a sink to the current trace.</p></dd></dl><dl><dtclass="spec value"id="val-add_sanitizer"><ahref="#val-add_sanitizer"class="anchor"></a><code><spanclass="keyword">val</span> add_sanitizer : <ahref="Sanitizer/index.html#type-t">Sanitizer.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dd><p>add a sanitizer to the current trace</p></dd></dl><dl><dtclass="spec value"id="val-update_sources"><ahref="#val-update_sources"class="anchor"></a><code><spanclass="keyword">val</span> update_sources : <ahref="index.html#type-t">t</a><span>-></span><ahref="Sources/index.html#type-t">Sources.t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dtclass="spec value"id="val-update_sinks"><ahref="#val-update_sinks"class="anchor"></a><code><spanclass="keyword">val</span> update_sinks : <ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#module-Sinks">Sinks</a>.t <span>-></span><ahref="index.html#type-t">t</a></code></dt><dd><p>replace sinks with new ones</p></dd></dl><dl><dtclass="spec value"id="val-get_footprint_indexes"><ahref="#val-get_footprint_indexes"class="anchor"></a><code><spanclass="keyword">val</span> get_footprint_indexes : <ahref="index.html#type-t">t</a><span>-></span><ahref="../../IStdlib/index.html#module-IntSet">IStdlib.IntSet</a>.t</code></dt><dd><p>get the footprint indexes for all of the sources in the trace</p></dd></dl><dl><dtclass="spec value"id="val-append"><ahref="#val-append"class="anchor"></a><code><spanclass="keyword">val</span> append : <ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="../../Absint/CallSite/index.html#type-t">Absint.CallSite.t</a><span>-></span><ahref="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><dtclass="spec value"id="val-pp"><ahref="#val-pp"class="anchor"></a><code><spanclass="keyword">val</span> pp : <ahref="../../Absint/TaintTrace/index.html#module-F">Absint.TaintTrace.F</a>.formatter <span>-></span><ahref="index.html#type-t">t</a><span>-></span> unit</code></dt><dtclass="spec value"id="val-pp_path"><ahref="#val-pp_path"class="anchor"></a><code><spanclass="keyword">val</span> pp_path : <ahref="../../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><ahref="../../Absint/TaintTrace/index.html#module-F">Absint.TaintTrace.F</a>.formatter <span>-></span><ahref="index.html#type-path">path</a><span>-></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><dtclass="spec type"id="type-sink_path"><ahref="#type-sink_path"class="anchor"></a><code><spanclass="keyword">type</span> sink_path</code><code> = <ahref="../../Absint__Passthrough/index.html#module-Set">Absint.Passthrough.Set</a>.t * <span><span>(<ahref="Sink/index.html#type-t">Sink.t</a> * <ahref="../../Absint__Passthrough/index.html#module-Set">Absint.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><dtclass="spec value"id="val-get_reportable_sink_paths"><ahref="#val-get_reportable_sink_paths"class="anchor"></a><code><spanclass="keyword">val</span> get_reportable_sink_paths : <ahref="index.html#type-t">t</a><span>-></span><span>trace_of_pname:<span>(<ahref="../../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><ahref="index.html#type-t">t</a>)</span></span><span>-></span><span><ahref="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><dtclass="spec value"id="val-get_reportable_sink_path"><ahref="#val-get_reportable_sink_path"class="anchor"></a><code><spanclass="keyword">val</span> get_reportable_sink_path : <ahref="Sink/index.html#type-t">Sink.t</a><span>-></span><span>trace_of_pname:<span>(<ahref="../../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><ahref="index.html#type-t">t</a>)</span></span><span>-></span><span><ahref="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><dtclass="spec value"id="val-with_callsite"><ahref="#val-with_callsite"class="anchor"></a><code><spanclass="keyword">val</span> with_callsite : <ahref="index.html#type-t">t</a><span>-></span><ahref="../../Absint/CallSite/index.html#type-t">Absint.CallSite.t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dd><p>update sink with the given call site</p></dd></dl><dl><dtclass="spec value"id="val-of_sink"><ahref="#val-of_sink"class="anchor"></a><code><spanclass="keyword">val</span> of_sink : <ahref="Sink/index.html#type-t">Sink.t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dtclass="spec value"id="val-to_sink_loc_trace"><ahref="#val-to_sink_loc_trace"class="anchor"></a><code><spanclass="keyword">val</span> to_sink_loc_trace : <span>?⁠desc_of_sink:<span>(<ahref="Sink/index.html#type-t">Sink.t</a><span>-></span> string)</span></span><span>-></span><span>?⁠sink_should_nest:<span>(<ahref="Sink/index.html#type-t">Sink.t</a><span>-></span> bool)</span></span><span>-></span><ahref="index.html#type-sink_path">sink_path</a><span>-></span><span><ahref="../../Absint/Errlog/index.html#type-loc_trace_elem">Absint.Errlog.loc_trace_elem</a> list</span></code></dt></dl></details></div></div></div><divclass="spec module"id="module-GlobalVar"><ahref="#module-GlobalVar"class="anchor"></a><code><spanclass="keyword">module</span> GlobalVar : <ahref="../../IStdlib/PrettyPrintable/index.html#module-type-PrintableOrderedType">IStdlib.PrettyPrintable.PrintableOrderedType</a><spanclass="keyword">with</span><spanclass="keyword">type</span><ahref="../../IStdlib/PrettyPrintable/index.html#module-type-PrintableOrderedType">PrintableOrderedType</a>.t = <ahref="../../IR/Pvar/index.html#type-t">IR.Pvar.t</a></code></div><divclass="spec module"id="module-GlobalVarSet"><ahref="#module-GlobalVarSet"class="anchor"></a><code><spanclass="keyword">module</span> GlobalVarSet : <ahref="../../IStdlib/PrettyPrintable/index.html#module-type-PPSet">IStdlib.PrettyPrintable.PPSet</a><spanclass="keyword">with</span><spanclass="keyword">type</span><ahref="../../IStdlib/PrettyPrintable/index.html#module-type-PPSet">PPSet</a>.elt = <ahref="../../IR/Pvar/index.html#type-t">IR.Pvar.t</a></code></div><dl><dtclass="spec value"id="val-make_access"><ahref="#val-make_access"class="anchor"></a><code><spanclass="keyword">val</span> make_access : <ahref="../../IR/Pvar/index.html#type-t">IR.Pvar.t</a><span>-></span><ahref="../../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span><ahref="Sink/index.html#type-t">Sink.t</a></code></dt><dtclass="spec value"id="val-trace_of_error"><ahref="#val-trace_of_error"class="anchor"></a><code><spanclass="keyword">val</span> trace_of_error : <ahref="../../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span> string <span>-></span><ahref="index.html#type-sink_path">sink_path</a><span>-></span><span><ahref="../../Absint/Errlog/index.html#type-loc_trace_elem">Absint.Errlog.loc_trace_elem</a> list</span></code></dt></dl></div></body></html>