[fpc-devel] RTTI module and "IsManaged" critical problem
hnb.code at gmail.com
Mon Dec 12 23:14:30 CET 2016
2016-12-12 20:41 GMT+01:00 Sven Barth <pascaldragon at googlemail.com>:
> So, my own idea for this.
First insight looks good (kudos for union with "deprecated field" ^^) and
we don't have redundant info, but sorry it can't work in presented form.
With your changes INIT RTTI is incompatible with RTTI, which is critical
defect for RTL. FPC_(INITIALIZE|FINALIZE|COPY|ADDREF) (rtl/inc/rtti.inc) is
used in many contexts - both for internal usage (where generally is used
INIT RTTI) and for external usage (with regular RTTI). Since we have
InitializeArray/FinalizeArray/CopyArray is possible to execute
FPC_(INITIALIZE|FINALIZE|COPY) with RTTI for records (instead of INIT RTTI
for records) which means AV.
To solve this issue you need obligatory to add RecInitTable: PPointer; (and
Terminator for INIT RTTI). To move forward presented patch is obligatory:
*PART 2* http://bugs.freepascal.org/view.php?id=30687#c96093
This is first step. With second iteration we could add your modifications,
I have no other objections. See above patch - it is already prepared for
differences between INIT RTTI (TRecordInfoInit) and FULL RTTI
Finally we can merge both ideas. User has access to:
* Classical array of compact "managed field" by RecInitTable
* All fields
* All managed fields (in your solution it has sense)
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the fpc-devel