FpDebug: Prevent an access violation in TDbgImageLoader constructor. Issue #36763.

git-svn-id: trunk@62700 -
This commit is contained in:
juha 2020-03-06 20:09:47 +00:00
parent b9e4a03603
commit d9daa6776b

View File

@ -74,12 +74,12 @@ type
constructor Create; virtual;
constructor Create(AFileName: String; ADebugMap: TObject = nil;
ALoadedTargetImageAddr: TDBGPtr = 0);
procedure ParseSymbolTable(AFpSymbolInfo: TfpSymbolList); virtual;
{$ifdef USE_WIN_FILE_MAPPING}
constructor Create(AFileHandle: THandle; ADebugMap: TObject = nil;
ALoadedTargetImageAddr: TDBGPtr = 0);
{$endif}
destructor Destroy; override;
procedure ParseSymbolTable(AFpSymbolInfo: TfpSymbolList); virtual;
procedure CloseFileLoader;
procedure AddToLoaderList(ALoaderList: TDbgImageLoaderList);
function IsValid: Boolean;
@ -224,14 +224,10 @@ begin
FFileName := AFileName;
FFileLoader := TDbgFileLoader.Create(AFileName);
FImgReader := GetImageReader(FFileLoader, ADebugMap, False);
if FImgReader = nil then FreeAndNil(FFileLoader);
FImgReader.LoadedTargetImageAddr := ALoadedTargetImageAddr;
end;
procedure TDbgImageLoader.ParseSymbolTable(AFpSymbolInfo: TfpSymbolList);
begin
if IsValid then
FImgReader.ParseSymbolTable(AFpSymbolInfo);
if Assigned(FImgReader) then
FImgReader.LoadedTargetImageAddr := ALoadedTargetImageAddr
else
FreeAndNil(FFileLoader);
end;
{$ifdef USE_WIN_FILE_MAPPING}
@ -240,8 +236,10 @@ constructor TDbgImageLoader.Create(AFileHandle: THandle; ADebugMap: TObject;
begin
FFileLoader := TDbgFileLoader.Create(AFileHandle);
FImgReader := GetImageReader(FFileLoader, ADebugMap, False);
if FImgReader = nil then FreeAndNil(FFileLoader);
FImgReader.LoadedTargetImageAddr := ALoadedTargetImageAddr;
if Assigned(FImgReader) then
FImgReader.LoadedTargetImageAddr := ALoadedTargetImageAddr
else
FreeAndNil(FFileLoader);
end;
{$endif}
@ -252,6 +250,12 @@ begin
inherited Destroy;
end;
procedure TDbgImageLoader.ParseSymbolTable(AFpSymbolInfo: TfpSymbolList);
begin
if IsValid then
FImgReader.ParseSymbolTable(AFpSymbolInfo);
end;
procedure TDbgImageLoader.CloseFileLoader;
begin
if FFileLoader <> nil then