Remove a memory leak in splitline 77/10077/4
Sylvestre Ledru [Sun, 23 Dec 2012 21:23:24 +0000 (22:23 +0100)]
Change-Id: I75b116917e16e2f71fb4b9f79f021d41c2597602

scilab/modules/spreadsheet/src/c/splitLine.c

index a6a5c4a..f0b8f92 100644 (file)
@@ -14,6 +14,7 @@
 #include "splitLine.h"
 #include "csv_strsubst.h"
 #include "MALLOC.h"
+#include "freeArrayOfString.h"
 /* ==================================================================== */
 char **splitLineCSV(const char *str, const char *sep, int *toks, char meta)
 {
@@ -37,7 +38,8 @@ char **splitLineCSV(const char *str, const char *sep, int *toks, char meta)
     sprintf(tokenreplacement_string, "%s%s%s", sep, EMPTYFIELD, sep);
     substitutedstring = csv_strsubst(str, tokenstring_to_search, tokenreplacement_string);
     /* in a string like foo;bar;;;, replace all the ;;, not only the first and last one */
-    while (strstr(substitutedstring, tokenstring_to_search) != NULL) {
+    while (strstr(substitutedstring, tokenstring_to_search) != NULL)
+    {
         substitutedstring = csv_strsubst(substitutedstring, tokenstring_to_search, tokenreplacement_string);
     }
 
@@ -102,6 +104,7 @@ char **splitLineCSV(const char *str, const char *sep, int *toks, char meta)
                             *toks = 0;
                             FREE(substitutedstring);
                             substitutedstring = NULL;
+                            freeArrayOfString(retstr, strlen(substitutedstring));
                             return NULL;
                         }
                         memcpy(retstr[curr_str], (idx - len), len);
@@ -156,6 +159,7 @@ char **splitLineCSV(const char *str, const char *sep, int *toks, char meta)
                 FREE(substitutedstring);
                 substitutedstring = NULL;
             }
+            freeArrayOfString(retstr, strlen(substitutedstring));
             return NULL;
         }