[Scummvm-git-logs] scummvm master -> 3531843679896ca9202b9e41a1fd807d92b8cc79

sluicebox noreply at scummvm.org
Tue Jan 16 17:53:25 UTC 2024


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:
3531843679 AGI: Add more error checks when loading sounds


Commit: 3531843679896ca9202b9e41a1fd807d92b8cc79
    https://github.com/scummvm/scummvm/commit/3531843679896ca9202b9e41a1fd807d92b8cc79
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2024-01-16T10:52:52-07:00

Commit Message:
AGI: Add more error checks when loading sounds

Applies the previous commit to V1 and V3 loaders

Changed paths:
    engines/agi/loader_v1.cpp
    engines/agi/loader_v3.cpp


diff --git a/engines/agi/loader_v1.cpp b/engines/agi/loader_v1.cpp
index ea192142ec9..71af5156014 100644
--- a/engines/agi/loader_v1.cpp
+++ b/engines/agi/loader_v1.cpp
@@ -257,11 +257,12 @@ int AgiLoader_v1::loadResource(int16 resourceType, int16 resourceNr) {
 
 		data = loadVolRes(&_vm->_game.dirSound[resourceNr]);
 
-		if (data != nullptr) {
-			// Freeing of the raw resource from memory is delegated to the createFromRawResource-function
-			_vm->_game.sounds[resourceNr] = AgiSound::createFromRawResource(data, _vm->_game.dirSound[resourceNr].len, resourceNr, _vm->_soundemu);
+		// "data" is freed by objects created by createFromRawResource on success
+		_vm->_game.sounds[resourceNr] = AgiSound::createFromRawResource(data, _vm->_game.dirSound[resourceNr].len, resourceNr, _vm->_soundemu);
+		if (_vm->_game.sounds[resourceNr] != nullptr) {
 			_vm->_game.dirSound[resourceNr].flags |= RES_LOADED;
 		} else {
+			free(data);
 			ec = errBadResource;
 		}
 		break;
diff --git a/engines/agi/loader_v3.cpp b/engines/agi/loader_v3.cpp
index 246c85dfa6c..33c278479a4 100644
--- a/engines/agi/loader_v3.cpp
+++ b/engines/agi/loader_v3.cpp
@@ -316,11 +316,13 @@ int AgiLoader_v3::loadResource(int16 resourceType, int16 resourceNr) {
 			break;
 
 		data = loadVolRes(&_vm->_game.dirSound[resourceNr]);
-		if (data != nullptr) {
-			// Freeing of the raw resource from memory is delegated to the createFromRawResource-function
-			_vm->_game.sounds[resourceNr] = AgiSound::createFromRawResource(data, _vm->_game.dirSound[resourceNr].len, resourceNr, _vm->_soundemu);
+
+		// "data" is freed by objects created by createFromRawResource on success
+		_vm->_game.sounds[resourceNr] = AgiSound::createFromRawResource(data, _vm->_game.dirSound[resourceNr].len, resourceNr, _vm->_soundemu);
+		if (_vm->_game.sounds[resourceNr] != nullptr) {
 			_vm->_game.dirSound[resourceNr].flags |= RES_LOADED;
 		} else {
+			free(data);
 			ec = errBadResource;
 		}
 		break;




More information about the Scummvm-git-logs mailing list