From e18682ca74dd0f616d44397fc378e06a52efba08 Mon Sep 17 00:00:00 2001 From: John Maddock Date: Thu, 14 Jun 2012 08:37:53 +0000 Subject: [PATCH] Fix some Valgrind reported issues in regex parsing. [SVN r78940] --- include/boost/regex/v4/basic_regex_parser.hpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/boost/regex/v4/basic_regex_parser.hpp b/include/boost/regex/v4/basic_regex_parser.hpp index 57997047..f77837a9 100644 --- a/include/boost/regex/v4/basic_regex_parser.hpp +++ b/include/boost/regex/v4/basic_regex_parser.hpp @@ -660,6 +660,11 @@ template bool basic_regex_parser::parse_extended_escape() { ++m_position; + if(m_position == m_end) + { + fail(regex_constants::error_escape, m_position - m_base, "Incomplete escape sequence found."); + return false; + } bool negate = false; // in case this is a character class escape: \w \d etc switch(this->m_traits.escape_syntax_type(*m_position)) { @@ -2089,6 +2094,14 @@ insert_recursion: return false; } v = this->m_traits.toi(m_position, m_end, 10); + if(m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } if(*m_position == charT('R')) { if(++m_position == m_end)