Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v3 skips blank elements in a sequence whereas v2 does not #1011

Open
jotego opened this issue Dec 17, 2023 · 1 comment
Open

v3 skips blank elements in a sequence whereas v2 does not #1011

jotego opened this issue Dec 17, 2023 · 1 comment

Comments

@jotego
Copy link

jotego commented Dec 17, 2023

The following YAML:

  - name: idle6 # waste 6 ucycles
    start: 0x42
    seq:
      - # 1
      - # 2
      - # 3
      - # 4
      - # 5
      - ret_jsr #6

Where seq is read into a []string will produce 6 entries in go-yaml/v2 but only one in go-yaml/v3. I believe the correct behavior is that of v2. The empty elements should have been added as empty strings in the slice.

@lukemassa
Copy link

I am seeing this too, it seems to be present whether or not there are comments.

yaml_test % cat go.mod 
module yaml_test

go 1.21.5

require (
	gopkg.in/yaml.v2 v2.4.0 // indirect
	gopkg.in/yaml.v3 v3.0.1 // indirect
)
yaml_test % cat main.go 
package main

import (
	"fmt"

	yaml2 "gopkg.in/yaml.v2"
	yaml3 "gopkg.in/yaml.v3"
)

type Test struct {
	Foo []struct{} `yaml:"foo"`
}

func withYaml2() (Test, error) {
	var test Test
	err := yaml2.Unmarshal([]byte("foo:\n-"), &test)
	return test, err
}

func withYaml3() (Test, error) {
	var test Test
	err := yaml3.Unmarshal([]byte("foo:\n-"), &test)
	return test, err
}

func main() {

	fmt.Println(withYaml2())
	fmt.Println(withYaml3())
}

yaml_test % go run main.go 
{[{}]} <nil>
{[]} <nil>

It seems like go-yaml/v3 is treating foo:\n- as a zero-length slice, whereas go-yaml/v2 treats it as a slice of length one whose entry has the zero value. IMO v2 is doing the right thing and v3 should be changed to match.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants