Index: dll/win32/oleaut32/olepicture.c =================================================================== --- dll/win32/oleaut32/olepicture.c (revision 72017) +++ dll/win32/oleaut32/olepicture.c (working copy) @@ -2411,25 +2411,27 @@ return HRESULT_FROM_WIN32(GetLastError()); dwFileSize = GetFileSize(hFile, NULL); - if (dwFileSize != INVALID_FILE_SIZE) + + if(dwFileSize == INVALID_FILE_SIZE){ + CloseHandle(hFile); + return HRESULT_FROM_WIN32(GetLastError()); + } + + hGlobal = GlobalAlloc(GMEM_FIXED, dwFileSize); + if (!hGlobal){ + CloseHandle(hFile); + return E_OUTOFMEMORY; + } + + if (!ReadFile(hFile, hGlobal, dwFileSize, &dwBytesRead, NULL)) { - hGlobal = GlobalAlloc(GMEM_FIXED, dwFileSize); - if (!hGlobal) - hr = E_OUTOFMEMORY; - else - { - if (!ReadFile(hFile, hGlobal, dwFileSize, &dwBytesRead, NULL)) - { - GlobalFree(hGlobal); - hr = HRESULT_FROM_WIN32(GetLastError()); - } - } + GlobalFree(hGlobal); + CloseHandle(hFile); + return HRESULT_FROM_WIN32(GetLastError()); } CloseHandle(hFile); - if (FAILED(hr)) return hr; - hr = CreateStreamOnHGlobal(hGlobal, TRUE, stream); if (FAILED(hr)) GlobalFree(hGlobal);