From patchwork Wed Jun 27 08:21:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Moritz Barsnick X-Patchwork-Id: 9518 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:104:0:0:0:0:0 with SMTP id c4-v6csp552839jad; Wed, 27 Jun 2018 01:22:16 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcozPn264IPwepdDAdnZgZch8LfieZWRTMvXJXH4i7cYQGuyqCXNt3bENbvVQmStXzEA+L0 X-Received: by 2002:adf:80c4:: with SMTP id 62-v6mr4042088wrl.95.1530087736796; Wed, 27 Jun 2018 01:22:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530087736; cv=none; d=google.com; s=arc-20160816; b=hTFP1dDR6/Nn0wuL/H5Y6I36yJzQoH9cjQme+EoVT4AEr/dpA7hoIJkeRXFlSIAIHf VjWQuG0k2qKSwHT7y1H6L2qB+4UEmi6vnQ9HD0x0iHWN6RvyYxjHzHuHLvE/34xIce4M DwCYqwuWW6tx4Kca2s/9BXVCpTx/njp3xrqpyZmDQJmCOl9FrX9+xth/l0YQtbjYgxWS /t9FsL4U0JGWVoWOdYDD/kiG8cJswDTlFz5Cx87lQJ2VCE1u9h1O5ONYy/z6U053THYP qlzlBtqQYjcBBE84Clgrv01HmZg4vGRonqudRPbMadyBTBYWHSysng45+738e6kbh767 PurA== 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:references:in-reply-to:message-id:date :to:from:delivered-to:arc-authentication-results; bh=We/5BjzMvNyWKZtnLW43dIlH/fYsHGy5mi32kPetxdA=; b=PM9GWEAdATZNTuYf/99dD2llol2aZR8TP/bxYMpVi6CmWp86GGCjvLt5XZrU4G6Zon 5+xyF+xrvHhaIxnuxQBc0rfYSie7IQNPWzJdyWAlUuTYGvqVYc8YZsEZs++BUR8Sctaw nIVK7Shck3quIeGuuKK+Ykq4hdLdP1LYqtdgVV44ulk8rn/O0DypnDQge4Go4uio0jfv BNfXecP7WReTsgnZHoe3ZRKxBEJNqSjCE9xREOVohqY790x3qzKM5exBp6cxj0OEK7bb pK9kaJ/sLI1Z5hkOja6IVj9YKj7kcPydqb4Db3OFW7xIw4huhmADPoxjgijgg2tpcirR 78rQ== 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 i3-v6si3309455wrh.196.2018.06.27.01.22.16; Wed, 27 Jun 2018 01:22:16 -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 2BE0168A519; Wed, 27 Jun 2018 11:21:18 +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.17.20]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 36F3268A39E for ; Wed, 27 Jun 2018 11:21:12 +0300 (EEST) Received: from paradise.fritz.box ([79.223.33.43]) by mail.gmx.com (mrgmx102 [212.227.17.168]) with ESMTPSA (Nemesis) id 0MaE4a-1froSF2I8W-00JuDL; Wed, 27 Jun 2018 10:22:07 +0200 From: Moritz Barsnick To: FFmpeg development discussions and patches Date: Wed, 27 Jun 2018 10:21:51 +0200 Message-Id: <20180627082151.9794-1-barsnick@gmx.net> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180626154225.8455-1-barsnick@gmx.net> References: <20180626154225.8455-1-barsnick@gmx.net> X-Provags-ID: V03:K1:I04wtqgLagwNuaSXv5dSVonUDL0w2s2mCAej7QYyhFf+VgPuVfI 7T4JMRgnI7cNjaab6VFWMCgP9aXOnF8Uajd8wB9qe5Ne6N0+iJFBa28VAlrNxkIZ1nR1O5L mhqEuBx241tXdAcjlVCcNigjby0zt0rAUpar1B9hPRmFqkj2CEiP2ep1uUhcHY3FCI7uIs1 PhgH3akkgbOPZAARtibzw== X-UI-Out-Filterresults: notjunk:1; V01:K0:nXnbiafxX3c=:erHDRZ2esIxXqckh0Jc9bN EYO5l+jHZjEyq9UCpK2CvmJDVeC24knoG615UP60+SRCN+Var13UeIqQF/DkQpBdAIjsM7Moq C5hMfxyuie+4cEc8rbGRVoRscpcAi7N73o8TJIvhQTyzHC0+kXKOyYxSFakXsGZe+8tZ5KFZn cGenIjxppUYnseBEF+dieAZ0MtfwDeQr5IXJjtVkn2OqZMJR7TO7tk5ZXtvl+Q4q2++GbfWzx mpcbFRxopsZZbtS36UyiuATwUg/MXpY/pIUwv/IA2zlb/NfCZd127WGayvIzyhS2ZoNQjgpG+ Qdzv/z+r9d4WcGRh9ZQB9tbuD91p3J1BCX9zSuou5MKQFrXNIiG65gfMvyTNaEuZE2vitMYwp WPmGp+DGCJOUEyJdnYr10IJo/yGsJ86JVRVvAH+tITeuz1WnSNw0pNSo06hzJOako49qKtaa3 djlOOL/EBXC/Hp8WQBFOrqNk9+3ii1zmxBoZhqJhXurXjBsEJjTisfDxRHN0vdWZnvG43AZfo Z3DNsc5ZvkBChigrexM5zf9rV2DOCA8O4XjrYQaqYud55iD/hFjYKvVpbUj0wp8LiYquml3Wo xCJiyPAXczEkQos+J8uwADNjtB8M5YJbCuGNC1cXvCT8Op5cuf7Us6tvdfiBdmA1jj20DBeUy o1PNLyxtf7grxHDhp4o0gBqxGmKDPPmg0pWKA8Qdo8FwSIQP65HZCkRQABex7tJb9Y5oVt7CC Vnc9f8otZuWz6UZOvBMKJIX7FRxO5YyVcyGTXk7PI6D2MvipeIpjnxwborM= 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() 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 --- libavdevice/xcbgrab.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libavdevice/xcbgrab.c b/libavdevice/xcbgrab.c index 6d142abd4f..ccab777c6e 100644 --- a/libavdevice/xcbgrab.c +++ b/libavdevice/xcbgrab.c @@ -404,7 +404,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(c, AV_LOG_ERROR, "Cannot get xcb pointer\n"); + return AVERROR(EIO); + } geo = xcb_get_geometry_reply(c->conn, gc, NULL); + if (!geo) { + av_log(c, AV_LOG_ERROR, "Cannot get xcb geometry\n"); + free(p); + return AVERROR(EIO); + } } if (c->follow_mouse && p->same_screen) @@ -537,6 +546,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, "Cannot get xcb geometry\n"); + return AVERROR(EIO); + } if (c->x + c->width > geo->width || c->y + c->height > geo->height) {