[Issue 9966] New: Use of spawnlp and spawnl in 'link.c' does not account for paths/filenames with spaces.
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sat Apr 20 01:38:35 PDT 2013
http://d.puremagic.com/issues/show_bug.cgi?id=9966
Summary: Use of spawnlp and spawnl in 'link.c' does not account
for paths/filenames with spaces.
Product: D
Version: D2
Platform: x86_64
OS/Version: Windows
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: psryland at gmail.com
--- Comment #0 from Paul <psryland at gmail.com> 2013-04-20 01:38:33 PDT ---
The call to spawnlp (link.c, line 734ish) passes the variable 'cmd' containing
a filepath to the linker as parameters 2 and 3. However if that path contains
white space, the linker misinterprets the 3rd parameter as multiple command
line arguments.
I think the code should be changed to something like this:
#if _WIN32
if (status == -1)
{ char* quotedCmd = (char *)alloca(strlen(cmd) + 3);
sprintf(quotedCmd,"\"%s\"",cmd);
// spawnlp returns intptr_t in some systems, not int
status = spawnlp(0,cmd,quotedCmd,args,NULL);
}
#endif
a similar issue exists with spawnl (link.c, line 780ish) if the linker
executable should happen to contain a white space.
Appologies for not just submitting a pull request, but I'm very new to the code
(cloned the repo for the first time last night) and am not sure if this is the
correct solution w.r.t coding conventions or the wider issues of paths with or
without white space/quotes.
fyi, the linker path I was using (from sc.ini) was:
LINKCMD64=D:\Program Files (x86)\Microsoft Visual Studio
11.0\VC\bin\amd64\link.exe
-Paul
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list