IDE: Prevent Access violation in Search result view when exception was raised by search. Issue #37124

git-svn-id: branches/fixes_2_0@63477 -
This commit is contained in:
mattias 2020-06-28 17:01:56 +00:00
parent 3f6a879586
commit 981a213c56

View File

@ -127,7 +127,6 @@ type
property UpdateItems: TStrings read fUpdateStrings write fUpdateStrings; property UpdateItems: TStrings read fUpdateStrings write fUpdateStrings;
property Updating: boolean read fUpdating; property Updating: boolean read fUpdating;
property Skipped: integer read FSkipped write SetSkipped; property Skipped: integer read FSkipped write SetSkipped;
property Items;
function ItemsAsStrings: TStrings; function ItemsAsStrings: TStrings;
end; end;
@ -1122,7 +1121,7 @@ begin
//enter a new file entry //enter a new file entry
if not Assigned(Node) then if not Assigned(Node) then
begin begin
Node := Items.Add(Node, MatchPos.FileName); Node := Items.Add(Nil, MatchPos.FileName);
fFilenameToNode.Add(Node); fFilenameToNode.Add(Node);
end; end;
@ -1139,28 +1138,26 @@ begin
inherited Create(AOwner); inherited Create(AOwner);
ReadOnly := True; ReadOnly := True;
fSearchObject:= TLazSearch.Create; fSearchObject:= TLazSearch.Create;
fUpdateStrings:= TStringList.Create;
fFilenameToNode:=TAvlTree.Create(@CompareTVNodeTextAsFilename);
fUpdating:= false; fUpdating:= false;
fUpdateCount:= 0; fUpdateCount:= 0;
fUpdateStrings:= TStringList.Create;
FSearchInListPhrases := ''; FSearchInListPhrases := '';
fFiltered := False; fFiltered := False;
fFilenameToNode:=TAvlTree.Create(@CompareTVNodeTextAsFilename);
end;//Create end;//Create
Destructor TLazSearchResultTV.Destroy; Destructor TLazSearchResultTV.Destroy;
begin begin
fFilenameToNode.Free;
if Assigned(fSearchObject) then if Assigned(fSearchObject) then
FreeAndNil(fSearchObject); FreeAndNil(fSearchObject);
//if UpdateStrings is empty, the objects are stored in Items due to filtering //if UpdateStrings is empty, the objects are stored in Items due to filtering
//filtering clears UpdateStrings //filtering clears UpdateStrings
if (fUpdateStrings.Count = 0) then if (fUpdateStrings.Count = 0) then
FreeObjectsTN(Items); FreeObjectsTN(Items);
if Assigned(fUpdateStrings) then fFilenameToNode.Free;
begin Assert(Assigned(fUpdateStrings), 'fUpdateStrings = Nil');
FreeObjects(fUpdateStrings); FreeObjects(fUpdateStrings);
FreeAndNil(fUpdateStrings); FreeAndNil(fUpdateStrings);
end;
inherited Destroy; inherited Destroy;
end;//Destroy end;//Destroy
@ -1284,10 +1281,8 @@ var i: Integer;
begin begin
if (slItems.Count <= 0) then Exit; if (slItems.Count <= 0) then Exit;
for i:=0 to slItems.Count-1 do for i:=0 to slItems.Count-1 do
begin
if Assigned(slItems.Objects[i]) then if Assigned(slItems.Objects[i]) then
slItems.Objects[i].Free; slItems.Objects[i].Free;
end;//End for-loop
end; end;
function TLazSearchResultTV.BeautifyLine(const Filename: string; X, Y: integer; function TLazSearchResultTV.BeautifyLine(const Filename: string; X, Y: integer;