From 416de2fa530d4673fe692ca25b1b94578c1400fb Mon Sep 17 00:00:00 2001 From: Christian S Date: Mon, 20 Jan 2020 21:47:04 +0100 Subject: [PATCH] Check if slave part is available on match --- .../ebus/command/EBusCommandRegistry.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/csdev/ebus/command/EBusCommandRegistry.java b/src/main/java/de/csdev/ebus/command/EBusCommandRegistry.java index aad9f87..0e5486b 100644 --- a/src/main/java/de/csdev/ebus/command/EBusCommandRegistry.java +++ b/src/main/java/de/csdev/ebus/command/EBusCommandRegistry.java @@ -268,16 +268,21 @@ public boolean matchesCommand(IEBusCommandMethod command, ByteBuffer data) { int computedSlaveLen = EBusCommandUtils.getSlaveDataLength(command); int slaveLenPos = masterTelegram.limit() + 1; - int slaveLen = data.get(slaveLenPos); - if (slaveLen != computedSlaveLen) { - if (logger.isTraceEnabled()) { - logger.trace("Skip matching command due to invalid response data length ... [{}]", - EBusCommandUtils.getFullId(command)); - logger.trace("DATA: {}", EBusUtils.toHexDumpString(data)); - } + // only check if the slave part is included in the data bytes + if (slaveLenPos <= data.limit()) { - return false; + int slaveLen = data.get(slaveLenPos); + + if (slaveLen != computedSlaveLen) { + if (logger.isTraceEnabled()) { + logger.trace("Skip matching command due to invalid response data length ... [{}]", + EBusCommandUtils.getFullId(command)); + logger.trace("DATA: {}", EBusUtils.toHexDumpString(data)); + } + + return false; + } } }