Fix stdlib detection across Go toolchain versions - #364
Open
Ahmetshbzz wants to merge 1 commit into
Open
Conversation
Resolve GOROOT through the same go command used by package loading instead of relying on the tool build-time go/build default. This keeps standard-library detection correct when a prebuilt go-licenses binary scans a module with a newer downloaded toolchain. Use filepath.Rel against GOROOT/src to avoid path-prefix collisions and add regression coverage for mismatched build and active toolchain roots, prefix collisions, and the unsafe package special case.
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
Author
|
I have completed the Google Individual Contributor License Agreement. The CLA check still appears to show the earlier failed invocation; please let me know if any additional action is required on my side. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
GOROOTfrom the activegocommand used for package loadingGOROOT/srcunsafespecial caseProblem
isStdLibcurrently readsbuild.Default.GOROOT, which belongs to the toolchain that compiled thego-licensesbinary. When that prebuilt binary scans a module through a different or auto-downloaded Go toolchain,packages.Loadreturns standard-library files from the active toolchain GOROOT. The paths no longer match, so standard-library packages are treated as third-party packages without module metadata.This reproduces the
Package ... does not have module infofailures reported in #302 and #335.Verification
go test ./licenses ./internal/...go vet ./...-ldflags "-X runtime.defaultGOROOT=/tmp/go-licenses-build-toolchain"and rango-licenses csv ./...with Go 1.26.6; no standard-library module-info errors were emittedgo test ./...reaches the existing E2E suite but locally has an unrelated golden drift forgolang.org/x/sys(golang.org/x/sysversusgolang.org/x/sys/unix)Fixes #302
Fixes #335