Index: LogDlg.cpp
===================================================================
--- LogDlg.cpp	(revision 10489)
+++ LogDlg.cpp	(working copy)
@@ -84,6 +84,17 @@
 	ID_GETMERGELOGS
 };
 
+bool ValidateRegexp(LPCTSTR regexp_str, rpattern& pat, bool bMatchCase = false)
+{
+	try
+	{
+		pat.init(regexp_str, MULTILINE | (bMatchCase ? NOFLAGS : NOCASE));
+		return true;
+	}
+	catch (bad_alloc) {}
+	catch (bad_regexpr) {}
+	return false;
+}
 
 IMPLEMENT_DYNAMIC(CLogDlg, CResizableStandAloneDialog)
 CLogDlg::CLogDlg(CWnd* pParent /*=NULL*/)
@@ -1211,15 +1222,8 @@
         CString FindText = m_pFindDialog->GetFindString();
         bool bMatchCase = (m_pFindDialog->MatchCase() == TRUE);
 		bool bFound = false;
-		bool bRegex = false;
 		rpattern pat;
-		try
-		{
-			pat.init( (LPCTSTR)FindText, MULTILINE | (bMatchCase ? NOFLAGS : NOCASE) );
-			bRegex = true;
-		}
-		catch (bad_alloc) {}
-		catch (bad_regexpr) {}
+		bool bRegex = ValidateRegexp(FindText, pat, bMatchCase);
 
 		int i;
 		for (i = this->m_nSearchIndex; i<m_arShownList.GetCount()&&!bFound; i++)
@@ -2435,30 +2439,15 @@
 {
 	if (!m_bFilterWithRegex)
 		return true;
-	bool bRegex = false;
 	rpattern pat;
-	try
-	{
-		pat.init(string, MULTILINE | NOCASE);
-		bRegex = true;
-	}
-	catch (bad_alloc) {}
-	catch (bad_regexpr) {}
-	return bRegex;
+	return ValidateRegexp(string, pat);
 }
 
 void CLogDlg::RecalculateShownList(CPtrArray * pShownlist)
 {
 	pShownlist->RemoveAll();
-	bool bRegex = false;
 	rpattern pat;
-	try
-	{
-		pat.init( (LPCTSTR)m_sFilterText, MULTILINE | NOCASE );
-		bRegex = true;
-	}
-	catch (bad_alloc) {}
-	catch (bad_regexpr) {}
+	bool bRegex = ValidateRegexp(m_sFilterText, pat);
 
 	CString sRev;
 	for (DWORD i=0; i<m_logEntries.size(); ++i)
