From 6d253af691473067aec7961ce412e4f546dac92b Mon Sep 17 00:00:00 2001 From: john30 Date: Thu, 20 Nov 2014 10:15:53 +0100 Subject: [PATCH 1/2] check maximum position --- src/lib/ebus/data.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/ebus/data.cpp b/src/lib/ebus/data.cpp index fd765777..a464d9de 100644 --- a/src/lib/ebus/data.cpp +++ b/src/lib/ebus/data.cpp @@ -175,7 +175,7 @@ result_t DataField::create(std::vector::iterator& it, break; } - if (pos > maxPos) { // TODO check this in real offset as well + if (pos > maxPos) { result = RESULT_ERR_INVALID_ARG; // invalid pos definition break; } From 1083ef24b8d057bb0cc258bf26c6a34d7477c3cc Mon Sep 17 00:00:00 2001 From: john30 Date: Thu, 20 Nov 2014 10:17:32 +0100 Subject: [PATCH 2/2] again --- src/lib/ebus/data.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lib/ebus/data.cpp b/src/lib/ebus/data.cpp index a464d9de..502fdf2e 100644 --- a/src/lib/ebus/data.cpp +++ b/src/lib/ebus/data.cpp @@ -360,6 +360,7 @@ unsigned char SingleDataField::getNextOffset() result_t SingleDataField::read(SymbolString& masterData, SymbolString& slaveData, std::ostringstream& output, bool verbose, char separator) { + unsigned char maxPos = 16; SymbolString& input = m_partType == pt_masterData ? masterData : slaveData; unsigned char baseOffset; switch (m_partType) @@ -374,6 +375,9 @@ result_t SingleDataField::read(SymbolString& masterData, SymbolString& slaveData return RESULT_ERR_INVALID_ARG; // invalid part type } + if (m_offset + m_length > maxPos) { + return RESULT_ERR_INVALID_ARG; // invalid pos definition + } if (verbose) output << m_name << "=";