@@ -155,6 +155,13 @@ namespace pcpp
155155 // / @return SomeIpSdProtocolType
156156 SomeIpSdProtocolType getProtocol () const ;
157157
158+ // / Checks whether data is valid or not
159+ // / @return True if data is valid
160+ static bool isDataValid (const IDataContainer* data, size_t dataLen)
161+ {
162+ return data && dataLen >= sizeof (someipsdhdroptionsipv4);
163+ }
164+
158165 private:
159166 // / @struct someipsdhdroptionsipv4
160167 // / Represents the IPv4 option types for the SOME/IP-SD header
@@ -217,6 +224,13 @@ namespace pcpp
217224 // / @return SomeIpSdProtocolType
218225 SomeIpSdProtocolType getProtocol () const ;
219226
227+ // / Checks whether data is valid or not
228+ // / @return True if data is valid
229+ static bool isDataValid (const IDataContainer* data, size_t dataLen)
230+ {
231+ return data && dataLen >= sizeof (someipsdhdroptionsipv6);
232+ }
233+
220234 private:
221235 // / @struct someipsdhdroptionsipv6
222236 // / Represents the IPv6 option types for the SOME/IP-SD header
@@ -256,6 +270,13 @@ namespace pcpp
256270 // / Get the configuration string
257271 // / @return std::string
258272 std::string getConfigurationString () const ;
273+
274+ // / Checks whether data is valid or not
275+ // / @return True if data is valid
276+ static bool isDataValid (const IDataContainer* data, size_t dataLen)
277+ {
278+ return data && dataLen >= (sizeof (someipsdhdroptionsbase) - 1 );
279+ }
259280 };
260281
261282 // / @class SomeIpSdLoadBalancingOption
@@ -283,6 +304,13 @@ namespace pcpp
283304 // / @return uint16_t
284305 uint16_t getWeight () const ;
285306
307+ // / Checks whether data is valid or not
308+ // / @return True if data is valid
309+ static bool isDataValid (const IDataContainer* data, size_t dataLen)
310+ {
311+ return data && dataLen >= sizeof (someipsdhdroptionsload);
312+ }
313+
286314 private:
287315 // / @struct someipsdhdroptionsload
288316 // / Represents the Load Balancing option header for SOME/IP-SD
@@ -621,7 +649,7 @@ namespace pcpp
621649 uint32_t findOption (const SomeIpSdOption& option);
622650 void addOption (const SomeIpSdOption& option);
623651 bool addOptionIndex (uint32_t indexEntry, uint32_t indexOffset);
624- OptionPtr parseOption (SomeIpSdOption::OptionType type, size_t offset) const ;
652+ OptionPtr parseOption (SomeIpSdOption::OptionType type, size_t offset, size_t remainingLength ) const ;
625653
626654 static size_t getLenEntries (const uint8_t * data);
627655 size_t getLenEntries () const ;
0 commit comments