From 72269b6c9da89de835df5a7e3e083dfd7cd0b432 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torbj=C3=B6rn=20Andersson?= Date: Fri, 15 Jul 2016 11:29:19 +0200 Subject: [PATCH] WAGE: Fix memory leak in drawBitmap() The 'tmp' surface was never freed when in _boundsCalculationMode. --- engines/wage/design.cpp | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/engines/wage/design.cpp b/engines/wage/design.cpp index f2a8aba812b..2bfea9df7d6 100644 --- a/engines/wage/design.cpp +++ b/engines/wage/design.cpp @@ -474,28 +474,27 @@ void Design::drawBitmap(Graphics::ManagedSurface *surface, Common::SeekableReadS in.skip(numBytes); - if (_boundsCalculationMode) - return; + if (!_boundsCalculationMode) { + Graphics::FloodFill ff(&tmp, kColorWhite, kColorGreen); + for (int yy = 0; yy < h; yy++) { + ff.addSeed(0, yy); + ff.addSeed(w - 1, yy); + } + for (int xx = 0; xx < w; xx++) { + ff.addSeed(xx, 0); + ff.addSeed(xx, h - 1); + } + ff.fill(); - Graphics::FloodFill ff(&tmp, kColorWhite, kColorGreen); - for (int yy = 0; yy < h; yy++) { - ff.addSeed(0, yy); - ff.addSeed(w - 1, yy); - } - for (int xx = 0; xx < w; xx++) { - ff.addSeed(xx, 0); - ff.addSeed(xx, h - 1); - } - ff.fill(); - - for (y = 0; y < h && y1 + y < surface->h; y++) { - byte *src = (byte *)tmp.getBasePtr(0, y); - byte *dst = (byte *)surface->getBasePtr(x1, y1 + y); - for (x = 0; x < w; x++) { - if (*src != kColorGreen) - *dst = *src; - src++; - dst++; + for (y = 0; y < h && y1 + y < surface->h; y++) { + byte *src = (byte *)tmp.getBasePtr(0, y); + byte *dst = (byte *)surface->getBasePtr(x1, y1 + y); + for (x = 0; x < w; x++) { + if (*src != kColorGreen) + *dst = *src; + src++; + dst++; + } } }