From 7a13db9a863c9be58709e941f44eb2c370276e2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 29 Oct 2014 16:09:42 -0400 Subject: [PATCH] do not crash for missing images --- include/mbgl/util/image.hpp | 2 +- src/geometry/sprite_atlas.cpp | 1 + src/map/sprite.cpp | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/include/mbgl/util/image.hpp b/include/mbgl/util/image.hpp index 0bc5af21d..cb7db6d6f 100644 --- a/include/mbgl/util/image.hpp +++ b/include/mbgl/util/image.hpp @@ -17,6 +17,7 @@ public: inline const char *getData() const { return img.get(); } inline uint32_t getWidth() const { return width; } inline uint32_t getHeight() const { return height; } + inline operator bool() const { return img && width && height; } private: // loaded image dimensions @@ -24,7 +25,6 @@ private: // the raw image data std::unique_ptr img; - }; diff --git a/src/geometry/sprite_atlas.cpp b/src/geometry/sprite_atlas.cpp index 527112291..e5bad1ead 100644 --- a/src/geometry/sprite_atlas.cpp +++ b/src/geometry/sprite_atlas.cpp @@ -158,6 +158,7 @@ void SpriteAtlas::allocate() { void SpriteAtlas::copy(const Rect& dst, const SpritePosition& src) { if (!sprite->raster) return; const uint32_t *src_img = reinterpret_cast(sprite->raster->getData()); + if (!src_img) return; allocate(); uint32_t *dst_img = reinterpret_cast(data); diff --git a/src/map/sprite.cpp b/src/map/sprite.cpp index 876586e4b..ad1a8e770 100644 --- a/src/map/sprite.cpp +++ b/src/map/sprite.cpp @@ -102,6 +102,9 @@ bool Sprite::isLoaded() const { void Sprite::parseImage() { raster = std::make_unique(image); + if (!*raster) { + raster.reset(); + } image.clear(); loadedImage = true; }