[Rd] X11/view bug introduced in r90379
Ben Bolker
bbo|ker @end|ng |rom gm@||@com
Sun Sep 27 18:54:48 CEST 2026
r90379 (ripley, 2026-08-08, "avoid [-Wunused-but-set-global] warnings
from clang 23") causes View() to crash, trivially, on my machine with
(partial) sessionInfo():
R Under development (unstable) (2026-09-11 r90524)
Platform: x86_64-pc-linux-gnu
Running under: Pop!_OS 22.04 LTS
locale:
[1] LC_CTYPE=en_CA.UTF-8 LC_NUMERIC=C
The patch below fixes this for me, although I can't say if it is the
best solution/has no other side effects ...
I can submit this as a bug report if that's preferred.
cheers
Ben Bolker
----
From a fresh install/R session:
> View(mtcars)
*** caught segfault ***
address (nil), cause 'memory not mapped'
Traceback:
1: View(mtcars)
Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace
Claude's diagnosis and patch (lightly edited by me):
The commit commented out the line in src/modules/X11/dataentry.c that
fills in the fs_list font list. It was treated as dead code because its
return value, font_set_cnt, was never used. But the next line still
reads fs_list[0]:
// src/modules/X11/dataentry.c:1966-1971 (at r90590)
XFontSetExtents *extent = XExtentsOfFontSet(font_set);
// char **ml;
...
// font_set_cnt = XFontsOfFontSet(font_set, &fs_list, &ml);
DE->text_offset = 2 + fs_list[0]->max_bounds.descent;
fs_list is a static pointer that is never assigned now, so it is NULL.
fs_list[0] then dereferences a null pointer and R crashes. This code
only runs in a multibyte locale (if(mbcslocale)), and your session uses
LANG=en_CA.UTF-8, so any View() of a data frame hits it.
Fix: put back the call but ignore its return value, which still avoids
the compiler warning:
char **ml;
...
XFontsOfFontSet(font_set, &fs_list, &ml);
DE->text_offset = 2 + fs_list[0]->max_bounds.descent;
Index: src/modules/X11/dataentry.c
===================================================================
--- src/modules/X11/dataentry.c (revision 90590)
+++ src/modules/X11/dataentry.c (working copy)
@@ -1964,10 +1964,10 @@
DE->box_w = twidth + 4;
if(mbcslocale) {
XFontSetExtents *extent = XExtentsOfFontSet(font_set);
-// char **ml;
+ char **ml;
DE->box_h = (extent->max_logical_extent.height)
+ (extent->max_logical_extent.height / 5) + 4;
-// font_set_cnt = XFontsOfFontSet(font_set, &fs_list, &ml);
+ XFontsOfFontSet(font_set, &fs_list, &ml);
DE->text_offset = 2 + fs_list[0]->max_bounds.descent;
} else {
DE->box_h = DE->font_info->max_bounds.ascent
More information about the R-devel
mailing list