[Issue 16502] New: spawnProcess does not throw on exec errors
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Fri Sep 16 17:36:52 PDT 2016
https://issues.dlang.org/show_bug.cgi?id=16502
Issue ID: 16502
Summary: spawnProcess does not throw on exec errors
Product: D
Version: D2
Hardware: All
OS: Linux
Status: NEW
Severity: enhancement
Priority: P1
Component: phobos
Assignee: nobody at puremagic.com
Reporter: freeslave93 at gmail.com
I chose Linux as OS for this issue, but it's legitimate for all Posix.
spawnProcess does not implement proper reporting of errors from exec.
This leads to the situations when execve fails, but spawnProcess does not
throw.
spawnProcess has some checks before fork, but these are not enough.
E.g. create empty file and mark it as executable
touch notreallyexecutable
chmod +x notreallyexecutable
Then write D program:
import std.process;
void main(string[] args)
{
spawnProcess(args[1]);
}
Compile and run:
dmd test.d
./test ./notreallyexecutable
It will not throw.
Error reporting can be implemented via pipe. Open pipe on parent side with
CLOEXEC. It will be inherited in fork. In case of exec errors write some code
to the pipe, e.g. errno code. On success pipe will be closed automatically.
On parent side read from pipe. In case of errors there will be errno code,
otherwise nothing.
--
More information about the Digitalmars-d-bugs
mailing list