C++ API: Fix OOB read in unit test (#2774)
authorAndres Noetzli <andres.noetzli@gmail.com>
Fri, 4 Jan 2019 21:26:08 +0000 (13:26 -0800)
committerAina Niemetz <aina.niemetz@gmail.com>
Fri, 4 Jan 2019 21:26:08 +0000 (13:26 -0800)
There were two typos in the unit tests that caused OOB accesses. Instead
of doing `d_solver.mkConst(CONST_BITVECTOR, std::string("101"), 6)`, the
closing parenthesis was in the wrong place resulting in
`std::string("101", 6)`. The second argument to `std::string(const
char*, size_t)` says how many characters to copy and results in
undefined behavior if the number is greater than the length of the
string, thus the OOB access. The commit fixes the typo and removes one
of the tests because it should not actually fail (16 is an accepted
base).

test/unit/api/solver_black.h

index 76388d48f687402fc612addc5916d8dc822578c0..40f641cbdf5b4d4f61f1369cb0428eaae5d85bbb 100644 (file)
@@ -347,9 +347,7 @@ void SolverBlack::testMkConst()
                    CVC4ApiException&);
   TS_ASSERT_THROWS(d_solver.mkConst(CONST_BITVECTOR, std::string("")),
                    CVC4ApiException&);
-  TS_ASSERT_THROWS(d_solver.mkConst(CONST_BITVECTOR, std::string("101", 6)),
-                   CVC4ApiException&);
-  TS_ASSERT_THROWS(d_solver.mkConst(CONST_BITVECTOR, std::string("102", 16)),
+  TS_ASSERT_THROWS(d_solver.mkConst(CONST_BITVECTOR, std::string("101"), 6),
                    CVC4ApiException&);
 
   // mkConst(Kind kind, int32_t arg) const