windowscodecs: Accept failure when seeking to the start of a TGA footer.

This commit is contained in:
Vincent Povirk 2011-01-10 17:13:02 -06:00 committed by Alexandre Julliard
parent 377d890820
commit f4ef7ff48a
1 changed files with 19 additions and 12 deletions

View File

@ -284,25 +284,32 @@ static HRESULT WINAPI TgaDecoder_Initialize(IWICBitmapDecoder *iface, IStream *p
/* Read footer if there is one */ /* Read footer if there is one */
seek.QuadPart = -sizeof(tga_footer); seek.QuadPart = -sizeof(tga_footer);
hr = IStream_Seek(pIStream, seek, STREAM_SEEK_END, NULL); hr = IStream_Seek(pIStream, seek, STREAM_SEEK_END, NULL);
if (FAILED(hr)) goto end;
hr = IStream_Read(pIStream, &footer, sizeof(tga_footer), &bytesread); if (SUCCEEDED(hr)) {
if (SUCCEEDED(hr) && bytesread != sizeof(tga_footer)) hr = IStream_Read(pIStream, &footer, sizeof(tga_footer), &bytesread);
{ if (SUCCEEDED(hr) && bytesread != sizeof(tga_footer))
TRACE("got only %u footer bytes\n", bytesread); {
hr = E_FAIL; TRACE("got only %u footer bytes\n", bytesread);
} hr = E_FAIL;
if (FAILED(hr)) goto end; }
if (memcmp(footer.magic, tga_footer_magic, sizeof(tga_footer_magic)) == 0) if (memcmp(footer.magic, tga_footer_magic, sizeof(tga_footer_magic)) == 0)
{ {
This->extension_area_offset = footer.extension_area_offset; This->extension_area_offset = footer.extension_area_offset;
This->developer_directory_offset = footer.developer_directory_offset; This->developer_directory_offset = footer.developer_directory_offset;
}
else
{
This->extension_area_offset = 0;
This->developer_directory_offset = 0;
}
} }
else else
{ {
/* File is too small to have a footer. */
This->extension_area_offset = 0; This->extension_area_offset = 0;
This->developer_directory_offset = 0; This->developer_directory_offset = 0;
hr = S_OK;
} }
if (This->extension_area_offset) if (This->extension_area_offset)