commit 56a1e3e3751bbcbabac74ac4e987047945e0336a
parent 45f69478fc27a7198e94cdb384891fd0f3d265f8
Author: MikoĊaj Lenczewski <mblenczewski@gmail.com>
Date: Mon, 21 Aug 2023 01:13:06 +0000
hex-server: handle error in freopen for client input, output and error
Diffstat:
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/src/server.c b/src/server.c
@@ -121,9 +121,20 @@ server_spawn_agent(struct server_state *state, struct agent_state *agent_state)
dbglog("[server] Child process '%" PRIi32 "', exec()-ing agent: '%s'\n",
pid, agent_state->agent);
- freopen("/dev/null", "rb", stdin);
- freopen(agent_state->logfile, "wb", stdout);
- freopen(agent_state->logfile, "wb", stderr);
+ if (!freopen("/dev/null", "rb", stdin)) {
+ perror("freopen(stdin)");
+ exit(EXIT_FAILURE); /* fork()-d process can die without issue */
+ }
+
+ if (!freopen(agent_state->logfile, "wb", stdout)) {
+ perror("freopen(stdout)");
+ exit(EXIT_FAILURE); /* fork()-d process can die without issue */
+ }
+
+ if (!freopen(agent_state->logfile, "wb", stderr)) {
+ perror("freopen(stderr)");
+ exit(EXIT_FAILURE); /* fork()-d process can die without issue */
+ }
if (execve(agent_state->agent, args, env)) {
perror("execve");