diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2009-05-07 01:40:41 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2009-05-07 01:40:41 +0000 |
commit | 665fb74beb938de37cb4567fa39575882c10bb97 (patch) | |
tree | 65ce22eef2b5ab7c28ba8b33add9089be1282d4b /ACE/ace/Process.cpp | |
parent | d6fd3bfc07b0b9f0fd9e5da4af37afc8bb55b2b1 (diff) | |
download | ATCD-665fb74beb938de37cb4567fa39575882c10bb97.tar.gz |
ChangeLogTag: Thu May 7 01:32:22 UTC 2009 Jeff Parsons <j.parsons@vanderbilt.edu>
Diffstat (limited to 'ACE/ace/Process.cpp')
-rw-r--r-- | ACE/ace/Process.cpp | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/ACE/ace/Process.cpp b/ACE/ace/Process.cpp index 901a4e53901..bdf17defb44 100644 --- a/ACE/ace/Process.cpp +++ b/ACE/ace/Process.cpp @@ -1180,18 +1180,34 @@ ACE_Process_Options::~ACE_Process_Options (void) int ACE_Process_Options::command_line (const ACE_TCHAR *const argv[]) { - // @@ Factor out the code between this int i = 0; if (argv[i]) { ACE_OS::strcat (command_line_buf_, argv[i]); + while (argv[++i]) { - ACE_OS::strcat (command_line_buf_, - ACE_TEXT (" ")); - ACE_OS::strcat (command_line_buf_, - argv[i]); + // Check to see if the next argument will overflow the + // command_line buffer. + int cur_len = + static_cast<int> ( + ACE_OS::strlen (command_line_buf_) + + ACE_OS:: strlen (argv[i]) + + 2); + + if (cur_len > command_line_buf_len_) + { + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("ACE_Process:command_line: ") + ACE_TEXT ("command line is ") + ACE_TEXT ("longer than %d\n"), + command_line_buf_len_), + 1); + } + + ACE_OS::strcat (command_line_buf_, ACE_TEXT (" ")); + ACE_OS::strcat (command_line_buf_, argv[i]); } } |