mirror of
https://github.com/reactos/wine.git
synced 2024-11-25 04:39:45 +00:00
windowscodecs: Accept GIF files with no trailer.
This commit is contained in:
parent
b49cc56614
commit
f1405ca0d2
@ -1034,6 +1034,71 @@ static void test_createfromstream(void)
|
||||
IWICImagingFactory_Release(factory);
|
||||
}
|
||||
|
||||
/* 1x1 pixel gif, missing trailer */
|
||||
static unsigned char gifimage_notrailer[] = {
|
||||
0x47,0x49,0x46,0x38,0x37,0x61,0x01,0x00,0x01,0x00,0x80,0x00,0x00,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0x2c,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x02,0x02,0x44,
|
||||
0x01,0x00
|
||||
};
|
||||
|
||||
static void test_gif_notrailer(void)
|
||||
{
|
||||
IWICBitmapDecoder *decoder;
|
||||
IWICImagingFactory *factory;
|
||||
HRESULT hr;
|
||||
IWICStream *gifstream;
|
||||
IWICBitmapFrameDecode *framedecode;
|
||||
UINT framecount;
|
||||
|
||||
hr = CoCreateInstance(&CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER,
|
||||
&IID_IWICImagingFactory, (void**)&factory);
|
||||
ok(hr == S_OK, "CoCreateInstance failed, hr=%x\n", hr);
|
||||
if (FAILED(hr)) return;
|
||||
|
||||
hr = IWICImagingFactory_CreateStream(factory, &gifstream);
|
||||
ok(hr == S_OK, "CreateStream failed, hr=%x\n", hr);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = IWICStream_InitializeFromMemory(gifstream, gifimage_notrailer,
|
||||
sizeof(gifimage_notrailer));
|
||||
ok(hr == S_OK, "InitializeFromMemory failed, hr=%x\n", hr);
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = CoCreateInstance(&CLSID_WICGifDecoder, NULL, CLSCTX_INPROC_SERVER,
|
||||
&IID_IWICBitmapDecoder, (void**)&decoder);
|
||||
ok(hr == S_OK, "CoCreateInstance failed, hr=%x\n", hr);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = IWICBitmapDecoder_Initialize(decoder, (IStream*)gifstream,
|
||||
WICDecodeMetadataCacheOnDemand);
|
||||
ok(hr == S_OK, "Initialize failed, hr=%x\n", hr);
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = IWICBitmapDecoder_GetFrame(decoder, 0, &framedecode);
|
||||
ok(hr == S_OK, "GetFrame failed, hr=%x\n", hr);
|
||||
if (SUCCEEDED(hr)) IWICBitmapFrameDecode_Release(framedecode);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = IWICBitmapDecoder_GetFrameCount(decoder, &framecount);
|
||||
ok(hr == S_OK, "GetFrameCount failed, hr=%x\n", hr);
|
||||
ok(framecount == 1, "framecount=%u\n", framecount);
|
||||
}
|
||||
|
||||
IWICBitmapDecoder_Release(decoder);
|
||||
}
|
||||
|
||||
IWICStream_Release(gifstream);
|
||||
}
|
||||
|
||||
IWICImagingFactory_Release(factory);
|
||||
}
|
||||
|
||||
START_TEST(bmpformat)
|
||||
{
|
||||
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
|
||||
@ -1045,6 +1110,7 @@ START_TEST(bmpformat)
|
||||
test_decode_rle4();
|
||||
test_componentinfo();
|
||||
test_createfromstream();
|
||||
test_gif_notrailer();
|
||||
|
||||
CoUninitialize();
|
||||
}
|
||||
|
@ -320,7 +320,10 @@ DGifGetRecordType(GifFileType * GifFile,
|
||||
GifByteType Buf;
|
||||
|
||||
if (READ(GifFile, &Buf, 1) != 1) {
|
||||
return GIF_ERROR;
|
||||
/* Wine-specific behavior: Native accepts broken GIF files that have no
|
||||
* terminator, so we match this by treating EOF as a terminator. */
|
||||
*Type = TERMINATE_RECORD_TYPE;
|
||||
return GIF_OK;
|
||||
}
|
||||
|
||||
switch (Buf) {
|
||||
|
Loading…
Reference in New Issue
Block a user