lavd/x11grab: disable drawing mouse without XFixes.
authorNicolas George <george@nsup.org>
Tue, 15 Jul 2014 13:37:00 +0000 (15:37 +0200)
committerNicolas George <george@nsup.org>
Thu, 17 Jul 2014 16:11:55 +0000 (18:11 +0200)
Fix a segfault if the XFixes extension is not available on
the X11 server.
Can be reproduced using the VNC server.

libavdevice/x11grab.c

index d38c55d..eb75e62 100644 (file)
@@ -346,8 +346,9 @@ out:
  *          coordinates
  */
 static void
-paint_mouse_pointer(XImage *image, struct x11grab *s)
+paint_mouse_pointer(XImage *image, AVFormatContext *s1)
 {
+    struct x11grab *s = s1->priv_data;
     int x_off = s->x_off;
     int y_off = s->y_off;
     int width = s->width;
@@ -377,6 +378,12 @@ paint_mouse_pointer(XImage *image, struct x11grab *s)
     XChangeWindowAttributes(dpy, w, CWCursor, &attr);
 
     xcim = XFixesGetCursorImage(dpy);
+    if (!xcim) {
+        av_log(s1, AV_LOG_WARNING,
+               "XFixes extension not available, impossible to draw cursor\n");
+        s->draw_mouse = 0;
+        return;
+    }
 
     x = xcim->x - xcim->xhot;
     y = xcim->y - xcim->yhot;
@@ -573,7 +580,7 @@ x11grab_read_packet(AVFormatContext *s1, AVPacket *pkt)
     }
 
     if (s->draw_mouse) {
-        paint_mouse_pointer(image, s);
+        paint_mouse_pointer(image, s1);
     }
 
     return s->frame_size;