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 + #include + #include + #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)); }