mirror of
https://github.com/moby/moby.git
synced 2026-08-08 17:11:38 +00:00
daemon/pkg/opts: fix recursive NRI JSON decoding on go1.27 (JSON v2)
Define the recursion-prevention type from NRIOpts instead of *NRIOpts. The named pointer type was handled correctly by the legacy JSON decoder, but Go 1.27's new JSON implementation resolves NRIOpts.UnmarshalJSON through it, causing infinite recursion and eventually a stack overflow. Using a distinct type with NRIOpts as its underlying type removes the method set while preserving the same fields and JSON representation. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
@@ -19,11 +19,8 @@ type NRIOpts struct {
|
||||
func (c *NRIOpts) UnmarshalJSON(raw []byte) error {
|
||||
dec := json.NewDecoder(bytes.NewReader(raw))
|
||||
dec.DisallowUnknownFields()
|
||||
type nc *NRIOpts // prevent recursion
|
||||
if err := dec.Decode(nc(c)); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
type nriOpts NRIOpts // prevent recursion
|
||||
return dec.Decode((*nriOpts)(c))
|
||||
}
|
||||
|
||||
// NamedNRIOpts is a NamedOption and flags.Value for NRI configuration parsing.
|
||||
|
||||
Reference in New Issue
Block a user