From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: "Jan Alexander Steffens (heftig)" Date: Tue, 27 Oct 2020 19:44:58 +0000 Subject: [PATCH] screen: Move env sanitization from client We always want to sanitize the environment, even when we start with the server's environment instead of the client's one. https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/303 --- src/terminal-client-utils.c | 31 ------------------------------- src/terminal-screen.c | 30 ++++++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 35 deletions(-) diff --git a/src/terminal-client-utils.c b/src/terminal-client-utils.c index f7fb6a81..774e5f50 100644 --- a/src/terminal-client-utils.c +++ b/src/terminal-client-utils.c @@ -119,37 +119,6 @@ terminal_client_append_exec_options (GVariantBuilder *builder, gs_strfreev char **envv; envv = g_get_environ (); - envv = g_environ_unsetenv (envv, "COLORTERM"); - envv = g_environ_unsetenv (envv, "COLUMNS"); - envv = g_environ_unsetenv (envv, "DESKTOP_STARTUP_ID"); - envv = g_environ_unsetenv (envv, "EXIT_CODE"); - envv = g_environ_unsetenv (envv, "EXIT_STATUS"); - envv = g_environ_unsetenv (envv, "GIO_LAUNCHED_DESKTOP_FILE"); - envv = g_environ_unsetenv (envv, "GIO_LAUNCHED_DESKTOP_FILE_PID"); - envv = g_environ_unsetenv (envv, "GNOME_DESKTOP_ICON"); - envv = g_environ_unsetenv (envv, "INVOCATION_ID"); - envv = g_environ_unsetenv (envv, "JOURNAL_STREAM"); - envv = g_environ_unsetenv (envv, "LINES"); - envv = g_environ_unsetenv (envv, "LISTEN_FDNAMES"); - envv = g_environ_unsetenv (envv, "LISTEN_FDS"); - envv = g_environ_unsetenv (envv, "LISTEN_PID"); - envv = g_environ_unsetenv (envv, "MAINPID"); - envv = g_environ_unsetenv (envv, "MANAGERPID"); - envv = g_environ_unsetenv (envv, "NOTIFY_SOCKET"); - envv = g_environ_unsetenv (envv, "NOTIFY_SOCKET"); - envv = g_environ_unsetenv (envv, "PIDFILE"); - envv = g_environ_unsetenv (envv, "PWD"); - envv = g_environ_unsetenv (envv, "REMOTE_ADDR"); - envv = g_environ_unsetenv (envv, "REMOTE_PORT"); - envv = g_environ_unsetenv (envv, "SERVICE_RESULT"); - envv = g_environ_unsetenv (envv, "TERM"); - envv = g_environ_unsetenv (envv, "VTE_VERSION"); - envv = g_environ_unsetenv (envv, "WATCHDOG_PID"); - envv = g_environ_unsetenv (envv, "WATCHDOG_USEC"); - envv = g_environ_unsetenv (envv, "WINDOWID"); - - envv = g_environ_unsetenv (envv, TERMINAL_ENV_SERVICE_NAME); - envv = g_environ_unsetenv (envv, TERMINAL_ENV_SCREEN); g_variant_builder_add (builder, "{sv}", "environ", diff --git a/src/terminal-screen.c b/src/terminal-screen.c index 570d4151..1e95d41b 100644 --- a/src/terminal-screen.c +++ b/src/terminal-screen.c @@ -960,10 +960,8 @@ terminal_screen_exec (TerminalScreen *screen, return FALSE; } - if (!preserve_cwd) { + if (!preserve_cwd) cwd = g_get_home_dir (); - envv = g_environ_unsetenv (envv, "PWD"); - } data->fd_list = fd_list ? g_object_ref(fd_list) : NULL; @@ -1453,9 +1451,33 @@ terminal_screen_get_child_environment (TerminalScreen *screen, g_hash_table_replace (env_table, g_strdup (env[i]), NULL); } + g_hash_table_remove (env_table, "COLORTERM"); g_hash_table_remove (env_table, "COLUMNS"); - g_hash_table_remove (env_table, "LINES"); + g_hash_table_remove (env_table, "DESKTOP_STARTUP_ID"); + g_hash_table_remove (env_table, "EXIT_CODE"); + g_hash_table_remove (env_table, "EXIT_STATUS"); + g_hash_table_remove (env_table, "GIO_LAUNCHED_DESKTOP_FILE"); + g_hash_table_remove (env_table, "GIO_LAUNCHED_DESKTOP_FILE_PID"); g_hash_table_remove (env_table, "GNOME_DESKTOP_ICON"); + g_hash_table_remove (env_table, "INVOCATION_ID"); + g_hash_table_remove (env_table, "JOURNAL_STREAM"); + g_hash_table_remove (env_table, "LINES"); + g_hash_table_remove (env_table, "LISTEN_FDNAMES"); + g_hash_table_remove (env_table, "LISTEN_FDS"); + g_hash_table_remove (env_table, "LISTEN_PID"); + g_hash_table_remove (env_table, "MAINPID"); + g_hash_table_remove (env_table, "MANAGERPID"); + g_hash_table_remove (env_table, "NOTIFY_SOCKET"); + g_hash_table_remove (env_table, "NOTIFY_SOCKET"); + g_hash_table_remove (env_table, "PIDFILE"); + g_hash_table_remove (env_table, "PWD"); + g_hash_table_remove (env_table, "REMOTE_ADDR"); + g_hash_table_remove (env_table, "REMOTE_PORT"); + g_hash_table_remove (env_table, "SERVICE_RESULT"); + g_hash_table_remove (env_table, "TERM"); + g_hash_table_remove (env_table, "VTE_VERSION"); + g_hash_table_remove (env_table, "WATCHDOG_PID"); + g_hash_table_remove (env_table, "WATCHDOG_USEC"); /* WINDOWID does not work correctly ever since we don't use a native * GdkWindow anymore, and it also becomes incorrect if the screen is