From patchwork Thu Nov 28 14:31:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 16473 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 7DB9844A4D6 for ; Thu, 28 Nov 2019 16:31:55 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5857268B071; Thu, 28 Nov 2019 16:31:55 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1023D68B067 for ; Thu, 28 Nov 2019 16:31:49 +0200 (EET) Received: by mail-wr1-f66.google.com with SMTP id i12so31469073wro.5 for ; Thu, 28 Nov 2019 06:31:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=OUwnODngBbd3jx6BLGbtw0kIEEDaaOvX+dzL4UmOIaU=; b=VfePSPcvwHS6TtGdjAra2httbQJMJErpynYm4g/CD5fgOw+bzB14TW7wzFnoEuNGvX I9ES+lKBvdiqgRK0CxEcCALqo7LPPqON6hdO6Md1EoTOCiJfdcviBfb0gXFN/LhwY5Dq DhqQ87ZkZzP0dcmONhcN3ByLZ6sHuI+WrYZXS40PJiRu7ANlPxKGM7kj1S03h+atATdH qq9bpdbg1ihz0fAXuipQYrH0xh+aHgO9m84EH2UuY3YA53PWmYLK6mxGaQO9Spzv6aUZ h0ONcg5XYwgPj6N/4Cdcn6SZ3ZFC6qICUrVudjxb6vdWKhMOD8aitrJ8FQaK3mWtOTLz q4xQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=OUwnODngBbd3jx6BLGbtw0kIEEDaaOvX+dzL4UmOIaU=; b=l5Ra0AFhnZ3wGZxBXe6darMLScLwCURPYZp51riQxLpx6z+eyeFPiu5jZ4Au2wI2B0 sQaQL08RsVAllHQLkD1y6wVsaE8UkgzmhJ4Vk0K0PfAkYGrFuYfZiIAU1PPUv2sc53PJ IcNr2EVT5IqfXcmaQ8ml4ifUE7ikbXsGXtQ7l1jYrNWNq6J+885AraiyhQtvoQQKq1Cz Iwgn6Op85e329gOKSwamI7MX785NsF7E5R3NKbe0SLrW0xBt1g27vjnBSDURfxWynKsz NXnpPsIVCMB0/rmSCdW72iANgX0itJtUKqg5lTX0CJcvufJfEgyXz4IEG9FO371Y5ROc FVAA== X-Gm-Message-State: APjAAAWE2QjbrrwcatSIiQzLmTmLNFS/E16SBGiVQzP34Abj4l55jkMc kJKqhVLAJoTi10KcxsDDbzP8PAlp X-Google-Smtp-Source: APXvYqxqctWgLp9VqsgRUE8n/IsYfHFEkxuFHzbAz8QboNkwy4V24Ku5zMP974bhdRu0jB/Y+swIoQ== X-Received: by 2002:a5d:6542:: with SMTP id z2mr50428763wrv.371.1574951508309; Thu, 28 Nov 2019 06:31:48 -0800 (PST) Received: from localhost.localdomain (ipbcc08e23.dynamic.kabel-deutschland.de. [188.192.142.35]) by smtp.gmail.com with ESMTPSA id q15sm23729772wrs.91.2019.11.28.06.31.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Nov 2019 06:31:47 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 28 Nov 2019 15:31:33 +0100 Message-Id: <20191128143133.18393-1-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avformat/vividas: Avoid allocation of AVIOContext 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Put an AVIOContext whose lifetime doesn't extend beyond the function where it is allocated on the stack instead of allocating and freeing it. This also avoids the need to free it, which in this case fixes possible memleaks on error. Signed-off-by: Andreas Rheinhardt --- libavformat/vividas.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/libavformat/vividas.c b/libavformat/vividas.c index f20af3d7c2..88fa89a3cf 100644 --- a/libavformat/vividas.c +++ b/libavformat/vividas.c @@ -282,11 +282,9 @@ static int track_header(VividasDemuxContext *viv, AVFormatContext *s, uint8_t * int64_t off; int val_1; int num_video; - AVIOContext *pb; + AVIOContext pb0, *pb = &pb0; - pb = avio_alloc_context(buf, size, 0, NULL, NULL, NULL, NULL); - if (!pb) - return AVERROR(ENOMEM); + ffio_init_context(pb, buf, size, 0, NULL, NULL, NULL, NULL); ffio_read_varlen(pb); // track_header_len avio_r8(pb); // '1' @@ -383,7 +381,6 @@ static int track_header(VividasDemuxContext *viv, AVFormatContext *s, uint8_t * for (j = 0; j < num_data; j++) { uint64_t len = ffio_read_varlen(pb); if (len > INT_MAX/2 - xd_size) { - av_free(pb); return AVERROR_INVALIDDATA; } data_len[j] = len; @@ -392,7 +389,6 @@ static int track_header(VividasDemuxContext *viv, AVFormatContext *s, uint8_t * st->codecpar->extradata_size = 64 + xd_size + xd_size / 255; if (ff_alloc_extradata(st->codecpar, st->codecpar->extradata_size)) { - av_free(pb); return AVERROR(ENOMEM); } @@ -402,7 +398,6 @@ static int track_header(VividasDemuxContext *viv, AVFormatContext *s, uint8_t * for (j = 0; j < num_data - 1; j++) { unsigned delta = av_xiphlacing(&p[offset], data_len[j]); if (delta > data_len[j]) { - av_free(pb); return AVERROR_INVALIDDATA; } offset += delta; @@ -423,7 +418,6 @@ static int track_header(VividasDemuxContext *viv, AVFormatContext *s, uint8_t * } } - av_free(pb); return 0; } @@ -432,13 +426,11 @@ static int track_index(VividasDemuxContext *viv, AVFormatContext *s, uint8_t *bu int64_t off; int64_t poff; int maxnp=0; - AVIOContext *pb; + AVIOContext pb0, *pb = &pb0; int i; int64_t filesize = avio_size(s->pb); - pb = avio_alloc_context(buf, size, 0, NULL, NULL, NULL, NULL); - if (!pb) - return AVERROR(ENOMEM); + ffio_init_context(pb, buf, size, 0, NULL, NULL, NULL, NULL); ffio_read_varlen(pb); // track_index_len avio_r8(pb); // 'c' @@ -448,7 +440,6 @@ static int track_index(VividasDemuxContext *viv, AVFormatContext *s, uint8_t *bu viv->sb_blocks = av_calloc(viv->n_sb_blocks, sizeof(VIV_SB_block)); if (!viv->sb_blocks) { viv->n_sb_blocks = 0; - av_free(pb); return AVERROR(ENOMEM); } @@ -479,11 +470,9 @@ static int track_index(VividasDemuxContext *viv, AVFormatContext *s, uint8_t *bu goto error; viv->sb_entries = av_calloc(maxnp, sizeof(VIV_SB_entry)); - av_free(pb); return 0; error: - av_free(pb); viv->n_sb_blocks = 0; av_freep(&viv->sb_blocks); return AVERROR_INVALIDDATA;