You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2 lines
21 KiB

This file contains ambiguous Unicode characters!

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>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>SiofTrace (infer.Checkers.SiofTrace)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><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; <a href="../index.html">Checkers</a> &#x00BB; SiofTrace</nav><h1>Module <code>Checkers.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="../../Absint/SinkTrace/index.html#module-type-S">Absint.SinkTrace.S</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="../../Absint/SinkTrace/module-type-S/Sink/Kind/index.html#type-t">Sink.Kind.t</a> = <a href="../../IR/Pvar/index.html#type-t">IR.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="../../Absint/TaintTrace/index.html#module-type-S">Absint.TaintTrace.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="../../Absint/TaintTrace/index.html#module-type-Spec">Absint.TaintTrace.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="../../Absint/Source/index.html#module-type-S">Absint.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="../../Absint/Sink/index.html#module-type-S">Absint.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="../../Absint/Sanitizer/index.html#module-type-S">Absint.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="../../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><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="../../Absint/AbstractDomain/index.html#module-type-WithBottom">Absint.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="../../Absint/AbstractDomain/index.html#module-type-S">Absint.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="../../Absint/AbstractDomain/index.html#module-type-NoJoin">Absint.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="../../IStdlib/PrettyPrintable/index.html#module-type-PrintableType">IStdlib.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="../../IStdlib/PrettyPrintable/index.html#module-F">IStdlib.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-leq"><a href="#val-leq" class="anchor"></a><code><span class="keyword">val</span> leq : <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="../../Absint/Passthrough/index.html#module-Set">Absint.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="../../IBase/IssueType/index.html#type-t">IBase.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="../../Absint/CallSite/index.html#type-t">Absint.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="../../Absint/CallSite/index.html#type-t">Absint.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="../../IR/Procname/index.html#type-t">IR.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="../../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><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="../../Absint/AccessPath/Abs/index.html#type-t">Absint.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="../../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><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="../../Absint/CallSite/index.html#type-t">Absint.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="../../Absint/TaintTrace/index.html#module-F">Absint.TaintTrace.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="../../IR/Procname/index.html#type-t">IR.Procname.t</a> <span>&#45;&gt;</span> <a href="../../Absint/TaintTrace/index.html#module-F">Absint.TaintTrace.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="../../Absint__Passthrough/index.html#module-Set">Absint.Passthrough.Set</a>.t * <span><span>(<a href="Sink/index.html#type-t">Sink.t</a> * <a href="../../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><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="../../IR/Procname/index.html#type-t">IR.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="../../IR/Procname/index.html#type-t">IR.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="../../Absint/CallSite/index.html#type-t">Absint.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="../../Absint/Errlog/index.html#type-loc_trace_elem">Absint.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="../../IStdlib/PrettyPrintable/index.html#module-type-PrintableOrderedType">IStdlib.PrettyPrintable.PrintableOrderedType</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="../../IStdlib/PrettyPrintable/index.html#module-type-PrintableOrderedType">PrintableOrderedType</a>.t = <a href="../../IR/Pvar/index.html#type-t">IR.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="../../IStdlib/PrettyPrintable/index.html#module-type-PPSet">IStdlib.PrettyPrintable.PPSet</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="../../IStdlib/PrettyPrintable/index.html#module-type-PPSet">PPSet</a>.elt = <a href="../../IR/Pvar/index.html#type-t">IR.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="../../IR/Pvar/index.html#type-t">IR.Pvar.t</a> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.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="../../IBase/Location/index.html#type-t">IBase.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="../../Absint/Errlog/index.html#type-loc_trace_elem">Absint.Errlog.loc_trace_elem</a> list</span></code></dt></dl></div></body></html>