Cocoa: fix possible nil pointer crash created by prior memory leak cleanup, issue #40167

This commit is contained in:
David Jenkins 2023-03-21 16:33:28 -05:00 committed by Maxim Ganetsky
parent 0deadb0dbb
commit edaa81c763

View File

@ -205,25 +205,25 @@ var
// when the tracking loop is over
//
// See topic: https://forum.lazarus.freepascal.org/index.php/topic,56419.0.html
menuTrack : TList = nil;
menuTrack : NSMutableArray;
procedure MenuTrackStarted(mn: NSMenu);
begin
if not Assigned(menuTrack) then menuTrack:=TList.Create;
menuTrack.Add(mn);
if menuTrack = nil then menuTrack := NSMutableArray.alloc.init;
menuTrack.addObject(mn);
end;
procedure MenuTrackEnded(mn: NSMenu);
var
i : integer;
begin
if not Assigned(menuTrack) then
if menuTrack = nil then
// it's possible if popup menu was used, without mainmenu in the app
Exit;
i := menuTrack.IndexOf(mn);
i := menuTrack.indexOfObject(mn);
if i >= 0 then
menuTrack.Delete(i);
menuTrack.removeObjectAtIndex(i);
end;
procedure MenuTrackCancelAll;
@ -231,13 +231,13 @@ var
i : integer;
mn : NSMenu;
begin
if not Assigned(menuTrack) then Exit;
for i:=menuTrack.Count-1 downto 0 do begin
mn := NSMenu(menuTrack[i]);
if menuTrack = nil then Exit;
for i:=menuTrack.count - 1 downto 0 do begin
mn := NSMenu(menuTrack.objectAtIndex(i));
if Assigned(mn) then
mn.cancelTracking;
end;
menuTrack.Clear;
menuTrack.removeAllObjects;
end;
function LCLMenuItemInit(item: NSMenuItem; const atitle: string; ashortCut: TShortCut): id;
@ -1074,6 +1074,6 @@ initialization
finalization
MenuTrackCancelAll;
if Assigned(menuTrack) then menuTrack.Free;
if menuTrack <> nil then menuTrack.release;
end.