[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