diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2020-06-14 23:08:35 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2020-06-14 23:08:35 +0000 |
commit | 9bc4b66772565189056af67d2f6ebf5f9fbd142b (patch) | |
tree | e60a48b0b5744e453ff5ecdf5e562e07c1bc09c9 /compat_fts.c | |
parent | bb6266ad99efe5f97667072fdd52437234e94768 (diff) | |
download | mandoc-9bc4b66772565189056af67d2f6ebf5f9fbd142b.tar.gz |
merge rev. 1.58 from OpenBSD (deraadt@):
recallocarray() the string buffer, to avoid leaving such contents
around in the address space. Don't bother doing so for the buffer
which contains aslr'd pointers...
OK millert@
Diffstat (limited to 'compat_fts.c')
-rw-r--r-- | compat_fts.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/compat_fts.c b/compat_fts.c index 01577f50..4f73e9d1 100644 --- a/compat_fts.c +++ b/compat_fts.c @@ -7,7 +7,7 @@ int dummy; #else /* $Id$ */ -/* $OpenBSD: fts.c,v 1.56 2016/09/21 04:38:56 guenther Exp $ */ +/* $OpenBSD: fts.c,v 1.59 2019/06/28 13:32:41 deraadt Exp $ */ /*- * Copyright (c) 1990, 1993, 1994 @@ -575,14 +575,14 @@ fts_sort(FTS *sp, FTSENT *head, int nitems) if (nitems > sp->fts_nitems) { struct _ftsent **a; - sp->fts_nitems = nitems + 40; if ((a = reallocarray(sp->fts_array, - sp->fts_nitems, sizeof(FTSENT *))) == NULL) { + nitems + 40, sizeof(FTSENT *))) == NULL) { free(sp->fts_array); sp->fts_array = NULL; sp->fts_nitems = 0; return (head); } + sp->fts_nitems = nitems + 40; sp->fts_array = a; } for (ap = sp->fts_array, p = head; p; p = p->fts_link) @@ -651,13 +651,14 @@ fts_palloc(FTS *sp, size_t more) errno = ENAMETOOLONG; return (1); } - sp->fts_pathlen += more; - p = realloc(sp->fts_path, sp->fts_pathlen); + p = recallocarray(sp->fts_path, sp->fts_pathlen, + sp->fts_pathlen + more, 1); if (p == NULL) { free(sp->fts_path); sp->fts_path = NULL; return (1); } + sp->fts_pathlen += more; sp->fts_path = p; return (0); } |