From bd34ecb2f69373dcb25dfef228f906aacb4ff26e Mon Sep 17 00:00:00 2001 From: delphij Date: Thu, 2 Apr 2009 22:17:02 +0000 Subject: Properly handle malloc() failures. PR: bin/83338 --- lib/libc/gen/getcap.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'lib/libc') diff --git a/lib/libc/gen/getcap.c b/lib/libc/gen/getcap.c index 0f0bb20..d0e4a7b 100644 --- a/lib/libc/gen/getcap.c +++ b/lib/libc/gen/getcap.c @@ -189,7 +189,7 @@ getent(char **cap, u_int *len, char **db_array, int fd, const char *name, { DB *capdbp; char *r_end, *rp, **db_p; - int myfd, eof, foundit, retval, clen; + int myfd, eof, foundit, retval; char *record, *cbuf; int tc_not_resolved; char pbuf[_POSIX_PATH_MAX]; @@ -251,14 +251,16 @@ getent(char **cap, u_int *len, char **db_array, int fd, const char *name, return (retval); } /* save the data; close frees it */ - clen = strlen(record); - cbuf = malloc(clen + 1); - memcpy(cbuf, record, clen + 1); + cbuf = strdup(record); if (capdbp->close(capdbp) < 0) { free(cbuf); return (-2); } - *len = clen; + if (cbuf == NULL) { + errno = ENOMEM; + return (-2); + } + *len = strlen(record); *cap = cbuf; return (retval); } else { -- cgit v1.1