From 1051d31b47289f936a0bf196eccb017ae112efb8 Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Mon, 10 Jan 2011 17:13:02 -0600 Subject: [PATCH] windowscodecs: Accept failure when seeking to the start of a TGA footer. --- dlls/windowscodecs/tgaformat.c | 31 +++++++++++++++++++------------ 1 files changed, 19 insertions(+), 12 deletions(-) diff --git a/dlls/windowscodecs/tgaformat.c b/dlls/windowscodecs/tgaformat.c index 14510cf..8db1cf1 100644 --- a/dlls/windowscodecs/tgaformat.c +++ b/dlls/windowscodecs/tgaformat.c @@ -284,25 +284,32 @@ static HRESULT WINAPI TgaDecoder_Initialize(IWICBitmapDecoder *iface, IStream *p /* Read footer if there is one */ seek.QuadPart = -sizeof(tga_footer); 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) && bytesread != sizeof(tga_footer)) - { - TRACE("got only %u footer bytes\n", bytesread); - hr = E_FAIL; - } - if (FAILED(hr)) goto end; + if (SUCCEEDED(hr)) { + 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; + } - if (memcmp(footer.magic, tga_footer_magic, sizeof(tga_footer_magic)) == 0) - { - This->extension_area_offset = footer.extension_area_offset; - This->developer_directory_offset = footer.developer_directory_offset; + if (memcmp(footer.magic, tga_footer_magic, sizeof(tga_footer_magic)) == 0) + { + This->extension_area_offset = footer.extension_area_offset; + This->developer_directory_offset = footer.developer_directory_offset; + } + else + { + This->extension_area_offset = 0; + This->developer_directory_offset = 0; + } } else { + /* File is too small to have a footer. */ This->extension_area_offset = 0; This->developer_directory_offset = 0; + hr = S_OK; } if (This->extension_area_offset) -- 1.7.1