Allow unix_io offsets greater than 2G
Addresses SourceForge Bug: #1547922
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
diff --git a/lib/ext2fs/ChangeLog b/lib/ext2fs/ChangeLog
index 51a2f3a..8e5e8c0 100644
--- a/lib/ext2fs/ChangeLog
+++ b/lib/ext2fs/ChangeLog
@@ -1,3 +1,8 @@
+2006-11-12 Theodore Tso <tytso@mit.edu>
+
+ * unix_io.c (unix_flush): Allow offsets greater than 2G.
+ (Addresses SourceForge Bug #1547922)
+
2006-11-11 Theodore Tso <tytso@mit.edu>
* dirhash.c (str2hashbuf, ext2fs_dirhash): Add support for
diff --git a/lib/ext2fs/unix_io.c b/lib/ext2fs/unix_io.c
index fb33c16..4ede000 100644
--- a/lib/ext2fs/unix_io.c
+++ b/lib/ext2fs/unix_io.c
@@ -691,7 +691,7 @@
const char *arg)
{
struct unix_private_data *data;
- unsigned long tmp;
+ unsigned long long tmp;
char *end;
EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
@@ -702,10 +702,12 @@
if (!arg)
return EXT2_ET_INVALID_ARGUMENT;
- tmp = strtoul(arg, &end, 0);
+ tmp = strtoull(arg, &end, 0);
if (*end)
return EXT2_ET_INVALID_ARGUMENT;
data->offset = tmp;
+ if (data->offset < 0)
+ return EXT2_ET_INVALID_ARGUMENT;
return 0;
}
return EXT2_ET_INVALID_ARGUMENT;