avdevice/xcbgrab: check return values of xcb query functions

Fixes #7312, segmentation fault on close of X11 server

xcb_query_pointer_reply() and xcb_get_geometry_reply() can return NULL
if e.g. the X server closes or the connection is lost. This needs to
be checked in order to cleanly exit, because the returned pointers are
dereferenced later.

Signed-off-by: Moritz Barsnick <barsnick@gmx.net>
Reviewed-by: Andriy Gelman <andriy.gelman@gmail.com>
This commit is contained in:
Moritz Barsnick 2020-08-05 14:06:53 +02:00 committed by Andriy Gelman
parent 161d7f3fee
commit 2250dc4044
1 changed files with 9 additions and 0 deletions

View File

@ -425,7 +425,16 @@ static int xcbgrab_read_packet(AVFormatContext *s, AVPacket *pkt)
pc = xcb_query_pointer(c->conn, c->screen->root);
gc = xcb_get_geometry(c->conn, c->screen->root);
p = xcb_query_pointer_reply(c->conn, pc, NULL);
if (!p) {
av_log(s, AV_LOG_ERROR, "Failed to query xcb pointer\n");
return AVERROR_EXTERNAL;
}
geo = xcb_get_geometry_reply(c->conn, gc, NULL);
if (!geo) {
av_log(s, AV_LOG_ERROR, "Failed to get xcb geometry\n");
free(p);
return AVERROR_EXTERNAL;
}
}
if (c->follow_mouse && p->same_screen)