diff options
Diffstat (limited to 'winsup/cygwin/winf.cc')
-rw-r--r-- | winsup/cygwin/winf.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/winsup/cygwin/winf.cc b/winsup/cygwin/winf.cc index 01c5cfb65..81c58db4f 100644 --- a/winsup/cygwin/winf.cc +++ b/winsup/cygwin/winf.cc @@ -19,12 +19,16 @@ details. */ #include "sys/cygwin.h" void -linebuf::finish () +linebuf::finish (bool cmdlenoverflow_ok) { if (!ix) add ("", 1); else - buf[--ix] = '\0'; + { + if (ix-- > MAXCYGWINCMDLEN && cmdlenoverflow_ok) + ix = MAXCYGWINCMDLEN - 1; + buf[ix] = '\0'; + } } void @@ -61,7 +65,7 @@ linebuf::prepend (const char *what, int len) } bool -linebuf::fromargv (av& newargv, char *real_path) +linebuf::fromargv (av& newargv, char *real_path, bool cmdlenoverflow_ok) { bool success = true; for (int i = 0; i < newargv.argc; i++) @@ -110,7 +114,7 @@ linebuf::fromargv (av& newargv, char *real_path) add (" ", 1); } - finish (); + finish (cmdlenoverflow_ok); if (ix >= MAXWINCMDLEN) { |