From 8e86c77208e2190b36eb33948f4520f770058ef9 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sun, 24 Jul 2022 11:27:39 +0000 Subject: [PATCH] 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 --- components/lazbarcodes/src/lbc_basic.pas | 40 ++++++++++++++++-------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/components/lazbarcodes/src/lbc_basic.pas b/components/lazbarcodes/src/lbc_basic.pas index 3c92932d7..5f92ebd98 100644 --- a/components/lazbarcodes/src/lbc_basic.pas +++ b/components/lazbarcodes/src/lbc_basic.pas @@ -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; + 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); + FreeMem(symbol); end; end.