From f09c84c022a0805460f474c1e7b265c90d1bd76f Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Tue, 12 Jan 2021 14:40:06 +0000 Subject: [PATCH] [FIX] base, web_editor, website: add missing encoding on etree.tostring Since lxml 4.5.0 that use now use libxml2 2.9.10, without it, it can crash. Here sample of content that is broken: https://drive.google.com/file/d/1gB2-jl4fabHscLjH9OZc4WZgtSEbCVj7/view?usp=sharing note: this commit is to merge 3 changes of #64526 opw-2428617 opw-2428664 closes odoo/odoo#66883 X-original-commit: 38983d123d171ac3cc1efacd99d9776f0ed08734 Signed-off-by: Nicolas Lempereur (nle) --- addons/web_editor/models/ir_ui_view.py | 2 +- addons/website/models/website_snippet_filter.py | 2 +- odoo/addons/base/models/qweb.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/web_editor/models/ir_ui_view.py b/addons/web_editor/models/ir_ui_view.py index 13b369cb50b..52bab6a98dd 100644 --- a/addons/web_editor/models/ir_ui_view.py +++ b/addons/web_editor/models/ir_ui_view.py @@ -335,7 +335,7 @@ class IrUiView(models.Model): name = self._find_available_name(name, used_names) # html to xml to add '/' at the end of self closing tags like br, ... - xml_arch = etree.tostring(html.fromstring(arch)) + xml_arch = etree.tostring(html.fromstring(arch), encoding='utf-8') new_snippet_view_values = { 'name': name, 'key': full_snippet_key, diff --git a/addons/website/models/website_snippet_filter.py b/addons/website/models/website_snippet_filter.py index f38ff6f34f5..56e407298f9 100644 --- a/addons/website/models/website_snippet_filter.py +++ b/addons/website/models/website_snippet_filter.py @@ -71,7 +71,7 @@ class WebsiteSnippetFilter(models.Model): is_sample=is_sample, to_generic=self._to_generic, )).decode('utf-8') - return [ET.tostring(el) for el in ET.fromstring('%s' % content).getchildren()] + return [ET.tostring(el, encoding='utf-8') for el in ET.fromstring('%s' % content).getchildren()] def _prepare_values(self, limit=None, search_domain=None): """Gets the data and returns it the right format for render.""" diff --git a/odoo/addons/base/models/qweb.py b/odoo/addons/base/models/qweb.py index b558b4ebc9b..fe5af5edf1a 100644 --- a/odoo/addons/base/models/qweb.py +++ b/odoo/addons/base/models/qweb.py @@ -372,7 +372,7 @@ class QWeb(object): if isinstance(document, etree._Element): element = document - document = etree.tostring(document) + document = etree.tostring(document, encoding='utf-8') elif not document.strip().startswith('<') and os.path.exists(document): element = etree.parse(document).getroot() else: