From ced21b2d9cf5fb0adc2f719beeb118ce5d48d3d4 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sat, 9 Aug 2014 14:17:49 +0000 Subject: [PATCH] fpspreadsheet: Fix memory leak in cell memory allocation (visibile in OOXML and ODS). git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3462 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/fpspreadsheet/fpspreadsheet.pas | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/components/fpspreadsheet/fpspreadsheet.pas b/components/fpspreadsheet/fpspreadsheet.pas index ff081a7d5..7c2ebe08d 100755 --- a/components/fpspreadsheet/fpspreadsheet.pas +++ b/components/fpspreadsheet/fpspreadsheet.pas @@ -1574,12 +1574,15 @@ end; procedure TsWorksheet.RemoveCallback(data, arg: pointer); begin Unused(arg); + (* { The strings and dyn arrays must be reset to nil content manually, because FreeMem only frees the record mem, without checking its content } PCell(data).UTF8StringValue := ''; PCell(data).NumberFormatStr := ''; SetLength(PCell(data).RPNFormulaValue, 0); - FreeMem(data); +// FreeMem(data); +*) + Dispose(PCell(data)); end; function CompareCells(Item1, Item2: Pointer): Integer; @@ -1952,7 +1955,8 @@ begin if (Result = nil) then begin - Result := GetMem(SizeOf(TCell)); + New(Result); +// Result := GetMem(SizeOf(TCell)); FillChar(Result^, SizeOf(TCell), #0); Result^.Row := ARow; @@ -6660,7 +6664,8 @@ end; } function NewRPNItem: PRPNItem; begin - Result := GetMem(SizeOf(TRPNItem)); + New(Result); +// Result := GetMem(SizeOf(TRPNItem)); FillChar(Result^.FE, SizeOf(Result^.FE), 0); Result^.FE.StringValue := ''; end; @@ -6671,8 +6676,11 @@ end; procedure DisposeRPNItem(AItem: PRPNItem); begin if AItem <> nil then begin +{ AItem.FE.StringValue := '';; FreeMem(AItem, SizeOf(TRPNItem)); +} + Dispose(AItem); end; end;