mirror of
https://github.com/Z3Prover/z3
synced 2025-05-11 09:44:43 +00:00
Z3str3: safety checks for substr and propagate (#4528)
* z3str3: handle str.substr arguments missing arith values in model construction safely * z3str3: reset propagation vectors on scope pop
This commit is contained in:
parent
7f3bdea0d5
commit
b0633ecc86
2 changed files with 19 additions and 6 deletions
|
@ -686,8 +686,14 @@ namespace smt {
|
|||
rational pos, len;
|
||||
bool pos_exists = v.get_value(arg1, pos);
|
||||
bool len_exists = v.get_value(arg2, len);
|
||||
ENSURE(pos_exists);
|
||||
ENSURE(len_exists);
|
||||
if (!pos_exists) {
|
||||
cex = expr_ref(m.mk_or(m_autil.mk_ge(arg1, mk_int(0)), m_autil.mk_le(arg1, mk_int(0))), m);
|
||||
return false;
|
||||
}
|
||||
if (!len_exists) {
|
||||
cex = expr_ref(m.mk_or(m_autil.mk_ge(arg2, mk_int(0)), m_autil.mk_le(arg2, mk_int(0))), m);
|
||||
return false;
|
||||
}
|
||||
TRACE("str_fl", tout << "reduce substring term: base=" << mk_pp(term, m) << " (length="<<base_chars.size()<<"), pos=" << pos.to_string() << ", len=" << len.to_string() << std::endl;);
|
||||
// Case 1: pos < 0 or pos >= strlen(base) or len < 0
|
||||
// ==> (Substr ...) = ""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue