diff options
author | Colin Snover | 2017-01-10 19:37:13 -0600 |
---|---|---|
committer | Colin Snover | 2017-01-11 11:13:44 -0600 |
commit | 63ad0a67153e880d72897221354245920a25514c (patch) | |
tree | 593275c75393f90ad61bb337787cee3cc9146388 | |
parent | e00c773d9529ba7915d1ef9443df289ef8eb34a5 (diff) | |
download | scummvm-rg350-63ad0a67153e880d72897221354245920a25514c.tar.gz scummvm-rg350-63ad0a67153e880d72897221354245920a25514c.tar.bz2 scummvm-rg350-63ad0a67153e880d72897221354245920a25514c.zip |
SCI32: Fix null references in Robot decoder
Failing to reduce the size of the ScreenItem arrays causes other
parts of the decoder (like RobotDecoder::getFrameSize) to try
reading ScreenItems that were already destroyed and nulled out in
the list. (In SSCI, the screen item count was held in a separate
property instead of being part of the screen item list.)
-rw-r--r-- | engines/sci/video/robot_decoder.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/engines/sci/video/robot_decoder.cpp b/engines/sci/video/robot_decoder.cpp index 296fdf8db2..0cb4831159 100644 --- a/engines/sci/video/robot_decoder.cpp +++ b/engines/sci/video/robot_decoder.cpp @@ -1436,6 +1436,14 @@ void RobotDecoder::doVersion5(const bool shouldSubmitAudio) { _screenItemList[i] = nullptr; } } + + if (screenItemCount < oldScreenItemCount) { + _screenItemList.resize(screenItemCount); + _screenItemX.resize(screenItemCount); + _screenItemY.resize(screenItemCount); + _originalScreenItemX.resize(screenItemCount); + _originalScreenItemY.resize(screenItemCount); + } } void RobotDecoder::createCels5(const byte *rawVideoData, const int16 numCels, const bool usePalette) { |