diff --git a/extensions/amp-a4a/0.1/head-validation.js b/extensions/amp-a4a/0.1/head-validation.js index 3f0e86304602..027df55f56a9 100644 --- a/extensions/amp-a4a/0.1/head-validation.js +++ b/extensions/amp-a4a/0.1/head-validation.js @@ -20,7 +20,7 @@ export let ValidatedHeadDef; // From validator/validator-main.protoascii const ALLOWED_FONT_REGEX = new RegExp( 'https://cdn\\.materialdesignicons\\.com/' + - '([0-9]+\\.?)+/css/materialdesignicons\\.min\\.css|' + + '[0-9]+(?:\\.[0-9]+)*\\.?/css/materialdesignicons\\.min\\.css|' + 'https://cloud\\.typography\\.com/' + '[0-9]*/[0-9]*/css/fonts\\.css|' + 'https://fast\\.fonts\\.net/.*|' + @@ -28,8 +28,8 @@ const ALLOWED_FONT_REGEX = new RegExp( 'https://fonts\\.googleapis\\.com/icon\\?.*|' + 'https://fonts\\.googleapis\\.com/earlyaccess/.*\\.css|' + 'https://maxcdn\\.bootstrapcdn\\.com/font-awesome/' + - '([0-9]+\\.?)+/css/font-awesome\\.min\\.css(\\?.*)?|' + - 'https://(use|pro)\\.fontawesome\\.com/releases/v([0-9]+\\.?)+' + + '[0-9]+(?:\\.[0-9]+)*\\.?/css/font-awesome\\.min\\.css(\\?.*)?|' + + 'https://(use|pro)\\.fontawesome\\.com/releases/v[0-9]+(?:\\.[0-9]+)*\\.?' + '/css/[0-9a-zA-Z-]+\\.css|' + 'https://(use|pro)\\.fontawesome\\.com/[0-9a-zA-Z-]+\\.css|' + 'https://use\\.typekit\\.net/[\\w\\p{L}\\p{N}_]+\\.css' diff --git a/extensions/amp-a4a/0.1/test/test-head-validation.js b/extensions/amp-a4a/0.1/test/test-head-validation.js index bd7ca9c9642d..2451e3e2cacc 100644 --- a/extensions/amp-a4a/0.1/test/test-head-validation.js +++ b/extensions/amp-a4a/0.1/test/test-head-validation.js @@ -174,6 +174,41 @@ describes.realWin('head validation', {amp: true}, (env) => { ); }); + it('keeps versioned material-design and font-awesome font links', () => { + const preloadStub = env.sandbox.stub( + Services.preconnectFor(env.win), + 'preload' + ); + const urls = [ + 'https://cdn.materialdesignicons.com/5.4.55/css/materialdesignicons.min.css', + 'https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css', + 'https://use.fontawesome.com/releases/v5.15.4/css/all.css', + ]; + head.innerHTML = urls + .map((href) => ``) + .join('\n'); + const validated = processHead(env.win, adElement, head); + expect(validated.head.querySelectorAll('link')).to.have.length( + urls.length + ); + urls.forEach((href) => + expect(preloadStub).calledWith(env.ampdoc, href) + ); + }); + + it('rejects a font link with a long unterminated version run', () => { + const preloadStub = env.sandbox.stub( + Services.preconnectFor(env.win), + 'preload' + ); + const href = + 'https://use.fontawesome.com/releases/v' + '9'.repeat(40) + '!'; + head.innerHTML = ``; + const validated = processHead(env.win, adElement, head); + expect(validated.head.querySelector('link')).not.to.exist; + expect(preloadStub).not.to.be.called; + }); + it('does not allow arbitrary font providers', () => { const preloadStub = env.sandbox.stub( Services.preconnectFor(env.win),