Index: src/backend/utils/adt/numutils.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/utils/adt/numutils.c,v
retrieving revision 1.49
diff -c -r1.49 numutils.c
*** src/backend/utils/adt/numutils.c	20 Jun 2002 20:29:38 -0000	1.49
--- src/backend/utils/adt/numutils.c	16 Jul 2002 17:51:06 -0000
***************
*** 46,52 ****
  pg_atoi(char *s, int size, int c)
  {
  	long		l = 0;
! 	char	   *badp = (char *) NULL;
  
  	Assert(s);
  
--- 46,52 ----
  pg_atoi(char *s, int size, int c)
  {
  	long		l = 0;
! 	char	   *badp;
  
  	Assert(s);
  
***************
*** 71,77 ****
  	 */
  	if (errno && errno != EINVAL)
  		elog(ERROR, "pg_atoi: error reading \"%s\": %m", s);
! 	if (badp && *badp && (*badp != c))
  		elog(ERROR, "pg_atoi: error in \"%s\": can\'t parse \"%s\"", s, badp);
  
  	switch (size)
--- 71,77 ----
  	 */
  	if (errno && errno != EINVAL)
  		elog(ERROR, "pg_atoi: error reading \"%s\": %m", s);
! 	if (*badp && *badp != c)
  		elog(ERROR, "pg_atoi: error in \"%s\": can\'t parse \"%s\"", s, badp);
  
  	switch (size)
Index: src/backend/utils/adt/tid.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/utils/adt/tid.c,v
retrieving revision 1.31
diff -c -r1.31 tid.c
*** src/backend/utils/adt/tid.c	20 Jun 2002 20:29:38 -0000	1.31
--- src/backend/utils/adt/tid.c	16 Jul 2002 17:51:06 -0000
***************
*** 18,23 ****
--- 18,27 ----
  
  #include "postgres.h"
  
+ #include <errno.h>
+ #include <math.h>
+ #include <limits.h>
+ 
  #include "access/heapam.h"
  #include "catalog/namespace.h"
  #include "utils/builtins.h"
***************
*** 47,52 ****
--- 51,58 ----
  	ItemPointer result;
  	BlockNumber blockNumber;
  	OffsetNumber offsetNumber;
+ 	char	   *badp;
+ 	int			hold_offset;
  
  	for (i = 0, p = str; *p && i < NTIDARGS && *p != RDELIM; p++)
  		if (*p == DELIM || (*p == LDELIM && !i))
***************
*** 55,62 ****
  	if (i < NTIDARGS)
  		elog(ERROR, "invalid tid format: '%s'", str);
  
! 	blockNumber = (BlockNumber) atoi(coord[0]);
! 	offsetNumber = (OffsetNumber) atoi(coord[1]);
  
  	result = (ItemPointer) palloc(sizeof(ItemPointerData));
  
--- 61,76 ----
  	if (i < NTIDARGS)
  		elog(ERROR, "invalid tid format: '%s'", str);
  
! 	errno = 0;
! 	blockNumber = strtoul(coord[0], &badp, 10);
! 	if (errno || *badp != DELIM)
! 		elog(ERROR, "tidin: invalid value.");
! 
! 	hold_offset = strtol(coord[1], &badp, 10);
! 	if (errno || *badp != RDELIM ||
! 		hold_offset > USHRT_MAX || hold_offset < 0)
! 		elog(ERROR, "tidin: invalid value.");
! 	offsetNumber = hold_offset;
  
  	result = (ItemPointer) palloc(sizeof(ItemPointerData));
  
***************
*** 87,93 ****
  	blockNumber = BlockIdGetBlockNumber(blockId);
  	offsetNumber = itemPtr->ip_posid;
  
! 	sprintf(buf, "(%d,%d)", (int) blockNumber, (int) offsetNumber);
  
  	PG_RETURN_CSTRING(pstrdup(buf));
  }
--- 101,107 ----
  	blockNumber = BlockIdGetBlockNumber(blockId);
  	offsetNumber = itemPtr->ip_posid;
  
! 	sprintf(buf, "(%u,%u)", blockNumber, offsetNumber);
  
  	PG_RETURN_CSTRING(pstrdup(buf));
  }
