Skip site navigation (1) Skip section navigation (2)

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

From: Hiroshi Inoue <inoue(at)tpf(dot)co(dot)jp>
To: Boszormenyi Zoltan <zb(at)cybertec(dot)at>
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-07 23:51:03
Message-ID: (view raw, whole thread or download thread mbox)
Lists: pgsql-odbc

Sorry for the late reoly.

(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.


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)
			*pgerror = NULL;

Hiroshi Inoue

In response to


pgsql-odbc by date

Next:From: Boszormenyi ZoltanDate: 2012-09-09 07:55:11
Subject: Re: Error reporting goes into an infinite loop when compiled --with-odbcver=0x0250
Previous:From: Hiroshi SaitoDate: 2012-09-07 15:23:57
Subject: Re: psqlODBC 09.01.0200 Released

Privacy Policy | About PostgreSQL
Copyright © 1996-2017 The PostgreSQL Global Development Group