Bug#892764: stretch-pu: package i3-wm/4.13-1
Package: release.debian.org
Severity: normal
Tags: stretch
User: release.debian.org@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 <stapelberg@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 <hwangcc@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
Reply to: