diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2016-06-04 21:12:00 +0200 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2016-06-04 21:12:00 +0200 |
commit | e43a808290630b4a0810b283ad1e3b9411bb3016 (patch) | |
tree | f89c9aa9697fb15a9a6adf8895bcdc93dfbba9f7 | |
parent | 3e747d769f63fde60f6095bd1ae7c651d4237f39 (diff) |
Fix crash on image load error.
-rw-r--r-- | plugingui/image.cc | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/plugingui/image.cc b/plugingui/image.cc index a85f752..666170d 100644 --- a/plugingui/image.cc +++ b/plugingui/image.cc @@ -95,6 +95,7 @@ void Image::setError() image_data.clear(); image_data.reserve(_width * _height); + for(std::size_t y = 0; y < _height; ++y) { for(std::size_t x = 0; x < _width; ++x) @@ -109,17 +110,25 @@ void Image::setError() void Image::load(const char* data, size_t size) { - unsigned int iw, ih; + unsigned int iw{0}, ih{0}; unsigned char* char_image_data{nullptr}; unsigned int res = lodepng_decode32((unsigned char**)&char_image_data, &iw, &ih, (const unsigned char*)data, size); + if(res != 0) + { + ERR(image, "Error in lodepng_decode32: %d", res); + setError(); + return; + } + _width = iw; _height = ih; image_data.clear(); image_data.reserve(_width * _height); + for(std::size_t y = 0; y < _height; ++y) { for(std::size_t x = 0; x < _width; ++x) @@ -133,13 +142,6 @@ void Image::load(const char* data, size_t size) assert(image_data.size() == (_width * _height)); std::free(char_image_data); - - if(res != 0) - { - ERR(image, "Error in lodepng_decode32: %d", res); - setError(); - return; - } } size_t Image::width() const |