mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-04 11:06:48 +02:00
Be a little more careful with the shift computations in QT2QTN and
makeTSQuerySign. The first of these is a live bug, on some platforms, as per bug #5590 from John Regehr. However the consequences seem limited because of the relatively narrow scope of use of QTNode.sign. The shift in makeTSQuerySign is actually safe because TSQS_SIGLEN is unsigned, but it seems like a good idea to insert an explicit cast rather than depend on that.
This commit is contained in:
parent
57641a165f
commit
532a4c3531
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/utils/adt/tsquery_op.c,v 1.9 2010/08/03 00:10:39 tgl Exp $
|
* $PostgreSQL: pgsql/src/backend/utils/adt/tsquery_op.c,v 1.10 2010/08/03 01:50:26 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -209,7 +209,7 @@ makeTSQuerySign(TSQuery a)
|
|||||||
for (i = 0; i < a->size; i++)
|
for (i = 0; i < a->size; i++)
|
||||||
{
|
{
|
||||||
if (ptr->type == QI_VAL)
|
if (ptr->type == QI_VAL)
|
||||||
sign |= ((TSQuerySign) 1) << (ptr->qoperand.valcrc % TSQS_SIGLEN);
|
sign |= ((TSQuerySign) 1) << (((unsigned int) ptr->qoperand.valcrc) % TSQS_SIGLEN);
|
||||||
ptr++;
|
ptr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/utils/adt/tsquery_util.c,v 1.14 2010/08/03 00:10:39 tgl Exp $
|
* $PostgreSQL: pgsql/src/backend/utils/adt/tsquery_util.c,v 1.15 2010/08/03 01:50:27 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -45,7 +45,7 @@ QT2QTN(QueryItem *in, char *operand)
|
|||||||
else if (operand)
|
else if (operand)
|
||||||
{
|
{
|
||||||
node->word = operand + in->qoperand.distance;
|
node->word = operand + in->qoperand.distance;
|
||||||
node->sign = 1 << (in->qoperand.valcrc % 32);
|
node->sign = ((uint32) 1) << (((unsigned int) in->qoperand.valcrc) % 32);
|
||||||
}
|
}
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
|
Loading…
Reference in New Issue
Block a user