[Xlib] Ignoring BadAccess errors

Nekun nekokun at firemail.cc
Tue Apr 20 11:19:28 UTC 2021


Hi all.

Can somebody explain me why BadAlloc and BadAccess errors are ignored in 
Xlib reply processing, but only in certain conditions? As I can see 
(maybe I misunderstood something, please correct), in _Xreply: 
https://cgit.freedesktop.org/xorg/lib/libX11/tree/src/xcb_io.c#n655 , 
after sending a request, at first we process pending responses in input 
buffer and handle it without any exceptions and then we process the last 
response and ignore some errors: BadName and BadFont in some conditions 
described in the Xlib spec: 
https://www.x.org/releases/current/doc/libX11/libX11/libX11.html#Using_the_Default_Error_Handlers 
, and, suddenly, completely ignore BadAccess and BadAlloc. I don't found 
any references for that behavior. In result, I can't trap these errors 
with my error handler if an Xlib request wrapper calls _Xreply 
explicitly. Some wrappers, such as XBell, writes a request to output 
queue, calls the sync handler and then errors are handled without 
exception because XSync adds InputSetFocus to queue, so the target 
request is processed with no-exception logic described above. This issue 
arised when I worked on fixing the broken untrusted context check in GTK 
(GDK) at display opening. I need a function which robustly returns an 
error when we in untrusted context, which returned exactly when client 
is untrusted and not for any other reasons, and throw in the gdk_x_error 
trap. Tried XListHosts and failed for reasons described above. Maybe I 
can use a return value of some function instead of error handling? Seems 
like X11 security extension more often returns fake values for untrusted 
clients rather than errors, but not sure that is possible to distinguish 
between a fake value and a real in any response. Stucked here.


More information about the xorg-devel mailing list