Date: Tuesday, October 27, 2020 @ 20:34:41 Author: heftig Revision: 398947
3.38.1-2: FS#68318 Added: gnome-terminal/trunk/0001-screen-Manually-handle-env-inheritance.patch gnome-terminal/trunk/0002-screen-Move-env-sanitization-from-client.patch gnome-terminal/trunk/0003-screen-Ignore-some-more-environment-variables.patch Modified: gnome-terminal/trunk/PKGBUILD ----------------------------------------------------------+ 0001-screen-Manually-handle-env-inheritance.patch | 66 ++++++++ 0002-screen-Move-env-sanitization-from-client.patch | 107 +++++++++++++ 0003-screen-Ignore-some-more-environment-variables.patch | 26 +++ PKGBUILD | 19 +- 4 files changed, 215 insertions(+), 3 deletions(-) Added: 0001-screen-Manually-handle-env-inheritance.patch =================================================================== --- 0001-screen-Manually-handle-env-inheritance.patch (rev 0) +++ 0001-screen-Manually-handle-env-inheritance.patch 2020-10-27 20:34:41 UTC (rev 398947) @@ -0,0 +1,66 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" <[email protected]> +Date: Tue, 27 Oct 2020 19:50:30 +0000 +Subject: [PATCH] screen: Manually handle env inheritance + +Don't let VTE handle merging the environment; build the merged block +ourselves. This avoids confusion when we reuse the exec data. + +https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/303 +--- + src/terminal-screen.c | 26 +++++++++++++------------- + 1 file changed, 13 insertions(+), 13 deletions(-) + +diff --git a/src/terminal-screen.c b/src/terminal-screen.c +index 844b563c..2442a49d 100644 +--- a/src/terminal-screen.c ++++ b/src/terminal-screen.c +@@ -942,9 +942,7 @@ terminal_screen_exec (TerminalScreen *screen, + &shell); + + gboolean preserve_cwd = FALSE; +- GSpawnFlags spawn_flags = G_SPAWN_SEARCH_PATH_FROM_ENVP; +- if (initial_envv) +- spawn_flags |= VTE_SPAWN_NO_PARENT_ENVV; ++ GSpawnFlags spawn_flags = G_SPAWN_SEARCH_PATH_FROM_ENVP | VTE_SPAWN_NO_PARENT_ENVV; + gs_strfreev char **exec_argv = NULL; + if (!terminal_screen_get_child_command (screen, + argv, +@@ -1431,25 +1429,27 @@ terminal_screen_get_child_environment (TerminalScreen *screen, + { + TerminalApp *app = terminal_app_get (); + char **env; ++ gs_strfreev **current_environ = NULL; + char *e, *v; + GHashTable *env_table; + GHashTableIter iter; + GPtrArray *retval; + guint i; + + env_table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); + +- env = initial_envv; +- if (env) ++ if (initial_envv) ++ env = initial_envv; ++ else ++ env = current_environ = g_get_environ (); ++ ++ for (i = 0; env[i]; ++i) + { +- for (i = 0; env[i]; ++i) +- { +- v = strchr (env[i], '='); +- if (v) +- g_hash_table_replace (env_table, g_strndup (env[i], v - env[i]), g_strdup (v + 1)); +- else +- g_hash_table_replace (env_table, g_strdup (env[i]), NULL); +- } ++ v = strchr (env[i], '='); ++ if (v) ++ g_hash_table_replace (env_table, g_strndup (env[i], v - env[i]), g_strdup (v + 1)); ++ else ++ g_hash_table_replace (env_table, g_strdup (env[i]), NULL); + } + + g_hash_table_remove (env_table, "COLUMNS"); Added: 0002-screen-Move-env-sanitization-from-client.patch =================================================================== --- 0002-screen-Move-env-sanitization-from-client.patch (rev 0) +++ 0002-screen-Move-env-sanitization-from-client.patch 2020-10-27 20:34:41 UTC (rev 398947) @@ -0,0 +1,107 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" <[email protected]> +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 2442a49d..8abc59fd 100644 +--- a/src/terminal-screen.c ++++ b/src/terminal-screen.c +@@ -959,10 +959,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; + +@@ -1452,9 +1450,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 Added: 0003-screen-Ignore-some-more-environment-variables.patch =================================================================== --- 0003-screen-Ignore-some-more-environment-variables.patch (rev 0) +++ 0003-screen-Ignore-some-more-environment-variables.patch 2020-10-27 20:34:41 UTC (rev 398947) @@ -0,0 +1,26 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" <[email protected]> +Date: Tue, 27 Oct 2020 20:16:39 +0000 +Subject: [PATCH] screen: Ignore some more environment variables + +- `GJS_DEBUG_OUTPUT` and `GJS_DEBUG_TOPICS` are set by GNOME Shell. +- `G_ENABLE_DIAGNOSTIC` is set by GNOME Terminal itself. +--- + src/terminal-screen.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/terminal-screen.c b/src/terminal-screen.c +index 8abc59fd..6e8c590d 100644 +--- a/src/terminal-screen.c ++++ b/src/terminal-screen.c +@@ -1457,7 +1457,10 @@ terminal_screen_get_child_environment (TerminalScreen *screen, + 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, "GJS_DEBUG_OUTPUT"); ++ g_hash_table_remove (env_table, "GJS_DEBUG_TOPICS"); + g_hash_table_remove (env_table, "GNOME_DESKTOP_ICON"); ++ g_hash_table_remove (env_table, "G_ENABLE_DIAGNOSTIC"); + g_hash_table_remove (env_table, "INVOCATION_ID"); + g_hash_table_remove (env_table, "JOURNAL_STREAM"); + g_hash_table_remove (env_table, "LINES"); Modified: PKGBUILD =================================================================== --- PKGBUILD 2020-10-27 20:32:13 UTC (rev 398946) +++ PKGBUILD 2020-10-27 20:34:41 UTC (rev 398947) @@ -3,7 +3,7 @@ pkgname=gnome-terminal pkgver=3.38.1 -pkgrel=1 +pkgrel=2 pkgdesc="The GNOME Terminal Emulator" url="https://wiki.gnome.org/Apps/Terminal" arch=(x86_64) @@ -13,8 +13,14 @@ gnome-shell vala yelp-tools git) groups=(gnome) _commit=71b414832b1bf02f748048c59c31de7761181d44 # tags/3.38.1^0 -source=("git+https://gitlab.gnome.org/GNOME/gnome-terminal.git#commit=$_commit") -sha256sums=('SKIP') +source=("git+https://gitlab.gnome.org/GNOME/gnome-terminal.git#commit=$_commit" + 0001-screen-Manually-handle-env-inheritance.patch + 0002-screen-Move-env-sanitization-from-client.patch + 0003-screen-Ignore-some-more-environment-variables.patch) +sha256sums=('SKIP' + '9517a7be3c8debdd7c57390e3c62eb8395daf9b9949614023e385cc8cd91b1e4' + 'c48fe6060b852e136fee7b94b42fce5c8b9ac201720083d0b3edfc22cacdd285' + 'dc80adeee3d1106d6e814c2799a58e1bf4900c967aa7b3ca603f393b5abfcde7') pkgver() { cd $pkgname @@ -23,6 +29,13 @@ prepare() { cd $pkgname + + # https://bugs.archlinux.org/task/68318 + # https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/303 + git apply -3 ../0001-screen-Manually-handle-env-inheritance.patch + git apply -3 ../0002-screen-Move-env-sanitization-from-client.patch + git apply -3 ../0003-screen-Ignore-some-more-environment-variables.patch + NOCONFIGURE=1 ./autogen.sh }
