Skip to content

Commit f501753

Browse files
authored
fix: handle go replace directives in MVS version resolution (#505)
1 parent d2fee6b commit f501753

4 files changed

Lines changed: 41 additions & 30 deletions

File tree

src/providers/golang_gomodules.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -354,13 +354,7 @@ function getFinalPackagesVersionsForModule(rows, manifestPath, goBin) {
354354
throw new Error('failed to list all modules', {cause: error})
355355
}
356356

357-
let finalVersionModules = new Map()
358-
finalVersionsForAllModules.split(getLineSeparatorGolang()).filter(string => string.trim()!== "")
359-
.filter(string => string.trim().split(" ").length === 2)
360-
.forEach((dependency) => {
361-
let dep = dependency.split(" ")
362-
finalVersionModules[dep[0]] = dep[1]
363-
})
357+
let finalVersionModules = parseModuleVersions(finalVersionsForAllModules)
364358
let finalVersionModulesArray = new Array()
365359
rows.filter(string => string.trim()!== "").forEach( module => {
366360
let child = getChildVertexFromEdge(module)
@@ -424,6 +418,20 @@ function getVersionOfPackage(fullPackage) {
424418
return parts.length > 1 ? parts[1] : undefined
425419
}
426420

421+
function parseModuleVersions(goListOutput) {
422+
let modules = {}
423+
goListOutput.split(getLineSeparatorGolang()).filter(string => string.trim() !== "")
424+
.forEach((line) => {
425+
let parts = line.trim().split(" ")
426+
if (parts.length === 2) {
427+
modules[parts[0]] = parts[1]
428+
} else if (parts.length >= 4 && parts[2] === "=>") {
429+
modules[parts[0]] = parts[parts.length - 1]
430+
}
431+
})
432+
return modules
433+
}
434+
427435
function getLineSeparatorGolang() {
428436
let reg = /\n|\r\n/
429437
return reg

test/providers/tst_manifests/golang/go_mod_light_no_ignore/expected_sbom_stack_analysis.json

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@
2525
{
2626
"group": "golang.org/x",
2727
"name": "tools",
28-
"version": "v0.0.0-20210112183307-1e6ecd4bf1b0",
29-
"purl": "pkg:golang/golang.org/x/tools@v0.0.0-20210112183307-1e6ecd4bf1b0",
28+
"version": "v0.1.0",
29+
"purl": "pkg:golang/golang.org/x/tools@v0.1.0",
3030
"type": "library",
31-
"bom-ref": "pkg:golang/golang.org/x/tools@v0.0.0-20210112183307-1e6ecd4bf1b0"
31+
"bom-ref": "pkg:golang/golang.org/x/tools@v0.1.0"
3232
},
3333
{
3434
"group": "github.com/BurntSushi",
@@ -118,6 +118,14 @@
118118
"type": "library",
119119
"bom-ref": "pkg:golang/golang.org/x/sync@v0.0.0-20201020160332-67f06af15bc9"
120120
},
121+
{
122+
"group": "golang.org/x",
123+
"name": "sys",
124+
"version": "v0.0.0-20210119212857-b64e53b001e4",
125+
"purl": "pkg:golang/golang.org/x/sys@v0.0.0-20210119212857-b64e53b001e4",
126+
"type": "library",
127+
"bom-ref": "pkg:golang/golang.org/x/sys@v0.0.0-20210119212857-b64e53b001e4"
128+
},
121129
{
122130
"group": "golang.org/x",
123131
"name": "xerrors",
@@ -278,14 +286,6 @@
278286
"type": "library",
279287
"bom-ref": "pkg:golang/golang.org/x/crypto@v0.0.0-20200622213623-75b288015ac9"
280288
},
281-
{
282-
"group": "golang.org/x",
283-
"name": "sys",
284-
"version": "v0.0.0-20200930185726-fdedc70b468f",
285-
"purl": "pkg:golang/golang.org/x/sys@v0.0.0-20200930185726-fdedc70b468f",
286-
"type": "library",
287-
"bom-ref": "pkg:golang/golang.org/x/sys@v0.0.0-20200930185726-fdedc70b468f"
288-
},
289289
{
290290
"group": "golang.org/x",
291291
"name": "text",
@@ -316,7 +316,7 @@
316316
"ref": "pkg:golang/golang.org/x/example@v0.0.0",
317317
"dependsOn": [
318318
"pkg:golang/github.com/spf13/cobra@v0.0.5",
319-
"pkg:golang/golang.org/x/tools@v0.0.0-20210112183307-1e6ecd4bf1b0"
319+
"pkg:golang/golang.org/x/tools@v0.1.0"
320320
]
321321
},
322322
{
@@ -332,12 +332,13 @@
332332
]
333333
},
334334
{
335-
"ref": "pkg:golang/golang.org/x/tools@v0.0.0-20210112183307-1e6ecd4bf1b0",
335+
"ref": "pkg:golang/golang.org/x/tools@v0.1.0",
336336
"dependsOn": [
337337
"pkg:golang/github.com/yuin/goldmark@v1.2.1",
338338
"pkg:golang/golang.org/x/mod@v0.3.0",
339339
"pkg:golang/golang.org/x/net@v0.0.0-20201021035429-f5854403a974",
340340
"pkg:golang/golang.org/x/sync@v0.0.0-20201020160332-67f06af15bc9",
341+
"pkg:golang/golang.org/x/sys@v0.0.0-20210119212857-b64e53b001e4",
341342
"pkg:golang/golang.org/x/xerrors@v0.0.0-20200804184101-5ec99f83aff1"
342343
]
343344
},
@@ -383,7 +384,7 @@
383384
"pkg:golang/github.com/ugorji/go/codec@v0.0.0-20181204163529-d75b2dcb6bc8",
384385
"pkg:golang/github.com/xordataexchange/crypt@v0.0.3-0.20170626215501-b2862e3d0a77",
385386
"pkg:golang/golang.org/x/crypto@v0.0.0-20200622213623-75b288015ac9",
386-
"pkg:golang/golang.org/x/sys@v0.0.0-20200930185726-fdedc70b468f",
387+
"pkg:golang/golang.org/x/sys@v0.0.0-20210119212857-b64e53b001e4",
387388
"pkg:golang/golang.org/x/text@v0.3.3",
388389
"pkg:golang/gopkg.in/yaml.v2@v2.2.2"
389390
]
@@ -402,22 +403,26 @@
402403
"ref": "pkg:golang/golang.org/x/mod@v0.3.0",
403404
"dependsOn": [
404405
"pkg:golang/golang.org/x/crypto@v0.0.0-20200622213623-75b288015ac9",
405-
"pkg:golang/golang.org/x/tools@v0.0.0-20210112183307-1e6ecd4bf1b0",
406+
"pkg:golang/golang.org/x/tools@v0.1.0",
406407
"pkg:golang/golang.org/x/xerrors@v0.0.0-20200804184101-5ec99f83aff1"
407408
]
408409
},
409410
{
410411
"ref": "pkg:golang/golang.org/x/net@v0.0.0-20201021035429-f5854403a974",
411412
"dependsOn": [
412413
"pkg:golang/golang.org/x/crypto@v0.0.0-20200622213623-75b288015ac9",
413-
"pkg:golang/golang.org/x/sys@v0.0.0-20200930185726-fdedc70b468f",
414+
"pkg:golang/golang.org/x/sys@v0.0.0-20210119212857-b64e53b001e4",
414415
"pkg:golang/golang.org/x/text@v0.3.3"
415416
]
416417
},
417418
{
418419
"ref": "pkg:golang/golang.org/x/sync@v0.0.0-20201020160332-67f06af15bc9",
419420
"dependsOn": []
420421
},
422+
{
423+
"ref": "pkg:golang/golang.org/x/sys@v0.0.0-20210119212857-b64e53b001e4",
424+
"dependsOn": []
425+
},
421426
{
422427
"ref": "pkg:golang/golang.org/x/xerrors@v0.0.0-20200804184101-5ec99f83aff1",
423428
"dependsOn": []
@@ -506,17 +511,13 @@
506511
"ref": "pkg:golang/golang.org/x/crypto@v0.0.0-20200622213623-75b288015ac9",
507512
"dependsOn": [
508513
"pkg:golang/golang.org/x/net@v0.0.0-20201021035429-f5854403a974",
509-
"pkg:golang/golang.org/x/sys@v0.0.0-20200930185726-fdedc70b468f"
514+
"pkg:golang/golang.org/x/sys@v0.0.0-20210119212857-b64e53b001e4"
510515
]
511516
},
512-
{
513-
"ref": "pkg:golang/golang.org/x/sys@v0.0.0-20200930185726-fdedc70b468f",
514-
"dependsOn": []
515-
},
516517
{
517518
"ref": "pkg:golang/golang.org/x/text@v0.3.3",
518519
"dependsOn": [
519-
"pkg:golang/golang.org/x/tools@v0.0.0-20210112183307-1e6ecd4bf1b0"
520+
"pkg:golang/golang.org/x/tools@v0.1.0"
520521
]
521522
},
522523
{

test/providers/tst_manifests/golang/go_mod_light_no_ignore/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ require github.com/spf13/cobra v0.0.5
77

88
require gopkg.in/yaml.v3 v3.0.1 // indirect
99

10-
10+
replace golang.org/x/tools v0.0.0-20210112183307-1e6ecd4bf1b0 => golang.org/x/tools v0.1.0

test/providers/tst_manifests/golang/go_mod_light_no_ignore/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,13 @@ golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5h
3838
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
3939
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
4040
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
41+
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
4142
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
4243
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
4344
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
4445
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
4546
golang.org/x/tools v0.0.0-20210112183307-1e6ecd4bf1b0/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
47+
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
4648
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
4749
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
4850
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

0 commit comments

Comments
 (0)