Re: crash in LIBPQ_execute_query

Поиск
Список
Период
Сортировка
От Merlin Moncure
Тема Re: crash in LIBPQ_execute_query
Дата
Msg-id 6EE64EF3AB31D5448D0007DD34EEB3417DD266@Herge.rcsinc.local
обсуждение исходный текст
Ответ на crash in LIBPQ_execute_query  ("Scot Loach" <sloach@sandvine.com>)
Список pgsql-odbc
> Some of the queries we use can be very large.
> My code is crashing here:
>
> QResultClass *
> LIBPQ_execute_query(ConnectionClass *self,char *query)
> {
>         QResultClass *qres;
> PGresult *pgres;
>         char            *ptr;
>         char            cmdbuffer[ERROR_MSG_LENGTH + 1];
>     char                errbuffer[ERROR_MSG_LENGTH + 1];
> int         pos=0;
>
>         strcpy(cmdbuffer,query);
>
>
> ERROR_MSG_LENGTH is 4096, my query is larger than that.
> What's the rationale here and how do we fix it?  This works fine with
the
> old driver.

That code is fishy.  I should be making strncpy, not strcpy, and I don't
understand why ERROR_MSG_LENGTH is used for the length.  The query is
copied again (with strdup) inside QR_set_command.

IMO, it doesn't seem worthwhile to make the extra copy just to be able
to trim spaces leter.

Merlin

В списке pgsql-odbc по дате отправления:

Предыдущее
От: "Scot Loach"
Дата:
Сообщение: crash in LIBPQ_execute_query
Следующее
От: "Dave Page"
Дата:
Сообщение: Re: crash in LIBPQ_execute_query