Package: xterm Version: 340-1 Severity: important Dear Maintainer,
after updating from 337-1 to 338-1 in testing, xterm crashes with a segfault when certain Unicode characters appear in the buffer. This only happens when I have selected a font using the -fa option. It doesn't seem to matter which font it is. (I've randomly tried a few from my fc-list.) I've installed 340-1 from unstable, but the bug persists. As I came across this issue while reading mails in mutt, I've tried to identify the exact characters causing it. It turned out that these commands cause the crash: $ /usr/bin/printf "\U0001F384" # U+1F384 CHRISTMAS TREE $ /usr/bin/printf "\U0001F385" # U+1F385 FATHER CHRISTMAS $ /usr/bin/printf "\U0001F3E1" # U+1F3E1 HOUSE WITH GARDEN $ /usr/bin/printf "\U0001F644" # U+1F644 FACE WITH ROLLING EYES Whereas these commands work fine: $ /usr/bin/printf "\U0001F601" # U+1F601 GRINNING FACE WITH SMILING EYES $ /usr/bin/printf "\U0001F604" # U+1F604 SMILING FACE WITH OPEN MOUTH AND SMILING EYES To reproduce this bug, run one of the aforementioned commands after starting xterm with e.g. $ xterm -fa 'Noto Mono' When leaving out -fa, xterm doesn't crash. Please find below a backtrace. As the bug was introduced after updating xterm (libfontconfig1 remained untouched during that update), I'm filing this under xterm for the time being. xterm 337-1 doesn't crash. Interestingly, though, in 337-1 all six above-mentioned characters are not displayed at all when running with e.g. -fa 'Noto Mono'. I just see a two-glyph-wide blank space. Whereas in 338-1 and 340-1, the two non-crashing characters U+1F601 and U+1F604 are actually displayed. I've found a bug report from Arch Linux that looks similar: https://bugs.archlinux.org/task/61115 But the last comment there claims the bug disappeared in 340 which is not the case for me. I don't know a great deal about X font handling, so in case you need more info, please try to explain in detail what you need to know. Thanks in advance. Also, I don't care that much if those special glyphs are actually displayed correctly in my xterm or not, it's just that xterm shouldn't crash. Backtrace: Reading symbols from /usr/bin/xterm...Reading symbols from /usr/lib/debug/.build-id/e1/82f855c9d3aa8701e44c1fc1d41e81eb0b0bd6.debug...done. done. (gdb) run -fa 'Noto Mono' Starting program: /usr/bin/xterm -fa 'Noto Mono' [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Program received signal SIGSEGV, Segmentation fault. 0x00007ffff7d662d1 in FcConfigEvaluate (p=0x5555556fdfd0, p_pat=0x5555559ea680, kind=kind@entry=FcMatchFont, e=0x0) at fccfg.c:977 (gdb) bt full #0 0x00007ffff7d662d1 in FcConfigEvaluate (p=0x5555556fdfd0, p_pat=0x5555559ea680, kind=kind@entry=FcMatchFont, e=0x0) at fccfg.c:977 v = {type = FcTypeVoid, u = {s = 0x5555556fd670 "\300\326oUUU", i = 1433392752, b = 1433392752, d = 4.6355706243752135e-310, m = 0x5555556fd670, c = 0x5555556fd670, f = 0x5555556fd670, l = 0x5555556fd670, r = 0x5555556fd670}} vl = {type = 1433007920, u = {s = 0x0, i = 0, b = 0, d = 0, m = 0x0, c = 0x0, f = 0x0, l = 0x0, r = 0x0}} vr = {type = 1436460672, u = {s = 0x0, i = 0, b = 0, d = 0, m = 0x0, c = 0x0, f = 0x0, l = 0x0, r = 0x0}} vle = <optimized out> vre = <optimized out> m = <optimized out> str = <optimized out> op = <optimized out> buf1 = {u = {d = 0, i = 0, l = 0, c = "\000\000\000\000\000\000\000\000 \326oUUU\000\000H\367iUUU\000\000\000\000\000\000\000\000\000\000\200\246\236UUU", '\000' <repeats 18 times>, "\256m\326\367\377\177\000\000\000\000\000\000\000\000\000\000\320\325oUUU\000\000`\367iUUU\000\000\000\000\000\000\000\000\000\000\200\246\236UUU", '\000' <repeats 18 times>, "\256m\326\367\377\177\000\000\000\000\000\000\000\000\000\000\200\325oUUU\000\000x\367iUUU\000\000\000\000\000\000\000\000\000\000\200\246\236UUU", '\000' <repeats 18 times>, "\256m\326\367\377\177\000\000\000\000\000\000\000\000\000\000"...}} buf2 = {u = {d = 0, i = 0, l = 0, c = "\000\000\000\000\000\000\000\000\340\324oUUU\000\000\250\367iUUU\000\000\000\000\000\000\000\000\000\000\025", '\000' <repeats 15 times>, "\a\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\020\300aUUU\000\000\017\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\260\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\002\000\000\000\060", '\000' <repeats 19 times>, "[\000\000\000w", '\000' <repeats 11 times>, "n\000\000\000|\000\000\000\t\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\025", '\000' <repeats 15 times>, "\260\377\377\377\377\377\377\377"...}} #1 0x00007ffff7d66418 in FcConfigEvaluate (p=p@entry=0x5555556fdfd0, p_pat=p_pat@entry=0x5555559ea680, kind=kind@entry=FcMatchFont, e=e@entry=0x555555683b38) at fccfg.c:1003 m = {xx = 1.4821969375237396e-323, xy = 6.9533490418283141e-310, yx = 1.4821969375237396e-323, yy = 1} xx = <optimized out> yy = <optimized out> xy = <optimized out> yx = <optimized out> v = {type = FcTypeMatrix, u = { s = 0x3 <error: Cannot access memory at address 0x3>, i = 3, b = 3, d = 1.4821969375237396e-323, m = 0x3, c = 0x3, f = 0x3, l = 0x3, r = 0x3}} vl = {type = FcTypeVoid, u = {s = 0x5555556fe050 "Noto Color Emoji", i = 1433395280, b = 1433395280, d = 4.6355706245001133e-310, m = 0x5555556fe050, c = 0x5555556fe050, f = 0x5555556fe050, l = 0x5555556fe050, r = 0x5555556fe050}} vr = {type = FcTypeString, u = { s = 0x7ffff7d660a4 <FcConfigCompareValue+708> "\205\300\017\224\300\017\266\300\351\267\375\377\377L\211\346H\211\327\350\364=", i = -136945500, b = -136945500, d = 6.9533490418283141e-310, m = 0x7ffff7d660a4 <FcConfigCompareValue+708>, c = 0x7ffff7d660a4 <FcConfigCompareValue+708>, f = 0x7ffff7d660a4 <FcConfigCompareValue+708>, l = 0x7ffff7d660a4 <FcConfigCompareValue+708>, r = 0x7ffff7d660a4 <FcConfigCompareValue+708>}} vle = <optimized out> vre = <optimized out> m = <optimized out> str = <optimized out> op = FcOpMatrix buf1 = {u = {d = 4.6355706045501377e-310, i = 1432991488, l = 93824993572608, c = "\000\267iUUU\000\000\002\000\000\000\000\000\000\000\300\372iUUU\000\000\354c\326\367\377\177\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\003", '\000' <repeats 15 times>, "\a\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\002\000\000\000UU\000\000\020\300aUUU\000\000\017\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\260\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\002\000\000\000\060", '\000' <repeats 19 times>, "\f\341\327\367\377\177\000\000\000\000\000\000\257\060\000\000\000\355\374*\tLP\204\003\000\000\000\000\000\000\000\256\340\327\367\377\177\000\000\200\334\377\377\264\060\000\000\000"...}} buf2 = {u = {d = 4.6355706344588957e-310, i = 1433596848, l = 93824994177968, c = "\260\363rUUU\000\000\270\220B\365\377\177\000\000\000\000\000\000\000\000\000\000\362H\327\367\377\177\000\000 ", '\000' <repeats 15 times>, "\a\000\000\000\000\000\000\000\060\000\000\000\000\000\000\000\003\000\000\000\377\177\000\000\030\300aUUU\000\000\037\000\000\000\000\000\000\000P\000\000\000\000\000\000\000\260\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\003\000\000\000\060", '\000' <repeats 19 times>, "[\000\000\000w", '\000' <repeats 11 times>, "n\000\000\000|\000\000\000\a\000\000\000\000\000\000\000\037\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\260\377\377\377\377\377\377\377"...}} #2 0x00007ffff7d6755f in FcConfigMatchValueList (values=0x5555556fedb0, t=<optimized out>, kind=FcMatchFont, p_pat=0x5555559ea680, p=0x5555556fdfd0) at fccfg.c:1341 ret = 0x0 e = 0x555555683b38 value = {type = FcTypeString, u = {s = 0x5555556fe880 "", i = 1433397376, b = 1433397376, d = 4.6355706246036694e-310, m = 0x5555556fe880, c = 0x5555556fe880, f = 0x5555556fe880, l = 0x5555556fe880, r = 0x5555556fe880}} v = <optimized out> ret = <optimized out> e = <optimized out> value = <optimized out> v = <optimized out> #3 IA__FcConfigSubstituteWithPat (config=<optimized out>, config@entry=0x555555659f60, p=p@entry=0x5555556fdfd0, p_pat=p_pat@entry=0x5555559ea680, kind=kind@entry=FcMatchFont) at fccfg.c:1742 v = {type = FcTypeVoid, u = { s = 0x7ffff7d7a74c <FcPatternObjectInsertElt+236> "\203E", i = -136861876, b = -136861876, d = 6.9533490459598886e-310, m = 0x7ffff7d7a74c <FcPatternObjectInsertElt+236>, c = 0x7ffff7d7a74c <FcPatternObjectInsertElt+236>, f = 0x7ffff7d7a74c <FcPatternObjectInsertElt+236>, l = 0x7ffff7d7a74c <FcPatternObjectInsertElt+236>, r = 0x7ffff7d7a74c <FcPatternObjectInsertElt+236>}} s = 0x555555668c60 iter = {dummy1 = 0x555555668c60, dummy2 = 0x5555556b4830, dummy3 = 0x55555567d0a0} iter2 = {dummy1 = 0x55555568ee50, dummy2 = 0x5555556aade0, dummy3 = 0x0} r = 0x5555556aadc0 rs = <optimized out> l = <optimized out> value = 0x5555556927e0 vl = <optimized out> m = 0x5555556fdfd0 strs = <optimized out> object = <optimized out> elt = 0x5555556a6370 e = 0x5555556feb60 i = <optimized out> nobjs = 53 retval = 1 tst = 0x5555556925e0 #4 0x00007ffff7d779bd in IA__FcFontRenderPrepare (config=0x555555659f60, pat=pat@entry=0x5555559ea680, font=0x7ffff5428840) at fcmatch.c:719 new = 0x5555556fdfd0 i = <optimized out> fe = <optimized out> pe = <optimized out> v = {type = FcTypeBool, u = {s = 0x0, i = 0, b = 0, d = 0, m = 0x0, c = 0x0, f = 0x0, l = 0x0, r = 0x0}} result = FcResultMatch variable = 0 variations = {buf = 0x0, allocated = 0, failed = 0, len = -272072704, size = 1115635585, buf_static = "@\\\337\366\377\177", '\000' <repeats 63 times>, "@\217@", '\000' <repeats 13 times>, "@\237@\000\000\000\000\000P\217@", '\000' <repeats 31 times>} __PRETTY_FUNCTION__ = "IA__FcFontRenderPrepare" #5 0x00007ffff7d77d2b in IA__FcFontSetMatch (config=<optimized out>, sets=sets@entry=0x7fffffffe110, nsets=nsets@entry=1, p=p@entry=0x5555559ea680, result=result@entry=0x7fffffffe108) at fcmatch.c:863 best = <optimized out> __PRETTY_FUNCTION__ = "IA__FcFontSetMatch" #6 0x00005555555a69d3 in findXftGlyph (xw=xw@entry=0x55555564deb0, given=given@entry=0x5555556bbd00, wc=wc@entry=127876) at ../fontutils.c:3782 myReport = 0x0 matchedFont = <optimized out> myFontSets = {0x5555559ea640} myPattern = 0x5555559ea680 myCharSet = 0x55555572f620 check = <optimized out> screen = 0x55555564e058 which = 0x555555652c88 result = 0x0 fontnum = <optimized out> table = {19504, 21304, 23104, 24904, 26704, 28504} n = 0 status = FcResultMatch tag = 0x5555555e2640 "fNorm" #7 0x00005555555c73ec in drawXtermText (xw=xw@entry=0x55555564deb0, attr_flags=attr_flags@entry=0, draw_flags=<optimized out>, draw_flags@entry=0, gc=0x555555659d10, start_x=2, start_y=<optimized out>, chrset=0, text=0x555555674a50, len=1, on_wide=0) at ../util.c:3721 test = <optimized out> part = 127876 filler = 0 replace = 0 '\000' missing = 0 '\000' ch = 127876 needed = <optimized out> currFont = 0x5555556bbd00 tempFont = 0x0 last = 0 old_high = <optimized out> first = 0 old_wide = <optimized out> curX = 2 dpy = <optimized out> font0 = 0x5555556bbd00 values = {function = <optimized out>, plane_mask = <optimized out>, foreground = 15066597, background = <optimized out>, line_width = <optimized out>, line_style = <optimized out>, cap_style = <optimized out>, join_style = <optimized out>, fill_style = <optimized out>, fill_rule = <optimized out>, arc_mode = <optimized out>, tile = <optimized out>, stipple = <optimized out>, ts_x_origin = <optimized out>, ts_y_origin = <optimized out>, font = <optimized out>, subwindow_mode = <optimized out>, graphics_exposures = <optimized out>, clip_x_origin = <optimized out>, clip_y_origin = <optimized out>, clip_mask = <optimized out>, dash_offset = <optimized out>, dashes = <optimized out>} wfont0 = 0x0 currentWin = <optimized out> font = 0x5555556bbd00 wfont = 0x0 x = 2 y = 25 screen = 0x55555564e058 real_length = 1 underline_len = 0 font_width = <optimized out> did_ul = 0 curFont = <optimized out> need_clipping = 0 #8 0x00005555555cc54b in WriteText (xw=xw@entry=0x55555564deb0, str=str@entry=0x555555674a50, len=len@entry=1) at ../util.c:1172 test = 65536 screen = <optimized out> ld = <optimized out> attr_flags = 65536 fg_bg = {fg = 0, bg = 0} cells = 2 currentGC = <optimized out> #9 0x00005555555847f9 in dotext (xw=xw@entry=0x55555564deb0, charset=nrc_ASCII, buf=<optimized out>, len=1) at ../charproc.c:5584 right = <optimized out> width_available = <optimized out> need_wrap = 0 '\000' did_wrap = 0 '\000' width_here = <optimized out> last_chomp = <optimized out> force_wrap = 0 '\000' screen = 0x55555564e058 chars_chomped = <optimized out> next_col = 0 offset = <optimized out> rmargin = 79 #10 0x000055555558a965 in doparsing (xw=xw@entry=0x55555564deb0, c=127876, sp=0x555555611ea0 <myState>) at ../charproc.c:2414 single = <optimized out> this_is_wide = 1 screen = 0x55555564e058 item = 0 count = <optimized out> value = 0 laststate = 6 thischar = 127876 myRect = {top = 1432518496, left = 21845, bottom = 0, right = 0} #11 0x0000555555591265 in VTparse (xw=xw@entry=0x55555564deb0) at ../charproc.c:5377 No locals. #12 0x0000555555591479 in VTRun (xw=0x55555564deb0) at ../charproc.c:7726 screen = 0x55555564e058 #13 0x000055555557898a in main (argc=<optimized out>, argv=<optimized out>) at ../main.c:2826 tblFullscreen = {{name = 0x5555555d963e "Always", code = 2}, { name = 0x5555555d9638 "Never", code = 3}} form_top = 0x55555563db80 menu_top = 0x55555563db80 menu_high = 0 screen = <optimized out> mode = <optimized out> my_class = 0x55555561c260 "XTerm" line_speed = 15 winToEmbedInto = 0 (gdb) quit -- System Information: Debian Release: buster/sid APT prefers testing APT policy: (500, 'testing') Architecture: amd64 (x86_64) Kernel: Linux 4.18.0-3-amd64 (SMP w/8 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US:en (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages xterm depends on: ii libc6 2.28-2 ii libfontconfig1 2.13.1-2 ii libfreetype6 2.9.1-3 ii libice6 2:1.0.9-2 ii libtinfo6 6.1+20181013-1 ii libutempter0 1.1.6-3 ii libx11-6 2:1.6.7-1 ii libxaw7 2:1.0.13-1+b2 ii libxft2 2.3.2-2 ii libxinerama1 2:1.1.4-1 ii libxmu6 2:1.1.2-2 ii libxpm4 1:3.5.12-1 ii libxt6 1:1.1.5-1 ii xbitmaps 1.1.1-2 Versions of packages xterm recommends: ii x11-utils 7.7+4 Versions of packages xterm suggests: pn xfonts-cyrillic <none> -- no debconf information