Merge "Remove unnecessary HTML escaping"
This commit is contained in:
		@@ -14,6 +14,17 @@
 | 
			
		||||
(function(window, GrDiffGroup, GrDiffLine) {
 | 
			
		||||
  'use strict';
 | 
			
		||||
 | 
			
		||||
  var HTML_ENTITY_PATTERN = /[&<>"'`\/]/g;
 | 
			
		||||
  var HTML_ENTITY_MAP = {
 | 
			
		||||
    '&': '&',
 | 
			
		||||
    '<': '<',
 | 
			
		||||
    '>': '>',
 | 
			
		||||
    '"': '"',
 | 
			
		||||
    '\'': ''',
 | 
			
		||||
    '/': '/',
 | 
			
		||||
    '`': '`',
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  // Prevent redefinition.
 | 
			
		||||
  if (window.GrDiffBuilder) { return; }
 | 
			
		||||
 | 
			
		||||
@@ -386,7 +397,7 @@
 | 
			
		||||
      td.classList.add('content');
 | 
			
		||||
    }
 | 
			
		||||
    td.classList.add(line.type);
 | 
			
		||||
    var html = util.escapeHTML(text);
 | 
			
		||||
    var html = this._escapeHTML(text);
 | 
			
		||||
    html = this._addTabWrappers(html, this._prefs.tab_size);
 | 
			
		||||
 | 
			
		||||
    if (!this._prefs.line_wrapping &&
 | 
			
		||||
@@ -577,5 +588,11 @@
 | 
			
		||||
        !(!group.adds.length && !group.removes.length);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  GrDiffBuilder.prototype._escapeHTML = function(str) {
 | 
			
		||||
    return str.replace(HTML_ENTITY_PATTERN, function(s) {
 | 
			
		||||
      return HTML_ENTITY_MAP[s];
 | 
			
		||||
    });
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  window.GrDiffBuilder = GrDiffBuilder;
 | 
			
		||||
})(window, GrDiffGroup, GrDiffLine);
 | 
			
		||||
 
 | 
			
		||||
@@ -949,6 +949,19 @@ limitations under the License.
 | 
			
		||||
          done();
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      test('_escapeHTML', function() {
 | 
			
		||||
        var input = '<script>alert("XSS");<' + '/script>';
 | 
			
		||||
        var expected = '<script>alert("XSS");' +
 | 
			
		||||
            '</script>';
 | 
			
		||||
        var result = GrDiffBuilder.prototype._escapeHTML(input);
 | 
			
		||||
        assert.equal(result, expected);
 | 
			
		||||
 | 
			
		||||
        input = '& < > " \' / `';
 | 
			
		||||
        expected = '& < > " ' / `';
 | 
			
		||||
        result = GrDiffBuilder.prototype._escapeHTML(input);
 | 
			
		||||
        assert.equal(result, expected);
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
</script>
 | 
			
		||||
 
 | 
			
		||||
@@ -33,10 +33,10 @@
 | 
			
		||||
      if (!account || (!account.name && !account.email)) { return; }
 | 
			
		||||
      var result = '';
 | 
			
		||||
      if (account.name) {
 | 
			
		||||
        result += util.escapeHTML(account.name);
 | 
			
		||||
        result += account.name;
 | 
			
		||||
      }
 | 
			
		||||
      if (account.email) {
 | 
			
		||||
        result += ' <' + util.escapeHTML(account.email) + '>';
 | 
			
		||||
        result += ' <' + account.email + '>';
 | 
			
		||||
      }
 | 
			
		||||
      return result;
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -24,22 +24,6 @@
 | 
			
		||||
    return new Date(dateStr.replace(' ', 'T') + 'Z');
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  util.htmlEntityMap = {
 | 
			
		||||
    '&': '&',
 | 
			
		||||
    '<': '<',
 | 
			
		||||
    '>': '>',
 | 
			
		||||
    '"': '"',
 | 
			
		||||
    '\'': ''',
 | 
			
		||||
    '/': '/',
 | 
			
		||||
    '`': '`',
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  util.escapeHTML = function(str) {
 | 
			
		||||
    return str.replace(/[&<>"'`\/]/g, function(s) {
 | 
			
		||||
      return util.htmlEntityMap[s];
 | 
			
		||||
    });
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  util.getCookie = function(name) {
 | 
			
		||||
    var key = name + '=';
 | 
			
		||||
    var cookies = document.cookie.split(';');
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user