]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/lib/reed_solomon.c (rs_recover): Prevent memory leak.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 23 Jun 2011 18:55:36 +0000 (20:55 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 23 Jun 2011 18:55:36 +0000 (20:55 +0200)
(main): Close file.

ChangeLog
grub-core/lib/reed_solomon.c

index 66c55d101e182fe4f521890e3045d6bd6f1ad590..c267a8a0fd582a91ad685fa8fc220b28c220276b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-06-23  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/lib/reed_solomon.c (rs_recover): Prevent memory leak.
+       (main): Close file.
+
 2011-06-23  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/loader/i386/xnu.c (grub_cpu_xnu_fill_devprop): Don't attempt
index e500ba32dbdd575906ee87d9072f4e03a39b0a3a..8b5e8235a9164cb44b33d07b2c65c63a5bea4359 100644 (file)
@@ -265,6 +265,22 @@ rs_recover (gf_single_t *m, grub_size_t s, grub_size_t rs)
 
   syndroms (m, s, rs, sy);
 
+  for (i = 0; i < (int) rs; i++)
+    if (sy[i] != 0)
+      break;
+
+  /* No error detected.  */
+  if (i == (int) rs)
+    {
+#ifndef STANDALONE
+      free (sigma);
+      free (errpot);
+      free (errpos);
+      free (sy);
+#endif
+      return;
+    }
+
   {
     gf_single_t *eq;
 
@@ -275,14 +291,6 @@ rs_recover (gf_single_t *m, grub_size_t s, grub_size_t rs)
     scratch += rs2 * (rs2 + 1) * sizeof (gf_single_t);
 #endif
 
-    for (i = 0; i < (int) rs; i++)
-      if (sy[i] != 0)
-       break;
-
-    /* No error detected.  */
-    if (i == (int) rs)
-      return;
-
     for (i = 0; i < (int) rs2; i++)
       for (j = 0; j < (int) rs2 + 1; j++)
        eq[i * (rs2 + 1) + j] = sy[i+j];
@@ -504,6 +512,7 @@ main (int argc, char **argv)
   rs = s / 3;
   buf = xmalloc (s + rs + SECTOR_SIZE);
   fread (buf, 1, s, in);
+  fclose (in);
 
   grub_reed_solomon_add_redundancy (buf, s, rs);