[4.0] Fix Svace issue 13/156313/2 accepted/tizen/4.0/unified/20171023.120643 submit/tizen_4.0/20171023.071729 tizen_4.0.m2_release
authorhuiyu,eun <huiyu.eun@samsung.com>
Wed, 18 Oct 2017 04:38:31 +0000 (13:38 +0900)
committerhuiyu,eun <huiyu.eun@samsung.com>
Thu, 19 Oct 2017 02:50:13 +0000 (11:50 +0900)
-checker : DEREF_OF_NULL.RET.PROC.STAT
 WID:34918980 Return value of a function 'strtok_r' is dereferenced at watch.cpp:588 without checking,
but it is usually checked for this function (58/68).

-> Add null checker of 'retPtr'

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

index 3981d436456628f1c53baba9183071dc84be0885..733a3af8779582e231f44826af5f60485d73a637 100755 (executable)
@@ -579,24 +579,40 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_WatchApplication_New__SWIG_1(int jarg1
   char ***arg2 ;
   Dali::WatchApplication result;
   {
-    int index=0;
+    int index = 0;
+    int length = 0;
     char *retPtr;
     char *nextPtr;
     argWatchC = jarg1;
     argWatchV = new char*[jarg1 + 1];
 
     retPtr = strtok_r(jarg2, " ", &nextPtr);
-    argWatchV[index] = new char[strlen(retPtr) + 1];
-    strncpy(argWatchV[index], retPtr, strlen(retPtr));
-    argWatchV[index][strlen(retPtr)] = '\0';
+    if( retPtr )
+    {
+      length = strlen(retPtr);
+    }
+    argWatchV[index] = new char[length + 1];
+    if( retPtr )
+    {
+      strncpy(argWatchV[index], retPtr, length);
+    }
+    argWatchV[index][length] = '\0';
     index++;
 
     while( index < jarg1 )
     {
+      length = 0;
       retPtr = strtok_r(NULL, " ", &nextPtr);
-      argWatchV[index] = new char[strlen(retPtr)+1];
-      strncpy(argWatchV[index], retPtr, strlen(retPtr));
-      argWatchV[index][strlen(retPtr)] = '\0';
+      if( retPtr )
+      {
+        length = strlen(retPtr);
+      }
+      argWatchV[index] = new char[length + 1];
+      if( retPtr )
+      {
+        strncpy(argWatchV[index], retPtr, length);
+      }
+      argWatchV[index][length] = '\0';
       index++;
     }
   }
@@ -638,24 +654,40 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_WatchApplication_New__SWIG_2(int jarg1
   std::string *arg3 = 0 ;
   Dali::WatchApplication result;
   {
-    int index=0;
+    int index = 0;
+    int length = 0;
     char *retPtr;
     char *nextPtr;
     argWatchC = jarg1;
     argWatchV = new char*[jarg1 + 1];
 
     retPtr = strtok_r(jarg2, " ", &nextPtr);
-    argWatchV[index] = new char[strlen(retPtr) + 1];
-    strncpy(argWatchV[index], retPtr, strlen(retPtr));
-    argWatchV[index][strlen(retPtr)] = '\0';
+    if( retPtr )
+    {
+      length = strlen(retPtr);
+    }
+    argWatchV[index] = new char[length + 1];
+    if( retPtr )
+    {
+      strncpy(argWatchV[index], retPtr, length);
+    }
+    argWatchV[index][length] = '\0';
     index++;
 
     while( index < jarg1 )
     {
+      length = 0;
       retPtr = strtok_r(NULL, " ", &nextPtr);
-      argWatchV[index] = new char[strlen(retPtr)+1];
-      strncpy(argWatchV[index], retPtr, strlen(retPtr));
-      argWatchV[index][strlen(retPtr)] = '\0';
+      if( retPtr )
+      {
+        length = strlen(retPtr);
+      }
+      argWatchV[index] = new char[length + 1];
+      if( retPtr )
+      {
+        strncpy(argWatchV[index], retPtr, length);
+      }
+      argWatchV[index][length] = '\0';
       index++;
     }
   }