@@ -7,71 +7,27 @@ import (
77 "github.com/stretchr/testify/require"
88)
99
10- var yamlAliasTests = []struct {
11- name string
12- input string
13- wantErr bool
14- }{
15- {"clean YAML" , "title: Hello\n author: World\n " , false },
16- {"anchor definition" , "base: &base\n name: foo\n " , true },
17- {"alias reference" , "child:\n <<: *base\n " , true },
18- {"ampersand in quoted string" , "title: \" Q&A Session\" \n " , false },
19- {"ampersand in single quoted string" , "title: 'Q&A'\n " , false },
20- {"asterisk in quoted string" , "note: \" use *bold* text\" \n " , false },
21- {"ampersand in unquoted value" , "title: Q&A\n " , false },
22- {"billion laughs chain" , "a: &a [\" lol\" ]\n b: &b [*a,*a]\n c: &c [*b,*b]\n " , true },
23- {"empty input" , "" , false },
24- {"asterisk not followed by identifier" , "note: 5 * 3 = 15\n " , false },
25- {"anchor at start of line" , "&anchor value\n " , true },
26- {"alias at start of value" , "key: *alias\n " , true },
27- {"block scalar with ampersand" , "key: |\n &name in block\n " , false },
28- {"block scalar with asterisk" , "key: >\n *name in folded\n " , false },
29- {"comment with ampersand" , "key: val # &anchor\n " , false },
30- {"comment with asterisk" , "key: val # *alias\n " , false },
31- {"escaped quote in double string" , "key: \" she said \\ \" &hello\\ \" \" \n " , false },
32- {"doubled single quote" , "key: 'it''s &here'\n " , false },
33- {"syntax error ignored" , "key: [unclosed\n " , false },
34- {"multi-document clean" , "title: a\n ---\n title: b\n " , false },
35- }
36-
37- func TestRejectYAMLAliases (t * testing.T ) {
38- for _ , tt := range yamlAliasTests {
39- t .Run (tt .name , func (t * testing.T ) {
40- err := RejectYAMLAliases ([]byte (tt .input ))
41- if tt .wantErr {
42- require .Error (t , err )
43- assert .Contains (t , err .Error (), "anchors/aliases are not permitted" )
44- } else {
45- assert .NoError (t , err )
46- }
47- })
48- }
49- }
50-
10+ // TestRejectYAMLAliases_FrontMatter verifies that ParseFrontMatterKinds
11+ // rejects YAML anchors/aliases via the yamlutil safe-unmarshal path.
5112func TestRejectYAMLAliases_FrontMatter (t * testing.T ) {
5213 t .Run ("anchor in front matter is rejected" , func (t * testing.T ) {
53- doc := []byte ("---\n a: &a [\" lol\" ]\n b: &b [*a,*a]\n c: &c [*b,*b]\n ---\n # Title\n " )
14+ doc := []byte ("---\n a: &a [\" lol\" ]\n b: &b [*a,*a]\n c: &c [*b,*b]\n kinds: [doc] \ n ---\n # Title\n " )
5415 prefix , content := StripFrontMatter (doc )
5516 require .NotNil (t , prefix )
5617 assert .Contains (t , string (content ), "# Title" )
5718
58- delim := []byte ("---\n " )
59- yamlBytes := prefix [len (delim ) : len (prefix )- len (delim )]
60-
61- err := RejectYAMLAliases (yamlBytes )
19+ _ , err := ParseFrontMatterKinds (prefix )
6220 require .Error (t , err )
6321 assert .Contains (t , err .Error (), "anchors/aliases are not permitted" )
6422 })
6523
6624 t .Run ("clean front matter is accepted" , func (t * testing.T ) {
67- doc := []byte ("---\n title: \" Q&A Guide\" \n status: draft \n ---\n # Title\n " )
25+ doc := []byte ("---\n title: \" Q&A Guide\" \n kinds: [doc] \n ---\n # Title\n " )
6826 prefix , _ := StripFrontMatter (doc )
6927 require .NotNil (t , prefix )
7028
71- delim := []byte ("---\n " )
72- yamlBytes := prefix [len (delim ) : len (prefix )- len (delim )]
73-
74- err := RejectYAMLAliases (yamlBytes )
75- assert .NoError (t , err )
29+ kinds , err := ParseFrontMatterKinds (prefix )
30+ require .NoError (t , err )
31+ assert .Equal (t , []string {"doc" }, kinds )
7632 })
7733}
0 commit comments