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:
parent
122ee29184
commit
f1a70a8260
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue