Remove an vulnerability for using strcat() function in oicgroup
authorJihun Ha <jihun.ha@samsung.com>
Fri, 1 Apr 2016 07:38:34 +0000 (16:38 +0900)
committerUze Choi <uzchoi@samsung.com>
Mon, 4 Apr 2016 01:09:02 +0000 (01:09 +0000)
Rather than strcat function, strncat function with a consideration of
a maximum length of string is better to be used for security reason.

Change-Id: I12b76ef4c149c66fac2b6b2963feef86d760d85f
Signed-off-by: Jihun Ha <jihun.ha@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/7521
Reviewed-by: Uze Choi <uzchoi@samsung.com>
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
resource/csdk/stack/src/oicgroup.c

index e34d73e..4997686 100755 (executable)
@@ -787,14 +787,14 @@ OCStackResult BuildStringFromActionSet(OCActionSet* actionset, char** desc)
     }
 
     actionTypeStr = (char *)malloc(1024);
-    if(actionTypeStr != NULL)
+    if(actionTypeStr != NULL && remaining >= strlen(actionTypeStr) + strlen(ACTION_DELIMITER) + 1)
     {
         sprintf(actionTypeStr, "%ld %u", actionset->timesteps, actionset->type);
         strncat(temp, actionTypeStr, strlen(actionTypeStr));
         remaining -= strlen(actionTypeStr);
         free(actionTypeStr);
         strncat(temp, ACTION_DELIMITER, strlen(ACTION_DELIMITER));
-        remaining--;
+        remaining -= strlen(ACTION_DELIMITER);
     }
     else
     {
@@ -809,6 +809,7 @@ OCStackResult BuildStringFromActionSet(OCActionSet* actionset, char** desc)
             res = OC_STACK_ERROR;
             goto exit;
         }
+
         strcat(temp, "uri=");
         remaining -= strlen("uri=");
         strcat(temp, action->resourceUri);
@@ -842,6 +843,7 @@ OCStackResult BuildStringFromActionSet(OCActionSet* actionset, char** desc)
                     goto exit;
                 }
                 strcat(temp, "|");
+                remaining --;
             }
         }