diff --git a/app/__init__.py b/app/__init__.py index 726e2a38b..89eb1f55c 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -30,6 +30,7 @@ from notifications_python_client.errors import HTTPError from notifications_utils import logging, request_id, formatters from notifications_utils.clients.statsd.statsd_client import StatsdClient from notifications_utils.recipients import validate_phone_number, InvalidPhoneError +from notifications_utils.field import escape_html from pygments import highlight from pygments.formatters.html import HtmlFormatter from pygments.lexers.javascript import JavascriptLexer @@ -363,17 +364,17 @@ def formatted_list( if prefix_plural: prefix_plural += ' ' - items = list(items) + items = list(map(escape_html, items)) if len(items) == 1: - return '{prefix}{before_each}{items[0]}{after_each}'.format(**locals()) + return Markup('{prefix}{before_each}{items[0]}{after_each}'.format(**locals())) elif items: formatted_items = ['{}{}{}'.format(before_each, item, after_each) for item in items] first_items = separator.join(formatted_items[:-1]) last_item = formatted_items[-1] - return ( + return Markup(( '{prefix_plural}{first_items} {conjunction} {last_item}' - ).format(**locals()) + ).format(**locals())) def nl2br(value): diff --git a/tests/app/test_jinja_filters.py b/tests/app/test_jinja_filters.py index 2d24fc00e..39e337761 100644 --- a/tests/app/test_jinja_filters.py +++ b/tests/app/test_jinja_filters.py @@ -1,5 +1,6 @@ import pytest +from flask import Markup from app import formatted_list @@ -11,6 +12,12 @@ from app import formatted_list ([1], {'prefix': 'foo', 'prefix_plural': 'bar'}, 'foo ‘1’'), ([1, 2, 3], {'before_each': 'a', 'after_each': 'b'}, 'a1b, a2b and a3b'), ([1, 2, 3], {'conjunction': 'foo'}, '‘1’, ‘2’ foo ‘3’'), + (['&'], {'before_each': '', 'after_each': ''}, '&'), + ([1, 2, 3], {'before_each': '', 'after_each': ''}, '1, 2 and 3'), ]) def test_formatted_list(items, kwargs, expected_output): assert formatted_list(items, **kwargs) == expected_output + + +def test_formatted_list_returns_markup(): + assert isinstance(formatted_list([0]), Markup)