Module InferModules.SiofTrace
include SinkTrace.S with type Sink.Kind.t = InferIR.Pvar.t
include Trace.S
include Trace.Spec
module Sanitizer : Sanitizer.S
val get_report : Source.t -> Sink.t -> Sanitizer.t list -> InferBase.IssueType.t option
return Some(issue) a trace from source to sink passing through the given sanitizers should be reported, None otherwise
bottom = this trace has no source or sink data
include AbstractDomain.WithBottom
include AbstractDomain.S
include AbstractDomain.NoJoin
include InferStdlib.PrettyPrintable.PrintableType
val pp : InferStdlib.PrettyPrintable.F.formatter -> t -> unit
val bottom : t
The bottom value of the domain.
val is_bottom : t -> bool
Return true if this is the bottom value
module Sources : sig ... end
module Sinks = Sink.Set
module Passthroughs = Passthrough.Set
type path
= Passthroughs.t * (Source.t * Passthroughs.t) list * (Sink.t * Passthroughs.t) list
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
type report
=
{
issue : InferBase.IssueType.t;
path_source : Source.t;
path_sink : Sink.t;
path_passthroughs : Passthroughs.t;
}
val passthroughs : t -> Passthroughs.t
get the passthroughs of the trace
val get_reports : ?cur_site:InferIR.CallSite.t -> t -> report list
get the reportable source-sink flows in this trace. specifying
cur_site
restricts the reported paths to ones introduced by the call atcur_site
val get_reportable_paths : ?cur_site:InferIR.CallSite.t -> t -> trace_of_pname:(InferIR.Typ.Procname.t -> t) -> path list
get 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 atcur_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_trace
create 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 forsink_should_nest
val of_footprint : InferIR.AccessPath.Abs.t -> t
create a trace from a footprint access path
val add_sanitizer : Sanitizer.t -> t -> t
add a sanitizer to the current trace
val update_sources : t -> Sources.t -> t
val update_sinks : t -> Sinks.t -> t
replace sinks with new ones
val get_footprint_indexes : t -> InferStdlib.IntSet.t
get the footprint indexes for all of the sources in the trace
val append : t -> t -> InferIR.CallSite.t -> t
append the trace for given call site to the current caller trace
val pp : InferModules.Trace.F.formatter -> t -> unit
val pp_path : InferIR.Typ.Procname.t -> InferModules.Trace.F.formatter -> path -> unit
pretty-print a path in the context of the given procname
type sink_path
= InferModules.Passthrough.Set.t * (Sink.t * InferModules.Passthrough.Set.t) list
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 list
get 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 option
get a report for a single sink
val with_callsite : t -> InferIR.CallSite.t -> t
update sink with the given call site
module GlobalVar : InferStdlib.PrettyPrintable.PrintableOrderedType with type PrintableOrderedType.t = InferIR.Pvar.t
module GlobalVarSet : InferStdlib.PrettyPrintable.PPSet with type PPSet.elt = InferIR.Pvar.t
val make_access : InferIR.Pvar.t -> InferBase.Location.t -> Sink.t
val trace_of_error : InferBase.Location.t -> string -> sink_path -> InferIR.Errlog.loc_trace_elem list