diff options
author | Florian Bruhin <me@the-compiler.org> | 2020-12-30 13:51:39 +0100 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2020-12-30 13:51:39 +0100 |
commit | efa8916faaaf6c6e7ffdb2bf8affabba8e7b753f (patch) | |
tree | 7b16fd0896eea9e4534c72d502a68f00a4adc58d | |
parent | 1723278aae786b9511ec7e487e736d2d9747beda (diff) | |
parent | ba1bbd555c6869215c56490c595f20259c311744 (diff) | |
download | qutebrowser-efa8916faaaf6c6e7ffdb2bf8affabba8e7b753f.tar.gz qutebrowser-efa8916faaaf6c6e7ffdb2bf8affabba8e7b753f.zip |
Merge remote-tracking branch 'origin/pr/5992'
-rw-r--r-- | qutebrowser/completion/models/listcategory.py | 3 | ||||
-rw-r--r-- | tests/unit/completion/test_listcategory.py | 11 |
2 files changed, 14 insertions, 0 deletions
diff --git a/qutebrowser/completion/models/listcategory.py b/qutebrowser/completion/models/listcategory.py index d4193b6d8..fbe742ddb 100644 --- a/qutebrowser/completion/models/listcategory.py +++ b/qutebrowser/completion/models/listcategory.py @@ -59,6 +59,9 @@ 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) diff --git a/tests/unit/completion/test_listcategory.py b/tests/unit/completion/test_listcategory.py index 1a54ac814..d2eeaeb24 100644 --- a/tests/unit/completion/test_listcategory.py +++ b/tests/unit/completion/test_listcategory.py @@ -19,6 +19,8 @@ """Tests for CompletionFilterModel.""" +import logging + import pytest from qutebrowser.completion.models import listcategory @@ -57,3 +59,12 @@ def test_set_pattern(pattern, before, after, after_nosort, model_validator): model_validator.set_model(cat) cat.set_pattern(pattern) model_validator.validate(after_nosort) + + +def test_long_pattern(caplog, model_validator): + """Validate that a huge pattern doesn't crash (#5973).""" + with caplog.at_level(logging.WARNING): + cat = listcategory.ListCategory('Foo', [('a' * 5000, '')]) + model_validator.set_model(cat) + cat.set_pattern('a' * 50000) + model_validator.validate([('a' * 5000, '')]) |