From 73336815f99542dba43e45c3c0c70033d06845c7 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Fri, 10 Apr 2026 13:29:51 +0800 Subject: [PATCH] [l2]: null-safe type check in ChangeL2NetworkVlanId Use CONSTANT.equals(msg.getType()) instead of msg.getType().equals(CONSTANT) to prevent NullPointerException when the optional 'type' parameter is null in APIChangeL2NetworkVlanIdMsg. This fixes SYS.1000 internal error when calling ChangeL2NetworkVlanId on L2GeneveNetwork without specifying type. Affected files: - L2NetworkApiInterceptor: lines 151, 195 - L2NoVlanNetwork: lines 425, 433 - VxlanNetworkCheckerImpl: line 41 Resolves: ZCF-2074 Change-Id: I1ae26712bf3355d9a949be819cd8d08a26acdfc1 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../java/org/zstack/network/l2/L2NetworkApiInterceptor.java | 4 ++-- .../src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java | 4 ++-- .../l2/vxlan/vxlanNetworkPool/VxlanNetworkCheckerImpl.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/network/src/main/java/org/zstack/network/l2/L2NetworkApiInterceptor.java b/network/src/main/java/org/zstack/network/l2/L2NetworkApiInterceptor.java index 6f0b796e5b8..fac69de262f 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NetworkApiInterceptor.java +++ b/network/src/main/java/org/zstack/network/l2/L2NetworkApiInterceptor.java @@ -146,7 +146,7 @@ private void validate(APIChangeL2NetworkVlanIdMsg msg) { } String sdnControllerUuid = L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID .getTokenByResourceUuid(msg.getL2NetworkUuid(), L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID_TOKEN); - if (msg.getType().equals(L2NetworkConstant.L2_VLAN_NETWORK_TYPE)) { + if (L2NetworkConstant.L2_VLAN_NETWORK_TYPE.equals(msg.getType())) { if (msg.getVlan() == null) { throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10016, "vlan is required for " + "ChangeL2NetworkVlanId with type[%s]", msg.getType())); @@ -190,7 +190,7 @@ private void validate(APIChangeL2NetworkVlanIdMsg msg) { throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10018, "There has been a l2Network attached to cluster with virtual network id[%s] and physical interface[%s]. Failed to change L2 network[uuid:%s]", msg.getVlan(), l2.getPhysicalInterface(), l2.getUuid())); } - } else if (msg.getType().equals(L2NetworkConstant.L2_NO_VLAN_NETWORK_TYPE)) { + } else if (L2NetworkConstant.L2_NO_VLAN_NETWORK_TYPE.equals(msg.getType())) { if (msg.getVlan() != null) { throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10019, "vlan is not allowed for " + "ChangeL2NetworkVlanId with type[%s]", msg.getType())); diff --git a/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java b/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java index 821a76ad462..4ab28a8139a 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java +++ b/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java @@ -422,14 +422,14 @@ private void handleApiMessage(APIMessage msg) { private void handle(APIChangeL2NetworkVlanIdMsg msg){ APIChangeL2NetworkVlanIdEvent event = new APIChangeL2NetworkVlanIdEvent(msg.getId()); if (msg.getVlan() == null - && msg.getType().equals(L2NetworkConstant.L2_NO_VLAN_NETWORK_TYPE) + && L2NetworkConstant.L2_NO_VLAN_NETWORK_TYPE.equals(msg.getType()) && self.getVirtualNetworkId().equals(0)) { event.setInventory(getSelfInventory()); bus.publish(event); return; } if (msg.getVlan() != null - && msg.getType().equals(L2NetworkConstant.L2_VLAN_NETWORK_TYPE) + && L2NetworkConstant.L2_VLAN_NETWORK_TYPE.equals(msg.getType()) && self.getVirtualNetworkId().equals(msg.getVlan())) { event.setInventory(getSelfInventory()); bus.publish(event); diff --git a/plugin/vxlan/src/main/java/org/zstack/network/l2/vxlan/vxlanNetworkPool/VxlanNetworkCheckerImpl.java b/plugin/vxlan/src/main/java/org/zstack/network/l2/vxlan/vxlanNetworkPool/VxlanNetworkCheckerImpl.java index d3a46ed8d78..9f9e9848714 100644 --- a/plugin/vxlan/src/main/java/org/zstack/network/l2/vxlan/vxlanNetworkPool/VxlanNetworkCheckerImpl.java +++ b/plugin/vxlan/src/main/java/org/zstack/network/l2/vxlan/vxlanNetworkPool/VxlanNetworkCheckerImpl.java @@ -38,7 +38,7 @@ public APIMessage intercept(APIMessage msg) throws ApiMessageInterceptionExcepti } private void validate(APIChangeL2NetworkVlanIdMsg msg) { - if (!msg.getType().equals(VxlanNetworkConstant.VXLAN_NETWORK_TYPE)){ + if (!VxlanNetworkConstant.VXLAN_NETWORK_TYPE.equals(msg.getType())){ return; } if (!NetworkUtils.isValidVni(msg.getVlan())) {