Make _.escape escape backticks as well

In Internet Explorer ≤ 8, the backtick character can be used to break out of unquoted attribute values or HTML comments. See http://html5sec.org/#102, http://html5sec.org/#108, and http://html5sec.org/#133.
This commit is contained in:
Mathias Bynens
2014-05-23 10:38:05 +02:00
parent f4b34c8ca5
commit c875b61003
2 changed files with 13 additions and 6 deletions

View File

@@ -40,8 +40,8 @@
reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
/** Used to match HTML entities and HTML characters */
var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
reUnescapedHtml = /[&<>"']/g;
var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g,
reUnescapedHtml = /[&<>"'`]/g;
/** Used to match template delimiters */
var reEscape = /<%-([\s\S]+?)%>/g,
@@ -157,13 +157,19 @@
* unless they're part of a tag or unquoted attribute value.
* See [Mathias' article](http://mathiasbynens.be/notes/ambiguous-ampersands)
* (under "semi-related fun fact") for more details.
*
* Backticks are escaped because in Internet Explorer <= 8, they can be used
* to break out of unquoted attribute values or HTML comments. See
* <http://html5sec.org/#102>, <http://html5sec.org/#108>, and
* <http://html5sec.org/#133> for more details.
*/
var htmlEscapes = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
"'": '&#39;'
"'": '&#39;',
'`': '&#96;'
};
/** Used to convert HTML entities to characters */
@@ -172,7 +178,8 @@
'&lt;': '<',
'&gt;': '>',
'&quot;': '"',
'&#39;': "'"
'&#39;': "'",
'&#96;': '`'
};
/**

View File

@@ -2372,8 +2372,8 @@
QUnit.module('lodash.escape');
(function() {
var escaped = '&amp;&lt;&gt;&quot;&#39;\/',
unescaped = '&<>"\'\/';
var escaped = '&amp;&lt;&gt;&quot;&#39;&#96;\/',
unescaped = '&<>"\'`\/';
test('should escape values', 1, function() {
strictEqual(_.escape(unescaped), escaped);