regex filter: fix assertion fail if regex wasn't properly compiled

This commit is contained in:
Andrzej Rybczak
2012-09-14 00:59:00 +02:00
parent 1891c1c050
commit e2889bfefd
3 changed files with 9 additions and 1 deletions

View File

@@ -35,7 +35,7 @@ template <typename T> struct RegexFilter
bool operator()(const Item &item) { bool operator()(const Item &item) {
if (m_rx.regex().empty()) if (m_rx.regex().empty())
return true; return true;
if (!m_rx.error().empty()) if (!m_rx.compiled() || !m_rx.error().empty())
return false; return false;
return m_filter(m_rx, item.value()); return m_filter(m_rx, item.value());
} }

View File

@@ -52,6 +52,11 @@ const std::string &Regex::error() const
return m_error; return m_error;
} }
bool Regex::compiled() const
{
return m_compiled;
}
bool Regex::compile() bool Regex::compile()
{ {
if (m_compiled) if (m_compiled)

View File

@@ -37,6 +37,9 @@ struct Regex
/// @return compilation error (if there was any) /// @return compilation error (if there was any)
const std::string &error() const; const std::string &error() const;
/// @return true if regular expression is compiled, false otherwise
bool compiled() const;
/// compiles regular expression /// compiles regular expression
/// @result true if compilation was successful, false otherwise /// @result true if compilation was successful, false otherwise
bool compile(); bool compile();