[4.0] Fix svace issue 23/157523/2
authorhuiyu,eun <huiyu.eun@samsung.com>
Wed, 25 Oct 2017 01:47:49 +0000 (10:47 +0900)
committerhuiyu,eun <huiyu.eun@samsung.com>
Wed, 25 Oct 2017 02:02:12 +0000 (11:02 +0900)
WID:35740604 Return value of a function 'strtok_r' is dereferenced at widget.cpp:559 without checking,
but it is usually checked for this function (62/70).

Add checker of 'retPtr'.

Change-Id: I2c12a729ed225aeafbb609d6227826f46569590d
Signed-off-by: huiyu,eun <huiyu.eun@samsung.com>
dali-csharp-binder/src/widget.cpp

index 1c8948b..a701f7f 100755 (executable)
@@ -542,23 +542,39 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_WidgetApplication_New(int jarg1,char *
   Dali::WidgetApplication result;
   {
     int index = 0;
+    int length = 0;
     char *retPtr;
     char *nextPtr;
     argWidgetC = jarg1;
     argWidgetV = new char*[jarg1 + 1];
 
     retPtr = strtok_r( jarg2, " ", &nextPtr);
-    argWidgetV[index] = new char[strlen(retPtr)+1];
-    strncpy(argWidgetV[index], retPtr, strlen(retPtr));
-    argWidgetV[index][strlen(retPtr)] = '\0';
+    if( retPtr )
+    {
+      length = strlen(retPtr);
+    }
+    argWidgetV[index] = new char[length + 1];
+    if( retPtr )
+    {
+      strncpy(argWidgetV[index], retPtr, length);
+    }
+    argWidgetV[index][length] = '\0';
     index++;
 
     while (index < jarg1)
     {
+      length = 0;
       retPtr = strtok_r(NULL, " ", &nextPtr);
-      argWidgetV[index] = new char[strlen(retPtr)+1];
-      strncpy(argWidgetV[index], retPtr, strlen(retPtr));
-      argWidgetV[index][strlen(retPtr)] = '\0';
+      if( retPtr )
+      {
+        length = strlen(retPtr);
+      }
+      argWidgetV[index] = new char[length + 1];
+      if( retPtr )
+      {
+        strncpy(argWidgetV[index], retPtr, length);
+      }
+      argWidgetV[index][length] = '\0';
       index++;
     }