1b5975d6bSopenharmony_ciFrom dad97d24d578dbefbebb41829b0ffb9e783cac7b Mon Sep 17 00:00:00 2001 2b5975d6bSopenharmony_ciFrom: Ray Strode <rstrode@redhat.com> 3b5975d6bSopenharmony_ciDate: Fri, 28 Oct 2022 11:21:04 -0400 4b5975d6bSopenharmony_ciSubject: [PATCH] Revert "Handling collision between standard i/o file 5b5975d6bSopenharmony_ci descriptors and newly created ones" 6b5975d6bSopenharmony_ci 7b5975d6bSopenharmony_cig_unix_open_pipe tries to avoid the standard io fd range 8b5975d6bSopenharmony_ciwhen getting pipe fds. This turns out to be a bad idea because 9b5975d6bSopenharmony_cicertain buggy programs rely on it using that range. 10b5975d6bSopenharmony_ci 11b5975d6bSopenharmony_ciThis reverts commit d9ba6150909818beb05573f54f26232063492c5b 12b5975d6bSopenharmony_ci 13b5975d6bSopenharmony_ciCloses: #2795 14b5975d6bSopenharmony_ciReopens: #16 15b5975d6bSopenharmony_ci 16b5975d6bSopenharmony_ciConflict:NA 17b5975d6bSopenharmony_ciReference:https://gitlab.gnome.org/GNOME/glib/-/commit/dad97d24d578dbefbebb41829b0ffb9e783cac7b 18b5975d6bSopenharmony_ci 19b5975d6bSopenharmony_ci--- 20b5975d6bSopenharmony_ci glib/glib-unix.c | 24 ------------------------ 21b5975d6bSopenharmony_ci 1 file changed, 24 deletions(-) 22b5975d6bSopenharmony_ci 23b5975d6bSopenharmony_cidiff --git a/glib/glib-unix.c b/glib/glib-unix.c 24b5975d6bSopenharmony_ciindex 4710c51168..bc152d7663 100644 25b5975d6bSopenharmony_ci--- a/glib/glib-unix.c 26b5975d6bSopenharmony_ci+++ b/glib/glib-unix.c 27b5975d6bSopenharmony_ci@@ -108,17 +108,6 @@ g_unix_open_pipe (int *fds, 28b5975d6bSopenharmony_ci ecode = pipe2 (fds, pipe2_flags); 29b5975d6bSopenharmony_ci if (ecode == -1 && errno != ENOSYS) 30b5975d6bSopenharmony_ci return g_unix_set_error_from_errno (error, errno); 31b5975d6bSopenharmony_ci- /* Don't reassign pipes to stdin, stdout, stderr if closed meanwhile */ 32b5975d6bSopenharmony_ci- else if (fds[0] < 3 || fds[1] < 3) 33b5975d6bSopenharmony_ci- { 34b5975d6bSopenharmony_ci- int old_fds[2] = { fds[0], fds[1] }; 35b5975d6bSopenharmony_ci- gboolean result = g_unix_open_pipe (fds, flags, error); 36b5975d6bSopenharmony_ci- close (old_fds[0]); 37b5975d6bSopenharmony_ci- close (old_fds[1]); 38b5975d6bSopenharmony_ci- 39b5975d6bSopenharmony_ci- if (!result) 40b5975d6bSopenharmony_ci- g_unix_set_error_from_errno (error, errno); 41b5975d6bSopenharmony_ci- } 42b5975d6bSopenharmony_ci else if (ecode == 0) 43b5975d6bSopenharmony_ci return TRUE; 44b5975d6bSopenharmony_ci /* Fall through on -ENOSYS, we must be running on an old kernel */ 45b5975d6bSopenharmony_ci@@ -127,19 +116,6 @@ g_unix_open_pipe (int *fds, 46b5975d6bSopenharmony_ci ecode = pipe (fds); 47b5975d6bSopenharmony_ci if (ecode == -1) 48b5975d6bSopenharmony_ci return g_unix_set_error_from_errno (error, errno); 49b5975d6bSopenharmony_ci- /* Don't reassign pipes to stdin, stdout, stderr if closed meanwhile */ 50b5975d6bSopenharmony_ci- else if (fds[0] < 3 || fds[1] < 3) 51b5975d6bSopenharmony_ci- { 52b5975d6bSopenharmony_ci- int old_fds[2] = { fds[0], fds[1] }; 53b5975d6bSopenharmony_ci- gboolean result = g_unix_open_pipe (fds, flags, error); 54b5975d6bSopenharmony_ci- close (old_fds[0]); 55b5975d6bSopenharmony_ci- close (old_fds[1]); 56b5975d6bSopenharmony_ci- 57b5975d6bSopenharmony_ci- if (!result) 58b5975d6bSopenharmony_ci- g_unix_set_error_from_errno (error, errno); 59b5975d6bSopenharmony_ci- 60b5975d6bSopenharmony_ci- return result; 61b5975d6bSopenharmony_ci- } 62b5975d6bSopenharmony_ci 63b5975d6bSopenharmony_ci if (flags == 0) 64b5975d6bSopenharmony_ci return TRUE; 65b5975d6bSopenharmony_ci-- 66b5975d6bSopenharmony_ciGitLab 67b5975d6bSopenharmony_ci 68