From 932cc6554373055c51891c8ab553762a4e39c1fd Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Thu, 10 Dec 2020 11:57:38 +0900 Subject: [PATCH] loaders: fix memory leak. While looking for image loader, it occured memory leaks. Fixed it properly. @Issues: 178 --- src/lib/tvgLoaderMgr.cpp | 18 ++++++++++++------ src/loaders/raw/tvgRawLoader.cpp | 1 - src/loaders/svg/tvgSvgLoader.cpp | 1 - 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/lib/tvgLoaderMgr.cpp b/src/lib/tvgLoaderMgr.cpp index 1bb5f07e..3b8f26b6 100644 --- a/src/lib/tvgLoaderMgr.cpp +++ b/src/lib/tvgLoaderMgr.cpp @@ -91,10 +91,10 @@ bool LoaderMgr::term() unique_ptr LoaderMgr::loader(const string& path) { - auto loader = _find(path); - - if (loader && loader->open(path)) return unique_ptr(loader); - + if (auto loader = _find(path)) { + if (loader->open(path)) return unique_ptr(loader); + else delete(loader); + } return nullptr; } @@ -103,7 +103,10 @@ unique_ptr LoaderMgr::loader(const char* data, uint32_t size) { for (int i = 0; i < static_cast(FileType::Unknown); i++) { auto loader = _find(static_cast(i)); - if (loader && loader->open(data, size)) return unique_ptr(loader); + if (loader) { + if (loader->open(data, size)) return unique_ptr(loader); + else delete(loader); + } } return nullptr; } @@ -113,7 +116,10 @@ unique_ptr LoaderMgr::loader(uint32_t *data, uint32_t w, uint32_t h, boo { for (int i = 0; i < static_cast(FileType::Unknown); i++) { auto loader = _find(static_cast(i)); - if (loader && loader->open(data, w, h, copy)) return unique_ptr(loader); + if (loader) { + if (loader->open(data, w, h, copy)) return unique_ptr(loader); + else delete(loader); + } } return nullptr; } diff --git a/src/loaders/raw/tvgRawLoader.cpp b/src/loaders/raw/tvgRawLoader.cpp index 4ed475d0..2fd57d8d 100644 --- a/src/loaders/raw/tvgRawLoader.cpp +++ b/src/loaders/raw/tvgRawLoader.cpp @@ -34,7 +34,6 @@ RawLoader::RawLoader() { - } diff --git a/src/loaders/svg/tvgSvgLoader.cpp b/src/loaders/svg/tvgSvgLoader.cpp index 85f86cbf..d876a7bf 100644 --- a/src/loaders/svg/tvgSvgLoader.cpp +++ b/src/loaders/svg/tvgSvgLoader.cpp @@ -2427,7 +2427,6 @@ static bool _svgLoaderParserForValidCheck(void* data, SimpleXMLType type, const SvgLoader::SvgLoader() { - }