diff --git a/dlls/windowscodecs/ungif.c b/dlls/windowscodecs/ungif.c index 97038d93c6395b49ff7a5487d3906ac9f04e6039..66310cb1da99775287c6d331ed6e5e3916ea4663 100644 --- a/dlls/windowscodecs/ungif.c +++ b/dlls/windowscodecs/ungif.c @@ -884,13 +884,21 @@ DGifSlurp(GifFileType * GifFile) { break; case EXTENSION_RECORD_TYPE: - if (DGifGetExtension(GifFile, &temp_save.Function, &ExtData) == + { + Extensions *Extensions; + + if (GifFile->ImageCount) + Extensions = &temp_save; + else + Extensions = &GifFile->Extensions; + + if (DGifGetExtension(GifFile, &Extensions->Function, &ExtData) == GIF_ERROR) return (GIF_ERROR); while (ExtData != NULL) { /* Create an extension block with our data */ - if (AddExtensionBlock(&temp_save, ExtData[0], &ExtData[1]) + if (AddExtensionBlock(Extensions, ExtData[0], &ExtData[1]) == GIF_ERROR) return (GIF_ERROR); @@ -899,6 +907,7 @@ DGifSlurp(GifFileType * GifFile) { temp_save.Function = 0; } break; + } case TERMINATE_RECORD_TYPE: break; @@ -1003,6 +1012,8 @@ DGifCloseFile(GifFileType * GifFile) { GifFile->SavedImages = NULL; } + FreeExtension(&GifFile->Extensions); + ungif_free(GifFile); return GIF_OK; diff --git a/dlls/windowscodecs/ungif.h b/dlls/windowscodecs/ungif.h index 6c9f418d2e75b5e6974981fe2baf01cdd5bab326..6caa600bbf2eff89ce1075ea3d7341bd7af9fd26 100644 --- a/dlls/windowscodecs/ungif.h +++ b/dlls/windowscodecs/ungif.h @@ -117,6 +117,7 @@ typedef struct GifFileType { SBackGroundColor, /* I hope you understand this one... */ SAspectRatio; /* Pixel aspect ratio, in 1/64 units, starting at 1:4. */ ColorMapObject *SColorMap; /* NULL if not exists. */ + Extensions Extensions; int ImageCount; /* Number of current image */ GifImageDesc Image; /* Block describing current image */ struct SavedImage *SavedImages; /* Use this to accumulate file state */