Skip to content

Commit 59273d6

Browse files
fixed/prevented potential range-check error
1 parent 431f97b commit 59273d6

File tree

1 file changed

+45
-30
lines changed

1 file changed

+45
-30
lines changed

ufrmAutoGetItMain.pas

Lines changed: 45 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ TfrmAutoGetItMain = class(TForm)
9393
function ParseGetItName(const GetItLine: string): string;
9494
function CountChecked: Integer;
9595
function SelectedBDSVersion: string;
96+
function IsPackageIndexValid: Boolean;
9697
property PackageCount: Integer write SetPackageCount;
9798
property DownloadTime: Integer write SetDownloadTime;
9899
property ExecLine: string write SetExecLine;
@@ -159,19 +160,29 @@ function TfrmAutoGetItMain.GetItUninstallCmd(const GetItPackageName: string): st
159160
end
160161
end;
161162

163+
function TfrmAutoGetItMain.IsPackageIndexValid: Boolean;
164+
begin
165+
Result := (lbPackages.ItemIndex > -1) and (lbPackages.ItemIndex < lbPackages.Items.Count);
166+
end;
167+
162168
procedure TfrmAutoGetItMain.lbPackagesClick(Sender: TObject);
163169
begin
164-
actInstallOne.Enabled := (lbPackages.ItemIndex > -1) and (lbPackages.ItemIndex < lbPackages.Items.Count);
165-
actUninstallOne.Enabled := (lbPackages.ItemIndex > -1) and (lbPackages.ItemIndex < lbPackages.Items.Count);
170+
if IsPackageIndexValid then begin
171+
actInstallOne.Enabled := True;
172+
actUninstallOne.Enabled := True;
166173

167-
mmoDescription.Text := lbPackages.Items[lbPackages.ItemIndex];
174+
mmoDescription.Text := lbPackages.Items[lbPackages.ItemIndex];
168175

169-
if actInstallOne.Enabled then begin
170-
actInstallOne.Caption := 'Install ' + ParseGetItName(lbPackages.Items[lbPackages.ItemIndex]);
171-
actUninstallOne.Caption := 'Uninstall ' + ParseGetItName(lbPackages.Items[lbPackages.ItemIndex]);
176+
if actInstallOne.Enabled then begin
177+
actInstallOne.Caption := 'Install ' + ParseGetItName(lbPackages.Items[lbPackages.ItemIndex]);
178+
actUninstallOne.Caption := 'Uninstall ' + ParseGetItName(lbPackages.Items[lbPackages.ItemIndex]);
179+
end else begin
180+
actInstallOne.Caption := 'Install ...';
181+
actUninstallOne.Caption := 'Uninstall ...';
182+
end;
172183
end else begin
173-
actInstallOne.Caption := 'Install ...';
174-
actUninstallOne.Caption := 'Uninstall ...';
184+
actInstallOne.Enabled := False;
185+
actUninstallOne.Enabled := False;
175186
end;
176187
end;
177188

@@ -207,34 +218,38 @@ procedure TfrmAutoGetItMain.actUninstallCheckedExecute(Sender: TObject);
207218

208219
procedure TfrmAutoGetItMain.actInstallOneExecute(Sender: TObject);
209220
begin
210-
actInstallOne.Enabled := False;
211-
actRefresh.Enabled := False;
212-
try
213-
frmInstallLog.Initialize;
214-
frmInstallLog.ProcessGetItPackage(BDSBinDir,
215-
GetItInstallCmd(ParseGetItName(lbPackages.Items[lbPackages.ItemIndex])),
216-
1, 1, FInstallAborted);
221+
if IsPackageIndexValid then begin
222+
actInstallOne.Enabled := False;
223+
actRefresh.Enabled := False;
224+
try
225+
frmInstallLog.Initialize;
226+
frmInstallLog.ProcessGetItPackage(BDSBinDir,
227+
GetItInstallCmd(ParseGetItName(lbPackages.Items[lbPackages.ItemIndex])),
228+
1, 1, FInstallAborted);
217229

218-
frmInstallLog.NotifyFinished;
219-
finally
220-
actInstallOne.Enabled := True;
221-
actRefresh.Enabled := True;
230+
frmInstallLog.NotifyFinished;
231+
finally
232+
actInstallOne.Enabled := True;
233+
actRefresh.Enabled := True;
234+
end;
222235
end;
223236
end;
224237

225238
procedure TfrmAutoGetItMain.actUninstallOneExecute(Sender: TObject);
226239
begin
227-
actUninstallOne.Enabled := False;
228-
actRefresh.Enabled := False;
229-
try
230-
frmInstallLog.Initialize;
231-
frmInstallLog.ProcessGetItPackage(BDSBinDir,
232-
GetItUninstallCmd(ParseGetItName(lbPackages.Items[lbPackages.ItemIndex])),
233-
1, 1, FInstallAborted);
234-
frmInstallLog.NotifyFinished;
235-
finally
236-
actUninstallOne.Enabled := True;
237-
actRefresh.Enabled := True;
240+
if IsPackageIndexValid then begin
241+
actUninstallOne.Enabled := False;
242+
actRefresh.Enabled := False;
243+
try
244+
frmInstallLog.Initialize;
245+
frmInstallLog.ProcessGetItPackage(BDSBinDir,
246+
GetItUninstallCmd(ParseGetItName(lbPackages.Items[lbPackages.ItemIndex])),
247+
1, 1, FInstallAborted);
248+
frmInstallLog.NotifyFinished;
249+
finally
250+
actUninstallOne.Enabled := True;
251+
actRefresh.Enabled := True;
252+
end;
238253
end;
239254
end;
240255

0 commit comments

Comments
 (0)