[fpc-devel] Crash in TWriter with read only class property = nil
Michael Van Canneyt
michael at freepascal.org
Fri May 21 21:42:56 CEST 2021
On Fri, 21 May 2021, Martin Frb via fpc-devel wrote:
> If you have a readonly property such as
> (tested with 3.2.2 rc)
>
> TMyComponent = class(TComponent)
> private
> FFoo: TComponent;
> published
> property ReadOnly: TComponent read FFoo;
> end;
>
> and FFoo is nil,
> then TWriter will crash.
>
> Is the above scenario forbidden to be implemented (and therefore the
> crash a result of breaking some rule)
> or should that work (and the crash is a bug)?
>
> From 3.2.2 rc sources:
>
> procedure TWriter.WriteProperty(Instance: TPersistent; PropInfo: Pointer);
> begin
> // do not stream properties without getter
> if not Assigned(PPropInfo(PropInfo)^.GetProc) then
> exit;
> // properties without setter are only allowed, if they are subcomponents
> PropType := PPropInfo(PropInfo)^.PropType;
> if not Assigned(PPropInfo(PropInfo)^.SetProc) then begin
> if PropType^.Kind<>tkClass then
> exit;
> ObjValue := TObject(GetObjectProp(Instance, PropInfo));
> if not ObjValue.InheritsFrom(TComponent) or //
> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
> not (csSubComponent in TComponent(ObjValue).ComponentStyle) then
> exit;
> end;
>
> The marked line calls InheritsFrom on a nil value.
Definitely a bug. It should not crash. Please file a bugreport...
Michael.
More information about the fpc-devel
mailing list