[tlv] remove Tlv::ReadTlvValue() (#12768)

This commit removes the `Tlv::ReadTlvValue()` method which is no
longer needed or used. The same functionality is provided through
the `Tlv::Info` class, specifically using its `ParseFrom()` and
`ReadValue()` methods. This approach is safer and provides more
comprehensive information about the parsed TLV.

The unit tests are also updated to replace the usage of the removed
method with the new `Tlv::Info` based approach.
This commit is contained in:
Abtin Keshavarzian
2026-03-25 21:33:41 -07:00
committed by GitHub
parent f1794af0a7
commit 02aaf7cb73
3 changed files with 44 additions and 45 deletions
-12
View File
@@ -200,18 +200,6 @@ template Error Tlv::Info::ReadUintValue<uint8_t>(const Message &aMessage, uint8_
template Error Tlv::Info::ReadUintValue<uint16_t>(const Message &aMessage, uint16_t &aValue) const;
template Error Tlv::Info::ReadUintValue<uint32_t>(const Message &aMessage, uint32_t &aValue) const;
Error Tlv::ReadTlvValue(const Message &aMessage, uint16_t aOffset, void *aValue, uint8_t aMinLength)
{
Error error;
Info info;
SuccessOrExit(error = info.ParseFrom(aMessage, aOffset));
error = info.ReadValue(aMessage, aValue, aMinLength);
exit:
return error;
}
Error Tlv::FindStringTlv(const Message &aMessage, uint8_t aType, uint8_t aMaxStringLength, char *aValue)
{
Error error;
-15
View File
@@ -439,21 +439,6 @@ public:
OffsetRange mValueOffsetRange;
};
/**
* Reads a TLV's value in a message at a given offset expecting a minimum length for the value.
*
* Can be used independent of whether the read TLV (from the message) is an Extended TLV or not.
*
* @param[in] aMessage The message to read from.
* @param[in] aOffset The offset into the message pointing to the start of the TLV.
* @param[out] aValue A buffer to output the TLV's value, must contain (at least) @p aMinLength bytes.
* @param[in] aMinLength The minimum expected length of TLV and number of bytes to copy into @p aValue buffer.
*
* @retval kErrorNone Successfully read the TLV and copied @p aMinLength into @p aValue.
* @retval kErrorParse The TLV was not well-formed and could not be parsed.
*/
static Error ReadTlvValue(const Message &aMessage, uint16_t aOffset, void *aValue, uint8_t aMinLength);
/**
* Searches for and reads a requested TLV out of a given message.
*
+44 -18
View File
@@ -46,6 +46,7 @@ void TestTlv(void)
Instance *instance = testInitInstance();
Message *message;
Tlv tlv;
Tlv::Info tlvInfo;
ExtendedTlv extTlv;
Tlv::Bookmark bookmark;
uint16_t offset;
@@ -64,7 +65,7 @@ void TestTlv(void)
VerifyOrQuit(message->GetLength() == 0);
VerifyOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 1, offsetRange) == kErrorNotFound);
VerifyOrQuit(Tlv::ReadTlvValue(*message, 0, buffer, 1) == kErrorParse);
VerifyOrQuit(tlvInfo.ParseFrom(*message, 0) == kErrorParse);
// Add an empty TLV with type 1 and check that we can find it
@@ -77,8 +78,11 @@ void TestTlv(void)
SuccessOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 1, offsetRange));
VerifyOrQuit(offsetRange.GetOffset() == sizeof(Tlv));
VerifyOrQuit(offsetRange.GetLength() == 0);
SuccessOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 0));
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 1) == kErrorParse);
SuccessOrQuit(tlvInfo.ParseFrom(*message, offset));
VerifyOrQuit(tlvInfo.GetType() == 1);
VerifyOrQuit(tlvInfo.GetLength() == 0);
VerifyOrQuit(!tlvInfo.IsExtended());
VerifyOrQuit(tlvInfo.ReadValue(*message, buffer, 1) == kErrorParse);
// Add an empty extended TLV (type 2), and check that we can find it.
@@ -91,8 +95,11 @@ void TestTlv(void)
SuccessOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 2, offsetRange));
VerifyOrQuit(offsetRange.GetOffset() == offset + sizeof(ExtendedTlv));
VerifyOrQuit(offsetRange.GetLength() == 0);
SuccessOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 0));
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 1) == kErrorParse);
SuccessOrQuit(tlvInfo.ParseFrom(*message, offset));
VerifyOrQuit(tlvInfo.GetType() == 2);
VerifyOrQuit(tlvInfo.GetLength() == 0);
VerifyOrQuit(tlvInfo.IsExtended());
VerifyOrQuit(tlvInfo.ReadValue(*message, buffer, 1) == kErrorParse);
// Add a TLV with type 3 with one byte value and check if we can find it.
@@ -106,9 +113,13 @@ void TestTlv(void)
SuccessOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 3, offsetRange));
VerifyOrQuit(offsetRange.GetOffset() == offset + sizeof(Tlv));
VerifyOrQuit(offsetRange.GetLength() == 1);
SuccessOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 1));
SuccessOrQuit(tlvInfo.ParseFrom(*message, offset));
VerifyOrQuit(tlvInfo.GetType() == 3);
VerifyOrQuit(tlvInfo.GetLength() == 1);
VerifyOrQuit(!tlvInfo.IsExtended());
SuccessOrQuit(tlvInfo.ReadValue(*message, buffer, 1));
VerifyOrQuit(buffer[0] == 0x0ff);
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 2) == kErrorParse);
VerifyOrQuit(tlvInfo.ReadValue(*message, buffer, 2) == kErrorParse);
// Add an extended TLV with type 4 with two byte value and check if we can find it.
@@ -123,12 +134,16 @@ void TestTlv(void)
SuccessOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 4, offsetRange));
VerifyOrQuit(offsetRange.GetOffset() == offset + sizeof(ExtendedTlv));
VerifyOrQuit(offsetRange.GetLength() == 2);
SuccessOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 1));
SuccessOrQuit(tlvInfo.ParseFrom(*message, offset));
VerifyOrQuit(tlvInfo.GetType() == 4);
VerifyOrQuit(tlvInfo.GetLength() == 2);
VerifyOrQuit(tlvInfo.IsExtended());
SuccessOrQuit(tlvInfo.ReadValue(*message, buffer, 1));
VerifyOrQuit(buffer[0] == 0x12);
SuccessOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 2));
SuccessOrQuit(tlvInfo.ReadValue(*message, buffer, 2));
VerifyOrQuit(buffer[0] == 0x12);
VerifyOrQuit(buffer[1] == 0x34);
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 3) == kErrorParse);
VerifyOrQuit(tlvInfo.ReadValue(*message, buffer, 3) == kErrorParse);
// Add a TLV with missing value.
@@ -139,7 +154,7 @@ void TestTlv(void)
SuccessOrQuit(message->Append(tlv));
VerifyOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 5, offsetRange) != kErrorNone);
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 0) == kErrorParse);
VerifyOrQuit(tlvInfo.ParseFrom(*message, offset) == kErrorParse);
// Add the missing value.
SuccessOrQuit(message->Append<uint8_t>(0xaa));
@@ -147,9 +162,13 @@ void TestTlv(void)
SuccessOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 5, offsetRange));
VerifyOrQuit(offsetRange.GetOffset() == offset + sizeof(Tlv));
VerifyOrQuit(offsetRange.GetLength() == 1);
SuccessOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 1));
SuccessOrQuit(tlvInfo.ParseFrom(*message, offset));
VerifyOrQuit(tlvInfo.GetType() == 5);
VerifyOrQuit(tlvInfo.GetLength() == 1);
VerifyOrQuit(!tlvInfo.IsExtended());
SuccessOrQuit(tlvInfo.ReadValue(*message, buffer, 1));
VerifyOrQuit(buffer[0] == 0xaa);
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 2) == kErrorParse);
VerifyOrQuit(tlvInfo.ReadValue(*message, buffer, 2) == kErrorParse);
// Add an extended TLV with missing value.
@@ -161,17 +180,21 @@ void TestTlv(void)
SuccessOrQuit(message->Append<uint8_t>(0xbb));
VerifyOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 6, offsetRange) != kErrorNone);
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 1) == kErrorParse);
VerifyOrQuit(tlvInfo.ParseFrom(*message, offset) == kErrorParse);
SuccessOrQuit(message->Append<uint8_t>(0xcc));
SuccessOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 6, offsetRange) != kErrorNone);
VerifyOrQuit(offsetRange.GetOffset() == offset + sizeof(ExtendedTlv));
VerifyOrQuit(offsetRange.GetLength() == 2);
SuccessOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 2));
SuccessOrQuit(tlvInfo.ParseFrom(*message, offset));
VerifyOrQuit(tlvInfo.GetType() == 6);
VerifyOrQuit(tlvInfo.GetLength() == 2);
VerifyOrQuit(tlvInfo.IsExtended());
SuccessOrQuit(tlvInfo.ReadValue(*message, buffer, 2));
VerifyOrQuit(buffer[0] == 0xbb);
VerifyOrQuit(buffer[1] == 0xcc);
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 3) == kErrorParse);
VerifyOrQuit(tlvInfo.ReadValue(*message, buffer, 3) == kErrorParse);
// Add an extended TLV with overflow length.
@@ -183,7 +206,7 @@ void TestTlv(void)
SuccessOrQuit(message->Append<uint8_t>(0x11));
VerifyOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 7, offsetRange) != kErrorNone);
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 1) == kErrorParse);
VerifyOrQuit(tlvInfo.ParseFrom(*message, offset) == kErrorParse);
//- - - - - - - - - - - - - - - - - - - - - -
// Validate `StartTlv()`, `AdjustTlv()`, `EndTlv()`
@@ -202,7 +225,10 @@ void TestTlv(void)
SuccessOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 1, offsetRange));
VerifyOrQuit(offsetRange.GetOffset() == offset + sizeof(Tlv));
VerifyOrQuit(offsetRange.GetLength() == 3);
SuccessOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 3));
SuccessOrQuit(tlvInfo.ParseFrom(*message, offset));
VerifyOrQuit(tlvInfo.GetLength() == 3);
VerifyOrQuit(!tlvInfo.IsExtended());
SuccessOrQuit(tlvInfo.ReadValue(*message, buffer, 3));
VerifyOrQuit(buffer[0] == 0xab);
VerifyOrQuit(buffer[1] == 0xcd);
VerifyOrQuit(buffer[2] == 0xef);