Skip to content
This repository was archived by the owner on Apr 1, 2025. It is now read-only.

Commit 1f64d61

Browse files
committed
Fix issue in simple_keys improvements (#548)
1 parent a95acef commit 1f64d61

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

decode_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -867,6 +867,7 @@ var unmarshalErrorTests = []struct {
867867
{"{{.}}", `yaml: invalid map key: map\[interface\ \{\}\]interface \{\}\{".":interface \{\}\(nil\)\}`},
868868
{"b: *a\na: &a {c: 1}", `yaml: unknown anchor 'a' referenced`},
869869
{"%TAG !%79! tag:yaml.org,2002:\n---\nv: !%79!int '1'", "yaml: did not find expected whitespace"},
870+
{"a:\n 1:\nb\n 2:", ".*could not find expected ':'"},
870871
{
871872
"a: &a [00,00,00,00,00,00,00,00,00]\n" +
872873
"b: &b [*a,*a,*a,*a,*a,*a,*a,*a,*a]\n" +

scannerc.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,9 @@ func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool {
639639
if simple_key.token_number < parser.tokens_parsed {
640640
break
641641
}
642-
if yaml_simple_key_is_valid(parser, simple_key) && simple_key.token_number == parser.tokens_parsed {
642+
if valid, ok := yaml_simple_key_is_valid(parser, simple_key); !ok {
643+
return false
644+
} else if valid && simple_key.token_number == parser.tokens_parsed {
643645
need_more_tokens = true
644646
break
645647
}
@@ -831,9 +833,9 @@ func yaml_parser_fetch_next_token(parser *yaml_parser_t) bool {
831833
"found character that cannot start any token")
832834
}
833835

834-
func yaml_simple_key_is_valid(parser *yaml_parser_t, simple_key *yaml_simple_key_t) bool {
836+
func yaml_simple_key_is_valid(parser *yaml_parser_t, simple_key *yaml_simple_key_t) (valid, ok bool) {
835837
if !simple_key.possible {
836-
return false
838+
return false, true
837839
}
838840

839841
// The 1.2 specification says:
@@ -847,14 +849,14 @@ func yaml_simple_key_is_valid(parser *yaml_parser_t, simple_key *yaml_simple_key
847849
if simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index {
848850
// Check if the potential simple key to be removed is required.
849851
if simple_key.required {
850-
return yaml_parser_set_scanner_error(parser,
852+
return false, yaml_parser_set_scanner_error(parser,
851853
"while scanning a simple key", simple_key.mark,
852854
"could not find expected ':'")
853855
}
854856
simple_key.possible = false
855-
return false
857+
return false, true
856858
}
857-
return true
859+
return true, true
858860
}
859861

860862
// Check if a simple key may start at the current position and add it if
@@ -1286,7 +1288,10 @@ func yaml_parser_fetch_value(parser *yaml_parser_t) bool {
12861288
simple_key := &parser.simple_keys[len(parser.simple_keys)-1]
12871289

12881290
// Have we found a simple key?
1289-
if yaml_simple_key_is_valid(parser, simple_key) {
1291+
if valid, ok := yaml_simple_key_is_valid(parser, simple_key); !ok {
1292+
return false
1293+
1294+
} else if valid {
12901295

12911296
// Create the KEY token and insert it into the queue.
12921297
token := yaml_token_t{

0 commit comments

Comments
 (0)