From c775c6e4e3dbdee163461f1ca84a79eaf3e6d751 Mon Sep 17 00:00:00 2001 From: sedeno Date: Thu, 13 Feb 2020 14:18:50 +0100 Subject: [PATCH] Do not exit with error when deserializing empty byte strings. And not try to allocate empty UTF8 strings. --- src/lib/support/SerializationUtils.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/lib/support/SerializationUtils.cpp b/src/lib/support/SerializationUtils.cpp index 77607453dd..7e28c6b2d5 100644 --- a/src/lib/support/SerializationUtils.cpp +++ b/src/lib/support/SerializationUtils.cpp @@ -877,18 +877,23 @@ WEAVE_ERROR ReadDataForType(TLVReader &aReader, void *aStructureData, const Fiel case SerializedFieldTypeUTF8String: { - char *dst = NULL; // TLV Strings are not null terminated uint32_t length = aReader.GetLength() + 1; - dst = (char *)memMgmt->mem_alloc(length); - VerifyOrExit(dst != NULL, err = WEAVE_ERROR_NO_MEMORY); + if (length > 1) + { + char *dst = NULL; - err = aReader.GetString(dst, length); - SuccessOrExit(err); + dst = (char *)memMgmt->mem_alloc(length); + VerifyOrExit(dst != NULL, err = WEAVE_ERROR_NO_MEMORY); + + err = aReader.GetString(dst, length); + SuccessOrExit(err); + + LogReadWrite("%s utf8string '%s' allocating %d bytes at %p", "R", dst, length, dst); - LogReadWrite("%s utf8string '%s' allocating %d bytes at %p", "R", dst, length, dst); - *static_cast(aStructureData) = dst; + *static_cast(aStructureData) = dst; + } break; } @@ -898,7 +903,8 @@ WEAVE_ERROR ReadDataForType(TLVReader &aReader, void *aStructureData, const Fiel byteString.mLen = aReader.GetLength(); byteString.mBuf = static_cast(memMgmt->mem_alloc(byteString.mLen)); - VerifyOrExit(byteString.mBuf != NULL, err = WEAVE_ERROR_NO_MEMORY); + if (byteString.mLen > 0) + VerifyOrExit(byteString.mBuf != NULL, err = WEAVE_ERROR_NO_MEMORY); aReader.GetBytes(byteString.mBuf, byteString.mLen); LogReadWrite("%s bytestring allocated %d bytes at %p", "R", byteString.mLen, byteString.mBuf);