From 0c27377433985b4dd31e28d29658bcebbeb79c6e Mon Sep 17 00:00:00 2001 From: jilles Date: Sun, 10 Feb 2013 13:28:02 +0000 Subject: 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 5f8f813..4f2eba7 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"); -- cgit v1.1