https://bugs.winehq.org/show_bug.cgi?id=37940 Bug ID: 37940 Summary: Invalid file buffering behavior causes data corruption Product: Wine Version: 1.7.34 Hardware: x86 OS: Linux Status: UNCONFIRMED Severity: major Priority: P2 Component: msvcrt Assignee: wine-bugs(a)winehq.org Reporter: ho-rr-or(a)mail.ru Distribution: --- Created attachment 50543 --> https://bugs.winehq.org/attachment.cgi?id=50543 Compiled binary to reproduce msvcrt file routines sometimes corrupt file data by invalid buffer flushing. Reproduced by following code (compiled binary attached): char data[68200]; char buf[sizeof(data)]; for (int i = 0; i < sizeof(data); i++) data[i] = rand(); FILE* f = _wfsopen(L"test.bin", L"wb+", 64); rewind(f); fwrite(data, 1, 68100, f); // Following calls possible corrupt buffer rewind(f); fread(buf, 1, 40000, f); fread(buf, 1, 40000, f); // Following call causes wrong buffer flushing fwrite(&data[68100], 1, 100, f); fclose(f); f = fopen("test.bin", "rb"); fread(buf, 1, sizeof(buf), f); fclose(f); printf("Memcmp: %d\n", memcmp(data, buf, sizeof(buf))); Windows output: Memcmp: 0 Wine output: Memcmp: -1 Windows file size: 68200 Wine file size: 72296 Bug causes at least cl.exe in Microsoft Visual Studio 2008/2010. Reproduced when cl.exe generates precompiled header. test.h: #pragma once #include "Windows.h" #include <iostream> test.cpp: #include "test.h" int main() { std::cout << "WORKS!" << std::endl; return 0; } Command to reproduce: rm test.pch; wine cl.exe /Yctest.h test.cpp -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.