fix register_error_handlers NULL deref in pure Wayland build: move vtable entry out of USE_XWAYLAND guard, add empty stub

This commit is contained in:
Window Maker 2026-06-06 06:50:02 +02:00
parent 122ee29184
commit f1a70a8260
5 changed files with 19 additions and 4 deletions

View File

@ -920,6 +920,7 @@ wl_display_open(const char *name)
wl_state.pointer_x = 960;
wl_state.pointer_y = 540;
fprintf(stderr, "TRACE: wl_display_open done, returning NULL\n");
wwarning("wl_backend: virtual pointer initialised at %d,%d",
wl_state.pointer_x, wl_state.pointer_y);
@ -1838,6 +1839,7 @@ void wl_screen_alloc_gcs(WScreen *scr) { (void)scr; }
void
wl_screen_create_internals(WScreen *scr)
{
fprintf(stderr, "TRACE: wl_screen_create_internals\n");
wl_state.scr = scr;
{
FILE *fp = fopen("/tmp/wl_backend_trace.log", "a");

View File

@ -16,6 +16,7 @@
void
wl_screen_open(WScreen *scr)
{
fprintf(stderr, "TRACE: wl_screen_open\n");
/* Set geometry from the headless output created in display_open(). */
scr->scr_width = wl_state.output ?
(int)wl_state.output->width : 1920;
@ -45,6 +46,7 @@ void wl_screen_close(WScreen *scr) { (void)scr; }
int
wl_screen_init_display(WScreen *scr, int screen_number)
{
fprintf(stderr, "TRACE: wl_screen_init_display\n");
(void)screen_number;
scr->w_depth = 32;
scr->rcontext = RCreateContextWayland(scr->scr_width, scr->scr_height, NULL);
@ -68,7 +70,7 @@ wl_screen_init_display(WScreen *scr, int screen_number)
scr->white_pixel = scr->white ? WMColorPixel(scr->white) : 0xFFFFFFFF;
scr->light_pixel = scr->gray ? WMColorPixel(scr->gray) : 0xFFAAAAAA;
scr->dark_pixel = scr->darkGray ? WMColorPixel(scr->darkGray) : 0xFF555555;
fprintf(stderr, "TRACE: wl_screen_init_display done\n");
return 1;
}

View File

@ -60,6 +60,7 @@ unsigned long wl_xdisplay_intern_atom(const char *n) { (void)n; return 0; }
Display *wl_get_x_display(void) { return NULL; }
RImage *wl_xwayland_capture_snapshot(WScreen *s, struct wlr_xwayland_surface *xw) { (void)s; (void)xw; return NULL; }
float wl_xwayland_get_window_opacity(WNativeWindow cw) { (void)cw; return 1.0f; }
void wl_register_error_handlers(void) {}
RContext *wl_create_rcontext(int screen_number, RContextAttributes *attribs)
{ (void)screen_number; return RCreateContextWayland(1920, 1080, attribs); }
#if USE_XWAYLAND
@ -412,8 +413,8 @@ const WMBackend wl_backend = {
.cursors_init = wl_cursors_init,
.cursor_create_named = wl_cursor_create_named,
.shape_combine_mask = wl_shape_combine_mask,
.register_error_handlers = wl_register_error_handlers,
#if USE_XWAYLAND
.register_error_handlers = wl_register_error_handlers,
.texture_create_gc = wl_texture_create_gc,
.texture_free_gc = wl_texture_free_gc,
#endif

View File

@ -788,9 +788,13 @@ static int real_main(int argc, char **argv)
}
/* open display */
fprintf(stderr, "TRACE: before display_open\n");
dpy = (Display *)wm_backend->display_open(DisplayName);
fprintf(stderr, "TRACE: after display_open, dpy=%p\n", dpy);
wm_backend->display_post_open(DisplayName, &multiHead);
fprintf(stderr, "TRACE: before StartUp\n");
StartUp(!multiHead);
fprintf(stderr, "TRACE: after StartUp\n");
if (w_global.screen_count == 1)
multiHead = False;

View File

@ -278,14 +278,16 @@ void StartUp(Bool defaultScreenOnly)
memset(&wKeyBindings, 0, sizeof(wKeyBindings));
fprintf(stderr, "TRACE: StartUp before context_init\n");
wm_backend->context_init();
fprintf(stderr, "TRACE: StartUp after context_init, before atoms\n");
{
int ai;
for (ai = 0; ai < (int)wlengthof(atomNames); ai++)
atom[ai] = (WMNativeAtom)wm_backend->atom_intern(atomNames[ai]);
}
fprintf(stderr, "TRACE: StartUp after atoms\n");
fprintf(stderr, "TRACE: StartUp xdnd_init\n");
w_global.atom.wm.state = atom[0];
w_global.atom.wm.change_state = atom[1];
w_global.atom.wm.protocols = atom[2];
@ -313,10 +315,14 @@ void StartUp(Bool defaultScreenOnly)
w_global.atom.wm.ignore_focus_events = atom[21];
fprintf(stderr, "TRACE: StartUp before xdnd_init\n");
wm_backend->xdnd_init();
fprintf(stderr, "TRACE: StartUp after xdnd_init\n");
fprintf(stderr, "TRACE: StartUp before cursors_init\n");
/* cursors */
wm_backend->cursors_init();
fprintf(stderr, "TRACE: StartUp after cursors_init\n");
/* emergency exit... */
sig_action.sa_handler = handleSig;