FIX Segfault accessing NULL Block.uid field 64/12564/2
Bruno JOFRET [Tue, 17 Sep 2013 09:34:22 +0000 (11:34 +0200)]
Change-Id: Ie01b0658c3e7fefae298a84314ee354f28ddbda1

scilab/modules/scicos/sci_gateway/c/sci_callblk.c
scilab/modules/scicos/src/c/createblklist.c

index 1cddd8a..5f54d1d 100644 (file)
@@ -250,7 +250,7 @@ int sci_callblk(char *fname, unsigned long fname_len)
         FREE(Block.label);
     }
     FREE(Block.mode);
-    if (strlen(Block.uid) != 0)
+    if (Block.uid != NULL && strlen(Block.uid) != 0)
     {
         FREE(Block.uid);
     }
index 410dd1f..8d77b11 100644 (file)
@@ -510,13 +510,21 @@ int createblklist(scicos_block *Blocks, int *ierr, int flag_imp, int funtyp)
     {
         return 0;
     }
-    if ((str1[0] = MALLOC(sizeof(char) * (strlen(Blocks[0].uid) + 1))) == NULL )
+    if (Blocks[0].uid != NULL)
     {
-        FREE(str1);
-        return 0;
+        if ((str1[0] = MALLOC(sizeof(char) * (strlen(Blocks[0].uid) + 1))) == NULL )
+        {
+            FREE(str1);
+            return 0;
+        }
+        (str1[0])[strlen(Blocks[0].uid)] = '\0';
+        strncpy(str1[0], Blocks[0].uid, strlen(Blocks[0].uid));
+    }
+    else
+    {
+        str1[0] = MALLOC(sizeof(char));
+        (str1[0])[0] = '\0';
     }
-    (str1[0])[strlen(Blocks[0].uid)] = '\0';
-    strncpy(str1[0], Blocks[0].uid, strlen(Blocks[0].uid));
     str2sci(str1, 1, 1);
     FREE(str1[0]);
     FREE(str1);