diff options
author | Matt Martz <matt@sivel.net> | 2020-02-27 12:46:58 -0600 |
---|---|---|
committer | David Lord <davidism@gmail.com> | 2020-02-27 11:06:35 -0800 |
commit | ba080f51e0d7e20a7870573d1814eeccbc32d99a (patch) | |
tree | 8419c6205666ac03b558b2845c832799cde17d86 | |
parent | 2a70ef218b489276ed015cd9aa9ac53c32cca032 (diff) | |
download | jinja-ba080f51e0d7e20a7870573d1814eeccbc32d99a.tar.gz |
use soft_str in do_wordcount, to trigger undefined
-rw-r--r-- | CHANGES.rst | 3 | ||||
-rw-r--r-- | src/jinja2/filters.py | 2 | ||||
-rw-r--r-- | tests/test_filters.py | 7 |
3 files changed, 10 insertions, 2 deletions
diff --git a/CHANGES.rst b/CHANGES.rst index 651ab430..9635fc55 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -8,7 +8,8 @@ Unreleased - Fix a bug that caused callable objects with ``__getattr__``, like :class:`~unittest.mock.Mock` to be treated as a :func:`contextfunction`. :issue:`1145` - +- Update ``wordcount`` filter to trigger :class:`Undefined` methods + by wrapping the input in :func:`soft_unicode`. :pr:`1160` Version 2.11.1 diff --git a/src/jinja2/filters.py b/src/jinja2/filters.py index 1af7ac88..97415673 100644 --- a/src/jinja2/filters.py +++ b/src/jinja2/filters.py @@ -761,7 +761,7 @@ def do_wordwrap( def do_wordcount(s): """Count the words in that string.""" - return len(_word_re.findall(s)) + return len(_word_re.findall(soft_unicode(s))) def do_int(value, default=0, base=10): diff --git a/tests/test_filters.py b/tests/test_filters.py index 37dde44d..388c3462 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -6,6 +6,8 @@ import pytest from jinja2 import Environment from jinja2 import Markup +from jinja2 import StrictUndefined +from jinja2 import UndefinedError from jinja2._compat import implements_to_string from jinja2._compat import text_type @@ -369,6 +371,11 @@ class TestFilter(object): tmpl = env.from_string('{{ "foo bar baz"|wordcount }}') assert tmpl.render() == "3" + strict_env = Environment(undefined=StrictUndefined) + t = strict_env.from_string("{{ s|wordcount }}") + with pytest.raises(UndefinedError): + t.render() + def test_block(self, env): tmpl = env.from_string("{% filter lower|escape %}<HEHE>{% endfilter %}") assert tmpl.render() == "<hehe>" |