Pulselib.PulseDiagnostic
module Attribute = PulseAttribute
module CallEvent = PulseCallEvent
module ConfigName = OpenSource.FbPulseConfigName
module DecompilerExpr = PulseDecompilerExpr
module Invalidation = PulseInvalidation
module TaintItem = PulseTaintItem
module Trace = PulseTrace
module TransitiveInfo = PulseTransitiveInfo
module ValueHistory = PulseValueHistory
type calling_context = (CallEvent.t * IBase.Location.t) list
val compare_calling_context : calling_context -> calling_context -> int
val equal_calling_context : calling_context -> calling_context -> bool
type access_to_invalid_address = {
calling_context : calling_context;
the list of function calls leading to the issue being realised, in outermost-to-innermost order, which is an additional common prefix to the traces in the record
*)invalid_address : DecompilerExpr.t;
invalidation : Invalidation.t;
invalidation_trace : Trace.t;
assuming we are in the calling context, the trace leads to invalidation
without further assumptions
access_trace : Trace.t;
assuming we are in the calling context, the trace leads to an access to the value invalidated in invalidation_trace
without further assumptions
must_be_valid_reason : Invalidation.must_be_valid_reason option;
}
val compare_access_to_invalid_address :
access_to_invalid_address ->
access_to_invalid_address ->
int
val equal_access_to_invalid_address :
access_to_invalid_address ->
access_to_invalid_address ->
bool
val yojson_of_access_to_invalid_address :
access_to_invalid_address ->
Ppx_yojson_conv_lib.Yojson.Safe.t
module ErlangError : sig ... end
module ReadUninitialized : sig ... end
type retain_cycle_data = {
expr : DecompilerExpr.t;
location : IBase.Location.t option;
trace : Trace.t option;
}
val equal_retain_cycle_data : retain_cycle_data -> retain_cycle_data -> bool
type t =
| AccessToInvalidAddress of access_to_invalid_address
| ConfigUsage of {
pname : IR.Procname.t;
config : ConfigName.t;
branch_location : IBase.Location.t;
location : IBase.Location.t;
trace : Trace.t;
}
| ConstRefableParameter of {
param : IR.Var.t;
typ : IR.Typ.t;
location : IBase.Location.t;
}
| CSharpResourceLeak of {
class_name : IR.CSharpClassName.t;
allocation_trace : Trace.t;
location : IBase.Location.t;
}
| DynamicTypeMismatch of {
location : IBase.Location.t;
}
| ErlangError of ErlangError.t
| TransitiveAccess of {
tag : string;
description : string;
call_trace : Trace.t;
transitive_callees : TransitiveInfo.Callees.t;
transitive_missed_captures : IR.Typ.Name.Set.t;
}
| JavaResourceLeak of {
class_name : IR.JavaClassName.t;
allocation_trace : Trace.t;
location : IBase.Location.t;
}
| HackCannotInstantiateAbstractClass of {
type_name : IR.Typ.Name.t;
trace : Trace.t;
}
| HackUnawaitedAwaitable of {
allocation_trace : Trace.t;
location : IBase.Location.t;
}
| MemoryLeak of {
allocator : Attribute.allocator;
allocation_trace : Trace.t;
location : IBase.Location.t;
}
| MutualRecursionCycle of {
cycle : PulseMutualRecursion.t;
location : IBase.Location.t;
}
| ReadUninitialized of ReadUninitialized.t
| RetainCycle of {
values : retain_cycle_data list;
location : IBase.Location.t;
unknown_access_type : bool;
}
| StackVariableAddressEscape of {
variable : IR.Var.t;
history : ValueHistory.t;
location : IBase.Location.t;
}
| TaintFlow of {
expr : DecompilerExpr.t;
source : TaintItem.t * ValueHistory.t;
sink : TaintItem.t * Trace.t;
location : IBase.Location.t;
flow_kind : flow_kind;
policy_description : string;
policy_id : int;
policy_privacy_effect : string option;
}
| UnnecessaryCopy of {
copied_into : PulseAttribute.CopiedInto.t;
source_typ : IR.Typ.t option;
source_opt : DecompilerExpr.source_expr option;
location : IBase.Location.t;
copied_location : (IR.Procname.t * IBase.Location.t) option;
location_instantiated : IBase.Location.t option;
from : PulseAttribute.CopyOrigin.t;
}
an error to report to the user
include Ppx_compare_lib.Equal.S with type t := t
val equal : t Base__Ppx_compare_lib.equal
val pp : F.formatter -> t -> unit
val aborts_execution : t -> bool
whether the presence of an error should abort the execution
val get_message_and_suggestion : t -> string * string option
val get_location : t -> IBase.Location.t
val get_location_instantiated : t -> IBase.Location.t option
val get_issue_type : latent:bool -> t -> IBase.IssueType.t
val get_trace : t -> Absint.Errlog.loc_trace