summaryrefslogtreecommitdiff
path: root/ACE/ace/Process.cpp
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-05-07 01:40:41 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-05-07 01:40:41 +0000
commit665fb74beb938de37cb4567fa39575882c10bb97 (patch)
tree65ce22eef2b5ab7c28ba8b33add9089be1282d4b /ACE/ace/Process.cpp
parentd6fd3bfc07b0b9f0fd9e5da4af37afc8bb55b2b1 (diff)
downloadATCD-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.cpp26
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]);
}
}