loaders jpg: fix all memory leaks.

These were detected by asan with PictureJpg example,

fixed them all.
This commit is contained in:
Hermet Park 2022-01-24 20:48:54 +09:00 committed by Hermet Park
parent 18bf321d2c
commit 246149e91a
2 changed files with 8 additions and 2 deletions

View file

@ -47,6 +47,7 @@ JpgLoader::~JpgLoader()
{ {
jpgdDelete(decoder); jpgdDelete(decoder);
if (freeData) free(data); if (freeData) free(data);
free(image);
} }
@ -128,5 +129,9 @@ unique_ptr<Surface> JpgLoader::bitmap()
void JpgLoader::run(unsigned tid) void JpgLoader::run(unsigned tid)
{ {
if (image) {
free(image);
image = nullptr;
}
image = jpgdDecompress(decoder); image = jpgdDecompress(decoder);
} }

View file

@ -1080,7 +1080,9 @@ namespace DCT_Upsample
// Unconditionally frees all allocated m_blocks. // Unconditionally frees all allocated m_blocks.
void jpeg_decoder::free_all_blocks() void jpeg_decoder::free_all_blocks()
{ {
delete(m_pStream);
m_pStream = nullptr; m_pStream = nullptr;
for (mem_block *b = m_pMem_blocks; b; ) { for (mem_block *b = m_pMem_blocks; b; ) {
mem_block *n = b->m_pNext; mem_block *n = b->m_pNext;
free(b); free(b);
@ -2815,7 +2817,6 @@ int jpeg_decoder::begin_decoding()
jpeg_decoder::~jpeg_decoder() jpeg_decoder::~jpeg_decoder()
{ {
free_all_blocks(); free_all_blocks();
delete(m_pStream);
} }