Re: BUG #5590: undefined shift behavior

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "John Regehr" <regehr(at)cs(dot)utah(dot)edu>
Cc: pgsql-bugs(at)postgresql(dot)org, Oleg Bartunov <oleg(at)sai(dot)msu(dot)su>, Teodor Sigaev <teodor(at)sigaev(dot)ru>
Subject: Re: BUG #5590: undefined shift behavior
Date: 2010-08-02 15:06:18
Message-ID: 16806.1280761578@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

"John Regehr" <regehr(at)cs(dot)utah(dot)edu> writes:
> Bug reference: 5590
> Logged by: John Regehr
> Email address: regehr(at)cs(dot)utah(dot)edu
> PostgreSQL version: head 8/2/10
> Operating system: OSX
> Description: undefined shift behavior
> Details:

> During a "make check" the left-shift operator at tsquery_util.c 48:18 is
> passed a negative right-hand argument a number of times.

Hmm. valcrc is declared as signed int32, so depending on what your
compiler thinks the semantics of % is, this clearly can potentially
happen. I notice the same problem in makeTSQuerySign() in tsquery_op.c.

The fix is presumably to cast the valcrc value to unsigned int before
executing %. However, I'm a bit worried about whether this could change
the results, and if it did whether that would invalidate any on-disk
data structures. Oleg, Teodor, do either TSQuerySign or QTNode.sign
ever get to disk?

John: how did you detect this?

regards, tom lane

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Kevin Grittner 2010-08-02 15:14:16 Re: BUG #5591: Creating and using databases
Previous Message Divyaprakash 2010-08-02 14:20:33 BUG #5591: Creating and using databases