@@ -15,17 +15,28 @@ func expandVariables(data []byte) ([]byte, error) {
15
15
// expandTransformer implements transform.Transformer
16
16
type expandTransformer struct {
17
17
transform.NopResetter
18
+
19
+ tail * bytes.Buffer
18
20
}
19
21
20
22
func newExpandTransformer () * expandTransformer {
21
- return & expandTransformer {}
23
+ return & expandTransformer {
24
+ tail : new (bytes.Buffer ),
25
+ }
22
26
}
23
27
24
28
// Transform -
25
29
func (t * expandTransformer ) Transform (dst , src []byte , atEOF bool ) (int , int , error ) {
26
- var buf bytes.Buffer
30
+ buf := new ( bytes.Buffer )
27
31
var index int
28
32
33
+ srcLen := len (src )
34
+
35
+ if t .tail != nil && t .tail .Len () > 0 {
36
+ src = append (t .tail .Bytes (), src ... )
37
+ t .tail .Reset ()
38
+ }
39
+
29
40
startIndex := bytes .Index (src , []byte {'$' , '{' })
30
41
for startIndex != - 1 {
31
42
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
34
45
var name , def string
35
46
36
47
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
+
37
55
separatorIndex := bytes .Index (src [startIndex + index :startIndex + index + endIndex ], []byte {':' , '-' })
38
56
if separatorIndex == - 1 {
39
57
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
62
80
return 0 , 0 , err
63
81
}
64
82
65
- return copy (dst , buf .Bytes ()), len ( src ) , nil
83
+ return copy (dst , buf .Bytes ()), srcLen , nil
66
84
}
0 commit comments