Package: release.debian.org Severity: normal Tags: stretch User: release.debian....@packages.debian.org Usertags: pu
I would like to apply the attached update to the i3-wm package to satisfy a user request (#891919) for a backported upstream fix to address a crash when using window marks and restarting i3 in-place. Please let me know how to proceed. Thanks! -- System Information: Debian Release: buster/sid APT prefers testing APT policy: (990, 'testing'), (500, 'unstable-debug'), (500, 'testing-debug'), (500, 'unstable') Architecture: amd64 (x86_64) Foreign Architectures: i386, armel, mipsel, arm64 Kernel: Linux 4.14.0-3-amd64 (SMP w/12 CPU cores) Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8), LANGUAGE=de_DE.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system)
diff -Nru i3-wm-4.13/debian/changelog i3-wm-4.13/debian/changelog --- i3-wm-4.13/debian/changelog 2016-11-08 19:02:16.000000000 +0100 +++ i3-wm-4.13/debian/changelog 2018-03-12 19:16:41.000000000 +0100 @@ -1,3 +1,9 @@ +i3-wm (4.13-2) stable; urgency=medium + + * cherry-pick patch to “fix crash upon restart when using marks” (Closes: #891919) + + -- Michael Stapelberg <stapelb...@debian.org> Mon, 12 Mar 2018 19:16:41 +0100 + i3-wm (4.13-1) unstable; urgency=medium * New upstream release. diff -Nru i3-wm-4.13/debian/patches/fix-mark-restart-crash.patch i3-wm-4.13/debian/patches/fix-mark-restart-crash.patch --- i3-wm-4.13/debian/patches/fix-mark-restart-crash.patch 1970-01-01 01:00:00.000000000 +0100 +++ i3-wm-4.13/debian/patches/fix-mark-restart-crash.patch 2018-03-12 19:16:07.000000000 +0100 @@ -0,0 +1,112 @@ +Description: fix crash upon restart when using marks +Forwarded: not-needed +Origin: vendor, https://github.com/i3/i3/pull/2779/commits/a5d959cde44e88bffa23a93bdd174b07f280f0e9 +Author: hwangcc23 <hwan...@csie.nctu.edu.tw> +Bug-Debian: 891919 + +--- + +From a5d959cde44e88bffa23a93bdd174b07f280f0e9 Mon Sep 17 00:00:00 2001 +From: +Date: Sun, 21 May 2017 14:34:29 +0800 +Subject: [PATCH] Fix the i3 crash caused by mark + restart commands + +This patch fixes the issue #2511(https://github.com/i3/i3/issues/2511). + +1). Memorize the marks, but only call con_mark once the container has finished parsing. (Credit: This is @Airblader's patch.) + +2). Add a test case 267-regress-mark-restart.t for regression test to check if mark and restart command crash i3. +--- + src/load_layout.c | 19 +++++++++++++++++-- + testcases/t/267-regress-mark-restart.t | 30 ++++++++++++++++++++++++++++++ + 2 files changed, 47 insertions(+), 2 deletions(-) + create mode 100644 testcases/t/267-regress-mark-restart.t + +diff --git a/src/load_layout.c b/src/load_layout.c +index f6f045d26..632c6ec76 100644 +--- a/src/load_layout.c ++++ b/src/load_layout.c +@@ -29,6 +29,8 @@ static bool parsing_focus; + static bool parsing_marks; + struct Match *current_swallow; + static bool swallow_is_empty; ++static int num_marks; ++static char **marks; + + /* This list is used for reordering the focus stack after parsing the 'focus' + * array. */ +@@ -148,6 +150,16 @@ static int json_end_map(void *ctx) { + floating_check_size(json_node); + } + ++ if (num_marks > 0) { ++ for (int i = 0; i < num_marks; i++) { ++ con_mark(json_node, marks[i], MM_ADD); ++ free(marks[i]); ++ } ++ ++ free(marks); ++ num_marks = 0; ++ } ++ + LOG("attaching\n"); + con_attach(json_node, json_node->parent, true); + LOG("Creating window\n"); +@@ -230,8 +242,10 @@ static int json_key(void *ctx, const unsigned char *val, size_t len) { + if (strcasecmp(last_key, "focus") == 0) + parsing_focus = true; + +- if (strcasecmp(last_key, "marks") == 0) ++ if (strcasecmp(last_key, "marks") == 0) { ++ num_marks = 0; + parsing_marks = true; ++ } + + return 1; + } +@@ -261,7 +275,8 @@ static int json_string(void *ctx, const unsigned char *val, size_t len) { + char *mark; + sasprintf(&mark, "%.*s", (int)len, val); + +- con_mark(json_node, mark, MM_ADD); ++ marks = srealloc(marks, (++num_marks) * sizeof(char *)); ++ marks[num_marks - 1] = sstrdup(mark); + } else { + if (strcasecmp(last_key, "name") == 0) { + json_node->name = scalloc(len + 1, 1); +diff --git a/testcases/t/267-regress-mark-restart.t b/testcases/t/267-regress-mark-restart.t +new file mode 100644 +index 000000000..220d765b7 +--- /dev/null ++++ b/testcases/t/267-regress-mark-restart.t +@@ -0,0 +1,30 @@ ++#!perl ++# vim:ts=4:sw=4:expandtab ++# ++# Please read the following documents before working on tests: ++# • http://build.i3wm.org/docs/testsuite.html ++# (or docs/testsuite) ++# ++# • http://build.i3wm.org/docs/lib-i3test.html ++# (alternatively: perldoc ./testcases/lib/i3test.pm) ++# ++# • http://build.i3wm.org/docs/ipc.html ++# (or docs/ipc) ++# ++# • http://onyxneon.com/books/modern_perl/modern_perl_a4.pdf ++# (unless you are already familiar with Perl) ++# ++# Regression test to check if mark and restart commands crash i3 ++# ++use i3test; ++ ++cmd 'open'; ++cmd 'mark foo'; ++ ++cmd 'restart'; ++ ++diag('Checking if i3 still lives'); ++ ++does_i3_live; ++ ++done_testing; diff -Nru i3-wm-4.13/debian/patches/series i3-wm-4.13/debian/patches/series --- i3-wm-4.13/debian/patches/series 1970-01-01 01:00:00.000000000 +0100 +++ i3-wm-4.13/debian/patches/series 2018-03-12 19:12:15.000000000 +0100 @@ -0,0 +1 @@ +fix-mark-restart-crash.patch