Fixed a overflow problem in dump (LFS)
authorStelian Pop <stelian@popies.net>
Fri, 17 Aug 2001 09:55:09 +0000 (09:55 +0000)
committerStelian Pop <stelian@popies.net>
Fri, 17 Aug 2001 09:55:09 +0000 (09:55 +0000)
CHANGES
dump/traverse.c

diff --git a/CHANGES b/CHANGES
index dccc4edd41b306ab93ee0410ea16eaa050c32e68..dba3572463ec12b7920ad084d59c5af8d5785469 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,4 @@
-$Id: CHANGES,v 1.134 2001/08/16 15:24:21 stelian Exp $
+$Id: CHANGES,v 1.135 2001/08/17 09:55:09 stelian Exp $
 
 Changes between versions 0.4b23 and 0.4b24 (released ?????????????)
 ===================================================================
@@ -27,6 +27,10 @@ Changes between versions 0.4b23 and 0.4b24 (released ?????????????)
        the tape format of a bzip2 dump is not compatible with the
        original BSD tape format.
 
+7.     Fixed a overflow problem in dump corrupting the dump when
+       very large files were encountered. Thanks to Vladimir Nadvornik 
+       for the bug report.
+
 Changes between versions 0.4b22 and 0.4b23 (released July 20, 2001)
 ===================================================================
 
index a8ca3a4f08cba32c08b0b418be65712bc516d410..975f6f82e3bf8957c28dd937a68a68ce05ffd905 100644 (file)
@@ -41,7 +41,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: traverse.c,v 1.37 2001/07/19 09:49:35 stelian Exp $";
+       "$Id: traverse.c,v 1.38 2001/08/17 09:55:09 stelian Exp $";
 #endif /* not lint */
 
 #include <config.h>
@@ -898,8 +898,8 @@ dumpino(struct dinode *dp, dump_ino_t ino)
 
        ext2fs_block_iterate2(fs, (ext2_ino_t)ino, 0, NULL, dumponeblock, (void *)&bc);
        /* deal with holes at the end of the inode */
-       if (i_size > bc.next_block*sblock->fs_fsize) {
-               remaining = i_size - bc.next_block*sblock->fs_fsize;
+       if (i_size > ((u_quad_t)bc.next_block) * sblock->fs_fsize) {
+               remaining = i_size - ((u_quad_t)bc.next_block) * sblock->fs_fsize;
                for (i = 0; i < howmany(remaining, sblock->fs_fsize); i++) {
                        bc.buf[bc.cnt++] = 0;
                        if (bc.cnt == bc.max) {