From 8dd47e51d9c318e522b21f28bc3e3935ef692056 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 4 Jul 2013 21:11:28 +0300 Subject: add missing checks. also fix crash in creating character with broken data. --- src/gui/charcreatedialog.cpp | 10 ++++++++-- src/gui/palette.cpp | 2 +- src/net/ea/playerhandler.cpp | 6 +++++- src/particle.cpp | 3 ++- src/resources/beinginfo.cpp | 4 ++-- 5 files changed, 18 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/gui/charcreatedialog.cpp b/src/gui/charcreatedialog.cpp index c32098b63..b0a7d730c 100644 --- a/src/gui/charcreatedialog.cpp +++ b/src/gui/charcreatedialog.cpp @@ -159,8 +159,14 @@ CharCreateDialog::CharCreateDialog(CharSelectDialog *const parent, if (!maxHairStyle) maxHairStyle = mPlayer->getNumOfHairstyles(); - mHairStyle = (rand() % maxHairStyle) + minHairStyle; - mHairColor = (rand() % maxHairColor) + minHairColor; + if (maxHairStyle) + mHairStyle = (rand() % maxHairStyle) + minHairStyle; + else + mHairStyle = 0; + if (maxHairColor) + mHairColor = (rand() % maxHairColor) + minHairColor; + else + mHairColor = 0; mNameField->setMaximum(24); diff --git a/src/gui/palette.cpp b/src/gui/palette.cpp index abd328458..1b25620a9 100644 --- a/src/gui/palette.cpp +++ b/src/gui/palette.cpp @@ -127,7 +127,7 @@ void Palette::advanceGradient() % (delay * numOfColors); const int gradIndex = elem->gradientIndex; - const int pos = gradIndex % delay; + const int pos = delay ? (gradIndex % delay) : gradIndex; int colIndex; if (delay) colIndex = gradIndex / delay; diff --git a/src/net/ea/playerhandler.cpp b/src/net/ea/playerhandler.cpp index 5e847f88f..446766b56 100644 --- a/src/net/ea/playerhandler.cpp +++ b/src/net/ea/playerhandler.cpp @@ -157,7 +157,11 @@ static const char *randomDeathMessage() N_("You're pining for the fjords.") }; - const int random = static_cast(rand() % (sizeof(deadMsg) + const int sz = sizeof(deadMsg); + if (!sz) + return gettext(deadMsg[0]); + + const int random = static_cast(rand() % (sz / sizeof(deadMsg[0]))); return gettext(deadMsg[random]); } diff --git a/src/particle.cpp b/src/particle.cpp index 9ec83afb6..6e8ab14a7 100644 --- a/src/particle.cpp +++ b/src/particle.cpp @@ -205,7 +205,8 @@ bool Particle::update() } // Update child emitters - if ((mLifetimePast - 1) % Particle::emitterSkip == 0) + if (Particle::emitterSkip && (mLifetimePast - 1) + % Particle::emitterSkip == 0) { FOR_EACH (EmitterConstIterator, e, mChildEmitters) { diff --git a/src/resources/beinginfo.cpp b/src/resources/beinginfo.cpp index 361dead4d..f54673447 100644 --- a/src/resources/beinginfo.cpp +++ b/src/resources/beinginfo.cpp @@ -114,8 +114,8 @@ const SoundInfo &BeingInfo::getSound(const SoundEvent event) const static SoundInfo emptySound("", 0); const SoundEvents::const_iterator i = mSounds.find(event); - return (i == mSounds.end() || !i->second) ? emptySound : - i->second->at(rand() % i->second->size()); + return (i == mSounds.end() || !i->second || i->second->empty()) + ? emptySound : i->second->at(rand() % i->second->size()); } const Attack *BeingInfo::getAttack(const int id) const -- cgit v1.2.3-60-g2f50