From 6a5b8bf6cb7a5f481c3bab6fb285d977851e4e2f Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Wed, 14 Oct 2020 13:16:49 -0700 Subject: dirtree_path: always honor size request. tar asks dirtree_path() to reserve space for a trailing '/', but recent changes broke that for the case that was resolving to just a strdup(). Caught by `export ASAN=1` and `make test_tar`. --- lib/dirtree.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/dirtree.c b/lib/dirtree.c index cc5d0545..736c2db5 100644 --- a/lib/dirtree.c +++ b/lib/dirtree.c @@ -87,8 +87,10 @@ char *dirtree_path(struct dirtree *node, int *plen) char *path; int ii, ll, len; - if (!node->parent) return xstrdup(node->name); ll = len = plen ? *plen : 0; + if (!node->parent) { + return strcpy(path = xzalloc(strlen(node->name)+ll+1), node->name); + } for (nn = node; nn; nn = nn->parent) if ((ii = strlen(nn->name))) len += ii+1-(nn->name[ii-1]=='/'); if (plen) *plen = len; -- cgit v1.2.3