File tree Expand file tree Collapse file tree 2 files changed +9
-1
lines changed
Expand file tree Collapse file tree 2 files changed +9
-1
lines changed Original file line number Diff line number Diff line change @@ -19,6 +19,7 @@ struct Message {
1919 ErrorBigEndian,
2020 ErrorUnknownID,
2121 ErrorInvalidConversion,
22+ ErrorInvalidSignalSize,
2223 };
2324
2425 ParseSignalsStatus parse_signals (const std::vector<uint8_t >& data, std::vector<double >& values) const ;
Original file line number Diff line number Diff line change 1+ #include < arpa/inet.h>
2+
13#include < cstddef>
24#include < cstdint>
35#include < libdbc/message.hpp>
@@ -35,15 +37,20 @@ Message::ParseSignalsStatus Message::parse_signals(const std::vector<uint8_t>& d
3537 uint64_t data_little_endian = 0 ;
3638 uint64_t data_big_endian = 0 ;
3739 for (std::size_t i = 0 ; i < size; i++) {
38- data_little_endian |= ((uint64_t )data[i]) << i * ONE_BYTE;
3940 data_big_endian = (data_big_endian << ONE_BYTE) | (uint64_t )data[i];
4041 }
42+ data_little_endian = ntohl (data_little_endian);
4143
4244 // TODO: does this also work on a big endian machine?
4345
4446 const auto len = size * 8 ;
4547 uint64_t value = 0 ;
4648 for (const auto & signal : m_signals) {
49+
50+ if (signal.size > len) {
51+ return ParseSignalsStatus::ErrorInvalidSignalSize;
52+ }
53+
4754 if (signal.is_bigendian ) {
4855 uint32_t start_bit = ONE_BYTE * (signal.start_bit / ONE_BYTE) + (SEVEN_BITS - (signal.start_bit % ONE_BYTE)); // Calculation taken from python CAN
4956 value = data_big_endian << start_bit;
You can’t perform that action at this time.
0 commit comments