[Scummvm-git-logs] scummvm master -> 56a7b746c304392b97b8035a233c256ab217e1c3

sev- sev at scummvm.org
Thu Apr 2 14:33:14 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:
56a7b746c3 DIRECTOR: Plug memory leaks


Commit: 56a7b746c304392b97b8035a233c256ab217e1c3
    https://github.com/scummvm/scummvm/commit/56a7b746c304392b97b8035a233c256ab217e1c3
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-04-02T16:32:53+02:00

Commit Message:
DIRECTOR: Plug memory leaks

Changed paths:
    engines/director/archive.cpp
    engines/director/frame.cpp
    engines/director/score.cpp
    engines/director/sprite.cpp


diff --git a/engines/director/archive.cpp b/engines/director/archive.cpp
index acdc451437..9d9a93f02f 100644
--- a/engines/director/archive.cpp
+++ b/engines/director/archive.cpp
@@ -589,7 +589,7 @@ Common::SeekableSubReadStreamEndian *RIFXArchive::getResource(uint32 tag, uint16
 	uint32 offset = res.offset + 8;
 	uint32 size = res.size;
 
-	return new Common::SeekableSubReadStreamEndian(_stream, offset, offset + size, true, DisposeAfterUse::NO);
+	return new Common::SeekableSubReadStreamEndian(_stream, offset, offset + size, true, DisposeAfterUse::YES);
 }
 
 Resource RIFXArchive::getResourceDetail(uint32 tag, uint16 id) {
diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index 0203f5e47f..839498cbc0 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -107,6 +107,9 @@ Frame::Frame(const Frame &frame) {
 
 Frame::~Frame() {
 	delete _palette;
+
+	for (uint16 i = 0; i < _sprites.size(); i++)
+		delete _sprites[i];
 }
 
 void Frame::readChannel(Common::SeekableSubReadStreamEndian &stream, uint16 offset, uint16 size) {
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index d2e39dfd5e..b3ea3d0559 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -369,6 +369,9 @@ void Score::loadSpriteImages(bool isSharedCast) {
 		}
 
 		img->loadStream(*pic);
+
+		delete pic;
+
 		bitmapCast->_surface = img->getSurface();
 
 		debugC(4, kDebugImages, "Score::loadSpriteImages(): id: %d, w: %d, h: %d, flags: %x, bytes: %x, bpp: %d clut: %x",
@@ -446,6 +449,10 @@ Score::~Score() {
 		_movieArchive = nullptr;
 	}
 
+	if (_loadedCast)
+		for (Common::HashMap<int, Cast *>::iterator it = _loadedCast->begin(); it != _loadedCast->end(); ++it)
+			delete it->_value;
+
 	delete _font;
 	delete _labels;
 	delete _loadedStxts;
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 49e69d809f..0ae47b6caf 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -108,8 +108,6 @@ Sprite::Sprite(const Sprite &sprite) {
 }
 
 Sprite::~Sprite() {
-	if (_cast)
-		delete _cast;
 }
 
 uint16 Sprite::getPattern() {




More information about the Scummvm-git-logs mailing list