From a0cf5d9da5c1704de6c29808fa74edd859c71cd2 Mon Sep 17 00:00:00 2001
From: Karnav Sojitra <kaso@odoo.com>
Date: Fri, 11 Aug 2023 07:25:14 +0000
Subject: [PATCH] [FIX] tools: raise validation error while invalid expression

When the user tries to modify the view with an invalid xpath expression,
an XPathSyntaxError traceback will appear.

Steps to produce:
1. Install the Accounting module.
2. Settings > Technical > UI > Views > Open any view
3. Invalidate expr syntax and try to save, thus an error will be generated.

Error: XPathSyntaxError: Invalid expression

This commit handles XPathSyntaxError by raising ValidationError
instead of a traceback.

sentry-4377014622

closes odoo/odoo#135614

X-original-commit: 58e463e70448d003b3f48266608ae2859e8bded9
Signed-off-by: Achraf Ben Azzouz (abz) <abz@odoo.com>
---
 odoo/addons/base/i18n/base.pot     | 6 ++++++
 odoo/tools/template_inheritance.py | 6 +++---
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/odoo/addons/base/i18n/base.pot b/odoo/addons/base/i18n/base.pot
index 1b3ea8606802..bd68c26fe4b5 100644
--- a/odoo/addons/base/i18n/base.pot
+++ b/odoo/addons/base/i18n/base.pot
@@ -16250,6 +16250,12 @@ msgstr ""
 msgid "Invalid 'group by' parameter"
 msgstr ""
 
+#. module: base
+#: code:addons/template_inheritance.py:0
+#, python-format
+msgid "Invalid Expression while parsing xpath %r"
+msgstr ""
+
 #. module: base
 #: code:addons/base/models/ir_default.py:0
 #, python-format
diff --git a/odoo/tools/template_inheritance.py b/odoo/tools/template_inheritance.py
index b57408363d29..5e00c963d424 100644
--- a/odoo/tools/template_inheritance.py
+++ b/odoo/tools/template_inheritance.py
@@ -7,6 +7,7 @@ import logging
 
 from odoo.tools.translate import _
 from odoo.tools import SKIPPED_ELEMENT_TYPES, html_escape
+from odoo.exceptions import ValidationError
 
 _logger = logging.getLogger(__name__)
 
@@ -57,9 +58,8 @@ def locate_node(arch, spec):
         expr = spec.get('expr')
         try:
             xPath = etree.ETXPath(expr)
-        except etree.XPathSyntaxError:
-            _logger.error("XPathSyntaxError while parsing xpath %r", expr)
-            raise
+        except etree.XPathSyntaxError as e:
+            raise ValidationError(_("Invalid Expression while parsing xpath %r", expr)) from e
         nodes = xPath(arch)
         return nodes[0] if nodes else None
     elif spec.tag == 'field':
-- 
GitLab