pg_atoi() does range check on int4 data only if

"HAS_LONG_LONG" is defined based on the assumption that
strtol() would return ERANGE if a platform does not support
64-bit integers. In current PostgreSQL 6.5 (and 6.4.2)
distribution, "HAS_LONG_LONG" is defined only if platform
is "alpha". (See include/port/alpha.h) I think the int4
range check should apply to linux_alpha as well. (I have
not tested yet but I guess this might be applicable to
newer Linux/i386 distributions which includes new GCC which
implements long int as 64-bit int.)
This commit is contained in:
Bruce Momjian 1999-07-08 00:27:01 +00:00
parent a6c688d9cd
commit 5035d7b985
1 changed files with 3 additions and 3 deletions

View File

@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/adt/numutils.c,v 1.30 1999/05/25 16:12:14 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/adt/numutils.c,v 1.31 1999/07/08 00:27:01 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@ -76,7 +76,7 @@ pg_atoi(char *s, int size, int c)
switch (size)
{
case sizeof(int32):
#ifdef HAS_LONG_LONG
#if defined(HAVE_LONG_INT_64) || defined(HAVE_LONG_LONG_INT_64)
/* won't get ERANGE on these with 64-bit longs... */
if (l < INT_MIN)
{
@ -88,7 +88,7 @@ pg_atoi(char *s, int size, int c)
errno = ERANGE;
elog(ERROR, "pg_atoi: error reading \"%s\": %m", s);
}
#endif /* HAS_LONG_LONG */
#endif /* HAVE_LONG_INT_64 or HAVE_LONG_LONG_INT_64 */
break;
case sizeof(int16):
if (l < SHRT_MIN)