Skip to content

Preserve all slice entries when zeroing a weakly decoded map - #216

Open
rupayon123 wants to merge 1 commit into
go-viper:mainfrom
rupayon123:fix/zero-fields-slice-merge-20261027
Open

rupayon123 wants to merge 1 commit into
go-viper:mainfrom
rupayon123:fix/zero-fields-slice-merge-20261027

Conversation

@rupayon123

Copy link
Copy Markdown

Combining WeaklyTypedInput and ZeroFields currently keeps only the last map in a slice. For example, decoding [{"a": 1}, {"b": 2}] produces {"b": 2} instead of the documented merged map.

Decode each item separately and accumulate its entries in the destination cleared for the whole slice. Nested values still use ZeroFields, later keys still win, and the decoder configuration stays unchanged. The temporary value retains the target observed by decode hooks.

Regressions cover map/array/interface slices, duplicate keys, empty and nil items, nested maps and slices, decoder reuse, partial errors and hook targets. Nine cases fail before the change; all 17 cases pass after it. The full race/shuffle suite, vet, build, configured formatting and golangci-lint 2.6.2 pass on macOS arm64 with Go 1.26.0. Other Go/OS combinations were not run locally.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant