[Scummvm-git-logs] scummvm master -> bfb8b192694b6dd0381226de65721c7b13ff7c18

aquadran noreply at scummvm.org
Fri Oct 11 19:35:15 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:
bfb8b19269 WINTERMUTE: Fixed palette buffer overflow.


Commit: bfb8b192694b6dd0381226de65721c7b13ff7c18
    https://github.com/scummvm/scummvm/commit/bfb8b192694b6dd0381226de65721c7b13ff7c18
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2024-10-11T21:35:09+02:00

Commit Message:
WINTERMUTE: Fixed palette buffer overflow.

Changed paths:
    engines/wintermute/base/gfx/base_image.cpp
    engines/wintermute/base/gfx/base_image.h
    engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
    engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp


diff --git a/engines/wintermute/base/gfx/base_image.cpp b/engines/wintermute/base/gfx/base_image.cpp
index eeb4985f419..740021cdd71 100644
--- a/engines/wintermute/base/gfx/base_image.cpp
+++ b/engines/wintermute/base/gfx/base_image.cpp
@@ -45,6 +45,7 @@ namespace Wintermute {
 BaseImage::BaseImage() {
 	_fileManager = BaseFileManager::getEngineInstance();
 	_palette = nullptr;
+	_paletteCount = 0;
 	_surface = nullptr;
 	_decoder = nullptr;
 	_deletableSurface = nullptr;
@@ -83,6 +84,7 @@ bool BaseImage::loadFile(const Common::String &filename) {
 	_decoder->loadStream(*file);
 	_surface = _decoder->getSurface();
 	_palette = _decoder->getPalette();
+	_paletteCount = _decoder->getPaletteColorCount();
 	_fileManager->closeFile(file);
 
 	return true;
diff --git a/engines/wintermute/base/gfx/base_image.h b/engines/wintermute/base/gfx/base_image.h
index 48095daf864..8b1ff120bfc 100644
--- a/engines/wintermute/base/gfx/base_image.h
+++ b/engines/wintermute/base/gfx/base_image.h
@@ -55,6 +55,9 @@ public:
 	const byte *getPalette() const {
 		return _palette;
 	}
+	uint16 getPaletteCount() const {
+		return _paletteCount;
+	}
 	byte getAlphaAt(int x, int y) const;
 	bool writeBMPToStream(Common::WriteStream *stream) const;
 	bool resize(int newWidth, int newHeight);
@@ -67,6 +70,7 @@ private:
 	const Graphics::Surface *_surface;
 	Graphics::Surface *_deletableSurface;
 	const byte *_palette;
+	uint16 _paletteCount;
 	BaseFileManager *_fileManager;
 };
 
diff --git a/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
index 0db36dc0d00..5376eb2d44b 100644
--- a/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
@@ -151,9 +151,9 @@ bool BaseSurfaceOpenGL3D::create(const Common::String &filename, bool defaultCK,
 	}
 
 #ifdef SCUMM_BIG_ENDIAN
-	_imageData = img.getSurface()->convertTo(Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0), img.getPalette());
+	_imageData = img.getSurface()->convertTo(Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0), img.getPalette(), img.getPaletteCount());
 #else
-	_imageData = img.getSurface()->convertTo(Graphics::PixelFormat(4, 8, 8, 8, 8, 0, 8, 16, 24), img.getPalette());
+	_imageData = img.getSurface()->convertTo(Graphics::PixelFormat(4, 8, 8, 8, 8, 0, 8, 16, 24), img.getPalette(), img.getPaletteCount());
 #endif
 
 	if (BaseEngine::instance().getTargetExecutable() < WME_LITE) {
diff --git a/engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp b/engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp
index e270ca0acad..1122ef0614e 100644
--- a/engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp
+++ b/engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp
@@ -127,7 +127,7 @@ bool BaseSurfaceOSystem::finishLoad() {
 		if (!image->getPalette()) {
 			error("Missing palette while loading 8bit image %s", _filename.c_str());
 		}
-		_surface = image->getSurface()->convertTo(g_system->getScreenFormat(), image->getPalette());
+		_surface = image->getSurface()->convertTo(g_system->getScreenFormat(), image->getPalette(), image->getPaletteCount());
 	} else if (image->getSurface()->format != g_system->getScreenFormat()) {
 		_surface = image->getSurface()->convertTo(g_system->getScreenFormat());
 	} else {




More information about the Scummvm-git-logs mailing list