Re: [Firebird-devel] getInfo() result format

2022-09-08 Thread Alex Peshkoff via Firebird-devel

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

2022-09-08 Thread Dimitry Sibiryakov

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

2022-09-07 Thread Alex Peshkoff via Firebird-devel

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

2022-09-07 Thread Dimitry Sibiryakov

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

2022-09-07 Thread Alex Peshkoff via Firebird-devel

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

2022-09-07 Thread Dimitry Sibiryakov

  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