Sergio Gómez Del Real <sdelreal(a)codeweavers.com> wrote:
+ DWORD size_bits; + ULONG read;
Why not have them both assign same type ULONG?
+ + hr = IStream_Stat( stm, &stat, STATFLAG_NONAME ); + + if (SUCCEEDED( hr )) + { + data = HeapAlloc( GetProcessHeap(), 0, stat.cbSize.u.LowPart ); + if (!data) return E_OUTOFMEMORY; + + hr = IStream_Read( stm, data, stat.cbSize.u.LowPart, &read ); + if (hr != S_OK || read != stat.cbSize.u.LowPart) + {
IStream_Read() never returns S_OK for short reads.
+ HeapFree( GetProcessHeap(), 0, data ); + return E_FAIL; + } + + size_bits = read - sizeof(DWORD) - sizeof(ENHMETAHEADER); + if (size_bits <= 0) + {
size_bits is an unsigned, so the condition above is not correct. -- Dmitry.