Fix memory leak in transportEndpointsPayload 49/23849/3
authorMats Wichmann <mats@linux.com>
Sat, 30 Dec 2017 18:34:13 +0000 (11:34 -0700)
committerMats Wichmann <mats@linux.com>
Wed, 7 Feb 2018 16:04:21 +0000 (16:04 +0000)
commitc64958a6bf184891b6e185027f710b37864c2280
tree2b4b7774313bc1d5b0c1c076f121b39105d33b0f
parent7689aeef14a9f9e2b3c2937eae712d57dd3b2daf
Fix memory leak in transportEndpointsPayload

The internal function transportEndpointsPayload in occollection.c
creates endpoint strings and copies them into a payload.
However, the memory holding the generated string allocated by
OCCreateEndpointString is not freed after the payload copy is
made, and each time through the loop the pointer that refers to
this memory, createdEPStr, goes out of scope so the memory leaks.

valgrind of the stack unittests detected this with the
following leak report:

  264 bytes in 4 blocks are definitely lost in loss record 937 of 988

If traced back, this is triggered in the test for
BuildCollectionLinksPayloadArray, where inside a loop, the
function is called twice;

    linksRepPayloadArray = BuildCollectionLinksPayloadArray("/a/kitchen", false,
    devAddr, false, &arraySize);

    linksRepPayloadArray = BuildCollectionLinksPayloadArray("/a/kitchen", true, devAddr, false,
         &arraySize);

BuildCollectionLinksPayloadArray (not public API) calls
translateEndpointsPayload as described above.

Fix: add OICFree to the stanza where an endpoint string is created
and added with OCRepPayloadSetPropString.

Bug: https://jira.iotivity.org/browse/IOT-2951
Change-Id: Ie1fcbf6dc01479f01134bdb0ace09fa974df80c8
Signed-off-by: Mats Wichmann <mats@linux.com>
resource/csdk/stack/src/occollection.c