[Scummvm-cvs-logs] SF.net SVN: scummvm:[55660] scummvm/trunk/engines/scumm/smush/channel.cpp

tdhs at users.sourceforge.net tdhs at users.sourceforge.net
Sun Jan 30 17:50:55 CET 2011


Revision: 55660
          http://scummvm.svn.sourceforge.net/scummvm/?rev=55660&view=rev
Author:   tdhs
Date:     2011-01-30 16:50:55 +0000 (Sun, 30 Jan 2011)

Log Message:
-----------
SCUMM: Fix Valgrind mismatched delete errors in SMUSH channel base class.

This was due to the SMUSH channel base class using new/delete to manage buffer, but the imuse_channel and saud_channel classes which subclass and override this using malloc/free.
The more C++ solution of moving all to new/delete was tried, but the buffer is passed into a MemoryReadStream and free()'d there, so all classes have been moved to malloc/free instead.
This is not a critical problem as the buffers are byte primitive type anyway.

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/smush/channel.cpp

Modified: scummvm/trunk/engines/scumm/smush/channel.cpp
===================================================================
--- scummvm/trunk/engines/scumm/smush/channel.cpp	2011-01-30 14:53:47 UTC (rev 55659)
+++ scummvm/trunk/engines/scumm/smush/channel.cpp	2011-01-30 16:50:55 UTC (rev 55660)
@@ -41,8 +41,8 @@
 }
 
 SmushChannel::~SmushChannel() {
-	delete[] _tbuffer;
-	delete[] _sbuffer;
+	free(_tbuffer);
+	free(_sbuffer);
 }
 
 void SmushChannel::processBuffer() {
@@ -60,7 +60,7 @@
 			_sbuffer = _tbuffer;
 			if (offset < _tbufferSize) {
 				int new_size = _tbufferSize - offset;
-				_tbuffer = new byte[new_size];
+				_tbuffer = (byte *)malloc(new_size);
 				if (!_tbuffer)
 					error("smush channel failed to allocate memory");
 				memcpy(_tbuffer, _sbuffer + offset, new_size);
@@ -70,7 +70,7 @@
 				_tbufferSize = 0;
 			}
 			if (_sbufferSize == 0) {
-				delete[] _sbuffer;
+				free(_sbuffer);
 				_sbuffer = 0;
 			}
 		} else {
@@ -86,23 +86,23 @@
 		if (_inData) {
 			_sbufferSize = _tbufferSize - offset;
 			assert(_sbufferSize);
-			_sbuffer = new byte[_sbufferSize];
+			_sbuffer = (byte *)malloc(_sbufferSize);
 			if (!_sbuffer)
 				error("smush channel failed to allocate memory");
 			memcpy(_sbuffer, _tbuffer + offset, _sbufferSize);
-			delete[] _tbuffer;
+			free(_tbuffer);
 			_tbuffer = 0;
 			_tbufferSize = 0;
 		} else {
 			if (offset) {
 				byte *old = _tbuffer;
 				int32 new_size = _tbufferSize - offset;
-				_tbuffer = new byte[new_size];
+				_tbuffer = (byte *)malloc(new_size);
 				if (!_tbuffer)
 					error("smush channel failed to allocate memory");
 				memcpy(_tbuffer, old + offset, new_size);
 				_tbufferSize = new_size;
-				delete[] old;
+				free(old);
 			}
 		}
 	}


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list