diff --git a/include/boost/regex/v4/perl_matcher_common.hpp b/include/boost/regex/v4/perl_matcher_common.hpp index 7974e7483..e1d417c24 100644 --- a/include/boost/regex/v4/perl_matcher_common.hpp +++ b/include/boost/regex/v4/perl_matcher_common.hpp @@ -110,9 +110,14 @@ void perl_matcher::estimate_max_state_count(std std::ptrdiff_t dist = boost::BOOST_REGEX_DETAIL_NS::distance(base, last); if(dist == 0) dist = 1; - std::ptrdiff_t states = re.size(); + std::size_t states = re.size(); if(states == 0) states = 1; + else if((std::numeric_limits::max)() / states < states) + { + max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits::max)() - 2); + return; + } states *= states; if((std::numeric_limits::max)() / dist < states) {