From d49a520d19f28c613c68b574686b182a9c0621be Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 24 Jun 2015 18:41:42 +0300 Subject: Add missing checks into resources directory. --- src/resources/atlasitem.h | 4 ++-- src/resources/atlasmanager.cpp | 4 ++++ src/resources/atlasmanager.h | 4 ++-- src/resources/beingcommon.h | 4 ++-- src/resources/dye.cpp | 6 ++++++ src/resources/dyepalette.cpp | 12 ++++++------ src/resources/dyepalette.h | 4 ++-- src/resources/imagehelper.cpp | 2 ++ src/resources/iteminfo.h | 12 ++++++------ src/resources/mapreader.cpp | 26 +++++++++++++++++++++++--- src/resources/resourcemanager.cpp | 2 ++ src/resources/resourcemanager.h | 4 ++-- src/resources/spritedef.cpp | 13 +++++++++++-- src/resources/subimage.cpp | 12 ++++++++---- 14 files changed, 78 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/resources/atlasitem.h b/src/resources/atlasitem.h index b404dac48..59485f691 100644 --- a/src/resources/atlasitem.h +++ b/src/resources/atlasitem.h @@ -34,8 +34,8 @@ struct AtlasItem final name(), x(0), y(0), - width(image0->mBounds.w), - height(image0->mBounds.h) + width(image0 ? image0->mBounds.w : 0), + height(image0 ? image0->mBounds.h : 0) { } diff --git a/src/resources/atlasmanager.cpp b/src/resources/atlasmanager.cpp index f7afab0f6..23a1ec653 100644 --- a/src/resources/atlasmanager.cpp +++ b/src/resources/atlasmanager.cpp @@ -319,6 +319,8 @@ void AtlasManager::convertAtlas(TextureAtlas *const atlas) void AtlasManager::injectToResources(const AtlasResource *const resource) { + if (!resource) + return; ResourceManager *const resman = ResourceManager::getInstance(); FOR_EACH (std::vector::const_iterator, it, resource->atlases) @@ -344,6 +346,8 @@ void AtlasManager::injectToResources(const AtlasResource *const resource) void AtlasManager::moveToDeleted(AtlasResource *const resource) { + if (!resource) + return; ResourceManager *const resman = ResourceManager::getInstance(); FOR_EACH (std::vector::iterator, it, resource->atlases) { diff --git a/src/resources/atlasmanager.h b/src/resources/atlasmanager.h index 91c269040..83a5ad7de 100644 --- a/src/resources/atlasmanager.h +++ b/src/resources/atlasmanager.h @@ -60,10 +60,10 @@ class AtlasManager final int size); static SDL_Surface *createSDLAtlas(TextureAtlas *const atlas) - A_WARN_UNUSED; + A_WARN_UNUSED A_NONNULL(1); - static void convertAtlas(TextureAtlas *const atlas); + static void convertAtlas(TextureAtlas *const atlas) A_NONNULL(1); }; #endif // USE_OPENGL diff --git a/src/resources/beingcommon.h b/src/resources/beingcommon.h index 04e93a3cb..90bdf2b67 100644 --- a/src/resources/beingcommon.h +++ b/src/resources/beingcommon.h @@ -52,7 +52,7 @@ namespace BeingCommon { void readBasicAttributes(BeingInfo *const info, XmlNodePtrConst node, - const std::string &hoverCursor); + const std::string &hoverCursor) A_NONNULL(1); void getIncludeFiles(const std::string &dir, StringVect &list, @@ -61,7 +61,7 @@ namespace BeingCommon bool readObjectNodes(XmlNodePtrConst &spriteNode, SpriteDisplay &display, BeingInfo *const currentInfo, - const std::string &dbName); + const std::string &dbName) A_NONNULL(3); } // namespace BeingCommon #endif // RESOURCES_BEINGCOMMON_H diff --git a/src/resources/dye.cpp b/src/resources/dye.cpp index 34a1937a5..c7287ee8a 100644 --- a/src/resources/dye.cpp +++ b/src/resources/dye.cpp @@ -150,6 +150,9 @@ int Dye::getType() const void Dye::normalDye(uint32_t *restrict pixels, const int bufSize) const { + if (!pixels) + return; + #ifdef ENABLE_CILKPLUS cilk_for (int ptr = 0; ptr < bufSize; ptr ++) { @@ -265,6 +268,9 @@ endlabel:{} void Dye::normalOGLDye(uint32_t *restrict pixels, const int bufSize) const { + if (!pixels) + return; + #ifdef ENABLE_CILKPLUS cilk_for (int ptr = 0; ptr < bufSize; ptr ++) { diff --git a/src/resources/dyepalette.cpp b/src/resources/dyepalette.cpp index 44049997a..895f9c03f 100644 --- a/src/resources/dyepalette.cpp +++ b/src/resources/dyepalette.cpp @@ -100,7 +100,7 @@ unsigned int DyePalette::hexDecode(const signed char c) } void DyePalette::getColor(const unsigned int intensity, - unsigned int color[3]) const + unsigned int (&color)[3]) const { if (intensity == 0) { @@ -152,7 +152,7 @@ void DyePalette::getColor(const unsigned int intensity, color[2] = ((255 - t) * b1 + t * b2) / 255; } -void DyePalette::getColor(double intensity, int color[3]) const +void DyePalette::getColor(double intensity, int (&color)[3]) const { // Nothing to do here if (mColors.empty()) @@ -202,7 +202,7 @@ void DyePalette::replaceSColor(uint32_t *restrict pixels, { std::vector::const_iterator it_end = mColors.end(); const size_t sz = mColors.size(); - if (!sz) + if (!sz || !pixels) return; if (sz % 2) -- it_end; @@ -310,7 +310,7 @@ void DyePalette::replaceAColor(uint32_t *restrict pixels, { std::vector::const_iterator it_end = mColors.end(); const size_t sz = mColors.size(); - if (!sz) + if (!sz || !pixels) return; if (sz % 2) -- it_end; @@ -401,7 +401,7 @@ void DyePalette::replaceSOGLColor(uint32_t *restrict pixels, { std::vector::const_iterator it_end = mColors.end(); const size_t sz = mColors.size(); - if (!sz) + if (!sz || !pixels) return; if (sz % 2) -- it_end; @@ -496,7 +496,7 @@ void DyePalette::replaceAOGLColor(uint32_t *restrict pixels, { std::vector::const_iterator it_end = mColors.end(); const size_t sz = mColors.size(); - if (!sz) + if (!sz || !pixels) return; if (sz % 2) -- it_end; diff --git a/src/resources/dyepalette.h b/src/resources/dyepalette.h index 3132077fb..467ec0ac1 100644 --- a/src/resources/dyepalette.h +++ b/src/resources/dyepalette.h @@ -50,12 +50,12 @@ class DyePalette final * implicitly black (0, 0, 0). */ void getColor(const unsigned int intensity, - unsigned int color[3]) const; + unsigned int (&color)[3]) const; /** * Gets a pixel color depending on its intensity. */ - void getColor(double intensity, int color[3]) const; + void getColor(double intensity, int (&color)[3]) const; /** * replace colors for SDL for S dye. diff --git a/src/resources/imagehelper.cpp b/src/resources/imagehelper.cpp index 20697cfd6..e49a738f2 100644 --- a/src/resources/imagehelper.cpp +++ b/src/resources/imagehelper.cpp @@ -163,6 +163,8 @@ SDL_Surface* ImageHelper::convertTo32Bit(SDL_Surface *const tmpImage) void ImageHelper::dumpSurfaceFormat(const SDL_Surface *const image) { + if (!image) + return; if (image->format) { const SDL_PixelFormat * const format = image->format; diff --git a/src/resources/iteminfo.h b/src/resources/iteminfo.h index 4c8d90f8c..4d40390d9 100644 --- a/src/resources/iteminfo.h +++ b/src/resources/iteminfo.h @@ -201,11 +201,6 @@ class ItemInfo final void setDrawPriority(const int direction, const int n); - static void setSpriteOrder(int *const ptr, - const int direction, - const int n, - const int def = -1); - const std::map &getTags() const A_WARN_UNUSED { return mTags; } @@ -280,7 +275,12 @@ class ItemInfo final int mDrawAfter[10]; int mDrawPriority[10]; - protected: + private: + static void setSpriteOrder(int *const ptr, + const int direction, + const int n, + const int def = -1) A_NONNULL(1); + SpriteDisplay mDisplay; /**< Display info (like icon) */ std::string mName; std::string mDescription; /**< Short description. */ diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp index 825be9a25..414a19d24 100644 --- a/src/resources/mapreader.cpp +++ b/src/resources/mapreader.cpp @@ -491,10 +491,19 @@ void MapReader::readProperties(const XmlNodePtrConst node, BLOCK_END("MapReader::readProperties") } -inline static void setTile(Map *const map, MapLayer *const layer, +inline static void setTile(Map *const map, + MapLayer *const layer, const MapLayer::Type &layerType, MapHeights *const heights, - const int x, const int y, const int gid) + const int x, const int y, + const int gid) A_NONNULL(1, 2, 4); + +inline static void setTile(Map *const map, + MapLayer *const layer, + const MapLayer::Type &layerType, + MapHeights *const heights, + const int x, const int y, + const int gid) { const Tileset * const set = map->getTilesetWithGid(gid); switch (layerType) @@ -588,6 +597,9 @@ bool MapReader::readBase64Layer(const XmlNodePtrConst childNode, int &restrict x, int &restrict y, const int w, const int h) { + if (!map || !layer || !childNode) + return false; + if (!compression.empty() && compression != "gzip" && compression != "zlib") { @@ -690,6 +702,9 @@ bool MapReader::readCsvLayer(const XmlNodePtrConst childNode, int &restrict x, int &restrict y, const int w, const int h) { + if (!map || !layer || !childNode) + return false; + XmlNodePtrConst dataChild = childNode->xmlChildrenNode; if (!dataChild) return true; @@ -733,6 +748,9 @@ bool MapReader::readCsvLayer(const XmlNodePtrConst childNode, void MapReader::readLayer(const XmlNodePtr node, Map *const map) { + if (!map || !node) + return; + // Layers are not necessarily the same size as the map const int w = XML::getProperty(node, "width", map->getWidth()); const int h = XML::getProperty(node, "height", map->getHeight()); @@ -878,7 +896,7 @@ Tileset *MapReader::readTileset(XmlNodePtr node, Map *const map) { BLOCK_START("MapReader::readTileset") - if (!map) + if (!map || !node) { BLOCK_END("MapReader::readTileset") return nullptr; @@ -1072,6 +1090,8 @@ Map *MapReader::createEmptyMap(const std::string &restrict filename, void MapReader::updateMusic(Map *const map) { + if (!map) + return; std::string name = map->getProperty("shortName"); const size_t p = name.rfind("."); if (p != std::string::npos) diff --git a/src/resources/resourcemanager.cpp b/src/resources/resourcemanager.cpp index 9985ec67d..9d1f9de1e 100644 --- a/src/resources/resourcemanager.cpp +++ b/src/resources/resourcemanager.cpp @@ -260,6 +260,8 @@ bool ResourceManager::cleanOrphans(const bool always) void ResourceManager::logResource(const Resource *const res) { + if (!res) + return; #ifdef USE_OPENGL const Image *const image = dynamic_cast(res); if (image) diff --git a/src/resources/resourcemanager.h b/src/resources/resourcemanager.h index c98d7957f..afe158d78 100644 --- a/src/resources/resourcemanager.h +++ b/src/resources/resourcemanager.h @@ -198,8 +198,6 @@ class ResourceManager final void decRefDelete(Resource *const res); - static void logResource(const Resource *const res); - /** * Move resource to deleted resources list. */ @@ -262,6 +260,8 @@ class ResourceManager final */ static void cleanUp(Resource *const resource); + static void logResource(const Resource *const res); + static ResourceManager *instance; std::set deletedSurfaces; Resources mResources; diff --git a/src/resources/spritedef.cpp b/src/resources/spritedef.cpp index 9dae7289e..20d0537d1 100644 --- a/src/resources/spritedef.cpp +++ b/src/resources/spritedef.cpp @@ -185,10 +185,16 @@ void SpriteDef::substituteActions() substituteAction(SpriteAction::DEADRIDE, SpriteAction::DEAD); } -void SpriteDef::loadSprite(const XmlNodePtr spriteNode, const int variant, +void SpriteDef::loadSprite(const XmlNodePtr spriteNode, + const int variant, const std::string &palettes) { BLOCK_START("SpriteDef::loadSprite") + if (!spriteNode) + { + BLOCK_END("SpriteDef::loadSprite") + return; + } // Get the variant const int variantCount = XML::getProperty(spriteNode, "variants", 0); int variant_offset = 0; @@ -243,6 +249,9 @@ void SpriteDef::loadImageSet(const XmlNodePtr node, void SpriteDef::loadAction(const XmlNodePtr node, const int variant_offset) { + if (!node) + return; + const std::string actionName = XML::getProperty(node, "name", ""); const std::string imageSetName = XML::getProperty(node, "imageset", ""); const unsigned hp = XML::getProperty(node, "hp", 100); @@ -288,7 +297,7 @@ void SpriteDef::loadAnimation(const XmlNodePtr animationNode, const ImageSet *const imageSet, const int variant_offset) const { - if (!action || !imageSet) + if (!action || !imageSet || !animationNode) return; const std::string directionName = diff --git a/src/resources/subimage.cpp b/src/resources/subimage.cpp index 9ab4a55fe..0d5cf8c8a 100644 --- a/src/resources/subimage.cpp +++ b/src/resources/subimage.cpp @@ -29,7 +29,8 @@ #include "debug.h" #ifdef USE_SDL2 -SubImage::SubImage(Image *const parent, SDL_Texture *const image, +SubImage::SubImage(Image *const parent, + SDL_Texture *const image, const int x, const int y, const int width, const int height) : Image(image, width, height), @@ -81,7 +82,8 @@ SubImage::SubImage(Image *const parent, SDL_Texture *const image, } #endif -SubImage::SubImage(Image *const parent, SDL_Surface *const image, +SubImage::SubImage(Image *const parent, + SDL_Surface *const image, const int x, const int y, const int width, const int height) : Image(image, false), @@ -134,8 +136,10 @@ SubImage::SubImage(Image *const parent, SDL_Surface *const image, } #ifdef USE_OPENGL -SubImage::SubImage(Image *const parent, const GLuint image, - const int x, const int y, const int width, const int height, +SubImage::SubImage(Image *const parent, + const GLuint image, + const int x, const int y, + const int width, const int height, const int texWidth, const int texHeight) : Image(image, width, height, texWidth, texHeight), mInternalBounds(), -- cgit v1.2.3-70-g09d2