DotGNU Portable.NET - Bugs: bug #11070, w32 process spawning corrupts...
You are not allowed to post comments on this tracker with your current authentication level.
bug #11070: w32 process spawning corrupts argument list
Submitter: | Carl-Adam Brengesjo <ptah> | ||
Submitted: | Sat 20 Nov 2004 11:43:27 PM UTC | ||
Category: | None | Severity: | 2 - Minor |
Item Group: | None | Status: | None |
Privacy: | Public | Assigned to: | None |
Open/Closed: | Open |
No files currently attached
Depends on the following items: None found
Items that depend on this one: None found
CC list is empty
There are 0 votes so far. Votes easily highlight which items people would like to see resolved in priority, independently of the priority of the item set by tracker managers.
No changes have been made to this item
Discovered this while working with csant and MS.NET 2.0 (beta), but as it's caused in support/spawn.c it affects the rest of pnet aswell. However, I cannot explain why this hasn't showed up before (e.g. when I was using .net 1.1).
A simple testcase causes something simlar to:
fatal error CS2021: File name '"C:\DOCUME~1\ptah\LOCALS~1\Temp\CMD235.tmp"' is too long or invalid
I tried to run the commandline csant output to me, perfect result. no warnings/errors whatsoever, I couldn't get it what was causing the errors.
At first I thought it was .NET 2.0 which internally used temp files during comppile, but very soon I realized it was actually pnet which, for various reasons, rewrites the argument list and executes a complete different one from the one printed by csant.
Anyways, spawn.c writes "the options to a temporary file instead" and then append the arguments list with the filename of this temporary file instead. And it's that temp file csc is whining about.
I was able to work around the problem by increasing the maximum argument list length allowed on line 105 (and thus preventing pnet to use a temp file) but I'm not sure of the consequenses of this, and more permanent solution is required.
PS. Any idea why this havn't shown up before? I mean, we're using csant and that spawn function every time we compile pnetlib on cygwin/w32.
test.cs:
class Test
{
static void Main()
{
}
}
test.csant:
<?xml version="1.0">
<project name="test" default="all">
<target name="all">
<compile
output="test.exe"
target="exe"
unsafe="true"
debug="true"
nostdlib="false"
optimize="false"
install="false"
installasdefault="false">
<sources>
<includes name="**/*.cs"/>
</sources>
<references>
<file name="System.dll"/>
<file name="System.Windows.Forms.dll"/>
</references>
<arg compiler="cscc" value="-flatin1-charset"/>
<arg compiler="csc" value="/nowarn:162"/>
<arg compiler="csc" value="/nowarn:164"/>
<arg compiler="csc" value="/nowarn:169"/>
<arg compiler="csc" value="/nowarn:219"/>
<arg compiler="csc" value="/nowarn:649"/>
<arg compiler="csc" value="/nowarn:414"/>
</compile>
</target>
<target name="clean">
<delete file="test.exe"/>
<delete file="test.pdb"/>
</target>
</project>
console.log:
[ptah@foo:~/dev/test]$ ls -la
total 2
drwxr-xr-x+ 2 ptah None 0 Nov 21 00:26 ./
drwxr-xr-x+ 7 ptah None 0 Nov 20 22:47 ../
-rwxr-xr-x 1 ptah None 41 Nov 20 22:49 test.cs*
-rwxr-xr-x 1 ptah None 894 Nov 20 22:49 test.csant*
[ptah@foo:~/dev/test]$ csant --compiler csc
Building project `test'
Building target `all' for project `test'
csc /nologo /debug+ /unsafe /optimize- /target:exe /out:test.exe /define:DEBUG;TRACE /reference:System.dll;System.Windows.Forms.dll /nowarn:162 /nowarn:164 /nowarn:169 /nowarn:219 /nowarn:649 /nowarn:414 test.cs
fatal error CS2021: File name '"C:\DOCUME~1\ptah\LOCALS~1\Temp\CMD238.tmp"' is too long or invalid
* Target `all' for project `test' failed *
* Project `test' build failed *
[ptah@foo:~/dev/test]$ cd ../pnet/csant
[ptah@foo:~/dev/pnet/csant]$ cat ../support/spawn.c|grep -n 64
105: if(len >= 64)
[ptah@foo:~/dev/pnet/csant]$ scite ../support/spawn.c
[ptah@foo:~/dev/pnet/csant]$ cat ../support/spawn.c|grep -n 1024
105: if(len >= 1024)
[ptah@foo:~/dev/pnet/csant]$ cd ../support && make && cd ../csant && make && make install
...snippet...
[ptah@foo:~/dev/pnet/csant]$ cd ../../test && csant --compiler csc
Building project `test'
Building target `all' for project `test'
csc /nologo /debug+ /unsafe /optimize- /target:exe /out:test.exe /define:DEBUG;TRACE /reference:System.dll;System.Windows.Forms.dl
l /nowarn:162 /nowarn:164 /nowarn:169 /nowarn:219 /nowarn:649 /nowarn:414 test.cs
Leaving target `all' for project `test'
Ending project `test'
[ptah@foo:~/dev/test]$ ./test.exe
[ptah@foo:~/dev/test]$
(running Windows XP SP2 + up-to-date cygwin)