summaryrefslogtreecommitdiff
path: root/implementation/endpoints/src/tp_message.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'implementation/endpoints/src/tp_message.cpp')
-rw-r--r--implementation/endpoints/src/tp_message.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/implementation/endpoints/src/tp_message.cpp b/implementation/endpoints/src/tp_message.cpp
index f786a4f..57696ca 100644
--- a/implementation/endpoints/src/tp_message.cpp
+++ b/implementation/endpoints/src/tp_message.cpp
@@ -301,6 +301,11 @@ bool tp_message::check_lengths(const byte_t* const _data,
_data[VSOMEIP_LENGTH_POS_MIN + 1],
_data[VSOMEIP_LENGTH_POS_MIN + 2],
_data[VSOMEIP_LENGTH_POS_MAX]);
+ const tp_header_t its_tp_header = VSOMEIP_BYTES_TO_LONG(
+ _data[VSOMEIP_TP_HEADER_POS_MIN],
+ _data[VSOMEIP_TP_HEADER_POS_MIN + 1],
+ _data[VSOMEIP_TP_HEADER_POS_MIN + 2],
+ _data[VSOMEIP_TP_HEADER_POS_MAX]);
bool ret(true);
if (!tp::tp_flag_is_set(_data[VSOMEIP_MESSAGE_TYPE_POS])) {
VSOMEIP_ERROR << __func__ << ": TP flag not set "
@@ -344,6 +349,14 @@ bool tp_message::check_lengths(const byte_t* const _data,
<< " current message size: " << std::dec << current_message_size_
<< " maximum message size: " << std::dec << max_message_size_;
ret = false;
+ } else if (tp::get_offset(its_tp_header) + _segment_size > max_message_size_ ) {
+ VSOMEIP_ERROR << __func__ << ": SomeIP/TP offset field exceeds maximum configured message size: "
+ << get_message_id(_data, _data_length)
+ << " TP offset [bytes]: " << std::dec << tp::get_offset(its_tp_header)
+ << " segment size: " << std::dec << _segment_size
+ << " current message size: " << std::dec << current_message_size_
+ << " maximum message size: " << std::dec << max_message_size_;
+ ret = false;
}
return ret;
}