Lingering and mixed uses of malloc/free exist throughout
IoTivity. Some buffers allocated with malloc are later freed
with OICFree; this is dangerous in case the implementation of
OICMalloc/OICFree ever changes.
This change harmonizes the code to use the OIC versions to
ensure code is always using the same heap allocation and free
functions with two exceptions:
* Sample code continues to use malloc/free; samples should not
refer to internal functions.
* The oc_logger module also still uses malloc/free; oic_malloc
calls oc_logger when operating in ENABLE_MALLOC_DEBUG mode, and
could result in a circular dependency if changed over.
Change-Id: Icd47243eec33500fe7fcd7d5d79ddf2128a9e717
Signed-off-by: Kevin Kane <kkane@microsoft.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/14623
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Mike Fenelon <mike.fenelon@microsoft.com>
Reviewed-by: Dan Mihai <Daniel.Mihai@microsoft.com>
Reviewed-by: Phil Coval <philippe.coval@osg.samsung.com>
(cherry picked from commit
8141de8815b7c7a39b8b7d8ce9acb91608cf9e17)
Reviewed-on: https://gerrit.iotivity.org/gerrit/14697
Reviewed-by: Omar Maabreh <omarm@microsoft.com>
#include "cautilinterface.h"
#include "cacommon.h"
#include "oic_string.h"
+#include "oic_malloc.h"
#define CA_TRANSPORT_ADAPTER_SCOPE 1000
memset(&responseData, 0, sizeof(CAInfo_t));
responseData.type = CA_MSG_RESET;
responseData.messageId = 1;
- responseData.payload = (CAPayload_t)malloc(sizeof("response payload"));
+ responseData.payload = (CAPayload_t)OICMalloc(sizeof("response payload"));
responseData.dataType = CA_RESPONSE_DATA;
EXPECT_TRUE(responseData.payload != NULL);
CADestroyToken(tempToken);
CADestroyEndpoint(tempRep);
- free(responseData.payload);
+ OICFree(responseData.payload);
tempRep = NULL;
}
}
#include "uqueue.h"
+#include "oic_malloc.h"
+
class UQueueF : public testing::Test {
public:
UQueueF() :
u_queue_message_t *CreateQueueMessage(void *data, uint32_t size)
{
- u_queue_message_t *message = (u_queue_message_t *) malloc(sizeof(u_queue_message_t));
+ u_queue_message_t *message = (u_queue_message_t *) OICMalloc(sizeof(u_queue_message_t));
if (NULL == message)
{
return NULL;
/**
* This function creates a string from a list (with separated contents if several)
* @param ll Pointer to list
- * @return newly allocated string
+ * @return newly allocated string. Caller takes ownership and must later free this memory with OICFree.
* @note separator is ',' (according to rfc4180)
**/
char* OCCreateString(const OCStringLL* ll);
len += strlen(it->value) + 1;
}
len--; // remove trailing separator (just added above)
- str = (char*) malloc(len + 1);
+ str = (char*) OICMalloc(len + 1);
if (!str)
{
return NULL;
count = snprintf(pos, len + 1, "%s", it->value);
if ((size_t)count < sublen)
{
- free(str);
+ OICFree(str);
return NULL;
}
len -= sublen;
goto exit;
}
- actionTypeStr = (char *)malloc(1024);
+ actionTypeStr = (char *)OICMalloc(1024);
if(actionTypeStr != NULL)
{
sprintf(actionTypeStr, "%ld %u", actionset->timesteps, actionset->type);
remaining -= strlen(actionTypeStr);
strncat(temp, ACTION_DELIMITER, strlen(ACTION_DELIMITER));
remaining -= strlen(ACTION_DELIMITER);
- free(actionTypeStr);
+ OICFree(actionTypeStr);
}
else
{
- free(actionTypeStr);
+ OICFree(actionTypeStr);
res = OC_STACK_ERROR;
goto exit;
}