From 5fbc27a0ea7413f7957565cab9cfff4329a28b57 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Thu, 24 Jul 2025 07:12:19 -0500 Subject: [PATCH] fork error handling --- repertory/repertory/src/ui/handlers.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/repertory/repertory/src/ui/handlers.cpp b/repertory/repertory/src/ui/handlers.cpp index f1e3f9e9..5b88378d 100644 --- a/repertory/repertory/src/ui/handlers.cpp +++ b/repertory/repertory/src/ui/handlers.cpp @@ -721,6 +721,7 @@ auto handlers::launch_process(provider_type prov, std::string_view name, args.insert(std::next(args.begin(), 4U), "/MIN"); args.insert(std::next(args.begin(), 5U), repertory_binary_); #else // !defined(_WIN32) + args.insert(std::next(args.begin()), "-f"); args.insert(args.begin(), repertory_binary_); #endif // defined(_WIN32) @@ -736,17 +737,28 @@ auto handlers::launch_process(provider_type prov, std::string_view name, const_cast(exec_args.data())); #else // !defined(_WIN32) auto pid = fork(); + if (pid < 0) { + exit(1); + } + if (pid == 0) { - setsid(); + if (setsid() < 0) { + exit(1); + } chdir("/"); + close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); - open("/dev/null", O_RDONLY); - open("/dev/null", O_WRONLY); - open("/dev/null", O_WRONLY); + + if (open("/dev/null", O_RDONLY) != 0 || + open("/dev/null", O_WRONLY) != 1 || + open("/dev/null", O_WRONLY) != 2) { + exit(1); + } execvp(exec_args.at(0U), const_cast(exec_args.data())); + exit(1); } else { signal(SIGCHLD, SIG_IGN); }