$ the-wire · showcase
Go 1.27 unified V5 export data, then reverted
By RepoJournal · Filed · About Go
cmd/compile support for unified V5 export data landed and was reverted the same day after breaking the build.
The Go compiler added support for unified V5 export data [1], which reorders method encoding to preserve source order for named types, fixing crashes in applications using objectpath (issue #81188). This is a narrow but important fix for x/tools users. The commit was then reverted [2] because it broke the build, so V5 support will need to land again before Go 1.27. In the interim, cmd/vendor was updated to x/tools 89ed5c3, which includes the V5 decoder [3]; that change stays in place.
Meanwhile, the runtime hardened interface hashing by folding the type into the hash computation [4], preventing intentional collisions where int64(0) and uint64(0) in interfaces previously hashed identically. This addresses a hash-flooding concern (issue #81299). Separately, net/http now populates Request.TLS from HTTP/2 connection state [5], fixing a nil TLS field for requests through TLS proxies and CONNECT requests when the internal HTTP/2 server is called directly.
In the build repo, storage errors are now matched with errors.Is [6], adapting to cloud.google.com/go/storage v1.51.0's wrapped errors, and a regression test was added to cover the affected functionality [7]. Relui now runs with the race detector enabled [8] to catch data races in real workflows.
Action items
- → Watch for the re-landing of unified V5 export data before Go 1.27 golang/go [plan]
- → If you use x/tools objectpath on Go 1.27, test against the latest x/tools decoder golang/go [plan]
- → Review interface-heavy code for hash-flooding exposure; patch is in Go master golang/go [monitor]
References
- [1] cmd/compile: support unified V5 export data (method indices) ↗ golang/go
- [2] Revert "cmd/compile: support unified V5 export data (method indices)" ↗ golang/go
- [3] cmd/vendor: update golang.org/x/tools to 89ed5c3 ↗ golang/go
- [4] runtime: fold interface type into hash ↗ golang/go
- [5] net/http: populate Request.TLS from HTTP/2 connection state ↗ golang/go
- [6] all: match storage errors with errors.Is ↗ golang/build
- [7] internal/gcsfs: run TestGCSFS on a subset of a bucket ↗ golang/build
- [8] cmd/relui: enable race detector ↗ golang/build