File tree Expand file tree Collapse file tree 2 files changed +31
-0
lines changed
staging/src/k8s.io/apimachinery/pkg/util/yaml Expand file tree Collapse file tree 2 files changed +31
-0
lines changed Original file line number Diff line number Diff line change @@ -92,6 +92,10 @@ type YAMLDecoder struct {
92
92
// the caller in framing the chunk.
93
93
func NewDocumentDecoder (r io.ReadCloser ) io.ReadCloser {
94
94
scanner := bufio .NewScanner (r )
95
+ // the size of initial allocation for buffer 4k
96
+ buf := make ([]byte , 4 * 1024 )
97
+ // the maximum size used to buffer a token 5M
98
+ scanner .Buffer (buf , 5 * 1024 * 1024 )
95
99
scanner .Split (splitYAMLDocument )
96
100
return & YAMLDecoder {
97
101
r : r ,
Original file line number Diff line number Diff line change @@ -54,6 +54,33 @@ stuff: 1
54
54
}
55
55
}
56
56
57
+ func TestBigYAML (t * testing.T ) {
58
+ d := `
59
+ stuff: 1
60
+ `
61
+ maxLen := 5 * 1024 * 1024
62
+ bufferLen := 4 * 1024
63
+ // maxLen 5 M
64
+ dd := strings .Repeat (d , 512 * 1024 )
65
+ r := NewDocumentDecoder (ioutil .NopCloser (bytes .NewReader ([]byte (dd [:maxLen - 1 ]))))
66
+ b := make ([]byte , bufferLen )
67
+ n , err := r .Read (b )
68
+ if err != io .ErrShortBuffer {
69
+ t .Fatalf ("expected ErrShortBuffer: %d / %v" , n , err )
70
+ }
71
+ b = make ([]byte , maxLen )
72
+ n , err = r .Read (b )
73
+ if err != nil {
74
+ t .Fatalf ("expected nil: %d / %v" , n , err )
75
+ }
76
+ r = NewDocumentDecoder (ioutil .NopCloser (bytes .NewReader ([]byte (dd ))))
77
+ b = make ([]byte , maxLen )
78
+ n , err = r .Read (b )
79
+ if err != bufio .ErrTooLong {
80
+ t .Fatalf ("bufio.Scanner: token too long: %d / %v" , n , err )
81
+ }
82
+ }
83
+
57
84
func TestYAMLDecoderCallsAfterErrShortBufferRestOfFrame (t * testing.T ) {
58
85
d := `---
59
86
stuff: 1
You can’t perform that action at this time.
0 commit comments