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