* prevention of dangling pointers and use after free after free_unregistered_localsymtable_elements

git-svn-id: trunk@49262 -
This commit is contained in:
nickysn 2021-04-25 15:58:59 +00:00
parent 5557dbedf2
commit 1a71ca4106

View File

@ -614,6 +614,7 @@ implementation
i: longint; i: longint;
def: tdef; def: tdef;
sym: tsym; sym: tsym;
tmpidx: Integer;
begin begin
for i:=current_module.localsymtable.deflist.count-1 downto 0 do for i:=current_module.localsymtable.deflist.count-1 downto 0 do
begin begin
@ -633,6 +634,10 @@ implementation
tprocdef(def).procsym.is_registered then tprocdef(def).procsym.is_registered then
tprocsym(tprocdef(def).procsym).ProcdefList.Remove(def); tprocsym(tprocdef(def).procsym).ProcdefList.Remove(def);
current_module.localsymtable.deletedef(def); current_module.localsymtable.deletedef(def);
{ this prevents a dangling pointer and use after free }
tmpidx:=current_module.deflist.IndexOfItem(def,FromEnd);
if tmpidx<>-1 then
current_module.deflist[tmpidx]:=nil;
end; end;
end; end;
{ from high to low so we hopefully have moves of less data } { from high to low so we hopefully have moves of less data }