Escape newlines in env var substitution

This commit is contained in:
execjosh 2017-07-19 19:16:09 +09:00
parent 0abe9f6daf
commit 1beaab12e8
2 changed files with 37 additions and 1 deletions

View file

@ -8,6 +8,7 @@ import (
"math/rand" "math/rand"
"regexp" "regexp"
"strconv" "strconv"
"strings"
"time" "time"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@ -461,7 +462,11 @@ func (b *builder) Build() ([]*buildItem, error) {
y := b.Yaml y := b.Yaml
s, err := envsubst.Eval(y, func(name string) string { s, err := envsubst.Eval(y, func(name string) string {
return environ[name] env := environ[name]
if strings.Contains(env, "\n") {
env = fmt.Sprintf("%q", env)
}
return env
}) })
if err != nil { if err != nil {
return nil, err return nil, err

31
server/hook_test.go Normal file
View file

@ -0,0 +1,31 @@
package server
import (
"testing"
"github.com/drone/drone/model"
)
func TestMultilineEnvsubst(t *testing.T) {
b := builder{
Repo: &model.Repo{},
Curr: &model.Build{
Message: `aaa
bbb`,
},
Last: &model.Build{},
Netrc: &model.Netrc{},
Secs: []*model.Secret{},
Regs: []*model.Registry{},
Link: "",
Yaml: `pipeline:
xxx:
image: scratch
yyy: ${DRONE_COMMIT_MESSAGE}
`,
}
if _, err := b.Build(); err != nil {
t.Fatal(err)
}
}