In tra.cpp:transaction_options() we supposedly parse and validate transaction options given in a TPB. However, we have left alive the old bugs coming from IB for years. Example:
- it's possible to make engine read past the end of the TPB stream (for example, giving a table with length indicator being bigger than the remaining bytes in the TPB stream)
- it's possible to select options that conflict with other related options (for example, rec_version & no_rec_version without read_committed)
- it's possible to select conflicting options inside the same category (for example, both read_committed and snapshot, read_only v/s write right for the txn)
- it's possible to put options that only make sense after a relation, before any relation is specified. They will be ignored silently (for example, isc_tpb_protected)
- it's possible to make the engine read trash for the isc_tpb_lock_timeout tag's numeric parameter.