mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-05 19:09:58 +08:00
Revise overflow test in int84() to avoid codegen bug in some older
versions of gcc. We don't really need to explicitly test the limits anyway, just reverse-convert and see if we get the same answer.
This commit is contained in:
parent
de77c55515
commit
0fc7779d2e
@ -7,7 +7,7 @@
|
|||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/int8.c,v 1.32 2001/08/24 14:07:49 petere Exp $
|
* $Header: /cvsroot/pgsql/src/backend/utils/adt/int8.c,v 1.33 2001/09/07 01:33:44 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -67,7 +67,7 @@ int8in(PG_FUNCTION_ARGS)
|
|||||||
* Do our own scan, rather than relying on sscanf which might be
|
* Do our own scan, rather than relying on sscanf which might be
|
||||||
* broken for long long.
|
* broken for long long.
|
||||||
*/
|
*/
|
||||||
while (*ptr && isspace((unsigned char) *ptr)) /* skip leading spaces */
|
while (*ptr && isspace((unsigned char) *ptr)) /* skip leading spaces */
|
||||||
ptr++;
|
ptr++;
|
||||||
if (*ptr == '-') /* handle sign */
|
if (*ptr == '-') /* handle sign */
|
||||||
sign = -1, ptr++;
|
sign = -1, ptr++;
|
||||||
@ -688,11 +688,12 @@ int84(PG_FUNCTION_ARGS)
|
|||||||
int64 val = PG_GETARG_INT64(0);
|
int64 val = PG_GETARG_INT64(0);
|
||||||
int32 result;
|
int32 result;
|
||||||
|
|
||||||
if ((val < INT_MIN) || (val > INT_MAX))
|
|
||||||
elog(ERROR, "int8 conversion to int4 is out of range");
|
|
||||||
|
|
||||||
result = (int32) val;
|
result = (int32) val;
|
||||||
|
|
||||||
|
/* Test for overflow by reverse-conversion. */
|
||||||
|
if ((int64) result != val)
|
||||||
|
elog(ERROR, "int8 conversion to int4 is out of range");
|
||||||
|
|
||||||
PG_RETURN_INT32(result);
|
PG_RETURN_INT32(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user