aboutsummaryrefslogtreecommitdiffstats
path: root/libavdevice
diff options
context:
space:
mode:
authorMoritz Barsnick <barsnick@gmx.net>2020-08-05 14:06:53 +0200
committerAndriy Gelman <andriy.gelman@gmail.com>2020-08-15 15:32:52 -0400
commit2250dc40443a2b1e54a8fbcaae9402fcaa1538dd (patch)
treeaf7aca5f38c231e0700c89c8ca8b284a5c96b49f /libavdevice
parent161d7f3fee7467b96832cb8773b740065db194fb (diff)
downloadffmpeg-2250dc40443a2b1e54a8fbcaae9402fcaa1538dd.tar.gz
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>
Diffstat (limited to 'libavdevice')
-rw-r--r--libavdevice/xcbgrab.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/libavdevice/xcbgrab.c b/libavdevice/xcbgrab.c
index 6f6b2dbf15..8ef2a30d02 100644
--- a/libavdevice/xcbgrab.c
+++ b/libavdevice/xcbgrab.c
@@ -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)