hugo

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

git clone git://git.shimmy1996.com/hugo.git
commit 75c9b893d98961a504cff9ed3c89055d16e315d6
parent 64e1613fb390bd893900dc0596e5c3f3c8e1cd8c
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Mon, 25 Oct 2021 12:28:12 +0200

create: Validate the target path in hugo new

Fixes #9072

Diffstat:
Mcreate/content.go | 4++++
Mcreate/content_test.go | 17++++++++++++++---
2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/create/content.go b/create/content.go
@@ -91,6 +91,10 @@ func NewContent(h *hugolib.HugoSites, kind, targetPath string) error {
 		return errors.Errorf("failed to resolve %q to a archetype template", targetPath)
 	}
 
+	if !files.IsContentFile(b.targetPath) {
+		return errors.Errorf("target path  %q is not a kown content format", b.targetPath)
+	}
+
 	return b.buildFile()
 
 }
diff --git a/create/content_test.go b/create/content_test.go
@@ -40,10 +40,11 @@ func TestNewContent(t *testing.T) {
 		name     string
 		kind     string
 		path     string
-		expected []string
+		expected interface{}
 	}{
 		{"Post", "post", "post/sample-1.md", []string{`title = "Post Arch title"`, `test = "test1"`, "date = \"2015-01-12T19:20:04-07:00\""}},
 		{"Post org-mode", "post", "post/org-1.org", []string{`#+title: ORG-1`}},
+		{"Post, unknown content filetype", "post", "post/sample-1.pdoc", false},
 		{"Empty date", "emptydate", "post/sample-ed.md", []string{`title = "Empty Date Arch title"`, `test = "test1"`}},
 		{"Archetype file not found", "stump", "stump/sample-2.md", []string{`title: "Sample 2"`}}, // no archetype file
 		{"No archetype", "", "sample-3.md", []string{`title: "Sample 3"`}},                        // no archetype
@@ -80,14 +81,24 @@ func TestNewContent(t *testing.T) {
 			h, err := hugolib.NewHugoSites(deps.DepsCfg{Cfg: cfg, Fs: fs})
 			c.Assert(err, qt.IsNil)
 
-			c.Assert(create.NewContent(h, cas.kind, cas.path), qt.IsNil)
+			err = create.NewContent(h, cas.kind, cas.path)
+
+			if b, ok := cas.expected.(bool); ok && !b {
+				if !b {
+					c.Assert(err, qt.Not(qt.IsNil))
+				}
+				return
+			}
+
+			c.Assert(err, qt.IsNil)
 
 			fname := filepath.FromSlash(cas.path)
 			if !strings.HasPrefix(fname, "content") {
 				fname = filepath.Join("content", fname)
 			}
 			content := readFileFromFs(c, fs.Source, fname)
-			for _, v := range cas.expected {
+
+			for _, v := range cas.expected.([]string) {
 				found := strings.Contains(content, v)
 				if !found {
 					c.Fatalf("[%d] %q missing from output:\n%q", i, v, content)