diff mbox series

[bug#42680] gnu: emacs: Ignore empty XIM styles.

Message ID 20200802184655.30348-1-leo.prikler@student.tugraz.at
State Accepted
Headers show
Series [bug#42680] gnu: emacs: Ignore empty XIM styles. | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git branch success View Git branch
cbaines/applying patch success View Laminar job

Commit Message

Leo Prikler Aug. 2, 2020, 6:46 p.m. UTC
As of libx11 version 1.6.10, xim may be NULL, which causes a segmentation
fault in the execution of ARRAYELTS.  As a cautionary measure, we
short-circuit this logic.

* gnu/packages/patches/emacs-ignore-empty-xim-styles.patch: New file.
* gnu/packages/emacs.scm (emacs emacs-next)[patches]: Use it.
* gnu/local.mk: Register it.
---
 gnu/local.mk                                  |  1 +
 gnu/packages/emacs.scm                        |  2 ++
 .../emacs-ignore-empty-xim-styles.patch       | 21 +++++++++++++++++++
 3 files changed, 24 insertions(+)
 create mode 100644 gnu/packages/patches/emacs-ignore-empty-xim-styles.patch

--
2.28.0

Comments

Mathieu Othacehe Aug. 3, 2020, 7:21 a.m. UTC | #1
Hey Leo,

>                                         "emacs-fix-scheme-indent-function.patch"
> +                                       "emacs-ignore-empty-xim-styles.patch"
>                                         "emacs-source-date-epoch.patch"))

This patch looks fine, thanks! Did you report this issue upstream?

Mathieu
Leo Prikler Aug. 3, 2020, 9:35 a.m. UTC | #2
Am Montag, den 03.08.2020, 09:21 +0200 schrieb Mathieu Othacehe:
> Hey Leo,
> 
> >                                         "emacs-fix-scheme-indent-
> > function.patch"
> > +                                       "emacs-ignore-empty-xim-
> > styles.patch"
> >                                         "emacs-source-date-
> > epoch.patch"))
> 
> This patch looks fine, thanks! Did you report this issue upstream?
> 
> Mathieu
I have now, it's #42694.
Mathieu Othacehe Aug. 3, 2020, 10:40 a.m. UTC | #3
>> This patch looks fine, thanks! Did you report this issue upstream?
>> 
>> Mathieu
> I have now, it's #42694.

Great, patch pushed with a reference to the proposed fix.

Thanks,

Mathieu
Leo Prikler Aug. 3, 2020, 2:51 p.m. UTC | #4
It turns out, that this bug got fixed upstream independently using a
slightly different patch.
> From: Leo Prikler <leo.prikler@student.tugraz.at>
> Date: Mon, 03 Aug 2020 11:31:49 +0200
> 
> Two days ago, a patch was sent to Guix updating libx11 to a newer
> version in order to fix CVE-2020-14344.  This causes a segmentation
> fault in Emacs when trying to start an X window.  After invoking GDB, I
> found the offending line to be:
> 
>   /* Determine XIC style */
>   xic_style = best_xim_style (FRAME_X_XIM_STYLES (f));
> 
> For some reason, FRAME_X_XIM_STYLES (f) returns NULL here and
> best_xim_style fails when ARRAYELTS is called on it.  I've attached a
> patch, that checks for this case.

Thanks, this is bug#42676, which was solved yesterday.
diff mbox series

Patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 9d295267a8..0144965827 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -917,6 +917,7 @@  dist_patch_DATA =						\
   %D%/packages/patches/emacs-exec-path.patch			\
   %D%/packages/patches/emacs-exwm-fix-fullscreen-states.patch	\
   %D%/packages/patches/emacs-fix-scheme-indent-function.patch	\
+  %D%/packages/patches/emacs-ignore-empty-xim-styles.patch	\
   %D%/packages/patches/emacs-json-reformat-fix-tests.patch	\
   %D%/packages/patches/emacs-highlight-stages-add-gexp.patch	\
   %D%/packages/patches/emacs-hyperbole-toggle-messaging.patch	\
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 8fe5750791..ad8d4b0606 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -85,6 +85,7 @@ 
                 "119ldpk7sgn9jlpyngv5y4z3i7bb8q3xp4p0qqi7i5nq39syd42d"))
               (patches (search-patches "emacs-exec-path.patch"
                                        "emacs-fix-scheme-indent-function.patch"
+                                       "emacs-ignore-empty-xim-styles.patch"
                                        "emacs-source-date-epoch.patch"))
               (modules '((guix build utils)))
               (snippet
@@ -261,6 +262,7 @@  languages.")
          (file-name (git-file-name name version))
          (patches (search-patches "emacs27-exec-path.patch"
                                   "emacs-fix-scheme-indent-function.patch"
+                                  "emacs-ignore-empty-xim-styles.patch"
                                   "emacs-source-date-epoch.patch"))
          (modules (origin-modules (package-source emacs)))
          ;; TODO: once the snippet for `emacs' is changed to not fail when
diff --git a/gnu/packages/patches/emacs-ignore-empty-xim-styles.patch b/gnu/packages/patches/emacs-ignore-empty-xim-styles.patch
new file mode 100644
index 0000000000..936b7a81f7
--- /dev/null
+++ b/gnu/packages/patches/emacs-ignore-empty-xim-styles.patch
@@ -0,0 +1,21 @@ 
+Index: emacs-26.3/src/xfns.c
+===================================================================
+--- emacs-26.3.orig/src/xfns.c
++++ emacs-26.3/src/xfns.c
+@@ -2533,6 +2533,8 @@ xic_free_xfontset (struct frame *f)
+ static XIMStyle
+ best_xim_style (XIMStyles *xim)
+ {
++  if (xim == NULL) goto out;
++
+   int i, j;
+   int nr_supported = ARRAYELTS (supported_xim_styles);
+
+@@ -2541,6 +2543,7 @@ best_xim_style (XIMStyles *xim)
+       if (supported_xim_styles[i] == xim->supported_styles[j])
+	return supported_xim_styles[i];
+
++ out:
+   /* Return the default style.  */
+   return XIMPreeditNothing | XIMStatusNothing;
+ }