From 13b026c96d0e4cb6e298258a808ffa80c1b5acc1 Mon Sep 17 00:00:00 2001
From: Vadim Rutkovsky <vrutkovs@redhat.com>
Date: Wed, 19 Mar 2014 12:37:38 +0100
Subject: [PATCH] Don't crash on invalid XML chars in embed
---
behave/formatter/html.py | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
--- a/behave/formatter/html.py
+++ b/behave/formatter/html.py
@@ -4,7 +4,8 @@ import base64
import os.path
from behave.compat.collections import Counter
-def _valid_XML_char_ordinal(i):
+def _valid_XML_char_ordinal(char):
+ i = ord(char)
return ( # conditions ordered by presumed frequency
0x20 <= i <= 0xD7FF
or i in (0x9, 0xA, 0xD)
@@ -208,10 +209,11 @@ class HTMLFormatter(Formatter):
embed = ET.SubElement(step, 'pre',
{'id': "embed_%s" % self.embed_id,
'style': 'display: none; white-space: pre-wrap;'})
- cleaned_error_message = ''.join(
- c for c in result.error_message if _valid_XML_char_ordinal(ord(c))
- )
- embed.text = cleaned_error_message
+ cleaned_error_message = filter(_valid_XML_char_ordinal, result.error_message)
+ try:
+ embed.text = cleaned_error_message
+ except ValueError:
+ print("Cannot embed error message as it contains nonvalid XML chars")
embed.tail = u' '
if result.status == 'failed':
@@ -276,14 +278,14 @@ class HTMLFormatter(Formatter):
caption = u'Data'
link.text = unicode(caption)
- cleaned_data = ''.join(
- c for c in data if _valid_XML_char_ordinal(ord(c))
- )
-
+ cleaned_data = filter(_valid_XML_char_ordinal, data)
embed = ET.SubElement(span, 'pre',
{'id': "embed_%s" % self.embed_id,
'style': 'display: none'})
- embed.text = cleaned_data
+ try:
+ embed.text = cleaned_data
+ except ValueError:
+ print("Cannot embed text as it contains nonvalid XML chars")
embed.tail = u' '
def embedding(self, mime_type, data, caption=None):