From bc62617630671fffad64dfb8bb404534a59f3476 Mon Sep 17 00:00:00 2001 From: Jilles Tjoelker Date: Sun, 10 Feb 2013 13:28:02 +0000 Subject: [PATCH] find: In -execdir ... {} +, only pass one file per invocation. This is inefficient but ensures that -execdir ... {} + does not mix files from different directories in one invocation; the command could not access some files. Files from the same directory should really be handled in one invocation but this is somewhat more complicated. --- usr.bin/find/function.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/usr.bin/find/function.c b/usr.bin/find/function.c index 5f8f8130432..4f2eba7433f 100644 --- a/usr.bin/find/function.c +++ b/usr.bin/find/function.c @@ -711,7 +711,13 @@ c_exec(OPTION *option, char ***argvp) for (ep = environ; *ep != NULL; ep++) argmax -= strlen(*ep) + 1 + sizeof(*ep); argmax -= 1 + sizeof(*ep); - new->e_pnummax = argmax / 16; + /* + * Ensure that -execdir ... {} + does not mix files + * from different directories in one invocation. + * Files from the same directory should be handled + * in one invocation but there is no code for it. + */ + new->e_pnummax = new->flags & F_EXECDIR ? 1 : argmax / 16; argmax -= sizeof(char *) * new->e_pnummax; if (argmax <= 0) errx(1, "no space for arguments");