Re: BUG: CC_send_query_append incomplete error handling

From: "Inoue,Hiroshi" <hinoue205(at)gmail(dot)com>
To: Nicolae Vartolomei <nv(at)cloudflare(dot)com>
Cc: "pgsql-odbc(at)postgresql(dot)org" <pgsql-odbc(at)postgresql(dot)org>
Subject: Re: BUG: CC_send_query_append incomplete error handling
Date: 2022-01-04 04:21:49
Message-ID: CAFGcedX2zgn+iCez7Z3V1G2NLLPimZSP+m_M0BJP3yjXQzJ3=g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

Hi Nicolae,

Sorry for the late reply.
I would take care of this issue.

regards,
Hhiroshi Inoue

2022年1月1日(土) 20:32 Nicolae Vartolomei <nv(at)cloudflare(dot)com>:

> Hi,
>
> I noticed a bug where psqlodbc doesn't handle an underlying error
> correctly.
>
> The interaction is roughly as follows:
>
> Initiate a connection, run few queries, run `ss -K dport postgresql` to
> kill the
> psqlodbc connection to postgres, then run another query.
>
> The expected behaviour is for query to fail and to return an error like
> "08S01".
>
> Instead, the following error is generated:
> ```
> pgapi30.c[PGAPI_GetDiagRec]43: entering type=3 rec=1
> environ.c[ER_ReturnError]202: entering status = 1, msg = #no
> connection to the server...
> environ.c[ER_ReturnError]259: szSqlState = 'HY000',len=58,
> szError='no connection to the server
> ```
>
> This makes it a bit tricky to properly handle the exception on the client.
>
> I'm browsing through this code base for the first time,
> and the incomplete error handling seems to be around these lines in
> connection.c
>
> ```
> if (!PQsendQuery(self->pqconn, query_buf.data))
> {
> char *errmsg = PQerrorMessage(self->pqconn);
> QLOG(0, "\nCommunication Error: %s\n", SAFE_STR(errmsg));
> CC_set_error(self, CONNECTION_COMMUNICATION_ERROR, errmsg, func);
> goto cleanup;
> }
> ```
>
> I think this need a call to `CC_on_abort(self, CONN_DEAD);` in order
> to clean up the connection so that future calls would get trapped by
> `SC_connection_lost_check` call
> which also propagates the correct error to `SQLGetDiagRec` with a
> statement handle.
>
> Latest tested version is from this package
> https://packages.ubuntu.com/focal/odbc-postgresql
>
> Let me know if a test case for reproducing the issue is needed. The
> issue affects this code
>
> https://github.com/ClickHouse/ClickHouse/blob/86040a15d80c9371639ee0fac2879da749612a3f/programs/odbc-bridge/ODBCConnectionFactory.h#L76-L96
> (nanodbc-
> <https://github.com/ClickHouse/ClickHouse/blob/86040a15d80c9371639ee0fac2879da749612a3f/programs/odbc-bridge/ODBCConnectionFactory.h#L76-L96(nanodbc->
> >unixODBC->psqlodbc)
>
> ---
>
> nvartolomei
>
>
>

In response to

Browse pgsql-odbc by date

  From Date Subject
Next Message Adrian Grucza 2022-01-10 01:49:43 [PATCH] Fix FetchRefcursors issues
Previous Message Nicolae Vartolomei 2021-12-30 13:01:32 BUG: CC_send_query_append incomplete error handling