compose: Fix buggy escaping of LaTeX in quote-and-reply.

Apparently, our use of JavaScript string `.replace()` here was buggy,
because replace() has several special escape sequences starting with
`$` if they appear in the replacement content string.  We can work
around this through something of a hack, which is to pass a function
as the second argument to replace, which seems cleaner than replacing
all $s with $$s.

Thanks to Shreya for the report.
This commit is contained in:
Tim Abbott
2019-04-13 10:50:25 -07:00
parent 9f7c0b7e65
commit cef784b101
2 changed files with 11 additions and 1 deletions

View File

@@ -65,7 +65,13 @@ exports.replace_syntax = function (old_syntax, new_syntax, textarea) {
textarea = $('#compose-textarea');
}
textarea.val(textarea.val().replace(old_syntax, new_syntax));
textarea.val(textarea.val().replace(old_syntax, function () {
// We need this anonymous function to avoid JavaScript's
// replace() function treating `$`s in new_syntax as special syntax. See
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Description
// for details.
return new_syntax;
}));
};
return exports;