Skip to content
This repository has been archived by the owner on Apr 12, 2024. It is now read-only.

Commit

Permalink
fix(ngSanitize): sanitizer should not accept <!--> as a valid comment
Browse files Browse the repository at this point in the history
According to http://validator.w3.org/ , <!--> is not a valid comment
and neither is any comment containing the -- substring.
  • Loading branch information
R. Merkert authored and vojtajina committed Sep 11, 2013
1 parent bf512bb commit 21e9e8c
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 3 deletions.
5 changes: 3 additions & 2 deletions src/ngSanitize/sanitize.js
Original file line number Diff line number Diff line change
Expand Up @@ -210,9 +210,10 @@ function htmlParser( html, handler ) {

// Comment
if ( html.indexOf("<!--") === 0 ) {
index = html.indexOf("-->");
// comments containing -- are not allowed unless they terminate the comment
index = html.indexOf("--", 4);

if ( index >= 0 ) {
if ( index >= 0 && html.lastIndexOf("-->", index) === index) {
if (handler.comment) handler.comment( html.substring( 4, index ) );
html = html.substring( index + 3 );
chars = false;
Expand Down
34 changes: 33 additions & 1 deletion test/ngSanitize/sanitizeSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ describe('HTML', function() {
describe('htmlParser', function() {
if (angular.isUndefined(window.htmlParser)) return;

var handler, start, text;
var handler, start, text, comment;
beforeEach(function() {
handler = {
start: function(tag, attrs, unary){
Expand All @@ -35,10 +35,42 @@ describe('HTML', function() {
},
end:function(tag) {
expect(tag).toEqual(start.tag);
},
comment:function(comment_) {
comment = comment_;
}
};
});

it('should parse comments', function() {
htmlParser('<!--FOOBAR-->', handler);
expect(comment).toEqual('FOOBAR');
});

it('should throw an exception for invalid comments', function() {
var caught=false;
try {
htmlParser('<!-->', handler);
}
catch (ex) {
caught = true;
// expected an exception due to a bad parse
}
expect(caught).toBe(true);
});

it('double-dashes are not allowed in a comment', function() {
var caught=false;
try {
htmlParser('<!-- -- -->', handler);
}
catch (ex) {
caught = true;
// expected an exception due to a bad parse
}
expect(caught).toBe(true);
});

it('should parse basic format', function() {
htmlParser('<tag attr="value">text</tag>', handler);
expect(start).toEqual({tag:'tag', attrs:{attr:'value'}, unary:false});
Expand Down

0 comments on commit 21e9e8c

Please sign in to comment.