An MSVCRT_fgetc bug
Tobias Ringström
tobias at swedot.se
Mon Sep 25 03:04:00 CDT 2006
There's a bug in MSVCRT_fgetc in 0.9.21 (likely introduced in 0.9.19) in
that it sometimes sign extends the byte read from the file. The
following program illustrates the problem:
#include <stdio.h>
int
main()
{
FILE *f = fopen("tmp.bin", "w+");
fputc(0xe0, f);
fputc(0xe0, f);
rewind(f);
printf("0x%08x\n", fgetc(f));
printf("0x%08x\n", fgetc(f));
fclose(f);
return 0;
}
The output is:
0x000000e0
0xffffffe0 (should be 0x000000e0 too)
The bug is likely this line:
http://source.winehq.org/source/dlls/msvcrt/file.c#L2134
That line is now
i = file->_ptr++;
but should be
i = *(unsigned char*)(file->_ptr++);
I don't have a build environment for Wine, and it felt like overkill to
set one up for this little bug, so I've not been able to verify my
hypothesis. I hope that's acceptable.
/Tobias
More information about the wine-devel
mailing list