Skip to content

Commit

Permalink
Merge pull request #147 from gabemontero/s2i-bump
Browse files Browse the repository at this point in the history
Bug 1884270: bypass golang url parsing with scp styled ssh git URLs; refactor URL for older git clients
  • Loading branch information
openshift-merge-robot committed Oct 8, 2020
2 parents 47cd22d + 36d8c8d commit 2c5cc06
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
8 changes: 8 additions & 0 deletions pkg/build/apis/build/validation/s2i_validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ type URL struct {
// Parse parses a "Git URL"
func parseGitURL(rawurl string) (*URL, error) {
if urlSchemeRegexp.MatchString(rawurl) &&
// at least through golang 1.14.9, url.Parse cannot handle ssh://git@github.com:sclorg/nodejs-ex
!strings.HasPrefix(rawurl, "ssh://") &&
(runtime.GOOS != "windows" || !dosDriveRegexp.MatchString(rawurl)) {
u, err := url.Parse(rawurl)
if err != nil {
Expand All @@ -76,6 +78,12 @@ func parseGitURL(rawurl string) (*URL, error) {
}, nil
}

// if ssh://git@github.com:sclorg/nodejs-ex then strip ssh:// a la what we
// see in other upstream git parsing handling of scp styled git URLs;
if strings.HasPrefix(rawurl, "ssh://") {
rawurl = strings.Trim(rawurl, "ssh://")
}

s, fragment := splitOnByte(rawurl, '#')

if m := scpRegexp.FindStringSubmatch(s); m != nil &&
Expand Down
30 changes: 30 additions & 0 deletions pkg/build/apis/build/validation/validation_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,36 @@ func TestBuildValidationFailure(t *testing.T) {
}
}

func TestBuildValidationWithSCPStyledURL(t *testing.T) {
build := &buildapi.Build{
ObjectMeta: metav1.ObjectMeta{Name: "", Namespace: ""},
Spec: buildapi.BuildSpec{
CommonSpec: buildapi.CommonSpec{
Source: buildapi.BuildSource{
Git: &buildapi.GitBuildSource{
URI: "ssh://git@github.com:sclorg/nodejs-ex",
},
},
Strategy: buildapi.BuildStrategy{
DockerStrategy: &buildapi.DockerBuildStrategy{},
},
Output: buildapi.BuildOutput{
To: &kapi.ObjectReference{
Kind: "DockerImage",
Name: "repository/data",
},
},
},
},
Status: buildapi.BuildStatus{
Phase: buildapi.BuildPhaseNew,
},
}
if result := ValidateBuild(build); len(result) != 2 {
t.Errorf("Unexpected validation result: %v", result)
}
}

func newDefaultParameters() buildapi.BuildSpec {
return buildapi.BuildSpec{
CommonSpec: buildapi.CommonSpec{
Expand Down

0 comments on commit 2c5cc06

Please sign in to comment.