summaryrefslogtreecommitdiff
path: root/libavdevice/xcbgrab.c
diff options
context:
space:
mode:
authorKusanagi Kouichi <slash@ac.auone-net.jp>2019-11-19 22:59:30 +0900
committerMarton Balint <cus@passwd.hu>2019-12-03 21:13:00 +0100
commit12bbfc4ccaa150e06895691049fa2ea33385d210 (patch)
treed52a9a19726e91a1fa38bc1a45ffa88e7a703cbc /libavdevice/xcbgrab.c
parent5ac8675cb1a4ecb068db9a938e2b371b8792c3f9 (diff)
avdevice/xcbgrab: Handle reply and error properly
Fix a NULL dereference and leaks. Signed-off-by: Kusanagi Kouichi <slash@ac.auone-net.jp> Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavdevice/xcbgrab.c')
-rw-r--r--libavdevice/xcbgrab.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/libavdevice/xcbgrab.c b/libavdevice/xcbgrab.c
index b7e689343e..063fecf838 100644
--- a/libavdevice/xcbgrab.c
+++ b/libavdevice/xcbgrab.c
@@ -168,6 +168,7 @@ static int xcbgrab_frame(AVFormatContext *s, AVPacket *pkt)
"sequence:%u resource_id:%u minor_code:%u major_code:%u.\n",
e->response_type, e->error_code,
e->sequence, e->resource_id, e->minor_code, e->major_code);
+ free(e);
return AVERROR(EACCES);
}
@@ -276,6 +277,7 @@ static int xcbgrab_frame_shm(AVFormatContext *s, AVPacket *pkt)
e->response_type, e->error_code,
e->sequence, e->resource_id, e->minor_code, e->major_code);
+ free(e);
return AVERROR(EACCES);
}
@@ -537,6 +539,8 @@ static int create_stream(AVFormatContext *s)
gc = xcb_get_geometry(c->conn, c->screen->root);
geo = xcb_get_geometry_reply(c->conn, gc, NULL);
+ if (!geo)
+ return AVERROR_EXTERNAL;
if (c->x + c->width > geo->width ||
c->y + c->height > geo->height) {
@@ -546,6 +550,7 @@ static int create_stream(AVFormatContext *s)
c->width, c->height,
c->x, c->y,
geo->width, geo->height);
+ free(geo);
return AVERROR(EINVAL);
}