On 12/22/17, Alvaro Herrera <alvhe...@alvh.no-ip.org> wrote: > Hmm, patch 0008 removes data lines from the .h but leaves the dependent > OID define lines around: > > #define BTREE_AM_OID 403 > > This is not good, because then the define depends on data that appears > in a distant file.
I see what you mean. > Another consideration is that the current system has > the property that these OIDs are discoverable by a hacker by navigating > to the containing .h file; and a missing symbol is easily fixable if > they need to hardcode the OID for which there isn't a symbol yet. I'm not sure I follow you here. > Maybe a generated .h file containing defines for OIDs from all catalogs > is okay. Of course, not all symbols are to be listed -- we should have > a special marker in the data lines for those that are. Maybe something > like this > > { oid => '403', descr => 'b-tree index access method', > amname => 'btree', amhandler => 'bthandler', amtype => 'i', > cpp_symbol => 'BTREE_AM_OID' }, > > (where 'cpp_symbol' would be skipped by genbki explicitly). The last part makes sense and would be a fairly mechanical change. I'm not sure of the best way to include those generated symbols back in the code again, though. I think a single file might not be desirable because of namespace pollution. The alternative would be to have, say, pg_am.h include pg_am_sym.h. More complex but doable. Also, no need to skip non-data values explicitly. The code knows where to find the schema. :-) Thanks for pushing 1 and 2, BTW. -John Naylor