From b6f0e6ed65bef3898880ec2a9470ee95135251fc Mon Sep 17 00:00:00 2001 From: "Didier (did)" Date: Thu, 24 Aug 2023 07:42:41 +0000 Subject: [PATCH] [FIX] mail: avoid double encodeURI Before this PR, if a user copy/past an already encoded url in the composer, the linkify function would reencode already encoded character. `%5B%5D` (witch mean `[]`) would become `%255B%255D` because `%` whould be encoded `%25`. We start by decoding the url, just in case it's already encoded. closes odoo/odoo#133010 X-original-commit: 453c91d9c5b0353b5f362ecad487ccfd547856c6 Signed-off-by: Matthieu Stockbauer (tsm) Signed-off-by: Didier Debondt (did) --- addons/mail/static/src/utils/common/format.js | 3 ++- addons/mail/static/tests/mail_utils_tests.js | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/mail/static/src/utils/common/format.js b/addons/mail/static/src/utils/common/format.js index 93d458e13c0..cc208da6cac 100644 --- a/addons/mail/static/src/utils/common/format.js +++ b/addons/mail/static/src/utils/common/format.js @@ -107,7 +107,8 @@ function linkify(text) { let match; while ((match = urlRegexp.exec(text)) !== null) { result += _escapeEntities(text.slice(curIndex, match.index)); - const url = match[0]; + // Decode the url first, in case it's already an encoded url + const url = decodeURI(match[0]); const href = encodeURI(!/^https?:\/\//i.test(url) ? "http://" + url : url); result += `${_escapeEntities( url diff --git a/addons/mail/static/tests/mail_utils_tests.js b/addons/mail/static/tests/mail_utils_tests.js index b397f01e694..c833c522d73 100644 --- a/addons/mail/static/tests/mail_utils_tests.js +++ b/addons/mail/static/tests/mail_utils_tests.js @@ -52,6 +52,8 @@ QUnit.test("addLink: utility function and special entities", function (assert) { ":'(": ":'(", // special character in smileys should be escaped "<3": "<3", + // Already encoded url should not be encoded twice + "https://odoo.com/%5B%5D": `https://odoo.com/[]`, }; for (const [content, result] of Object.entries(testInputs)) {