Re: Error reporting goes into an infinite loop when compiled --with-odbcver=0x0250

From: Boszormenyi Zoltan <zb(at)cybertec(dot)at>
To: Hiroshi Inoue <inoue(at)tpf(dot)co(dot)jp>
Cc: Hiroshi Saito <hiroshi(at)winpg(dot)jp>, pgsql-odbc(at)postgresql(dot)org, Hans-Jürgen Schönig <hs(at)cybertec(dot)at>
Subject: Re: Error reporting goes into an infinite loop when compiled --with-odbcver=0x0250
Date: 2012-09-09 07:55:11
Message-ID: 504C4B5F.6080606@cybertec.at
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

Hi,

2012-09-08 01:51 keltezéssel, Hiroshi Inoue írta:
> Hi,
>
> Sorry for the late reoly.

no problem, it seems you didn't receive the personal copies of
my mails. There seems to be a problem with reverse DNS
on your side of the of the globe, I got this for the mails in which
I sent the attachments:

---8<------8<------8<------8<------8<---

The mail system

<hiroshi(at)winpg(dot)jp>: host winpg.jp[219.94.251.195] said: 450 4.7.1 Client host
rejected: cannot find your hostname, [87.118.86.135] (in reply to RCPT TO
command)

Reporting-MTA: dns; km31432.keymachine.de
X-Postfix-Queue-ID: 23F503900523
X-Postfix-Sender: rfc822;zb(at)cybertec(dot)at
Arrival-Date: Fri, 31 Aug 2012 11:21:41 +0000 (UTC)

Final-Recipient: rfc822;hiroshi(at)winpg(dot)jp
Original-Recipient:rfc822;hiroshi(at)winpg(dot)jp
Action: failed
Status: 4.7.1
Remote-MTA: dns; winpg.jp
Diagnostic-Code: smtp; 450 4.7.1 Client host rejected: cannot find your
hostname, [87.118.86.135]

---8<------8<------8<------8<------8<---

> (2012/09/02 2:13), Boszormenyi Zoltan wrote:
>> Hi,
>>
>> 2012-09-01 17:22 keltezéssel, Boszormenyi Zoltan írta:
>>> Hi,
>>>
>>> 2012-09-01 11:19 keltezéssel, Hiroshi Inoue írta:
>>>> Hi,
>>>>
>>>> (2012/08/31 20:21), Boszormenyi Zoltan wrote:
>>>>> Hi,
>>>>>
>>>>> we had to recently test psqlODBC with an older application
>>>>> which doesn't expect ODBC 3.x.
>>>>>
>>>>> The problem is that the client locks up as soon as it encounters
>>>>> an error of any kind, like restarting the server from under the client
>>>>> or simply executing a bad query.
>>>>>
>>>>> After debugging the problem and reading the code of both
>>>>> unixODBC 2.3.1 and psqlODBC (version 09.00.0310 and 09.01.0200),
>>>>> I discovered that the DriverManager calls the driver's SQLError()
>>>>> and SQLGetDiagRec() in a loop
>>>>
>>>> Does the DriverManager call both SQLError() and SQLGetDiagRec()?
>>>
>>> Yes, it detects which is supported and calls that in the error handler
>>> part
>>> of SQLExecute(). In case psqlODBC is compiled using
>>> --with-odbcver=0x0250,
>>> SQLGetDiagRec() is naturally not supported.
>>>
>>>> Could you send me (loop part of) the Mylog output?
>>>
>>> I attached the unixODBC tracefile (/tmp/Trace.txt), there is no "mylog"
>>> lines in it. I execute a single "select * from test;" and this table
>>> doesn't exist.
>>> The trace file shows that the error code is repeated ad infinitum.
>>>
>>> But for my debugging, I didn't use the ODBC tracing, I added my extra
>>> printf()s
>>> so I can see on the client terminal what is going on.
>>
>> Attached is the mylog output for the vanilla psqlODBC 09.01.0200
>> which also shows the infinite loop.
>
> Thanks.
>
> Clearing error info seems to cause the infinite loop.
>
> Simply removing the follwoing code would solve the bug.
> COuld you try it?
>
> if (error->errorpos >= msglen)
> {
> ER_Destructor(error);
> *pgerror = NULL;
> }

Yes, it also solved the infinite loop. But then using the
PODBC_ERROR_CLEAR flag in PGAPI_Error() is unneeded.
Nothing else checks for this flag. Attached is the new patch,
tested with Valgrind, no leaks found in psqlodbc. The only
leaks reported were inside isql and libreadline.

>
> regards,
> Hiroshi Inoue
>
>
>

--
----------------------------------
Zoltán Böszörményi
Cybertec Schönig & Schönig GmbH
Gröhrmühlgasse 26
A-2700 Wiener Neustadt, Austria
Web: http://www.postgresql-support.de
http://www.postgresql.at/

Attachment Content-Type Size
psqlodbc-odbc2.5-fix1.patch text/x-patch 1.2 KB

In response to

Browse pgsql-odbc by date

  From Date Subject
Next Message ranjeeth kumar 2012-09-10 04:32:04 Re: Regarding PostgreSQL BIT datatype binding in ODBC.......
Previous Message Hiroshi Inoue 2012-09-07 23:51:03 Re: Error reporting goes into an infinite loop when compiled --with-odbcver=0x0250