diff options
author | Thorkild Gregersen <oganga@users.noreply.github.com> | 2020-05-18 21:01:04 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-18 13:01:04 -0600 |
commit | 483e31b9788f57b0a1adc153574878d0c7c4feb0 (patch) | |
tree | f9f1b541892060d09671fdfa86c307906ebc234b | |
parent | 41a682ddde15f333b11ac35677ab781ec40e0021 (diff) |
templates: trim windows whitespace in SplitFrontMatter; fix #3386 (#3387)
* add test case for SplitFrontMatter showing issue with windows newline
* fix issue with windows newline when using SplitFrontMatter
* Update modules/caddyhttp/templates/frontmatter.go
Co-authored-by: Francis Lavoie <lavofr@gmail.com>
* make it mere explicit what is trimmed from firstLine
* Update modules/caddyhttp/templates/frontmatter.go
Co-authored-by: Francis Lavoie <lavofr@gmail.com>
Co-authored-by: Matt Holt <mholt@users.noreply.github.com>
-rw-r--r-- | modules/caddyhttp/templates/frontmatter.go | 3 | ||||
-rw-r--r-- | modules/caddyhttp/templates/tplcontext_test.go | 45 |
2 files changed, 48 insertions, 0 deletions
diff --git a/modules/caddyhttp/templates/frontmatter.go b/modules/caddyhttp/templates/frontmatter.go index d6b6d0e..d781c7b 100644 --- a/modules/caddyhttp/templates/frontmatter.go +++ b/modules/caddyhttp/templates/frontmatter.go @@ -30,6 +30,9 @@ func extractFrontMatter(input string) (map[string]interface{}, string, error) { } firstLine := input[firstLineStart:firstLineEnd] + // ensure residue windows carriage return byte is removed + firstLine = strings.TrimSpace(firstLine) + // see what kind of front matter there is, if any var closingFence string var fmParser func([]byte) (map[string]interface{}, error) diff --git a/modules/caddyhttp/templates/tplcontext_test.go b/modules/caddyhttp/templates/tplcontext_test.go index dbf2172..4c3da03 100644 --- a/modules/caddyhttp/templates/tplcontext_test.go +++ b/modules/caddyhttp/templates/tplcontext_test.go @@ -284,6 +284,51 @@ func TestFileListing(t *testing.T) { } } +func TestSplitFrontMatter(t *testing.T) { + context := getContextOrFail(t) + + for i, test := range []struct { + input string + expect string + }{ + { + // yaml with windows newline + input: "---\r\ntitle: Welcome\r\n---\r\n# Test\\r\\n", + expect: `Welcome`, + }, + { + // yaml + input: `--- +title: Welcome +--- +### Test`, + expect: `Welcome`, + }, + { + // toml + input: `+++ +title = "Welcome" ++++ +### Test`, + expect: `Welcome`, + }, + { + // json + input: `{ + "title": "Welcome" +} +### Test`, + expect: `Welcome`, + }, + } { + result, _ := context.funcSplitFrontMatter(test.input) + if result.Meta["title"] != test.expect { + t.Errorf("Test %d: Expected %s, found %s. Input was SplitFrontMatter(%s)", i, test.expect, result.Meta["title"], test.input) + } + } + +} + func getContextOrFail(t *testing.T) templateContext { context, err := initTestContext() if err != nil { |