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

yuv422 yuv422 at users.noreply.github.com
Mon Mar 2 11:06:20 UTC 2020


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

Summary:
ea7ea9f075 DRAGONS: Coverity Scan fixes. Memory leaks, uninitialised variables.


Commit: ea7ea9f07548dd64ba71aab3f254fe3a0063c195
    https://github.com/scummvm/scummvm/commit/ea7ea9f07548dd64ba71aab3f254fe3a0063c195
Author: Eric Fry (yuv422 at users.noreply.github.com)
Date: 2020-03-02T22:05:50+11:00

Commit Message:
DRAGONS: Coverity Scan fixes. Memory leaks, uninitialised variables.

Changed paths:
    engines/dragons/actor.cpp
    engines/dragons/actorresource.cpp
    engines/dragons/actorresource.h
    engines/dragons/background.h
    engines/dragons/dragonini.cpp
    engines/dragons/dragonrms.cpp
    engines/dragons/dragons.cpp
    engines/dragons/inventory.cpp


diff --git a/engines/dragons/actor.cpp b/engines/dragons/actor.cpp
index 37d0e703f8..d3081f0ae6 100644
--- a/engines/dragons/actor.cpp
+++ b/engines/dragons/actor.cpp
@@ -57,6 +57,7 @@ Actor *ActorManager::loadActor(uint32 resourceId, uint32 sequenceId, int16 x, in
 	} else {
 		//TODO run find by resource and remove from mem logic here. @0x800358c8
 		debug("Unable to find free actor slot!!");
+		delete resource;
 	}
 	resetDisplayOrder();
 	return actor;
@@ -149,6 +150,7 @@ Actor::Actor(uint16 id) : _actorID(id) {
 
 void Actor::init(ActorResource *resource, int16 x, int16 y, uint32 sequenceID) {
 	debug(3, "actor %d Init", _actorID);
+	delete _actorResource;
 	_actorResource = resource;
 	_x_pos = x;
 	_y_pos = y;
@@ -209,6 +211,8 @@ void Actor::reset_maybe() {
 	_flags = 0;
 	//TODO actor_find_by_resourceId_and_remove_resource_from_mem_maybe(resourceID);
 	freeFrame();
+	delete _actorResource;
+	_actorResource = NULL;
 }
 
 uint32 calcDistance(int32 x1, int32 y1, int32 x2, int32 y2) {
diff --git a/engines/dragons/actorresource.cpp b/engines/dragons/actorresource.cpp
index dae8f50ea5..05b579196a 100644
--- a/engines/dragons/actorresource.cpp
+++ b/engines/dragons/actorresource.cpp
@@ -186,4 +186,17 @@ byte *ActorResource::getPalette() {
 	return _palette;
 }
 
+ActorResource::ActorResource() : _id(0), _data(nullptr), _fileSize(0), _frames(nullptr),
+														   _framesCount(0),
+														   _sequenceTableOffset(0) {
+	memset(_palette, 0, 512);
+}
+
+ActorResource::~ActorResource() {
+	if (_data) {
+		free(_data);
+	}
+	delete _frames;
+}
+
 } // End of namespace Dragons
diff --git a/engines/dragons/actorresource.h b/engines/dragons/actorresource.h
index b9d35ca384..9162dc9d25 100644
--- a/engines/dragons/actorresource.h
+++ b/engines/dragons/actorresource.h
@@ -67,6 +67,8 @@ private:
 	//uint16 _sequenceCount;
 
 public:
+	ActorResource();
+	~ActorResource();
 	bool load(uint32 id, byte *dataStart, Common::SeekableReadStream &stream);
 	Graphics::Surface *loadFrame(ActorFrame &frameNumber, byte *palette);
 	ActorFrame *loadFrameHeader(uint16 frameOffset);
diff --git a/engines/dragons/background.h b/engines/dragons/background.h
index 549ed39885..e00b339bd8 100644
--- a/engines/dragons/background.h
+++ b/engines/dragons/background.h
@@ -71,6 +71,14 @@ struct TileMap {
 	uint32 size;
 	byte *map;
 	uint16 tileIndexOffset;
+
+	TileMap() {
+		w = 0;
+		h = 0;
+		size = 0;
+		map = nullptr;
+		tileIndexOffset = 0;
+	}
 };
 
 class Background {
diff --git a/engines/dragons/dragonini.cpp b/engines/dragons/dragonini.cpp
index afa10fa399..cca789e741 100644
--- a/engines/dragons/dragonini.cpp
+++ b/engines/dragons/dragonini.cpp
@@ -64,6 +64,8 @@ void DragonINIResource::reset() {
 	}
 
 	_flickerINI = &_dragonINI[0];
+
+	delete readStream;
 }
 
 DragonINI *DragonINIResource::getRecord(uint16 index) {
diff --git a/engines/dragons/dragonrms.cpp b/engines/dragons/dragonrms.cpp
index a62c7d0836..27b7b7443f 100644
--- a/engines/dragons/dragonrms.cpp
+++ b/engines/dragons/dragonrms.cpp
@@ -47,6 +47,7 @@ DragonRMS::DragonRMS(BigfileArchive *bigfileArchive, DragonOBD *dragonOBD) : _dr
 		_rmsObjects[i]._field16 = readStream->readSint32LE();
 		_rmsObjects[i]._field1a = readStream->readSint16LE();
 	}
+	delete readStream;
 }
 
 char *DragonRMS::getSceneName(uint32 sceneId) {
diff --git a/engines/dragons/dragons.cpp b/engines/dragons/dragons.cpp
index 094764e644..4b203223ac 100644
--- a/engines/dragons/dragons.cpp
+++ b/engines/dragons/dragons.cpp
@@ -96,6 +96,8 @@ DragonsEngine::DragonsEngine(OSystem *syst, const ADGameDescription *desc) : Eng
 	_debugMode = false;
 	_isGamePaused = false;
 
+	_bit_flags_8006fbd8 = 0;
+
 	reset();
 }
 
diff --git a/engines/dragons/inventory.cpp b/engines/dragons/inventory.cpp
index 3af6d3d154..2ec2f1dc5e 100644
--- a/engines/dragons/inventory.cpp
+++ b/engines/dragons/inventory.cpp
@@ -68,6 +68,7 @@ Inventory::Inventory(DragonsEngine *vm) : _vm(vm) {
 	_screenPositionIndex = 0;
 	_previousState = Closed;
 	_bag = NULL;
+	_actor = NULL;
 
 	_inventionBookPrevSceneUpdateFunc = NULL;
 	_inventionBookPrevSceneId = 0;




More information about the Scummvm-git-logs mailing list