From cbafb9a68b7dde02b1ff5fb96281a34558ca4201 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 19 Nov 2023 17:44:14 +0300 Subject: [PATCH] Image related leaks fix --- src/assets/AssetsLoader.cpp | 12 +++++++----- src/coders/png.cpp | 4 ++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/assets/AssetsLoader.cpp b/src/assets/AssetsLoader.cpp index 4b004d97..f74c3348 100644 --- a/src/assets/AssetsLoader.cpp +++ b/src/assets/AssetsLoader.cpp @@ -2,9 +2,12 @@ #include "Assets.h" #include +#include #include "../constants.h" +using std::unique_ptr; + AssetsLoader::AssetsLoader(Assets* assets) : assets(assets) { } @@ -62,18 +65,17 @@ bool _load_texture(Assets* assets, const std::string& filename, const std::strin } bool _load_atlas(Assets* assets, const std::string& filename, const std::string& name) { - ImageData* image = png::load_image(filename); + unique_ptr image (png::load_image(filename)); if (image == nullptr) { std::cerr << "failed to load image '" << name << "'" << std::endl; return false; } for (int i = 0; i < ATLAS_MARGIN_SIZE; i++) { - ImageData* newimage = add_atlas_margins(image, 16); - delete image; - image = newimage; + ImageData* newimage = add_atlas_margins(image.get(), 16); + image.reset(newimage); } - Texture* texture = Texture::from(image); + Texture* texture = Texture::from(image.get()); assets->store(texture, name); return true; } diff --git a/src/coders/png.cpp b/src/coders/png.cpp index e4d7090b..e15e0a98 100644 --- a/src/coders/png.cpp +++ b/src/coders/png.cpp @@ -326,12 +326,12 @@ ImageData* png::load_image(std::string filename) { } Texture* png::load_texture(std::string filename) { - ImageData* image = _png_load(filename.c_str()); + unique_ptr image (_png_load(filename.c_str())); if (image == nullptr){ std::cerr << "Could not load image " << filename << std::endl; return nullptr; } - return Texture::from(image); + return Texture::from(image.get()); } void png::write_image(std::string filename, const ImageData* image) {