[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