aboutsummaryrefslogtreecommitdiff
path: root/engines/illusions/spritedecompressqueue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/illusions/spritedecompressqueue.cpp')
-rw-r--r--engines/illusions/spritedecompressqueue.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/engines/illusions/spritedecompressqueue.cpp b/engines/illusions/spritedecompressqueue.cpp
index acb4547a76..c20b0dba28 100644
--- a/engines/illusions/spritedecompressqueue.cpp
+++ b/engines/illusions/spritedecompressqueue.cpp
@@ -55,11 +55,20 @@ void SpriteDecompressQueue::decompressAll() {
void SpriteDecompressQueue::decompress(SpriteDecompressQueueItem *item) {
byte *src = item->_compressedPixels;
Graphics::Surface *dstSurface = item->_surface;
- int dstSize = item->_dimensions._height * item->_dimensions._width;
+ int dstSize = item->_dimensions._width * item->_dimensions._height;
int processedSize = 0;
int xincr, x, xstart;
int yincr, y;
-
+
+ // Safeguard
+ if (item->_dimensions._width > item->_surface->w ||
+ item->_dimensions._height > item->_surface->h) {
+ debug("Incorrect frame dimensions (%d, %d <> %d, %d)",
+ item->_dimensions._width, item->_dimensions._height,
+ item->_surface->w, item->_surface->h);
+ return;
+ }
+
if (item->_flags & 1) {
x = xstart = item->_dimensions._width - 1;
xincr = -1;