From 0ade4ff77b2ced2f450f86102c5b9fd4f01531ec Mon Sep 17 00:00:00 2001 From: Luc Talatinian Date: Fri, 31 Jul 2026 15:19:05 -0400 Subject: [PATCH] fix schema-serde sparse collection deser to not point to the same value --- .../amazon/smithy/go/codegen/serde2/ListDeserializer.java | 4 +++- .../amazon/smithy/go/codegen/serde2/MapDeserializer.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/serde2/ListDeserializer.java b/codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/serde2/ListDeserializer.java index 20a4f849..6df9bf0d 100644 --- a/codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/serde2/ListDeserializer.java +++ b/codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/serde2/ListDeserializer.java @@ -69,7 +69,6 @@ private void renderDense(GoWriter writer) { private void renderSparse(GoWriter writer) { writer.writeGoTemplate(""" func deserialize$shapeName:L(d smithy.ShapeDeserializer, s *smithy.Schema, v *$symbol:T) error { - var vv $memberSymbol:T return smithy.ReadList(d, s, func() error { if isNil, err := d.ReadNil(s.ListMember()); err != nil { return err @@ -78,6 +77,9 @@ private void renderSparse(GoWriter writer) { return nil } + // vv must be declared per-element for sparse since we + // are taking its pointer + var vv $memberSymbol:T $zeroValue:W if err := $deserializeMember:W; err != nil { return err diff --git a/codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/serde2/MapDeserializer.java b/codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/serde2/MapDeserializer.java index 5b89bc13..e4e8f095 100644 --- a/codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/serde2/MapDeserializer.java +++ b/codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/serde2/MapDeserializer.java @@ -71,7 +71,6 @@ private void renderSparse(GoWriter writer) { writer.writeGoTemplate(""" func deserialize$shapeName:L(d smithy.ShapeDeserializer, s *smithy.Schema, v *$symbol:T) error { *v = make($symbol:T) - var vv $valueSymbol:T return smithy.ReadMap(d, s, func(k string) error { if isNil, err := d.ReadNil(s.MapValue()); err != nil { return err @@ -80,6 +79,9 @@ private void renderSparse(GoWriter writer) { return nil } + // vv must be declared per-element for sparse since we + // are taking its pointer + var vv $valueSymbol:T $zeroValue:W if err := $deserializeValue:W; err != nil { return err