From a27314927acbf7c9f7ece3aa234970986df1d568 Mon Sep 17 00:00:00 2001 From: Christian Neukirchen Date: Thu, 10 Dec 2015 18:15:17 +0100 Subject: limit argmax to sensible values --- xe.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/xe.c b/xe.c index 088db49..5983bb9 100644 --- a/xe.c +++ b/xe.c @@ -219,7 +219,7 @@ run() } int -main(int argc, char *argv[]) +main(int argc, char *argv[], char *envp[]) { char c; int i, cmdend; @@ -235,7 +235,12 @@ main(int argc, char *argv[]) exit(1); argmax = sysconf(_SC_ARG_MAX); - if (argmax <= 0) + while (*envp) // subtract size of environment + argmax -= strlen(*envp++) + 1 + sizeof(*envp); + argmax -= 4 * 1024; // subtract 4k for safety + if (argmax > 128 * 1024) // upper bound + argmax = 128 * 1024; + if (argmax <= 0) { // lower bound argmax = _POSIX_ARG_MAX; traceout = stdout; -- cgit 1.4.1