From 48d75417ee61bb15a6f13e36ef4b9ca2e7f598c4 Mon Sep 17 00:00:00 2001
From: Matt <matthewlodge01@gmail.com>
Date: Sat, 3 Mar 2018 11:51:24 +0000
Subject: [PATCH 1/2] fix for using <amazon:effect> SSML

---
 flask_ask/models.py | 7 ++++---
 requirements.txt    | 1 +
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/flask_ask/models.py b/flask_ask/models.py
index bab1ee4..4c5d469 100644
--- a/flask_ask/models.py
+++ b/flask_ask/models.py
@@ -1,6 +1,6 @@
 import inspect
 from flask import json
-from xml.etree import ElementTree
+from lxml import etree
 import aniso8601
 from .core import session, context, current_stream, stream_cache, dbgdump
 from .cache import push_stream
@@ -399,9 +399,10 @@ def _copyattr(src, dest, attr, convert=None):
 
 def _output_speech(speech):
     try:
-        xmldoc = ElementTree.fromstring(speech)
+        parser = etree.XMLParser(dtd_validation=False, load_dtd=False, recover=True)
+        xmldoc = etree.fromstring(speech, parser)
         if xmldoc.tag == 'speak':
             return {'type': 'SSML', 'ssml': speech}
-    except (UnicodeEncodeError, ElementTree.ParseError) as e:
+    except (UnicodeEncodeError, etree.ParseError) as e:
         pass
     return {'type': 'PlainText', 'text': speech}
diff --git a/requirements.txt b/requirements.txt
index b305822..a4b2730 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,4 +3,5 @@ Flask==0.12.1
 pyOpenSSL==17.0.0
 PyYAML==3.12
 six==1.11.0
+lxml==4.1.1
 

From a4b9299e792dc4383b3769b45bb6808ab3cb89e3 Mon Sep 17 00:00:00 2001
From: Matt <matthewlodge01@gmail.com>
Date: Sat, 3 Mar 2018 14:15:48 +0000
Subject: [PATCH 2/2] Fixed outputting strings as plaintext

---
 flask_ask/models.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/flask_ask/models.py b/flask_ask/models.py
index 4c5d469..334252b 100644
--- a/flask_ask/models.py
+++ b/flask_ask/models.py
@@ -403,6 +403,6 @@ def _output_speech(speech):
         xmldoc = etree.fromstring(speech, parser)
         if xmldoc.tag == 'speak':
             return {'type': 'SSML', 'ssml': speech}
-    except (UnicodeEncodeError, etree.ParseError) as e:
+    except (UnicodeEncodeError, etree.XMLSyntaxError, AttributeError) as e:
         pass
     return {'type': 'PlainText', 'text': speech}