fix #688 and provide a unit test

This commit is contained in:
Hannu Hartikainen 2015-12-01 21:31:12 +02:00
parent e63877ad41
commit b0f4ee4413
2 changed files with 9 additions and 1 deletions

View file

@ -120,7 +120,7 @@ weechat.filter('DOMfilter', ['$filter', '$sce', function($filter, $sce) {
if (node === undefined || node === null) return; if (node === undefined || node === null) return;
node = node.firstChild; node = node.firstChild;
while (node) { while (node) {
var nextNode; var nextNode = null;
// do not recurse inside links if the filter would create a nested link // do not recurse inside links if the filter would create a nested link
if (!(createsAnchor && node.tagName === 'A')) { if (!(createsAnchor && node.tagName === 'A')) {
nextNode = process(node); nextNode = process(node);

View file

@ -83,5 +83,13 @@ describe('Filters', function() {
result = DOMfilterFilter(dom, 'number', 2).$$unwrapTrustedValue(); result = DOMfilterFilter(dom, 'number', 2).$$unwrapTrustedValue();
expect(result).toEqual(expected); expect(result).toEqual(expected);
})); }));
it('should never lock up like in bug #688', inject(function(linkyFilter, DOMfilterFilter) {
var msg = '#crash http://google.com',
linked = linkyFilter(msg),
irclinked = DOMfilterFilter(linked, 'irclinky');
// With the bug, the DOMfilterFilter call ends up in an infinite loop.
// I.e. if we ever got this far, the bug is fixed.
}));
}); });
}); });