From 8455a7f3a1aa83f487745306df0c07c39b6dc803 Mon Sep 17 00:00:00 2001 From: Steven Lambert <2433219+straker@users.noreply.github.com> Date: Thu, 3 Sep 2020 08:22:21 -0600 Subject: [PATCH] fix(valid-lang): fail when lang attribute contains only whitespace (#2504) --- lib/checks/language/valid-lang-evaluate.js | 7 ++++++- test/checks/language/valid-lang.js | 6 ++++++ test/integration/rules/valid-lang/valid-lang.html | 1 + test/integration/rules/valid-lang/valid-lang.json | 2 +- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/checks/language/valid-lang-evaluate.js b/lib/checks/language/valid-lang-evaluate.js index 3305d837a5..01897493b1 100644 --- a/lib/checks/language/valid-lang-evaluate.js +++ b/lib/checks/language/valid-lang-evaluate.js @@ -1,4 +1,5 @@ import { validLangs, getBaseLang } from '../../core/utils'; +import { sanitize } from '../../commons/text'; function validLangEvaluate(node, options, virtualNode) { const langs = (options.value ? options.value : validLangs()).map(getBaseLang); @@ -14,7 +15,11 @@ function validLangEvaluate(node, options, virtualNode) { // Edge sets lang to an empty string when xml:lang is set // so we need to ignore empty strings here - if (baselangVal !== '' && langs.indexOf(baselangVal) === -1) { + if ( + (baselangVal !== '' && langs.indexOf(baselangVal) === -1) || + // whitespace only lang value is invalid + (langVal !== '' && !sanitize(langVal)) + ) { invalid.push(langAttr + '="' + virtualNode.attr(langAttr) + '"'); } }); diff --git a/test/checks/language/valid-lang.js b/test/checks/language/valid-lang.js index 632b587212..e8bffa6e1f 100644 --- a/test/checks/language/valid-lang.js +++ b/test/checks/language/valid-lang.js @@ -67,4 +67,10 @@ describe('valid-lang', function() { assert.isTrue(validLangEvaluate.apply(checkContext, params)); assert.deepEqual(checkContext._data, ['custom-lang="en_US"']); }); + + it('should return true if lang value is just whitespace', function() { + var params = checkSetup('
'); + + assert.isTrue(validLangEvaluate.apply(checkContext, params)); + }); }); diff --git a/test/integration/rules/valid-lang/valid-lang.html b/test/integration/rules/valid-lang/valid-lang.html index 73a707e867..0dd98d03bc 100644 --- a/test/integration/rules/valid-lang/valid-lang.html +++ b/test/integration/rules/valid-lang/valid-lang.html @@ -8,3 +8,4 @@Not English
Not English
Mix
+English
diff --git a/test/integration/rules/valid-lang/valid-lang.json b/test/integration/rules/valid-lang/valid-lang.json index 328b10c55f..65b7d71acc 100644 --- a/test/integration/rules/valid-lang/valid-lang.json +++ b/test/integration/rules/valid-lang/valid-lang.json @@ -1,7 +1,7 @@ { "description": "valid-lang test", "rule": "valid-lang", - "violations": [["#fail1"], ["#fail2"], ["#fail3"]], + "violations": [["#fail1"], ["#fail2"], ["#fail3"], ["#fail4"]], "passes": [ ["#pass1"], ["#pass2"],