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: 504A8867.7020103@tpf.co.jp (view raw or flat)
Thread:
Lists: pgsql-odbc
Hi,

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.

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;
		}

regards,
Hiroshi Inoue



In response to

Responses

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-2014 The PostgreSQL Global Development Group