Skip to content

Commit 2ff5ede

Browse files
authored
fix(v1alpha1): handle empty network fields (vmware-tanzu#1391)
Fix nil pointer dereference in v1alpha1 to v1alpha5 conversion when both NetworkName and NetworkType are empty. Move Network object initialization inside conditional check and add test case.
1 parent 9ff7d01 commit 2ff5ede

File tree

2 files changed

+40
-17
lines changed

2 files changed

+40
-17
lines changed

api/test/v1alpha1/virtualmachine_conversion_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1758,6 +1758,30 @@ func TestVirtualMachineConversion(t *testing.T) {
17581758
spokeHubSpoke(g, &spoke, &vmopv1.VirtualMachine{})
17591759
})
17601760

1761+
t.Run("VirtualMachine spoke-hub-spoke with empty NetworkName and NetworkType", func(t *testing.T) {
1762+
g := NewWithT(t)
1763+
1764+
// Test the edge case where both NetworkName and NetworkType are empty strings.
1765+
// This is valid in v1alpha1 and should not cause a nil pointer dereference.
1766+
spoke := vmopv1a1.VirtualMachine{
1767+
Spec: vmopv1a1.VirtualMachineSpec{
1768+
ClassName: "best-effort-small",
1769+
ImageName: "vmi-d5973af773e94c1d8",
1770+
NetworkInterfaces: []vmopv1a1.VirtualMachineNetworkInterface{
1771+
{
1772+
NetworkName: "",
1773+
NetworkType: "",
1774+
},
1775+
},
1776+
},
1777+
Status: vmopv1a1.VirtualMachineStatus{
1778+
Phase: vmopv1a1.Unknown,
1779+
},
1780+
}
1781+
1782+
spokeHubSpoke(g, &spoke, &vmopv1.VirtualMachine{})
1783+
})
1784+
17611785
t.Run("VirtualMachine spoke-hub-spoke with ExtraConfig", func(t *testing.T) {
17621786
g := NewWithT(t)
17631787

api/v1alpha1/virtualmachine_conversion.go

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -274,23 +274,22 @@ func convert_v1alpha1_NetworkInterface_To_v1alpha5_NetworkInterfaceSpec(
274274

275275
if in.NetworkName != "" || in.NetworkType != "" {
276276
out.Network = &vmopv1common.PartialObjectRef{}
277-
}
278-
279-
out.Network.Name = in.NetworkName
280-
281-
switch in.NetworkType {
282-
case "vsphere-distributed":
283-
out.Network.TypeMeta.APIVersion = "netoperator.vmware.com/v1alpha1"
284-
out.Network.TypeMeta.Kind = "Network"
285-
case "nsx-t":
286-
out.Network.TypeMeta.APIVersion = "vmware.com/v1alpha1"
287-
out.Network.TypeMeta.Kind = "VirtualNetwork"
288-
case "nsx-t-subnet":
289-
out.Network.TypeMeta.APIVersion = "crd.nsx.vmware.com/v1alpha1"
290-
out.Network.TypeMeta.Kind = "Subnet"
291-
case "nsx-t-subnetset":
292-
out.Network.TypeMeta.APIVersion = "crd.nsx.vmware.com/v1alpha1"
293-
out.Network.TypeMeta.Kind = "SubnetSet"
277+
out.Network.Name = in.NetworkName
278+
279+
switch in.NetworkType {
280+
case "vsphere-distributed":
281+
out.Network.TypeMeta.APIVersion = "netoperator.vmware.com/v1alpha1"
282+
out.Network.TypeMeta.Kind = "Network"
283+
case "nsx-t":
284+
out.Network.TypeMeta.APIVersion = "vmware.com/v1alpha1"
285+
out.Network.TypeMeta.Kind = "VirtualNetwork"
286+
case "nsx-t-subnet":
287+
out.Network.TypeMeta.APIVersion = "crd.nsx.vmware.com/v1alpha1"
288+
out.Network.TypeMeta.Kind = "Subnet"
289+
case "nsx-t-subnetset":
290+
out.Network.TypeMeta.APIVersion = "crd.nsx.vmware.com/v1alpha1"
291+
out.Network.TypeMeta.Kind = "SubnetSet"
292+
}
294293
}
295294

296295
return out

0 commit comments

Comments
 (0)