From patchwork Tue Jan 7 13:55:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 17240 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 E79B544AC83 for ; Tue, 7 Jan 2020 15:56:23 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CB5A468AC51; Tue, 7 Jan 2020 15:56:23 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f65.google.com (mail-wm1-f65.google.com [209.85.128.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C689C68AD26 for ; Tue, 7 Jan 2020 15:56:13 +0200 (EET) Received: by mail-wm1-f65.google.com with SMTP id f129so19506039wmf.2 for ; Tue, 07 Jan 2020 05:56:13 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=d6tCO7ms7+Xn500Y5fVTO4zyLVFtRV1jeSg5UHiWfgg=; b=WDq3faJJ/cgySdafn8AhlLA9PqW6TWuKKQnMGLqr4j6uJgAX8ymglR0Fb0gI3YFLzr 9HwPq/lgd2bFLjBT+rPLld3U07ASoWSvhceJ8JcaXiQg3mKzqjFMUg3NYFyUxtz7VTEK KFuSf3etpYvByqs9FqeduinRhXctHthLzI0YlnjpSnXYWdEfAeCS7xAqZ47/PGVxTA8F 5ORIubDc6S8LrKnwjlxVnl6472OpnhaXO+U+2DMWXNG1fEEXIgmKHf8vai8kcBa1uhHG X7nFxqO/HWO+aMKpAEYYoIGVjmFiGDqCflIlpPfAq6TNlHfNh9BolSNDKqLVCwvzFf8v vstA== 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=d6tCO7ms7+Xn500Y5fVTO4zyLVFtRV1jeSg5UHiWfgg=; b=Db2IjTGcwf8BLlb+NGzjhTb/q7BP2dGeDibwCtI7BvPm2O0aC7u9Mx1rdUDrT+f/RZ vV5b+rcsYlzSTenkDu1Ka6OoKtJ0fh+6R5C3NPb0kRqLgOcQbhVNRzJsiutGEbqWk38g sNRO98GrlivAmpl8el9sv+LPgszLZ50HwMNY3zHsDxGi4oIp3OwwXNnrNZHAzsEdYaVa Hplfnndo4hkPjigXM6KLLyrAWMOhUDcAMfoZiPJgA1/tlI0mIHQy2NhJ5eeIS2SqNzNE TExBN5lKwvd74O/Wf9uvzZRooo+rUa9W2jrLl+KAFbBzLIi767SLK8BWy9p24hwjwE9D B4cw== X-Gm-Message-State: APjAAAXC/V+JuTdzqO8SQCjfZIz38z1la2Hy64UMGNYxj1ZxxwdHjwfB INX34RvAC9Bn5e0cuVegxVdgf5P2 X-Google-Smtp-Source: APXvYqxVcJyewW8+eWpU0xOvxrdFQPpPEnq2aGV/kSUPNafMg9AiQM/DIPigWWLHuYLki8zZFmy7Mg== X-Received: by 2002:a1c:f407:: with SMTP id z7mr38637124wma.72.1578405373065; Tue, 07 Jan 2020 05:56:13 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc08bbf.dynamic.kabel-deutschland.de. [188.192.139.191]) by smtp.gmail.com with ESMTPSA id e18sm76167730wrr.95.2020.01.07.05.56.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jan 2020 05:56:12 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 7 Jan 2020 14:55:44 +0100 Message-Id: <20200107135549.22581-6-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200107135549.22581-1-andreas.rheinhardt@gmail.com> References: <20200107135549.22581-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 06/11] avformat: Improve returned error codes 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" This commit improves returned error codes by forwarding error codes. In some instances, the hardcoded returned error codes made no sense at all: The normal error code for failure of av_new_packet() is AVERROR(ENOMEM), yet there were instances where AVERROR(EIO) was returned. Signed-off-by: Andreas Rheinhardt --- libavformat/4xm.c | 8 +++++--- libavformat/flic.c | 13 +++++-------- libavformat/idroqdec.c | 5 +++-- libavformat/psxstr.c | 11 ++++++----- libavformat/rmdec.c | 8 ++++---- libavformat/vqf.c | 4 ++-- 6 files changed, 25 insertions(+), 24 deletions(-) diff --git a/libavformat/4xm.c b/libavformat/4xm.c index a6101a92ec..aea9226984 100644 --- a/libavformat/4xm.c +++ b/libavformat/4xm.c @@ -322,8 +322,10 @@ static int fourxm_read_packet(AVFormatContext *s, case cfr2_TAG: /* allocate 8 more bytes than 'size' to account for fourcc * and size */ - if (size + 8 < size || av_new_packet(pkt, size + 8)) - return AVERROR(EIO); + if (size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE - 8) + return AVERROR_INVALIDDATA; + if ((ret = av_new_packet(pkt, size + 8)) < 0) + return ret; pkt->stream_index = fourxm->video_stream_index; pkt->pts = fourxm->video_pts; pkt->pos = avio_tell(s->pb); @@ -347,7 +349,7 @@ static int fourxm_read_packet(AVFormatContext *s, fourxm->tracks[track_number].channels > 0) { ret = av_get_packet(s->pb, pkt, size); if (ret < 0) - return AVERROR(EIO); + return ret; pkt->stream_index = fourxm->tracks[track_number].stream_index; pkt->pts = fourxm->tracks[track_number].audio_pts; diff --git a/libavformat/flic.c b/libavformat/flic.c index da7b732388..e65c157777 100644 --- a/libavformat/flic.c +++ b/libavformat/flic.c @@ -215,10 +215,9 @@ static int flic_read_packet(AVFormatContext *s, magic = AV_RL16(&preamble[4]); if (((magic == FLIC_CHUNK_MAGIC_1) || (magic == FLIC_CHUNK_MAGIC_2)) && size > FLIC_PREAMBLE_SIZE) { - if (av_new_packet(pkt, size)) { - ret = AVERROR(EIO); - break; - } + if ((ret = av_new_packet(pkt, size)) < 0) + return ret; + pkt->stream_index = flic->video_stream_index; pkt->pts = flic->frame_number++; pkt->pos = avio_tell(pb); @@ -230,10 +229,8 @@ static int flic_read_packet(AVFormatContext *s, } packet_read = 1; } else if (magic == FLIC_TFTD_CHUNK_AUDIO) { - if (av_new_packet(pkt, size)) { - ret = AVERROR(EIO); - break; - } + if ((ret = av_new_packet(pkt, size)) < 0) + return ret; /* skip useless 10B sub-header (yes, it's not accounted for in the chunk header) */ avio_skip(pb, 10); diff --git a/libavformat/idroqdec.c b/libavformat/idroqdec.c index 56ab83424f..519f31d61a 100644 --- a/libavformat/idroqdec.c +++ b/libavformat/idroqdec.c @@ -205,8 +205,9 @@ static int roq_read_packet(AVFormatContext *s, } /* load up the packet */ - if (av_new_packet(pkt, chunk_size + RoQ_CHUNK_PREAMBLE_SIZE)) - return AVERROR(EIO); + ret = av_new_packet(pkt, chunk_size + RoQ_CHUNK_PREAMBLE_SIZE); + if (ret < 0) + return ret; /* copy over preamble */ memcpy(pkt->data, preamble, RoQ_CHUNK_PREAMBLE_SIZE); diff --git a/libavformat/psxstr.c b/libavformat/psxstr.c index ddc17e35d2..678b9f90ac 100644 --- a/libavformat/psxstr.c +++ b/libavformat/psxstr.c @@ -160,7 +160,7 @@ static int str_read_packet(AVFormatContext *s, AVIOContext *pb = s->pb; StrDemuxContext *str = s->priv_data; unsigned char sector[RAW_CD_SECTOR_SIZE]; - int channel; + int channel, ret; AVPacket *pkt; AVStream *st; @@ -213,8 +213,9 @@ static int str_read_packet(AVFormatContext *s, if(pkt->data) av_log(s, AV_LOG_ERROR, "mismatching sector_count\n"); av_packet_unref(pkt); - if (av_new_packet(pkt, sector_count*VIDEO_DATA_CHUNK_SIZE)) - return AVERROR(EIO); + ret = av_new_packet(pkt, sector_count * VIDEO_DATA_CHUNK_SIZE); + if (ret < 0) + return ret; memset(pkt->data, 0, sector_count*VIDEO_DATA_CHUNK_SIZE); pkt->pos= avio_tell(pb) - RAW_CD_SECTOR_SIZE; @@ -267,8 +268,8 @@ static int str_read_packet(AVFormatContext *s, st->start_time = 0; } pkt = ret_pkt; - if (av_new_packet(pkt, 2304)) - return AVERROR(EIO); + if ((ret = av_new_packet(pkt, 2304)) < 0) + return ret; memcpy(pkt->data,sector+24,2304); pkt->stream_index = diff --git a/libavformat/rmdec.c b/libavformat/rmdec.c index 3c4b97d49f..a36e693ab2 100644 --- a/libavformat/rmdec.c +++ b/libavformat/rmdec.c @@ -781,8 +781,8 @@ static int rm_assemble_video_frame(AVFormatContext *s, AVIOContext *pb, return -1; } rm->remaining_len -= len; - if(av_new_packet(pkt, len + 9) < 0) - return AVERROR(EIO); + if ((ret = av_new_packet(pkt, len + 9)) < 0) + return ret; pkt->data[0] = 0; AV_WL32(pkt->data + 1, 1); AV_WL32(pkt->data + 5, 0); @@ -804,8 +804,8 @@ static int rm_assemble_video_frame(AVFormatContext *s, AVIOContext *pb, vst->slices = ((hdr & 0x3F) << 1) + 1; vst->videobufsize = len2 + 8*vst->slices + 1; av_packet_unref(&vst->pkt); //FIXME this should be output. - if(av_new_packet(&vst->pkt, vst->videobufsize) < 0) - return AVERROR(ENOMEM); + if ((ret = av_new_packet(&vst->pkt, vst->videobufsize)) < 0) + return ret; memset(vst->pkt.data, 0, vst->pkt.size); vst->videobufpos = 8*vst->slices + 1; vst->cur_slice = 0; diff --git a/libavformat/vqf.c b/libavformat/vqf.c index 15660e9fd8..617a9706f4 100644 --- a/libavformat/vqf.c +++ b/libavformat/vqf.c @@ -237,8 +237,8 @@ static int vqf_read_packet(AVFormatContext *s, AVPacket *pkt) int ret; int size = (c->frame_bit_len - c->remaining_bits + 7)>>3; - if (av_new_packet(pkt, size+2) < 0) - return AVERROR(EIO); + if ((ret = av_new_packet(pkt, size + 2)) < 0) + return ret; pkt->pos = avio_tell(s->pb); pkt->stream_index = 0;