github.com/ijc/docker-app@v0.6.1-0.20181012090447-c7ca8bc483fb/internal/yaml/yaml_test.go (about) 1 package yaml 2 3 import ( 4 "bytes" 5 "testing" 6 7 "gotest.tools/assert" 8 ) 9 10 func TestDecoderYamlBomb(t *testing.T) { 11 var v map[interface{}]interface{} 12 data := []byte(`version: "3" 13 services: &services ["lol","lol","lol","lol","lol","lol","lol","lol","lol"] 14 b: &b [*services,*services,*services,*services,*services,*services,*services,*services,*services] 15 c: &c [*b,*b,*b,*b,*b,*b,*b,*b,*b] 16 d: &d [*c,*c,*c,*c,*c,*c,*c,*c,*c] 17 e: &e [*d,*d,*d,*d,*d,*d,*d,*d,*d] 18 f: &f [*e,*e,*e,*e,*e,*e,*e,*e,*e] 19 g: &g [*f,*f,*f,*f,*f,*f,*f,*f,*f] 20 h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g] 21 i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]`) 22 d := NewDecoder(bytes.NewBuffer(data)) 23 err := d.Decode(&v) 24 assert.ErrorContains(t, err, "yaml: exceeded max number of decoded values (1000000)") 25 } 26 27 func TestUnmarshalYamlBomb(t *testing.T) { 28 var v map[interface{}]interface{} 29 data := []byte(`version: "3" 30 services: &services ["lol","lol","lol","lol","lol","lol","lol","lol","lol"] 31 b: &b [*services,*services,*services,*services,*services,*services,*services,*services,*services] 32 c: &c [*b,*b,*b,*b,*b,*b,*b,*b,*b] 33 d: &d [*c,*c,*c,*c,*c,*c,*c,*c,*c] 34 e: &e [*d,*d,*d,*d,*d,*d,*d,*d,*d] 35 f: &f [*e,*e,*e,*e,*e,*e,*e,*e,*e] 36 g: &g [*f,*f,*f,*f,*f,*f,*f,*f,*f] 37 h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g] 38 i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]`) 39 err := Unmarshal(data, &v) 40 assert.ErrorContains(t, err, "yaml: exceeded max number of decoded values (1000000)") 41 }