@@ -15,17 +15,28 @@ func expandVariables(data []byte) ([]byte, error) {
1515// expandTransformer implements transform.Transformer
1616type expandTransformer struct {
1717 transform.NopResetter
18+
19+ tail * bytes.Buffer
1820}
1921
2022func newExpandTransformer () * expandTransformer {
21- return & expandTransformer {}
23+ return & expandTransformer {
24+ tail : new (bytes.Buffer ),
25+ }
2226}
2327
2428// Transform -
2529func (t * expandTransformer ) Transform (dst , src []byte , atEOF bool ) (int , int , error ) {
26- var buf bytes.Buffer
30+ buf := new ( bytes.Buffer )
2731 var index int
2832
33+ srcLen := len (src )
34+
35+ if t .tail .Len () > 0 {
36+ src = append (t .tail .Bytes (), src ... )
37+ t .tail .Reset ()
38+ }
39+
2940 startIndex := bytes .Index (src , []byte {'$' , '{' })
3041 for startIndex != - 1 {
3142 if _ , err := buf .Write (src [index : startIndex + index ]); err != nil {
@@ -34,6 +45,13 @@ func (t *expandTransformer) Transform(dst, src []byte, atEOF bool) (int, int, er
3445 var name , def string
3546
3647 endIndex := bytes .Index (src [startIndex + index :], []byte {'}' })
48+ if endIndex == - 1 {
49+ if _ , err := t .tail .Write (src [startIndex + index :]); err != nil {
50+ return 0 , 0 , err
51+ }
52+ return copy (dst , buf .Bytes ()), srcLen , nil
53+ }
54+
3755 separatorIndex := bytes .Index (src [startIndex + index :startIndex + index + endIndex ], []byte {':' , '-' })
3856 if separatorIndex == - 1 {
3957 name = string (src [startIndex + index + 2 : startIndex + index + endIndex ])
@@ -62,5 +80,5 @@ func (t *expandTransformer) Transform(dst, src []byte, atEOF bool) (int, int, er
6280 return 0 , 0 , err
6381 }
6482
65- return copy (dst , buf .Bytes ()), len ( src ) , nil
83+ return copy (dst , buf .Bytes ()), srcLen , nil
6684}
0 commit comments