Re: crash bug on closed connection

From: Jade Koskela <jkoskela0(at)gmail(dot)com>
To: "pgsql-odbc(at)postgresql(dot)org" <pgsql-odbc(at)postgresql(dot)org>
Subject: Re: crash bug on closed connection
Date: 2014-10-15 05:38:55
Message-ID: CAN5ZvqwLXs3z0pxAQOKDthLBdRkP_Md+bryiexdtAHtp0rFBng@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

Here is the end of the log.
I've done some debugging, when CC_send_query_append is called here, it
correctly identifies that there was an error, and exits the function.

res = CC_send_query_append(conn, self->stmt_with_params, qryi, qflag,
SC_get_ancestor(self), appendq); (statement.c:2069)

The result which is returned is not handled correctly (statement.c:2078)

if (appendq)
{
QResultClass *qres, *nres;

if ( res->rstatus == PORES_EMPTY_QUERY && !res->next)
res = NULL;

for (qres = res; qres;)
{
if (qres->command && strnicmp(qres->command, fetch_cmd, 5) == 0)
{
res = qres;
break;
}
nres = qres->next;
if (nres && QR_get_notice(qres) != NULL)
{
if (QR_command_successful(nres) &&
QR_command_nonfatal(qres))
{
QR_set_rstatus(nres, PORES_NONFATAL_ERROR);
}
QR_add_notice(nres, QR_get_notice(qres));
}
qres->next = NULL;
QR_Destructor(qres);
qres = nres;
}
}

There is only a single result, with result.next == NULL.
This part of the code calls the destructor on the only result, but res is
still left pointing at it. After that fun things happen.
It gets a long way before it actually crashes in Exec_with_
parameters_resolved.

On Mon, Oct 13, 2014 at 10:27 PM, Jade Koskela <jkoskela0(at)gmail(dot)com> wrote:

> Also the mac/pc isn't relevant information in the repro that I posted. It
> might as well just be client/server.
>
> On Mon, Oct 13, 2014 at 10:26 PM, Jade Koskela <jkoskela0(at)gmail(dot)com>
> wrote:
>
>> Some of these steps might not be necessary. It might could be
>> accomplished with a kill -9 on postgres. I tried running Postgres on
>> Windows, and force killing it, but then the client always knew the
>> connection was down.
>>
>> When this occurs "in the wild", it is usually related to a timeout, so
>> the fix that was checked in recently for setting tcpKeepAlive might be a
>> workaround.
>>
>> On Mon, Oct 13, 2014 at 4:44 PM, Jade Koskela <jkoskela0(at)gmail(dot)com>
>> wrote:
>>
>>> I have been looking into this crash for a while now, and I finally have
>>> a good repro.
>>>
>>> After digging through it with wireshark I observed this
>>> client tries to send a query
>>> retransmit query
>>> retransmit query
>>> ...
>>> client sends TCP [RST],[ACK]
>>> Now it has crashed, so we restart it again and begin another connection
>>> successfully.
>>>
>>> It seems that the connection has dropped, but the client was never
>>> informed, and it doesn't handle this gracefully.
>>>
>>> I reproed it like this:
>>>
>>> On my mac running postgres server:
>>> Setup port forwarding to emulate a proxy or firewall problem
>>> ssh -L [public ip]:5433:localhost:5432 -N localhost
>>>
>>> On my windows machine:
>>> Connect to port 5433 on my mac
>>> Run a query
>>>
>>> On my mac:
>>> Kill the ssh proxy
>>> sighup postgres
>>> open the ssh proxy again
>>>
>>> On my windows machine:
>>> Run another query (machine still thinks connection is ok)
>>> Crash in psqlodbcw.dll
>>>
>>> > psqlodbc35w.dll!Exec_with_parameters_resolved(StatementClass_ *
>>> stmt=0x0a6f4fa0, int * exec_end=0x083bf3dc) Line 606 + 0x1b bytes C
>>> psqlodbc35w.dll!PGAPI_Execute(void * hstmt=0x0a6f4fa0, unsigned short
>>> flag=1) Line 1147 + 0xd bytes C
>>> psqlodbc35w.dll!SQLExecute(void * StatementHandle=0x0a6f4fa0) Line
>>> 386 + 0xe bytes C
>>> odbc32(dot)dll!_SQLExecute(at)4() + 0x2c1 bytes
>>>
>>> > if (sscanf(cmd , "UPDATE %d", &count) == 1) // here cmd is junk but
>>> not null (0xddddddd)
>>>
>>>
>>>
>>>
>>
>

Attachment Content-Type Size
mylog_tail.txt text/plain 2.9 KB

In response to

Responses

Browse pgsql-odbc by date

  From Date Subject
Next Message Eric Hill 2014-10-15 12:36:55 Re: [BUGS] BUG #11608: ODBC driver crashes after wrong password entered
Previous Message Inoue, Hiroshi 2014-10-14 06:46:08 Re: [BUGS] BUG #11608: ODBC driver crashes after wrong password entered