Subject: bug#37895: 26.3; X protocol error: BadLength (poly request too large or internal Xlib length error) on protocol request 139

From: Robert Pluim <[email-masked]>
Date: Fri, 25 Oct 2019 18:37:01 +0200

>>>>> On Thu, 24 Oct 2019 20:06:35 +0200, Unknown <[email-masked]> said:

    >> So your file included some emoji, is that correct?

    Unknown> Well, that stands to reason. I suspect the doom-modeline package

    Unknown> https://github.com/seagle0128/doom-modeline

    Unknown> which relies heavily on icons and unicode symbols. In particular, there
    Unknown> are icons for the file types and minor modes. I think that opening a
    Unknown> C/C++ file activates some major/minor mode associated with an
    Unknown> icon/symbol triggering the error.

Bug 37786 looks very similar to this (and on Arch Linux as well). If
you can build the emacs-26 branch, could you see if the following
patch fixes your crash?

diff --git i/lisp/international/fontset.el w/lisp/international/fontset.el
index c90d4f53bd..e80a1a87b9 100644
--- i/lisp/international/fontset.el
+++ w/lisp/international/fontset.el
@@ -804,7 +804,6 @@ setup-default-fontset
              #x2664
              (#x2667 . #x2669)
              (#x266C . #x26FF)
-             (#x2700 . #x27bF) ;; Dingbats
              (#x27C0 . #x27EF) ;; Misc Mathematical Symbols-A
              (#x27F0 . #x27FF) ;; Supplemental Arrows-A
              (#x2900 . #x297F) ;; Supplemental Arrows-B
diff --git i/src/ftfont.c w/src/ftfont.c
index 823fb2095c..017b349318 100644
--- i/src/ftfont.c
+++ w/src/ftfont.c
@@ -861,6 +861,9 @@ ftfont_list (struct frame *f, Lisp_Object spec)
 #endif /* FC_CAPABILITY */
 #ifdef FC_FONTFORMAT
                             FC_FONTFORMAT,
+#endif
+#ifdef FC_COLOR
+                             FC_COLOR,
 #endif
                             NULL);
   if (! objset)
@@ -902,6 +905,15 @@ ftfont_list (struct frame *f, Lisp_Object spec)
     {
       Lisp_Object entity;

+      {
+        FcBool b;
+        if (FcPatternGetBool (fontset->fonts[i], FC_COLOR, 0, &b)
+            == FcResultMatch && b)
+          {
+            fprintf (stderr, "Skipping Color font\n");
+            continue;
+          }
+      }
       if (spacing >= 0)
        {
          int this;