From f498d80c587033bffb9abedb2b0827ad8d4a2a32 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 2 Feb 2012 05:11:50 +0300 Subject: Add some checks after automatic checking. --- src/actorsprite.cpp | 3 +++ src/commandhandler.cpp | 6 ++++++ src/configuration.h | 4 ++-- src/gui/charselectdialog.cpp | 2 +- src/gui/chatwindow.cpp | 3 +++ src/gui/serverdialog.cpp | 2 +- src/gui/setup.cpp | 2 +- src/gui/setup_relations.cpp | 7 +++---- src/gui/setup_video.cpp | 4 ++-- src/gui/whoisonline.cpp | 3 +++ src/gui/widgets/chattab.cpp | 14 +++++++++++--- src/gui/widgets/textbox.h | 3 ++- src/guichan/gui.cpp | 2 ++ src/guichan/include/guichan/sdl/sdlpixel.hpp | 6 ++++++ src/guild.cpp | 7 ++++++- src/localplayer.cpp | 3 +++ src/map.cpp | 3 +++ src/map.h | 3 ++- src/net/tmwa/charserverhandler.cpp | 7 +++++-- src/net/tmwa/playerhandler.cpp | 3 +++ src/resources/soundeffect.h | 3 ++- src/sound.cpp | 9 ++++++++- src/utils/stringutils.cpp | 3 +++ 23 files changed, 81 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/actorsprite.cpp b/src/actorsprite.cpp index c718c31f2..916b599f9 100644 --- a/src/actorsprite.cpp +++ b/src/actorsprite.cpp @@ -168,6 +168,9 @@ static bool effects_initialized = false; static EffectDescription *getEffectDescription(XmlNodePtr node, int *id) { + if (!id) + return nullptr; + EffectDescription *ed = new EffectDescription; *id = atoi(XML::getProperty(node, "id", "-1").c_str()); diff --git a/src/commandhandler.cpp b/src/commandhandler.cpp index 7a588dc09..4022d8d58 100644 --- a/src/commandhandler.cpp +++ b/src/commandhandler.cpp @@ -665,6 +665,9 @@ void CommandHandler::handleNavigate(const std::string &args, bool CommandHandler::parse2Int(const std::string &args, int *x, int *y) { + if (!x || !y) + return false; + bool isValid = false; const std::string::size_type pos = args.find(" "); if (pos != std::string::npos) @@ -1189,6 +1192,9 @@ void showRes(std::string str, ResourceManager::Resources *res); void showRes(std::string str, ResourceManager::Resources *res) { + if (!res) + return; + if (debugChatTab) debugChatTab->chatLog(str + toString(res->size())); logger->log(str + toString(res->size())); diff --git a/src/configuration.h b/src/configuration.h index 00479933e..122badfd5 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -253,10 +253,10 @@ class Configuration : public ConfigurationObject void setSilent(const std::string &key, const std::string &value); inline void setValue(const std::string &key, const char *value) - { setValue(key, std::string(value)); } + { if (value) setValue(key, std::string(value)); } inline void setSilent(const std::string &key, const char *value) - { setSilent(key, std::string(value)); } + { if (value) setSilent(key, std::string(value)); } inline void setValue(const std::string &key, float value) { setValue(key, toString(value)); } diff --git a/src/gui/charselectdialog.cpp b/src/gui/charselectdialog.cpp index 638691bab..d2b74a632 100644 --- a/src/gui/charselectdialog.cpp +++ b/src/gui/charselectdialog.cpp @@ -386,7 +386,7 @@ bool CharSelectDialog::selectByName(const std::string &name, Net::Character *character = mCharacterEntries[i]->getCharacter(); if (mCharacterEntries[i] && character) { - if (character->dummy->getName() == name) + if ( character->dummy && character->dummy->getName() == name) { if (mCharacterEntries[i]) mCharacterEntries[i]->requestFocus(); diff --git a/src/gui/chatwindow.cpp b/src/gui/chatwindow.cpp index 3d52e28f4..6831ad5b6 100644 --- a/src/gui/chatwindow.cpp +++ b/src/gui/chatwindow.cpp @@ -548,6 +548,9 @@ void ChatWindow::removeTab(ChatTab *tab) void ChatWindow::addTab(ChatTab *tab) { + if (!tab) + return; + mChatTabs->addTab(tab, tab->mScrollArea); // Update UI diff --git a/src/gui/serverdialog.cpp b/src/gui/serverdialog.cpp index bdde4b96f..98d9bbfee 100644 --- a/src/gui/serverdialog.cpp +++ b/src/gui/serverdialog.cpp @@ -680,7 +680,7 @@ void ServerDialog::saveCustomServers(const ServerInfo ¤tServer, int ServerDialog::downloadUpdate(void *ptr, DownloadStatus status, size_t total, size_t remaining) { - if (status == DOWNLOAD_STATUS_CANCELLED) + if (!ptr || status == DOWNLOAD_STATUS_CANCELLED) return -1; ServerDialog *sd = reinterpret_cast(ptr); diff --git a/src/gui/setup.cpp b/src/gui/setup.cpp index bac474950..3408fba33 100644 --- a/src/gui/setup.cpp +++ b/src/gui/setup.cpp @@ -75,7 +75,7 @@ Setup::Setup(): nullptr }; int x = width; - for (const char **curBtn = buttonNames; *curBtn; ++curBtn) + for (const char **curBtn = buttonNames; *curBtn; ++ curBtn) { Button *btn = new Button(gettext(*curBtn), *curBtn, this); x -= btn->getWidth() + 5; diff --git a/src/gui/setup_relations.cpp b/src/gui/setup_relations.cpp index 9ddef9e1a..571856a14 100644 --- a/src/gui/setup_relations.cpp +++ b/src/gui/setup_relations.cpp @@ -193,6 +193,8 @@ public: std::string getPlayerAt(int index) const { + if (index < 0 || index >= (signed)mPlayers->size()) + return ""; return (*mPlayers)[index]; } @@ -257,10 +259,7 @@ Setup_Relations::Setup_Relations(): mIgnoreActionChoicesBox = new DropDown(mIgnoreActionChoicesModel); for (int i = 0; i < COLUMNS_NR; i++) - { - mPlayerTableTitleModel->set(0, i, - new Label(gettext(table_titles[i]))); - } + mPlayerTableTitleModel->set(0, i, new Label(gettext(table_titles[i]))); mPlayerTitleTable->setLinewiseSelection(true); diff --git a/src/gui/setup_video.cpp b/src/gui/setup_video.cpp index d0a6ac257..48d489513 100644 --- a/src/gui/setup_video.cpp +++ b/src/gui/setup_video.cpp @@ -143,11 +143,11 @@ ModeListModel::ModeListModel() } else { - for (int i = 0; modes[i]; ++i) + for (int i = 0; modes[i]; ++ i) { const std::string modeString = toString(static_cast(modes[i]->w)) + "x" - + toString(static_cast(modes[i]->h)); + + toString(static_cast(modes[i]->h)); mVideoModes.push_back(modeString); } } diff --git a/src/gui/whoisonline.cpp b/src/gui/whoisonline.cpp index 7965221e4..205a1aae1 100644 --- a/src/gui/whoisonline.cpp +++ b/src/gui/whoisonline.cpp @@ -464,6 +464,9 @@ void WhoIsOnline::loadWebList() size_t WhoIsOnline::memoryWrite(void *ptr, size_t size, size_t nmemb, FILE *stream) { + if (!stream) + return 0; + WhoIsOnline *wio = reinterpret_cast(stream); size_t totalMem = size * nmemb; wio->mMemoryBuffer = static_cast(realloc(wio->mMemoryBuffer, diff --git a/src/gui/widgets/chattab.cpp b/src/gui/widgets/chattab.cpp index aea367482..6d5dfc9dd 100644 --- a/src/gui/widgets/chattab.cpp +++ b/src/gui/widgets/chattab.cpp @@ -224,9 +224,17 @@ void ChatTab::chatLog(std::string line, Own own, { struct tm *timeInfo; timeInfo = localtime(&t); - line = strprintf("%s[%02d:%02d] %s%s", lineColor.c_str(), - timeInfo->tm_hour, timeInfo->tm_min, tmp.nick.c_str(), - tmp.text.c_str()); + if (timeInfo) + { + line = strprintf("%s[%02d:%02d] %s%s", lineColor.c_str(), + timeInfo->tm_hour, timeInfo->tm_min, tmp.nick.c_str(), + tmp.text.c_str()); + } + else + { + line = strprintf("%s %s%s", lineColor.c_str(), + tmp.nick.c_str(), tmp.text.c_str()); + } } else { diff --git a/src/gui/widgets/textbox.h b/src/gui/widgets/textbox.h index 6d2467b38..a052247c4 100644 --- a/src/gui/widgets/textbox.h +++ b/src/gui/widgets/textbox.h @@ -59,7 +59,8 @@ class TextBox : public gcn::TextBox */ inline void draw(gcn::Graphics *graphics) { - setForegroundColor(*mTextColor); + if (mTextColor) + setForegroundColor(*mTextColor); gcn::TextBox::draw(graphics); } diff --git a/src/guichan/gui.cpp b/src/guichan/gui.cpp index 3f5581424..1ade3f138 100644 --- a/src/guichan/gui.cpp +++ b/src/guichan/gui.cpp @@ -618,6 +618,7 @@ namespace gcn { Widget* widget = getWidgetAt(x, y); + //+++ possible nullpointer if (mFocusHandler->getModalMouseInputFocused() && !widget->isModalMouseInputFocused()) { @@ -631,6 +632,7 @@ namespace gcn { Widget* widget = mFocusHandler->getFocused(); + //+++ possible nullpointer while (widget->_getInternalFocusHandler() && widget->_getInternalFocusHandler()->getFocused()) { diff --git a/src/guichan/include/guichan/sdl/sdlpixel.hpp b/src/guichan/include/guichan/sdl/sdlpixel.hpp index 675b10fcd..809ae4649 100644 --- a/src/guichan/include/guichan/sdl/sdlpixel.hpp +++ b/src/guichan/include/guichan/sdl/sdlpixel.hpp @@ -60,6 +60,9 @@ namespace gcn */ inline const Color SDLgetPixel(SDL_Surface* surface, int x, int y) { + if (!surface) + return Color(0, 0, 0, 0); + int bpp = surface->format->BytesPerPixel; SDL_LockSurface(surface); @@ -112,6 +115,9 @@ namespace gcn inline void SDLputPixel(SDL_Surface* surface, int x, int y, const Color& color) { + if (!surface) + return; + int bpp = surface->format->BytesPerPixel; SDL_LockSurface(surface); diff --git a/src/guild.cpp b/src/guild.cpp index e569bed65..238155d32 100644 --- a/src/guild.cpp +++ b/src/guild.cpp @@ -166,6 +166,8 @@ void Guild::removeMember(GuildMember *member) itr_end = mMembers.end(); while (itr != itr_end) { + if (!*itr) + continue; if ((*itr)->mId == member->mId && (*itr)->mCharId == member->mCharId && (*itr)->getName() == member->getName()) @@ -175,7 +177,7 @@ void Guild::removeMember(GuildMember *member) delete m; return; } - ++itr; + ++ itr; } } @@ -255,6 +257,9 @@ void Guild::setRights(short rights) bool Guild::isMember(GuildMember *member) const { + if (!member) + return false; + if (member->mGuild && member->mGuild != this) return false; diff --git a/src/localplayer.cpp b/src/localplayer.cpp index bd69d785f..27897a486 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -1875,6 +1875,9 @@ void LocalPlayer::changeMode(unsigned *var, unsigned limit, const char *conf, std::string (LocalPlayer::*func)(), unsigned def, bool save) { + if (!var) + return; + (*var) ++; if (*var >= limit) *var = def; diff --git a/src/map.cpp b/src/map.cpp index 2209cf997..ccb56561c 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1796,6 +1796,9 @@ MapItem *Map::findPortalXY(int x, int y) for (it = mMapPortals.begin(), it_end = mMapPortals.end(); it != it_end; ++it) { + if (!*it) + continue; + MapItem *item = *it; if (item->mX == x && item->mY == y) return item; diff --git a/src/map.h b/src/map.h index db8b092de..f336a7a72 100644 --- a/src/map.h +++ b/src/map.h @@ -152,7 +152,8 @@ class MapLayer: public ConfigListener /** * Set tile image with x + y * width already known. */ - void setTile(int index, Image *img) { mTiles[index] = img; } + void setTile(int index, Image *img) + { mTiles[index] = img; } /** * Draws this layer to the given graphics context. The coordinates are diff --git a/src/net/tmwa/charserverhandler.cpp b/src/net/tmwa/charserverhandler.cpp index 717df1284..1bee91144 100644 --- a/src/net/tmwa/charserverhandler.cpp +++ b/src/net/tmwa/charserverhandler.cpp @@ -364,8 +364,11 @@ void CharServerHandler::processCharLogin(Net::MessageIn &msg) Net::Character *character = new Net::Character; readPlayerData(msg, character, version); mCharacters.push_back(character); - logger->log("CharServer: Player: %s (%d)", - character->dummy->getName().c_str(), character->slot); + if (character && character->dummy) + { + logger->log("CharServer: Player: %s (%d)", + character->dummy->getName().c_str(), character->slot); + } } Client::setState(STATE_CHAR_SELECT); diff --git a/src/net/tmwa/playerhandler.cpp b/src/net/tmwa/playerhandler.cpp index 8747cf9c4..16e833ec9 100644 --- a/src/net/tmwa/playerhandler.cpp +++ b/src/net/tmwa/playerhandler.cpp @@ -229,6 +229,9 @@ void PlayerHandler::processOnlineList(Net::MessageIn &msg) } char *start = (char*)msg.readBytes(size); + if (!start) + return; + char *buf = start; int addVal = 1; diff --git a/src/resources/soundeffect.h b/src/resources/soundeffect.h index 0df7f50d5..b8c9e8735 100644 --- a/src/resources/soundeffect.h +++ b/src/resources/soundeffect.h @@ -64,7 +64,8 @@ class SoundEffect : public Resource /** * Constructor. */ - SoundEffect(Mix_Chunk *soundEffect): mChunk(soundEffect) + SoundEffect(Mix_Chunk *soundEffect) : + mChunk(soundEffect) { } Mix_Chunk *mChunk; diff --git a/src/sound.cpp b/src/sound.cpp index fb6958e25..913b55656 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -159,10 +159,17 @@ void Sound::info() compiledVersion.major, compiledVersion.minor, compiledVersion.patch); - logger->log("Sound::info() SDL_mixer: %i.%i.%i (linked)", + if (linkedVersion) + { + logger->log("Sound::info() SDL_mixer: %i.%i.%i (linked)", linkedVersion->major, linkedVersion->minor, linkedVersion->patch); + } + else + { + logger->log1("Sound::info() SDL_mixer: unknown"); + } logger->log("Sound::info() Driver: %s", driver); logger->log("Sound::info() Format: %s", format); logger->log("Sound::info() Rate: %i", rate); diff --git a/src/utils/stringutils.cpp b/src/utils/stringutils.cpp index 26accbc7d..a5c0c471b 100644 --- a/src/utils/stringutils.cpp +++ b/src/utils/stringutils.cpp @@ -554,6 +554,9 @@ std::string stringToHexPath(const std::string &str) void deleteCharLeft(std::string &str, unsigned *pos) { + if (!pos) + return; + while (*pos > 0) { (*pos)--; -- cgit v1.2.3-60-g2f50