Re: crash in LIBPQ_execute_query - Mailing list pgsql-odbc

From Merlin Moncure
Subject Re: crash in LIBPQ_execute_query
Date
Msg-id 6EE64EF3AB31D5448D0007DD34EEB3417DD266@Herge.rcsinc.local
Whole thread Raw
In response to crash in LIBPQ_execute_query  ("Scot Loach" <sloach@sandvine.com>)
List 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 by date:

Previous
From: "Scot Loach"
Date:
Subject: crash in LIBPQ_execute_query
Next
From: "Dave Page"
Date:
Subject: Re: crash in LIBPQ_execute_query