Skip to content

Commit be4de16

Browse files
Avoid evaluting strings exceeding maximum length
Try to evaluate long strings may make the solver run out of memory just by allocating an array of that size.
1 parent 069658b commit be4de16

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

src/solvers/refinement/string_refinement.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2285,10 +2285,15 @@ exprt string_refinementt::get(const exprt &expr) const
22852285
array_string_exprt &arr = to_array_string_expr(ecopy);
22862286
arr.length() = generator.array_pool.get_length(arr);
22872287

2288-
if(
2289-
const auto from_dependencies =
2290-
dependencies.eval(arr, [&](const exprt &expr) { return get(expr); }))
2291-
return *from_dependencies;
2288+
if(const auto length = numeric_cast<std::size_t>(arr.length()))
2289+
{
2290+
if(length <= generator.max_string_length)
2291+
{
2292+
if(const auto from_dependencies =
2293+
dependencies.eval(arr, [&](const exprt &expr) { return get(expr); }))
2294+
return *from_dependencies;
2295+
}
2296+
}
22922297

22932298
const auto arr_model_opt =
22942299
get_array(super_get, ns, generator.max_string_length, debug(), arr);

0 commit comments

Comments
 (0)