summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2012-04-23 09:42:34 +0000
committermichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2012-04-23 09:42:34 +0000
commit85c6611e2891fe7fab685ccc135c2eab39807c8b (patch)
tree12b45cd2170ef0efa66e40939e8366f790f157e8
parent420724d90adc95d28bb21be524fe4dd4b06ab6ba (diff)
downloadfpc-85c6611e2891fe7fab685ccc135c2eab39807c8b.tar.gz
* Patch from Michalis Kamburelis to fix memory leak (bug 21835)
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@21002 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--packages/fcl-image/src/fpwritepng.pp12
1 files changed, 8 insertions, 4 deletions
diff --git a/packages/fcl-image/src/fpwritepng.pp b/packages/fcl-image/src/fpwritepng.pp
index 2eac31ea26..ede21806a9 100644
--- a/packages/fcl-image/src/fpwritepng.pp
+++ b/packages/fcl-image/src/fpwritepng.pp
@@ -36,6 +36,7 @@ type
FTransparentColor : TFPColor;
FSwitchLine, FCurrentLine, FPreviousLine : pByteArray;
FPalette : TFPPalette;
+ OwnsPalette : boolean;
FHeader : THeaderChunk;
FGetPixel : TGetPixelFunc;
FDatalineLength : longword;
@@ -115,6 +116,7 @@ end;
destructor TFPWriterPNG.destroy;
begin
+ if OwnsPalette then FreeAndNil(FPalette);
with Fchunk do
if acapacity > 0 then
freemem (data);
@@ -407,13 +409,15 @@ begin
c := 0;
if FIndexed then
begin
- if TheImage.UsePalette then
- FPalette := TheImage.Palette
- else
+ if OwnsPalette then FreeAndNil(FPalette);
+ OwnsPalette := not TheImage.UsePalette;
+ if OwnsPalette then
begin
FPalette := TFPPalette.Create (16);
FPalette.Build (TheImage);
- end;
+ end
+ else
+ FPalette := TheImage.Palette;
if ThePalette.count > 256 then
raise PNGImageException.Create ('Too many colors to use indexed PNG color type');
ColorType := 3;