[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: