summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2020-12-30 13:51:39 +0100
committerFlorian Bruhin <me@the-compiler.org>2020-12-30 13:51:39 +0100
commitefa8916faaaf6c6e7ffdb2bf8affabba8e7b753f (patch)
tree7b16fd0896eea9e4534c72d502a68f00a4adc58d
parent1723278aae786b9511ec7e487e736d2d9747beda (diff)
parentba1bbd555c6869215c56490c595f20259c311744 (diff)
downloadqutebrowser-efa8916faaaf6c6e7ffdb2bf8affabba8e7b753f.tar.gz
qutebrowser-efa8916faaaf6c6e7ffdb2bf8affabba8e7b753f.zip
Merge remote-tracking branch 'origin/pr/5992'
-rw-r--r--qutebrowser/completion/models/listcategory.py3
-rw-r--r--tests/unit/completion/test_listcategory.py11
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, '')])