Skip to content

Commit d884de5

Browse files
committed
pointer checks are now fatal
The checks for * pointer dereferences * pointer relations * pointer arithmetic are designed to identify cases of undefined behavior. They must be fatal.
1 parent 1657d97 commit d884de5

File tree

4 files changed

+13
-13
lines changed

4 files changed

+13
-13
lines changed

regression/cbmc-primitives/exists_memory_checks/invalid_index_range.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ invalid_index_range.c
44
^EXIT=10$
55
^SIGNAL=0$
66
^VERIFICATION FAILED$
7-
\[main\.assertion\.1\] line 9 assertion __CPROVER_exists \{ int i; \(0 <= i && i < 20\) && a\[i\] == i \*i \}: SUCCESS
7+
^\[main\.assertion\.1\] line 9 assertion __CPROVER_exists \{ int i; \(0 <= i && i < 20\) && a\[i\] == i \*i \}: UNKNOWN$
88
line 9 dereference failure: pointer outside object bounds in a\[(\(signed (long|long long) int\))?i\]: FAILURE
99
--
1010
--

regression/cbmc-primitives/exists_memory_checks/smt_missing_range_check.desc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ smt_missing_range_check.c
44
^EXIT=10$
55
^SIGNAL=0$
66
^VERIFICATION FAILED$
7-
\[main\.assertion\.1\] line \d assertion __CPROVER_exists \{ int i; a\[i\] == i \*i \}: SUCCESS
8-
\[main\.pointer_dereference\.11\] line \d dereference failure: pointer outside object bounds in a\[(\(signed (long|long long) int\))?i\]: FAILURE
7+
^\[main\.assertion\.1\] line \d assertion __CPROVER_exists \{ int i; a\[i\] == i \*i \}: UNKNOWN$
8+
^\[main\.pointer_dereference\.11\] line \d dereference failure: pointer outside object bounds in a\[(\(signed (long|long long) int\))?i\]: FAILURE$
99
--
1010
--
1111
Check that memory checks fail for pointer dereferences inside an existential

regression/cbmc-primitives/forall_6231_3/test_malloc_less_than_bound.desc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ test_malloc_less_than_bound.c
33
--no-malloc-may-fail --pointer-check
44
^EXIT=10$
55
^SIGNAL=0$
6-
\[main\.assertion\.2\] line \d+ assertion __CPROVER_forall \{ int i ; \(0 <= i && i < 10\) ==> \*\(a\+i\) == \*\(a\+i\) \}: SUCCESS
7-
\[main\.pointer_dereference\.7\] line \d+ dereference failure: pointer NULL in a\[(\(signed (long|long long) int\))?i\]: SUCCESS
8-
\[main\.pointer_dereference\.8\] line \d+ dereference failure: pointer invalid in a\[(\(signed (long|long long) int\))?i\]: SUCCESS
9-
\[main\.pointer_dereference\.9\] line \d+ dereference failure: deallocated dynamic object in a\[(\(signed (long|long long) int\))?i\]: SUCCESS
10-
\[main\.pointer_dereference\.10\] line \d+ dereference failure: dead object in a\[(\(signed (long|long long) int\))?i\]: SUCCESS
11-
\[main\.pointer_dereference\.11\] line \d+ dereference failure: pointer outside object bounds in a\[(\(signed (long|long long) int\))?i\]: FAILURE
12-
\[main\.pointer_dereference\.12\] line \d+ dereference failure: invalid integer address in a\[(\(signed (long|long long) int\))?i\]: SUCCESS
6+
^\[main\.assertion\.2\] line \d+ assertion __CPROVER_forall \{ int i ; \(0 <= i && i < 10\) ==> \*\(a\+i\) == \*\(a\+i\) \}: UNKNOWN$
7+
^\[main\.pointer_dereference\.7\] line \d+ dereference failure: pointer NULL in a\[(\(signed (long|long long) int\))?i\]: SUCCESS$
8+
^\[main\.pointer_dereference\.8\] line \d+ dereference failure: pointer invalid in a\[(\(signed (long|long long) int\))?i\]: SUCCESS$
9+
^\[main\.pointer_dereference\.9\] line \d+ dereference failure: deallocated dynamic object in a\[(\(signed (long|long long) int\))?i\]: SUCCESS$
10+
^\[main\.pointer_dereference\.10\] line \d+ dereference failure: dead object in a\[(\(signed (long|long long) int\))?i\]: SUCCESS$
11+
^\[main\.pointer_dereference\.11\] line \d+ dereference failure: pointer outside object bounds in a\[(\(signed (long|long long) int\))?i\]: FAILURE$
12+
^\[main\.pointer_dereference\.12\] line \d+ dereference failure: invalid integer address in a\[(\(signed (long|long long) int\))?i\]: UNKNOWN$
1313
^VERIFICATION FAILED$
1414
--
1515
--

src/ansi-c/goto-conversion/goto_check_c.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1368,7 +1368,7 @@ void goto_check_ct::pointer_rel_check(
13681368
c.assertion,
13691369
"pointer relation: " + c.description,
13701370
"pointer arithmetic",
1371-
false, // fatal
1371+
true, // fatal
13721372
expr.find_source_location(),
13731373
pointer,
13741374
guard);
@@ -1427,7 +1427,7 @@ void goto_check_ct::pointer_overflow_check(
14271427
c.assertion,
14281428
"pointer arithmetic: " + c.description,
14291429
"pointer arithmetic",
1430-
false, // fatal
1430+
true, // fatal
14311431
expr.find_source_location(),
14321432
expr,
14331433
guard);
@@ -1469,7 +1469,7 @@ void goto_check_ct::pointer_validity_check(
14691469
c.assertion,
14701470
"dereference failure: " + c.description,
14711471
"pointer dereference",
1472-
false, // fatal
1472+
true, // fatal
14731473
src_expr.find_source_location(),
14741474
src_expr,
14751475
guard);

0 commit comments

Comments
 (0)