From c3e55c109f279a00fd9fed87045cc35db337c022 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Mon, 8 Feb 2021 13:13:47 -0600 Subject: [PATCH] Fix exec escaping for emoji task name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This closes #7459. While emoji don’t actually need escaping, expanding the expression that enumerates all task name characters that don’t need escaping to include emoji is prohibitive, since it’s a discontinuous range. The emoji-regex project has such an expression and it’s 12kB. This fixes the regular expression to property escape emoji as a single character instead of as its component bytes. Thanks to @DingoEatingFuzz for the suggestion. --- ui/app/utils/escape-task-name.js | 2 +- ui/tests/unit/utils/escape-task-name-test.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ui/app/utils/escape-task-name.js b/ui/app/utils/escape-task-name.js index fff0e4741f8d..ce92a5e5498c 100644 --- a/ui/app/utils/escape-task-name.js +++ b/ui/app/utils/escape-task-name.js @@ -1,4 +1,4 @@ export default function escapeTaskName(taskName) { // Regular expression is taken from here: https://stackoverflow.com/a/20053121 - return taskName.replace(/[^a-zA-Z0-9,._+@%/-]/g, '\\$&'); + return taskName.replace(/[^a-zA-Z0-9,._+@%/-]/gu, '\\$&'); } diff --git a/ui/tests/unit/utils/escape-task-name-test.js b/ui/tests/unit/utils/escape-task-name-test.js index b34ab2430ea8..649d2acce700 100644 --- a/ui/tests/unit/utils/escape-task-name-test.js +++ b/ui/tests/unit/utils/escape-task-name-test.js @@ -6,5 +6,6 @@ module('Unit | Utility | escape-task-name', function() { assert.equal(escapeTaskName('plain'), 'plain'); assert.equal(escapeTaskName('a space'), 'a\\ space'); assert.equal(escapeTaskName('dollar $ign'), 'dollar\\ \\$ign'); + assert.equal(escapeTaskName('emoji🥳'), 'emoji\\🥳'); }); });