diff options
author | michael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2012-04-23 09:42:34 +0000 |
---|---|---|
committer | michael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2012-04-23 09:42:34 +0000 |
commit | 85c6611e2891fe7fab685ccc135c2eab39807c8b (patch) | |
tree | 12b45cd2170ef0efa66e40939e8366f790f157e8 | |
parent | 420724d90adc95d28bb21be524fe4dd4b06ab6ba (diff) | |
download | fpc-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.pp | 12 |
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; |