From 78b2d7d13e6d3b92be9346df2d25d7e8cd98cc1b Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Mon, 19 Sep 2016 12:41:27 -0700 Subject: [PATCH] Clean up handling of message allocation error. (#628) --- src/core/thread/lowpan.cpp | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/src/core/thread/lowpan.cpp b/src/core/thread/lowpan.cpp index 3f3181a6e..be572cdb5 100644 --- a/src/core/thread/lowpan.cpp +++ b/src/core/thread/lowpan.cpp @@ -750,11 +750,11 @@ exit: int Lowpan::DecompressExtensionHeader(Message &aMessage, const uint8_t *aBuf, uint16_t aBufLength) { + ThreadError error = kThreadError_None; const uint8_t *cur = aBuf; uint8_t hdr[2]; uint8_t len; Ip6::IpProto nextHeader; - int rval = -1; uint8_t ctl = cur[0]; cur++; @@ -765,7 +765,7 @@ int Lowpan::DecompressExtensionHeader(Message &aMessage, const uint8_t *aBuf, ui len = cur[0]; cur++; - SuccessOrExit(DispatchToNextHeader(cur[len], nextHeader)); + SuccessOrExit(error = DispatchToNextHeader(cur[len], nextHeader)); hdr[0] = static_cast(nextHeader); } else @@ -780,19 +780,17 @@ int Lowpan::DecompressExtensionHeader(Message &aMessage, const uint8_t *aBuf, ui // length hdr[1] = BitVectorBytes(sizeof(hdr) + len) - 1; - SuccessOrExit(aMessage.Append(hdr, sizeof(hdr))); + SuccessOrExit(error = aMessage.Append(hdr, sizeof(hdr))); aMessage.MoveOffset(sizeof(hdr)); // payload - SuccessOrExit(aMessage.Append(cur, len)); + SuccessOrExit(error = aMessage.Append(cur, len)); aMessage.MoveOffset(len); cur += len; - rval = static_cast(cur - aBuf); - exit: (void)aBufLength; - return rval; + return (error == kThreadError_None) ? static_cast(cur - aBuf) : -1; } int Lowpan::DecompressUdpHeader(Message &aMessage, const uint8_t *aBuf, uint16_t aBufLength, uint16_t aDatagramLength) @@ -855,17 +853,11 @@ int Lowpan::DecompressUdpHeader(Message &aMessage, const uint8_t *aBuf, uint16_t udpHeader.SetLength(aDatagramLength - aMessage.GetOffset()); } - aMessage.Append(&udpHeader, sizeof(udpHeader)); + SuccessOrExit(error = aMessage.Append(&udpHeader, sizeof(udpHeader))); aMessage.MoveOffset(sizeof(udpHeader)); exit: - - if (error != kThreadError_None) - { - return -1; - } - - return static_cast(cur - aBuf); + return (error == kThreadError_None) ? static_cast(cur - aBuf) : -1; } int Lowpan::Decompress(Message &aMessage, const Mac::Address &aMacSource, const Mac::Address &aMacDest, @@ -911,13 +903,7 @@ int Lowpan::Decompress(Message &aMessage, const Mac::Address &aMacSource, const } exit: - - if (error != kThreadError_None) - { - return -1; - } - - return static_cast(cur - aBuf); + return (error == kThreadError_None) ? static_cast(cur - aBuf) : -1; } } // namespace Lowpan