Christopher Faylor escreveu:
On Fri, May 18, 2007 at 09:02:15PM +0200, Christian Franke wrote:
Hi,

Cygwin 1.5.24-2 segfaults on unaligned lseek() on raw block devices with sector size >512 bytes.

Testcases:
$ dd skip=1000 bs=2047 if=/dev/scd0 of=/dev/null

$ ddrescue -c 1 /dev/scd0 file.iso


This is due to a fixed 512 byte buffer in fhandler_dev_floppy::lseek().
It is still present in HEAD revision.

The attached patch should fix. It should work for any sector size.
(Smoke-)tested with 1.5.24-2 (too busy to test with current CVS, sorry).

2007-05-18  Christian Franke <[EMAIL PROTECTED]>

        * fhandler_floppy.cc (fhandler_dev_floppy::lseek): Fixed segfault on
        unaligned seek due to fixed size buffer.


It seems like this could be done without the heavyweight use of malloc,
like use an automatic array of length 512 + 4 and calculate an aligned
address from that.


Or use alloca instead?

-  char buf[512];
+  char *buf = (char *) alloca (512);

Cheers,
Pedro Alves


Reply via email to