Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/lib/libc/gen/getcap.c,v rcsdiff: /ftp/cvs/cvsroot/src/lib/libc/gen/getcap.c,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.30 retrieving revision 1.34 diff -u -p -r1.30 -r1.34 --- src/lib/libc/gen/getcap.c 1999/09/16 11:44:57 1.30 +++ src/lib/libc/gen/getcap.c 2001/06/25 15:34:08 1.34 @@ -1,4 +1,4 @@ -/* $NetBSD: getcap.c,v 1.30 1999/09/16 11:44:57 lukem Exp $ */ +/* $NetBSD: getcap.c,v 1.34 2001/06/25 15:34:08 mrg Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -41,7 +41,7 @@ #if 0 static char sccsid[] = "@(#)getcap.c 8.3 (Berkeley) 3/25/94"; #else -__RCSID("$NetBSD: getcap.c,v 1.30 1999/09/16 11:44:57 lukem Exp $"); +__RCSID("$NetBSD: getcap.c,v 1.34 2001/06/25 15:34:08 mrg Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -60,16 +60,16 @@ __RCSID("$NetBSD: getcap.c,v 1.30 1999/0 #include #ifdef __weak_alias -__weak_alias(cgetcap,_cgetcap); -__weak_alias(cgetclose,_cgetclose); -__weak_alias(cgetent,_cgetent); -__weak_alias(cgetfirst,_cgetfirst); -__weak_alias(cgetmatch,_cgetmatch); -__weak_alias(cgetnext,_cgetnext); -__weak_alias(cgetnum,_cgetnum); -__weak_alias(cgetset,_cgetset); -__weak_alias(cgetstr,_cgetstr); -__weak_alias(cgetustr,_cgetustr); +__weak_alias(cgetcap,_cgetcap) +__weak_alias(cgetclose,_cgetclose) +__weak_alias(cgetent,_cgetent) +__weak_alias(cgetfirst,_cgetfirst) +__weak_alias(cgetmatch,_cgetmatch) +__weak_alias(cgetnext,_cgetnext) +__weak_alias(cgetnum,_cgetnum) +__weak_alias(cgetset,_cgetset) +__weak_alias(cgetstr,_cgetstr) +__weak_alias(cgetustr,_cgetustr) #endif #define BFRAG 1024 @@ -160,10 +160,6 @@ cgetcap(buf, cap, type) _DIAGASSERT(buf != NULL); _DIAGASSERT(cap != NULL); -#ifdef _DIAGNOSTIC - if (buf == NULL || cap == NULL) - return (NULL); -#endif bp = buf; for (;;) { @@ -220,12 +216,6 @@ cgetent(buf, db_array, name) _DIAGASSERT(buf != NULL); _DIAGASSERT(db_array != NULL); _DIAGASSERT(name != NULL); -#ifdef _DIAGNOSTIC - if (buf == NULL || db_array == NULL || name == NULL) { - errno = EFAULT; - return (-2); - } -#endif return (getent(buf, &dummy, db_array, -1, name, 0, NULL)); } @@ -259,7 +249,7 @@ getent(cap, len, db_array, fd, name, dep char *r_end, *rp = NULL, **db_p; /* pacify gcc */ int myfd = 0, eof, foundit, retval; size_t clen; - char *record, *cbuf; + char *record, *cbuf, *newrecord; int tc_not_resolved; char pbuf[_POSIX_PATH_MAX]; @@ -445,13 +435,15 @@ getent(cap, len, db_array, fd, name, dep pos = rp - record; newsize = r_end - record + BFRAG; - record = realloc(record, newsize); - if (record == NULL) { + newrecord = realloc(record, newsize); + if (newrecord == NULL) { + free(record); if (myfd) (void)close(fd); errno = ENOMEM; return (-2); } + record = newrecord; r_end = record + newsize; rp = record + pos; } @@ -587,14 +579,16 @@ tc_exp: { newsize = r_end - record + diff + BFRAG; tcpos = tcstart - record; tcposend = tcend - record; - record = realloc(record, newsize); - if (record == NULL) { + newrecord = realloc(record, newsize); + if (newrecord == NULL) { + free(record); if (myfd) (void)close(fd); free(icap); errno = ENOMEM; return (-2); } + record = newrecord; r_end = record + newsize; rp = record + pos; tcstart = record + tcpos; @@ -625,12 +619,15 @@ tc_exp: { if (myfd) (void)close(fd); *len = rp - record - 1; /* don't count NUL */ - if (r_end > rp) - if ((record = + if (r_end > rp) { + if ((newrecord = realloc(record, (size_t)(rp - record))) == NULL) { + free(record); errno = ENOMEM; return (-2); } + record = newrecord; + } *cap = record; if (tc_not_resolved) @@ -688,10 +685,6 @@ cgetmatch(buf, name) _DIAGASSERT(buf != NULL); _DIAGASSERT(name != NULL); -#ifdef _DIAGNOSTIC - if (buf == NULL || name == NULL) - return (-1); -#endif /* * Start search at beginning of record. @@ -715,7 +708,10 @@ cgetmatch(buf, name) /* * Match failed, skip to next name in record. */ - bp--; /* a '|' or ':' may have stopped the match */ + if (bp > buf) + bp--; /* a '|' or ':' may have stopped the match */ + else + return (-1); for (;;) if (*bp == '\0' || *bp == ':') return (-1); /* match failed totally */ @@ -732,12 +728,6 @@ cgetfirst(buf, db_array) _DIAGASSERT(buf != NULL); _DIAGASSERT(db_array != NULL); -#ifdef _DIAGNOSTIC - if (buf == NULL || db_array == NULL) { - errno = EFAULT; - return (-2); - } -#endif (void)cgetclose(); return (cgetnext(buf, db_array)); @@ -777,12 +767,6 @@ cgetnext(bp, db_array) _DIAGASSERT(bp != NULL); _DIAGASSERT(db_array != NULL); -#ifdef _DIAGNOSTIC - if (bp == NULL || db_array == NULL) { - errno = EFAULT; - return (-2); - } -#endif if (dbp == NULL) dbp = db_array; @@ -913,17 +897,11 @@ cgetstr(buf, cap, str) const char *bp; char *mp; int len; - char *mem; + char *mem, *newmem; _DIAGASSERT(buf != NULL); _DIAGASSERT(cap != NULL); _DIAGASSERT(str != NULL); -#ifdef _DIAGNOSTIC - if (buf == NULL || cap == NULL || str == NULL) { - errno = EFAULT; - return (-2); - } -#endif /* * Find string capability cap @@ -1010,8 +988,11 @@ cgetstr(buf, cap, str) if (m_room == 0) { size_t size = mp - mem; - if ((mem = realloc(mem, size + SFRAG)) == NULL) + if ((newmem = realloc(mem, size + SFRAG)) == NULL) { + free(mem); return (-2); + } + mem = newmem; m_room = SFRAG; mp = mem + size; } @@ -1023,9 +1004,13 @@ cgetstr(buf, cap, str) /* * Give back any extra memory and return value and success. */ - if (m_room != 0) - if ((mem = realloc(mem, (size_t)(mp - mem))) == NULL) + if (m_room != 0) { + if ((newmem = realloc(mem, (size_t)(mp - mem))) == NULL) { + free(mem); return (-2); + } + mem = newmem; + } *str = mem; return (len); } @@ -1050,17 +1035,11 @@ cgetustr(buf, cap, str) const char *bp; char *mp; int len; - char *mem; + char *mem, *newmem; _DIAGASSERT(buf != NULL); _DIAGASSERT(cap != NULL); _DIAGASSERT(str != NULL); -#ifdef _DIAGNOSTIC - if (buf == NULL || cap == NULL || str == NULL) { - errno = EFAULT; - return (-2); - } -#endif /* * Find string capability cap @@ -1096,8 +1075,11 @@ cgetustr(buf, cap, str) if (m_room == 0) { size_t size = mp - mem; - if ((mem = realloc(mem, size + SFRAG)) == NULL) + if ((newmem = realloc(mem, size + SFRAG)) == NULL) { + free(mem); return (-2); + } + mem = newmem; m_room = SFRAG; mp = mem + size; } @@ -1109,9 +1091,13 @@ cgetustr(buf, cap, str) /* * Give back any extra memory and return value and success. */ - if (m_room != 0) - if ((mem = realloc(mem, (size_t)(mp - mem))) == NULL) + if (m_room != 0) { + if ((newmem = realloc(mem, (size_t)(mp - mem))) == NULL) { + free(mem); return (-2); + } + mem = newmem; + } *str = mem; return (len); } @@ -1135,10 +1121,6 @@ cgetnum(buf, cap, num) _DIAGASSERT(buf != NULL); _DIAGASSERT(cap != NULL); _DIAGASSERT(num != NULL); -#ifdef _DIAGNOSTIC - if (buf == NULL || cap == NULL || num == NULL) - return (-1); -#endif /* * Find numeric capability cap