Skip to content

Commit 87fdaed

Browse files
author
Kristian
authored
Merge pull request #173 from v-yarotsky/vy-env-var-whitelist
Only expand concourse build metadata env vars
2 parents 50bee87 + 62ff546 commit 87fdaed

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

out.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func Put(request PutRequest, manager Github, inputDir string) (*PutResponse, err
4949
description = string(content)
5050
}
5151

52-
if err := manager.UpdateCommitStatus(version.Commit, p.BaseContext, p.Context, p.Status, os.ExpandEnv(p.TargetURL), description); err != nil {
52+
if err := manager.UpdateCommitStatus(version.Commit, p.BaseContext, p.Context, p.Status, safeExpandEnv(p.TargetURL), description); err != nil {
5353
return nil, fmt.Errorf("failed to set status: %s", err)
5454
}
5555
}
@@ -64,7 +64,7 @@ func Put(request PutRequest, manager Github, inputDir string) (*PutResponse, err
6464

6565
// Set comment if specified
6666
if p := request.Params; p.Comment != "" {
67-
err = manager.PostComment(version.PR, os.ExpandEnv(p.Comment))
67+
err = manager.PostComment(version.PR, safeExpandEnv(p.Comment))
6868
if err != nil {
6969
return nil, fmt.Errorf("failed to post comment: %s", err)
7070
}
@@ -78,7 +78,7 @@ func Put(request PutRequest, manager Github, inputDir string) (*PutResponse, err
7878
}
7979
comment := string(content)
8080
if comment != "" {
81-
err = manager.PostComment(version.PR, os.ExpandEnv(comment))
81+
err = manager.PostComment(version.PR, safeExpandEnv(comment))
8282
if err != nil {
8383
return nil, fmt.Errorf("failed to post comment: %s", err)
8484
}
@@ -140,3 +140,13 @@ func (p *PutParameters) Validate() error {
140140

141141
return nil
142142
}
143+
144+
func safeExpandEnv(s string) string {
145+
return os.Expand(s, func(v string) string {
146+
switch v {
147+
case "BUILD_ID", "BUILD_NAME", "BUILD_JOB_NAME", "BUILD_PIPELINE_NAME", "BUILD_TEAM_NAME", "ATC_EXTERNAL_URL":
148+
return os.Getenv(v)
149+
}
150+
return "$" + v
151+
})
152+
}

out_test.go

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,8 +220,8 @@ func TestPut(t *testing.T) {
220220
func TestVariableSubstitution(t *testing.T) {
221221

222222
var (
223-
variableName = "EXAMPLE_VARIABLE"
224-
variableValue = "value"
223+
variableName = "BUILD_JOB_NAME"
224+
variableValue = "my-job"
225225
variableURL = "https://concourse-ci.org/"
226226
)
227227

@@ -271,6 +271,24 @@ func TestVariableSubstitution(t *testing.T) {
271271
expectedTargetURL: fmt.Sprintf("%s%s", variableURL, variableValue),
272272
pullRequest: createTestPR(1, "master", false, false, 0, nil),
273273
},
274+
275+
{
276+
description: "we do not substitute variables other then concourse build metadata",
277+
source: resource.Source{
278+
Repository: "itsdalmo/test-repository",
279+
AccessToken: "oauthtoken",
280+
},
281+
version: resource.Version{
282+
PR: "pr1",
283+
Commit: "commit1",
284+
CommittedDate: time.Time{},
285+
},
286+
parameters: resource.PutParameters{
287+
Comment: "$THIS_IS_NOT_SUBSTITUTED",
288+
},
289+
expectedComment: "$THIS_IS_NOT_SUBSTITUTED",
290+
pullRequest: createTestPR(1, "master", false, false, 0, nil),
291+
},
274292
}
275293

276294
for _, tc := range tests {

0 commit comments

Comments
 (0)