Fix leaks and invalid memory accesses
[lttv.git] / lttv / lttv / sync / event_processing_text.c
index 9dd5d30208b8ba9deb4214ce418b2cabe5eae371..8471096a6d07d90af439843196d4321c76cde370 100644 (file)
@@ -16,6 +16,7 @@
  * MA 02111-1307, USA.
  */
 
+#define _GNU_SOURCE
 #define NANOSECONDS_PER_SECOND 1000000000
 #define CPU_FREQ 1e9
 
@@ -120,6 +121,8 @@ static void destroyProcessingText(SyncState* const syncState)
                return;
        }
 
+       fclose(processingData->testCase);
+
        if (syncState->stats && processingData->factors)
        {
                g_array_free(processingData->factors, TRUE);
@@ -139,7 +142,6 @@ static void destroyProcessingText(SyncState* const syncState)
  */
 static void finalizeProcessingText(SyncState* const syncState)
 {
-       size_t len;
        int retval;
        unsigned int* seq;
        GArray* factors;
@@ -147,11 +149,12 @@ static void finalizeProcessingText(SyncState* const syncState)
                syncState->processingData;
        FILE* testCase= processingData->testCase;
        char* line= NULL;
+       size_t bufLen;
 
        seq= calloc(syncState->traceNb, sizeof(unsigned int));
 
        skipCommentLines(testCase);
-       retval= getline(&line, &len, testCase);
+       retval= getline(&line, &bufLen, testCase);
        while(!feof(testCase))
        {
                unsigned int sender, receiver;
@@ -164,9 +167,9 @@ static void finalizeProcessingText(SyncState* const syncState)
                        g_error(strerror(errno));
                }
 
-               if (line[len - 1] == '\n')
+               if (line[retval - 1] == '\n')
                {
-                       line[len - 1]= '\0';
+                       line[retval - 1]= '\0';
                }
 
                retval= sscanf(line, " %u %u %lf %lf %c", &sender, &receiver,
@@ -262,7 +265,7 @@ static void finalizeProcessingText(SyncState* const syncState)
                seq[sender]++;
 
                skipCommentLines(testCase);
-               retval= getline(&line, &len, testCase);
+               retval= getline(&line, &bufLen, testCase);
        }
 
        free(seq);
@@ -352,6 +355,11 @@ static unsigned int readTraceNb(FILE* testCase)
                abort();
        }
 
+       if (line)
+       {
+               free(line);
+       }
+
        return result;
 }
 
This page took 0.023462 seconds and 4 git commands to generate.