mirror of
https://github.com/love2d/love.git
synced 2026-08-12 08:30:56 +02:00
Switched back to zlib decompression for PNG images and fixed a memory leak issue when decompressing.
This commit is contained in:
@@ -51,7 +51,7 @@ static unsigned zlibDecompress(unsigned char **out, size_t *outsize, const unsig
|
||||
|
||||
uLongf outdatasize = insize;
|
||||
size_t sizemultiplier = 0;
|
||||
unsigned char *outdata = nullptr;
|
||||
unsigned char *outdata = out != nullptr ? *out : nullptr;
|
||||
|
||||
while (true)
|
||||
{
|
||||
@@ -59,7 +59,13 @@ static unsigned zlibDecompress(unsigned char **out, size_t *outsize, const unsig
|
||||
outdatasize = insize << (++sizemultiplier);
|
||||
|
||||
// LodePNG uses malloc, realloc, and free.
|
||||
outdata = (unsigned char *) malloc(outdatasize);
|
||||
// Since version 2014-08-23, LodePNG passes in an existing pointer in
|
||||
// the 'out' argument that it expects to be realloc'd. Not doing so can
|
||||
// result in a memory leak.
|
||||
if (outdata != nullptr)
|
||||
outdata = (unsigned char *) realloc(outdata, outdatasize);
|
||||
else
|
||||
outdata = (unsigned char *) malloc(outdatasize);
|
||||
|
||||
if (!outdata)
|
||||
return 83; // "Memory allocation failed" error code for LodePNG.
|
||||
@@ -152,11 +158,7 @@ PNGHandler::DecodedImage PNGHandler::decode(love::filesystem::FileData *fdata)
|
||||
state.info_raw.colortype = LCT_RGBA;
|
||||
state.info_raw.bitdepth = 8;
|
||||
|
||||
#if 0
|
||||
// FIXME: temporarily disabled: using this makes decoded images use more
|
||||
// memory than they should and seems to potentially cause memory leaks.
|
||||
state.decoder.zlibsettings.custom_zlib = zlibDecompress;
|
||||
#endif
|
||||
|
||||
unsigned status = lodepng_decode(&img.data, &width, &height,
|
||||
&state, indata, insize);
|
||||
|
||||
Reference in New Issue
Block a user