From 4f1bf5dc6b28f9fd580d82807025a93e8e01f800 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Fri, 25 Mar 2016 23:25:39 +0100 Subject: [PATCH 2/2] prevent non utf-8 strings from breaking /inspect (#10447) --- wcs/backoffice/management.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/wcs/backoffice/management.py b/wcs/backoffice/management.py index 0d4735e..8f8f4f5 100644 --- a/wcs/backoffice/management.py +++ b/wcs/backoffice/management.py @@ -1805,6 +1805,7 @@ class FormBackOfficeStatusPage(FormStatusPage): if not (get_publisher().get_backoffice_root().is_accessible('forms') or get_publisher().get_backoffice_root().is_accessible('workflows')): raise errors.AccessForbiddenError() + charset = get_publisher().site_charset get_response().breadcrumb.append(('inspect', _('Form Inspector'))) self.html_top(self.formdef.name) r = TemplateIO(html=True) @@ -1814,7 +1815,21 @@ class FormBackOfficeStatusPage(FormStatusPage): r += htmltext('
  • %s

  • ') % _('Substitution variables') substvars = self.filled.get_substitution_variables() substvars.update(self.filled.formdef.get_substitution_variables()) + + def safe(v): + if isinstance(v, str): + try: + unicode(v, charset) + except UnicodeDecodeError: + v = repr(v) + else: + try: + v = unicode(v).encode(charset) + except UnicodeDecodeError: + v = repr(v) for k, v in sorted(substvars.items()): + k = safe(k) + v = safe(v) r += htmltext('
  • %s') % (k, k) r += htmltext('
    %s') % v if not isinstance(v, basestring): -- 2.1.4