Commit 23ab986
committed
mingw: make exit_process() own the process handle on all paths
After "mingw: kill child processes in a gentler way", the ownership of
the HANDLE passed to exit_process() and terminate_process_tree() is
inconsistent. terminate_process_tree() always closes the handle;
exit_process() closes it on success and on the terminate-tree
fallback, but leaks it on the early return where GetExitCodeProcess()
fails or reports the process is no longer STILL_ACTIVE.
mingw_kill() compensated by closing the handle on its own error path,
which is a double-close on every error path that does not hit that
one leaky branch -- the callee has already closed the handle by then.
Coverity flagged the resulting use-after-free as CID 1437238.
Pin down the invariant that exit_process() and
terminate_process_tree() own the handle from the call onward and
close it on every return path; with that, the bogus close in
mingw_kill() goes away.
Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>1 parent 8ad6b22 commit 23ab986
2 files changed
Lines changed: 2 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2269 | 2269 | | |
2270 | 2270 | | |
2271 | 2271 | | |
2272 | | - | |
| 2272 | + | |
2273 | 2273 | | |
2274 | | - | |
2275 | | - | |
2276 | 2274 | | |
2277 | 2275 | | |
2278 | 2276 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
159 | 159 | | |
160 | 160 | | |
161 | 161 | | |
| 162 | + | |
162 | 163 | | |
163 | 164 | | |
164 | 165 | | |
| |||
0 commit comments