Skip to content

Commit ea2876b

Browse files
committed
Avoid invalid shift caused by excessive object bits
The unit test presented an invalid system configuration that would provide zero offset bits. Also, guard against such set-ups by an additional INVARIANT.
1 parent a2c47c4 commit ea2876b

File tree

2 files changed

+5
-1
lines changed

2 files changed

+5
-1
lines changed

src/solvers/smt2_incremental/convert_expr_to_smt.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
#include <algorithm>
2424
#include <functional>
25+
#include <climits>
2526
#include <numeric>
2627
#include <stack>
2728

@@ -877,6 +878,9 @@ static smt_termt convert_expr_to_smt(
877878
"Objects should be tracked before converting their address to SMT terms");
878879
const std::size_t object_id = object->second.unique_id;
879880
const std::size_t object_bits = config.bv_encoding.object_bits;
881+
INVARIANT(
882+
object_bits < sizeof(std::size_t) * CHAR_BIT,
883+
"Object bits must too large for this platform");
880884
const std::size_t max_objects = std::size_t(1) << object_bits;
881885
if(object_id >= max_objects)
882886
{

unit/solvers/smt2_incremental/convert_expr_to_smt.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1550,7 +1550,7 @@ TEST_CASE(
15501550
}
15511551
SECTION("Pointer should be wide enough to encode offset")
15521552
{
1553-
config.bv_encoding.object_bits = 64;
1553+
config.bv_encoding.object_bits = 63;
15541554
const address_of_exprt address_of_foo{foo};
15551555
track_expression_objects(address_of_foo, ns, test.object_map);
15561556
test.object_map.at(foo).unique_id = 256;

0 commit comments

Comments
 (0)