From 889303cdfe968d6320fb92a8a617a4096076fece Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Wed, 27 Nov 2013 19:06:45 -0500 Subject: * main.c (decode_env_switches): Ensure we have enough space. Reported (with patch) by Gerte Hoogewerf --- main.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/main.c b/main.c index 541fd1f..fa0498f 100644 --- a/main.c +++ b/main.c @@ -2925,16 +2925,14 @@ decode_env_switches (char *envar, unsigned int len) /* Allocate a vector that is definitely big enough. */ argv = alloca ((1 + len + 1) * sizeof (char *)); - /* We need a buffer to copy the value into while we split it into words - and unquote it. */ - buf = alloca (2 * len); - /* getopt will look at the arguments starting at ARGV[1]. Prepend a spacer word. */ argv[0] = 0; argc = 1; - /* Set up in case we need to prepend a dash later. */ + /* We need a buffer to copy the value into while we split it into words + and unquote it. Set up in case we need to prepend a dash later. */ + buf = alloca (1 + len + 1); buf[0] = '-'; p = buf+1; argv[argc] = p; @@ -2956,6 +2954,7 @@ decode_env_switches (char *envar, unsigned int len) } *p = '\0'; argv[++argc] = 0; + assert (p < buf + len + 2); if (argv[1][0] != '-' && strchr (argv[1], '=') == 0) /* The first word doesn't start with a dash and isn't a variable -- cgit v1.2.3