summaryrefslogtreecommitdiffstats
path: root/compat_fts.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2020-06-14 23:08:35 +0000
committerIngo Schwarze <schwarze@openbsd.org>2020-06-14 23:08:35 +0000
commit9bc4b66772565189056af67d2f6ebf5f9fbd142b (patch)
treee60a48b0b5744e453ff5ecdf5e562e07c1bc09c9 /compat_fts.c
parentbb6266ad99efe5f97667072fdd52437234e94768 (diff)
downloadmandoc-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.c11
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);
}