<br><br><div class="gmail_quote">On Tue, Jul 1, 2008 at 3:04 PM, Tobias Burnus &lt;<a href="mailto:burnus@net-b.de">burnus@net-b.de</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi all,<br>
<br>
I have Torque 2.3.0 and &nbsp;&quot;qsub&quot; crashes here with an invalid memory<br>
access. The problem is that in src/cmds/qsub.c for running<br>
&quot;qsub file.sh&quot;, one has the following<br>
<br>
 &nbsp; &nbsp;submit_args_str = malloc(sizeof(char) * argslen);<br>
<br>
-&gt; argslen == 8 = strlen(&quot;file.sh&quot;)+1<br>
<br>
And later:<br>
<br>
 &nbsp; &nbsp;for (argi = 1;argi &lt; argc;argi++)<br>
 &nbsp; &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp;strcat(submit_args_str,argv[argi]);<br>
<br>
 &nbsp; &nbsp; &nbsp;if (argi != optind - 1)<br>
 &nbsp; &nbsp; &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp;strcat(submit_args_str,&quot; &quot;);<br>
<br>
here: argi == 1, argc = 2, optind = 1.<br>
Thus: argi != optind - 1<br>
And therefore the two bytes &quot; &quot; (= &#39; &#39; + &#39;\0&#39;) are written,<br>
exceeding the bounds of submit_args_str.<br>
<br>
I did not quickly see how this can be fixed properly.</blockquote></div><br><br>OK, I think I fixed this.&nbsp; When I wrote the code to collect and save
the job&#39;s submit args a couple years ago we didn&#39;t include the script
name, just the options.&nbsp; Someone modified qsub to also collect the
script name, so i think the code should now be the following:<br>
<br>
&nbsp;&nbsp;&nbsp; for (argi = 1;argi &lt; argc;argi++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcat(submit_args_str,argv[argi]);<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (argi != argc - 1)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcat(submit_args_str,&quot; &quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
<br>
The old code use to loop from argi = 1 to optind-1, now it loops from
argi = 1 to argc - 1 so the if block that adds the &quot; &quot; to separate argv
strings needed to be updated as well.&nbsp; This one seems to have been
around a while.<br>