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:
Sebastiaan van Stijn
2026-08-02 15:38:40 +02:00
parent c5b8ce9274
commit 7067ffff11

View File

@@ -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.