Skip to content

Commit bf6bcd5

Browse files
authored
Merge pull request #3436 from k8s-infra-cherrypick-robot/cherry-pick-3431-to-release-0.23
[release-0.23] 🐛 Fix panic when using CRs with embedded pointer structs
2 parents 7866fb0 + b6a3a46 commit bf6bcd5

File tree

6 files changed

+46
-6
lines changed

6 files changed

+46
-6
lines changed

.gomodcheck.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ upstreamRefs:
99
# k8s.io/utils -> conflicts with k/k deps
1010

1111
excludedModules:
12+
# Needs a newer version to fix https://github.com/kubernetes-sigs/controller-runtime/issues/3418
13+
# This should not be needed by the time we update to 1.36
14+
- sigs.k8s.io/structured-merge-diff/v6
15+
1216
# --- test dependencies:
1317
- github.com/onsi/ginkgo/v2
1418
- github.com/onsi/gomega

examples/scratch-env/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ require (
6161
k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 // indirect
6262
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
6363
sigs.k8s.io/randfill v1.0.0 // indirect
64-
sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect
64+
sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482 // indirect
6565
sigs.k8s.io/yaml v1.6.0 // indirect
6666
)
6767

examples/scratch-env/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5E
164164
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
165165
sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
166166
sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
167-
sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco=
168-
sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
167+
sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482 h1:2WOzJpHUBVrrkDjU4KBT8n5LDcj824eX0I5UKcgeRUs=
168+
sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
169169
sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
170170
sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ require (
2828
k8s.io/client-go v0.35.0
2929
k8s.io/klog/v2 v2.130.1
3030
k8s.io/utils v0.0.0-20251002143259-bc988d571ff4
31-
sigs.k8s.io/structured-merge-diff/v6 v6.3.0
31+
sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482
3232
sigs.k8s.io/yaml v1.6.0
3333
)
3434

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5E
247247
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
248248
sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
249249
sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
250-
sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco=
251-
sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
250+
sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482 h1:2WOzJpHUBVrrkDjU4KBT8n5LDcj824eX0I5UKcgeRUs=
251+
sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
252252
sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
253253
sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=

pkg/client/fake/client_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1884,6 +1884,19 @@ var _ = Describe("Fake client", func() {
18841884
Expect(obj.Spec).To(BeEquivalentTo(spec))
18851885
})
18861886

1887+
It("works with types that have an embedded struct pointer", func(ctx SpecContext) {
1888+
schemeBuilder := &scheme.Builder{GroupVersion: schema.GroupVersion{Group: "test", Version: "v1"}}
1889+
schemeBuilder.Register(&EmbeddedPointerStructCRD{})
1890+
1891+
scheme := runtime.NewScheme()
1892+
Expect(schemeBuilder.AddToScheme(scheme)).NotTo(HaveOccurred())
1893+
1894+
c := NewClientBuilder().WithScheme(scheme).Build()
1895+
1896+
object := &EmbeddedPointerStructCRD{ObjectMeta: metav1.ObjectMeta{Name: "eps"}}
1897+
Expect(c.Create(ctx, object)).NotTo(HaveOccurred())
1898+
})
1899+
18871900
It("should not change the status of unstructured objects that are configured to have a status subresource on update", func(ctx SpecContext) {
18881901
obj := &unstructured.Unstructured{}
18891902
obj.SetAPIVersion("foo/v1")
@@ -3371,3 +3384,26 @@ var _ = Describe("Fake client builder", func() {
33713384
}).To(Panic())
33723385
})
33733386
})
3387+
3388+
type EmbeddedPointerStructCRD struct {
3389+
metav1.TypeMeta `json:",inline"`
3390+
metav1.ObjectMeta `json:"metadata,omitzero"`
3391+
*EmbededField `json:",inline"`
3392+
}
3393+
3394+
type EmbededField struct {
3395+
AnInt int `json:"anInt"`
3396+
}
3397+
3398+
func (in *EmbeddedPointerStructCRD) DeepCopyObject() runtime.Object {
3399+
s, err := json.Marshal(in)
3400+
if err != nil {
3401+
panic(err)
3402+
}
3403+
var out EmbeddedPointerStructCRD
3404+
if err := json.Unmarshal(s, &out); err != nil {
3405+
panic(err)
3406+
}
3407+
3408+
return &out
3409+
}

0 commit comments

Comments
 (0)