[Scummvm-cvs-logs] scummvm master -> f9fd2a5abe2050b061710f0c8e3ac68f79b74459

lordhoto lordhoto at gmail.com
Mon Mar 10 01:07:35 CET 2014


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

Summary:
8a5ceb9768 AGOS: Fix sound offset table access for StS 2 Mac/Amiga.
f9fd2a5abe Merge pull request #446 from lordhoto/agos-offset-fix


Commit: 8a5ceb976804f51e60b94fcef73bc21b779eaac6
    https://github.com/scummvm/scummvm/commit/8a5ceb976804f51e60b94fcef73bc21b779eaac6
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2014-03-09T18:27:49+01:00

Commit Message:
AGOS: Fix sound offset table access for StS 2 Mac/Amiga.

This (hopefully) fixes bug #6549: "#6549 AGOS: Simon2 Amiga Datafiles crashes with assertion in Intro".
I don't have any copy of StS 2 Mac/Amiga thus I cannot test this.

This bug was caused by a regression in c82a75df69aa5d8f36eae52deee508ef9a61e49e.

Changed paths:
    engines/agos/sound.cpp



diff --git a/engines/agos/sound.cpp b/engines/agos/sound.cpp
index 1e299a0..812f465 100644
--- a/engines/agos/sound.cpp
+++ b/engines/agos/sound.cpp
@@ -121,8 +121,14 @@ Common::SeekableReadStream *BaseSound::getSoundStream(uint sound) const {
 	int i = 1;
 	while (_offsets[sound + i] == _offsets[sound])
 		i++;
+	uint end;
+	if (_offsets[sound + i] > _offsets[sound]) {
+		end = _offsets[sound + i];
+	} else {
+		end = file->size();
+	}
 
-	return new Common::SeekableSubReadStream(file, _offsets[sound], _offsets[sound + i], DisposeAfterUse::YES);
+	return new Common::SeekableSubReadStream(file, _offsets[sound], end, DisposeAfterUse::YES);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -442,12 +448,16 @@ void Sound::loadVoiceFile(const GameSpecificSettings *gss) {
 		if (file.open("voices.idx")) {
 			int end = file.size();
 			_filenums = (uint16 *)malloc((end / 6 + 1) * 2);
-			_offsets = (uint32 *)malloc((end / 6 + 1) * 4);
+			_offsets = (uint32 *)malloc((end / 6 + 1 + 1) * 4);
 
 			for (int i = 1; i <= end / 6; i++) {
 				_filenums[i] = file.readUint16BE();
 				_offsets[i] = file.readUint32BE();
 			}
+			// We need to add a terminator entry otherwise we get an out of
+			// bounds read when the offset table is accessed in
+			// BaseSound::getSoundStream.
+			_offsets[end / 6 + 1] = 0;
 
 			_hasVoiceFile = true;
 			return;


Commit: f9fd2a5abe2050b061710f0c8e3ac68f79b74459
    https://github.com/scummvm/scummvm/commit/f9fd2a5abe2050b061710f0c8e3ac68f79b74459
Author: Johannes Schickel (lordhoto at gmail.com)
Date: 2014-03-10T01:07:07+01:00

Commit Message:
Merge pull request #446 from lordhoto/agos-offset-fix

AGOS: Fix sound offset table access for StS 2 Mac/Amiga.

Changed paths:
    engines/agos/sound.cpp









More information about the Scummvm-git-logs mailing list