Make a copy of the buffer before calling sprintf. 15/1215/2 5.3.0-beta-1
Vincent COUVERT [Thu, 1 Jul 2010 15:14:28 +0000 (17:14 +0200)]
Using the same buffer as input and output of sprintf can cause input/output erasing.

Change-Id: I3d6c18ac1dc462db63ee33b5d8120a9a20247445

scilab/modules/core/src/c/tmpdir.c

index babb4e3..e1fc6e5 100644 (file)
@@ -124,7 +124,9 @@ void createScilabTMPDIR(void)
         }
 
         /* XXXXXX will be randomized by mkdtemp */
-        sprintf(tmp_dir, "%s/SCI_TMP_%d_XXXXXX", tmp_dir, (int) getpid());
+        char *tmp_dir_strdup = strdup(tmp_dir); /* Copy to avoid to have the same buffer as input and output for sprintf */
+        sprintf(tmp_dir, "%s/SCI_TMP_%d_XXXXXX", tmp_dir_strdup, (int) getpid());
+        free(tmp_dir_strdup);
 
         if(mkdtemp(tmp_dir) < 0)
         {