diff options
author | Tatsushi Demachi <tdemachi@gmail.com> | 2015-08-03 23:32:51 +0900 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2015-08-03 18:30:55 +0200 |
commit | 98659bf3b8d11a6bd57439d70551f5f018b6a404 (patch) | |
tree | f392919a34d1e5e9c3f8da764e1f18e0916ae069 /parser | |
parent | 4bed69629e55f7292505a74e8437a5a05ddf9a22 (diff) |
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
Diffstat (limited to 'parser')
-rw-r--r-- | parser/page.go | 2 | ||||
-rw-r--r-- | parser/parse_frontmatter_test.go | 1 |
2 files changed, 2 insertions, 1 deletions
diff --git a/parser/page.go b/parser/page.go index 21014888f..8ca784acb 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 9ed2d8e5f..999472c0b 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 { |