Re: [Firebird-devel] getInfo() result format
On 9/8/22 12:49, Dimitry Sibiryakov wrote: Alex Peshkoff via Firebird-devel wrote 07.09.2022 18:40: Do not remember - does ClumpletReader already supports getInfo() result format? Sorry, can't remember. Supports, down to FB3. I.e. looks like we need an src review. Add a ticket please. Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel
Re: [Firebird-devel] getInfo() result format
Alex Peshkoff via Firebird-devel wrote 07.09.2022 18:40: Do not remember - does ClumpletReader already supports getInfo() result format? Sorry, can't remember. -- WBR, SD. Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel
Re: [Firebird-devel] getInfo() result format
On 9/7/22 19:33, Dimitry Sibiryakov wrote: At fourth line you can get read-past-buffer and may be crash. And this code is copy-pasted everywhere in Firebird source. Do not remember - does ClumpletReader already supports getInfo() result format? Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel
Re: [Firebird-devel] getInfo() result format
Alex Peshkoff via Firebird-devel wrote 07.09.2022 18:26: Not sure what you mean by 'terminal item', but it may be followed by isc_info_end if that fits into buffer. What about two bytes length - it's single-byte item not followed by anything. see how it's added: Ok, now see how it is handled: while (!redo && *p != isc_info_end && p < buf + buf_len) { const UCHAR item = *p++; const USHORT len = static_cast(gds__vax_integer(p, 2)); p += 2; switch (item) { ... case isc_info_truncated: redo = true; break; default: (Arg::Gds(isc_random) << "Invalid info item").raise(); } p += len; } At fourth line you can get read-past-buffer and may be crash. And this code is copy-pasted everywhere in Firebird source. -- WBR, SD. Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel
Re: [Firebird-devel] getInfo() result format
On 9/7/22 19:18, Dimitry Sibiryakov wrote: Hello All. isc_info_truncated is a terminal item which is NOT followed by two bytes length, right? Not sure what you mean by 'terminal item', but it may be followed by isc_info_end if that fits into buffer. What about two bytes length - it's single-byte item not followed by anything. see how it's added: bool Service::ck_space_for_numeric(UCHAR*& info, const UCHAR* const end) { if ((info + 1 + sizeof(ULONG)) > end) { if (info < end) *info++ = isc_info_truncated; if (info < end) *info++ = isc_info_end; return false; } return true; } Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel
[Firebird-devel] getInfo() result format
Hello All. isc_info_truncated is a terminal item which is NOT followed by two bytes length, right? -- WBR, SD. Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel