Fix static analysis issue in keepalive
authorMinji Park <minjii.park@samsung.com>
Wed, 30 Nov 2016 01:16:50 +0000 (10:16 +0900)
committerAshok Babu Channa <ashok.channa@samsung.com>
Mon, 12 Dec 2016 07:17:10 +0000 (07:17 +0000)
- add return value checking logic after memory allocation

Change-Id: I1c28e13e01c2dd7bf4b78585adf0ffdc0e6ecdfd
Signed-off-by: Minji Park <minjii.park@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/14935
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
Reviewed-by: Jaehong Jo <jaehong.jo@samsung.com>
Reviewed-by: Phil Coval <philippe.coval@osg.samsung.com>
Reviewed-by: Ashok Babu Channa <ashok.channa@samsung.com>
(cherry picked from commit 64b44c48ab8944c7cae1cabf64aa0e1e98ada932)
Reviewed-on: https://gerrit.iotivity.org/gerrit/15339
Reviewed-by: jihwan seo <jihwan.seo@samsung.com>
resource/csdk/stack/src/oickeepalive.c

index 44d91ba..caa1125 100644 (file)
@@ -877,6 +877,16 @@ OCStackResult AddResourceTypeNameToPayload(OCRepPayload *payload)
             const char *value = OCGetResourceTypeName(g_keepAliveHandle, i);
             OIC_LOG_V(DEBUG, TAG, "value: %s", value);
             rt[i] = OICStrdup(value);
+            if (NULL == rt[i])
+            {
+                OIC_LOG_V(ERROR, TAG, "Creating duplicate string for rt failed!");
+                for (uint8_t j = 0; j < i; ++j)
+                {
+                    OICFree(rt[j]);
+                }
+                OICFree(rt);
+                return OC_STACK_NO_MEMORY;
+            }
         }
         OCRepPayloadSetStringArray(payload, OC_RSRVD_RESOURCE_TYPE, (const char **) rt, rtDim);
         for (uint8_t i = 0; i < numElement; ++i)
@@ -902,6 +912,16 @@ OCStackResult AddResourceInterfaceNameToPayload(OCRepPayload *payload)
             const char *value = OCGetResourceInterfaceName(g_keepAliveHandle, i);
             OIC_LOG_V(DEBUG, TAG, "value: %s", value);
             itf[i] = OICStrdup(value);
+            if (NULL == itf[i])
+            {
+                OIC_LOG_V(ERROR, TAG, "Creating duplicate string for itf failed!");
+                for (uint8_t j = 0; j < i; ++j)
+                {
+                    OICFree(itf[j]);
+                }
+                OICFree(itf);
+                return OC_STACK_NO_MEMORY;
+            }
         }
         OCRepPayloadSetStringArray(payload, OC_RSRVD_INTERFACE, (const char **) itf, ifDim);
         for (uint8_t i = 0; i < numElement; ++i)