From 7e9e0e1965304eb5d73f1b91bafb3207dd3894d0 Mon Sep 17 00:00:00 2001 From: michael Date: Sun, 6 Oct 2019 13:11:17 +0000 Subject: [PATCH] * Fix bug #0030379: detect circular refences git-svn-id: trunk@43143 - --- packages/fcl-db/src/base/datasource.inc | 15 ++++++++++++++- packages/fcl-db/src/base/db.pas | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/fcl-db/src/base/datasource.inc b/packages/fcl-db/src/base/datasource.inc index 2e613dfb45..6836e47133 100644 --- a/packages/fcl-db/src/base/datasource.inc +++ b/packages/fcl-db/src/base/datasource.inc @@ -559,10 +559,21 @@ begin end; -Function TDataSource.IsLinkedTo(ADataSet: TDataSet): Boolean; +Function TDataSource.IsLinkedTo(ADataset: TDataSet): Boolean; + +var + DS: TDataSource; begin Result:=False; + Repeat + DS:=aDataset.GetDataSource; + Result:=(DS=Self); + if Assigned(DS) then + aDataSet := DS.DataSet + else + aDataSet := Nil; + Until Result or (aDataset=Nil) end; @@ -615,6 +626,8 @@ begin End; If ADataset<>Nil Then begin + if IsLinkedTo(aDataset) then + DatabaseError(SErrCircularDataSourceReferenceNotAllowed,Self); FDataSet:=ADataset; ADataset.RegisterDatasource(Self); ProcessEvent(deUpdateState,0); diff --git a/packages/fcl-db/src/base/db.pas b/packages/fcl-db/src/base/db.pas index 3cd68cd902..10defd95ec 100644 --- a/packages/fcl-db/src/base/db.pas +++ b/packages/fcl-db/src/base/db.pas @@ -1926,7 +1926,7 @@ type constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Edit; - function IsLinkedTo(ADataSet: TDataSet): Boolean; + function IsLinkedTo(ADataset: TDataSet): Boolean; property State: TDataSetState read FState; published property AutoEdit: Boolean read FAutoEdit write FAutoEdit default True;