}
return nil
}
- for _, info := range godebugs.All {
- if k == info.Name {
- return nil
+ if godebugs.Lookup(k) != nil {
+ return nil
+ }
+ for _, info := range godebugs.Removed {
+ if info.Name == k {
+ return fmt.Errorf("use of removed %s %q, see https://go.dev/doc/godebug#go-1%v", verb, k, info.Removed)
}
}
return fmt.Errorf("unknown %s %q", verb, k)
--- /dev/null
+# Test case that makes sure we print a nice error message
+# instead of the generic "unknown godebug" error message
+# for removed GODEBUGs.
+
+! go list
+stderr '^go.mod:3: use of removed godebug "x509sha1", see https://go.dev/doc/godebug#go-124$'
+
+-- go.mod --
+module example.com/bar
+
+godebug x509sha1=1
}
return seen
}
+
+func TestRemoved(t *testing.T) {
+ for _, info := range godebugs.Removed {
+ if godebugs.Lookup(info.Name) != nil {
+ t.Fatalf("GODEBUG: %v exists in both Removed and All", info.Name)
+ }
+ }
+}
{Name: "zipinsecurepath", Package: "archive/zip"},
}
+type RemovedInfo struct {
+ Name string // name of the removed GODEBUG setting.
+ Removed int // minor version of Go, when the removal happened
+}
+
+// Removed contains all GODEBUGs that we have removed.
+var Removed = []RemovedInfo{
+ {Name: "x509sha1", Removed: 24},
+}
+
// Lookup returns the Info with the given name.
func Lookup(name string) *Info {
// binary search, avoiding import of sort.