From c689e1582c357f05272f84f0df7ea0eb676ebc11 Mon Sep 17 00:00:00 2001 From: wp Date: Sun, 27 Dec 2015 23:33:57 +0000 Subject: [PATCH] fpvectorial: Fix svg reader memory leaks related to BrushDefs and tokenizer. Declare package as runtime package. git-svn-id: trunk@51060 - --- components/fpvectorial/fpvectorialpkg.lpk | 7 ++--- components/fpvectorial/fpvectorialpkg.pas | 8 +---- components/fpvectorial/svgvectorialreader.pas | 29 +++++++++++++------ 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/components/fpvectorial/fpvectorialpkg.lpk b/components/fpvectorial/fpvectorialpkg.lpk index 29ae0a2778..4e87c7de36 100644 --- a/components/fpvectorial/fpvectorialpkg.lpk +++ b/components/fpvectorial/fpvectorialpkg.lpk @@ -8,9 +8,6 @@ - - - @@ -98,7 +95,6 @@ - @@ -114,5 +110,8 @@ + + <_ExternHelp Items="Count"/> + diff --git a/components/fpvectorial/fpvectorialpkg.pas b/components/fpvectorial/fpvectorialpkg.pas index c7406a4d58..d023eecefb 100644 --- a/components/fpvectorial/fpvectorialpkg.pas +++ b/components/fpvectorial/fpvectorialpkg.pas @@ -13,14 +13,8 @@ uses lazvectorialreader, mathmlvectorialreader, odgvectorialreader, rawvectorialreadwrite, svgvectorialreader, svgvectorialwriter, svgzvectorialreader, odtvectorialwriter, docxvectorialwriter, - htmlvectorialreader, LazarusPackageIntf; + htmlvectorialreader; implementation -procedure Register; -begin -end; - -initialization - RegisterPackage('fpvectorialpkg', @Register); end. diff --git a/components/fpvectorial/svgvectorialreader.pas b/components/fpvectorial/svgvectorialreader.pas index d63e47e24b..739484e5e0 100644 --- a/components/fpvectorial/svgvectorialreader.pas +++ b/components/fpvectorial/svgvectorialreader.pas @@ -67,13 +67,15 @@ type { TSVGPathTokenizer } TSVGPathTokenizer = class + protected + Tokens: TSVGTokenList; public FPointSeparator, FCommaSeparator: TFormatSettings; - Tokens: TSVGTokenList; ExtraDebugStr: string; constructor Create; - Destructor Destroy; override; + destructor Destroy; override; procedure AddToken(AStr: string); + procedure ClearTokens; procedure TokenizePathString(AStr: string); procedure TokenizeFunctions(AStr: string); function DebugOutTokensAsString: string; @@ -208,13 +210,9 @@ begin end; destructor TSVGPathTokenizer.Destroy; -var - i: Integer; begin - for i:=Tokens.Count-1 downto 0 do - Tokens[i].Free; + ClearTokens; Tokens.Free; - inherited Destroy; end; @@ -278,6 +276,15 @@ begin Tokens.Add(lToken); end; +procedure TSVGPathTokenizer.ClearTokens; +var + i: Integer; +begin + for i := Tokens.Count-1 downto 0 do + Tokens[i].Free; + Tokens.Clear; +end; + procedure TSVGPathTokenizer.TokenizePathString(AStr: string); const Str_Space: Char = ' '; @@ -1954,7 +1961,7 @@ var lDebugStr: String; lTmpTokenType: TSVGTokenType; begin - FSVGPathTokenizer.Tokens.Clear; + FSVGPathTokenizer.ClearTokens; FSVGPathTokenizer.TokenizePathString(AStr); //lDebugStr := FSVGPathTokenizer.DebugOutTokensAsString(); CurX := 0; @@ -2325,7 +2332,7 @@ var X, Y: Double; FirstPtX, FirstPtY, CurX, CurY: Double; begin - FSVGPathTokenizer.Tokens.Clear; + FSVGPathTokenizer.ClearTokens; FSVGPathTokenizer.TokenizePathString(AStr); CurX := 0; CurY := 0; @@ -3059,9 +3066,13 @@ begin end; destructor TvSVGVectorialReader.Destroy; +var + i: Integer; begin FLayerStylesKeys.Free; FLayerStylesValues.Free; + + for i:=FBrushDefs.Count-1 downto 0 do TObject(FBrushDefs[i]).Free; FBrushDefs.Free; FSVGPathTokenizer.Free;