diff --git a/dlls/windowscodecs/gifformat.c b/dlls/windowscodecs/gifformat.c index 05bf2db5952..7b88735411b 100644 --- a/dlls/windowscodecs/gifformat.c +++ b/dlls/windowscodecs/gifformat.c @@ -857,8 +857,8 @@ static const void *get_GCE_data(GifFrameDecode *This) for (i = 0; i < This->frame->Extensions.ExtensionBlockCount; i++) { if (This->frame->Extensions.ExtensionBlocks[i].Function == GRAPHICS_EXT_FUNC_CODE && - This->frame->Extensions.ExtensionBlocks[i].ByteCount == 4) - return This->frame->Extensions.ExtensionBlocks[i].Bytes; + This->frame->Extensions.ExtensionBlocks[i].ByteCount == 8) + return This->frame->Extensions.ExtensionBlocks[i].Bytes + 3; } return NULL; } diff --git a/dlls/windowscodecs/ungif.c b/dlls/windowscodecs/ungif.c index 233019296da..0f55242b720 100644 --- a/dlls/windowscodecs/ungif.c +++ b/dlls/windowscodecs/ungif.c @@ -209,13 +209,18 @@ AddExtensionBlock(Extensions *New, ep = &New->ExtensionBlocks[New->ExtensionBlockCount++]; - ep->ByteCount=Len; - ep->Bytes = ungif_alloc(ep->ByteCount); + ep->ByteCount=Len + 3; + ep->Bytes = ungif_alloc(ep->ByteCount + 3); if (ep->Bytes == NULL) return (GIF_ERROR); + /* Extension Header */ + ep->Bytes[0] = 0x21; + ep->Bytes[1] = New->Function; + ep->Bytes[2] = Len; + if (ExtData) { - memcpy(ep->Bytes, ExtData, Len); + memcpy(ep->Bytes + 3, ExtData, Len); ep->Function = New->Function; } @@ -238,12 +243,12 @@ AppendExtensionBlock(Extensions *New, if (ep->Bytes == NULL) return (GIF_ERROR); + ep->Bytes[ep->ByteCount] = Len; + if (ExtData) - { - ep->Bytes[ep->ByteCount] = Len; memcpy(ep->Bytes + ep->ByteCount + 1, ExtData, Len); - ep->ByteCount += Len + 1; - } + + ep->ByteCount += Len + 1; return (GIF_OK); }