From patchwork Mon Aug 19 21:56:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 14599 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 CA6CE446D51 for ; Tue, 20 Aug 2019 01:12:22 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A828268AB65; Tue, 20 Aug 2019 01:12:22 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2FAFB68A640 for ; Tue, 20 Aug 2019 01:12:16 +0300 (EEST) Received: by mail-wr1-f65.google.com with SMTP id b16so10262570wrq.9 for ; Mon, 19 Aug 2019 15:12:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Q09Sxy07Cc7dDmlc6yYP/ZQT25vbT5HqZhQZVBk/icE=; b=OPcO8ir/EYtP1mpscx2g3L4GpRvetKlh6+Q7HbptHWK6vfPtU5SNiXC+Shf30Ytc2T gewyCaxiyXxpOObpcdccTx6nUYaaNrhrpi33hHL6a/OzLDRDzE9Qgs3T2lRNI7bRTnRE Uwm6yUJVSKMmxSaAOXGv176kDa+ZAiqej6NN1SwNE3L/90hwFTC+iO3XXZL3VZ71C47e EFg+9S8tuN5pm9nHI/zsdTkWfpune6xaoi/DlOIoj3h/FNY8/tnGiYIMEo85vfYZI7+s 8q+SUZSCjfwxLJ3RoMHrMKw5PSJerSC3/SZXPh/9sE6DiKAAaq0EO9prMn84vjrlEis2 gHIg== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=Q09Sxy07Cc7dDmlc6yYP/ZQT25vbT5HqZhQZVBk/icE=; b=loq8uF/Fw39IgLzcG0SpvlcHu1UVAh+WzCZTZpiaIVXl4WKXweYKOKbfzIvvT0/dfb MN0Kb2ubeswE8vBB+fMG2RIS+wSSLyvdKJ+YPiLfCjHiUk/up3F8QuxvhVzwPavaXQHw 0qGB8JWbCB2KpIZYW0/W9W8b8YoHAVeNcj19YWYPgQnmRgoHmZVQmzGv2uOPzCk7bMkz xDUKgiBqFR2GB6VJsmOSDVdMU4bN9pHtF3iiaclCuEExa9T/HXYfLOcT0E82c/UvLwrl etwT3mchDkODFSmaRCMj782qQt1Tc5VP3xdhAVkRi0Gz1RKxD0U0xRXaqGpl5GldjfpI 0V1Q== X-Gm-Message-State: APjAAAU5VZcwgRmKEswkSzl781qj9IsRAMoZilTDFm8lw4/s4QaQeVrZ jSYlJxlCjvLq6QVGKksOHRbvV6qf X-Google-Smtp-Source: APXvYqwpecNu8/PBiShgGkzyR4dbhVUsh6v+up3Ng42KCdlGseqQDX9eONMXGn2pCcRxli17Xb+11A== X-Received: by 2002:adf:f5c5:: with SMTP id k5mr3280357wrp.42.1566252234333; Mon, 19 Aug 2019 15:03:54 -0700 (PDT) Received: from localhost.localdomain (ipbcc08c5c.dynamic.kabel-deutschland.de. [188.192.140.92]) by smtp.gmail.com with ESMTPSA id s64sm32952293wmf.16.2019.08.19.15.03.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Aug 2019 15:03:53 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 19 Aug 2019 23:56:19 +0200 Message-Id: <20190819215624.49795-3-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190819215624.49795-1-andreas.rheinhardt@gmail.com> References: <20190819215624.49795-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 3/8] avformat/utils: Preserve integrity of linked list 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" 1. Instead of relying on ff_packet_list_get to get the oldest element in an AVPacketList, ff_read_packet used its own ad-hoc code. Said code forgot to set the end of the list to NULL if the last element of the list has been removed, thereby leaving the list in an inconsistent state. 2. Furthermore, if the list was not empty, the oldest element of the list would always be copied into another packet structure before it was known whether the oldest entry of the list would be removed. This makes the ownership confusing and potentially copies unnecessarily. Both of these issues have been fixed. ff_packet_list_get is used now. Signed-off-by: Andreas Rheinhardt --- No changes since last time. libavformat/utils.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/libavformat/utils.c b/libavformat/utils.c index 564be02334..b93d80588d 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -837,15 +837,14 @@ int ff_read_packet(AVFormatContext *s, AVPacket *pkt) AVPacketList *pktl = s->internal->raw_packet_buffer; if (pktl) { - *pkt = pktl->pkt; - st = s->streams[pkt->stream_index]; + st = s->streams[pktl->pkt.stream_index]; if (s->internal->raw_packet_buffer_remaining_size <= 0) if ((err = probe_codec(s, st, NULL)) < 0) return err; if (st->request_probe <= 0) { - s->internal->raw_packet_buffer = pktl->next; + ff_packet_list_get(&s->internal->raw_packet_buffer, + &s->internal->raw_packet_buffer_end, pkt); s->internal->raw_packet_buffer_remaining_size += pkt->size; - av_free(pktl); return 0; } }