svn commit: r243758 - head/lib/libc/gen
Marcel Moolenaar
marcel at FreeBSD.org
Sat Dec 1 17:44:07 UTC 2012
Author: marcel
Date: Sat Dec 1 17:44:06 2012
New Revision: 243758
URL: http://svnweb.freebsd.org/changeset/base/243758
Log:
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.
Modified:
head/lib/libc/gen/glob.c
Modified: head/lib/libc/gen/glob.c
==============================================================================
--- head/lib/libc/gen/glob.c Sat Dec 1 16:44:33 2012 (r243757)
+++ head/lib/libc/gen/glob.c Sat Dec 1 17:44:06 2012 (r243758)
@@ -718,13 +718,8 @@ globextend(const Char *path, glob_t *pgl
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 */
More information about the svn-src-all
mailing list