[trunk] WIP: solve some memory leak in test compare functions
authorMickael Savinaud <savmickael@users.noreply.github.com>
Wed, 19 Oct 2011 13:06:49 +0000 (13:06 +0000)
committerMickael Savinaud <savmickael@users.noreply.github.com>
Wed, 19 Oct 2011 13:06:49 +0000 (13:06 +0000)
CHANGES
tests/comparePGXimages.c
tests/compareRAWimages.c

diff --git a/CHANGES b/CHANGES
index 1ea0ed9c539b8ea9c86ba065b4ff81ed6f49f2a1..e64b5a9895f6d945f237857c691a87e7c1ba2030 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -5,6 +5,9 @@ What's New for OpenJPEG
 ! : changed
 + : added
 
+October 19, 2011
+* [mickael] WIP: resolve some memory leak in compare functions
+
 October 12, 2011
 * [mickael] WIP: resolve heap corruption with p0_07.j2k (credit to Winfried)
 * [mickael] WIP: correct some memory leaks in applications functions 
index 97cd0baa4fc3340d205cf85b09be2e29b5ffea5b..48189156bbd41cc29c77ee638f51781aa20cc6c8 100644 (file)
@@ -321,7 +321,10 @@ double* parseToleranceValues( char* inArg, const int nbcomp)
     }
 
   if (it_comp != nbcomp)
+  {
+       free(outArgs);
     return NULL;
+  }
   else
     return outArgs;
 }
@@ -407,10 +410,21 @@ opj_image_t* readImageFromFilePGX(char* filename, int nbFilenamePGX, char *separ
     // Read the pgx file corresponding to the component
     image_read = pgxtoimage(filenameComponentPGX, &parameters);
     if (!image_read)
-      {
-      fprintf(stderr, "Unable to load pgx file\n");
-      return NULL;
-      }
+    {
+       int it_free_data;
+               fprintf(stderr, "Unable to load pgx file\n");
+
+               free(param_image_read);
+
+               for (it_free_data = 0; it_free_data < it_file; it_free_data++) {
+                       free(data[it_free_data]);
+               }
+               free(data);
+
+               free(filenameComponentPGX);
+
+               return NULL;
+       }
 
     // Set the image_read parameters
     param_image_read[it_file].x0 = 0;
@@ -498,10 +512,10 @@ int main(int argc, char **argv)
   if( parse_cmdline_cmp(argc, argv, &inParam) == EXIT_FAILURE )
     {
     comparePGXimages_help_display();
-    if (!inParam.tabMSEvalues) free(inParam.tabMSEvalues);
-    if (!inParam.tabPEAKvalues) free(inParam.tabPEAKvalues);
-    if (!inParam.base_filename) free(inParam.base_filename);
-    if (!inParam.test_filename) free(inParam.test_filename);
+    if (inParam.tabMSEvalues) free(inParam.tabMSEvalues);
+    if (inParam.tabPEAKvalues) free(inParam.tabPEAKvalues);
+    if (inParam.base_filename) free(inParam.base_filename);
+    if (inParam.test_filename) free(inParam.test_filename);
     return EXIT_FAILURE;
     }
 
@@ -560,10 +574,10 @@ int main(int argc, char **argv)
     }
   else
     {
-    if (!inParam.tabMSEvalues) free(inParam.tabMSEvalues);
-    if (!inParam.tabPEAKvalues) free(inParam.tabPEAKvalues);
-    if (!inParam.base_filename) free(inParam.base_filename);
-    if (!inParam.test_filename) free(inParam.test_filename);
+    if (inParam.tabMSEvalues) free(inParam.tabMSEvalues);
+    if (inParam.tabPEAKvalues) free(inParam.tabPEAKvalues);
+    if (inParam.base_filename) free(inParam.base_filename);
+    if (inParam.test_filename) free(inParam.test_filename);
     return EXIT_FAILURE;
     }
 
@@ -582,10 +596,10 @@ int main(int argc, char **argv)
     }
   else
     {
-    if (!inParam.tabMSEvalues) free(inParam.tabMSEvalues);
-    if (!inParam.tabPEAKvalues) free(inParam.tabPEAKvalues);
-    if (!inParam.base_filename) free(inParam.base_filename);
-    if (!inParam.test_filename) free(inParam.test_filename);
+    if (inParam.tabMSEvalues) free(inParam.tabMSEvalues);
+    if (inParam.tabPEAKvalues) free(inParam.tabPEAKvalues);
+    if (inParam.base_filename) free(inParam.base_filename);
+    if (inParam.test_filename) free(inParam.test_filename);
     free(filenamePNGbase);
     return EXIT_FAILURE;
     }
index fb037c248c6d9b782e58ea4637304b0db0a15d46..851dbfff48438faa2b53d58abbef9853cbcbfde2 100644 (file)
@@ -127,18 +127,52 @@ int main(int argc, char **argv)
        if (parse_cmdline_cmp(argc, argv, &inParam) == EXIT_FAILURE)
        {
                compareRAWimages_help_display();
+
+               /* Free Memory */
+               if (inParam.base_filename){
+                       free(inParam.base_filename);
+                       inParam.base_filename = NULL;
+               }
+               if (inParam.test_filename){
+                       free(inParam.test_filename);
+                       inParam.test_filename = NULL;
+               }
+
                return EXIT_FAILURE;
        }
 
        file_test = fopen(inParam.test_filename, "rb");
        if (!file_test) {
                fprintf(stderr, "Failed to open %s for reading !!\n", inParam.test_filename);
+
+               /* Free Memory */
+               if (inParam.base_filename){
+                       free(inParam.base_filename);
+                       inParam.base_filename = NULL;
+               }
+               if (inParam.test_filename){
+                       free(inParam.test_filename);
+                       inParam.test_filename = NULL;
+               }
+
                return EXIT_FAILURE;
        }
 
        file_base = fopen(inParam.base_filename, "rb");
        if (!file_base) {
                fprintf(stderr, "Failed to open %s for reading !!\n", inParam.base_filename);
+
+               /* Free Memory */
+               if (inParam.base_filename){
+                       free(inParam.base_filename);
+                       inParam.base_filename = NULL;
+               }
+               if (inParam.test_filename){
+                       free(inParam.test_filename);
+                       inParam.test_filename = NULL;
+               }
+
+               fclose(file_test);
                return EXIT_FAILURE;
        }
 
@@ -179,6 +213,16 @@ int main(int argc, char **argv)
                }
        }
 
+       /* Free Memory */
+       if (inParam.base_filename){
+               free(inParam.base_filename);
+               inParam.base_filename = NULL;
+       }
+       if (inParam.test_filename){
+               free(inParam.test_filename);
+               inParam.test_filename = NULL;
+       }
+
        fclose(file_test);
        fclose(file_base);