diff --git a/visor-api/src/main/java/org/vmstudio/visor/api/common/network/VisorCorePayloadID.java b/visor-api/src/main/java/org/vmstudio/visor/api/common/network/VisorCorePayloadID.java index 980d2aac..7b30a040 100644 --- a/visor-api/src/main/java/org/vmstudio/visor/api/common/network/VisorCorePayloadID.java +++ b/visor-api/src/main/java/org/vmstudio/visor/api/common/network/VisorCorePayloadID.java @@ -56,12 +56,21 @@ public byte byteOrdinal() { public static VisorCorePayloadID fromOrdinal(byte ordinalByte){ // -127...127 to 0..255 int unsignedByte = ordinalByte & 0xFF; + if (unsignedByte >= values().length) { + return null; + } return values()[unsignedByte]; } @Environment(EnvType.CLIENT) public static VisorPayloadToClient readToClient(VisorCorePayloadID payloadID, FriendlyByteBuf buffer) { + if (payloadID == null) { + VisorAPI.client().getLogger().error( + "Visor: Got unexpected payload identifier on client: null" + ); + return UnknownPayloadToClient.read(buffer); + } return switch (payloadID) { case HANDSHAKE -> HandshakePayloadToClient.read(buffer); case SERVER_SETTINGS -> SettingsPayloadToClient.read(buffer); @@ -88,6 +97,12 @@ public static VisorPayloadToClient readToClient(VisorCorePayloadID payloadID, public static VisorPayloadToServer readToServer(VisorCorePayloadID payloadID, FriendlyByteBuf buffer) { + if (payloadID == null) { + VisorAPI.server().getLogger().error( + "Visor: Got unexpected payload identifier on server: null" + ); + return UnknownPayloadToServer.read(buffer); + } return switch (payloadID) { case HANDSHAKE -> HandshakePayloadToServer.read(buffer); case ACTIVE_HAND -> ActiveHandPayloadToServer.read(buffer); diff --git a/visor-core/src/main/java/org/vmstudio/visor/core/server/network/ServerNetworking.java b/visor-core/src/main/java/org/vmstudio/visor/core/server/network/ServerNetworking.java index 958f6577..ac935c5e 100644 --- a/visor-core/src/main/java/org/vmstudio/visor/core/server/network/ServerNetworking.java +++ b/visor-core/src/main/java/org/vmstudio/visor/core/server/network/ServerNetworking.java @@ -44,7 +44,7 @@ public static void createDedicatedChannel(@NotNull CoreAddonServer coreAddon){ VisorNetwork.CORE_NETWORK_VERSION ).toServer( (id, buffer)->{ - VisorCorePayloadID payloadId = VisorCorePayloadID.values()[id]; + VisorCorePayloadID payloadId = VisorCorePayloadID.fromOrdinal(id); return VisorCorePayloadID.readToServer(payloadId, buffer); }, ServerPacketHandler::handlePacket