diff options
author | Christian Neukirchen <chneukirchen@gmail.com> | 2015-12-10 18:15:17 +0100 |
---|---|---|
committer | Christian Neukirchen <chneukirchen@gmail.com> | 2015-12-10 18:15:17 +0100 |
commit | a27314927acbf7c9f7ece3aa234970986df1d568 (patch) | |
tree | 037b0832f3e7c5f3bd2f69182f5a1b867e006501 /xe.c | |
parent | 458cb67fdeb38a634afe78e5fa9d257bc96d3e05 (diff) | |
download | xe-a27314927acbf7c9f7ece3aa234970986df1d568.tar.gz xe-a27314927acbf7c9f7ece3aa234970986df1d568.tar.xz xe-a27314927acbf7c9f7ece3aa234970986df1d568.zip |
limit argmax to sensible values
Diffstat (limited to 'xe.c')
-rw-r--r-- | xe.c | 9 |
1 files 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; |