Coverity #1164282, #1321381, #1321382, #1321131, #1321132 fixed 54/18454/8
Dhruv Khattar [Fri, 12 Aug 2016 10:59:41 +0000 (15:59 +0530)]
Change-Id: Ib010c8307b168a7895f4a5cb91ed298eb9efdfee

scilab/modules/spreadsheet/src/c/csvRead.c
scilab/modules/spreadsheet/src/c/xls.c

index baece09..2283e44 100644 (file)
@@ -119,31 +119,18 @@ csvResult* csvRead(const char *filename, const char *separator, const char *deci
 
     if (header != 0)
     {
-        mgetl(fd, header, &nblines, &errMGETL);
+        // Ignoring the header
+        pstLines = mgetl(fd, header, &nblines, &errMGETL);
+        freeArrayOfWideString(pstLines, nblines);
+        pstLines = NULL;
     }
 
     pwstLines = mgetl(fd, -1, &nblines, &errMGETL);
-    pstLines = (char**)MALLOC(sizeof(char*) * nblines);
-
-    {
-        int i = 0;
-        for (i = 0 ; i < nblines ; i++)
-        {
-            pstLines[i] = wide_string_to_UTF8(pwstLines[i]);
-        }
-
-    }
 
     mclose(fd);
 
     if (errMGETL != MGETL_NO_ERROR)
     {
-        if (pwstLines)
-        {
-            freeArrayOfWideString(pwstLines, nblines);
-            pwstLines = NULL;
-        }
-
         result = (csvResult*)(MALLOC(sizeof(csvResult)));
         if (result)
         {
@@ -157,6 +144,19 @@ csvResult* csvRead(const char *filename, const char *separator, const char *deci
         return result;
     }
 
+    pstLines = (char**)MALLOC(sizeof(char*) * nblines);
+
+    {
+        int i = 0;
+        for (i = 0 ; i < nblines ; i++)
+        {
+            pstLines[i] = wide_string_to_UTF8(pwstLines[i]);
+        }
+
+    }
+    freeArrayOfWideString(pwstLines, nblines);
+    pwstLines = NULL;
+
     if (regexpcomments)
     {
         int iErr = 0;
@@ -179,6 +179,7 @@ csvResult* csvRead(const char *filename, const char *separator, const char *deci
                 result->pstrComments = NULL;
                 result->nbComments = 0;
             }
+            freeArrayOfString(pstLines, nblines);
             return result;
         }
 
@@ -191,11 +192,6 @@ csvResult* csvRead(const char *filename, const char *separator, const char *deci
             pCleanedLines = removeComments((const char**)pstLines, nblines, (const char*)regexpcomments, &nbCleanedLines, &iErr);
             if (pCleanedLines)
             {
-                if (pwstLines)
-                {
-                    freeArrayOfWideString(pwstLines, nblines);
-                    pwstLines = NULL;
-                }
                 FREE(pstLines);
                 pstLines = pCleanedLines;
                 nblines = nbCleanedLines;
@@ -216,7 +212,6 @@ csvResult* csvRead(const char *filename, const char *separator, const char *deci
 
     result = csvTextScan((const char**)pstLines, nblines, (const char*)separator, (const char*)decimal);
     freeArrayOfString(pstLines, nblines);
-    freeArrayOfWideString(pwstLines, nblines);
 
     if (result)
     {
index 2dc3b08..314474a 100644 (file)
@@ -112,8 +112,9 @@ void xls_read(int *fd, int *cur_pos, double **data, int **chainesind, int *N, in
     }
 
     pos = mtell(*fd);
-    if (*err > 0)
+    if (pos < 0)
     {
+        *err = 2;
         goto ErrL;
     }
 
@@ -444,7 +445,7 @@ void xls_open(int *err, int *fd, char ***sst, int *ns, char ***Sheetnames, int**
     }
 
     cur_pos = mtell(*fd);
-    if (*err > 0)
+    if (cur_pos < 0)
     {
         goto Err2;
     }