فهرست منبع

Don't close file descriptors already handled by AddFileDescriptorCloseActions()

Fixes https://github.com/libsdl-org/SDL/issues/10997
Sam Lantinga 6 ماه پیش
والد
کامیت
3b3c4a79b6
2فایلهای تغییر یافته به همراه1 افزوده شده و 37 حذف شده
  1. 0 36
      src/process/posix/SDL_posixprocess.c
  2. 1 1
      test/testprocess.c

+ 0 - 36
src/process/posix/SDL_posixprocess.c

@@ -219,27 +219,15 @@ bool SDL_SYS_CreateProcessWithProperties(SDL_Process *process, SDL_PropertiesID
             SDL_SetError("posix_spawn_file_actions_adddup2 failed: %s", strerror(errno));
             goto posix_spawn_fail_all;
         }
-        if (posix_spawn_file_actions_addclose(&fa, fd) != 0) {
-            SDL_SetError("posix_spawn_file_actions_addclose failed: %s", strerror(errno));
-            goto posix_spawn_fail_all;
-        }
         break;
     case SDL_PROCESS_STDIO_APP:
         if (!CreatePipe(stdin_pipe)) {
             goto posix_spawn_fail_all;
         }
-        if (posix_spawn_file_actions_addclose(&fa, stdin_pipe[WRITE_END]) != 0) {
-            SDL_SetError("posix_spawn_file_actions_addclose failed: %s", strerror(errno));
-            goto posix_spawn_fail_all;
-        }
         if (posix_spawn_file_actions_adddup2(&fa, stdin_pipe[READ_END], STDIN_FILENO) != 0) {
             SDL_SetError("posix_spawn_file_actions_adddup2 failed: %s", strerror(errno));
             goto posix_spawn_fail_all;
         }
-        if (posix_spawn_file_actions_addclose(&fa, stdin_pipe[READ_END]) != 0) {
-            SDL_SetError("posix_spawn_file_actions_addclose failed: %s", strerror(errno));
-            goto posix_spawn_fail_all;
-        }
         break;
     case SDL_PROCESS_STDIO_NULL:
         if (posix_spawn_file_actions_addopen(&fa, STDIN_FILENO, "/dev/null", O_RDONLY, 0) != 0) {
@@ -261,27 +249,15 @@ bool SDL_SYS_CreateProcessWithProperties(SDL_Process *process, SDL_PropertiesID
             SDL_SetError("posix_spawn_file_actions_adddup2 failed: %s", strerror(errno));
             goto posix_spawn_fail_all;
         }
-        if (posix_spawn_file_actions_addclose(&fa, fd) != 0) {
-            SDL_SetError("posix_spawn_file_actions_addclose failed: %s", strerror(errno));
-            goto posix_spawn_fail_all;
-        }
         break;
     case SDL_PROCESS_STDIO_APP:
         if (!CreatePipe(stdout_pipe)) {
             goto posix_spawn_fail_all;
         }
-        if (posix_spawn_file_actions_addclose(&fa, stdout_pipe[READ_END]) != 0) {
-            SDL_SetError("posix_spawn_file_actions_addclose failed: %s", strerror(errno));
-            goto posix_spawn_fail_all;
-        }
         if (posix_spawn_file_actions_adddup2(&fa, stdout_pipe[WRITE_END], STDOUT_FILENO) != 0) {
             SDL_SetError("posix_spawn_file_actions_adddup2 failed: %s", strerror(errno));
             goto posix_spawn_fail_all;
         }
-        if (posix_spawn_file_actions_addclose(&fa, stdout_pipe[WRITE_END]) != 0) {
-            SDL_SetError("posix_spawn_file_actions_addclose failed: %s", strerror(errno));
-            goto posix_spawn_fail_all;
-        }
         break;
     case SDL_PROCESS_STDIO_NULL:
         if (posix_spawn_file_actions_addopen(&fa, STDOUT_FILENO, "/dev/null", O_WRONLY, 0644) != 0) {
@@ -309,27 +285,15 @@ bool SDL_SYS_CreateProcessWithProperties(SDL_Process *process, SDL_PropertiesID
                 SDL_SetError("posix_spawn_file_actions_adddup2 failed: %s", strerror(errno));
                 goto posix_spawn_fail_all;
             }
-            if (posix_spawn_file_actions_addclose(&fa, fd) != 0) {
-                SDL_SetError("posix_spawn_file_actions_addclose failed: %s", strerror(errno));
-                goto posix_spawn_fail_all;
-            }
             break;
         case SDL_PROCESS_STDIO_APP:
             if (!CreatePipe(stderr_pipe)) {
                 goto posix_spawn_fail_all;
             }
-            if (posix_spawn_file_actions_addclose(&fa, stderr_pipe[READ_END]) != 0) {
-                SDL_SetError("posix_spawn_file_actions_addclose failed: %s", strerror(errno));
-                goto posix_spawn_fail_all;
-            }
             if (posix_spawn_file_actions_adddup2(&fa, stderr_pipe[WRITE_END], STDERR_FILENO) != 0) {
                 SDL_SetError("posix_spawn_file_actions_adddup2 failed: %s", strerror(errno));
                 goto posix_spawn_fail_all;
             }
-            if (posix_spawn_file_actions_addclose(&fa, stderr_pipe[WRITE_END]) != 0) {
-                SDL_SetError("posix_spawn_file_actions_addclose failed: %s", strerror(errno));
-                goto posix_spawn_fail_all;
-            }
             break;
         case SDL_PROCESS_STDIO_NULL:
             if (posix_spawn_file_actions_addopen(&fa, STDERR_FILENO, "/dev/null", O_WRONLY, 0644) != 0) {

+ 1 - 1
test/testprocess.c

@@ -1010,7 +1010,7 @@ static const SDLTest_TestCaseReference processTestBatBadButVulnerability = {
 };
 
 static const SDLTest_TestCaseReference processTestFileRedirection = {
-    process_testFileRedirection, "process_testFileRedirection", "Test redirection from/to files", TEST_DISABLED
+    process_testFileRedirection, "process_testFileRedirection", "Test redirection from/to files", TEST_ENABLED
 };
 
 static const SDLTest_TestCaseReference *processTests[] = {