From e4befa996c990f2f28c1d59f3abb7814a453b010 Mon Sep 17 00:00:00 2001 From: Perry Hooker Date: Thu, 21 Apr 2016 23:45:21 -0600 Subject: [PATCH 1/3] fix(ngSrcset): ignore undefined ng-srcset directive Closes #14470 --- src/ng/compile.js | 2 +- test/ng/directive/ngSrcsetSpec.js | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/ng/compile.js b/src/ng/compile.js index fee065820bc4..bb88a8a79bca 100644 --- a/src/ng/compile.js +++ b/src/ng/compile.js @@ -1447,7 +1447,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { (nodeName === 'img' && key === 'src')) { // sanitize a[href] and img[src] values this[key] = value = $$sanitizeUri(value, key === 'src'); - } else if (nodeName === 'img' && key === 'srcset') { + } else if (nodeName === 'img' && key === 'srcset' && isDefined(value)) { // sanitize img[srcset] values var result = ""; diff --git a/test/ng/directive/ngSrcsetSpec.js b/test/ng/directive/ngSrcsetSpec.js index 8d14ca5f1b79..b4ed4458a2d5 100644 --- a/test/ng/directive/ngSrcsetSpec.js +++ b/test/ng/directive/ngSrcsetSpec.js @@ -28,5 +28,12 @@ describe('ngSrcset', function() { $rootScope.$digest(); expect(element.attr('srcset')).toBe('http://example.com/image1.png 1x,unsafe:javascript:doEvilStuff() 2x'); })); + + it('should not throw an error if undefined', inject(function($rootScope, $compile) { + $rootScope.imageUrl = {}; + element = $compile('')($rootScope); + $rootScope.$digest(); + expect(element.attr('srcset')).toBe(undefined); + })); }); From 80ae614ccb53ff8ba77a63c9dcfa2c9654f10ced Mon Sep 17 00:00:00 2001 From: Perry Hooker Date: Fri, 22 Apr 2016 18:05:35 -0600 Subject: [PATCH 2/3] fix(ngSrcset): fix test of undefined data-ng-attr-srcset Closes #14470 --- test/ng/directive/ngSrcsetSpec.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/ng/directive/ngSrcsetSpec.js b/test/ng/directive/ngSrcsetSpec.js index b4ed4458a2d5..2e75ed520708 100644 --- a/test/ng/directive/ngSrcsetSpec.js +++ b/test/ng/directive/ngSrcsetSpec.js @@ -30,10 +30,8 @@ describe('ngSrcset', function() { })); it('should not throw an error if undefined', inject(function($rootScope, $compile) { - $rootScope.imageUrl = {}; - element = $compile('')($rootScope); + element = $compile('')($rootScope); $rootScope.$digest(); - expect(element.attr('srcset')).toBe(undefined); })); }); From 8b6d940905c8c48ceebb2e50199b548ee96464a3 Mon Sep 17 00:00:00 2001 From: Perry Hooker Date: Mon, 25 Apr 2016 18:36:21 -0600 Subject: [PATCH 3/3] fix(ngSrcset): add test directly on element Closes #14470 --- test/ng/compileSpec.js | 15 +++++++++++++++ test/ng/directive/ngSrcsetSpec.js | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/test/ng/compileSpec.js b/test/ng/compileSpec.js index 2b64f8ae8170..be52a793277b 100755 --- a/test/ng/compileSpec.js +++ b/test/ng/compileSpec.js @@ -9394,6 +9394,21 @@ describe('$compile', function() { describe('img[srcset] sanitization', function() { + it('should not error if undefined', function() { + module(function() { + directive({ + setter: valueFn(function(scope, element, attr) { + attr.$set('srcset', undefined); + expect(attr.srcset).toBeUndefined(); + }) + }); + }); + inject(function($rootScope, $compile) { + element = $compile('')($rootScope); + expect(element.attr('srcset')).toBeUndefined(); + }); + }); + it('should NOT require trusted values for img srcset', inject(function($rootScope, $compile, $sce) { element = $compile('')($rootScope); $rootScope.testUrl = 'http://example.com/image.png'; diff --git a/test/ng/directive/ngSrcsetSpec.js b/test/ng/directive/ngSrcsetSpec.js index 2e75ed520708..e6842b69292b 100644 --- a/test/ng/directive/ngSrcsetSpec.js +++ b/test/ng/directive/ngSrcsetSpec.js @@ -30,7 +30,7 @@ describe('ngSrcset', function() { })); it('should not throw an error if undefined', inject(function($rootScope, $compile) { - element = $compile('')($rootScope); + element = $compile('')($rootScope); $rootScope.$digest(); })); });