fix: nil-pointer panic from custom type function

A DecodeCustomTypeFunc returning nil to mean "leave this pointer
field unset" panicked in reflect.Value.Set, since reflect.ValueOf(nil)
is the invalid zero Value. Guard against a nil return before Set.

This is the panic from #68/#69: the earlier fix routed pointer fields
through the generic Ptr recursion instead of guarding nil, which
discarded a custom function's own populated pointer result and had
to be reverted. Guarding val == nil directly fixes the panic without
touching the case that broke.
This commit is contained in:
dualfroz committed 2026-09-06 00:44:40 +02:00
1 parent 4a0a5220ce
commit 457aca4500
2 files changed
+35

No files matched your search

+5
View File
@@ -199,6 +199,11 @@ func (d *decoder) setFieldByType(current reflect.Value, namespace []byte, idx in
return
}
// Set would panic on the invalid zero Value, so nil leaves the field alone.
if val == nil {
return
}
v.Set(reflect.ValueOf(val))
set = true
return