fix: dont write trash to file, when ReadFile() fails

This commit is contained in:
deepzero 2014-01-15 11:59:42 +01:00
parent f3ba7d14a7
commit 89472363f0
1 changed files with 46 additions and 14 deletions

View File

@ -3807,18 +3807,34 @@ __declspec(dllexport) bool TITCALL ExtractOverlayW(wchar_t* szFileName, wchar_t*
SetFilePointer(hFile, OverlayStart, NULL, FILE_BEGIN); SetFilePointer(hFile, OverlayStart, NULL, FILE_BEGIN);
while(OverlaySize > 0) while(OverlaySize > 0)
{ {
RtlZeroMemory(ueReadBuffer, 0x2000);
if(OverlaySize > 0x1000) if(OverlaySize > 0x1000)
{ {
RtlZeroMemory(ueReadBuffer, 0x2000); if(ReadFile(hFile, ueReadBuffer, 0x1000, &ueNumberOfBytesRead, NULL))
if(!ReadFile(hFile, ueReadBuffer, 0x1000, &ueNumberOfBytesRead, NULL) || !WriteFile(hFileWrite, ueReadBuffer, 0x1000, &ueNumberOfBytesRead, NULL)) {
if(!WriteFile(hFileWrite, ueReadBuffer, 0x1000, &ueNumberOfBytesRead, NULL))
return false; return false;
}
else
{
return false;
}
OverlaySize = OverlaySize - 0x1000; OverlaySize = OverlaySize - 0x1000;
} }
else else
{ {
RtlZeroMemory(ueReadBuffer, 0x2000); if(ReadFile(hFile, ueReadBuffer, OverlaySize, &ueNumberOfBytesRead, NULL))
if(!ReadFile(hFile, ueReadBuffer, OverlaySize, &ueNumberOfBytesRead, NULL) || !WriteFile(hFileWrite, ueReadBuffer, OverlaySize, &ueNumberOfBytesRead, NULL)) {
if(!WriteFile(hFileWrite, ueReadBuffer, OverlaySize, &ueNumberOfBytesRead, NULL))
return false; return false;
}
else
{
return false;
}
OverlaySize = 0; OverlaySize = 0;
} }
} }
@ -3878,18 +3894,34 @@ __declspec(dllexport) bool TITCALL AddOverlayW(wchar_t* szFileName, wchar_t* szO
SetFilePointer(hFile, FileSize, NULL, FILE_BEGIN); SetFilePointer(hFile, FileSize, NULL, FILE_BEGIN);
while(OverlaySize > 0) while(OverlaySize > 0)
{ {
RtlZeroMemory(ueReadBuffer, 0x2000);
if(OverlaySize > 0x1000) if(OverlaySize > 0x1000)
{ {
RtlZeroMemory(ueReadBuffer, 0x2000); if(ReadFile(hFileRead, ueReadBuffer, 0x1000, &uedNumberOfBytesRead, NULL))
if(!ReadFile(hFileRead, ueReadBuffer, 0x1000, &uedNumberOfBytesRead, NULL) || !WriteFile(hFile, ueReadBuffer, 0x1000, &uedNumberOfBytesRead, NULL)) {
if(!WriteFile(hFile, ueReadBuffer, 0x1000, &uedNumberOfBytesRead, NULL))
return false; return false;
}
else
{
return false;
}
OverlaySize = OverlaySize - 0x1000; OverlaySize = OverlaySize - 0x1000;
} }
else else
{ {
RtlZeroMemory(ueReadBuffer, 0x2000); if(ReadFile(hFileRead, ueReadBuffer, OverlaySize, &uedNumberOfBytesRead, NULL))
if(!ReadFile(hFileRead, ueReadBuffer, OverlaySize, &uedNumberOfBytesRead, NULL) || !WriteFile(hFile, ueReadBuffer, OverlaySize, &uedNumberOfBytesRead, NULL)) {
if(!WriteFile(hFile, ueReadBuffer, OverlaySize, &uedNumberOfBytesRead, NULL))
return false; return false;
}
else
{
return false;
}
OverlaySize = 0; OverlaySize = 0;
} }
} }