diff options
author | Ryan Roden-Corrent <ryan@rcorre.net> | 2020-12-28 18:20:26 -0500 |
---|---|---|
committer | Ryan Roden-Corrent <ryan@rcorre.net> | 2020-12-28 18:20:26 -0500 |
commit | faa4d519301e5399dd7ef0fef344d28845ccd1d4 (patch) | |
tree | 38695f3b6f1b6b3096f2e1ac663692919002d077 | |
parent | 4123cda88a7de7c200072fa78cadfd88b3b450e4 (diff) | |
download | qutebrowser-faa4d519301e5399dd7ef0fef344d28845ccd1d4.tar.gz qutebrowser-faa4d519301e5399dd7ef0fef344d28845ccd1d4.zip |
Trim long patterns rather than clearing them.
Fixes #5973.
-rw-r--r-- | qutebrowser/completion/models/listcategory.py | 6 | ||||
-rw-r--r-- | tests/unit/completion/test_listcategory.py | 7 |
2 files changed, 8 insertions, 5 deletions
diff --git a/qutebrowser/completion/models/listcategory.py b/qutebrowser/completion/models/listcategory.py index 307e1ec33..fbe742ddb 100644 --- a/qutebrowser/completion/models/listcategory.py +++ b/qutebrowser/completion/models/listcategory.py @@ -59,13 +59,13 @@ class ListCategory(QSortFilterProxyModel): Args: val: The value to set. """ + if len(val) > 5000: # avoid crash on huge search terms (#5973) + log.completion.warning(f"Trimming {len(val)}-char pattern to 5000") + val = val[:5000] self._pattern = val val = re.sub(r' +', r' ', val) # See #1919 val = re.escape(val) val = val.replace(r'\ ', '.*') - if len(val) > 5000: # avoid crash on huge search terms (#5973) - log.completion.warning(f"Pattern too long ({len(val)})") - val = "^$" rx = QRegularExpression(val, QRegularExpression.CaseInsensitiveOption) qtutils.ensure_valid(rx) self.setFilterRegularExpression(rx) diff --git a/tests/unit/completion/test_listcategory.py b/tests/unit/completion/test_listcategory.py index 3a4fa895d..b00ab595e 100644 --- a/tests/unit/completion/test_listcategory.py +++ b/tests/unit/completion/test_listcategory.py @@ -60,7 +60,10 @@ def test_set_pattern(pattern, before, after, after_nosort, model_validator): model_validator.validate(after_nosort) -def test_long_pattern(caplog): +def test_long_pattern(caplog, model_validator): """Validate that a huge pattern doesn't crash (#5973).""" with caplog.at_level(logging.WARNING): - listcategory.ListCategory('Foo', []).set_pattern('a' * 50000) + cat = listcategory.ListCategory('Foo', [('a' * 5000, '')]) + model_validator.set_model(cat) + cat.set_pattern('a' * 50000) + model_validator.validate([('a' * 5000, '')]) |