BUG: CC_send_query_append incomplete error handling

From: Nicolae Vartolomei <nv(at)cloudflare(dot)com>
To: pgsql-odbc(at)postgresql(dot)org
Subject: BUG: CC_send_query_append incomplete error handling
Date: 2021-12-30 13:01:32
Message-ID: CAC5UznEsaG75-Q89z4Ypz1q48UT7O+1U7drUPt6Xs+ma9_hEGQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

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->unixODBC->psqlodbc)

---

nvartolomei

Responses

Browse pgsql-odbc by date

  From Date Subject
Next Message Inoue,Hiroshi 2022-01-04 04:21:49 Re: BUG: CC_send_query_append incomplete error handling
Previous Message Farid z 2021-12-01 23:19:12 ODBC Driver bug report: interval data types SQLColAttribute SQL_DESC_TYPE_NAME no info returned by driver