From 665fb74beb938de37cb4567fa39575882c10bb97 Mon Sep 17 00:00:00 2001 From: parsons Date: Thu, 7 May 2009 01:40:41 +0000 Subject: ChangeLogTag: Thu May 7 01:32:22 UTC 2009 Jeff Parsons --- ACE/ace/Process.cpp | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'ACE/ace/Process.cpp') 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 ( + 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]); } } -- cgit v1.2.1