From c7795fcd30a6649eede1abac18bcfbfd0ecd0975 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Wed, 11 Mar 2020 12:07:49 +0100 Subject: Pull changes from common 887a122 and d609df3 --- lib/edi/STIDecoder.cpp | 2 +- lib/edi/STIWriter.cpp | 8 ++++---- lib/edi/common.cpp | 7 ++++++- 3 files changed, 11 insertions(+), 6 deletions(-) (limited to 'lib') diff --git a/lib/edi/STIDecoder.cpp b/lib/edi/STIDecoder.cpp index 1f5d45e..d55cc12 100644 --- a/lib/edi/STIDecoder.cpp +++ b/lib/edi/STIDecoder.cpp @@ -110,7 +110,7 @@ bool STIDecoder::decode_dsti(const vector &value, uint16_t) (md.rfadf ? 9 : 0); if (value.size() != expected_length) { - throw std::logic_error("EDI dsti: Assertion error:" + throw std::runtime_error("EDI dsti: decoding error:" "value.size() != expected_length: " + to_string(value.size()) + " " + to_string(expected_length)); diff --git a/lib/edi/STIWriter.cpp b/lib/edi/STIWriter.cpp index 389a838..a7e4f20 100644 --- a/lib/edi/STIWriter.cpp +++ b/lib/edi/STIWriter.cpp @@ -95,7 +95,7 @@ void STIWriter::update_edi_time( uint32_t seconds) { if (not m_proto_valid) { - throw std::logic_error("Cannot update time before protocol"); + throw std::runtime_error("Cannot update time before protocol"); } m_utco = utco; @@ -109,15 +109,15 @@ void STIWriter::update_edi_time( void STIWriter::assemble() { if (not m_proto_valid) { - throw std::logic_error("Cannot assemble STI before protocol"); + throw std::runtime_error("Cannot assemble STI before protocol"); } if (not m_management_data_valid) { - throw std::logic_error("Cannot assemble STI before management data"); + throw std::runtime_error("Cannot assemble STI before management data"); } if (not m_payload_valid) { - throw std::logic_error("Cannot assemble STI without frame data"); + throw std::runtime_error("Cannot assemble STI without frame data"); } // TODO check time validity diff --git a/lib/edi/common.cpp b/lib/edi/common.cpp index 87a15ce..e4a51b4 100644 --- a/lib/edi/common.cpp +++ b/lib/edi/common.cpp @@ -307,13 +307,18 @@ bool TagDispatcher::decode_tagpacket(const vector &payload) uint32_t taglength = read_32b(payload.begin() + i + 4); if (taglength % 8 != 0) { - etiLog.log(warn, "Invalid tag length!"); + etiLog.log(warn, "Invalid tag length: not multiple of 8!"); break; } taglength /= 8; length = taglength; + if (i + 8 + taglength >= payload.size()) { + etiLog.log(warn, "Invalid tag length: tag larger than tagpacket!"); + break; + } + vector tag_value(taglength); copy( payload.begin() + i+8, payload.begin() + i+8+taglength, -- cgit v1.2.3