diff options
author | Willem Jan Palenstijn | 2011-12-28 20:11:36 +0100 |
---|---|---|
committer | Willem Jan Palenstijn | 2011-12-28 20:11:36 +0100 |
commit | 32e5778d1f426c166774c05666691f64258b8420 (patch) | |
tree | 64bc574e21aa3dfd6f4d822f3784fd432334190f /engines | |
parent | e2c006f7935df5f6e1c37c62b5104d4e24ab4b61 (diff) | |
download | scummvm-rg350-32e5778d1f426c166774c05666691f64258b8420.tar.gz scummvm-rg350-32e5778d1f426c166774c05666691f64258b8420.tar.bz2 scummvm-rg350-32e5778d1f426c166774c05666691f64258b8420.zip |
DREAMWEB: Fix crash when loading a room without reels
Diffstat (limited to 'engines')
-rw-r--r-- | engines/dreamweb/stubs.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp index 94518e85f3..ef10aad0dc 100644 --- a/engines/dreamweb/stubs.cpp +++ b/engines/dreamweb/stubs.cpp @@ -2054,7 +2054,7 @@ void DreamWebEngine::loadRoomData(const Room &room, bool skipDat) { file.read((uint8 *)&header, sizeof(FileHeader)); // read segment lengths from room file header - int len[15]; + unsigned int len[15]; for (int i = 0; i < 15; ++i) len[i] = header.len(i); @@ -2085,13 +2085,18 @@ void DreamWebEngine::loadRoomData(const Room &room, bool skipDat) { loadGraphicsSegment(_reel2, file, len[5]); loadGraphicsSegment(_reel3, file, len[6]); - // segment 7 consists of 36*38 pathNodes followed by 'reelList' - file.read((uint8 *)_pathData, 36*sizeof(RoomPaths)); - unsigned int reelLen = len[7] - 36*sizeof(RoomPaths); - unsigned int reelCount = (reelLen + sizeof(Reel) - 1) / sizeof(Reel); + // segment 7 consists of 36 RoomPaths followed by 'reelList' delete[] _reelList; - _reelList = new Reel[reelCount]; - file.read((uint8 *)_reelList, reelLen); + if (len[7] <= 36*sizeof(RoomPaths)) { + file.read((uint8 *)_pathData, len[7]); + _reelList = 0; + } else { + file.read((uint8 *)_pathData, 36*sizeof(RoomPaths)); + unsigned int reelLen = len[7] - 36*sizeof(RoomPaths); + unsigned int reelCount = (reelLen + sizeof(Reel) - 1) / sizeof(Reel); + _reelList = new Reel[reelCount]; + file.read((uint8 *)_reelList, reelLen); + } // segment 8 consists of 12 personFrames followed by a TextFile file.read((uint8 *)_personFramesLE, 24); |