[Scummvm-git-logs] scummvm master -> 543893a1cfb9b63a70a0edc868814dec7080330d
AndywinXp
noreply at scummvm.org
Wed Jun 18 18:12:25 UTC 2025
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
543893a1cf LASTEXPRESS: Fix remaining Coverity issues
Commit: 543893a1cfb9b63a70a0edc868814dec7080330d
https://github.com/scummvm/scummvm/commit/543893a1cfb9b63a70a0edc868814dec7080330d
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-18T20:12:18+02:00
Commit Message:
LASTEXPRESS: Fix remaining Coverity issues
Changed paths:
engines/lastexpress/game/beetle.cpp
engines/lastexpress/game/logic.cpp
engines/lastexpress/menu/clock.cpp
engines/lastexpress/sound/slot.cpp
engines/lastexpress/sound/sound.cpp
engines/lastexpress/sound/subtitle.cpp
diff --git a/engines/lastexpress/game/beetle.cpp b/engines/lastexpress/game/beetle.cpp
index 9ff0a52ddf4..083df214934 100644
--- a/engines/lastexpress/game/beetle.cpp
+++ b/engines/lastexpress/game/beetle.cpp
@@ -144,6 +144,8 @@ void CBeetle::tick() {
bool terminate = false;
+ assert(_currentSequence);
+
if (_currentSequence->numFrames <= _currentFrame) {
curDir = _directions[_currentDirectionIndex];
if (curDir != 0 && curDir != 3 && curDir != 6 && curDir != 9 && curDir != 12 && curDir != 15 && curDir != 18 && curDir != 21) {
diff --git a/engines/lastexpress/game/logic.cpp b/engines/lastexpress/game/logic.cpp
index 1f1e52acc95..86541ec1c63 100644
--- a/engines/lastexpress/game/logic.cpp
+++ b/engines/lastexpress/game/logic.cpp
@@ -1104,7 +1104,8 @@ bool LogicManager::obstacleBetween(int character1, int character2) {
}
}
- for (int k = 1; k <= 40; ++k) {
+ // The original code went for "k <= 40" here, but that would trigger a bad memory access...
+ for (int k = 1; k < 40; ++k) {
if (k != character1 && k != character2 && whoWalking(k) &&
getCharacter(k).characterPosition.car == getCharacter(character1).characterPosition.car &&
getCharacter(k).characterPosition.position > char1Pos && getCharacter(k).characterPosition.position < char2Pos) {
diff --git a/engines/lastexpress/menu/clock.cpp b/engines/lastexpress/menu/clock.cpp
index 1eae651c215..f56637cbf3c 100644
--- a/engines/lastexpress/menu/clock.cpp
+++ b/engines/lastexpress/menu/clock.cpp
@@ -192,6 +192,9 @@ void Clock::drawTrainPosition(int32 time) {
int i;
for (i = 1; _trainLineTimes[i] < time && i < 31; i++);
+ // In case i really has to go outside bounds, added to prevent Coverity issue...
+ i = CLIP<int>(i, 1, ARRAYSIZE(_trainLineTimes) - 1);
+
int cityTime = _trainLineTimes[i - 1];
int cityIndex = _trainCitiesIndex[i - 1];
diff --git a/engines/lastexpress/sound/slot.cpp b/engines/lastexpress/sound/slot.cpp
index 6af9927b689..34da1942559 100644
--- a/engines/lastexpress/sound/slot.cpp
+++ b/engines/lastexpress/sound/slot.cpp
@@ -366,10 +366,8 @@ void Slot::setSub(const char *filename) {
_subtitle = new Subtitle(_engine, filename, this);
if ((_subtitle->_status & kSubFlagStatusKilled) != 0) {
- if (_subtitle) {
- delete _subtitle;
- _subtitle = nullptr;
- }
+ delete _subtitle;
+ _subtitle = nullptr;
} else {
_statusFlags |= kSoundFlagHasSubtitles;
}
diff --git a/engines/lastexpress/sound/sound.cpp b/engines/lastexpress/sound/sound.cpp
index aa262396c34..d8c64b701a6 100644
--- a/engines/lastexpress/sound/sound.cpp
+++ b/engines/lastexpress/sound/sound.cpp
@@ -381,6 +381,7 @@ void SoundManager::soundThread() {
if (loopedPlaying) {
ambientAI(kAmbientLooping);
} else if (_soundAmbientFadeTime && getSoundDriver30HzCounter() >= _soundAmbientFadeTime) {
+ assert(ambientSlot1);
ambientSlot1->setFade(_soundAmbientFadeLevel);
_soundAmbientFadeTime = 0;
}
diff --git a/engines/lastexpress/sound/subtitle.cpp b/engines/lastexpress/sound/subtitle.cpp
index b61902f376b..35e119bba01 100644
--- a/engines/lastexpress/sound/subtitle.cpp
+++ b/engines/lastexpress/sound/subtitle.cpp
@@ -184,36 +184,40 @@ SubtitleManager::~SubtitleManager() {
void SubtitleManager::initSubtitles() {
HPF *archive = _engine->getArchiveManager()->openHPF("FONT.DAT");
- byte *fontData = (byte *)malloc(PAGE_SIZE * archive->size);
+ if (archive) {
+ byte *fontData = (byte *)malloc(PAGE_SIZE * archive->size);
- if (archive && fontData) {
- _engine->getArchiveManager()->readHPF(archive, fontData, archive->size);
- _engine->getArchiveManager()->closeHPF(archive);
+ if (fontData) {
+ _engine->getArchiveManager()->readHPF(archive, fontData, archive->size);
+ _engine->getArchiveManager()->closeHPF(archive);
- Common::MemoryReadStream *fontStream = new Common::MemoryReadStream(fontData, PAGE_SIZE * archive->size, DisposeAfterUse::YES);
+ Common::MemoryReadStream *fontStream = new Common::MemoryReadStream(fontData, PAGE_SIZE * archive->size, DisposeAfterUse::YES);
- for (int i = 0; i < 16; i++) {
- _font->palette[i] = fontStream->readUint16LE();
- }
+ for (int i = 0; i < 16; i++) {
+ _font->palette[i] = fontStream->readUint16LE();
+ }
- for (int i = 0; i < 256; i++) {
- _font->charMap[i] = fontStream->readByte();
- }
+ for (int i = 0; i < 256; i++) {
+ _font->charMap[i] = fontStream->readByte();
+ }
- for (int i = 0; i < 256; i++) {
- _font->charKerning[i] = fontStream->readByte();
- }
+ for (int i = 0; i < 256; i++) {
+ _font->charKerning[i] = fontStream->readByte();
+ }
- uint32 sizeOfData = PAGE_SIZE * archive->size - (16 * sizeof(uint16) + 256 + 256);
- _font->fontData = (byte *)malloc(sizeOfData);
+ uint32 sizeOfData = PAGE_SIZE * archive->size - (16 * sizeof(uint16) + 256 + 256);
+ _font->fontData = (byte *)malloc(sizeOfData);
- assert(_font->fontData);
+ assert(_font->fontData);
- for (uint i = 0; !fontStream->eos() && i < sizeOfData; i++) {
- _font->fontData[i] = fontStream->readByte();
- }
+ for (uint i = 0; !fontStream->eos() && i < sizeOfData; i++) {
+ _font->fontData[i] = fontStream->readByte();
+ }
- delete fontStream;
+ delete fontStream;
+ } else {
+ _font->fontData = nullptr;
+ }
} else {
_font->fontData = nullptr;
}
More information about the Scummvm-git-logs
mailing list