just discovered this issue while going through some linux mailinglists:

otaku% dd if=/dev/urandom of=testfile bs=1 count=42 
42+0 records in
42+0 records out
42 bytes transferred in 0.000393 secs (106894 bytes/sec)

otaku% hexdump -s 42 testfile 
000002a 134d b7b9 e085 da16 63b0 554a 1603 ead0
000003a 4bd1 fbfd c329 b606 e592 1377 6e10 4b9d
000004a c018 0fc9 ebf4 9ae2 9f1a               
0000054

otaku% hexdump -s 43 testfile
000002a

otaku% hexdump -s 41 testfile
0000029 009f                                   
000002a

the attached patch fixes this issue for HEAD. i also checked out any license
issues which could pop up. this fix comes from the util-linux-ng repository [1]
which seems entirely GPLv2'ed. :)

cheers.
alex

[1] 
http://git.kernel.org/?p=utils/util-linux-ng/util-linux-ng.git;a=tree;hb=HEAD

ps: no fix for od(1) necessary since it's simply a hardlink to hexdump(1). ;)
-- 
a13x
diff --git a/usr.bin/hexdump/display.c b/usr.bin/hexdump/display.c
index db04c49..3e3d903 100644
--- a/usr.bin/hexdump/display.c
+++ b/usr.bin/hexdump/display.c
@@ -378,7 +378,7 @@ doskip(const char *fname, int statok)
        if (statok) {
                if (fstat(fileno(stdin), &sb))
                        err(1, "%s", fname);
-               if (S_ISREG(sb.st_mode) && skip >= sb.st_size) {
+               if (S_ISREG(sb.st_mode) && skip > sb.st_size) {
                        address += sb.st_size;
                        skip -= sb.st_size;
                        return;
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"

Reply via email to