[Scummvm-git-logs] scummvm master -> abfa7b38c8a2864177a05d87af86075168652516

Helco noreply at scummvm.org
Sat Sep 13 05:39:03 UTC 2025


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .

Summary:
60376dba3d ALCACHOFA: Fix issues reported by coverity
abfa7b38c8 ALCACHOFA: Fix assertion in GLES2 renderer upon fadeExit


Commit: 60376dba3dc7d8f9078991f3268ec8b4474fb911
    https://github.com/scummvm/scummvm/commit/60376dba3dc7d8f9078991f3268ec8b4474fb911
Author: Helco (hermann.noll at hotmail.com)
Date: 2025-09-13T07:38:46+02:00

Commit Message:
ALCACHOFA: Fix issues reported by coverity

- Memory leak in
  - Menu::tryReadOldSavefile
  - AlcachofaEngine::syncGame
  - loadSND
- Uninitialized variables
  - StackEntry
  - Process
  - OptionsMenu
- Potential null-pointer deref in DoorTask ctor
- Using moved-from object in Sounds::playSoundInternal
- Potential fp division by zero in depthAtForConvex

Changed paths:
    engines/alcachofa/alcachofa.cpp
    engines/alcachofa/menu.cpp
    engines/alcachofa/metaengine.cpp
    engines/alcachofa/player.cpp
    engines/alcachofa/rooms.h
    engines/alcachofa/scheduler.cpp
    engines/alcachofa/script.cpp
    engines/alcachofa/shape.cpp
    engines/alcachofa/sounds.cpp


diff --git a/engines/alcachofa/alcachofa.cpp b/engines/alcachofa/alcachofa.cpp
index fa25a74926b..dc26d582dde 100644
--- a/engines/alcachofa/alcachofa.cpp
+++ b/engines/alcachofa/alcachofa.cpp
@@ -297,10 +297,11 @@ Common::Error AlcachofaEngine::syncGame(MySerializer &s) {
 		thumbnail = new Graphics::ManagedSurface();
 		getSavegameThumbnail(*thumbnail->surfacePtr());
 	}
-	if (!syncThumbnail(s, thumbnail))
-		return { kUnknownError, "Could not read thumbnail" };
+	bool couldSyncThumbnail = syncThumbnail(s, thumbnail);
 	if (thumbnail != nullptr)
 		delete thumbnail;
+	if (!couldSyncThumbnail)
+		return { kUnknownError, "Could not read thumbnail" };
 
 	uint32 millis = menu().isOpen()
 		? menu().millisBeforeMenu()
diff --git a/engines/alcachofa/menu.cpp b/engines/alcachofa/menu.cpp
index faed5b72891..471b492665c 100644
--- a/engines/alcachofa/menu.cpp
+++ b/engines/alcachofa/menu.cpp
@@ -147,7 +147,7 @@ bool Menu::tryReadOldSavefile() {
 		return false;
 
 	ExtendedSavegameHeader header;
-	if (!g_engine->getMetaEngine()->readSavegameHeader(savefile.get(), &header, false))
+	if (!g_engine->getMetaEngine()->readSavegameHeader(savefile.get(), &header, true))
 		return false;
 	_selectedSavefileDescription = header.description;
 
diff --git a/engines/alcachofa/metaengine.cpp b/engines/alcachofa/metaengine.cpp
index 0280617af4e..0e5641c64b9 100644
--- a/engines/alcachofa/metaengine.cpp
+++ b/engines/alcachofa/metaengine.cpp
@@ -115,10 +115,9 @@ void AlcachofaMetaEngine::getSavegameThumbnail(Surface &surf) {
 	if (Alcachofa::g_engine != nullptr) {
 		Surface bigThumbnail;
 		Alcachofa::g_engine->getSavegameThumbnail(bigThumbnail);
-		if (bigThumbnail.getPixels() != nullptr) {
+		if (bigThumbnail.getPixels() != nullptr)
 			surf = *bigThumbnail.scale(kSmallThumbnailWidth, kSmallThumbnailHeight, true);
-			bigThumbnail.free();
-		}
+		bigThumbnail.free();
 	}
 	// if not, ScummVM will output an appropriate warning
 }
diff --git a/engines/alcachofa/player.cpp b/engines/alcachofa/player.cpp
index 13757fd92e8..80f7f519a67 100644
--- a/engines/alcachofa/player.cpp
+++ b/engines/alcachofa/player.cpp
@@ -215,7 +215,9 @@ struct DoorTask : public Task {
 		, _targetObject(nullptr)
 		, _targetDirection(Direction::Invalid) {
 		findTarget();
-		process.name() = String::format("Door to %s %s", _targetRoom->name().c_str(), _targetObject->name().c_str());
+		process.name() = String::format("Door to %s %s",
+			_targetRoom == nullptr ? "<null>" : _targetRoom->name().c_str(),
+			_targetObject == nullptr ? "<null>" : _targetObject->name().c_str());
 	}
 
 	DoorTask(Process &process, Serializer &s)
diff --git a/engines/alcachofa/rooms.h b/engines/alcachofa/rooms.h
index 649c1944c40..2ca7ee43cb1 100644
--- a/engines/alcachofa/rooms.h
+++ b/engines/alcachofa/rooms.h
@@ -101,7 +101,7 @@ public:
 private:
 	ShapeObject *_lastSelectedObject = nullptr;
 	ObjectBase *_idleArm = nullptr;
-	SlideButton *_currentSlideButton;
+	SlideButton *_currentSlideButton = nullptr;
 };
 
 class ConnectMenu final : public Room {
diff --git a/engines/alcachofa/scheduler.cpp b/engines/alcachofa/scheduler.cpp
index 81b5f38bc9e..7266ca1b0be 100644
--- a/engines/alcachofa/scheduler.cpp
+++ b/engines/alcachofa/scheduler.cpp
@@ -90,7 +90,9 @@ Process::Process(ProcessId pid, MainCharacterKind characterKind)
 	, _character(characterKind)
 	, _name("Unnamed process") {}
 
-Process::Process(Serializer &s) {
+Process::Process(Serializer &s)
+	: _pid(0)
+	, _character(MainCharacterKind::None) {
 	syncGame(s);
 }
 
diff --git a/engines/alcachofa/script.cpp b/engines/alcachofa/script.cpp
index 0b0411f356c..2296266940b 100644
--- a/engines/alcachofa/script.cpp
+++ b/engines/alcachofa/script.cpp
@@ -184,7 +184,7 @@ enum class StackEntryType {
 struct StackEntry {
 	StackEntry(StackEntryType type, int32 number) : _type(type), _number(number) {}
 	StackEntry(StackEntryType type, uint32 index) : _type(type), _index(index) {}
-	StackEntry(Serializer &s) { syncGame(s); }
+	StackEntry(Serializer &s) : _type(), _number(0) { syncGame(s); }
 
 	void syncGame(Serializer &s) {
 		syncEnum(s, _type);
diff --git a/engines/alcachofa/shape.cpp b/engines/alcachofa/shape.cpp
index 8d52dd036dd..5db327f47e3 100644
--- a/engines/alcachofa/shape.cpp
+++ b/engines/alcachofa/shape.cpp
@@ -155,7 +155,8 @@ static float depthAtForConvex(const PathFindingPolygon &p, Point q) {
 		sumDepths += 1 / distances._toEdge * depthOnEdge;
 		sumDistances += 1 / distances._toEdge;
 	}
-	return sumDepths / sumDistances * 0.01f;
+	return sumDistances < epsilon ? 0
+		: sumDepths / sumDistances * 0.01f;
 }
 
 float PathFindingPolygon::depthAt(Point query) const {
diff --git a/engines/alcachofa/sounds.cpp b/engines/alcachofa/sounds.cpp
index dd14db3e5ab..b26795fc006 100644
--- a/engines/alcachofa/sounds.cpp
+++ b/engines/alcachofa/sounds.cpp
@@ -106,7 +106,7 @@ static AudioStream *loadSND(File *file) {
 	else if (format == 17 && channels <= 2)
 		return makeADPCMStream(subStream, DisposeAfterUse::YES, 0, kADPCMMSIma, (int)freq, (int)channels, (uint32)bytesPerBlock);
 	else {
-		delete file;
+		delete subStream;
 		g_engine->game().invalidSNDFormat(format, channels, freq, bitsPerSample);
 		return nullptr;
 	}
@@ -186,13 +186,15 @@ SoundHandle Sounds::playSoundInternal(const char *fileName, byte volume, Mixer::
 		}
 	}
 
+	SoundHandle handle;
+	_mixer->playStream(type, &handle, stream, -1, volume);
 	Playback playback;
-	_mixer->playStream(type, &playback._handle, stream, -1, volume);
+	playback._handle = handle;
 	playback._type = type;
 	playback._inputRate = stream->getRate();
 	playback._samples = Common::move(samples);
 	_playbacks.push_back(Common::move(playback));
-	return playback._handle;
+	return handle;
 }
 
 SoundHandle Sounds::playVoice(const String &fileName, byte volume) {


Commit: abfa7b38c8a2864177a05d87af86075168652516
    https://github.com/scummvm/scummvm/commit/abfa7b38c8a2864177a05d87af86075168652516
Author: Helco (hermann.noll at hotmail.com)
Date: 2025-09-13T07:38:46+02:00

Commit Message:
ALCACHOFA: Fix assertion in GLES2 renderer upon fadeExit

Changed paths:
    engines/alcachofa/graphics-opengl-shaders.cpp


diff --git a/engines/alcachofa/graphics-opengl-shaders.cpp b/engines/alcachofa/graphics-opengl-shaders.cpp
index 5151737c0f7..ea12fd0ee16 100644
--- a/engines/alcachofa/graphics-opengl-shaders.cpp
+++ b/engines/alcachofa/graphics-opengl-shaders.cpp
@@ -78,7 +78,8 @@ public:
 	}
 
 	void end() override {
-		checkFirstDrawCommand();
+		if (!_vertices.empty()) // submit last batch
+			checkFirstDrawCommand();
 		OpenGLRenderer::end();
 	}
 




More information about the Scummvm-git-logs mailing list