Check the return value from XShmAttach.
diff --git a/vncviewer/X11PixelBuffer.cxx b/vncviewer/X11PixelBuffer.cxx
index f83aa5f..a779427 100644
--- a/vncviewer/X11PixelBuffer.cxx
+++ b/vncviewer/X11PixelBuffer.cxx
@@ -189,7 +189,11 @@
caughtError = false;
old_handler = XSetErrorHandler(XShmAttachErrorHandler);
- XShmAttach(fl_display, shminfo);
+ if (!XShmAttach(fl_display, shminfo)) {
+ XSetErrorHandler(old_handler);
+ goto free_shmaddr;
+ }
+
XSync(fl_display, False);
XSetErrorHandler(old_handler);