summaryrefslogtreecommitdiffstats
path: root/lib/libc
diff options
context:
space:
mode:
authormarcel <marcel@FreeBSD.org>2012-12-01 17:44:06 +0000
committermarcel <marcel@FreeBSD.org>2012-12-01 17:44:06 +0000
commit5192abbac636f4d423299ad2010b603072124621 (patch)
treea70dd50cb9d7f92c16e3c604fece1c9e8c7f8fbe /lib/libc
parent242dabb510e96151dfa1c14d7e2ffd1db8fc882a (diff)
downloadFreeBSD-src-5192abbac636f4d423299ad2010b603072124621.zip
FreeBSD-src-5192abbac636f4d423299ad2010b603072124621.tar.gz
In globextend() when the pathv vector cannot be (re-)allocated, don't
free and clear the gl_pathv pointer in the glob_t structure. Such breaks the invariant of the glob_t structure, as stated in the comment right in front of the globextend() function. If gl_pathv was non-NULL, then gl_pathc was > 0. Making gl_pathv a NULL pointer without also setting gl_pathc to 0 is wrong. Since we otherwise don't free the memory associated with a glob_t in error cases, it's unlikely that this change will cause a memory leak that wasn't already there to begin with. Callers of glob(3) must call globfree(3) irrespective of whether glob(3) returned an error or not.
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/gen/glob.c7
1 files changed, 1 insertions, 6 deletions
diff --git a/lib/libc/gen/glob.c b/lib/libc/gen/glob.c
index 211b535..07eeaa8 100644
--- a/lib/libc/gen/glob.c
+++ b/lib/libc/gen/glob.c
@@ -718,13 +718,8 @@ globextend(const Char *path, glob_t *pglob, size_t *limit)
pathv = pglob->gl_pathv ?
realloc((char *)pglob->gl_pathv, newsize) :
malloc(newsize);
- if (pathv == NULL) {
- if (pglob->gl_pathv) {
- free(pglob->gl_pathv);
- pglob->gl_pathv = NULL;
- }
+ if (pathv == NULL)
return (GLOB_NOSPACE);
- }
if (pglob->gl_pathv == NULL && pglob->gl_offs > 0) {
/* first time around -- clear initial gl_offs items */
OpenPOWER on IntegriCloud