From 27a9f05d65f8b50c4340e604795c63e4bf907c18 Mon Sep 17 00:00:00 2001 From: "andrey.bychkov" Date: Wed, 5 Aug 2026 17:38:28 +0300 Subject: [PATCH] fix(PIProcess): handle fork() failure (return value -1) fork() can return -1 on error (too many processes, out of memory). The old code treated pid_ == -1 as a successful fork, entering the parent branch and calling waitpid(-1, ...) which waits for ANY child process. Added explicit check: close pipes, free memory, and return on fork failure. --- libs/main/system/piprocess.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libs/main/system/piprocess.cpp b/libs/main/system/piprocess.cpp index ffa6a871..115b9a69 100644 --- a/libs/main/system/piprocess.cpp +++ b/libs/main/system/piprocess.cpp @@ -319,6 +319,13 @@ void PIProcess::startProc(bool detached) { auto largs = convertToCharArrays(args); auto lenv = convertToCharArrays(env); int pid_ = fork(); + if (pid_ < 0) { + piCoutObj << "\"fork\" error: " << errorString(); + PRIVATE->closeAllPipes(); + delete[] largs; + delete[] lenv; + return; + } if (!detached) PRIVATE->pid = pid_; if (pid_ == 0) { if (!wd.isEmpty()) {