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

neuromancer noreply at scummvm.org
Sat Sep 16 09:40:08 UTC 2023


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

Summary:
050688cb72 FREESCAPE: delete unused object when parsing groups
cb5907eadd FREESCAPE: improved error handling in loadBundledImage
2467a05751 FREESCAPE: use references instead of pointers in restoreECD
46eabef441 FREESCAPE: assert to avoid null pointer derreference in restoreECD
6a61fe75a1 FREESCAPE: initialize extraColor local variable in load8bitArea
b2c5976ffc FREESCAPE: assert to avoid null pointer derreference in addWalls


Commit: 050688cb72217dca5e5ea385709d0285bf813c55
    https://github.com/scummvm/scummvm/commit/050688cb72217dca5e5ea385709d0285bf813c55
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-09-16T11:39:28+02:00

Commit Message:
FREESCAPE: delete unused object when parsing groups

Changed paths:
    engines/freescape/loaders/8bitBinaryLoader.cpp


diff --git a/engines/freescape/loaders/8bitBinaryLoader.cpp b/engines/freescape/loaders/8bitBinaryLoader.cpp
index ad3e4c23f75..41cfb8e533f 100644
--- a/engines/freescape/loaders/8bitBinaryLoader.cpp
+++ b/engines/freescape/loaders/8bitBinaryLoader.cpp
@@ -157,6 +157,7 @@ Group *FreescapeEngine::load8bitGroupV1(Common::SeekableReadStream *file, byte r
 			} else {
 				debugC(1, kFreescapeDebugParser, "Incomplete group operation %d", opcode);
 				byteSizeOfObject = 0;
+				delete operation;
 				continue;
 			}
 		}
@@ -238,6 +239,7 @@ Group *FreescapeEngine::load8bitGroupV2(Common::SeekableReadStream *file, byte r
 				byteSizeOfObject = byteSizeOfObject - 3;
 			} else {
 				byteSizeOfObject = 0;
+				delete operation;
 				continue;
 			}
 		}


Commit: cb5907eadd00b96225e05b7f4cc62949ceb1751d
    https://github.com/scummvm/scummvm/commit/cb5907eadd00b96225e05b7f4cc62949ceb1751d
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-09-16T11:39:28+02:00

Commit Message:
FREESCAPE: improved error handling in loadBundledImage

Changed paths:
    engines/freescape/assets.cpp


diff --git a/engines/freescape/assets.cpp b/engines/freescape/assets.cpp
index fe63bdd8710..ae9d740b1e9 100644
--- a/engines/freescape/assets.cpp
+++ b/engines/freescape/assets.cpp
@@ -128,11 +128,14 @@ void FreescapeEngine::loadDataBundle() {
 Graphics::Surface *FreescapeEngine::loadBundledImage(const Common::String &name) {
 	Image::BitmapDecoder decoder;
 	Common::String bmpFilename = name + "_" + Common::getRenderModeDescription(_renderMode) + ".bmp";
-	debug("Loading %s from bundled archive", bmpFilename.c_str());
-	assert(_dataBundle->hasFile(bmpFilename));
+	debugC(1, kFreescapeDebugParser, "Loading %s from bundled archive", bmpFilename.c_str());
+	if (!_dataBundle->hasFile(bmpFilename))
+		error("Failed to open file %s from bundle", bmpFilename.c_str());
 
 	Common::SeekableReadStream *bmpFile = _dataBundle->createReadStreamForMember(bmpFilename);
-	decoder.loadStream(*bmpFile);
+	if (!decoder.loadStream(*bmpFile))
+		error("Failed to decode bmp file %s from bundle", bmpFilename.c_str());
+
 	Graphics::Surface *surface = new Graphics::Surface();
 	surface->copyFrom(*decoder.getSurface());
 	decoder.destroy();


Commit: 2467a057518ae78244dab888d694d4c08e5bd18e
    https://github.com/scummvm/scummvm/commit/2467a057518ae78244dab888d694d4c08e5bd18e
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-09-16T11:39:28+02:00

Commit Message:
FREESCAPE: use references instead of pointers in restoreECD

Changed paths:
    engines/freescape/freescape.h
    engines/freescape/games/dark/dark.cpp


diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 805c0c6bf30..7f4fe705e34 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -602,7 +602,7 @@ public:
 private:
 	void addECDs(Area *area);
 	void addECD(Area *area, const Math::Vector3d position, int index);
-	void restoreECD(Area *area, int index);
+	void restoreECD(Area &area, int index);
 	bool checkECD(uint16 areaID, int index);
 	bool tryDestroyECD(int index);
 	bool tryDestroyECDFullGame(int index);
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index e5dab377dac..daae805c17c 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -131,12 +131,12 @@ void DarkEngine::addECD(Area *area, const Math::Vector3d position, int index) {
 	}
 }
 
-void DarkEngine::restoreECD(Area *area, int index) {
+void DarkEngine::restoreECD(Area &area, int index) {
 	Object *obj = nullptr;
 	int16 id = 227 + index * 6;
 	for (int i = 0; i < 4; i++) {
 		debugC(1, kFreescapeDebugParser, "Restoring object %d to from ECD %d", id, index);
-		obj = (GeometricObject *)area->objectWithID(id);
+		obj = (GeometricObject *)area.objectWithID(id);
 		obj->restore();
 		obj->makeVisible();
 		id--;
@@ -359,15 +359,13 @@ void DarkEngine::addSkanner(Area *area) {
 bool DarkEngine::checkIfGameEnded() {
 	if (_gameStateVars[kVariableDarkECD] > 0) {
 		int index = _gameStateVars[kVariableDarkECD] - 1;
-		//insertTemporaryMessage(Common::String::format("%-14d", _gameStateVars[kVariableDarkECD] - 1), _countdown - 2);
-		//restoreECD(_currentArea, _gameStateVars[kVariableDarkECD] - 1);
 		bool destroyed = tryDestroyECD(index);
 		if (destroyed) {
 			_gameStateVars[kVariableActiveECDs] -= 4;
 			_gameStateVars[k8bitVariableScore] += 52750;
 			insertTemporaryMessage(_messagesList[2], _countdown - 2);
 		} else {
-			restoreECD(_currentArea, index);
+			restoreECD(*_currentArea, index);
 			insertTemporaryMessage(_messagesList[1], _countdown - 2);
 		}
 		_gameStateVars[kVariableDarkECD] = 0;


Commit: 46eabef44127f6d0aba709846f186e6fe0770796
    https://github.com/scummvm/scummvm/commit/46eabef44127f6d0aba709846f186e6fe0770796
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-09-16T11:39:28+02:00

Commit Message:
FREESCAPE: assert to avoid null pointer derreference in restoreECD

Changed paths:
    engines/freescape/games/dark/dark.cpp


diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index daae805c17c..b361e8055eb 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -137,6 +137,7 @@ void DarkEngine::restoreECD(Area &area, int index) {
 	for (int i = 0; i < 4; i++) {
 		debugC(1, kFreescapeDebugParser, "Restoring object %d to from ECD %d", id, index);
 		obj = (GeometricObject *)area.objectWithID(id);
+		assert(obj);
 		obj->restore();
 		obj->makeVisible();
 		id--;


Commit: 6a61fe75a1f81154d59b1d4358c7570c581199df
    https://github.com/scummvm/scummvm/commit/6a61fe75a1f81154d59b1d4358c7570c581199df
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-09-16T11:39:28+02:00

Commit Message:
FREESCAPE: initialize extraColor local variable in load8bitArea

Changed paths:
    engines/freescape/loaders/8bitBinaryLoader.cpp


diff --git a/engines/freescape/loaders/8bitBinaryLoader.cpp b/engines/freescape/loaders/8bitBinaryLoader.cpp
index 41cfb8e533f..0fd74a05f06 100644
--- a/engines/freescape/loaders/8bitBinaryLoader.cpp
+++ b/engines/freescape/loaders/8bitBinaryLoader.cpp
@@ -546,7 +546,7 @@ Area *FreescapeEngine::load8bitArea(Common::SeekableReadStream *file, uint16 nco
 	uint8 gasPocketY = 0;
 	uint8 gasPocketRadius = 0;
 	// Castle specific
-	uint8 extraColor[4];
+	uint8 extraColor[4] = {};
 	if (isEclipse()) {
 		byte idx = file->readByte();
 		name = idx < 8 ? eclipseRoomName[idx] : eclipseRoomName[8];


Commit: b2c5976ffc4eba47a81705be97b55f3a1ff6fca9
    https://github.com/scummvm/scummvm/commit/b2c5976ffc4eba47a81705be97b55f3a1ff6fca9
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-09-16T11:39:28+02:00

Commit Message:
FREESCAPE: assert to avoid null pointer derreference in addWalls

Changed paths:
    engines/freescape/games/dark/dark.cpp


diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index b361e8055eb..018a3afc9dd 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -96,6 +96,7 @@ void DarkEngine::addWalls(Area *area) {
 		if (target > 0) {
 			area->addObjectFromArea(id, _areaMap[255]);
 			GeometricObject *gobj = (GeometricObject *)area->objectWithID(id);
+			assert(gobj);
 			assert((*(gobj->_condition[0]._thenInstructions))[0].getType() == Token::Type::GOTO);
 			assert((*(gobj->_condition[0]._thenInstructions))[0]._destination == 0);
 			(*(gobj->_condition[0]._thenInstructions))[0].setSource(target);




More information about the Scummvm-git-logs mailing list