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),