Module Absint.FbPatternMatch
val is_subtype_of_fb_service_handler : IR.Tenv.t -> IR.Typ.Name.t -> bool
From f5993b72541c41914844060e769938c42a076e9b Mon Sep 17 00:00:00 2001
From: Jules Villard
Limit of field depth of abstract location in buffer-overrun checker
- ---bo-service-handler-request
- -Activates: [EXPERIMENTAL] Use -taint flow of service handler requests in buffer overflow -checking. (Conversely: ---no-bo-service-handler-request)
-Limit of field depth of abstract location in buffer-overrun checker
-See also
-infer-analyze(1).
---bo-service-handler-request
Activates: [EXPERIMENTAL] Use -taint flow of service handler requests in buffer overflow -checking. (Conversely: ---no-bo-service-handler-request)
-See also
infer-analyze(1).
--bootclasspath string
Absint.FbPatternMatch
val is_subtype_of_fb_service_handler : IR.Tenv.t -> IR.Typ.Name.t -> bool
Absint
module AbstractDomain : sig ... end
module AbstractInterpreter : sig ... end
module AccessPath : sig ... end
module AccessTree : sig ... end
module AnalysisCallbacks : sig ... end
module AnalysisState : sig ... end
module AndroidFramework : sig ... end
module Annotations : sig ... end
module Bindings : sig ... end
module CallSite : sig ... end
module ConcurrencyModels : sig ... end
module DataFlow : sig ... end
module Decompile : sig ... end
module Errlog : sig ... end
module Exe_env : sig ... end
module ExplicitTrace : sig ... end
module FbPatternMatch : sig ... end
module FormalMap : sig ... end
module HilExp : sig ... end
module HilInstr : sig ... end
module IdAccessPathMapDomain : sig ... end
module InterproceduralAnalysis : sig ... end
module IntraproceduralAnalysis : sig ... end
module IssueLog : sig ... end
module IssueToReport : sig ... end
module Localise : sig ... end
module LowerHil : sig ... end
module MethodMatcher : sig ... end
module Mleak_buckets : sig ... end
module NoReturnModels : sig ... end
module Passthrough : sig ... end
module PatternMatch : sig ... end
module ProcCfg : sig ... end
module ProcnameDispatcher : sig ... end
module Reporting : sig ... end
module Sanitizer : sig ... end
module Scheduler : sig ... end
module Sink : sig ... end
module SinkTrace : sig ... end
module Source : sig ... end
module SubtypingCheck : sig ... end
module TaintTrace : sig ... end
module TaintTraceElem : sig ... end
module TaskSchedulerTypes : sig ... end
module TransferFunctions : sig ... end
Absint
module AbstractDomain : sig ... end
module AbstractInterpreter : sig ... end
module AccessPath : sig ... end
module AccessTree : sig ... end
module AnalysisCallbacks : sig ... end
module AnalysisState : sig ... end
module AndroidFramework : sig ... end
module Annotations : sig ... end
module Bindings : sig ... end
module CallSite : sig ... end
module ConcurrencyModels : sig ... end
module DataFlow : sig ... end
module Decompile : sig ... end
module Errlog : sig ... end
module Exe_env : sig ... end
module ExplicitTrace : sig ... end
module FormalMap : sig ... end
module HilExp : sig ... end
module HilInstr : sig ... end
module IdAccessPathMapDomain : sig ... end
module InterproceduralAnalysis : sig ... end
module IntraproceduralAnalysis : sig ... end
module IssueLog : sig ... end
module IssueToReport : sig ... end
module Localise : sig ... end
module LowerHil : sig ... end
module MethodMatcher : sig ... end
module Mleak_buckets : sig ... end
module NoReturnModels : sig ... end
module Passthrough : sig ... end
module PatternMatch : sig ... end
module ProcCfg : sig ... end
module ProcnameDispatcher : sig ... end
module Reporting : sig ... end
module Sanitizer : sig ... end
module Scheduler : sig ... end
module Sink : sig ... end
module SinkTrace : sig ... end
module Source : sig ... end
module SubtypingCheck : sig ... end
module TaintTrace : sig ... end
module TaintTraceElem : sig ... end
module TaskSchedulerTypes : sig ... end
module TransferFunctions : sig ... end
Absint__FbPatternMatch
val is_subtype_of_fb_service_handler : IR.Tenv.t -> IR.Typ.Name.t -> bool
BufferOverrunDomain.Taint
include Absint.AbstractDomain.WithBottom
include Absint.AbstractDomain.S
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
val pp : IStdlib.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
val compare : t -> t -> int
val pp : Stdlib.Format.formatter -> t -> unit
val is_tainted : t -> bool
val param_of_path : Symb.SymbolPath.partial -> t
val tainted_of_path : Symb.SymbolPath.partial -> t
type eval_taint
= Symb.SymbolPath.partial -> t
val subst : t -> eval_taint -> t
BufferOverrunDomain.Val
type t
=
{
itv : Itv.t; | Interval |
itv_thresholds : ItvThresholds.t; | |
itv_updated_by : ItvUpdatedBy.t; | |
modeled_range : ModeledRange.t; | |
taint : Taint.t; | |
powloc : AbsLoc.PowLoc.t; | Simple pointers |
arrayblk : ArrayBlk.t; | Array blocks |
traces : BufferOverrunTrace.Set.t; |
}
include Absint.AbstractDomain.S with type t := t
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val bot : t
val of_big_int : ItvThresholds.elt -> t
val of_c_array_alloc : AbsLoc.Allocsite.t -> stride:int option -> offset:Itv.t -> size:Itv.t -> traces:BufferOverrunTrace.Set.t -> t
Construct C array allocation. stride
is a byte size of cell, offset
is initial offset of pointer which is usually zero, and size
is a total number of cells.
val of_java_array_alloc : AbsLoc.Allocsite.t -> length:Itv.t -> traces:BufferOverrunTrace.Set.t -> t
Construct Java array allocation. size
is a total number of cells
val of_int : int -> t
val of_int_lit : IR.IntLit.t -> t
val of_itv : ?traces:BufferOverrunTrace.Set.t -> ?taint:Taint.t -> Itv.t -> t
val of_literal_string : IR.Typ.IntegerWidths.t -> string -> t
val of_loc : ?traces:BufferOverrunTrace.Set.t -> AbsLoc.Loc.t -> t
val of_pow_loc : traces:BufferOverrunTrace.Set.t -> AbsLoc.PowLoc.t -> t
val unknown_locs : t
val unknown_from : IR.Typ.t -> callee_pname:IR.Procname.t option -> location:IBase.Location.t -> t
Unknown return value of callee_pname
val is_bot : t -> bool
Check if the value is bottom
val is_mone : t -> bool
Check if the value is [-1,-1]
val get_all_locs : t -> AbsLoc.PowLoc.t
Get all locations, including pointers and array blocks
val get_array_locs : t -> AbsLoc.PowLoc.t
Get locations of array blocks
val get_array_blk : t -> ArrayBlk.t
val get_range_of_iterator : t -> t
Get a range of an iterator value, for example, if iterator value is [lb,ub]
, it returns [0,ub]
.
val get_itv : t -> Itv.t
val get_modeled_range : t -> ModeledRange.t
val get_pow_loc : t -> AbsLoc.PowLoc.t
val get_taint : t -> Taint.t
val get_traces : t -> BufferOverrunTrace.Set.t
val set_array_length : IBase.Location.t -> length:t -> t -> t
val set_array_offset : IBase.Location.t -> Itv.t -> t -> t
val set_array_stride : Z.t -> t -> t
val set_itv_updated_by_addition : t -> t
val set_itv_updated_by_multiplication : t -> t
val set_itv_updated_by_unknown : t -> t
val set_modeled_range : ModeledRange.t -> t -> t
val (lnot) : t -> t
val neg : t -> t
val plus_a : ?f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
Semantics of Binop.PlusA
. f_trace
merges traces of the operands. If f_trace
is not given, it uses a default heuristic merge function.
val plus_pi : t -> t -> t
val minus_a : ?f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val minus_pi : t -> t -> t
val minus_pp : t -> t -> t
val mult : ?f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val div : ?f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val mod_sem : ?f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val shiftlt : ?f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val shiftrt : ?f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val lt_sem : t -> t -> t
val gt_sem : t -> t -> t
val le_sem : t -> t -> t
val ge_sem : t -> t -> t
val eq_sem : t -> t -> t
val ne_sem : t -> t -> t
val band_sem : ?f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val land_sem : t -> t -> t
val lor_sem : t -> t -> t
val unknown_bit : t -> t
Semantic function for some bit operators which are hard to express in the domain, e.g., Unop.BNot
.
val prune_eq : t -> t -> t
Pruning semantics for Binop.Eq
. This prunes value of x
when given x == y
, i.e., prune_eq x y
.
val prune_ne : t -> t -> t
Pruning semantics for Binop.Ne
. This prunes value of x
when given x != y
, i.e., prune_ne x y
.
val prune_lt : t -> t -> t
Pruning semantics for Binop.Lt
. This prunes value of x
when given x < y
, i.e., prune_lt x y
.
val prune_binop : IR.Binop.t -> t -> t -> t
Prune value of x
when given x bop y
, i.e., prune_binop bop x y
val add_assign_trace_elem : IBase.Location.t -> AbsLoc.PowLoc.t -> t -> t
Add assign trace for given abstract locations
val cast : IR.Typ.t -> t -> t
Semantics of cast. This updates type information in pointer values, rather than re-calculating sizes of array blocks.
val subst : t -> eval_sym_trace -> IBase.Location.t -> t
Substitution of symbols in the value
val transform_array_length : IBase.Location.t -> f:(Itv.t -> Itv.t) -> t -> t
Apply f
on array lengths in the value
module Itv : sig ... end
BufferOverrunDomain.Val
type t
=
{
itv : Itv.t; | Interval |
itv_thresholds : ItvThresholds.t; | |
itv_updated_by : ItvUpdatedBy.t; | |
modeled_range : ModeledRange.t; | |
powloc : AbsLoc.PowLoc.t; | Simple pointers |
arrayblk : ArrayBlk.t; | Array blocks |
traces : BufferOverrunTrace.Set.t; |
}
include Absint.AbstractDomain.S with type t := t
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val bot : t
val of_big_int : ItvThresholds.elt -> t
val of_c_array_alloc : AbsLoc.Allocsite.t -> stride:int option -> offset:Itv.t -> size:Itv.t -> traces:BufferOverrunTrace.Set.t -> t
Construct C array allocation. stride
is a byte size of cell, offset
is initial offset of pointer which is usually zero, and size
is a total number of cells.
val of_java_array_alloc : AbsLoc.Allocsite.t -> length:Itv.t -> traces:BufferOverrunTrace.Set.t -> t
Construct Java array allocation. size
is a total number of cells
val of_int : int -> t
val of_int_lit : IR.IntLit.t -> t
val of_itv : ?traces:BufferOverrunTrace.Set.t -> Itv.t -> t
val of_literal_string : IR.Typ.IntegerWidths.t -> string -> t
val of_loc : ?traces:BufferOverrunTrace.Set.t -> AbsLoc.Loc.t -> t
val of_pow_loc : traces:BufferOverrunTrace.Set.t -> AbsLoc.PowLoc.t -> t
val unknown_locs : t
val unknown_from : IR.Typ.t -> callee_pname:IR.Procname.t option -> location:IBase.Location.t -> t
Unknown return value of callee_pname
val is_bot : t -> bool
Check if the value is bottom
val is_mone : t -> bool
Check if the value is [-1,-1]
val get_all_locs : t -> AbsLoc.PowLoc.t
Get all locations, including pointers and array blocks
val get_array_locs : t -> AbsLoc.PowLoc.t
Get locations of array blocks
val get_array_blk : t -> ArrayBlk.t
val get_range_of_iterator : t -> t
Get a range of an iterator value, for example, if iterator value is [lb,ub]
, it returns [0,ub]
.
val get_itv : t -> Itv.t
val get_modeled_range : t -> ModeledRange.t
val get_pow_loc : t -> AbsLoc.PowLoc.t
val get_traces : t -> BufferOverrunTrace.Set.t
val set_array_length : IBase.Location.t -> length:t -> t -> t
val set_array_offset : IBase.Location.t -> Itv.t -> t -> t
val set_array_stride : Z.t -> t -> t
val set_itv_updated_by_addition : t -> t
val set_itv_updated_by_multiplication : t -> t
val set_itv_updated_by_unknown : t -> t
val set_modeled_range : ModeledRange.t -> t -> t
val (lnot) : t -> t
val neg : t -> t
val plus_a : ?f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
Semantics of Binop.PlusA
. f_trace
merges traces of the operands. If f_trace
is not given, it uses a default heuristic merge function.
val plus_pi : t -> t -> t
val minus_a : ?f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val minus_pi : t -> t -> t
val minus_pp : t -> t -> t
val mult : ?f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val div : ?f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val mod_sem : ?f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val shiftlt : ?f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val shiftrt : ?f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val lt_sem : t -> t -> t
val gt_sem : t -> t -> t
val le_sem : t -> t -> t
val ge_sem : t -> t -> t
val eq_sem : t -> t -> t
val ne_sem : t -> t -> t
val band_sem : ?f_trace:(BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t -> BufferOverrunTrace.Set.t) -> t -> t -> t
val land_sem : t -> t -> t
val lor_sem : t -> t -> t
val unknown_bit : t -> t
Semantic function for some bit operators which are hard to express in the domain, e.g., Unop.BNot
.
val prune_eq : t -> t -> t
Pruning semantics for Binop.Eq
. This prunes value of x
when given x == y
, i.e., prune_eq x y
.
val prune_ne : t -> t -> t
Pruning semantics for Binop.Ne
. This prunes value of x
when given x != y
, i.e., prune_ne x y
.
val prune_lt : t -> t -> t
Pruning semantics for Binop.Lt
. This prunes value of x
when given x < y
, i.e., prune_lt x y
.
val prune_binop : IR.Binop.t -> t -> t -> t
Prune value of x
when given x bop y
, i.e., prune_binop bop x y
val add_assign_trace_elem : IBase.Location.t -> AbsLoc.PowLoc.t -> t -> t
Add assign trace for given abstract locations
val cast : IR.Typ.t -> t -> t
Semantics of cast. This updates type information in pointer values, rather than re-calculating sizes of array blocks.
val subst : t -> eval_sym_trace -> IBase.Location.t -> t
Substitution of symbols in the value
val transform_array_length : IBase.Location.t -> f:(Itv.t -> Itv.t) -> t -> t
Apply f
on array lengths in the value
module Itv : sig ... end
BO.BufferOverrunDomain
module ItvThresholds : Absint.AbstractDomain.FiniteSetS with type FiniteSetS.elt = Z.t
Set of integers for threshold widening
module ItvUpdatedBy : sig ... end
Domain for recording which operations are used for evaluating interval values
module ModeledRange : sig ... end
ModeledRange
represents how many times the interval value can be updated by modeled functions. This domain is to support the case where there are mismatches between value of a control variable and actual number of loop iterations. For example,
module type TaintS = sig ... end
type eval_sym_trace
=
{
eval_sym : Bounds.Bound.eval_sym; | evaluating symbol |
trace_of_sym : Symb.Symbol.t -> BufferOverrunTrace.Set.t; | getting traces of symbol |
eval_locpath : AbsLoc.PowLoc.eval_locpath; | evaluating path |
eval_taint : Taint.eval_taint; | evaluating taint of path |
}
type for on-demand symbol evaluation in Inferbo
module Val : sig ... end
module KeyRhs : sig ... end
Right hand side of the alias domain. See AliasTarget
.
module AliasTarget : sig ... end
module AliasTargets : sig ... end
module AliasRet : sig ... end
Alias domain for return values of callees
module CoreVal : sig ... end
CoreVal
is similar to Val
, but its compare function is defined only on core parts, interval, pointers, and array blocks, of abstract value. This domain is to keep pruned values, where we do not need to care about the other fields in the abstract values.
module PruningExp : sig ... end
Domain to keep assumed expressions
module PrunedVal : sig ... end
Domain to keep pruned history, which are pairs of a pruned value and an assumed expression
module PrunePairs : sig ... end
PrunePairs
is a map from abstract locations to abstract values that represents pruned results in the latest pruning. It uses InvertedMap
because more pruning means smaller abstract states.
module LatestPrune : sig ... end
Domain to keep latest pruned values
module Reachability : sig ... end
Domain for reachability check
module LoopHeadLoc : sig ... end
module MemReach : sig ... end
Domain for memory of reachable node
module Mem : sig ... end
BO.BufferOverrunDomain
module ItvThresholds : Absint.AbstractDomain.FiniteSetS with type FiniteSetS.elt = Z.t
Set of integers for threshold widening
module ItvUpdatedBy : sig ... end
Domain for recording which operations are used for evaluating interval values
module ModeledRange : sig ... end
ModeledRange
represents how many times the interval value can be updated by modeled functions. This domain is to support the case where there are mismatches between value of a control variable and actual number of loop iterations. For example,
type eval_sym_trace
=
{
eval_sym : Bounds.Bound.eval_sym; | evaluating symbol |
trace_of_sym : Symb.Symbol.t -> BufferOverrunTrace.Set.t; | getting traces of symbol |
eval_locpath : AbsLoc.PowLoc.eval_locpath; | evaluating path |
}
type for on-demand symbol evaluation in Inferbo
module Val : sig ... end
module KeyRhs : sig ... end
Right hand side of the alias domain. See AliasTarget
.
module AliasTarget : sig ... end
module AliasTargets : sig ... end
module AliasRet : sig ... end
Alias domain for return values of callees
module CoreVal : sig ... end
CoreVal
is similar to Val
, but its compare function is defined only on core parts, interval, pointers, and array blocks, of abstract value. This domain is to keep pruned values, where we do not need to care about the other fields in the abstract values.
module PruningExp : sig ... end
Domain to keep assumed expressions
module PrunedVal : sig ... end
Domain to keep pruned history, which are pairs of a pruned value and an assumed expression
module PrunePairs : sig ... end
PrunePairs
is a map from abstract locations to abstract values that represents pruned results in the latest pruning. It uses InvertedMap
because more pruning means smaller abstract states.
module LatestPrune : sig ... end
Domain to keep latest pruned values
module Reachability : sig ... end
Domain for reachability check
module LoopHeadLoc : sig ... end
module MemReach : sig ... end
Domain for memory of reachable node
module Mem : sig ... end
BufferOverrunDomain.TaintS
include Absint.AbstractDomain.WithBottom
include Absint.AbstractDomain.S
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
val pp : IStdlib.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
val compare : t -> t -> int
val pp : Stdlib.Format.formatter -> t -> unit
val is_tainted : t -> bool
val param_of_path : Symb.SymbolPath.partial -> t
val tainted_of_path : Symb.SymbolPath.partial -> t
type eval_taint
= Symb.SymbolPath.partial -> t
val subst : t -> eval_taint -> t
BufferOverrunProofObligations.ConditionSet
val empty : checked_t
val pp : Stdlib.Format.formatter -> checked_t -> unit
val pp_summary : Stdlib.Format.formatter -> summary_t -> unit
val add_array_access : IBase.Location.t -> offset:ItvPure.t -> idx:ItvPure.t -> size:ItvPure.t -> last_included:bool -> taint:BufferOverrunDomain.Taint.t -> idx_traces:BufferOverrunTrace.Set.t -> arr_traces:BufferOverrunTrace.Set.t -> latest_prune:BufferOverrunDomain.LatestPrune.t -> checked_t -> checked_t
val add_alloc_size : IBase.Location.t -> can_be_zero:bool -> length:ItvPure.t -> taint:BufferOverrunDomain.Taint.t -> BufferOverrunTrace.Set.t -> BufferOverrunDomain.LatestPrune.t -> checked_t -> checked_t
val add_binary_operation : IR.Typ.IntegerWidths.t -> IBase.Location.t -> IR.Procname.t -> IR.Binop.t -> lhs:ItvPure.t -> rhs:ItvPure.t -> lhs_traces:BufferOverrunTrace.Set.t -> rhs_traces:BufferOverrunTrace.Set.t -> latest_prune:BufferOverrunDomain.LatestPrune.t -> checked_t -> checked_t
val join : checked_t -> checked_t -> checked_t
val subst : summary_t -> (mode:BufferOverrunSemantics.eval_mode -> BufferOverrunDomain.eval_sym_trace) -> IR.Procname.t -> IBase.Location.t -> BufferOverrunDomain.LatestPrune.t -> checked_t
val report_errors : report:(Condition.t -> ConditionTrace.t -> IBase.IssueType.t -> unit) -> checked_t -> unit
val for_summary : checked_t -> summary_t
BufferOverrunProofObligations.ConditionSet
val empty : checked_t
val pp : Stdlib.Format.formatter -> checked_t -> unit
val pp_summary : Stdlib.Format.formatter -> summary_t -> unit
val add_array_access : IBase.Location.t -> offset:ItvPure.t -> idx:ItvPure.t -> size:ItvPure.t -> last_included:bool -> idx_traces:BufferOverrunTrace.Set.t -> arr_traces:BufferOverrunTrace.Set.t -> latest_prune:BufferOverrunDomain.LatestPrune.t -> checked_t -> checked_t
val add_alloc_size : IBase.Location.t -> can_be_zero:bool -> length:ItvPure.t -> BufferOverrunTrace.Set.t -> BufferOverrunDomain.LatestPrune.t -> checked_t -> checked_t
val add_binary_operation : IR.Typ.IntegerWidths.t -> IBase.Location.t -> IR.Procname.t -> IR.Binop.t -> lhs:ItvPure.t -> rhs:ItvPure.t -> lhs_traces:BufferOverrunTrace.Set.t -> rhs_traces:BufferOverrunTrace.Set.t -> latest_prune:BufferOverrunDomain.LatestPrune.t -> checked_t -> checked_t
val join : checked_t -> checked_t -> checked_t
val subst : summary_t -> (mode:BufferOverrunSemantics.eval_mode -> BufferOverrunDomain.eval_sym_trace) -> IR.Procname.t -> IBase.Location.t -> BufferOverrunDomain.LatestPrune.t -> checked_t
val report_errors : report:(Condition.t -> ConditionTrace.t -> IBase.IssueType.t -> unit) -> checked_t -> unit
val for_summary : checked_t -> summary_t
BufferOverrunTrace.Issue
Trace set with issue information
include IStdlib.PrettyPrintable.PrintableOrderedType
include IStdlib.PrettyPrintable.PrintableType with type t := t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val binary : IBase.Location.t -> binary -> Set.t -> Set.t -> t
Construct issue trace of binary operation. When binary
is ArrayAccess
, the former Set.t
typed parameter is offset
and the latter is length
of array access.
val alloc : IBase.Location.t -> Set.t -> t
Construct issue trace of allocation
val call : IBase.Location.t -> Set.t -> t -> t
Merge caller's trace set and callee's issue, i.e., call location caller callee
val has_risky : t -> bool
Check if the issue trace includes risky function calls by Through
val has_unknown : t -> bool
Check if the issue trace includes unknown function calls
val exists_str : f:(string -> bool) -> t -> bool
Check if the issue trace includes an abstract location that satisfies f
val make_err_trace : description:string -> t -> (string * Absint.Errlog.loc_trace) list
Convert to the common Errlog
format. The return value is a list of labelled Errlog.loc_trace
s.
BufferOverrunTrace.Issue
Trace set with issue information
include IStdlib.PrettyPrintable.PrintableOrderedType
include IStdlib.PrettyPrintable.PrintableType with type t := t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val binary : IBase.Location.t -> binary -> Set.t -> Set.t -> t
Construct issue trace of binary operation. When binary
is ArrayAccess
, the former Set.t
typed parameter is offset
and the latter is length
of array access.
val alloc : IBase.Location.t -> Set.t -> t
Construct issue trace of allocation
val call : IBase.Location.t -> Set.t -> t -> t
Merge caller's trace set and callee's issue, i.e., call location caller callee
val has_unknown : t -> bool
Check if the issue trace includes unknown function calls
val exists_str : f:(string -> bool) -> t -> bool
Check if the issue trace includes an abstract location that satisfies f
val make_err_trace : description:string -> t -> (string * Absint.Errlog.loc_trace) list
Convert to the common Errlog
format. The return value is a list of labelled Errlog.loc_trace
s.
BO.BufferOverrunTrace
type final
=
| UnknownFrom of IR.Procname.t option |
Final unknown function in trace
type elem
=
| ArrayDeclaration | |
| Assign of AbsLoc.PowLoc.t | |
| Global of AbsLoc.Loc.t | |
| JavaIntDecleration | |
| Parameter of AbsLoc.Loc.t | |
| SetArraySize | |
| Through of {
} |
Trace elements
module Set : sig ... end
module Issue : sig ... end
Trace set with issue information
BO.BufferOverrunTrace
type final
=
| UnknownFrom of IR.Procname.t option |
Final unknown function in trace
type elem
=
| ArrayDeclaration |
| Assign of AbsLoc.PowLoc.t |
| Global of AbsLoc.Loc.t |
| JavaIntDecleration |
| Parameter of AbsLoc.Loc.t |
| SetArraySize |
| Through |
Trace elements
module Set : sig ... end
module Issue : sig ... end
Trace set with issue information
Symb.SymbolPath
val compare_deref_kind : deref_kind -> deref_kind -> int
type prim
=
| Pvar of IR.Pvar.t | ||||
| Deref of deref_kind * partial | ||||
| Callsite of {
} |
|
and partial
= prim BufferOverrunField.t
type t
= private
| Normal of partial | ||
| Offset of {
} | ||
| Length of {
} | ||
| Modeled of {
} |
val equal_partial : partial -> partial -> bool
val pp_mark : markup:bool -> F.formatter -> t -> unit
val pp_partial : F.formatter -> partial -> unit
val pp_partial_paren : paren:bool -> F.formatter -> partial -> unit
val of_pvar : IR.Pvar.t -> partial
val of_callsite : ?obj_path:partial -> ret_typ:IR.Typ.t -> Absint.CallSite.t -> partial
val deref : deref_kind:deref_kind -> partial -> partial
val append_field : ?typ:IR.Typ.t -> partial -> IR.Fieldname.t -> partial
val append_star_field : partial -> IR.Fieldname.t -> partial
val normal : partial -> t
val offset : partial -> is_void:bool -> t
val length : partial -> is_void:bool -> t
val modeled : partial -> is_expensive:bool -> t
val is_this : partial -> bool
val is_request : partial -> bool
val get_pvar : partial -> IR.Pvar.t option
val represents_multiple_values : partial -> bool
val represents_multiple_values_sound : partial -> bool
val represents_callsite_sound_partial : partial -> bool
val exists_pvar_partial : f:(IR.Pvar.t -> bool) -> partial -> bool
val exists_str_partial : f:(string -> bool) -> partial -> bool
val is_void_ptr_path : t -> bool
val is_cpp_vector_elem : partial -> bool
val is_global_partial : partial -> bool
Symb.SymbolPath
val compare_deref_kind : deref_kind -> deref_kind -> int
type prim
=
| Pvar of IR.Pvar.t | ||||
| Deref of deref_kind * partial | ||||
| Callsite of {
} |
|
and partial
= prim BufferOverrunField.t
type t
= private
| Normal of partial | ||
| Offset of {
} | ||
| Length of {
} | ||
| Modeled of {
} |
val equal_partial : partial -> partial -> bool
val pp_mark : markup:bool -> F.formatter -> t -> unit
val pp_partial : F.formatter -> partial -> unit
val pp_partial_paren : paren:bool -> F.formatter -> partial -> unit
val of_pvar : IR.Pvar.t -> partial
val of_callsite : ?obj_path:partial -> ret_typ:IR.Typ.t -> Absint.CallSite.t -> partial
val deref : deref_kind:deref_kind -> partial -> partial
val append_field : ?typ:IR.Typ.t -> partial -> IR.Fieldname.t -> partial
val append_star_field : partial -> IR.Fieldname.t -> partial
val normal : partial -> t
val offset : partial -> is_void:bool -> t
val length : partial -> is_void:bool -> t
val modeled : partial -> is_expensive:bool -> t
val is_this : partial -> bool
val get_pvar : partial -> IR.Pvar.t option
val represents_multiple_values : partial -> bool
val represents_multiple_values_sound : partial -> bool
val represents_callsite_sound_partial : partial -> bool
val exists_pvar_partial : f:(IR.Pvar.t -> bool) -> partial -> bool
val exists_str_partial : f:(string -> bool) -> partial -> bool
val is_void_ptr_path : t -> bool
val is_cpp_vector_elem : partial -> bool
val is_global_partial : partial -> bool
BO.Symb
module BoundEnd : sig ... end
module SymbolPath : sig ... end
module Symbol : sig ... end
module SymbolSet : sig ... end
module SymbolMap : sig ... end
module SymbolPathSet : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = SymbolPath.partial
BO.Symb
module BoundEnd : sig ... end
module SymbolPath : sig ... end
module Symbol : sig ... end
module SymbolSet : sig ... end
module SymbolMap : sig ... end
BO__BufferOverrunDomain.Taint
include Absint.AbstractDomain.WithBottom
include Absint.AbstractDomain.S
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
val pp : IStdlib.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
val compare : t -> t -> int
val pp : Stdlib.Format.formatter -> t -> unit
val is_tainted : t -> bool
val param_of_path : BO.Symb.SymbolPath.partial -> t
val tainted_of_path : BO.Symb.SymbolPath.partial -> t
type eval_taint
= BO.Symb.SymbolPath.partial -> t
val subst : t -> eval_taint -> t
BO__BufferOverrunDomain.Val
type t
=
{
itv : BO.Itv.t; | Interval |
itv_thresholds : ItvThresholds.t; | |
itv_updated_by : ItvUpdatedBy.t; | |
modeled_range : ModeledRange.t; | |
taint : Taint.t; | |
powloc : BO.AbsLoc.PowLoc.t; | Simple pointers |
arrayblk : BO.ArrayBlk.t; | Array blocks |
traces : BO.BufferOverrunTrace.Set.t; |
}
include Absint.AbstractDomain.S with type t := t
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val bot : t
val of_big_int : ItvThresholds.elt -> t
val of_c_array_alloc : BO.AbsLoc.Allocsite.t -> stride:int option -> offset:BO.Itv.t -> size:BO.Itv.t -> traces:BO.BufferOverrunTrace.Set.t -> t
Construct C array allocation. stride
is a byte size of cell, offset
is initial offset of pointer which is usually zero, and size
is a total number of cells.
val of_java_array_alloc : BO.AbsLoc.Allocsite.t -> length:BO.Itv.t -> traces:BO.BufferOverrunTrace.Set.t -> t
Construct Java array allocation. size
is a total number of cells
val of_int : int -> t
val of_int_lit : IR.IntLit.t -> t
val of_itv : ?traces:BO.BufferOverrunTrace.Set.t -> ?taint:Taint.t -> BO.Itv.t -> t
val of_literal_string : IR.Typ.IntegerWidths.t -> string -> t
val of_loc : ?traces:BO.BufferOverrunTrace.Set.t -> BO.AbsLoc.Loc.t -> t
val of_pow_loc : traces:BO.BufferOverrunTrace.Set.t -> BO.AbsLoc.PowLoc.t -> t
val unknown_locs : t
val unknown_from : IR.Typ.t -> callee_pname:IR.Procname.t option -> location:IBase.Location.t -> t
Unknown return value of callee_pname
val is_bot : t -> bool
Check if the value is bottom
val is_mone : t -> bool
Check if the value is [-1,-1]
val get_all_locs : t -> BO.AbsLoc.PowLoc.t
Get all locations, including pointers and array blocks
val get_array_locs : t -> BO.AbsLoc.PowLoc.t
Get locations of array blocks
val get_array_blk : t -> BO.ArrayBlk.t
val get_range_of_iterator : t -> t
Get a range of an iterator value, for example, if iterator value is [lb,ub]
, it returns [0,ub]
.
val get_itv : t -> BO.Itv.t
val get_modeled_range : t -> ModeledRange.t
val get_pow_loc : t -> BO.AbsLoc.PowLoc.t
val get_taint : t -> Taint.t
val get_traces : t -> BO.BufferOverrunTrace.Set.t
val set_array_length : IBase.Location.t -> length:t -> t -> t
val set_array_offset : IBase.Location.t -> BO.Itv.t -> t -> t
val set_array_stride : Z.t -> t -> t
val set_itv_updated_by_addition : t -> t
val set_itv_updated_by_multiplication : t -> t
val set_itv_updated_by_unknown : t -> t
val set_modeled_range : ModeledRange.t -> t -> t
val (lnot) : t -> t
val neg : t -> t
val plus_a : ?f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
Semantics of Binop.PlusA
. f_trace
merges traces of the operands. If f_trace
is not given, it uses a default heuristic merge function.
val plus_pi : t -> t -> t
val minus_a : ?f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val minus_pi : t -> t -> t
val minus_pp : t -> t -> t
val mult : ?f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val div : ?f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val mod_sem : ?f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val shiftlt : ?f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val shiftrt : ?f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val lt_sem : t -> t -> t
val gt_sem : t -> t -> t
val le_sem : t -> t -> t
val ge_sem : t -> t -> t
val eq_sem : t -> t -> t
val ne_sem : t -> t -> t
val band_sem : ?f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val land_sem : t -> t -> t
val lor_sem : t -> t -> t
val unknown_bit : t -> t
Semantic function for some bit operators which are hard to express in the domain, e.g., Unop.BNot
.
val prune_eq : t -> t -> t
Pruning semantics for Binop.Eq
. This prunes value of x
when given x == y
, i.e., prune_eq x y
.
val prune_ne : t -> t -> t
Pruning semantics for Binop.Ne
. This prunes value of x
when given x != y
, i.e., prune_ne x y
.
val prune_lt : t -> t -> t
Pruning semantics for Binop.Lt
. This prunes value of x
when given x < y
, i.e., prune_lt x y
.
val prune_binop : IR.Binop.t -> t -> t -> t
Prune value of x
when given x bop y
, i.e., prune_binop bop x y
val add_assign_trace_elem : IBase.Location.t -> BO.AbsLoc.PowLoc.t -> t -> t
Add assign trace for given abstract locations
val cast : IR.Typ.t -> t -> t
Semantics of cast. This updates type information in pointer values, rather than re-calculating sizes of array blocks.
val subst : t -> eval_sym_trace -> IBase.Location.t -> t
Substitution of symbols in the value
val transform_array_length : IBase.Location.t -> f:(BO.Itv.t -> BO.Itv.t) -> t -> t
Apply f
on array lengths in the value
module Itv : sig ... end
BO__BufferOverrunDomain.Val
type t
=
{
itv : BO.Itv.t; | Interval |
itv_thresholds : ItvThresholds.t; | |
itv_updated_by : ItvUpdatedBy.t; | |
modeled_range : ModeledRange.t; | |
powloc : BO.AbsLoc.PowLoc.t; | Simple pointers |
arrayblk : BO.ArrayBlk.t; | Array blocks |
traces : BO.BufferOverrunTrace.Set.t; |
}
include Absint.AbstractDomain.S with type t := t
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val bot : t
val of_big_int : ItvThresholds.elt -> t
val of_c_array_alloc : BO.AbsLoc.Allocsite.t -> stride:int option -> offset:BO.Itv.t -> size:BO.Itv.t -> traces:BO.BufferOverrunTrace.Set.t -> t
Construct C array allocation. stride
is a byte size of cell, offset
is initial offset of pointer which is usually zero, and size
is a total number of cells.
val of_java_array_alloc : BO.AbsLoc.Allocsite.t -> length:BO.Itv.t -> traces:BO.BufferOverrunTrace.Set.t -> t
Construct Java array allocation. size
is a total number of cells
val of_int : int -> t
val of_int_lit : IR.IntLit.t -> t
val of_itv : ?traces:BO.BufferOverrunTrace.Set.t -> BO.Itv.t -> t
val of_literal_string : IR.Typ.IntegerWidths.t -> string -> t
val of_loc : ?traces:BO.BufferOverrunTrace.Set.t -> BO.AbsLoc.Loc.t -> t
val of_pow_loc : traces:BO.BufferOverrunTrace.Set.t -> BO.AbsLoc.PowLoc.t -> t
val unknown_locs : t
val unknown_from : IR.Typ.t -> callee_pname:IR.Procname.t option -> location:IBase.Location.t -> t
Unknown return value of callee_pname
val is_bot : t -> bool
Check if the value is bottom
val is_mone : t -> bool
Check if the value is [-1,-1]
val get_all_locs : t -> BO.AbsLoc.PowLoc.t
Get all locations, including pointers and array blocks
val get_array_locs : t -> BO.AbsLoc.PowLoc.t
Get locations of array blocks
val get_array_blk : t -> BO.ArrayBlk.t
val get_range_of_iterator : t -> t
Get a range of an iterator value, for example, if iterator value is [lb,ub]
, it returns [0,ub]
.
val get_itv : t -> BO.Itv.t
val get_modeled_range : t -> ModeledRange.t
val get_pow_loc : t -> BO.AbsLoc.PowLoc.t
val get_traces : t -> BO.BufferOverrunTrace.Set.t
val set_array_length : IBase.Location.t -> length:t -> t -> t
val set_array_offset : IBase.Location.t -> BO.Itv.t -> t -> t
val set_array_stride : Z.t -> t -> t
val set_itv_updated_by_addition : t -> t
val set_itv_updated_by_multiplication : t -> t
val set_itv_updated_by_unknown : t -> t
val set_modeled_range : ModeledRange.t -> t -> t
val (lnot) : t -> t
val neg : t -> t
val plus_a : ?f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
Semantics of Binop.PlusA
. f_trace
merges traces of the operands. If f_trace
is not given, it uses a default heuristic merge function.
val plus_pi : t -> t -> t
val minus_a : ?f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val minus_pi : t -> t -> t
val minus_pp : t -> t -> t
val mult : ?f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val div : ?f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val mod_sem : ?f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val shiftlt : ?f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val shiftrt : ?f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val lt_sem : t -> t -> t
val gt_sem : t -> t -> t
val le_sem : t -> t -> t
val ge_sem : t -> t -> t
val eq_sem : t -> t -> t
val ne_sem : t -> t -> t
val band_sem : ?f_trace:(BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunTrace.Set.t) -> t -> t -> t
val land_sem : t -> t -> t
val lor_sem : t -> t -> t
val unknown_bit : t -> t
Semantic function for some bit operators which are hard to express in the domain, e.g., Unop.BNot
.
val prune_eq : t -> t -> t
Pruning semantics for Binop.Eq
. This prunes value of x
when given x == y
, i.e., prune_eq x y
.
val prune_ne : t -> t -> t
Pruning semantics for Binop.Ne
. This prunes value of x
when given x != y
, i.e., prune_ne x y
.
val prune_lt : t -> t -> t
Pruning semantics for Binop.Lt
. This prunes value of x
when given x < y
, i.e., prune_lt x y
.
val prune_binop : IR.Binop.t -> t -> t -> t
Prune value of x
when given x bop y
, i.e., prune_binop bop x y
val add_assign_trace_elem : IBase.Location.t -> BO.AbsLoc.PowLoc.t -> t -> t
Add assign trace for given abstract locations
val cast : IR.Typ.t -> t -> t
Semantics of cast. This updates type information in pointer values, rather than re-calculating sizes of array blocks.
val subst : t -> eval_sym_trace -> IBase.Location.t -> t
Substitution of symbols in the value
val transform_array_length : IBase.Location.t -> f:(BO.Itv.t -> BO.Itv.t) -> t -> t
Apply f
on array lengths in the value
module Itv : sig ... end
BO__BufferOverrunDomain
module ItvThresholds : Absint.AbstractDomain.FiniteSetS with type FiniteSetS.elt = Z.t
Set of integers for threshold widening
module ItvUpdatedBy : sig ... end
Domain for recording which operations are used for evaluating interval values
module ModeledRange : sig ... end
ModeledRange
represents how many times the interval value can be updated by modeled functions. This domain is to support the case where there are mismatches between value of a control variable and actual number of loop iterations. For example,
module type TaintS = sig ... end
type eval_sym_trace
=
{
eval_sym : BO.Bounds.Bound.eval_sym; | evaluating symbol |
trace_of_sym : BO.Symb.Symbol.t -> BO.BufferOverrunTrace.Set.t; | getting traces of symbol |
eval_locpath : BO.AbsLoc.PowLoc.eval_locpath; | evaluating path |
eval_taint : Taint.eval_taint; | evaluating taint of path |
}
type for on-demand symbol evaluation in Inferbo
module Val : sig ... end
module KeyRhs : sig ... end
Right hand side of the alias domain. See AliasTarget
.
module AliasTarget : sig ... end
module AliasTargets : sig ... end
module AliasRet : sig ... end
Alias domain for return values of callees
module CoreVal : sig ... end
CoreVal
is similar to Val
, but its compare function is defined only on core parts, interval, pointers, and array blocks, of abstract value. This domain is to keep pruned values, where we do not need to care about the other fields in the abstract values.
module PruningExp : sig ... end
Domain to keep assumed expressions
module PrunedVal : sig ... end
Domain to keep pruned history, which are pairs of a pruned value and an assumed expression
module PrunePairs : sig ... end
PrunePairs
is a map from abstract locations to abstract values that represents pruned results in the latest pruning. It uses InvertedMap
because more pruning means smaller abstract states.
module LatestPrune : sig ... end
Domain to keep latest pruned values
module Reachability : sig ... end
Domain for reachability check
module LoopHeadLoc : sig ... end
module MemReach : sig ... end
Domain for memory of reachable node
module Mem : sig ... end
BO__BufferOverrunDomain
module ItvThresholds : Absint.AbstractDomain.FiniteSetS with type FiniteSetS.elt = Z.t
Set of integers for threshold widening
module ItvUpdatedBy : sig ... end
Domain for recording which operations are used for evaluating interval values
module ModeledRange : sig ... end
ModeledRange
represents how many times the interval value can be updated by modeled functions. This domain is to support the case where there are mismatches between value of a control variable and actual number of loop iterations. For example,
type eval_sym_trace
=
{
eval_sym : BO.Bounds.Bound.eval_sym; | evaluating symbol |
trace_of_sym : BO.Symb.Symbol.t -> BO.BufferOverrunTrace.Set.t; | getting traces of symbol |
eval_locpath : BO.AbsLoc.PowLoc.eval_locpath; | evaluating path |
}
type for on-demand symbol evaluation in Inferbo
module Val : sig ... end
module KeyRhs : sig ... end
Right hand side of the alias domain. See AliasTarget
.
module AliasTarget : sig ... end
module AliasTargets : sig ... end
module AliasRet : sig ... end
Alias domain for return values of callees
module CoreVal : sig ... end
CoreVal
is similar to Val
, but its compare function is defined only on core parts, interval, pointers, and array blocks, of abstract value. This domain is to keep pruned values, where we do not need to care about the other fields in the abstract values.
module PruningExp : sig ... end
Domain to keep assumed expressions
module PrunedVal : sig ... end
Domain to keep pruned history, which are pairs of a pruned value and an assumed expression
module PrunePairs : sig ... end
PrunePairs
is a map from abstract locations to abstract values that represents pruned results in the latest pruning. It uses InvertedMap
because more pruning means smaller abstract states.
module LatestPrune : sig ... end
Domain to keep latest pruned values
module Reachability : sig ... end
Domain for reachability check
module LoopHeadLoc : sig ... end
module MemReach : sig ... end
Domain for memory of reachable node
module Mem : sig ... end
BO__BufferOverrunDomain.TaintS
include Absint.AbstractDomain.WithBottom
include Absint.AbstractDomain.S
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
val pp : IStdlib.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
val compare : t -> t -> int
val pp : Stdlib.Format.formatter -> t -> unit
val is_tainted : t -> bool
val param_of_path : BO.Symb.SymbolPath.partial -> t
val tainted_of_path : BO.Symb.SymbolPath.partial -> t
type eval_taint
= BO.Symb.SymbolPath.partial -> t
val subst : t -> eval_taint -> t
BO__BufferOverrunProofObligations.ConditionSet
val empty : checked_t
val pp : Stdlib.Format.formatter -> checked_t -> unit
val pp_summary : Stdlib.Format.formatter -> summary_t -> unit
val add_array_access : IBase.Location.t -> offset:ItvPure.t -> idx:ItvPure.t -> size:ItvPure.t -> last_included:bool -> taint:BO.BufferOverrunDomain.Taint.t -> idx_traces:BO.BufferOverrunTrace.Set.t -> arr_traces:BO.BufferOverrunTrace.Set.t -> latest_prune:BO.BufferOverrunDomain.LatestPrune.t -> checked_t -> checked_t
val add_alloc_size : IBase.Location.t -> can_be_zero:bool -> length:ItvPure.t -> taint:BO.BufferOverrunDomain.Taint.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunDomain.LatestPrune.t -> checked_t -> checked_t
val add_binary_operation : IR.Typ.IntegerWidths.t -> IBase.Location.t -> IR.Procname.t -> IR.Binop.t -> lhs:ItvPure.t -> rhs:ItvPure.t -> lhs_traces:BO.BufferOverrunTrace.Set.t -> rhs_traces:BO.BufferOverrunTrace.Set.t -> latest_prune:BO.BufferOverrunDomain.LatestPrune.t -> checked_t -> checked_t
val join : checked_t -> checked_t -> checked_t
val subst : summary_t -> (mode:BO.BufferOverrunSemantics.eval_mode -> BO.BufferOverrunDomain.eval_sym_trace) -> IR.Procname.t -> IBase.Location.t -> BO.BufferOverrunDomain.LatestPrune.t -> checked_t
val report_errors : report:(Condition.t -> ConditionTrace.t -> IBase.IssueType.t -> unit) -> checked_t -> unit
val for_summary : checked_t -> summary_t
BO__BufferOverrunProofObligations.ConditionSet
val empty : checked_t
val pp : Stdlib.Format.formatter -> checked_t -> unit
val pp_summary : Stdlib.Format.formatter -> summary_t -> unit
val add_array_access : IBase.Location.t -> offset:ItvPure.t -> idx:ItvPure.t -> size:ItvPure.t -> last_included:bool -> idx_traces:BO.BufferOverrunTrace.Set.t -> arr_traces:BO.BufferOverrunTrace.Set.t -> latest_prune:BO.BufferOverrunDomain.LatestPrune.t -> checked_t -> checked_t
val add_alloc_size : IBase.Location.t -> can_be_zero:bool -> length:ItvPure.t -> BO.BufferOverrunTrace.Set.t -> BO.BufferOverrunDomain.LatestPrune.t -> checked_t -> checked_t
val add_binary_operation : IR.Typ.IntegerWidths.t -> IBase.Location.t -> IR.Procname.t -> IR.Binop.t -> lhs:ItvPure.t -> rhs:ItvPure.t -> lhs_traces:BO.BufferOverrunTrace.Set.t -> rhs_traces:BO.BufferOverrunTrace.Set.t -> latest_prune:BO.BufferOverrunDomain.LatestPrune.t -> checked_t -> checked_t
val join : checked_t -> checked_t -> checked_t
val subst : summary_t -> (mode:BO.BufferOverrunSemantics.eval_mode -> BO.BufferOverrunDomain.eval_sym_trace) -> IR.Procname.t -> IBase.Location.t -> BO.BufferOverrunDomain.LatestPrune.t -> checked_t
val report_errors : report:(Condition.t -> ConditionTrace.t -> IBase.IssueType.t -> unit) -> checked_t -> unit
val for_summary : checked_t -> summary_t
BO__BufferOverrunTrace.Issue
Trace set with issue information
include IStdlib.PrettyPrintable.PrintableOrderedType
include IStdlib.PrettyPrintable.PrintableType with type t := t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val binary : IBase.Location.t -> binary -> Set.t -> Set.t -> t
Construct issue trace of binary operation. When binary
is ArrayAccess
, the former Set.t
typed parameter is offset
and the latter is length
of array access.
val alloc : IBase.Location.t -> Set.t -> t
Construct issue trace of allocation
val call : IBase.Location.t -> Set.t -> t -> t
Merge caller's trace set and callee's issue, i.e., call location caller callee
val has_risky : t -> bool
Check if the issue trace includes risky function calls by Through
val has_unknown : t -> bool
Check if the issue trace includes unknown function calls
val exists_str : f:(string -> bool) -> t -> bool
Check if the issue trace includes an abstract location that satisfies f
val make_err_trace : description:string -> t -> (string * Absint.Errlog.loc_trace) list
Convert to the common Errlog
format. The return value is a list of labelled Errlog.loc_trace
s.
BO__BufferOverrunTrace.Issue
Trace set with issue information
include IStdlib.PrettyPrintable.PrintableOrderedType
include IStdlib.PrettyPrintable.PrintableType with type t := t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val binary : IBase.Location.t -> binary -> Set.t -> Set.t -> t
Construct issue trace of binary operation. When binary
is ArrayAccess
, the former Set.t
typed parameter is offset
and the latter is length
of array access.
val alloc : IBase.Location.t -> Set.t -> t
Construct issue trace of allocation
val call : IBase.Location.t -> Set.t -> t -> t
Merge caller's trace set and callee's issue, i.e., call location caller callee
val has_unknown : t -> bool
Check if the issue trace includes unknown function calls
val exists_str : f:(string -> bool) -> t -> bool
Check if the issue trace includes an abstract location that satisfies f
val make_err_trace : description:string -> t -> (string * Absint.Errlog.loc_trace) list
Convert to the common Errlog
format. The return value is a list of labelled Errlog.loc_trace
s.
BO__BufferOverrunTrace
type final
=
| UnknownFrom of IR.Procname.t option |
Final unknown function in trace
type elem
=
| ArrayDeclaration | |
| Assign of BO.AbsLoc.PowLoc.t | |
| Global of BO.AbsLoc.Loc.t | |
| JavaIntDecleration | |
| Parameter of BO.AbsLoc.Loc.t | |
| SetArraySize | |
| Through of {
} |
Trace elements
module Set : sig ... end
module Issue : sig ... end
Trace set with issue information
BO__BufferOverrunTrace
type final
=
| UnknownFrom of IR.Procname.t option |
Final unknown function in trace
type elem
=
| ArrayDeclaration |
| Assign of BO.AbsLoc.PowLoc.t |
| Global of BO.AbsLoc.Loc.t |
| JavaIntDecleration |
| Parameter of BO.AbsLoc.Loc.t |
| SetArraySize |
| Through |
Trace elements
module Set : sig ... end
module Issue : sig ... end
Trace set with issue information
BO__Symb.SymbolPath
val compare_deref_kind : deref_kind -> deref_kind -> int
type prim
=
| Pvar of IR.Pvar.t | ||||
| Deref of deref_kind * partial | ||||
| Callsite of {
} |
|
and partial
= prim BO.BufferOverrunField.t
type t
= private
| Normal of partial | ||
| Offset of {
} | ||
| Length of {
} | ||
| Modeled of {
} |
val equal_partial : partial -> partial -> bool
val pp_mark : markup:bool -> F.formatter -> t -> unit
val pp_partial : F.formatter -> partial -> unit
val pp_partial_paren : paren:bool -> F.formatter -> partial -> unit
val of_pvar : IR.Pvar.t -> partial
val of_callsite : ?obj_path:partial -> ret_typ:IR.Typ.t -> Absint.CallSite.t -> partial
val deref : deref_kind:deref_kind -> partial -> partial
val append_field : ?typ:IR.Typ.t -> partial -> IR.Fieldname.t -> partial
val append_star_field : partial -> IR.Fieldname.t -> partial
val normal : partial -> t
val offset : partial -> is_void:bool -> t
val length : partial -> is_void:bool -> t
val modeled : partial -> is_expensive:bool -> t
val is_this : partial -> bool
val is_request : partial -> bool
val get_pvar : partial -> IR.Pvar.t option
val represents_multiple_values : partial -> bool
val represents_multiple_values_sound : partial -> bool
val represents_callsite_sound_partial : partial -> bool
val exists_pvar_partial : f:(IR.Pvar.t -> bool) -> partial -> bool
val exists_str_partial : f:(string -> bool) -> partial -> bool
val is_void_ptr_path : t -> bool
val is_cpp_vector_elem : partial -> bool
val is_global_partial : partial -> bool
BO__Symb.SymbolPath
val compare_deref_kind : deref_kind -> deref_kind -> int
type prim
=
| Pvar of IR.Pvar.t | ||||
| Deref of deref_kind * partial | ||||
| Callsite of {
} |
|
and partial
= prim BO.BufferOverrunField.t
type t
= private
| Normal of partial | ||
| Offset of {
} | ||
| Length of {
} | ||
| Modeled of {
} |
val equal_partial : partial -> partial -> bool
val pp_mark : markup:bool -> F.formatter -> t -> unit
val pp_partial : F.formatter -> partial -> unit
val pp_partial_paren : paren:bool -> F.formatter -> partial -> unit
val of_pvar : IR.Pvar.t -> partial
val of_callsite : ?obj_path:partial -> ret_typ:IR.Typ.t -> Absint.CallSite.t -> partial
val deref : deref_kind:deref_kind -> partial -> partial
val append_field : ?typ:IR.Typ.t -> partial -> IR.Fieldname.t -> partial
val append_star_field : partial -> IR.Fieldname.t -> partial
val normal : partial -> t
val offset : partial -> is_void:bool -> t
val length : partial -> is_void:bool -> t
val modeled : partial -> is_expensive:bool -> t
val is_this : partial -> bool
val get_pvar : partial -> IR.Pvar.t option
val represents_multiple_values : partial -> bool
val represents_multiple_values_sound : partial -> bool
val represents_callsite_sound_partial : partial -> bool
val exists_pvar_partial : f:(IR.Pvar.t -> bool) -> partial -> bool
val exists_str_partial : f:(string -> bool) -> partial -> bool
val is_void_ptr_path : t -> bool
val is_cpp_vector_elem : partial -> bool
val is_global_partial : partial -> bool
BO__Symb
module BoundEnd : sig ... end
module SymbolPath : sig ... end
module Symbol : sig ... end
module SymbolSet : sig ... end
module SymbolMap : sig ... end
module SymbolPathSet : IStdlib.PrettyPrintable.PPSet with type PPSet.elt = SymbolPath.partial
BO__Symb
module BoundEnd : sig ... end
module SymbolPath : sig ... end
module Symbol : sig ... end
module SymbolSet : sig ... end
module SymbolMap : sig ... end
IBase.Config
type os_type
=
| Unix |
| Win32 |
| Cygwin |
type build_system
=
| BAnt |
| BBuck |
| BClang |
| BGradle |
| BJava |
| BJavac |
| BMake |
| BMvn |
| BNdk |
| BXcode |
type scheduler
=
| File |
| Restart |
| SyntacticCallGraph |
val build_system_of_exe_name : string -> build_system
val string_of_build_system : build_system -> string
val env_inside_maven : IStdlib.IStd.Unix.env
val anonymous_block_num_sep : string
val anonymous_block_prefix : string
val append_buck_flavors : string list
val assign : string
val biabduction_models_dir : string
val biabduction_models_jar : string
val biabduction_models_src_dir : string
val bin_dir : string
val bound_error_allowed_in_procedure_call : bool
val clang_exe_aliases : string list
val clang_initializer_prefix : string
val clang_inner_destructor_prefix : string
val clang_plugin_path : string
val classpath : string option
val default_failure_name : string
val dotty_frontend_output : string
val etc_dir : string
val fail_on_issue_exit_code : int
val fcp_dir : string
val idempotent_getters : bool
val initial_analysis_time : float
val ivar_attributes : string
val java_lambda_marker_infix : string
marker to recognize methods generated by javalib to eliminate lambdas
val lib_dir : string
val load_average : float option
val max_narrows : int
val max_widens : int
val meet_level : int
val nsnotification_center_checker_backend : bool
val os_type : os_type
val passthroughs : bool
val patterns_modeled_expensive : string * Yojson.Basic.t
val patterns_never_returning_null : string * Yojson.Basic.t
val patterns_skip_implementation : string * Yojson.Basic.t
val patterns_skip_translation : string * Yojson.Basic.t
val pp_version : Stdlib.Format.formatter -> unit -> unit
val property_attributes : string
val relative_path_backtrack : int
val report : bool
val report_custom_error : bool
val report_force_relative_path : bool
val report_nullable_inconsistency : bool
val save_compact_summaries : bool
val smt_output : bool
val source_file_extentions : string list
val sourcepath : string option
val sources : string list
val specs_files_suffix : string
val trace_absarray : bool
val unsafe_unret : string
val incremental_analysis : bool
val weak : string
val whitelisted_cpp_classes : string list
val whitelisted_cpp_methods : string list
val wrappers_dir : string
val abs_struct : int
val abs_val : int
val allow_leak : bool
val annotation_reachability_cxx : Yojson.Basic.t
val annotation_reachability_cxx_sources : Yojson.Basic.t
val annotation_reachability_custom_pairs : Yojson.Basic.t
val anon_args : string list
val array_level : int
val biabduction_models_mode : bool
val bo_debug : int
val bo_field_depth_limit : int option
val bo_service_handler_request : bool
val bootclasspath : string option
val buck : bool
val buck_blacklist : string list
val buck_build_args : string list
val buck_build_args_no_inline : string list
val buck_cache_mode : bool
val buck_merge_all_deps : bool
val buck_mode : BuckMode.t option
val buck_out_gen : string
val buck_targets_blacklist : string list
val call_graph_schedule : bool
val capture : bool
val capture_blacklist : string option
val censor_report : ((bool * Str.regexp) * (bool * Str.regexp) * string) list
val changed_files_index : string option
val check_version : string option
val clang_biniou_file : string option
val clang_compound_literal_init_limit : int
val clang_extra_flags : string list
val clang_blacklisted_flags : string list
val clang_blacklisted_flags_with_arg : string list
val clang_ignore_regex : string option
val clang_isystem_to_override_regex : Str.regexp option
val clang_idirafter_to_override_regex : Str.regexp option
val clang_libcxx_include_to_override_regex : string option
val command : ATDGenerated.InferCommand.t
val compute_analytics : bool
val continue_analysis : bool
val continue_capture : bool
val costs_current : string option
val cost_issues_tests : string option
val costs_previous : string option
val cxx : bool
val cxx_scope_guards : Yojson.Basic.t
val deduplicate : bool
val debug_exceptions : bool
val debug_level_analysis : int
val debug_level_capture : int
val debug_level_linters : int
val debug_level_test_determinator : int
val debug_mode : bool
val default_linters : bool
val dependency_mode : bool
val developer_mode : bool
val differential_filter_files : string option
val differential_filter_set : [ `Introduced | `Fixed | `Preexisting ] list
val dotty_cfg_libs : bool
val dump_duplicate_symbols : bool
val eradicate_condition_redundant : bool
val eradicate_field_over_annotated : bool
val eradicate_return_over_annotated : bool
val eradicate_verbose : bool
val fail_on_bug : bool
val fcp_apple_clang : string option
val fcp_syntax_only : bool
val file_renamings : string option
val filter_paths : bool
val filtering : bool
val force_delete_results_dir : bool
val force_integration : build_system option
val from_json_report : string
val from_json_costs_report : string
val frontend_stats : bool
val frontend_tests : bool
val function_pointer_specialization : bool
val generated_classes : string option
val genrule_mode : bool
val get_linter_doc_url : linter_id:string -> string option
val help_checker : Checker.t list
val help_issue_type : IssueType.t list
val hoisting_report_only_expensive : bool
val html : bool
val icfg_dotty_outfile : string option
val infer_is_clang : bool
val infer_is_javac : bool
val implicit_sdk_root : string option
val inclusive_cost : bool
val inferconfig_file : string option
val inferconfig_dir : string option
val iphoneos_target_sdk_version : string option
val iphoneos_target_sdk_version_path_regex : iphoneos_target_sdk_version_path_regex list
val is_checker_enabled : Checker.t -> bool
val issues_tests : string option
val issues_tests_fields : IssuesTestField.t list
val iterations : int
val java_debug_source_file_info : string option
val java_jar_compiler : string option
val java_version : int option
val javac_classes_out : string
val job_id : string option
val jobs : int
val join_cond : int
val keep_going : bool
val linter : string option
val linters_def_file : string list
val linters_def_folder : string list
val linters_developer_mode : bool
val linters_ignore_clang_failures : bool
val linters_validate_syntax_only : bool
val list_checkers : bool
val list_issue_types : bool
val liveness_dangerous_classes : Yojson.Basic.t
val max_nesting : int option
val merge : bool
val method_decls_info : string option
val ml_buckets : [ `MLeak_all | `MLeak_arc | `MLeak_cf | `MLeak_cpp | `MLeak_no_arc | `MLeak_unknown ] list
val modified_lines : string option
val monitor_prop_size : bool
val nelseg : bool
val no_translate_libs : bool
val nullable_annotation : string option
val nullsafe_disable_field_not_initialized_in_nonstrict_classes : bool
val nullsafe_optimistic_third_party_params_in_non_strict : bool
val nullsafe_third_party_signatures : string option
val nullsafe_third_party_location_for_messaging_only : string option
val nullsafe_strict_containers : bool
val oom_threshold : int option
val only_cheap_debug : bool
val only_footprint : bool
val pmd_xml : bool
val print_active_checkers : bool
val print_builtins : bool
val print_logs : bool
val print_types : bool
val print_using_diff : bool
val procedures : bool
val procedures_attributes : bool
val procedures_definedness : bool
val procedures_filter : string option
val procedures_name : bool
val procedures_source_file : bool
val procedures_summary : bool
val process_clang_ast : bool
val clang_frontend_action_string : string
val profiler_samples : string option
val progress_bar : [ `MultiLine | `Plain | `Quiet ]
val project_root : string
val pudge : bool
val pulse_cut_to_one_path_procedures_pattern : Str.regexp option
val pulse_recency_limit : int
val pulse_intraprocedural_only : bool
val pulse_max_disjuncts : int
val pulse_model_abort : string list
val pulse_model_alloc_pattern : Str.regexp option
val pulse_model_release_pattern : Str.regexp option
val pulse_model_transfer_ownership_namespace : (string * string) list
val pulse_model_transfer_ownership : string list
val pulse_widen_threshold : int
val pure_by_default : bool
val quandary_endpoints : Yojson.Basic.t
val quandary_sanitizers : Yojson.Basic.t
val quandary_sinks : Yojson.Basic.t
val quandary_sources : Yojson.Basic.t
val quiet : bool
val racerd_guardedby : bool
val reactive_mode : bool
val reanalyze : bool
val report_blacklist_files_containing : string list
val report_console_limit : int option
val report_current : string option
val report_formatter : [ `No_formatter | `Phabricator_formatter ]
val report_path_regex_blacklist : string list
val report_path_regex_whitelist : string list
val report_previous : string option
val report_suppress_errors : string list
val reports_include_ml_loc : bool
val rest : string list
val results_dir : string
val scheduler : scheduler
val scuba_logging : bool
val scuba_normals : string IStdlib.IStd.String.Map.t
val scuba_tags : string list IStdlib.IStd.String.Map.t
val seconds_per_iteration : float option
val select : int option
val show_buckets : bool
val siof_check_iostreams : bool
val siof_safe_methods : string list
val skip_analysis_in_path : string list
val skip_analysis_in_path_skips_compilation : bool
val skip_duplicated_types : bool
val skip_translation_headers : string list
val sledge_timers : bool
val source_files : bool
val source_files_cfg : bool
val source_files_filter : string option
val source_files_freshly_captured : bool
val source_files_procedure_names : bool
val source_files_type_environment : bool
val source_preview : bool
val sqlite_cache_size : int
val sqlite_page_size : int
val sqlite_lock_timeout : int
val sqlite_vfs : string option
val sqlite_write_daemon : bool
val starvation_skip_analysis : Yojson.Basic.t
val starvation_strict_mode : bool
val starvation_whole_program : bool
val subtype_multirange : bool
val summaries_caches_max_size : int
val symops_per_iteration : int option
val test_determinator : bool
val export_changed_functions : bool
val test_filtering : bool
val testing_mode : bool
val threadsafe_aliases : Yojson.Basic.t
val topl_properties : string list
val trace_error : bool
val trace_events : bool
val trace_join : bool
val trace_ondemand : bool
val trace_rearrange : bool
val trace_topl : bool
val tv_commit : string option
val tv_limit : int
val tv_limit_filtered : int
val type_size : bool
val uninit_interproc : bool
val unsafe_malloc : bool
val worklist_mode : int
val write_dotty : bool
val write_html : bool
val write_html_whitelist_regex : string list
val write_website : string option
val xcode_developer_dir : string option
val xcpretty : bool
val dynamic_dispatch : bool
val toplevel_results_dir : string
In some integrations, eg Buck, infer subprocesses started by the build system (started by the toplevel infer process) will have their own results directory; this points to the results directory of the toplevel infer process, which can be useful for, eg, storing debug info. In other cases this is equal to results_dir
.
val is_in_custom_symbols : string -> string -> bool
Does named symbol match any prefix in the named custom symbol list?
val execution_id : IStdlib.IStd.Int64.t
val clang_compilation_dbs : [ `Escaped of string | `Raw of string ] list IStdlib.IStd.ref
IBase.Config
type os_type
=
| Unix |
| Win32 |
| Cygwin |
type build_system
=
| BAnt |
| BBuck |
| BClang |
| BGradle |
| BJava |
| BJavac |
| BMake |
| BMvn |
| BNdk |
| BXcode |
type scheduler
=
| File |
| Restart |
| SyntacticCallGraph |
val build_system_of_exe_name : string -> build_system
val string_of_build_system : build_system -> string
val env_inside_maven : IStdlib.IStd.Unix.env
val anonymous_block_num_sep : string
val anonymous_block_prefix : string
val append_buck_flavors : string list
val assign : string
val biabduction_models_dir : string
val biabduction_models_jar : string
val biabduction_models_src_dir : string
val bin_dir : string
val bound_error_allowed_in_procedure_call : bool
val clang_exe_aliases : string list
val clang_initializer_prefix : string
val clang_inner_destructor_prefix : string
val clang_plugin_path : string
val classpath : string option
val default_failure_name : string
val dotty_frontend_output : string
val etc_dir : string
val fail_on_issue_exit_code : int
val fcp_dir : string
val idempotent_getters : bool
val initial_analysis_time : float
val ivar_attributes : string
val java_lambda_marker_infix : string
marker to recognize methods generated by javalib to eliminate lambdas
val lib_dir : string
val load_average : float option
val max_narrows : int
val max_widens : int
val meet_level : int
val nsnotification_center_checker_backend : bool
val os_type : os_type
val passthroughs : bool
val patterns_modeled_expensive : string * Yojson.Basic.t
val patterns_never_returning_null : string * Yojson.Basic.t
val patterns_skip_implementation : string * Yojson.Basic.t
val patterns_skip_translation : string * Yojson.Basic.t
val pp_version : Stdlib.Format.formatter -> unit -> unit
val property_attributes : string
val relative_path_backtrack : int
val report : bool
val report_custom_error : bool
val report_force_relative_path : bool
val report_nullable_inconsistency : bool
val save_compact_summaries : bool
val smt_output : bool
val source_file_extentions : string list
val sourcepath : string option
val sources : string list
val specs_files_suffix : string
val trace_absarray : bool
val unsafe_unret : string
val incremental_analysis : bool
val weak : string
val whitelisted_cpp_classes : string list
val whitelisted_cpp_methods : string list
val wrappers_dir : string
val abs_struct : int
val abs_val : int
val allow_leak : bool
val annotation_reachability_cxx : Yojson.Basic.t
val annotation_reachability_cxx_sources : Yojson.Basic.t
val annotation_reachability_custom_pairs : Yojson.Basic.t
val anon_args : string list
val array_level : int
val biabduction_models_mode : bool
val bo_debug : int
val bo_field_depth_limit : int option
val bootclasspath : string option
val buck : bool
val buck_blacklist : string list
val buck_build_args : string list
val buck_build_args_no_inline : string list
val buck_cache_mode : bool
val buck_merge_all_deps : bool
val buck_mode : BuckMode.t option
val buck_out_gen : string
val buck_targets_blacklist : string list
val call_graph_schedule : bool
val capture : bool
val capture_blacklist : string option
val censor_report : ((bool * Str.regexp) * (bool * Str.regexp) * string) list
val changed_files_index : string option
val check_version : string option
val clang_biniou_file : string option
val clang_compound_literal_init_limit : int
val clang_extra_flags : string list
val clang_blacklisted_flags : string list
val clang_blacklisted_flags_with_arg : string list
val clang_ignore_regex : string option
val clang_isystem_to_override_regex : Str.regexp option
val clang_idirafter_to_override_regex : Str.regexp option
val clang_libcxx_include_to_override_regex : string option
val command : ATDGenerated.InferCommand.t
val compute_analytics : bool
val continue_analysis : bool
val continue_capture : bool
val costs_current : string option
val cost_issues_tests : string option
val costs_previous : string option
val cxx : bool
val cxx_scope_guards : Yojson.Basic.t
val deduplicate : bool
val debug_exceptions : bool
val debug_level_analysis : int
val debug_level_capture : int
val debug_level_linters : int
val debug_level_test_determinator : int
val debug_mode : bool
val default_linters : bool
val dependency_mode : bool
val developer_mode : bool
val differential_filter_files : string option
val differential_filter_set : [ `Introduced | `Fixed | `Preexisting ] list
val dotty_cfg_libs : bool
val dump_duplicate_symbols : bool
val eradicate_condition_redundant : bool
val eradicate_field_over_annotated : bool
val eradicate_return_over_annotated : bool
val eradicate_verbose : bool
val fail_on_bug : bool
val fcp_apple_clang : string option
val fcp_syntax_only : bool
val file_renamings : string option
val filter_paths : bool
val filtering : bool
val force_delete_results_dir : bool
val force_integration : build_system option
val from_json_report : string
val from_json_costs_report : string
val frontend_stats : bool
val frontend_tests : bool
val function_pointer_specialization : bool
val generated_classes : string option
val genrule_mode : bool
val get_linter_doc_url : linter_id:string -> string option
val help_checker : Checker.t list
val help_issue_type : IssueType.t list
val hoisting_report_only_expensive : bool
val html : bool
val icfg_dotty_outfile : string option
val infer_is_clang : bool
val infer_is_javac : bool
val implicit_sdk_root : string option
val inclusive_cost : bool
val inferconfig_file : string option
val inferconfig_dir : string option
val iphoneos_target_sdk_version : string option
val iphoneos_target_sdk_version_path_regex : iphoneos_target_sdk_version_path_regex list
val is_checker_enabled : Checker.t -> bool
val issues_tests : string option
val issues_tests_fields : IssuesTestField.t list
val iterations : int
val java_debug_source_file_info : string option
val java_jar_compiler : string option
val java_version : int option
val javac_classes_out : string
val job_id : string option
val jobs : int
val join_cond : int
val keep_going : bool
val linter : string option
val linters_def_file : string list
val linters_def_folder : string list
val linters_developer_mode : bool
val linters_ignore_clang_failures : bool
val linters_validate_syntax_only : bool
val list_checkers : bool
val list_issue_types : bool
val liveness_dangerous_classes : Yojson.Basic.t
val max_nesting : int option
val merge : bool
val method_decls_info : string option
val ml_buckets : [ `MLeak_all | `MLeak_arc | `MLeak_cf | `MLeak_cpp | `MLeak_no_arc | `MLeak_unknown ] list
val modified_lines : string option
val monitor_prop_size : bool
val nelseg : bool
val no_translate_libs : bool
val nullable_annotation : string option
val nullsafe_disable_field_not_initialized_in_nonstrict_classes : bool
val nullsafe_optimistic_third_party_params_in_non_strict : bool
val nullsafe_third_party_signatures : string option
val nullsafe_third_party_location_for_messaging_only : string option
val nullsafe_strict_containers : bool
val oom_threshold : int option
val only_cheap_debug : bool
val only_footprint : bool
val pmd_xml : bool
val print_active_checkers : bool
val print_builtins : bool
val print_logs : bool
val print_types : bool
val print_using_diff : bool
val procedures : bool
val procedures_attributes : bool
val procedures_definedness : bool
val procedures_filter : string option
val procedures_name : bool
val procedures_source_file : bool
val procedures_summary : bool
val process_clang_ast : bool
val clang_frontend_action_string : string
val profiler_samples : string option
val progress_bar : [ `MultiLine | `Plain | `Quiet ]
val project_root : string
val pudge : bool
val pulse_cut_to_one_path_procedures_pattern : Str.regexp option
val pulse_recency_limit : int
val pulse_intraprocedural_only : bool
val pulse_max_disjuncts : int
val pulse_model_abort : string list
val pulse_model_alloc_pattern : Str.regexp option
val pulse_model_release_pattern : Str.regexp option
val pulse_model_transfer_ownership_namespace : (string * string) list
val pulse_model_transfer_ownership : string list
val pulse_widen_threshold : int
val pure_by_default : bool
val quandary_endpoints : Yojson.Basic.t
val quandary_sanitizers : Yojson.Basic.t
val quandary_sinks : Yojson.Basic.t
val quandary_sources : Yojson.Basic.t
val quiet : bool
val racerd_guardedby : bool
val reactive_mode : bool
val reanalyze : bool
val report_blacklist_files_containing : string list
val report_console_limit : int option
val report_current : string option
val report_formatter : [ `No_formatter | `Phabricator_formatter ]
val report_path_regex_blacklist : string list
val report_path_regex_whitelist : string list
val report_previous : string option
val report_suppress_errors : string list
val reports_include_ml_loc : bool
val rest : string list
val results_dir : string
val scheduler : scheduler
val scuba_logging : bool
val scuba_normals : string IStdlib.IStd.String.Map.t
val scuba_tags : string list IStdlib.IStd.String.Map.t
val seconds_per_iteration : float option
val select : int option
val show_buckets : bool
val siof_check_iostreams : bool
val siof_safe_methods : string list
val skip_analysis_in_path : string list
val skip_analysis_in_path_skips_compilation : bool
val skip_duplicated_types : bool
val skip_translation_headers : string list
val sledge_timers : bool
val source_files : bool
val source_files_cfg : bool
val source_files_filter : string option
val source_files_freshly_captured : bool
val source_files_procedure_names : bool
val source_files_type_environment : bool
val source_preview : bool
val sqlite_cache_size : int
val sqlite_page_size : int
val sqlite_lock_timeout : int
val sqlite_vfs : string option
val sqlite_write_daemon : bool
val starvation_skip_analysis : Yojson.Basic.t
val starvation_strict_mode : bool
val starvation_whole_program : bool
val subtype_multirange : bool
val summaries_caches_max_size : int
val symops_per_iteration : int option
val test_determinator : bool
val export_changed_functions : bool
val test_filtering : bool
val testing_mode : bool
val threadsafe_aliases : Yojson.Basic.t
val topl_properties : string list
val trace_error : bool
val trace_events : bool
val trace_join : bool
val trace_ondemand : bool
val trace_rearrange : bool
val trace_topl : bool
val tv_commit : string option
val tv_limit : int
val tv_limit_filtered : int
val type_size : bool
val uninit_interproc : bool
val unsafe_malloc : bool
val worklist_mode : int
val write_dotty : bool
val write_html : bool
val write_html_whitelist_regex : string list
val write_website : string option
val xcode_developer_dir : string option
val xcpretty : bool
val dynamic_dispatch : bool
val toplevel_results_dir : string
In some integrations, eg Buck, infer subprocesses started by the build system (started by the toplevel infer process) will have their own results directory; this points to the results directory of the toplevel infer process, which can be useful for, eg, storing debug info. In other cases this is equal to results_dir
.
val is_in_custom_symbols : string -> string -> bool
Does named symbol match any prefix in the named custom symbol list?
val execution_id : IStdlib.IStd.Int64.t
val clang_compilation_dbs : [ `Escaped of string | `Raw of string ] list IStdlib.IStd.ref
IBase.IssueType
type visibility
=
| User | always add to error log |
| Developer | only add to error log in some debug modes |
| Silent | never add to error log |
visibility of the issue type
val compare_visibility : visibility -> visibility -> int
val equal_visibility : visibility -> visibility -> bool
val string_of_visibility : visibility -> string
val string_of_severity : severity -> string
type t
= private
{
unique_id : string; | |
checker : Checker.t; | |
visibility : visibility; | |
user_documentation : string option; | |
mutable default_severity : severity; | used for documentation but can be overriden at report time |
mutable enabled : bool; | |
mutable hum : string; | |
mutable doc_url : string option; | |
mutable linters_def_file : string option; |
}
val pp : Stdlib.Format.formatter -> t -> unit
pretty print a localised string
val find_from_string : id:string -> t option
return the issue type if it was previously registered
val register_from_string : ?enabled:bool -> ?is_cost_issue:bool -> ?hum:string -> ?doc_url:string -> ?linters_def_file:string -> id:string -> ?visibility:visibility -> ?user_documentation:string -> severity -> Checker.t -> t
Create a new issue and register it in the list of all issues. NOTE: if the issue with the same string id is already registered, overrides `hum`, `doc_url`, and `linters_def_file`, but DOES NOT override `enabled`. This trick allows to deal with disabling/enabling dynamic AL issues from the config, when we don't know all params yet. Thus, the human-readable description can be updated when we encounter the definition of the issue type, eg in AL.
val checker_can_report : Checker.t -> t -> bool
Whether the issue was registered as coming from the given checker. Important to call this before reporting to keep documentation accurate.
val set_enabled : t -> bool -> unit
val abduction_case_not_implemented : t
val array_of_pointsto : t
val array_out_of_bounds_l1 : t
val array_out_of_bounds_l2 : t
val array_out_of_bounds_l3 : t
val assert_failure : t
val bad_footprint : t
val biabduction_analysis_stops : t
val buffer_overrun_l1 : t
val buffer_overrun_l2 : t
val buffer_overrun_l3 : t
val buffer_overrun_l4 : t
val buffer_overrun_l5 : t
val buffer_overrun_r2 : t
val buffer_overrun_s2 : t
val buffer_overrun_t1 : t
Tainted values is used in array accesses, causing buffer over/underruns
val buffer_overrun_u5 : t
val cannot_star : t
val captured_strong_self : t
val checkers_allocates_memory : t
Warning name when a performance critical method directly or indirectly calls a method allocating memory
val checkers_annotation_reachability_error : t
val checkers_calls_expensive_method : t
Warning name when a performance critical method directly or indirectly calls a method annotatd as expensive
val checkers_expensive_overrides_unexpensive : t
Warning name for the subtyping rule: method not annotated as expensive cannot be overridden by a method annotated as expensive
val checkers_fragment_retain_view : t
val checkers_immutable_cast : t
val checkers_printf_args : t
val class_cast_exception : t
val complexity_increase : kind:CostKind.t -> is_on_ui_thread:bool -> t
val component_factory_function : t
val component_file_cyclomatic_complexity : t
val component_file_line_count : t
val component_initializer_with_side_effects : t
val component_with_multiple_factory_methods : t
val component_with_unconventional_superclass : t
val condition_always_false : t
val condition_always_true : t
val config_checks_between_markers : t
val constant_address_dereference : t
val create_intent_from_uri : t
val cross_site_scripting : t
val dangling_pointer_dereference : t
val dangling_pointer_dereference_maybe : t
val dead_store : t
val deadlock : t
val divide_by_zero : t
val do_not_report : t
an issue type that should never be reported
val empty_vector_access : t
val eradicate_condition_redundant : t
val eradicate_field_not_initialized : t
val eradicate_field_not_nullable : t
val eradicate_field_over_annotated : t
val eradicate_inconsistent_subclass_parameter_annotation : t
val eradicate_inconsistent_subclass_return_annotation : t
val eradicate_redundant_nested_class_annotation : t
val eradicate_bad_nested_class_annotation : t
val eradicate_nullable_dereference : t
val eradicate_parameter_not_nullable : t
val eradicate_return_not_nullable : t
val eradicate_return_over_annotated : t
val eradicate_unvetted_third_party_in_nullsafe : t
val eradicate_unchecked_usage_in_nullsafe : t
val eradicate_meta_class_can_be_nullsafe : t
val eradicate_meta_class_needs_improvement : t
val eradicate_meta_class_is_nullsafe : t
val exposed_insecure_intent_handling : t
val failure_exe : t
val field_not_null_checked : t
val guardedby_violation_racerd : t
val impure_function : t
val inefficient_keyset_iterator : t
val inferbo_alloc_is_big : t
val inferbo_alloc_is_negative : t
val inferbo_alloc_is_zero : t
val inferbo_alloc_may_be_big : t
val inferbo_alloc_may_be_negative : t
val inferbo_alloc_may_be_tainted : t
val infinite_cost_call : kind:CostKind.t -> t
val inherently_dangerous_function : t
val insecure_intent_handling : t
val integer_overflow_l1 : t
val integer_overflow_l2 : t
val integer_overflow_l5 : t
val integer_overflow_r2 : t
val integer_overflow_u5 : t
val interface_not_thread_safe : t
val internal_error : t
val invariant_call : t
val javascript_injection : t
val lab_resource_leak : t
val leak_after_array_abstraction : t
val leak_in_footprint : t
val leak_unknown_origin : t
val lockless_violation : t
val lock_consistency_violation : t
val logging_private_data : t
val expensive_loop_invariant_call : t
val memory_leak : t
val missing_fld : t
val missing_required_prop : t
val mixed_self_weakself : t
val multiple_weakself : t
val mutable_local_variable_in_component_file : t
val null_dereference : t
val nullptr_dereference : t
val parameter_not_null_checked : t
val pointer_size_mismatch : t
val precondition_not_found : t
val precondition_not_met : t
val premature_nil_termination : t
val pulse_memory_leak : t
val pure_function : t
val quandary_taint_error : t
val resource_leak : t
val retain_cycle : t
val skip_function : t
val skip_pointer_dereference : t
val shell_injection : t
val shell_injection_risk : t
val sql_injection : t
val sql_injection_risk : t
val stack_variable_address_escape : t
val starvation : t
val static_initialization_order_fiasco : t
val strict_mode_violation : t
val strong_self_not_checked : t
val symexec_memory_error : t
val thread_safety_violation : t
val topl_error : t
val unary_minus_applied_to_unsigned_expression : t
val uninitialized_value : t
val unreachable_code_after : t
val use_after_delete : t
val use_after_free : t
val use_after_lifetime : t
val untrusted_buffer_access : t
val untrusted_deserialization : t
val untrusted_deserialization_risk : t
val untrusted_file : t
val untrusted_file_risk : t
val untrusted_heap_allocation : t
val untrusted_intent_creation : t
val untrusted_url_risk : t
val untrusted_environment_change_risk : t
val untrusted_variable_length_array : t
val user_controlled_sql_risk : t
val vector_invalidation : t
val weak_self_in_noescape_block : t
val wrong_argument_number : t
val unreachable_cost_call : kind:CostKind.t -> t
IBase.IssueType
type visibility
=
| User | always add to error log |
| Developer | only add to error log in some debug modes |
| Silent | never add to error log |
visibility of the issue type
val compare_visibility : visibility -> visibility -> int
val equal_visibility : visibility -> visibility -> bool
val string_of_visibility : visibility -> string
val string_of_severity : severity -> string
type t
= private
{
unique_id : string; | |
checker : Checker.t; | |
visibility : visibility; | |
user_documentation : string option; | |
mutable default_severity : severity; | used for documentation but can be overriden at report time |
mutable enabled : bool; | |
mutable hum : string; | |
mutable doc_url : string option; | |
mutable linters_def_file : string option; |
}
val pp : Stdlib.Format.formatter -> t -> unit
pretty print a localised string
val find_from_string : id:string -> t option
return the issue type if it was previously registered
val register_dynamic : ?enabled:bool -> ?hum:string -> ?doc_url:string -> linters_def_file:string option -> id:string -> ?user_documentation:string -> severity -> Checker.t -> t
Create a new issue and register it in the list of all issues. NOTE: if the issue with the same string id is already registered, overrides `hum`, `doc_url`, and `linters_def_file`, but DOES NOT override `enabled`. This trick allows to deal with disabling/enabling dynamic AL issues from the config, when we don't know all params yet. Thus, the human-readable description can be updated when we encounter the definition of the issue type, eg in AL.
val checker_can_report : Checker.t -> t -> bool
Whether the issue was registered as coming from the given checker. Important to call this before reporting to keep documentation accurate.
val set_enabled : t -> bool -> unit
val abduction_case_not_implemented : t
val array_of_pointsto : t
val array_out_of_bounds_l1 : t
val array_out_of_bounds_l2 : t
val array_out_of_bounds_l3 : t
val assert_failure : t
val bad_footprint : t
val biabduction_analysis_stops : t
val buffer_overrun_l1 : t
val buffer_overrun_l2 : t
val buffer_overrun_l3 : t
val buffer_overrun_l4 : t
val buffer_overrun_l5 : t
val buffer_overrun_s2 : t
val buffer_overrun_u5 : t
val cannot_star : t
val captured_strong_self : t
val checkers_allocates_memory : t
Warning name when a performance critical method directly or indirectly calls a method allocating memory
val checkers_annotation_reachability_error : t
val checkers_calls_expensive_method : t
Warning name when a performance critical method directly or indirectly calls a method annotatd as expensive
val checkers_expensive_overrides_unexpensive : t
Warning name for the subtyping rule: method not annotated as expensive cannot be overridden by a method annotated as expensive
val checkers_fragment_retain_view : t
val checkers_immutable_cast : t
val checkers_printf_args : t
val class_cast_exception : t
val complexity_increase : kind:CostKind.t -> is_on_ui_thread:bool -> t
val component_factory_function : t
val component_file_cyclomatic_complexity : t
val component_file_line_count : t
val component_initializer_with_side_effects : t
val component_with_multiple_factory_methods : t
val component_with_unconventional_superclass : t
val condition_always_false : t
val condition_always_true : t
val config_checks_between_markers : t
val constant_address_dereference : t
val create_intent_from_uri : t
val cross_site_scripting : t
val dangling_pointer_dereference : t
val dangling_pointer_dereference_maybe : t
val dead_store : t
val deadlock : t
val divide_by_zero : t
val do_not_report : t
an issue type that should never be reported
val empty_vector_access : t
val eradicate_condition_redundant : t
val eradicate_field_not_initialized : t
val eradicate_field_not_nullable : t
val eradicate_field_over_annotated : t
val eradicate_inconsistent_subclass_parameter_annotation : t
val eradicate_inconsistent_subclass_return_annotation : t
val eradicate_redundant_nested_class_annotation : t
val eradicate_bad_nested_class_annotation : t
val eradicate_nullable_dereference : t
val eradicate_parameter_not_nullable : t
val eradicate_return_not_nullable : t
val eradicate_return_over_annotated : t
val eradicate_unvetted_third_party_in_nullsafe : t
val eradicate_unchecked_usage_in_nullsafe : t
val eradicate_meta_class_can_be_nullsafe : t
val eradicate_meta_class_needs_improvement : t
val eradicate_meta_class_is_nullsafe : t
val exposed_insecure_intent_handling : t
val failure_exe : t
val field_not_null_checked : t
val guardedby_violation_racerd : t
val impure_function : t
val inefficient_keyset_iterator : t
val inferbo_alloc_is_big : t
val inferbo_alloc_is_negative : t
val inferbo_alloc_is_zero : t
val inferbo_alloc_may_be_big : t
val inferbo_alloc_may_be_negative : t
val infinite_cost_call : kind:CostKind.t -> t
val inherently_dangerous_function : t
val insecure_intent_handling : t
val integer_overflow_l1 : t
val integer_overflow_l2 : t
val integer_overflow_l5 : t
val integer_overflow_u5 : t
val interface_not_thread_safe : t
val internal_error : t
val invariant_call : t
val javascript_injection : t
val lab_resource_leak : t
val leak_after_array_abstraction : t
val leak_in_footprint : t
val leak_unknown_origin : t
val lockless_violation : t
val lock_consistency_violation : t
val logging_private_data : t
val expensive_loop_invariant_call : t
val memory_leak : t
val missing_fld : t
val missing_required_prop : t
val mixed_self_weakself : t
val multiple_weakself : t
val mutable_local_variable_in_component_file : t
val null_dereference : t
val nullptr_dereference : t
val parameter_not_null_checked : t
val pointer_size_mismatch : t
val precondition_not_found : t
val precondition_not_met : t
val premature_nil_termination : t
val pulse_memory_leak : t
val pure_function : t
val quandary_taint_error : t
val resource_leak : t
val retain_cycle : t
val skip_function : t
val skip_pointer_dereference : t
val shell_injection : t
val shell_injection_risk : t
val sql_injection : t
val sql_injection_risk : t
val stack_variable_address_escape : t
val starvation : t
val static_initialization_order_fiasco : t
val strict_mode_violation : t
val strong_self_not_checked : t
val symexec_memory_error : t
val thread_safety_violation : t
val topl_error : t
val unary_minus_applied_to_unsigned_expression : t
val uninitialized_value : t
val unreachable_code_after : t
val use_after_delete : t
val use_after_free : t
val use_after_lifetime : t
val untrusted_buffer_access : t
val untrusted_deserialization : t
val untrusted_deserialization_risk : t
val untrusted_file : t
val untrusted_file_risk : t
val untrusted_heap_allocation : t
val untrusted_intent_creation : t
val untrusted_url_risk : t
val untrusted_environment_change_risk : t
val untrusted_variable_length_array : t
val user_controlled_sql_risk : t
val vector_invalidation : t
val weak_self_in_noescape_block : t
val wrong_argument_number : t
val unreachable_cost_call : kind:CostKind.t -> t
IBase__Config
type os_type
=
| Unix |
| Win32 |
| Cygwin |
type build_system
=
| BAnt |
| BBuck |
| BClang |
| BGradle |
| BJava |
| BJavac |
| BMake |
| BMvn |
| BNdk |
| BXcode |
type scheduler
=
| File |
| Restart |
| SyntacticCallGraph |
val build_system_of_exe_name : string -> build_system
val string_of_build_system : build_system -> string
val env_inside_maven : IStdlib.IStd.Unix.env
val anonymous_block_num_sep : string
val anonymous_block_prefix : string
val append_buck_flavors : string list
val assign : string
val biabduction_models_dir : string
val biabduction_models_jar : string
val biabduction_models_src_dir : string
val bin_dir : string
val bound_error_allowed_in_procedure_call : bool
val clang_exe_aliases : string list
val clang_initializer_prefix : string
val clang_inner_destructor_prefix : string
val clang_plugin_path : string
val classpath : string option
val default_failure_name : string
val dotty_frontend_output : string
val etc_dir : string
val fail_on_issue_exit_code : int
val fcp_dir : string
val idempotent_getters : bool
val initial_analysis_time : float
val ivar_attributes : string
val java_lambda_marker_infix : string
marker to recognize methods generated by javalib to eliminate lambdas
val lib_dir : string
val load_average : float option
val max_narrows : int
val max_widens : int
val meet_level : int
val nsnotification_center_checker_backend : bool
val os_type : os_type
val passthroughs : bool
val patterns_modeled_expensive : string * Yojson.Basic.t
val patterns_never_returning_null : string * Yojson.Basic.t
val patterns_skip_implementation : string * Yojson.Basic.t
val patterns_skip_translation : string * Yojson.Basic.t
val pp_version : Stdlib.Format.formatter -> unit -> unit
val property_attributes : string
val relative_path_backtrack : int
val report : bool
val report_custom_error : bool
val report_force_relative_path : bool
val report_nullable_inconsistency : bool
val save_compact_summaries : bool
val smt_output : bool
val source_file_extentions : string list
val sourcepath : string option
val sources : string list
val specs_files_suffix : string
val trace_absarray : bool
val unsafe_unret : string
val incremental_analysis : bool
val weak : string
val whitelisted_cpp_classes : string list
val whitelisted_cpp_methods : string list
val wrappers_dir : string
val abs_struct : int
val abs_val : int
val allow_leak : bool
val annotation_reachability_cxx : Yojson.Basic.t
val annotation_reachability_cxx_sources : Yojson.Basic.t
val annotation_reachability_custom_pairs : Yojson.Basic.t
val anon_args : string list
val array_level : int
val biabduction_models_mode : bool
val bo_debug : int
val bo_field_depth_limit : int option
val bo_service_handler_request : bool
val bootclasspath : string option
val buck : bool
val buck_blacklist : string list
val buck_build_args : string list
val buck_build_args_no_inline : string list
val buck_cache_mode : bool
val buck_merge_all_deps : bool
val buck_mode : IBase.BuckMode.t option
val buck_out_gen : string
val buck_targets_blacklist : string list
val call_graph_schedule : bool
val capture : bool
val capture_blacklist : string option
val censor_report : ((bool * Str.regexp) * (bool * Str.regexp) * string) list
val changed_files_index : string option
val check_version : string option
val clang_biniou_file : string option
val clang_compound_literal_init_limit : int
val clang_extra_flags : string list
val clang_blacklisted_flags : string list
val clang_blacklisted_flags_with_arg : string list
val clang_ignore_regex : string option
val clang_isystem_to_override_regex : Str.regexp option
val clang_idirafter_to_override_regex : Str.regexp option
val clang_libcxx_include_to_override_regex : string option
val command : ATDGenerated.InferCommand.t
val compute_analytics : bool
val continue_analysis : bool
val continue_capture : bool
val costs_current : string option
val cost_issues_tests : string option
val costs_previous : string option
val cxx : bool
val cxx_scope_guards : Yojson.Basic.t
val deduplicate : bool
val debug_exceptions : bool
val debug_level_analysis : int
val debug_level_capture : int
val debug_level_linters : int
val debug_level_test_determinator : int
val debug_mode : bool
val default_linters : bool
val dependency_mode : bool
val developer_mode : bool
val differential_filter_files : string option
val differential_filter_set : [ `Introduced | `Fixed | `Preexisting ] list
val dotty_cfg_libs : bool
val dump_duplicate_symbols : bool
val eradicate_condition_redundant : bool
val eradicate_field_over_annotated : bool
val eradicate_return_over_annotated : bool
val eradicate_verbose : bool
val fail_on_bug : bool
val fcp_apple_clang : string option
val fcp_syntax_only : bool
val file_renamings : string option
val filter_paths : bool
val filtering : bool
val force_delete_results_dir : bool
val force_integration : build_system option
val from_json_report : string
val from_json_costs_report : string
val frontend_stats : bool
val frontend_tests : bool
val function_pointer_specialization : bool
val generated_classes : string option
val genrule_mode : bool
val get_linter_doc_url : linter_id:string -> string option
val help_checker : IBase.Checker.t list
val help_issue_type : IBase.IssueType.t list
val hoisting_report_only_expensive : bool
val html : bool
val icfg_dotty_outfile : string option
val infer_is_clang : bool
val infer_is_javac : bool
val implicit_sdk_root : string option
val inclusive_cost : bool
val inferconfig_file : string option
val inferconfig_dir : string option
val iphoneos_target_sdk_version : string option
val iphoneos_target_sdk_version_path_regex : iphoneos_target_sdk_version_path_regex list
val is_checker_enabled : IBase.Checker.t -> bool
val issues_tests : string option
val issues_tests_fields : IBase.IssuesTestField.t list
val iterations : int
val java_debug_source_file_info : string option
val java_jar_compiler : string option
val java_version : int option
val javac_classes_out : string
val job_id : string option
val jobs : int
val join_cond : int
val keep_going : bool
val linter : string option
val linters_def_file : string list
val linters_def_folder : string list
val linters_developer_mode : bool
val linters_ignore_clang_failures : bool
val linters_validate_syntax_only : bool
val list_checkers : bool
val list_issue_types : bool
val liveness_dangerous_classes : Yojson.Basic.t
val max_nesting : int option
val merge : bool
val method_decls_info : string option
val ml_buckets : [ `MLeak_all | `MLeak_arc | `MLeak_cf | `MLeak_cpp | `MLeak_no_arc | `MLeak_unknown ] list
val modified_lines : string option
val monitor_prop_size : bool
val nelseg : bool
val no_translate_libs : bool
val nullable_annotation : string option
val nullsafe_disable_field_not_initialized_in_nonstrict_classes : bool
val nullsafe_optimistic_third_party_params_in_non_strict : bool
val nullsafe_third_party_signatures : string option
val nullsafe_third_party_location_for_messaging_only : string option
val nullsafe_strict_containers : bool
val oom_threshold : int option
val only_cheap_debug : bool
val only_footprint : bool
val pmd_xml : bool
val print_active_checkers : bool
val print_builtins : bool
val print_logs : bool
val print_types : bool
val print_using_diff : bool
val procedures : bool
val procedures_attributes : bool
val procedures_definedness : bool
val procedures_filter : string option
val procedures_name : bool
val procedures_source_file : bool
val procedures_summary : bool
val process_clang_ast : bool
val clang_frontend_action_string : string
val profiler_samples : string option
val progress_bar : [ `MultiLine | `Plain | `Quiet ]
val project_root : string
val pudge : bool
val pulse_cut_to_one_path_procedures_pattern : Str.regexp option
val pulse_recency_limit : int
val pulse_intraprocedural_only : bool
val pulse_max_disjuncts : int
val pulse_model_abort : string list
val pulse_model_alloc_pattern : Str.regexp option
val pulse_model_release_pattern : Str.regexp option
val pulse_model_transfer_ownership_namespace : (string * string) list
val pulse_model_transfer_ownership : string list
val pulse_widen_threshold : int
val pure_by_default : bool
val quandary_endpoints : Yojson.Basic.t
val quandary_sanitizers : Yojson.Basic.t
val quandary_sinks : Yojson.Basic.t
val quandary_sources : Yojson.Basic.t
val quiet : bool
val racerd_guardedby : bool
val reactive_mode : bool
val reanalyze : bool
val report_blacklist_files_containing : string list
val report_console_limit : int option
val report_current : string option
val report_formatter : [ `No_formatter | `Phabricator_formatter ]
val report_path_regex_blacklist : string list
val report_path_regex_whitelist : string list
val report_previous : string option
val report_suppress_errors : string list
val reports_include_ml_loc : bool
val rest : string list
val results_dir : string
val scheduler : scheduler
val scuba_logging : bool
val scuba_normals : string IStdlib.IStd.String.Map.t
val scuba_tags : string list IStdlib.IStd.String.Map.t
val seconds_per_iteration : float option
val select : int option
val show_buckets : bool
val siof_check_iostreams : bool
val siof_safe_methods : string list
val skip_analysis_in_path : string list
val skip_analysis_in_path_skips_compilation : bool
val skip_duplicated_types : bool
val skip_translation_headers : string list
val sledge_timers : bool
val source_files : bool
val source_files_cfg : bool
val source_files_filter : string option
val source_files_freshly_captured : bool
val source_files_procedure_names : bool
val source_files_type_environment : bool
val source_preview : bool
val sqlite_cache_size : int
val sqlite_page_size : int
val sqlite_lock_timeout : int
val sqlite_vfs : string option
val sqlite_write_daemon : bool
val starvation_skip_analysis : Yojson.Basic.t
val starvation_strict_mode : bool
val starvation_whole_program : bool
val subtype_multirange : bool
val summaries_caches_max_size : int
val symops_per_iteration : int option
val test_determinator : bool
val export_changed_functions : bool
val test_filtering : bool
val testing_mode : bool
val threadsafe_aliases : Yojson.Basic.t
val topl_properties : string list
val trace_error : bool
val trace_events : bool
val trace_join : bool
val trace_ondemand : bool
val trace_rearrange : bool
val trace_topl : bool
val tv_commit : string option
val tv_limit : int
val tv_limit_filtered : int
val type_size : bool
val uninit_interproc : bool
val unsafe_malloc : bool
val worklist_mode : int
val write_dotty : bool
val write_html : bool
val write_html_whitelist_regex : string list
val write_website : string option
val xcode_developer_dir : string option
val xcpretty : bool
val dynamic_dispatch : bool
val toplevel_results_dir : string
In some integrations, eg Buck, infer subprocesses started by the build system (started by the toplevel infer process) will have their own results directory; this points to the results directory of the toplevel infer process, which can be useful for, eg, storing debug info. In other cases this is equal to results_dir
.
val is_in_custom_symbols : string -> string -> bool
Does named symbol match any prefix in the named custom symbol list?
val execution_id : IStdlib.IStd.Int64.t
val clang_compilation_dbs : [ `Escaped of string | `Raw of string ] list IStdlib.IStd.ref
IBase__Config
type os_type
=
| Unix |
| Win32 |
| Cygwin |
type build_system
=
| BAnt |
| BBuck |
| BClang |
| BGradle |
| BJava |
| BJavac |
| BMake |
| BMvn |
| BNdk |
| BXcode |
type scheduler
=
| File |
| Restart |
| SyntacticCallGraph |
val build_system_of_exe_name : string -> build_system
val string_of_build_system : build_system -> string
val env_inside_maven : IStdlib.IStd.Unix.env
val anonymous_block_num_sep : string
val anonymous_block_prefix : string
val append_buck_flavors : string list
val assign : string
val biabduction_models_dir : string
val biabduction_models_jar : string
val biabduction_models_src_dir : string
val bin_dir : string
val bound_error_allowed_in_procedure_call : bool
val clang_exe_aliases : string list
val clang_initializer_prefix : string
val clang_inner_destructor_prefix : string
val clang_plugin_path : string
val classpath : string option
val default_failure_name : string
val dotty_frontend_output : string
val etc_dir : string
val fail_on_issue_exit_code : int
val fcp_dir : string
val idempotent_getters : bool
val initial_analysis_time : float
val ivar_attributes : string
val java_lambda_marker_infix : string
marker to recognize methods generated by javalib to eliminate lambdas
val lib_dir : string
val load_average : float option
val max_narrows : int
val max_widens : int
val meet_level : int
val nsnotification_center_checker_backend : bool
val os_type : os_type
val passthroughs : bool
val patterns_modeled_expensive : string * Yojson.Basic.t
val patterns_never_returning_null : string * Yojson.Basic.t
val patterns_skip_implementation : string * Yojson.Basic.t
val patterns_skip_translation : string * Yojson.Basic.t
val pp_version : Stdlib.Format.formatter -> unit -> unit
val property_attributes : string
val relative_path_backtrack : int
val report : bool
val report_custom_error : bool
val report_force_relative_path : bool
val report_nullable_inconsistency : bool
val save_compact_summaries : bool
val smt_output : bool
val source_file_extentions : string list
val sourcepath : string option
val sources : string list
val specs_files_suffix : string
val trace_absarray : bool
val unsafe_unret : string
val incremental_analysis : bool
val weak : string
val whitelisted_cpp_classes : string list
val whitelisted_cpp_methods : string list
val wrappers_dir : string
val abs_struct : int
val abs_val : int
val allow_leak : bool
val annotation_reachability_cxx : Yojson.Basic.t
val annotation_reachability_cxx_sources : Yojson.Basic.t
val annotation_reachability_custom_pairs : Yojson.Basic.t
val anon_args : string list
val array_level : int
val biabduction_models_mode : bool
val bo_debug : int
val bo_field_depth_limit : int option
val bootclasspath : string option
val buck : bool
val buck_blacklist : string list
val buck_build_args : string list
val buck_build_args_no_inline : string list
val buck_cache_mode : bool
val buck_merge_all_deps : bool
val buck_mode : IBase.BuckMode.t option
val buck_out_gen : string
val buck_targets_blacklist : string list
val call_graph_schedule : bool
val capture : bool
val capture_blacklist : string option
val censor_report : ((bool * Str.regexp) * (bool * Str.regexp) * string) list
val changed_files_index : string option
val check_version : string option
val clang_biniou_file : string option
val clang_compound_literal_init_limit : int
val clang_extra_flags : string list
val clang_blacklisted_flags : string list
val clang_blacklisted_flags_with_arg : string list
val clang_ignore_regex : string option
val clang_isystem_to_override_regex : Str.regexp option
val clang_idirafter_to_override_regex : Str.regexp option
val clang_libcxx_include_to_override_regex : string option
val command : ATDGenerated.InferCommand.t
val compute_analytics : bool
val continue_analysis : bool
val continue_capture : bool
val costs_current : string option
val cost_issues_tests : string option
val costs_previous : string option
val cxx : bool
val cxx_scope_guards : Yojson.Basic.t
val deduplicate : bool
val debug_exceptions : bool
val debug_level_analysis : int
val debug_level_capture : int
val debug_level_linters : int
val debug_level_test_determinator : int
val debug_mode : bool
val default_linters : bool
val dependency_mode : bool
val developer_mode : bool
val differential_filter_files : string option
val differential_filter_set : [ `Introduced | `Fixed | `Preexisting ] list
val dotty_cfg_libs : bool
val dump_duplicate_symbols : bool
val eradicate_condition_redundant : bool
val eradicate_field_over_annotated : bool
val eradicate_return_over_annotated : bool
val eradicate_verbose : bool
val fail_on_bug : bool
val fcp_apple_clang : string option
val fcp_syntax_only : bool
val file_renamings : string option
val filter_paths : bool
val filtering : bool
val force_delete_results_dir : bool
val force_integration : build_system option
val from_json_report : string
val from_json_costs_report : string
val frontend_stats : bool
val frontend_tests : bool
val function_pointer_specialization : bool
val generated_classes : string option
val genrule_mode : bool
val get_linter_doc_url : linter_id:string -> string option
val help_checker : IBase.Checker.t list
val help_issue_type : IBase.IssueType.t list
val hoisting_report_only_expensive : bool
val html : bool
val icfg_dotty_outfile : string option
val infer_is_clang : bool
val infer_is_javac : bool
val implicit_sdk_root : string option
val inclusive_cost : bool
val inferconfig_file : string option
val inferconfig_dir : string option
val iphoneos_target_sdk_version : string option
val iphoneos_target_sdk_version_path_regex : iphoneos_target_sdk_version_path_regex list
val is_checker_enabled : IBase.Checker.t -> bool
val issues_tests : string option
val issues_tests_fields : IBase.IssuesTestField.t list
val iterations : int
val java_debug_source_file_info : string option
val java_jar_compiler : string option
val java_version : int option
val javac_classes_out : string
val job_id : string option
val jobs : int
val join_cond : int
val keep_going : bool
val linter : string option
val linters_def_file : string list
val linters_def_folder : string list
val linters_developer_mode : bool
val linters_ignore_clang_failures : bool
val linters_validate_syntax_only : bool
val list_checkers : bool
val list_issue_types : bool
val liveness_dangerous_classes : Yojson.Basic.t
val max_nesting : int option
val merge : bool
val method_decls_info : string option
val ml_buckets : [ `MLeak_all | `MLeak_arc | `MLeak_cf | `MLeak_cpp | `MLeak_no_arc | `MLeak_unknown ] list
val modified_lines : string option
val monitor_prop_size : bool
val nelseg : bool
val no_translate_libs : bool
val nullable_annotation : string option
val nullsafe_disable_field_not_initialized_in_nonstrict_classes : bool
val nullsafe_optimistic_third_party_params_in_non_strict : bool
val nullsafe_third_party_signatures : string option
val nullsafe_third_party_location_for_messaging_only : string option
val nullsafe_strict_containers : bool
val oom_threshold : int option
val only_cheap_debug : bool
val only_footprint : bool
val pmd_xml : bool
val print_active_checkers : bool
val print_builtins : bool
val print_logs : bool
val print_types : bool
val print_using_diff : bool
val procedures : bool
val procedures_attributes : bool
val procedures_definedness : bool
val procedures_filter : string option
val procedures_name : bool
val procedures_source_file : bool
val procedures_summary : bool
val process_clang_ast : bool
val clang_frontend_action_string : string
val profiler_samples : string option
val progress_bar : [ `MultiLine | `Plain | `Quiet ]
val project_root : string
val pudge : bool
val pulse_cut_to_one_path_procedures_pattern : Str.regexp option
val pulse_recency_limit : int
val pulse_intraprocedural_only : bool
val pulse_max_disjuncts : int
val pulse_model_abort : string list
val pulse_model_alloc_pattern : Str.regexp option
val pulse_model_release_pattern : Str.regexp option
val pulse_model_transfer_ownership_namespace : (string * string) list
val pulse_model_transfer_ownership : string list
val pulse_widen_threshold : int
val pure_by_default : bool
val quandary_endpoints : Yojson.Basic.t
val quandary_sanitizers : Yojson.Basic.t
val quandary_sinks : Yojson.Basic.t
val quandary_sources : Yojson.Basic.t
val quiet : bool
val racerd_guardedby : bool
val reactive_mode : bool
val reanalyze : bool
val report_blacklist_files_containing : string list
val report_console_limit : int option
val report_current : string option
val report_formatter : [ `No_formatter | `Phabricator_formatter ]
val report_path_regex_blacklist : string list
val report_path_regex_whitelist : string list
val report_previous : string option
val report_suppress_errors : string list
val reports_include_ml_loc : bool
val rest : string list
val results_dir : string
val scheduler : scheduler
val scuba_logging : bool
val scuba_normals : string IStdlib.IStd.String.Map.t
val scuba_tags : string list IStdlib.IStd.String.Map.t
val seconds_per_iteration : float option
val select : int option
val show_buckets : bool
val siof_check_iostreams : bool
val siof_safe_methods : string list
val skip_analysis_in_path : string list
val skip_analysis_in_path_skips_compilation : bool
val skip_duplicated_types : bool
val skip_translation_headers : string list
val sledge_timers : bool
val source_files : bool
val source_files_cfg : bool
val source_files_filter : string option
val source_files_freshly_captured : bool
val source_files_procedure_names : bool
val source_files_type_environment : bool
val source_preview : bool
val sqlite_cache_size : int
val sqlite_page_size : int
val sqlite_lock_timeout : int
val sqlite_vfs : string option
val sqlite_write_daemon : bool
val starvation_skip_analysis : Yojson.Basic.t
val starvation_strict_mode : bool
val starvation_whole_program : bool
val subtype_multirange : bool
val summaries_caches_max_size : int
val symops_per_iteration : int option
val test_determinator : bool
val export_changed_functions : bool
val test_filtering : bool
val testing_mode : bool
val threadsafe_aliases : Yojson.Basic.t
val topl_properties : string list
val trace_error : bool
val trace_events : bool
val trace_join : bool
val trace_ondemand : bool
val trace_rearrange : bool
val trace_topl : bool
val tv_commit : string option
val tv_limit : int
val tv_limit_filtered : int
val type_size : bool
val uninit_interproc : bool
val unsafe_malloc : bool
val worklist_mode : int
val write_dotty : bool
val write_html : bool
val write_html_whitelist_regex : string list
val write_website : string option
val xcode_developer_dir : string option
val xcpretty : bool
val dynamic_dispatch : bool
val toplevel_results_dir : string
In some integrations, eg Buck, infer subprocesses started by the build system (started by the toplevel infer process) will have their own results directory; this points to the results directory of the toplevel infer process, which can be useful for, eg, storing debug info. In other cases this is equal to results_dir
.
val is_in_custom_symbols : string -> string -> bool
Does named symbol match any prefix in the named custom symbol list?
val execution_id : IStdlib.IStd.Int64.t
val clang_compilation_dbs : [ `Escaped of string | `Raw of string ] list IStdlib.IStd.ref
IBase__IssueType
type visibility
=
| User | always add to error log |
| Developer | only add to error log in some debug modes |
| Silent | never add to error log |
visibility of the issue type
val compare_visibility : visibility -> visibility -> int
val equal_visibility : visibility -> visibility -> bool
val string_of_visibility : visibility -> string
val string_of_severity : severity -> string
type t
= private
{
unique_id : string; | |
checker : IBase.Checker.t; | |
visibility : visibility; | |
user_documentation : string option; | |
mutable default_severity : severity; | used for documentation but can be overriden at report time |
mutable enabled : bool; | |
mutable hum : string; | |
mutable doc_url : string option; | |
mutable linters_def_file : string option; |
}
val pp : Stdlib.Format.formatter -> t -> unit
pretty print a localised string
val find_from_string : id:string -> t option
return the issue type if it was previously registered
val register_from_string : ?enabled:bool -> ?is_cost_issue:bool -> ?hum:string -> ?doc_url:string -> ?linters_def_file:string -> id:string -> ?visibility:visibility -> ?user_documentation:string -> severity -> IBase.Checker.t -> t
Create a new issue and register it in the list of all issues. NOTE: if the issue with the same string id is already registered, overrides `hum`, `doc_url`, and `linters_def_file`, but DOES NOT override `enabled`. This trick allows to deal with disabling/enabling dynamic AL issues from the config, when we don't know all params yet. Thus, the human-readable description can be updated when we encounter the definition of the issue type, eg in AL.
val checker_can_report : IBase.Checker.t -> t -> bool
Whether the issue was registered as coming from the given checker. Important to call this before reporting to keep documentation accurate.
val set_enabled : t -> bool -> unit
val abduction_case_not_implemented : t
val array_of_pointsto : t
val array_out_of_bounds_l1 : t
val array_out_of_bounds_l2 : t
val array_out_of_bounds_l3 : t
val assert_failure : t
val bad_footprint : t
val biabduction_analysis_stops : t
val buffer_overrun_l1 : t
val buffer_overrun_l2 : t
val buffer_overrun_l3 : t
val buffer_overrun_l4 : t
val buffer_overrun_l5 : t
val buffer_overrun_r2 : t
val buffer_overrun_s2 : t
val buffer_overrun_t1 : t
Tainted values is used in array accesses, causing buffer over/underruns
val buffer_overrun_u5 : t
val cannot_star : t
val captured_strong_self : t
val checkers_allocates_memory : t
Warning name when a performance critical method directly or indirectly calls a method allocating memory
val checkers_annotation_reachability_error : t
val checkers_calls_expensive_method : t
Warning name when a performance critical method directly or indirectly calls a method annotatd as expensive
val checkers_expensive_overrides_unexpensive : t
Warning name for the subtyping rule: method not annotated as expensive cannot be overridden by a method annotated as expensive
val checkers_fragment_retain_view : t
val checkers_immutable_cast : t
val checkers_printf_args : t
val class_cast_exception : t
val complexity_increase : kind:IBase.CostKind.t -> is_on_ui_thread:bool -> t
val component_factory_function : t
val component_file_cyclomatic_complexity : t
val component_file_line_count : t
val component_initializer_with_side_effects : t
val component_with_multiple_factory_methods : t
val component_with_unconventional_superclass : t
val condition_always_false : t
val condition_always_true : t
val config_checks_between_markers : t
val constant_address_dereference : t
val create_intent_from_uri : t
val cross_site_scripting : t
val dangling_pointer_dereference : t
val dangling_pointer_dereference_maybe : t
val dead_store : t
val deadlock : t
val divide_by_zero : t
val do_not_report : t
an issue type that should never be reported
val empty_vector_access : t
val eradicate_condition_redundant : t
val eradicate_field_not_initialized : t
val eradicate_field_not_nullable : t
val eradicate_field_over_annotated : t
val eradicate_inconsistent_subclass_parameter_annotation : t
val eradicate_inconsistent_subclass_return_annotation : t
val eradicate_redundant_nested_class_annotation : t
val eradicate_bad_nested_class_annotation : t
val eradicate_nullable_dereference : t
val eradicate_parameter_not_nullable : t
val eradicate_return_not_nullable : t
val eradicate_return_over_annotated : t
val eradicate_unvetted_third_party_in_nullsafe : t
val eradicate_unchecked_usage_in_nullsafe : t
val eradicate_meta_class_can_be_nullsafe : t
val eradicate_meta_class_needs_improvement : t
val eradicate_meta_class_is_nullsafe : t
val exposed_insecure_intent_handling : t
val failure_exe : t
val field_not_null_checked : t
val guardedby_violation_racerd : t
val impure_function : t
val inefficient_keyset_iterator : t
val inferbo_alloc_is_big : t
val inferbo_alloc_is_negative : t
val inferbo_alloc_is_zero : t
val inferbo_alloc_may_be_big : t
val inferbo_alloc_may_be_negative : t
val inferbo_alloc_may_be_tainted : t
val infinite_cost_call : kind:IBase.CostKind.t -> t
val inherently_dangerous_function : t
val insecure_intent_handling : t
val integer_overflow_l1 : t
val integer_overflow_l2 : t
val integer_overflow_l5 : t
val integer_overflow_r2 : t
val integer_overflow_u5 : t
val interface_not_thread_safe : t
val internal_error : t
val invariant_call : t
val javascript_injection : t
val lab_resource_leak : t
val leak_after_array_abstraction : t
val leak_in_footprint : t
val leak_unknown_origin : t
val lockless_violation : t
val lock_consistency_violation : t
val logging_private_data : t
val expensive_loop_invariant_call : t
val memory_leak : t
val missing_fld : t
val missing_required_prop : t
val mixed_self_weakself : t
val multiple_weakself : t
val mutable_local_variable_in_component_file : t
val null_dereference : t
val nullptr_dereference : t
val parameter_not_null_checked : t
val pointer_size_mismatch : t
val precondition_not_found : t
val precondition_not_met : t
val premature_nil_termination : t
val pulse_memory_leak : t
val pure_function : t
val quandary_taint_error : t
val resource_leak : t
val retain_cycle : t
val skip_function : t
val skip_pointer_dereference : t
val shell_injection : t
val shell_injection_risk : t
val sql_injection : t
val sql_injection_risk : t
val stack_variable_address_escape : t
val starvation : t
val static_initialization_order_fiasco : t
val strict_mode_violation : t
val strong_self_not_checked : t
val symexec_memory_error : t
val thread_safety_violation : t
val topl_error : t
val unary_minus_applied_to_unsigned_expression : t
val uninitialized_value : t
val unreachable_code_after : t
val use_after_delete : t
val use_after_free : t
val use_after_lifetime : t
val untrusted_buffer_access : t
val untrusted_deserialization : t
val untrusted_deserialization_risk : t
val untrusted_file : t
val untrusted_file_risk : t
val untrusted_heap_allocation : t
val untrusted_intent_creation : t
val untrusted_url_risk : t
val untrusted_environment_change_risk : t
val untrusted_variable_length_array : t
val user_controlled_sql_risk : t
val vector_invalidation : t
val weak_self_in_noescape_block : t
val wrong_argument_number : t
val unreachable_cost_call : kind:IBase.CostKind.t -> t
IBase__IssueType
type visibility
=
| User | always add to error log |
| Developer | only add to error log in some debug modes |
| Silent | never add to error log |
visibility of the issue type
val compare_visibility : visibility -> visibility -> int
val equal_visibility : visibility -> visibility -> bool
val string_of_visibility : visibility -> string
val string_of_severity : severity -> string
type t
= private
{
unique_id : string; | |
checker : IBase.Checker.t; | |
visibility : visibility; | |
user_documentation : string option; | |
mutable default_severity : severity; | used for documentation but can be overriden at report time |
mutable enabled : bool; | |
mutable hum : string; | |
mutable doc_url : string option; | |
mutable linters_def_file : string option; |
}
val pp : Stdlib.Format.formatter -> t -> unit
pretty print a localised string
val find_from_string : id:string -> t option
return the issue type if it was previously registered
val register_dynamic : ?enabled:bool -> ?hum:string -> ?doc_url:string -> linters_def_file:string option -> id:string -> ?user_documentation:string -> severity -> IBase.Checker.t -> t
Create a new issue and register it in the list of all issues. NOTE: if the issue with the same string id is already registered, overrides `hum`, `doc_url`, and `linters_def_file`, but DOES NOT override `enabled`. This trick allows to deal with disabling/enabling dynamic AL issues from the config, when we don't know all params yet. Thus, the human-readable description can be updated when we encounter the definition of the issue type, eg in AL.
val checker_can_report : IBase.Checker.t -> t -> bool
Whether the issue was registered as coming from the given checker. Important to call this before reporting to keep documentation accurate.
val set_enabled : t -> bool -> unit
val abduction_case_not_implemented : t
val array_of_pointsto : t
val array_out_of_bounds_l1 : t
val array_out_of_bounds_l2 : t
val array_out_of_bounds_l3 : t
val assert_failure : t
val bad_footprint : t
val biabduction_analysis_stops : t
val buffer_overrun_l1 : t
val buffer_overrun_l2 : t
val buffer_overrun_l3 : t
val buffer_overrun_l4 : t
val buffer_overrun_l5 : t
val buffer_overrun_s2 : t
val buffer_overrun_u5 : t
val cannot_star : t
val captured_strong_self : t
val checkers_allocates_memory : t
Warning name when a performance critical method directly or indirectly calls a method allocating memory
val checkers_annotation_reachability_error : t
val checkers_calls_expensive_method : t
Warning name when a performance critical method directly or indirectly calls a method annotatd as expensive
val checkers_expensive_overrides_unexpensive : t
Warning name for the subtyping rule: method not annotated as expensive cannot be overridden by a method annotated as expensive
val checkers_fragment_retain_view : t
val checkers_immutable_cast : t
val checkers_printf_args : t
val class_cast_exception : t
val complexity_increase : kind:IBase.CostKind.t -> is_on_ui_thread:bool -> t
val component_factory_function : t
val component_file_cyclomatic_complexity : t
val component_file_line_count : t
val component_initializer_with_side_effects : t
val component_with_multiple_factory_methods : t
val component_with_unconventional_superclass : t
val condition_always_false : t
val condition_always_true : t
val config_checks_between_markers : t
val constant_address_dereference : t
val create_intent_from_uri : t
val cross_site_scripting : t
val dangling_pointer_dereference : t
val dangling_pointer_dereference_maybe : t
val dead_store : t
val deadlock : t
val divide_by_zero : t
val do_not_report : t
an issue type that should never be reported
val empty_vector_access : t
val eradicate_condition_redundant : t
val eradicate_field_not_initialized : t
val eradicate_field_not_nullable : t
val eradicate_field_over_annotated : t
val eradicate_inconsistent_subclass_parameter_annotation : t
val eradicate_inconsistent_subclass_return_annotation : t
val eradicate_redundant_nested_class_annotation : t
val eradicate_bad_nested_class_annotation : t
val eradicate_nullable_dereference : t
val eradicate_parameter_not_nullable : t
val eradicate_return_not_nullable : t
val eradicate_return_over_annotated : t
val eradicate_unvetted_third_party_in_nullsafe : t
val eradicate_unchecked_usage_in_nullsafe : t
val eradicate_meta_class_can_be_nullsafe : t
val eradicate_meta_class_needs_improvement : t
val eradicate_meta_class_is_nullsafe : t
val exposed_insecure_intent_handling : t
val failure_exe : t
val field_not_null_checked : t
val guardedby_violation_racerd : t
val impure_function : t
val inefficient_keyset_iterator : t
val inferbo_alloc_is_big : t
val inferbo_alloc_is_negative : t
val inferbo_alloc_is_zero : t
val inferbo_alloc_may_be_big : t
val inferbo_alloc_may_be_negative : t
val infinite_cost_call : kind:IBase.CostKind.t -> t
val inherently_dangerous_function : t
val insecure_intent_handling : t
val integer_overflow_l1 : t
val integer_overflow_l2 : t
val integer_overflow_l5 : t
val integer_overflow_u5 : t
val interface_not_thread_safe : t
val internal_error : t
val invariant_call : t
val javascript_injection : t
val lab_resource_leak : t
val leak_after_array_abstraction : t
val leak_in_footprint : t
val leak_unknown_origin : t
val lockless_violation : t
val lock_consistency_violation : t
val logging_private_data : t
val expensive_loop_invariant_call : t
val memory_leak : t
val missing_fld : t
val missing_required_prop : t
val mixed_self_weakself : t
val multiple_weakself : t
val mutable_local_variable_in_component_file : t
val null_dereference : t
val nullptr_dereference : t
val parameter_not_null_checked : t
val pointer_size_mismatch : t
val precondition_not_found : t
val precondition_not_met : t
val premature_nil_termination : t
val pulse_memory_leak : t
val pure_function : t
val quandary_taint_error : t
val resource_leak : t
val retain_cycle : t
val skip_function : t
val skip_pointer_dereference : t
val shell_injection : t
val shell_injection_risk : t
val sql_injection : t
val sql_injection_risk : t
val stack_variable_address_escape : t
val starvation : t
val static_initialization_order_fiasco : t
val strict_mode_violation : t
val strong_self_not_checked : t
val symexec_memory_error : t
val thread_safety_violation : t
val topl_error : t
val unary_minus_applied_to_unsigned_expression : t
val uninitialized_value : t
val unreachable_code_after : t
val use_after_delete : t
val use_after_free : t
val use_after_lifetime : t
val untrusted_buffer_access : t
val untrusted_deserialization : t
val untrusted_deserialization_risk : t
val untrusted_file : t
val untrusted_file_risk : t
val untrusted_heap_allocation : t
val untrusted_intent_creation : t
val untrusted_url_risk : t
val untrusted_environment_change_risk : t
val untrusted_variable_length_array : t
val user_controlled_sql_risk : t
val vector_invalidation : t
val weak_self_in_noescape_block : t
val wrong_argument_number : t
val unreachable_cost_call : kind:IBase.CostKind.t -> t