[Scummvm-git-logs] scummvm master -> 25d66b2a08f6a1ad09c7ad7dc9db11ad3a4c76cf

bgK bastien.bouclet at gmail.com
Sun Sep 24 06:22:04 CEST 2017


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

Summary:
48bf24b41e XEEN: Change SavesManager to use a map of pointers to MemoryWriteStreamDynamic
bc531e3ebf XEEN: Change OutFile not to subclass MemoryWriteStreamDynamic
2832332e74 NETWORKING: Changed NetworkReadStream not to subclass MemoryReadWriteStream
ab1243277a DM: Fix leaking the save thumbnail MemoryWriteStreamDynamic buffer
9facbdecda FULLPIPE: Fix leaking the save MemoryWriteStreamDynamic buffer
382df4a7c5 GNAP: Fix leaking the save thumbnail MemoryWriteStreamDynamic buffer
c3bff7f25a SWORD1: Fix leaking the save thumbnail MemoryWriteStreamDynamic buffer
9c2cfee4e5 SWORD25: Fix leaking the save thumbnail MemoryWriteStreamDynamic
ddac55699d SWORD25: Fix leaking the lua state MemoryWriteStreamDynamic buffer
1b3cc08b75 ZVISION: Fix leaking save / thumbnail MemoryWriteStreamDynamic buffers
3eb82462e7 ALL: Specify the DisposeAfterUse constructor argument for dynamic memory write streams
be67f0d8bf COMMON: Remove DisposeAfterUse default value from dynamic write memory streams
25d66b2a08 Merge pull request #1027 from bgK/memstream-default-arg


Commit: 48bf24b41e0222039e343dca175dcecd768c7e0c
    https://github.com/scummvm/scummvm/commit/48bf24b41e0222039e343dca175dcecd768c7e0c
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2017-09-22T07:05:58+02:00

Commit Message:
XEEN: Change SavesManager to use a map of pointers to MemoryWriteStreamDynamic

Our implementation of HashMap does not allow value types without a
zero-argument constructor.

Changed paths:
    engines/xeen/saves.cpp
    engines/xeen/saves.h


diff --git a/engines/xeen/saves.cpp b/engines/xeen/saves.cpp
index 4df4b37..f7d93d1 100644
--- a/engines/xeen/saves.cpp
+++ b/engines/xeen/saves.cpp
@@ -37,10 +37,10 @@ void OutFile::finalize() {
 	uint16 id = BaseCCArchive::convertNameToId(_filename);
 
 	if (!_vm->_saves->_newData.contains(id))
-		_vm->_saves->_newData[id] = Common::MemoryWriteStreamDynamic(DisposeAfterUse::YES);
+		_vm->_saves->_newData[id] = new Common::MemoryWriteStreamDynamic(DisposeAfterUse::YES);
 
-	Common::MemoryWriteStreamDynamic &out = _vm->_saves->_newData[id];
-	out.write(getData(), size());
+	Common::MemoryWriteStreamDynamic *out = _vm->_saves->_newData[id];
+	out->write(getData(), size());
 }
 
 /*------------------------------------------------------------------------*/
@@ -54,6 +54,9 @@ SavesManager::SavesManager(XeenEngine *vm, Party &party) :
 }
 
 SavesManager::~SavesManager() {
+	for (Common::HashMap<uint16, Common::MemoryWriteStreamDynamic *>::iterator it = _newData.begin(); it != _newData.end(); it++) {
+		delete (*it)._value;
+	}
 	delete[] _data;
 }
 
@@ -86,8 +89,8 @@ Common::SeekableReadStream *SavesManager::createReadStreamForMember(const Common
 	// save manager, then return that new resource
 	uint16 id = BaseCCArchive::convertNameToId(name);
 	if (_newData.contains(id)) {
-		Common::MemoryWriteStreamDynamic stream = _newData[id];
-		return new Common::MemoryReadStream(stream.getData(), stream.size());
+		Common::MemoryWriteStreamDynamic *stream = _newData[id];
+		return new Common::MemoryReadStream(stream->getData(), stream->size());
 	}
 
 	// Retrieve the resource from the loaded savefile
diff --git a/engines/xeen/saves.h b/engines/xeen/saves.h
index 2571c46..404dee0 100644
--- a/engines/xeen/saves.h
+++ b/engines/xeen/saves.h
@@ -60,7 +60,7 @@ private:
 	XeenEngine *_vm;
 	Party &_party;
 	byte *_data;
-	Common::HashMap<uint16, Common::MemoryWriteStreamDynamic > _newData;
+	Common::HashMap<uint16, Common::MemoryWriteStreamDynamic *> _newData;
 
 	void load(Common::SeekableReadStream *stream);
 public:


Commit: bc531e3ebf6e2c3a67a79be4439f32b4989ce808
    https://github.com/scummvm/scummvm/commit/bc531e3ebf6e2c3a67a79be4439f32b4989ce808
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2017-09-22T07:05:59+02:00

Commit Message:
XEEN: Change OutFile not to subclass MemoryWriteStreamDynamic

Also fix leaking the MemoryWriteStreamDynamic buffer storage

Changed paths:
    engines/xeen/saves.cpp
    engines/xeen/saves.h


diff --git a/engines/xeen/saves.cpp b/engines/xeen/saves.cpp
index f7d93d1..f9a26b1 100644
--- a/engines/xeen/saves.cpp
+++ b/engines/xeen/saves.cpp
@@ -30,7 +30,17 @@
 namespace Xeen {
 
 OutFile::OutFile(XeenEngine *vm, const Common::String filename) :
-	_vm(vm), _filename(filename) {
+		_vm(vm),
+		_filename(filename),
+		_backingStream(DisposeAfterUse::YES) {
+}
+
+uint32 OutFile::write(const void *dataPtr, uint32 dataSize) {
+	return _backingStream.write(dataPtr, dataSize);
+}
+
+int32 OutFile::pos() const {
+	return _backingStream.pos();
 }
 
 void OutFile::finalize() {
@@ -40,7 +50,7 @@ void OutFile::finalize() {
 		_vm->_saves->_newData[id] = new Common::MemoryWriteStreamDynamic(DisposeAfterUse::YES);
 
 	Common::MemoryWriteStreamDynamic *out = _vm->_saves->_newData[id];
-	out->write(getData(), size());
+	out->write(_backingStream.getData(), _backingStream.size());
 }
 
 /*------------------------------------------------------------------------*/
diff --git a/engines/xeen/saves.h b/engines/xeen/saves.h
index 404dee0..9c161c8 100644
--- a/engines/xeen/saves.h
+++ b/engines/xeen/saves.h
@@ -44,14 +44,19 @@ struct XeenSavegameHeader {
 class XeenEngine;
 class SavesManager;
 
-class OutFile : public Common::MemoryWriteStreamDynamic {
+class OutFile : public Common::WriteStream {
 private:
 	XeenEngine *_vm;
 	Common::String _filename;
+	Common::MemoryWriteStreamDynamic _backingStream;
 public:
 	OutFile(XeenEngine *vm, const Common::String filename);
 
 	void finalize();
+
+	uint32 write(const void *dataPtr, uint32 dataSize) override;
+
+	int32 pos() const override;
 };
 
 class SavesManager: public BaseCCArchive {


Commit: 2832332e74ecd0d166631dd516a98ffcde5b65b3
    https://github.com/scummvm/scummvm/commit/2832332e74ecd0d166631dd516a98ffcde5b65b3
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2017-09-22T07:05:59+02:00

Commit Message:
NETWORKING: Changed NetworkReadStream not to subclass MemoryReadWriteStream

Also fix the MemoryReadWriteStream managed buffer being leaked.
Fixes #9718.

Changed paths:
    backends/networking/curl/networkreadstream.cpp
    backends/networking/curl/networkreadstream.h


diff --git a/backends/networking/curl/networkreadstream.cpp b/backends/networking/curl/networkreadstream.cpp
index e4fc549..d3859ce 100644
--- a/backends/networking/curl/networkreadstream.cpp
+++ b/backends/networking/curl/networkreadstream.cpp
@@ -29,35 +29,35 @@
 
 namespace Networking {
 
-static size_t curlDataCallback(char *d, size_t n, size_t l, void *p) {
+size_t NetworkReadStream::curlDataCallback(char *d, size_t n, size_t l, void *p) {
 	NetworkReadStream *stream = (NetworkReadStream *)p;
 	if (stream)
-		return stream->write(d, n * l);
+		return stream->_backingStream.write(d, n * l);
 	return 0;
 }
 
-static size_t curlReadDataCallback(char *d, size_t n, size_t l, void *p) {
+size_t NetworkReadStream::curlReadDataCallback(char *d, size_t n, size_t l, void *p) {
 	NetworkReadStream *stream = (NetworkReadStream *)p;
 	if (stream)
 		return stream->fillWithSendingContents(d, n * l);
 	return 0;
 }
 
-static size_t curlHeadersCallback(char *d, size_t n, size_t l, void *p) {
+size_t NetworkReadStream::curlHeadersCallback(char *d, size_t n, size_t l, void *p) {
 	NetworkReadStream *stream = (NetworkReadStream *)p;
 	if (stream)
 		return stream->addResponseHeaders(d, n * l);
 	return 0;
 }
 
-static int curlProgressCallback(void *p, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) {
+int NetworkReadStream::curlProgressCallback(void *p, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) {
 	NetworkReadStream *stream = (NetworkReadStream *)p;
 	if (stream)
 		stream->setProgress(dlnow, dltotal);
 	return 0;
 }
 
-static int curlProgressCallbackOlder(void *p, double dltotal, double dlnow, double ultotal, double ulnow) {
+int NetworkReadStream::curlProgressCallbackOlder(void *p, double dltotal, double dlnow, double ultotal, double ulnow) {
 	// for libcurl older than 7.32.0 (CURLOPT_PROGRESSFUNCTION)
 	return curlProgressCallback(p, (curl_off_t)dltotal, (curl_off_t)dlnow, (curl_off_t)ultotal, (curl_off_t)ulnow);
 }
@@ -178,15 +178,18 @@ void NetworkReadStream::init(const char *url, curl_slist *headersList, Common::H
 	ConnMan.registerEasyHandle(_easy);
 }
 
-NetworkReadStream::NetworkReadStream(const char *url, curl_slist *headersList, Common::String postFields, bool uploading, bool usingPatch) {
+NetworkReadStream::NetworkReadStream(const char *url, curl_slist *headersList, Common::String postFields, bool uploading, bool usingPatch) :
+		_backingStream(DisposeAfterUse::YES) {
 	init(url, headersList, (const byte *)postFields.c_str(), postFields.size(), uploading, usingPatch, false);
 }
 
-NetworkReadStream::NetworkReadStream(const char *url, curl_slist *headersList, Common::HashMap<Common::String, Common::String> formFields, Common::HashMap<Common::String, Common::String> formFiles) {
+NetworkReadStream::NetworkReadStream(const char *url, curl_slist *headersList, Common::HashMap<Common::String, Common::String> formFields, Common::HashMap<Common::String, Common::String> formFiles) :
+		_backingStream(DisposeAfterUse::YES) {
 	init(url, headersList, formFields, formFiles);
 }
 
-NetworkReadStream::NetworkReadStream(const char *url, curl_slist *headersList, const byte *buffer, uint32 bufferSize, bool uploading, bool usingPatch, bool post) {
+NetworkReadStream::NetworkReadStream(const char *url, curl_slist *headersList, const byte *buffer, uint32 bufferSize, bool uploading, bool usingPatch, bool post) :
+		_backingStream(DisposeAfterUse::YES) {
 	init(url, headersList, buffer, bufferSize, uploading, usingPatch, post);
 }
 
@@ -201,7 +204,7 @@ bool NetworkReadStream::eos() const {
 }
 
 uint32 NetworkReadStream::read(void *dataPtr, uint32 dataSize) {
-	uint32 actuallyRead = MemoryReadWriteStream::read(dataPtr, dataSize);
+	uint32 actuallyRead = _backingStream.read(dataPtr, dataSize);
 
 	if (actuallyRead == 0) {
 		if (_requestComplete)
diff --git a/backends/networking/curl/networkreadstream.h b/backends/networking/curl/networkreadstream.h
index 8e59429..c0ed5ee 100644
--- a/backends/networking/curl/networkreadstream.h
+++ b/backends/networking/curl/networkreadstream.h
@@ -34,8 +34,9 @@ struct curl_slist;
 
 namespace Networking {
 
-class NetworkReadStream: public Common::MemoryReadWriteStream {
+class NetworkReadStream: public Common::ReadStream {
 	CURL *_easy;
+	Common::MemoryReadWriteStream _backingStream;
 	bool _eos, _requestComplete;
 	const byte *_sendingContentsBuffer;
 	uint32 _sendingContentsSize;
@@ -46,6 +47,30 @@ class NetworkReadStream: public Common::MemoryReadWriteStream {
 	void init(const char *url, curl_slist *headersList, const byte *buffer, uint32 bufferSize, bool uploading, bool usingPatch, bool post);
 	void init(const char *url, curl_slist *headersList, Common::HashMap<Common::String, Common::String> formFields, Common::HashMap<Common::String, Common::String> formFiles);
 
+	/**
+	 * Fills the passed buffer with _sendingContentsBuffer contents.
+	 * It works similarly to read(), expect it's not for reading
+	 * Stream's contents, but for sending our own data to the server.
+	 *
+	 * @returns how many bytes were actually read (filled in)
+	 */
+	uint32 fillWithSendingContents(char *bufferToFill, uint32 maxSize);
+
+	/**
+	* Remembers headers returned to CURL in server's response.
+	*
+	* @returns how many bytes were actually read
+	*/
+	uint32 addResponseHeaders(char *buffer, uint32 bufferSize);
+
+	/** Used in curl progress callback to pass current downloaded/total values. */
+	void setProgress(uint64 downloaded, uint64 total);
+
+	static size_t curlDataCallback(char *d, size_t n, size_t l, void *p);
+	static size_t curlReadDataCallback(char *d, size_t n, size_t l, void *p);
+	static size_t curlHeadersCallback(char *d, size_t n, size_t l, void *p);
+	static int curlProgressCallback(void *p, long dltotal, long dlnow, long ultotal, long ulnow);
+	static int curlProgressCallbackOlder(void *p, double dltotal, double dlnow, double ultotal, double ulnow);
 public:
 	/** Send <postFields>, using POST by default. */
 	NetworkReadStream(const char *url, curl_slist *headersList, Common::String postFields, bool uploading = false, bool usingPatch = false);
@@ -115,27 +140,8 @@ public:
 	*/
 	Common::String responseHeaders() const;
 
-	/**
-	 * Fills the passed buffer with _sendingContentsBuffer contents.
-	 * It works similarly to read(), expect it's not for reading
-	 * Stream's contents, but for sending our own data to the server.
-	 *
-	 * @returns how many bytes were actually read (filled in)
-	 */
-	uint32 fillWithSendingContents(char *bufferToFill, uint32 maxSize);
-
-	/**
-	* Remembers headers returned to CURL in server's response.
-	*
-	* @returns how many bytes were actually read
-	*/
-	uint32 addResponseHeaders(char *buffer, uint32 bufferSize);
-
 	/** Returns a number in range [0, 1], where 1 is "complete". */
 	double getProgress() const;
-
-	/** Used in curl progress callback to pass current downloaded/total values. */
-	void setProgress(uint64 downloaded, uint64 total);
 };
 
 } // End of namespace Networking


Commit: ab1243277ab18ce54720dc734c48520f01274ad9
    https://github.com/scummvm/scummvm/commit/ab1243277ab18ce54720dc734c48520f01274ad9
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2017-09-22T07:06:20+02:00

Commit Message:
DM: Fix leaking the save thumbnail MemoryWriteStreamDynamic buffer

Changed paths:
    engines/dm/eventman.cpp


diff --git a/engines/dm/eventman.cpp b/engines/dm/eventman.cpp
index 622a7d5..3859fc9 100644
--- a/engines/dm/eventman.cpp
+++ b/engines/dm/eventman.cpp
@@ -782,7 +782,7 @@ void EventManager::processCommandQueue() {
 			delete _vm->_saveThumbnail;
 			_vm->_saveThumbnail = nullptr;
 		} else if (!_vm->_saveThumbnail) {
-			_vm->_saveThumbnail = new Common::MemoryWriteStreamDynamic();
+			_vm->_saveThumbnail = new Common::MemoryWriteStreamDynamic(DisposeAfterUse::YES);
 			Graphics::saveThumbnail(*_vm->_saveThumbnail);
 		}
 


Commit: 9facbdecda3f15d2fd9889294ecd4e550050c0a3
    https://github.com/scummvm/scummvm/commit/9facbdecda3f15d2fd9889294ecd4e550050c0a3
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2017-09-22T07:06:20+02:00

Commit Message:
FULLPIPE: Fix leaking the save MemoryWriteStreamDynamic buffer

Changed paths:
    engines/fullpipe/statesaver.cpp


diff --git a/engines/fullpipe/statesaver.cpp b/engines/fullpipe/statesaver.cpp
index 7fb56f0..5eb08fe 100644
--- a/engines/fullpipe/statesaver.cpp
+++ b/engines/fullpipe/statesaver.cpp
@@ -55,7 +55,7 @@ bool GameLoader::writeSavegame(Scene *sc, const char *fname) {
 	header.updateCounter = _updateCounter;
 	header.unkField = 1;
 
-	Common::MemoryWriteStreamDynamic stream;
+	Common::MemoryWriteStreamDynamic stream(DisposeAfterUse::YES);
 
 	MfcArchive *archive = new MfcArchive(&stream);
 


Commit: 382df4a7c5a15938009dac71e8d0a0fa1559ea54
    https://github.com/scummvm/scummvm/commit/382df4a7c5a15938009dac71e8d0a0fa1559ea54
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2017-09-22T07:06:20+02:00

Commit Message:
GNAP: Fix leaking the save thumbnail MemoryWriteStreamDynamic buffer

Changed paths:
    engines/gnap/menu.cpp


diff --git a/engines/gnap/menu.cpp b/engines/gnap/menu.cpp
index 2bfe730..9606273 100644
--- a/engines/gnap/menu.cpp
+++ b/engines/gnap/menu.cpp
@@ -211,7 +211,7 @@ void GnapEngine::runMenu() {
 	_menuDone = false;
 
 	delete _tempThumbnail;
-	_tempThumbnail = new Common::MemoryWriteStreamDynamic;
+	_tempThumbnail = new Common::MemoryWriteStreamDynamic(DisposeAfterUse::YES);
 	Graphics::saveThumbnail(*_tempThumbnail);
 
 	createMenuSprite();


Commit: c3bff7f25a24c549885b8e402fb499b0dd48b9cd
    https://github.com/scummvm/scummvm/commit/c3bff7f25a24c549885b8e402fb499b0dd48b9cd
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2017-09-22T07:06:20+02:00

Commit Message:
SWORD1: Fix leaking the save thumbnail MemoryWriteStreamDynamic buffer

Changed paths:
    engines/sword1/control.cpp


diff --git a/engines/sword1/control.cpp b/engines/sword1/control.cpp
index fbc3f6a..0c53430 100644
--- a/engines/sword1/control.cpp
+++ b/engines/sword1/control.cpp
@@ -303,7 +303,7 @@ static int volToBalance(int volL, int volR) {
 uint8 Control::runPanel() {
 	// Make a thumbnail of the screen before displaying the menu in case we want to save
 	// the game from the menu.
-	_tempThumbnail = new Common::MemoryWriteStreamDynamic;
+	_tempThumbnail = new Common::MemoryWriteStreamDynamic(DisposeAfterUse::YES);
 	Graphics::saveThumbnail(*_tempThumbnail);
 
 	_panelShown = true;


Commit: 9c2cfee4e53f5e678d37b33cdcb354782932b10c
    https://github.com/scummvm/scummvm/commit/9c2cfee4e53f5e678d37b33cdcb354782932b10c
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2017-09-22T07:06:20+02:00

Commit Message:
SWORD25: Fix leaking the save thumbnail MemoryWriteStreamDynamic

Changed paths:
    engines/sword25/gfx/screenshot.cpp


diff --git a/engines/sword25/gfx/screenshot.cpp b/engines/sword25/gfx/screenshot.cpp
index eeaece9..c86a2fe 100644
--- a/engines/sword25/gfx/screenshot.cpp
+++ b/engines/sword25/gfx/screenshot.cpp
@@ -113,11 +113,11 @@ Common::SeekableReadStream *Screenshot::createThumbnail(Graphics::Surface *data)
 	}
 
 	// Create a PNG representation of the thumbnail data
-	Common::MemoryWriteStreamDynamic *stream = new Common::MemoryWriteStreamDynamic();
-	saveToFile(&thumbnail, stream);
+	Common::MemoryWriteStreamDynamic stream(DisposeAfterUse::NO);
+	saveToFile(&thumbnail, &stream);
 
 	// Output a MemoryReadStream that encompasses the written data
-	Common::SeekableReadStream *result = new Common::MemoryReadStream(stream->getData(), stream->size(),
+	Common::SeekableReadStream *result = new Common::MemoryReadStream(stream.getData(), stream.size(),
 		DisposeAfterUse::YES);
 	return result;
 }


Commit: ddac55699d69be8c02b724b413fb92d1a93b7257
    https://github.com/scummvm/scummvm/commit/ddac55699d69be8c02b724b413fb92d1a93b7257
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2017-09-22T07:06:20+02:00

Commit Message:
SWORD25: Fix leaking the lua state MemoryWriteStreamDynamic buffer

Changed paths:
    engines/sword25/script/luascript.cpp


diff --git a/engines/sword25/script/luascript.cpp b/engines/sword25/script/luascript.cpp
index 3aca667..1a83fc9 100644
--- a/engines/sword25/script/luascript.cpp
+++ b/engines/sword25/script/luascript.cpp
@@ -395,7 +395,7 @@ bool LuaScriptEngine::persist(OutputPersistenceBlock &writer) {
 	lua_getglobal(_state, "_G");
 
 	// Lua persists and stores the data in a WriteStream
-	Common::MemoryWriteStreamDynamic writeStream;
+	Common::MemoryWriteStreamDynamic writeStream(DisposeAfterUse::YES);
 	Lua::persistLua(_state, &writeStream);
 
 	// Persistenzdaten in den Writer schreiben.


Commit: 1b3cc08b75c56a06cfa90edaf1b0da181d40ddcc
    https://github.com/scummvm/scummvm/commit/1b3cc08b75c56a06cfa90edaf1b0da181d40ddcc
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2017-09-22T07:06:20+02:00

Commit Message:
ZVISION: Fix leaking save / thumbnail MemoryWriteStreamDynamic buffers

Changed paths:
    engines/zvision/file/save_manager.cpp


diff --git a/engines/zvision/file/save_manager.cpp b/engines/zvision/file/save_manager.cpp
index 8a78e98..4259937 100644
--- a/engines/zvision/file/save_manager.cpp
+++ b/engines/zvision/file/save_manager.cpp
@@ -273,11 +273,11 @@ Common::SeekableReadStream *SaveManager::getSlotFile(uint slot) {
 
 void SaveManager::prepareSaveBuffer() {
 	delete _tempThumbnail;
-	_tempThumbnail = new Common::MemoryWriteStreamDynamic;
+	_tempThumbnail = new Common::MemoryWriteStreamDynamic(DisposeAfterUse::YES);
 	Graphics::saveThumbnail(*_tempThumbnail);
 
 	delete _tempSave;
-	_tempSave = new Common::MemoryWriteStreamDynamic;
+	_tempSave = new Common::MemoryWriteStreamDynamic(DisposeAfterUse::YES);
 	_engine->getScriptManager()->serialize(_tempSave);
 }
 


Commit: 3eb82462e772832a902ba336b680e2a961339ee1
    https://github.com/scummvm/scummvm/commit/3eb82462e772832a902ba336b680e2a961339ee1
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2017-09-22T07:06:21+02:00

Commit Message:
ALL: Specify the DisposeAfterUse constructor argument for dynamic memory write streams

Changed paths:
    audio/decoders/quicktime.cpp
    audio/midiparser_qt.cpp
    engines/agi/sound_midi.cpp
    engines/pegasus/ai/ai_area.cpp
    engines/scumm/saveload.cpp


diff --git a/audio/decoders/quicktime.cpp b/audio/decoders/quicktime.cpp
index b8eccb6..4b0d5e0 100644
--- a/audio/decoders/quicktime.cpp
+++ b/audio/decoders/quicktime.cpp
@@ -344,7 +344,7 @@ bool QuickTimeAudioDecoder::QuickTimeAudioTrack::isOldDemuxing() const {
 
 AudioStream *QuickTimeAudioDecoder::QuickTimeAudioTrack::readAudioChunk(uint chunk) {
 	AudioSampleDesc *entry = (AudioSampleDesc *)_parentTrack->sampleDescs[0];
-	Common::MemoryWriteStreamDynamic *wStream = new Common::MemoryWriteStreamDynamic();
+	Common::MemoryWriteStreamDynamic *wStream = new Common::MemoryWriteStreamDynamic(DisposeAfterUse::NO);
 
 	_decoder->_fd->seek(_parentTrack->chunkOffsets[chunk]);
 
diff --git a/audio/midiparser_qt.cpp b/audio/midiparser_qt.cpp
index 3078be9..8821dbf 100644
--- a/audio/midiparser_qt.cpp
+++ b/audio/midiparser_qt.cpp
@@ -455,7 +455,7 @@ void MidiParser_QT::initCommon() {
 byte *MidiParser_QT::readWholeTrack(Common::QuickTimeParser::Track *track, uint32 &trackSize) {
 	// This just goes through all chunks and appends them together
 
-	Common::MemoryWriteStreamDynamic output;
+	Common::MemoryWriteStreamDynamic output(DisposeAfterUse::NO);
 	uint32 curSample = 0;
 
 	// Read in the note request data first
diff --git a/engines/agi/sound_midi.cpp b/engines/agi/sound_midi.cpp
index 6998df6..97dcc0d 100644
--- a/engines/agi/sound_midi.cpp
+++ b/engines/agi/sound_midi.cpp
@@ -169,7 +169,7 @@ static uint32 convertSND2MIDI(byte *snddata, byte **data) {
 	int n;
 	double ll;
 
-	Common::MemoryWriteStreamDynamic st;
+	Common::MemoryWriteStreamDynamic st(DisposeAfterUse::NO);
 
 	ll = log10(pow(2.0, 1.0 / 12.0));
 
diff --git a/engines/pegasus/ai/ai_area.cpp b/engines/pegasus/ai/ai_area.cpp
index c078d5e..58698e6 100644
--- a/engines/pegasus/ai/ai_area.cpp
+++ b/engines/pegasus/ai/ai_area.cpp
@@ -78,7 +78,7 @@ void AIArea::saveAIState() {
 
 	delete vm->_aiSaveStream;
 
-	Common::MemoryWriteStreamDynamic out;
+	Common::MemoryWriteStreamDynamic out(DisposeAfterUse::NO);
 	writeAIRules(&out);
 
 	vm->_aiSaveStream = new Common::MemoryReadStream(out.getData(), out.size(), DisposeAfterUse::YES);
diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp
index 0ab36d1..06d5646 100644
--- a/engines/scumm/saveload.cpp
+++ b/engines/scumm/saveload.cpp
@@ -228,7 +228,7 @@ void ScummEngine_v4::prepareSavegame() {
 	_savePreparedSavegame = NULL;
 
 	// store headerless savegame in a compressed memory stream
-	memStream = new Common::MemoryWriteStreamDynamic();
+	memStream = new Common::MemoryWriteStreamDynamic(DisposeAfterUse::NO);
 	writeStream = Common::wrapCompressedWriteStream(memStream);
 	if (saveState(writeStream, false)) {
 		// we have to finalize the compression-stream first, otherwise the internal


Commit: be67f0d8bfb4148e014931cce63b52e84ed95ee6
    https://github.com/scummvm/scummvm/commit/be67f0d8bfb4148e014931cce63b52e84ed95ee6
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2017-09-22T07:06:21+02:00

Commit Message:
COMMON: Remove DisposeAfterUse default value from dynamic write memory streams

The default value was DisposeAfterUse::NO, which made it very easy to
accidentally leak memory by omitting to specify a value.

Changed paths:
    common/memstream.h


diff --git a/common/memstream.h b/common/memstream.h
index 0338d35..f6bf990 100644
--- a/common/memstream.h
+++ b/common/memstream.h
@@ -184,7 +184,7 @@ protected:
 		_size = new_len;
 	}
 public:
-	MemoryWriteStreamDynamic(DisposeAfterUse::Flag disposeMemory = DisposeAfterUse::NO) : _capacity(0), _size(0), _ptr(0), _data(0), _pos(0), _disposeMemory(disposeMemory) {}
+	explicit MemoryWriteStreamDynamic(DisposeAfterUse::Flag disposeMemory) : _capacity(0), _size(0), _ptr(0), _data(0), _pos(0), _disposeMemory(disposeMemory) {}
 
 	~MemoryWriteStreamDynamic() {
 		if (_disposeMemory)
@@ -247,7 +247,7 @@ private:
 		}
 	}
 public:
-	MemoryReadWriteStream(DisposeAfterUse::Flag disposeMemory = DisposeAfterUse::NO) : _capacity(0), _size(0), _data(0), _writePos(0), _readPos(0), _pos(0), _length(0), _disposeMemory(disposeMemory), _eos(false) {}
+	explicit MemoryReadWriteStream(DisposeAfterUse::Flag disposeMemory) : _capacity(0), _size(0), _data(0), _writePos(0), _readPos(0), _pos(0), _length(0), _disposeMemory(disposeMemory), _eos(false) {}
 
 	~MemoryReadWriteStream() {
 		if (_disposeMemory)


Commit: 25d66b2a08f6a1ad09c7ad7dc9db11ad3a4c76cf
    https://github.com/scummvm/scummvm/commit/25d66b2a08f6a1ad09c7ad7dc9db11ad3a4c76cf
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2017-09-24T06:21:54+02:00

Commit Message:
Merge pull request #1027 from bgK/memstream-default-arg

COMMON: Remove the DisposeAfterUse default value from dynamic write memory streams constructors

Changed paths:
    audio/decoders/quicktime.cpp
    audio/midiparser_qt.cpp
    backends/networking/curl/networkreadstream.cpp
    backends/networking/curl/networkreadstream.h
    common/memstream.h
    engines/agi/sound_midi.cpp
    engines/dm/eventman.cpp
    engines/fullpipe/statesaver.cpp
    engines/gnap/menu.cpp
    engines/pegasus/ai/ai_area.cpp
    engines/scumm/saveload.cpp
    engines/sword1/control.cpp
    engines/sword25/gfx/screenshot.cpp
    engines/sword25/script/luascript.cpp
    engines/xeen/saves.cpp
    engines/xeen/saves.h
    engines/zvision/file/save_manager.cpp







More information about the Scummvm-git-logs mailing list