Skip to content
This repository was archived by the owner on Dec 20, 2023. It is now read-only.

Commit c775c6e

Browse files
committed
Do not exit with error when deserializing empty byte strings.
And not try to allocate empty UTF8 strings.
1 parent 9708816 commit c775c6e

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

src/lib/support/SerializationUtils.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -877,18 +877,23 @@ WEAVE_ERROR ReadDataForType(TLVReader &aReader, void *aStructureData, const Fiel
877877

878878
case SerializedFieldTypeUTF8String:
879879
{
880-
char *dst = NULL;
881880
// TLV Strings are not null terminated
882881
uint32_t length = aReader.GetLength() + 1;
883882

884-
dst = (char *)memMgmt->mem_alloc(length);
885-
VerifyOrExit(dst != NULL, err = WEAVE_ERROR_NO_MEMORY);
883+
if (length > 1)
884+
{
885+
char *dst = NULL;
886886

887-
err = aReader.GetString(dst, length);
888-
SuccessOrExit(err);
887+
dst = (char *)memMgmt->mem_alloc(length);
888+
VerifyOrExit(dst != NULL, err = WEAVE_ERROR_NO_MEMORY);
889+
890+
err = aReader.GetString(dst, length);
891+
SuccessOrExit(err);
892+
893+
LogReadWrite("%s utf8string '%s' allocating %d bytes at %p", "R", dst, length, dst);
889894

890-
LogReadWrite("%s utf8string '%s' allocating %d bytes at %p", "R", dst, length, dst);
891-
*static_cast<char**>(aStructureData) = dst;
895+
*static_cast<char**>(aStructureData) = dst;
896+
}
892897
break;
893898
}
894899

@@ -898,7 +903,8 @@ WEAVE_ERROR ReadDataForType(TLVReader &aReader, void *aStructureData, const Fiel
898903
byteString.mLen = aReader.GetLength();
899904

900905
byteString.mBuf = static_cast<uint8_t *>(memMgmt->mem_alloc(byteString.mLen));
901-
VerifyOrExit(byteString.mBuf != NULL, err = WEAVE_ERROR_NO_MEMORY);
906+
if (byteString.mLen > 0)
907+
VerifyOrExit(byteString.mBuf != NULL, err = WEAVE_ERROR_NO_MEMORY);
902908
aReader.GetBytes(byteString.mBuf, byteString.mLen);
903909

904910
LogReadWrite("%s bytestring allocated %d bytes at %p", "R", byteString.mLen, byteString.mBuf);

0 commit comments

Comments
 (0)