Fix potential overflow in max_state_count calculation.

Fixes: https://svn.boost.org/trac10/ticket/13036.
This commit is contained in:
jzmaddock
2017-07-31 19:18:10 +01:00
parent d97bcfb5dd
commit bc9b25b5d3

View File

@ -113,6 +113,11 @@ void perl_matcher<BidiIterator, Allocator, traits>::estimate_max_state_count(std
std::ptrdiff_t states = re.size();
if(states == 0)
states = 1;
if ((std::numeric_limits<std::ptrdiff_t>::max)() / states < states)
{
max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits<std::ptrdiff_t>::max)() - 2);
return;
}
states *= states;
if((std::numeric_limits<std::ptrdiff_t>::max)() / dist < states)
{