From 3780aca37dbd51321a61b47ccb54006ebc7d861f Mon Sep 17 00:00:00 2001 From: john30 Date: Thu, 23 Feb 2017 18:09:18 +0100 Subject: [PATCH] use length field for determining decodable bytes --- src/ebusd/bushandler.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/ebusd/bushandler.cpp b/src/ebusd/bushandler.cpp index 6a7f1cec..be045da2 100644 --- a/src/ebusd/bushandler.cpp +++ b/src/ebusd/bushandler.cpp @@ -275,10 +275,16 @@ bool GrabbedMessage::dump(const bool unknown, MessageMap* messages, bool first, SymbolString *input = master ? &m_lastMaster : &m_lastSlave; unsigned char baseOffset = master ? 5 : 1; unsigned char remain = input->size(); - if (remain <= baseOffset+1) { // excluding CRC + if (remain <= baseOffset) { + return true; + } + remain = (unsigned char)(remain-baseOffset); + if ((*input)[baseOffset-1] < remain) { + remain = (*input)[baseOffset-1]; + } + if (remain == 0) { return true; } - remain = (unsigned char)(remain-baseOffset-1); for (map::const_iterator it = types->begin(); it != types->end(); it++) { DataType* baseType = it->second; if ((baseType->getBitCount() % 8) != 0 || baseType->isIgnored()) { // skip bit and ignored types