Skip to content

Commit 5a7f297

Browse files
authored
Frogbot shouldn't attempt upgrading Go and Pip (#315)
1 parent a0f1ed6 commit 5a7f297

File tree

6 files changed

+28
-24
lines changed

6 files changed

+28
-24
lines changed

commands/createfixpullrequests.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/jfrog/jfrog-client-go/utils/io/fileutils"
1313
"github.com/jfrog/jfrog-client-go/utils/log"
1414
"github.com/jfrog/jfrog-client-go/xray/services"
15+
"golang.org/x/exp/slices"
1516
"os"
1617
"strings"
1718
)
@@ -305,6 +306,13 @@ func (cfp *CreateFixPullRequestsCmd) updatePackageToFixedVersion(impactedPackage
305306
}
306307
}()
307308
}
309+
// Skip build tools dependencies (for example, pip)
310+
// That are not defined in the descriptor file and cannot be fixed by a PR.
311+
if slices.Contains(utils.BuildToolsDependenciesMap[fixVersionInfo.PackageType], impactedPackage) {
312+
log.Info("Skipping vulnerable package", impactedPackage, "since it is not defined in your package descriptor file.",
313+
"Update", impactedPackage, "version to", fixVersionInfo.FixVersion, "to fix this vulnerability.")
314+
return
315+
}
308316
packageHandler := packagehandlers.GetCompatiblePackageHandler(fixVersionInfo, cfp.details, &cfp.mavenDepToPropertyMap)
309317
return packageHandler.UpdateImpactedPackage(impactedPackage, fixVersionInfo)
310318
}

commands/createfixpullrequests_test.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@ type packageFixTest struct {
2525
fixVersion string
2626
packageDescriptor string
2727
testPath string
28+
shouldNotFix bool
2829
fixPackageVersionCmd FixPackagesTestFunc
2930
}
3031

3132
var packageFixTests = []packageFixTest{
3233
{technology: coreutils.Maven, impactedPackaged: "junit", fixVersion: "4.11", packageDescriptor: "pom.xml", fixPackageVersionCmd: getMavenFixPackageVersionFunc()},
3334
{technology: coreutils.Npm, impactedPackaged: "minimatch", fixVersion: "3.0.2", packageDescriptor: "package.json", fixPackageVersionCmd: getGenericFixPackageVersionFunc()},
3435
{technology: coreutils.Go, impactedPackaged: "github.com/google/uuid", fixVersion: "1.3.0", packageDescriptor: "go.mod", fixPackageVersionCmd: getGenericFixPackageVersionFunc()},
36+
{technology: coreutils.Go, impactedPackaged: "github.com/golang/go", fixVersion: "1.20.3", packageDescriptor: "go.mod", fixPackageVersionCmd: getGenericFixPackageVersionFunc(), shouldNotFix: true},
3537
{technology: coreutils.Yarn, impactedPackaged: "minimist", fixVersion: "1.2.6", packageDescriptor: "package.json", fixPackageVersionCmd: getGenericFixPackageVersionFunc()},
3638
{technology: coreutils.Pipenv, impactedPackaged: "pyjwt", fixVersion: "2.4.0", packageDescriptor: "Pipfile", fixPackageVersionCmd: getGenericFixPackageVersionFunc()},
3739
{technology: coreutils.Pipenv, impactedPackaged: "Pyjwt", fixVersion: "2.4.0", packageDescriptor: "Pipfile", fixPackageVersionCmd: getGenericFixPackageVersionFunc()},
@@ -40,6 +42,9 @@ var packageFixTests = []packageFixTest{
4042
{technology: coreutils.Pip, impactedPackaged: "pyjwt", fixVersion: "2.4.0", packageDescriptor: "requirements.txt", fixPackageVersionCmd: getGenericFixPackageVersionFunc()},
4143
{technology: coreutils.Pip, impactedPackaged: "PyJwt", fixVersion: "2.4.0", packageDescriptor: "requirements.txt", fixPackageVersionCmd: getGenericFixPackageVersionFunc()},
4244
{technology: coreutils.Pip, impactedPackaged: "pyjwt", fixVersion: "2.4.0", packageDescriptor: "setup.py", fixPackageVersionCmd: getGenericFixPackageVersionFunc()},
45+
{technology: coreutils.Pip, impactedPackaged: "pip", fixVersion: "23.1", packageDescriptor: "setup.py", fixPackageVersionCmd: getGenericFixPackageVersionFunc(), shouldNotFix: true},
46+
{technology: coreutils.Pip, impactedPackaged: "wheel", fixVersion: "2.3.0", packageDescriptor: "setup.py", fixPackageVersionCmd: getGenericFixPackageVersionFunc(), shouldNotFix: true},
47+
{technology: coreutils.Pip, impactedPackaged: "setuptools", fixVersion: "66.6.6", packageDescriptor: "setup.py", fixPackageVersionCmd: getGenericFixPackageVersionFunc(), shouldNotFix: true},
4348
}
4449

4550
var requirementsFile = "oslo.config>=1.12.1,<1.13\noslo.utils<5.0,>=4.0.0\nparamiko==2.7.2\npasslib<=1.7.4\nprance>=0.9.0\nprompt-toolkit~=1.0.15\npyinotify>0.9.6\nPyJWT>1.7.1\nurllib3 > 1.1.9, < 1.5.*"
@@ -150,9 +155,13 @@ func TestFixPackageVersion(t *testing.T) {
150155
assert.NoError(t, cfg.updatePackageToFixedVersion(test.impactedPackaged, fixVersionInfo))
151156
file, err := os.ReadFile(test.packageDescriptor)
152157
assert.NoError(t, err)
153-
assert.Contains(t, string(file), test.fixVersion)
154-
// Verify that case-sensitive packages in python are lowered
155-
assert.Contains(t, string(file), strings.ToLower(test.impactedPackaged))
158+
if test.shouldNotFix {
159+
assert.NotContains(t, string(file), test.fixVersion)
160+
} else {
161+
assert.Contains(t, string(file), test.fixVersion)
162+
// Verify that case-sensitive packages in python are lowered
163+
assert.Contains(t, string(file), strings.ToLower(test.impactedPackaged))
164+
}
156165
})
157166
}()
158167
}

commands/utils/packagehandlers/genericpackagehandler.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,14 @@ type PackageHandler interface {
1414
UpdateImpactedPackage(impactedPackage string, fixVersionInfo *utils.FixVersionInfo, extraArgs ...string) error
1515
}
1616

17-
func GetCompatiblePackageHandler(fixVersionInfo *utils.FixVersionInfo, pipfilePath *utils.ScanDetails, mavenPropertyMap *map[string][]string) PackageHandler {
17+
func GetCompatiblePackageHandler(fixVersionInfo *utils.FixVersionInfo, details *utils.ScanDetails, mavenPropertyMap *map[string][]string) PackageHandler {
1818
switch fixVersionInfo.PackageType {
19-
case coreutils.Go:
20-
return &GoPackageHandler{}
2119
case coreutils.Maven:
2220
return &MavenPackageHandler{mavenDepToPropertyMap: *mavenPropertyMap}
2321
case coreutils.Poetry:
2422
return &PythonPackageHandler{}
2523
case coreutils.Pip:
26-
return &PythonPackageHandler{pipRequirementsFile: pipfilePath.PipRequirementsFile}
24+
return &PythonPackageHandler{pipRequirementsFile: details.PipRequirementsFile}
2725
default:
2826
return &GenericPackageHandler{FixVersionInfo: fixVersionInfo}
2927
}

commands/utils/packagehandlers/gopackagehandler.go

Lines changed: 0 additions & 15 deletions
This file was deleted.

commands/utils/packagehandlers/pythonpackagehandler.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ const (
1515

1616
// Package names are case-insensitive with this prefix
1717
PythonPackageRegexPrefix = "(?i)"
18-
1918
// Match all possible operators and versions syntax
2019
PythonPackageRegexSuffix = "\\s*(([\\=\\<\\>\\~]=)|([\\>\\<]))\\s*(\\.|\\d)*(\\d|(\\.\\*))(\\,\\s*(([\\=\\<\\>\\~]=)|([\\>\\<])).*\\s*(\\.|\\d)*(\\d|(\\.\\*)))?"
2120
)
@@ -35,7 +34,7 @@ func (py *PythonPackageHandler) UpdateImpactedPackage(impactedPackage string, fi
3534
case coreutils.Pipenv:
3635
return py.GenericPackageHandler.UpdateImpactedPackage(impactedPackage, fixVersionInfo, extraArgs...)
3736
default:
38-
return errors.New("Unknown python package manger: " + fixVersionInfo.PackageType.GetPackageType())
37+
return errors.New("unknown python package manger: " + fixVersionInfo.PackageType.GetPackageType())
3938
}
4039
}
4140

commands/utils/utils.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ var (
4141
branchInvalidCharsRegex = regexp.MustCompile(branchNameRegex)
4242
)
4343

44+
var BuildToolsDependenciesMap = map[coreutils.Technology][]string{
45+
coreutils.Go: {"github.com/golang/go"},
46+
coreutils.Pip: {"pip", "setuptools", "wheel"},
47+
}
48+
4449
type ErrMissingEnv struct {
4550
VariableName string
4651
}

0 commit comments

Comments
 (0)