Fix crash when regex is not valid (Fixes olivierkes#989)

Wrap regex preparation in try-catch
Log when there is a problem preparing the regex
This commit is contained in:
Jonathan Pietkiewicz 2022-01-25 14:05:39 -06:00
parent 0182a43b8e
commit 795e1fa9c0

View file

@ -13,6 +13,8 @@ from manuskript.enums import Model
from manuskript.models.flatDataModelWrapper import flatDataModelWrapper
from manuskript.ui.searchMenu import searchMenu
from manuskript.ui.highlighters.searchResultHighlighters.searchResultHighlighter import searchResultHighlighter
import logging
LOGGER = logging.getLogger(__name__)
class search(QWidget, Ui_search):
@ -69,6 +71,8 @@ class search(QWidget, Ui_search):
self.openItem(self.result.currentItem())
def prepareRegex(self, searchText):
rtn = None
try:
import re
flags = re.UNICODE
@ -83,7 +87,14 @@ class search(QWidget, Ui_search):
# Source: https://stackoverflow.com/a/15863102
searchText = r'\b' + searchText + r'\b'
return re.compile(searchText, flags)
rtn = re.compile(searchText, flags)
except re.error as e:
LOGGER.info("Problem preparing regular expression: " + e.msg)
rtn = None
except Exception as e:
LOGGER.info("Problem preparing regular expression")
rtn = None
return rtn
def search(self):
self.result.clear()
@ -91,9 +102,9 @@ class search(QWidget, Ui_search):
searchText = self.searchTextInput.text()
if len(searchText) > 0:
results = list()
searchRegex = self.prepareRegex(searchText)
results = []
if searchRegex is not None:
# Set override cursor
qApp.setOverrideCursor(Qt.WaitCursor)
@ -115,6 +126,9 @@ class search(QWidget, Ui_search):
# Remove override cursor
qApp.restoreOverrideCursor()
else:
# No results to generate if there is a problem with the regex
self.generateResultsLists(list())
def generateResultsLists(self, results):
self.noResultsLabel.setVisible(len(results) == 0)
@ -131,6 +145,7 @@ class search(QWidget, Ui_search):
def leaveEvent(self, event):
self.delegate.mouseLeave()
class listResultDelegate(QStyledItemDelegate):
def __init__(self, parent=None):
QStyledItemDelegate.__init__(self, parent)