hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit 58adbeef88ea5c8769d12ba27eef2d89bdf575eb
parent 93572e53181b5a614c2874bd00b7a38a02de58d3
Author: Joe Mooring <joe.mooring@veriphor.com>
Date:   Sun,  7 Nov 2021 07:06:48 -0800

Validate private use language tags

Fixes #9119

Diffstat:
Mhugolib/hugo_modules_test.go | 11+++++++----
Mlangs/i18n/translationProvider.go | 5+++++
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/hugolib/hugo_modules_test.go b/hugolib/hugo_modules_test.go
@@ -701,10 +701,13 @@ Data: {{ .Site.Data }}
 
 	createSymlinks := func(baseDir, id string) {
 		for _, dir := range files.ComponentFolders {
-			c.Assert(os.Chdir(filepath.Join(baseDir, dir)), qt.IsNil)
-			c.Assert(os.Symlink("real", fmt.Sprintf("realsym%s", id)), qt.IsNil)
-			c.Assert(os.Chdir(filepath.Join(baseDir, dir, "real")), qt.IsNil)
-			c.Assert(os.Symlink("data.toml", fmt.Sprintf(filepath.FromSlash("datasym%s.toml"), id)), qt.IsNil)
+			// Issue #9119: private use language tags cannot exceed 8 characters.
+			if dir != "i18n" {
+				c.Assert(os.Chdir(filepath.Join(baseDir, dir)), qt.IsNil)
+				c.Assert(os.Symlink("real", fmt.Sprintf("realsym%s", id)), qt.IsNil)
+				c.Assert(os.Chdir(filepath.Join(baseDir, dir, "real")), qt.IsNil)
+				c.Assert(os.Symlink("data.toml", fmt.Sprintf(filepath.FromSlash("datasym%s.toml"), id)), qt.IsNil)
+			}
 		}
 	}
 
diff --git a/langs/i18n/translationProvider.go b/langs/i18n/translationProvider.go
@@ -93,6 +93,11 @@ func addTranslationFile(bundle *i18n.Bundle, r source.File) error {
 	lang := paths.Filename(name)
 	tag := language.Make(lang)
 	if tag == language.Und {
+		try := artificialLangTagPrefix + lang
+		_, err = language.Parse(try)
+		if err != nil {
+			return _errors.Errorf("%q %s.", try, err)
+		}
 		name = artificialLangTagPrefix + name
 	}