From patchwork Tue Jun 26 15:42:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Moritz Barsnick X-Patchwork-Id: 9511 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:141:0:0:0:0:0 with SMTP id c62-v6csp5507026jad; Tue, 26 Jun 2018 08:42:45 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcGl0CkYoatWjvJNFaeGVEbczfZWKjoUskpXV0DjTFJVb7uPYE+Ikq4m2nGVTXFYH3RP0Gs X-Received: by 2002:a1c:ae8b:: with SMTP id x133-v6mr2154780wme.125.1530027765887; Tue, 26 Jun 2018 08:42:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530027765; cv=none; d=google.com; s=arc-20160816; b=gcRfo2/gjN8AeezpLP6pW9a+/J3WXygaoSdQQlweZodjaA1IqaGlBOwoJwlbFmp4hK tRSYi39t3HjMlTKjkR21JIsvRZjfMNBPdBnhW1JM38fz2ZSRocVLgV5bIHks2IP9jYzY f6amSIAU6OSacwwNWvv2PcelOJBFrFJcnrTVbxhfjAc74oWxnkCi/bkm8bpOfUXMOEDZ +HnLlN8gRiSHk2Vt0nYiaMgQN4Wtvy904KWpcrghoQvrSqZKEo2kQV8uyzE9xThWq+rK SV4V6WpiZpjXkGbjH91JzenbdlXOK+6L0NbABBhZSCT8/USyjhnr+LmXawgojIDdPsKj i61Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:delivered-to :arc-authentication-results; bh=Pu/iAUHQTj4e0IQVtOSpGbDN++OCvzQsmcTemrwaw7Y=; b=jTE6aM68kNYht2DLKh/1N8f2Iy8lR3mf+4JwdvhdAJe2wSq6I7lqrzGBQzGMkId4LQ s5LxpKxMWkdr2FBlDNHiQQhl1gbgGNYcLttNc8T8L4dyHt3f941ERTPWy31M6e/DKK3K RopJyWut6QQJ1+KY0juadI2pfW6HtGt4nwLV/PSMXx+1gWTSikL6UvkeIhgkI4K0hBM7 azLsVWvlujTXCnIIJD1AufOLiyYsDo98qq6BnKRngJM+k8TuXP/0OYHVTUUiUYSgtzRL /UykCFQgNE1WGJtnWuT1J/PGyePNottlbOco4AJ/yHvxxiOrEbW9CZfuWofi0i+8RtTR baiA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id v188-v6si1995984wma.45.2018.06.26.08.42.44; Tue, 26 Jun 2018 08:42:45 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D653968A40A; Tue, 26 Jun 2018 18:41:46 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B726668A2C8 for ; Tue, 26 Jun 2018 18:41:39 +0300 (EEST) Received: from paradise.fritz.box ([79.223.33.7]) by mail.gmx.com (mrgmx002 [212.227.17.190]) with ESMTPSA (Nemesis) id 0MTjua-1fgbWM3uZU-00QVTs; Tue, 26 Jun 2018 17:42:35 +0200 From: Moritz Barsnick To: FFmpeg development discussions and patches Date: Tue, 26 Jun 2018 17:42:25 +0200 Message-Id: <20180626154225.8455-1-barsnick@gmx.net> X-Mailer: git-send-email 2.14.4 X-Provags-ID: V03:K1:ITTVB19IDF1w3Zo/PK/i+Cw7fRvPIHVAcZuJmD5Q3wGbqW/bS2W G0HcRSgkNmlouDUzz+v/Qcr/EX5tso+Ax8Isg4q+6bRQBz7rnVZIii6Y1Ii6Wyzp8ksmIr6 ypj/PNAOeaHvpLCffA9NJIQkIp6iueuUfeJZS+ZpU7Yu0YvhP2YQADcm0WDukPU3RyQtPBh EZeRsYRsv7lPj+uEhbQFQ== X-UI-Out-Filterresults: notjunk:1; V01:K0:XiUBOxYzPic=:5q1XQHSAUTki3DaiaSRLYq +cyCHnMS3RdS5B/mNWIFT0HJ+gzLP86vENU7AX8DZ13eeZsec77x3Aarc238vd/90yfmhBirr alomn0JoT3h4PNgbFyYfBu3G08efgEotXVf/Ba2BR0P7gfyBPcfdN/kO1uH1+CRSod4mXDioW jjW6zwiOnhjdmKid6S2c9NTwv/vJNLL6W0Ec+Q44zoBOQ9mNJS1QEx+kPl/SBEUnAoffOi8ik Mi1o8tTLrI5zgOviGB7VixrKf8ZQmKOs6JU4VTEIeIqshHRlbR2X/mq8BpgsY/be1KbP9W2nr VneGJc1rkMPzhTB4+TCokz+tq0RnBoDBLmdECyBwQ/syyTb56Txc7eMzesf+Rvpu1KPop7VhU dH2emUQ3t8qPD9Hw160XObzJ/9WIFSdOI04LoIaT/YMKMWvRVe6IfGo3CheKP9DNEN18vqvB0 suPzuHwdWsxMuXtckmJeOg+j2ksvd3jfgShQ96zewOOgkV0SUw1NT8LNaG0FxeRMoAtmDyN4S vf63tsKLhCIPj9JCC4K5NMyAw9CUQh7a8lgCkN7a5LB/k9dQlMOGehTLiBWOatwtUqCxKwW6Y v+agbuw3iGuqwRVRa+xCZs8i4ADDeEyuR4FENo6s7U7QeEoDEueLp/t5KQf7X57gSzMF4erAL mL9IHbVVCBSjILuHAcp45zkOPI65IQsyOnTTwW6YaD8lDKd2kB4ltusoYkCTPKLg0+rKE0Xq8 KnUzePIGfVT20FIUaw2vtJDRTYMfCMbh9D7J9x+Y8c/Eglsu0x9X9BE4B2s= Subject: [FFmpeg-devel] [PATCH] avdevice/xcbgrab: check return values of xcb query functions X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Moritz Barsnick MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" xcb_query_pointer_reply() and xcb_get_geometry_reply() return NULL when the display drops. This needs to be checked in order to cleanly exit, because the returned pointers are dereferenced later. Signed-off-by: Moritz Barsnick --- libavdevice/xcbgrab.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/libavdevice/xcbgrab.c b/libavdevice/xcbgrab.c index 6d142abd4f..609445918b 100644 --- a/libavdevice/xcbgrab.c +++ b/libavdevice/xcbgrab.c @@ -404,7 +404,17 @@ 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(c, AV_LOG_ERROR, "Could not get xcb pointer\n"); + ret = AVERROR(EIO); + goto fail; + } geo = xcb_get_geometry_reply(c->conn, gc, NULL); + if (!geo) { + av_log(c, AV_LOG_ERROR, "Could not get xcb geometry\n"); + ret = AVERROR_EOF; + goto fail; + } } if (c->follow_mouse && p->same_screen) @@ -425,8 +435,9 @@ static int xcbgrab_read_packet(AVFormatContext *s, AVPacket *pkt) xcbgrab_draw_mouse(s, pkt, p, geo); #endif - free(p); - free(geo); +fail: + av_free(p); + av_free(geo); return ret; } @@ -537,6 +548,10 @@ 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) { + av_log(c, AV_LOG_ERROR, "Could not get xcb geometry\n"); + return AVERROR(EIO); + } if (c->x + c->width > geo->width || c->y + c->height > geo->height) {