include SinkTrace.S with type Sink.Kind.t = InferIR.Pvar.tinclude Trace.Sinclude Trace.Specmodule Sanitizer : Sanitizer.Sval get_report : Source.t ‑> Sink.t ‑> Sanitizer.t list ‑> InferBase.IssueType.t optionreturn Some(issue) a trace from source to sink passing through the given sanitizers should be reported, None otherwise
include AbstractDomain.WithBottom with type astate := astateval empty : astateThe bottom value of the domain. Naming it empty instead of bottom helps to bind the empty value for sets and maps to the natural definition for bottom
module Sources : sig ... endmodule Sinks = Sink.Setmodule Passthroughs = Passthrough.Setpath 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
type report = {issue : InferBase.IssueType.t; |
path_source : Source.t; |
path_sink : Sink.t; |
path_passthroughs : Passthroughs.t; |
}val get_reports : ?cur_site:InferIR.CallSite.t ‑> t ‑> report listget the reportable source-sink flows in this trace. specifying cur_site restricts the
reported paths to ones introduced by the call at cur_site
val get_reportable_paths : ?cur_site:InferIR.CallSite.t ‑> t ‑> trace_of_pname:(InferIR.Typ.Procname.t ‑> t) ‑> path listget a path for each of the reportable source -> sink flows in this trace. specifying
cur_site restricts the reported paths to ones introduced by the call at cur_site
val to_loc_trace : ?desc_of_source:(Source.t ‑> string) ‑> ?source_should_nest:(Source.t ‑> bool) ‑> ?desc_of_sink:(Sink.t ‑> string) ‑> ?sink_should_nest:(Sink.t ‑> bool) ‑> path ‑> InferIR.Errlog.loc_tracecreate a loc_trace from a path; source_should_nest s 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 sink_should_nest
val get_footprint_indexes : t ‑> InferStdlib.IntSet.tget the footprint indexes for all of the sources in the trace
val append : t ‑> t ‑> InferIR.CallSite.t ‑> tappend the trace for given call site to the current caller trace
val pp : InferModules.Trace.F.formatter ‑> t ‑> unitval pp_path : InferIR.Typ.Procname.t ‑> InferModules.Trace.F.formatter ‑> path ‑> unitpretty-print a path in the context of the given procname
A path from some procedure via the given passthroughs to the given call stack, with passthroughs for each callee
val get_reportable_sink_paths : t ‑> trace_of_pname:(InferIR.Typ.Procname.t ‑> t) ‑> sink_path listget a path for each of the reportable flows to a sink in this trace
val get_reportable_sink_path : Sink.t ‑> trace_of_pname:(InferIR.Typ.Procname.t ‑> t) ‑> sink_path optionget a report for a single sink
val to_sink_loc_trace : ?desc_of_sink:(Sink.t ‑> string) ‑> ?sink_should_nest:(Sink.t ‑> bool) ‑> sink_path ‑> InferIR.Errlog.loc_trace_elem listmodule GlobalVar : InferStdlib.PrettyPrintable.PrintableOrderedType with type PrintableOrderedType.t = InferIR.Pvar.tmodule GlobalVarSet : InferStdlib.PrettyPrintable.PPSet with type PPSet.elt = InferIR.Pvar.tval make_access : InferIR.Pvar.t ‑> InferBase.Location.t ‑> Sink.tval trace_of_error : InferBase.Location.t ‑> string ‑> sink_path ‑> InferIR.Errlog.loc_trace_elem list