From patchwork Thu Mar 22 03:05:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 8094 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.1.70 with SMTP id c67csp315634jad; Wed, 21 Mar 2018 20:05:49 -0700 (PDT) X-Google-Smtp-Source: AG47ELvlTuT4qK3nTfYUPz+3noa7tA832SLj+Cu0VLrnEUX7kQMVnPVHoUkfciL0M8jArLD7n6KO X-Received: by 10.223.184.234 with SMTP id c39mr17397111wrg.67.1521687949687; Wed, 21 Mar 2018 20:05:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521687949; cv=none; d=google.com; s=arc-20160816; b=xsLsecmxDyw9eSQI7IaItukO+FMrv1puh68Zc/CvVvy5HNojkqbgqUbtEetTPFBWQ/ Aylek/eUj+TR01nDFrBjPKl//YUqaSwBP1i+I2beSnPQdunmbd9dG5M/142AW5r6CtL5 gSCfZhGJfWh8mVz/zl3j2x66qOk3mBN27sWk9j8GcrWtKvUXILcXxnC+0Ejdf791Rv6K yZhtyUeHIQlafh5VtuCyiEjQ6zVK5Y04sMdACKG26FZupKyClDYBM+bFiLiaXWgktHaS EBhjqG8OYGpmTk2yAH30zQV0/Jr18JFlQjj0hrMRK9dSAjhQLN2Dzj5Sm+GVK0yOyQme HaVA== 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:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=JyIe1VGPBH1QClUXBrhSWFKF1MfTvOS2+6hwCoSKvZ0=; b=YjPM/CADJ5ar6XM8Y0PnoHO2ZYll2uZh4LImpPjTsyjr8Btcz75D3vusTY1WZjCSIt 3Y10b+ldJPjnMU8UVcJPubdF2Agizuq246yXH4NdXKvA7f8CPJmIsK7iIvpSem89qcaN OVT9KU+RFHhEpNo2zII9GFStDJCk5rNdDBAZRyCRE8Eu799+PoG2VIT/zFCYG+0F8P9w 5uuQ0JzeDn1FKiAWftE2HALuZNbIF69ikSBFOigxTAeROIDjeUXpUXuxBfyB33Z1oLCH PG+SQwxhLI0sGbZgdhDyFbn7PLMsOJL0cnbtN72evyoKa8INXVNymIFVTEfaLPO26ge3 yVcg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=BX6w+eId; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id t19si3688683wmt.149.2018.03.21.20.05.49; Wed, 21 Mar 2018 20:05:49 -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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=BX6w+eId; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DDE0E689CC6; Thu, 22 Mar 2018 05:05:32 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f193.google.com (mail-qt0-f193.google.com [209.85.216.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D5158689CB5 for ; Thu, 22 Mar 2018 05:05:25 +0200 (EET) Received: by mail-qt0-f193.google.com with SMTP id h4so7531180qtn.13 for ; Wed, 21 Mar 2018 20:05:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=D1x6qh5R790h1+yACE7N3Yb38mBhjg7ibHfciK8kZ5M=; b=BX6w+eIdFmmLX9GZ/rT9fjkubqwR2Rv2XEftvJ0rtLU8u2/uOn92kOejawQ83RvaaW e+c8wRtdunD+yB6KKv6HzqjAwQUL64tdQuDVN+b8Bv2ks3n4S5PFD1J1x8uqNaLrPfuZ zkjHT6lq/CMH48iaxpMzRdDvE87VxBAizUOHS9fqwfbi2+sngtKL0S1E+5tGvKlvZj87 6+pT/eXLJfsCcqNYlEb12weuunDmtBZXH/5xmT3HRPjen7GXxsZqrPC2G65023dCWkwt iybXmfdrVERZem8YoxwhRyLU5Fafug+F+hrISCjG4H1Fr9LDaPSH/LBAQne00oMSxkhu z+vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=D1x6qh5R790h1+yACE7N3Yb38mBhjg7ibHfciK8kZ5M=; b=AU1DajMm4tuZrMcGdc43ibqMNjIZP1ItIDMoZ3axhHhGV2k4mrBUEbwCjNKq6F/52R iFifQeIJoxY8XzlapnUGKxDoFU2cRIwMJ5q++B4LT1KP0mLwEJhQ5qS54DImHhsEkqD9 y4oUIW0LUz2yzbUyBiN00CT45eEfCJDqcoofKHl+PmXhEOpzmKJ96wnjqaNg4HtqtLW5 eMD/FQd9G7edBepcnv0uTuV+5d+BbIWMPdFyP8a0oqSiTJlsznKDrybZQTl1HOk1mWRI /r4ml3FWiAqVtVbBL3vAqkY2LtQYFoYilVEU8EfJxV2mE6nqwug3QYoPYYrtwqRYBvHE WaxQ== X-Gm-Message-State: AElRT7Fu5TY6C+0CvN3869XR3u4pZVz4ANrk5KDlx4u8EftHt+jcorh6 nCMa4iPn45EQBXl/eYO6mry0Kw== X-Received: by 10.200.26.251 with SMTP id h56mr32887362qtk.223.1521687939946; Wed, 21 Mar 2018 20:05:39 -0700 (PDT) Received: from localhost.localdomain ([190.188.171.140]) by smtp.gmail.com with ESMTPSA id a130sm1793420qkg.6.2018.03.21.20.05.38 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Mar 2018 20:05:39 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 22 Mar 2018 00:05:18 -0300 Message-Id: <20180322030518.1060-1-jamrial@gmail.com> X-Mailer: git-send-email 2.16.2 Subject: [FFmpeg-devel] [PATCH] avcodec/vp9_raw_reorder: cache input packets using new references 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Input packets may not be ref counted, meaning the data described in them may be gone at any time. Fixes segfaults related to the above. Signed-off-by: James Almer --- libavcodec/vp9_raw_reorder_bsf.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/libavcodec/vp9_raw_reorder_bsf.c b/libavcodec/vp9_raw_reorder_bsf.c index 01f3dad898..9c37e9891d 100644 --- a/libavcodec/vp9_raw_reorder_bsf.c +++ b/libavcodec/vp9_raw_reorder_bsf.c @@ -278,7 +278,7 @@ static int vp9_raw_reorder_filter(AVBSFContext *bsf, AVPacket *out) { VP9RawReorderContext *ctx = bsf->priv_data; VP9RawReorderFrame *frame; - AVPacket *in; + AVPacket *in = NULL; int err, s; if (ctx->next_frame) { @@ -305,7 +305,12 @@ static int vp9_raw_reorder_filter(AVBSFContext *bsf, AVPacket *out) return AVERROR(ENOMEM); } - frame->packet = in; + frame->packet = av_packet_clone(in); + if (!frame->packet) { + err = AVERROR(ENOMEM); + goto fail; + } + frame->pts = in->pts; frame->sequence = ++ctx->sequence; err = vp9_raw_reorder_frame_parse(bsf, frame); @@ -348,8 +353,10 @@ static int vp9_raw_reorder_filter(AVBSFContext *bsf, AVPacket *out) // Clear the slot anyway, so we don't end up // in an infinite loop. vp9_raw_reorder_clear_slot(ctx, s); + av_packet_free(&in); return AVERROR_INVALIDDATA; } + av_packet_free(&in); return 0; } vp9_raw_reorder_clear_slot(ctx, s); @@ -368,20 +375,24 @@ static int vp9_raw_reorder_filter(AVBSFContext *bsf, AVPacket *out) av_log(bsf, AV_LOG_ERROR, "Failed to create output " "for transient frame.\n"); ctx->next_frame = NULL; + av_packet_free(&in); return AVERROR_INVALIDDATA; } if (!frame->needs_display) { vp9_raw_reorder_frame_free(&frame); ctx->next_frame = NULL; } + av_packet_free(&in); return 0; } ctx->next_frame = NULL; + av_packet_free(&in); return AVERROR(EAGAIN); fail: vp9_raw_reorder_frame_free(&frame); + av_packet_free(&in); return err; }