[Scummvm-git-logs] scummvm branch-2-2 -> fc3975a8f117f777bc6475523081162047640af5

athrxx athrxx at scummvm.org
Sat Oct 3 22:42:37 UTC 2020


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

Summary:
a3741bde3c KYRA: (EOB) - fix possible invalid memory access
30b8a62c54 KYRA: (EOB) - fix memory leaks
739530da1a KYRA: (EOB) - fix possible invalid memory access
a3a4787aa1 KYRA: (LOL/PC-98) - fix intro font selection
fc3975a8f1 KYRA: (LOL) - fix possible invalid memory access


Commit: a3741bde3cf4b5fa5e331478d69b102bae989c98
    https://github.com/scummvm/scummvm/commit/a3741bde3cf4b5fa5e331478d69b102bae989c98
Author: athrxx (athrxx at scummvm.org)
Date: 2020-10-04T00:24:22+02:00

Commit Message:
KYRA: (EOB) - fix possible invalid memory access

(accessing stack variable after scope)

Changed paths:
    engines/kyra/resource/staticres_eob.cpp


diff --git a/engines/kyra/resource/staticres_eob.cpp b/engines/kyra/resource/staticres_eob.cpp
index 533a44bc80..99d383e1f2 100644
--- a/engines/kyra/resource/staticres_eob.cpp
+++ b/engines/kyra/resource/staticres_eob.cpp
@@ -468,10 +468,6 @@ void EoBCoreEngine::initStaticResource() {
 	_coneOfColdDest4 = (const int8 *)_staticres->loadRawData(kEoBBaseConeOfColdDest4, temp);
 	_coneOfColdGfxTbl = _staticres->loadRawData(kEoBBaseConeOfColdGfxTbl, _coneOfColdGfxTblSize);
 
-	void *sndInfo_ingame = 0;
-	void *sndInfo_intro = 0;
-	void *sndInfo_finale = 0;
-
 	if (_flags.platform == Common::kPlatformAmiga) {
 		const char *const *map = _staticres->loadStrings(kEoBBaseSoundMap, temp2);
 		_amigaSoundMap = new const char*[temp2];
@@ -485,41 +481,42 @@ void EoBCoreEngine::initStaticResource() {
 
 		const char *const *files = _staticres->loadStrings(kEoBBaseSoundFilesIngame, temp);
 		SoundResourceInfo_AmigaEoB ingame(files, temp, _amigaSoundMap, temp2);
-		sndInfo_ingame = &ingame;
 		files = _staticres->loadStrings(kEoBBaseSoundFilesIntro, temp);
 		SoundResourceInfo_AmigaEoB intro(files, temp, 0, 0);
-		sndInfo_intro = &intro;
 		files = _staticres->loadStrings(kEoBBaseSoundFilesFinale, temp);
 		SoundResourceInfo_AmigaEoB finale(files, temp, 0, 0);
-		sndInfo_finale = &finale;
+
+		_sound->initAudioResourceInfo(kMusicIngame, &ingame);
+		_sound->initAudioResourceInfo(kMusicIntro, &intro);
+		_sound->initAudioResourceInfo(kMusicFinale, &finale);
+
 	} else if (_flags.platform == Common::kPlatformFMTowns) {
 		const char *const *files = _staticres->loadStrings(kEoBBaseSoundFilesIngame, temp);
 		const uint8 *data = _staticres->loadRawData(kEoB2PcmSoundEffectsIngame, temp2);
 		SoundResourceInfo_TownsEoB ingame(files, temp, data, temp2, 127);
-		sndInfo_ingame = &ingame;
 		files = _staticres->loadStrings(kEoBBaseSoundFilesIntro, temp);
 		data = _staticres->loadRawData(kEoB2PcmSoundEffectsIntro, temp2);
 		SoundResourceInfo_TownsEoB intro(files, temp, data, temp2, 40);
-		sndInfo_intro = &intro;
 		files = _staticres->loadStrings(kEoBBaseSoundFilesFinale, temp);
 		data = _staticres->loadRawData(kEoB2PcmSoundEffectsFinale, temp2);
 		SoundResourceInfo_TownsEoB finale(files, temp, data, temp2, 40);
-		sndInfo_finale = &finale;
+
+		_sound->initAudioResourceInfo(kMusicIngame, &ingame);
+		_sound->initAudioResourceInfo(kMusicIntro, &intro);
+		_sound->initAudioResourceInfo(kMusicFinale, &finale);
+
 	} else if (_flags.platform != Common::kPlatformPC98) {
 		const char *const *files = _staticres->loadStrings(kEoBBaseSoundFilesIngame, temp);
 		SoundResourceInfo_PC ingame(files, temp);
-		sndInfo_ingame = &ingame;
 		files = _staticres->loadStrings(kEoBBaseSoundFilesIntro, temp);
 		SoundResourceInfo_PC intro(files, temp);
-		sndInfo_intro = &intro;
 		files = _staticres->loadStrings(kEoBBaseSoundFilesFinale, temp);
 		SoundResourceInfo_PC finale(files, temp);
-		sndInfo_finale = &finale;
-	}
 
-	_sound->initAudioResourceInfo(kMusicIngame, sndInfo_ingame);
-	_sound->initAudioResourceInfo(kMusicIntro, sndInfo_intro);
-	_sound->initAudioResourceInfo(kMusicFinale, sndInfo_finale);
+		_sound->initAudioResourceInfo(kMusicIngame, &ingame);
+		_sound->initAudioResourceInfo(kMusicIntro, &intro);
+		_sound->initAudioResourceInfo(kMusicFinale, &finale);
+	}
 
 	// Hard code the following strings, since EOB I doesn't have them in the original.
 	// EOB I doesn't have load and save menus, because there is only one single


Commit: 30b8a62c54e23f7ae3444fff3f55a5a00e5e2d74
    https://github.com/scummvm/scummvm/commit/30b8a62c54e23f7ae3444fff3f55a5a00e5e2d74
Author: athrxx (athrxx at scummvm.org)
Date: 2020-10-04T00:24:25+02:00

Commit Message:
KYRA: (EOB) - fix memory leaks

Changed paths:
    engines/kyra/graphics/screen_eob_segacd.cpp
    engines/kyra/resource/staticres_eob.cpp
    engines/kyra/sequence/sequences_darkmoon.cpp


diff --git a/engines/kyra/graphics/screen_eob_segacd.cpp b/engines/kyra/graphics/screen_eob_segacd.cpp
index 691df2b356..aabc910d90 100644
--- a/engines/kyra/graphics/screen_eob_segacd.cpp
+++ b/engines/kyra/graphics/screen_eob_segacd.cpp
@@ -972,6 +972,7 @@ SegaAnimator::SegaAnimator(SegaRenderer *renderer) : _renderer(renderer), _needU
 
 SegaAnimator::~SegaAnimator() {
 	delete[] _sprites;
+	delete[] _tempBuffer;
 }
 
 void SegaAnimator::initSprite(int id, int16 x, int16 y, uint16 nameTbl, uint16 hw) {
diff --git a/engines/kyra/resource/staticres_eob.cpp b/engines/kyra/resource/staticres_eob.cpp
index 99d383e1f2..0ecf1b33ae 100644
--- a/engines/kyra/resource/staticres_eob.cpp
+++ b/engines/kyra/resource/staticres_eob.cpp
@@ -1791,18 +1791,18 @@ void DarkMoonEngine::initSpells() {
 
 	int temp;
 	const uint8 *data = _staticres->loadRawData(kEoBBaseSpellProperties, temp);
-	Common::MemoryReadStreamEndian *src = new Common::MemoryReadStreamEndian(data, temp, _flags.platform == Common::kPlatformAmiga);
+	Common::MemoryReadStreamEndian src(data, temp, _flags.platform == Common::kPlatformAmiga);
 
 	for (int i = 0; i < _numSpells; i++) {
 		EoBSpell *s = &_spells[i];
-		src->skip(8);
-		s->flags = src->readUint16();
-		src->skip(8);
-		s->sound = src->readByte();
+		src.skip(8);
+		s->flags = src.readUint16();
+		src.skip(8);
+		s->sound = src.readByte();
 		if (_flags.platform == Common::kPlatformAmiga)
-			src->skip(1);
-		s->effectFlags = src->readUint32();
-		s->damageFlags = src->readUint16();
+			src.skip(1);
+		s->effectFlags = src.readUint32();
+		s->damageFlags = src.readUint16();
 	}
 }
 
diff --git a/engines/kyra/sequence/sequences_darkmoon.cpp b/engines/kyra/sequence/sequences_darkmoon.cpp
index 33c27ca17e..626e49bb89 100644
--- a/engines/kyra/sequence/sequences_darkmoon.cpp
+++ b/engines/kyra/sequence/sequences_darkmoon.cpp
@@ -1145,7 +1145,7 @@ DarkmoonSequenceHelper::~DarkmoonSequenceHelper() {
 	for (int i = 0; i < 7; i++)
 		delete[] _fadingTables[i];
 
-	for (int i = 0; i < 30; i++)
+	for (int i = 0; i < 54; i++)
 		delete[] _shapes[i];
 	delete[] _shapes;
 
@@ -1626,7 +1626,7 @@ void DarkmoonSequenceHelper::init(DarkmoonSequenceHelper::Mode mode) {
 	delete[] fadeData;
 
 	_shapes = new const uint8*[54];
-	memset(_shapes, 0, 54 * sizeof(uint8 *));
+	memset(_shapes, 0, 54 * sizeof(uint8*));
 
 	_fadePalTimer = 0;
 	_fadePalRate = 0;


Commit: 739530da1aa36be4aaf078e35c21fadb0ed62162
    https://github.com/scummvm/scummvm/commit/739530da1aa36be4aaf078e35c21fadb0ed62162
Author: athrxx (athrxx at scummvm.org)
Date: 2020-10-04T00:24:28+02:00

Commit Message:
KYRA: (EOB) - fix possible invalid memory access

(The original does the invalid access, too. Even the Sega-CD version.)

Changed paths:
    engines/kyra/engine/chargen.cpp


diff --git a/engines/kyra/engine/chargen.cpp b/engines/kyra/engine/chargen.cpp
index 65a5ee98b8..ed2a21097f 100644
--- a/engines/kyra/engine/chargen.cpp
+++ b/engines/kyra/engine/chargen.cpp
@@ -1442,7 +1442,7 @@ void CharacterGenerator::finish() {
 
 			for (int ii = 0; ii < 4; ii++) {
 				int l = classDefaultItemsListIndex[(c->cClass << 2) + ii] << 1;
-				if (classDefaultItemsList[l] == -1)
+				if (l < 0 || classDefaultItemsList[l] == -1)
 					continue;
 
 				int d = classDefaultItemsList[l];


Commit: a3a4787aa1b7b1605ec20b4898a28af6fcab871f
    https://github.com/scummvm/scummvm/commit/a3a4787aa1b7b1605ec20b4898a28af6fcab871f
Author: athrxx (athrxx at scummvm.org)
Date: 2020-10-04T00:24:31+02:00

Commit Message:
KYRA: (LOL/PC-98) - fix intro font selection

Changed paths:
    engines/kyra/sequence/sequences_lol.cpp


diff --git a/engines/kyra/sequence/sequences_lol.cpp b/engines/kyra/sequence/sequences_lol.cpp
index f67f7a62a2..27e08b7a98 100644
--- a/engines/kyra/sequence/sequences_lol.cpp
+++ b/engines/kyra/sequence/sequences_lol.cpp
@@ -230,7 +230,7 @@ void LoLEngine::showIntro() {
 
 	_screen->loadFont(Screen::FID_8_FNT, "NEW8P.FNT");
 	_screen->loadFont(Screen::FID_INTRO_FNT, "INTRO.FNT");
-	_screen->setFont((_flags.lang == Common::JA_JPN && _flags.use16ColorMode) ? Screen::FID_SJIS_FNT : Screen::FID_8_FNT);
+	_screen->setFont((_flags.lang == Common::JA_JPN && _flags.use16ColorMode) ? Screen::FID_SJIS_TEXTMODE_FNT : Screen::FID_8_FNT);
 
 	_tim->resetFinishedFlag();
 	_tim->setLangData("LOLINTRO.DIP");


Commit: fc3975a8f117f777bc6475523081162047640af5
    https://github.com/scummvm/scummvm/commit/fc3975a8f117f777bc6475523081162047640af5
Author: athrxx (athrxx at scummvm.org)
Date: 2020-10-04T00:24:34+02:00

Commit Message:
KYRA: (LOL) - fix possible invalid memory access

(another bug from the original code)

Changed paths:
    engines/kyra/gui/gui_lol.cpp


diff --git a/engines/kyra/gui/gui_lol.cpp b/engines/kyra/gui/gui_lol.cpp
index 5f9dee26a6..1ef0eeb0e8 100644
--- a/engines/kyra/gui/gui_lol.cpp
+++ b/engines/kyra/gui/gui_lol.cpp
@@ -678,8 +678,8 @@ void LoLEngine::gui_toggleButtonDisplayMode(int shapeIndex, int mode) {
 
 	int pageNum = 0;
 
-	int16 x1 = buttonX[shapeIndex - subst];
-	int16 y1 = buttonY[shapeIndex - subst];
+	int16 x1 = shapeIndex ? buttonX[shapeIndex - subst] : 0;
+	int16 y1 = shapeIndex ? buttonY[shapeIndex - subst] : 0;
 	int16 x2 = 0;
 	int16 y2 = 0;
 	uint32 t = 0;




More information about the Scummvm-git-logs mailing list