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
