From: Andrew Nguyen Subject: msvcrt: Avoid the use of SetFilePointerEx in _lseeki64. Message-Id: <4DAE7A8C.8050506@codeweavers.com> Date: Wed, 20 Apr 2011 01:17:48 -0500 This fixes bug 12372. --- dlls/msvcrt/file.c | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-) diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c index b8077d2..c1a7785 100644 --- a/dlls/msvcrt/file.c +++ b/dlls/msvcrt/file.c @@ -863,7 +863,7 @@ void msvcrt_free_io(void) __int64 CDECL MSVCRT__lseeki64(int fd, __int64 offset, int whence) { HANDLE hand = msvcrt_fdtoh(fd); - LARGE_INTEGER ofs, ret; + LARGE_INTEGER ofs; TRACE(":fd (%d) handle (%p)\n",fd,hand); if (hand == INVALID_HANDLE_VALUE) @@ -881,13 +881,16 @@ __int64 CDECL MSVCRT__lseeki64(int fd, __int64 offset, int whence) (whence==SEEK_CUR)?"SEEK_CUR": (whence==SEEK_END)?"SEEK_END":"UNKNOWN"); + /* The MoleBox protection scheme expects msvcrt to use SetFilePointer only, + * so a LARGE_INTEGER offset cannot be passed directly via SetFilePointerEx. */ ofs.QuadPart = offset; - if (SetFilePointerEx(hand, ofs, &ret, whence)) + if ((ofs.LowPart = SetFilePointer(hand, ofs.LowPart, &ofs.HighPart, whence)) != INVALID_SET_FILE_POINTER || + GetLastError() == ERROR_SUCCESS) { MSVCRT_fdesc[fd].wxflag &= ~(WX_ATEOF|WX_READEOF); /* FIXME: What if we seek _to_ EOF - is EOF set? */ - return ret.QuadPart; + return ofs.QuadPart; } TRACE(":error-last error (%d)\n",GetLastError()); msvcrt_set_errno(GetLastError()); -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.16 (GNU/Linux) Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/ iQIcBAEBAgAGBQJNrnqpAAoJEK/FbHgLAxL2zI4QAIObDUTiy5FNzl8Ha3QvUsmb 5z+6THw2MiFJ6+/obyWCdjQq64B7v0DbueGrfuSVnacJogfefUU3D4yWytQFqAd2 4d6zNfRPH1HwSDys/F5NMh+uCkmO7dZrKnmjAxjmkLMm2v4FZv42rIwDPpbiR0zu wK4wJE4Gg3Av6TUfR9O1A0MpcOmLTv7p0C41rwX3S8rhHF36nGjw2HkQyK4CUM8Y C8B3Cf4ERyLcR30hODCBtDgVxpbd6x/1VQScB0r5V4xNy7SMNsIQUYl8SP6ufHGE ev/dJZJvPMeer1C/uth6FXN9VSjVu0XTy+N0kY0UChC5Z9J+nHkgAsTi9b4PtyIE PZIULms74xzyHamkbriJdM8AnpQXg5j0/3e58hbYrfeZ75FBlgt2S9bGKppA8rWz gLQD/r5ph1VwuiaCa24FuNSHNZl7unrvyBvHIbKy+qRff1KLSU8qkbzGKJnydnXZ 2cq6CqbCUadoSD6c7Zm6RGognPAOxOpmpQjVcWlX5nNoOvZ9gy6EztC1djbpxIAE UmoUfxBTxw4eqQmzN8SdDuImwya+wJXPikIaieTkQ9T6NvxpLxFahr2bkQCQSp08 GjEeHKhzYgiGas+k4r/xz8BHAsOFYH5th0OtQYRyreMhEO1k6WWJTjCKHJCzuUHp CUKrJBZGObzmpfa2EUUK =Q61q -----END PGP SIGNATURE-----