package mopsa
- Utility print functions
- Checks for invalid memory access
- Division by zero
- Integer overflow
- Invalid shift
- Invalid pointer comparison
- Invalid pointer subtraction
- Double free
- Insufficient variadic arguments
- Insufficient format arguments
- Invalid type of format argument
- Float errors
- Unfreed/Unreachable memory
- Invalid array size
Install
dune-project
Dependency
Authors
Maintainers
Sources
md5=9f673f79708b44a7effb3b6bb3618d2c
sha512=cb91cb428e43a22f1abbcb8219710d0c10a5b3756d0da392d4084b3b3a6157350776c596983e63def344f617d39964e91f244f60c07958695ee5c8c809a9f0f4
doc/c_common/C_common/Common/Alarms/index.html
Module Common.AlarmsSource
Alarms for C runtime errors
Utility print functions
***************************
val pp_const_or_interval :
Stdlib.Format.formatter ->
Universal.Numeric.Common.I.t Mopsa.Bot.with_bot ->
unitPrint an interval depending on its cardinal
val pp_const_or_interval_not_eq :
Stdlib.Format.formatter ->
(Universal.Numeric.Common.I.B.t * Universal.Numeric.Common.I.B.t)
Mopsa.Bot.with_bot ->
unitPrint the not-member operator of an interval, depending on its cardinal
val pp_interval_plurial :
Stdlib.Format.formatter ->
(Universal.Numeric.Common.I.B.t * Universal.Numeric.Common.I.B.t)
Mopsa.Bot.with_bot ->
unitval pp_interval_cardinal_plurial :
Stdlib.Format.formatter ->
(Universal.Numeric.Common.I.B.t * Universal.Numeric.Common.I.B.t)
Mopsa.Bot.with_bot ->
unitChecks for invalid memory access
************************************
type Mopsa.alarm_kind += | A_c_null_deref of Mopsa.expr(*pointer
*)| A_c_invalid_deref of Mopsa.expr| A_c_out_of_bound of C_common__.Base.base * Universal.Numeric.Common.int_itv * Universal.Numeric.Common.int_itv * Universal.Numeric.Common.int_itv(*accessed bytes
*)| A_c_opaque_access of C_common__.Base.base * int * Universal.Numeric.Common.int_itv * Universal.Numeric.Common.int_itv(*accessed bytes
*)| A_c_dangling_pointer_deref of Mopsa.expr * Mopsa.var * Mopsa.range(*return location
*)| A_c_use_after_free of Mopsa.expr * Mopsa.range(*deallocation site
*)| A_c_modify_read_only of Mopsa.expr * C_common__.Base.base(*pointed base
*)
val raise_c_null_deref_alarm :
?bottom:bool ->
Mopsa.expr ->
?range:Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval raise_c_invalid_deref_alarm :
?bottom:bool ->
Mopsa.expr ->
?range:Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval raise_c_out_bound_alarm :
?bottom:bool ->
C_common__.Base.base ->
Ast.Expr.expr ->
Ast.Expr.expr ->
Mopsa.typ ->
Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Core.Flow.flow ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval raise_c_opaque_access :
?bottom:bool ->
C_common__.Base.base ->
int ->
Ast.Expr.expr ->
Mopsa.typ ->
Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Core.Flow.flow ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval raise_c_dangling_deref_alarm :
?bottom:bool ->
Mopsa.expr ->
Mopsa.var ->
Mopsa.range ->
?range:Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval raise_c_use_after_free_alarm :
?bottom:bool ->
Mopsa.expr ->
Mopsa.range ->
?range:Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval raise_c_modify_read_only_alarm :
?bottom:bool ->
Mopsa.expr ->
C_common__.Base.base ->
('a, 'b) Mopsa.man ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval safe_c_memory_access_check :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowval unreachable_c_memory_access_check :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowval raise_c_memory_access_warning :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowDivision by zero
********************
val raise_c_divide_by_zero_alarm :
?bottom:bool ->
Mopsa.expr ->
Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval safe_c_divide_by_zero_check :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowval unreachable_c_divide_by_zero_check :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowInteger overflow
********************
type Mopsa.alarm_kind += | A_c_integer_overflow of Mopsa.expr * Universal.Numeric.Common.int_itv * Mopsa.typ(*overflowed type
*)| A_c_pointer_to_integer_overflow of Mopsa.expr * Mopsa.typ(*cast type
*)
val raise_c_integer_overflow_alarm :
?warning:bool ->
Mopsa.expr ->
Ast.Expr.expr ->
Mopsa.typ ->
Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Core.Flow.flow ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval raise_c_pointer_to_integer_overflow_alarm :
?warning:bool ->
Mopsa.expr ->
Mopsa.typ ->
Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval safe_c_integer_overflow_check :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowval unreachable_c_integer_overflow_check :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowInvalid shift
*****************
type Mopsa.alarm_kind += | A_c_invalid_shift of Mopsa.expr * Mopsa.expr * Universal.Numeric.Common.int_itv(*shift value
*)
val raise_c_invalid_shift_alarm :
?bottom:bool ->
Mopsa.expr ->
Mopsa.expr ->
Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Core.Flow.flow ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval safe_c_shift_check :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowval unreachable_c_shift_check :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowInvalid pointer comparison
******************************
type Mopsa.alarm_kind += | A_c_invalid_pointer_compare of Mopsa.expr * Mopsa.expr(*second pointer
*)
val raise_c_invalid_pointer_compare :
?bottom:bool ->
Mopsa.expr ->
Mopsa.expr ->
Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval safe_c_pointer_compare :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowInvalid pointer subtraction
*******************************
type Mopsa.alarm_kind += | A_c_invalid_pointer_sub of Mopsa.expr * Mopsa.expr(*second pointer
*)
val raise_c_invalid_pointer_sub :
?bottom:bool ->
Mopsa.expr ->
Mopsa.expr ->
Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval safe_c_pointer_sub :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowDouble free
***************
val raise_c_double_free_alarm :
?bottom:bool ->
Mopsa.expr ->
Mopsa.range ->
?range:Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowInsufficient variadic arguments
***********************************
type Mopsa.alarm_kind += | A_c_insufficient_variadic_args of Mopsa.var * Universal.Numeric.Common.int_itv * Universal.Numeric.Common.int_itv(*number of passed arguments
*)
val raise_c_insufficient_variadic_args :
?bottom:bool ->
Mopsa.var ->
Ast.Expr.expr ->
'a list ->
Mopsa_utils.Location.range ->
('b, 'c) Mopsa.man ->
'b Core.Flow.flow ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowval safe_variadic_args_number :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowInsufficient format arguments
*********************************
val raise_c_insufficient_format_args_alarm :
int ->
int ->
Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval raise_c_insufficient_format_args_warning :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowval safe_c_format_args_number :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowInvalid type of format argument
***********************************
type Mopsa.alarm_kind += | A_c_invalid_format_arg_type of Mopsa.expr * Mopsa.typ(*expected type
*)
val raise_c_invalid_format_arg_type_alarm :
Mopsa.expr ->
Mopsa.typ ->
('a, 'b) Mopsa.man ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval raise_c_invalid_format_arg_type_warning :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowval safe_c_format_arg_type :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowFloat errors
****************
type Mopsa.alarm_kind += | A_c_invalid_float_class of Universal.Numeric.Common.float_itv * string(*expected class
*)
val raise_c_invalid_float_class_alarm :
?bottom:bool ->
Ast.Expr.expr ->
string ->
Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Core.Flow.flow ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowThere are five IEEE 754 exceptions. We only singal include invalid operation, division by zero and overflow. We don't care about underflow (rounding to 0) and inexact (rounding).
type Mopsa.alarm_kind += | A_c_float_invalid_operation of Mopsa.expr * Universal.Numeric.Common.float_itv * Mopsa.typ(*destination type
*)| A_c_float_division_by_zero of Mopsa.expr * Universal.Numeric.Common.float_itv(*denominator interval
*)| A_c_float_overflow of Mopsa.expr * Universal.Numeric.Common.float_itv * Mopsa.typ(*type
*)
val raise_c_float_invalid_operation_alarm :
?bottom:bool ->
?warning:bool ->
Mopsa.expr ->
Universal.Numeric.Common.float_itv ->
Mopsa.typ ->
Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval raise_c_float_division_by_zero_alarm :
?bottom:bool ->
?warning:bool ->
Mopsa.expr ->
Universal.Numeric.Common.float_itv ->
Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval raise_c_float_overflow_alarm :
?bottom:bool ->
?warning:bool ->
Mopsa.expr ->
Universal.Numeric.Common.float_itv ->
Mopsa.typ ->
Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval safe_c_float_invalid_operation_check :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowval safe_c_float_division_by_zero_check :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowval safe_c_float_overflow_check :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowUnfreed/Unreachable memory
****************
val raise_c_unreachable_memory :
Mopsa.addr ->
Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowInvalid array size
**********************
val raise_c_negative_array_size_alarm :
?bottom:bool ->
Mopsa.expr ->
Mopsa_utils.Location.range ->
('a, 'b) Mopsa.man ->
'a Mopsa.Flow.flow ->
'a Mopsa.Flow.flowval safe_c_negative_array_size_check :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flowval unreachable_c_negative_array_size_check :
Mopsa_utils.Location.range ->
'a ->
'b Mopsa.Flow.flow ->
'b Mopsa.Flow.flow- Utility print functions
- Checks for invalid memory access
- Division by zero
- Integer overflow
- Invalid shift
- Invalid pointer comparison
- Invalid pointer subtraction
- Double free
- Insufficient variadic arguments
- Insufficient format arguments
- Invalid type of format argument
- Float errors
- Unfreed/Unreachable memory
- Invalid array size