LazBarcodes: Fix memory leak in Maxicode. Issue #39030, patch by Joeny Ang

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8363 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2022-07-24 11:27:39 +00:00
parent d53bd0e500
commit 8e86c77208

View File

@ -86,10 +86,10 @@ end;
procedure ZBarcode_Delete(symbol: PointerTo_zint_symbol); procedure ZBarcode_Delete(symbol: PointerTo_zint_symbol);
var var
l: PointerTo_zint_render_line; l, line: PointerTo_zint_render_line;
line: PointerTo_zint_render_line; s, lString: PointerTo_zint_render_string;
s: PointerTo_zint_render_string; h, hexagon: PointerTo_zint_render_hexagon;
TheString: PointerTo_zint_render_string; r, ring: PointerTo_zint_render_ring;
begin begin
if Boolean(symbol^.bitmap <> nil) then if Boolean(symbol^.bitmap <> nil) then
begin begin
@ -102,19 +102,33 @@ begin
begin begin
l := line; l := line;
line := line^.next; line := line^.next;
FreeMem (l); FreeMem(l);
end; end;
TheString := symbol^.rendered^.strings; hexagon := symbol^.rendered^.hexagons;
while Assigned(TheString) do while Assigned(hexagon) do
begin begin
s := TheString; h := hexagon;
TheString := TheString^.next; hexagon := h^.next;
FreeMem (s^.text); FreeMem(h);
FreeMem (s);
end; end;
FreeMem (symbol^.rendered); ring := symbol^.rendered^.rings;
while Assigned(ring) do
begin
r := ring;
ring := r^.Next;
FreeMem(r);
end;
lString := symbol^.rendered^.strings;
while Assigned(lString) do
begin
s := lString;
lString := lString^.next;
FreeMem(s^.text);
FreeMem(s);
end;
FreeMem(symbol^.rendered);
end; end;
FreeMem (symbol); FreeMem(symbol);
end; end;
end. end.