From 130c9ecbb81f0c078d1cd54f790ee0071d7af752 Mon Sep 17 00:00:00 2001 From: Colin Snover Date: Sun, 7 May 2017 23:55:36 -0500 Subject: SCI: Fix some issues with ChunkResourceSource 1. The chunk number was hard-coded to zero and inaccessible. 2. Running ResourceManager::getVolumeFile for a chunk resource would always return nullptr instead of a stream of the chunk, which made it impossible to generically validate that resources being added were within bounds of the container file (or, in this case, container chunk). --- engines/sci/resource.cpp | 10 +++++++++- engines/sci/resource_intern.h | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp index 9a53627df3..0846b93d04 100644 --- a/engines/sci/resource.cpp +++ b/engines/sci/resource.cpp @@ -345,6 +345,14 @@ Common::SeekableReadStream *ResourceManager::getVolumeFile(ResourceSource *sourc Common::List::iterator it = _volumeFiles.begin(); Common::File *file; +#ifdef ENABLE_SCI32 + ChunkResourceSource *chunkSource = dynamic_cast(source); + if (chunkSource != nullptr) { + Resource *res = findResource(ResourceId(kResourceTypeChunk, chunkSource->getNumber()), false); + return res ? res->makeStream() : nullptr; + } +#endif + if (source->_resourceFile) return source->_resourceFile->createReadStream(); @@ -843,7 +851,7 @@ void IntMapResourceSource::scanSource(ResourceManager *resMan) { ChunkResourceSource::ChunkResourceSource(const Common::String &name, uint16 number) : ResourceSource(kSourceChunk, name) { - _number = 0; + _number = number; } void ChunkResourceSource::scanSource(ResourceManager *resMan) { diff --git a/engines/sci/resource_intern.h b/engines/sci/resource_intern.h index fe4b0a97f4..f198eddeb3 100644 --- a/engines/sci/resource_intern.h +++ b/engines/sci/resource_intern.h @@ -204,6 +204,8 @@ public: virtual void scanSource(ResourceManager *resMan); virtual void loadResource(ResourceManager *resMan, Resource *res); + uint16 getNumber() const { return _number; } + protected: uint16 _number; -- cgit v1.2.3