]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/lib/reed_solomon.c (grub_reed_solomon_add_redundancy):
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 4 Jan 2011 14:39:59 +0000 (15:39 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 4 Jan 2011 14:39:59 +0000 (15:39 +0100)
Prevent overflow.
(grub_reed_solomon_recover): Likewise.

ChangeLog
grub-core/lib/reed_solomon.c

index 505923fa9de6a27011d989bef24e90d743e3226e..3e20a118b0e50213a668c789605307ce20e7174c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-01-04  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/lib/reed_solomon.c (grub_reed_solomon_add_redundancy):
+       Prevent overflow.
+       (grub_reed_solomon_recover): Likewise.
+
 2011-01-04  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/lib/reed_solomon.c (main) [TEST]: Reactivate normal test.
index 62aad311155f1481e72d6ebd03be97c94acb8503..e500ba32dbdd575906ee87d9072f4e03a39b0a3a 100644 (file)
@@ -433,8 +433,8 @@ grub_reed_solomon_add_redundancy (void *buffer, grub_size_t data_size,
       tt = cs + crs;
       if (tt > MAX_BLOCK_SIZE)
        {
-         cs = (cs * MAX_BLOCK_SIZE) / tt;
-         crs = (crs * MAX_BLOCK_SIZE) / tt;
+         cs = ((cs * (MAX_BLOCK_SIZE / 512)) / tt) * 512;
+         crs = ((crs * (MAX_BLOCK_SIZE / 512)) / tt) * 512;
        }
       encode_block (ptr, cs, rptr, crs);
       ptr += cs;
@@ -468,8 +468,8 @@ grub_reed_solomon_recover (void *ptr_, grub_size_t s, grub_size_t rs)
       tt = cs + crs;
       if (tt > MAX_BLOCK_SIZE)
        {
-         cs = (cs * MAX_BLOCK_SIZE) / tt;
-         crs = (crs * MAX_BLOCK_SIZE) / tt;
+         cs = ((cs * (MAX_BLOCK_SIZE / 512)) / tt) * 512;
+         crs = ((crs * (MAX_BLOCK_SIZE / 512)) / tt) * 512;
        }
       decode_block (ptr, cs, rptr, crs);
       ptr += cs;