From 98659bf3b8d11a6bd57439d70551f5f018b6a404 Mon Sep 17 00:00:00 2001 From: Tatsushi Demachi Date: Mon, 3 Aug 2015 23:32:51 +0900 Subject: [PATCH] Fix searching YAML/TOML delimiters in frontmatter When a YAML/TOML's delimiter character sequence is included in a frontmatter string, parser mistakes it as a delimiter. This fixes it by checking a character right before the delimiter sequence is '\n' or it is the beginning of the frontmatter. Fix #1320 --- parser/page.go | 2 +- parser/parse_frontmatter_test.go | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/parser/page.go b/parser/page.go index 21014888..8ca784ac 100644 --- a/parser/page.go +++ b/parser/page.go @@ -207,7 +207,7 @@ func extractFrontMatterDelims(r *bufio.Reader, left, right []byte) (fm FrontMatt switch c { case left[len(left)-1]: if sameDelim { // YAML, TOML case - if bytes.HasSuffix(buf.Bytes(), left) { + if bytes.HasSuffix(buf.Bytes(), left) && (buf.Len() == len(left) || buf.Bytes()[buf.Len()-len(left)-1] == '\n') { nextByte: c, err = r.ReadByte() if err != nil { diff --git a/parser/parse_frontmatter_test.go b/parser/parse_frontmatter_test.go index 9ed2d8e5..999472c0 100644 --- a/parser/parse_frontmatter_test.go +++ b/parser/parse_frontmatter_test.go @@ -238,6 +238,7 @@ func TestExtractFrontMatter(t *testing.T) { {"--- \nminc\n--- \ncontent", []byte("---\nminc\n---\n"), true}, {"---\ncnim\n---\ncontent\n", []byte("---\ncnim\n---\n"), true}, {"---\ntitle: slug doc 2\nslug: slug-doc-2\n---\ncontent\n", []byte("---\ntitle: slug doc 2\nslug: slug-doc-2\n---\n"), true}, + {"---\npermalink: '/blog/title---subtitle.html'\n---\ncontent\n", []byte("---\npermalink: '/blog/title---subtitle.html'\n---\n"), true}, } for _, test := range tests { -- 2.30.2