diff options
| author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2020-03-11 12:07:49 +0100 | 
|---|---|---|
| committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2020-03-11 12:07:49 +0100 | 
| commit | c7795fcd30a6649eede1abac18bcfbfd0ecd0975 (patch) | |
| tree | c2d68bbd6ce03cdbb94a6dc32e695203d42a9c98 | |
| parent | b5d43cff287d75de370ee94193b1162b5ab1038c (diff) | |
| download | dabmux-c7795fcd30a6649eede1abac18bcfbfd0ecd0975.tar.gz dabmux-c7795fcd30a6649eede1abac18bcfbfd0ecd0975.tar.bz2 dabmux-c7795fcd30a6649eede1abac18bcfbfd0ecd0975.zip  | |
Pull changes from common 887a122 and d609df3
| -rw-r--r-- | lib/edi/STIDecoder.cpp | 2 | ||||
| -rw-r--r-- | lib/edi/STIWriter.cpp | 8 | ||||
| -rw-r--r-- | lib/edi/common.cpp | 7 | 
3 files changed, 11 insertions, 6 deletions
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<uint8_t> &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<uint8_t> &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<uint8_t> tag_value(taglength);          copy(   payload.begin() + i+8,                  payload.begin() + i+8+taglength,  | 
