mirror of
https://github.com/MidnightCommander/mc
synced 2025-01-03 18:14:25 +03:00
(do_background): fix leak of file descriptors.
background.c: In function 'do_background': background.c:587:1: error: leak of file descriptor 'comm[0]' []8;;https://cwe.mitre.org/data/definitions/775.htmlCWE-775]8;;] []8;;https://gcc.gnu.org/onlinedocs/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-leak-Werror=analyzer-fd-leak]8;;] 587 | } | ^ 'do_background': events 1-12 | | 527 | if (pipe (comm) == -1) | | ~^~~~~~~~~~~ | | || | | |(1) opened here as read-write | | |(2) when 'pipe' succeeds | | (3) following 'false' branch... |...... | 530 | if (pipe (back_comm) == -1) | | ~~ ~~~~~~~~~~~~~~~~~ | | | || | | | |(5) when 'pipe' succeeds | | | (6) following 'false' branch... | | (4) ...to here |...... | 538 | pid = fork (); | | ~~~ | | | | | (7) ...to here | 539 | if (pid == -1) | | ~ | | | | | (8) following 'false' branch (when 'pid != -1')... |...... | 552 | if (pid == 0) | | ~~ ~ | | | | | | | (10) following 'true' branch (when 'pid == 0')... | | (9) ...to here | 553 | { | 554 | int nullfd; | | ~~~ | | | | | (11) ...to here |...... | 587 | } | | ~ | | | | | (12) 'comm[0]' leaks here | background.c:587:1: error: leak of file descriptor 'back_comm[1]' []8;;https://cwe.mitre.org/data/definitions/775.htmlCWE-775]8;;] []8;;https://gcc.gnu.org/onlinedocs/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-leak-Werror=analyzer-fd-leak]8;;] 587 | } | ^ 'do_background': events 1-12 | | 527 | if (pipe (comm) == -1) | | ~^~~~~~~~~~~ | | || | | |(1) when 'pipe' succeeds | | (2) following 'false' branch... |...... | 530 | if (pipe (back_comm) == -1) | | ~~ ~~~~~~~~~~~~~~~~~ | | | || | | | |(4) opened here as read-write | | | |(5) when 'pipe' succeeds | | | (6) following 'false' branch... | | (3) ...to here |...... | 538 | pid = fork (); | | ~~~ | | | | | (7) ...to here | 539 | if (pid == -1) | | ~ | | | | | (8) following 'false' branch (when 'pid != -1')... |...... | 552 | if (pid == 0) | | ~~ ~ | | | | | | | (10) following 'true' branch (when 'pid == 0')... | | (9) ...to here | 553 | { | 554 | int nullfd; | | ~~~ | | | | | (11) ...to here |...... | 587 | } | | ~ | | | | | (12) 'back_comm[1]' leaks here | background.c:587:1: error: leak of file descriptor 'comm[1]' []8;;https://cwe.mitre.org/data/definitions/775.htmlCWE-775]8;;] []8;;https://gcc.gnu.org/onlinedocs/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-leak-Werror=analyzer-fd-leak]8;;] 587 | } | ^ 'do_background': events 1-12 | | 527 | if (pipe (comm) == -1) | | ~^~~~~~~~~~~ | | || | | |(1) opened here as read-write | | |(2) when 'pipe' succeeds | | (3) following 'false' branch... |...... | 530 | if (pipe (back_comm) == -1) | | ~~ ~~~~~~~~~~~~~~~~~ | | | || | | | |(5) when 'pipe' succeeds | | | (6) following 'false' branch... | | (4) ...to here |...... | 538 | pid = fork (); | | ~~~ | | | | | (7) ...to here | 539 | if (pid == -1) | | ~ | | | | | (8) following 'false' branch (when 'pid != -1')... |...... | 552 | if (pid == 0) | | ~~ ~ | | | | | | | (10) following 'false' branch (when 'pid != 0')... | | (9) ...to here |...... | 583 | ctx->pid = pid; | | ~~~ | | | | | (11) ...to here |...... | 587 | } | | ~ | | | | | (12) 'comm[1]' leaks here | background.c:587:1: error: leak of file descriptor 'back_comm[0]' []8;;https://cwe.mitre.org/data/definitions/775.htmlCWE-775]8;;] []8;;https://gcc.gnu.org/onlinedocs/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-leak-Werror=analyzer-fd-leak]8;;] 587 | } | ^ 'do_background': events 1-12 | | 527 | if (pipe (comm) == -1) | | ~^~~~~~~~~~~ | | || | | |(1) when 'pipe' succeeds | | (2) following 'false' branch... |...... | 530 | if (pipe (back_comm) == -1) | | ~~ ~~~~~~~~~~~~~~~~~ | | | || | | | |(4) opened here as read-write | | | |(5) when 'pipe' succeeds | | | (6) following 'false' branch... | | (3) ...to here |...... | 538 | pid = fork (); | | ~~~ | | | | | (7) ...to here | 539 | if (pid == -1) | | ~ | | | | | (8) following 'false' branch (when 'pid != -1')... |...... | 552 | if (pid == 0) | | ~~ ~ | | | | | | | (10) following 'false' branch (when 'pid != 0')... | | (9) ...to here |...... | 583 | ctx->pid = pid; | | ~~~ | | | | | (11) ...to here |...... | 587 | } | | ~ | | | | | (12) 'back_comm[0]' leaks here | Found by gcc-13 (-fanalyzer-fd-leak). Signed-off-by: Andreas Mohr <and@gmx.li> Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
parent
2edbf44dc0
commit
43a398d76f
@ -553,7 +553,10 @@ do_background (file_op_context_t * ctx, char *info)
|
||||
{
|
||||
int nullfd;
|
||||
|
||||
(void) close (comm[0]);
|
||||
parent_fd = comm[1];
|
||||
|
||||
(void) close (back_comm[1]);
|
||||
from_parent_fd = back_comm[0];
|
||||
|
||||
mc_global.we_are_background = TRUE;
|
||||
@ -580,6 +583,8 @@ do_background (file_op_context_t * ctx, char *info)
|
||||
}
|
||||
else
|
||||
{
|
||||
(void) close (comm[1]);
|
||||
(void) close (back_comm[0]);
|
||||
ctx->pid = pid;
|
||||
register_task_running (ctx, pid, comm[0], back_comm[1], info);
|
||||
return 1;
|
||||
|
Loading…
Reference in New Issue
Block a user