Обсуждение: buffer overflow in 08.04.0100 und 08.04.0200?

Поиск
Список
Период
Сортировка

buffer overflow in 08.04.0100 und 08.04.0200?

От
Jan-Peter Seifert
Дата:
Hello,

we ran into a problem with the new versions of psqlODBC (08.04.0100 and
08.04.0200), which causes a crash.
For example one of our functions that dynamically generates queries does
a 'RAISE NOTICE' of the query string before executing it. Sometimes this
string gets very long and the driver crashes. In the CommLog the string
is cut. The limit seems to be 4095. It somehow seems to be connected to
the global socket size which obviously is 4096?
However, it's strange that 8.3.400 is not crashing although the string
seems to be truncated as well.

We checked it with a function that is simply 'raise noticing' a string
longer than 4100 characters/bytes.

-------------------------------------
CREATE OR REPLACE FUNCTION teststringlength() RETURNS CHAR AS

$BODY$

DECLARE
BEGIN

    RAISE NOTICE ' ... more than about 4100 characters ...';

RETURN 'Success';

END;
$BODY$

LANGUAGE 'plpgsql' VOLATILE;
-----------------------------------------------

It gets executed with 'SELECT teststringlength();' within a
psqlODBC-connection that uses the same ODBC data source as the other
psqlODBC-Version. In 08.04.0100 and 08.04.0200 it crashes ... in 8.3.400
it doesn't.
Is there maybe a new parameter that is missing, because we reused the
old data source (I'll check tomorrow)?

Thank you very much for any hints,

Peter

Re: buffer overflow in 08.04.0100 und 08.04.0200?

От
Hiroshi Inoue
Дата:
Hi,

Could you send me directly the Mylog output?

regards,
Hiroshi Inoue

Jan-Peter Seifert wrote:
> Hello,
>
> we ran into a problem with the new versions of psqlODBC (08.04.0100 and
> 08.04.0200), which causes a crash.
> For example one of our functions that dynamically generates queries does
> a 'RAISE NOTICE' of the query string before executing it. Sometimes this
> string gets very long and the driver crashes. In the CommLog the string
> is cut. The limit seems to be 4095. It somehow seems to be connected to
> the global socket size which obviously is 4096?
> However, it's strange that 8.3.400 is not crashing although the string
> seems to be truncated as well.
>
> We checked it with a function that is simply 'raise noticing' a string
> longer than 4100 characters/bytes.
>
> -------------------------------------
> CREATE OR REPLACE FUNCTION teststringlength() RETURNS CHAR AS
>
> $BODY$
>
> DECLARE
> BEGIN
>
>     RAISE NOTICE ' ... more than about 4100 characters ...';
>
> RETURN 'Success';
>
> END;
> $BODY$
>
> LANGUAGE 'plpgsql' VOLATILE;
> -----------------------------------------------
>
> It gets executed with 'SELECT teststringlength();' within a
> psqlODBC-connection that uses the same ODBC data source as the other
> psqlODBC-Version. In 08.04.0100 and 08.04.0200 it crashes ... in 8.3.400
> it doesn't.
> Is there maybe a new parameter that is missing, because we reused the
> old data source (I'll check tomorrow)?
>
> Thank you very much for any hints,
>
> Peter