From patchwork Fri Jul 10 13:48:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 20944 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 26CBC44A131 for ; Fri, 10 Jul 2020 16:48:23 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 021A76881C5; Fri, 10 Jul 2020 16:48:23 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f67.google.com (mail-wm1-f67.google.com [209.85.128.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BA6DB687FCF for ; Fri, 10 Jul 2020 16:48:16 +0300 (EEST) Received: by mail-wm1-f67.google.com with SMTP id g75so6231500wme.5 for ; Fri, 10 Jul 2020 06:48: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:mime-version :content-transfer-encoding; bh=UqWUEZSK+zUPwID4bmpdrd9H6N5oHhOH0K6TMGwVAO0=; b=Ueud4ZdkK7pN0dd6y4pUUnwkO6bhitZPHMQVE9xawTMUJxUbTnad+lAUCgxe/rOrVO FQ2e91DZxPKfJa/lZvMf5XY74FBvZBY7n3XAh7yZf94Kt6Xjs6MPyrNOdaDRbpyQVRzv xoe7MOw8irnH/OeLG68n7dzjAddJOyQaQJ+LOpiump99SO0mXuKfCjppZ7VHIMvIoapc K9ul9vP2CRzd5PO5N5HO99dtygq4hrPZzPr43Yh5pRdlFbjYACMMvrxS6D8+vJJAvYDy Fob7JLEVv6WlNAjrRUnmxtfF6DGHMMzrpK31t7cZgXlXm3qEXBK9wl5ePyssx/U2wk7s oADA== 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=UqWUEZSK+zUPwID4bmpdrd9H6N5oHhOH0K6TMGwVAO0=; b=OE+HoqqFaOK19+EFxnOLryKHOfjAiszTueKnq3UVCGIe9ZdD8O1luhxZFnZvsSzahf YJGtHqZLP6MH5VCGfyLxYFbPBpKknG8DnTXrLvIcBNSCc6L3PUtsPDkIM2BVB5iJ5j3X At+7HMvk88VLb3FwI2sj1aHCIVMPxZr7aP2ZJJKfyUjFde7GPtppKkMLhzn+7skfP2Go yeE9jziT5sMbfgAXi/tsF9Xx+lWLok5aUd7JqJe3Fi0mguUCGkdomyrJ5ndognCi508A lo+VHeXQ+9XJ4eBhwkyUZrfS4gjSlFJ3Tk0EnRm2M6KUiToJbk1ziBjtLQy/cVsb7ebJ G4Yw== X-Gm-Message-State: AOAM531+i3wo9Bmz5Qym3GmN2RQS2No3ktJbpl8hDrnRMUY1satcDQdT ql1v6fO7BgjXtKnA2DwTlGOZ3nzB X-Google-Smtp-Source: ABdhPJzv+OMectP93+acqH80D00+oioQsNhcGOLvg0tuAZAd/9csqa5/xLJCZ8JR7oldn7Ngcsk3zw== X-Received: by 2002:a1c:5f45:: with SMTP id t66mr5588710wmb.144.1594388895922; Fri, 10 Jul 2020 06:48:15 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id x185sm9966390wmg.41.2020.07.10.06.48.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2020 06:48:15 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 10 Jul 2020 15:48:03 +0200 Message-Id: <20200710134803.4347-1-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/golomb: Prevent shift by negative number 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 happened in get_ue_golomb() if the cached bitstream reader was in use, because there was no check to handle the case of the read value not being in the range 0..8190. Signed-off-by: Andreas Rheinhardt --- libavcodec/golomb.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libavcodec/golomb.h b/libavcodec/golomb.h index 7fd46a91bd..5bfcfe085f 100644 --- a/libavcodec/golomb.h +++ b/libavcodec/golomb.h @@ -66,6 +66,10 @@ static inline int get_ue_golomb(GetBitContext *gb) return ff_ue_golomb_vlc_code[buf]; } else { int log = 2 * av_log2(buf) - 31; + if (log < 0) { + av_log(NULL, AV_LOG_ERROR, "Invalid UE golomb code\n"); + return AVERROR_INVALIDDATA; + } buf >>= log; buf--; skip_bits_long(gb, 32 - log); From patchwork Tue Jul 14 15:34:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 21004 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 DAE7944AA50 for ; Tue, 14 Jul 2020 18:35:13 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B2B6B68AA4D; Tue, 14 Jul 2020 18:35:13 +0300 (EEST) 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 B2FDB6882F0 for ; Tue, 14 Jul 2020 18:35:06 +0300 (EEST) Received: by mail-wr1-f66.google.com with SMTP id a6so22512977wrm.4 for ; Tue, 14 Jul 2020 08:35:06 -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=3XvKuWHrhBgKT0Q1OOrKhRp7gSx3MLwUeG37Ng0iE10=; b=o6dJ9Jqpsgyw9/wJR0SyPvE/TwgcNTQq8TkfXbG62XOqe5zZ8fx3B1fspzkObJAgNp 71Bvyu/5EUuLdoGXl2WZcI6lZcQJJtzQ9N4eZrLK1D8p0KatvzPc2LfRpvn1DcLteUE6 e1YCSsPBHU/WuVrmQbJmI2v/06WekF8vL9C6yAzelbTdPncQcB6e+jwGWgOGA8SfYw5N 8Fgq42eT8/lOKkXfYmh119fu2wpEIQK4cJD42RJSsBYlYeq0N3Io9576kpNxZzMwA3Xl l/32C6f3Hyi4fkTxKyUgrf6qtAtCOke2gYWwHLuGAU5Te/+MZQp8lc225Ji9PDq4FdRo hP2w== 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=3XvKuWHrhBgKT0Q1OOrKhRp7gSx3MLwUeG37Ng0iE10=; b=LlfJfWC7bEWdqJu+Nd5c1IdzTWJFY8VllwPywuTOMrU2D0++pXCjifZGewYY6T62qq eKutKVapMT2WfNroFqMhUe4nkeKkCXkKLcky5ssxlfw7TvtR99NPGd2wndl0kQHFLdjT JTMHCMlgZD2aAPi5dJQ9x2WLKRBhrOkPrhoSdVUFiQqOrWtSrHI46PA/h2K+UnZaPHXU znWlpzi76HdaUNaBjzJzCWp+RuwDB9FyYAeH+t9KdoYd7t0h1o19AtjHguSuXfAMLxEB Kpp21zNCoOsdx9fOmb9M4plq1dX5VibpRsZFZpDTh8mdzRPagi71aa/BdHiFNBbmNlNM fr9w== X-Gm-Message-State: AOAM533fUyyqUKfC48Wl0KkLVyhqACBZ6geWkhOC1vfLn10aE2IrVXG/ A003tus4r1bpmoEKzEECQVHl0Nnw X-Google-Smtp-Source: ABdhPJz6tnxY6Xvj62mLXqYcQP9eIldwk+zS1aoM1Xfu0Ifm1kG3cxOkXZsgmcRqZxsy0yZ85fUuBg== X-Received: by 2002:adf:80e6:: with SMTP id 93mr6299832wrl.17.1594740905725; Tue, 14 Jul 2020 08:35:05 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id w14sm29545452wrt.55.2020.07.14.08.35.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Jul 2020 08:35:05 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 Jul 2020 17:34:49 +0200 Message-Id: <20200714153454.9354-1-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200710134803.4347-1-andreas.rheinhardt@gmail.com> References: <20200710134803.4347-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/7] avcodec/golomb: Make emitting error message in get_ue_golomb optional 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 is designed for scenarios where the caller already checks that the returned value is within a certain allowed range and returns an error message if not. Signed-off-by: Andreas Rheinhardt --- libavcodec/golomb.h | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/libavcodec/golomb.h b/libavcodec/golomb.h index 5bfcfe085f..63069f63e5 100644 --- a/libavcodec/golomb.h +++ b/libavcodec/golomb.h @@ -47,12 +47,7 @@ extern const uint8_t ff_interleaved_ue_golomb_vlc_code[256]; extern const int8_t ff_interleaved_se_golomb_vlc_code[256]; extern const uint8_t ff_interleaved_dirac_golomb_vlc_code[256]; -/** - * Read an unsigned Exp-Golomb code in the range 0 to 8190. - * - * @returns the read value or a negative error code. - */ -static inline int get_ue_golomb(GetBitContext *gb) +static inline int get_ue_golomb_internal(GetBitContext *gb, int emit_error_msg) { unsigned int buf; @@ -67,7 +62,8 @@ static inline int get_ue_golomb(GetBitContext *gb) } else { int log = 2 * av_log2(buf) - 31; if (log < 0) { - av_log(NULL, AV_LOG_ERROR, "Invalid UE golomb code\n"); + if (emit_error_msg) + av_log(NULL, AV_LOG_ERROR, "Invalid UE golomb code\n"); return AVERROR_INVALIDDATA; } buf >>= log; @@ -92,7 +88,8 @@ static inline int get_ue_golomb(GetBitContext *gb) LAST_SKIP_BITS(re, gb, 32 - log); CLOSE_READER(re, gb); if (log < 7) { - av_log(NULL, AV_LOG_ERROR, "Invalid UE golomb code\n"); + if (emit_error_msg) + av_log(NULL, AV_LOG_ERROR, "Invalid UE golomb code\n"); return AVERROR_INVALIDDATA; } buf >>= log; @@ -103,6 +100,25 @@ static inline int get_ue_golomb(GetBitContext *gb) #endif } +/** + * Read an unsigned Exp-Golomb code in the range 0 to 8190. + * + * @returns the read value or a negative error code. + */ +static inline int get_ue_golomb(GetBitContext *gb) +{ + return get_ue_golomb_internal(gb, 1); +} + +/** + * Variant of get_ue_golomb that does not emit an error message + * if the number is outside the permissible range. + */ +static inline int get_ue_golomb2(GetBitContext *gb) +{ + return get_ue_golomb_internal(gb, 0); +} + /** * Read an unsigned Exp-Golomb code in the range 0 to UINT32_MAX-1. */ From patchwork Tue Jul 14 15:34:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 21005 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 0E12544AA50 for ; Tue, 14 Jul 2020 18:35:17 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DEA8368B12F; Tue, 14 Jul 2020 18:35:16 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E949E6898F7 for ; Tue, 14 Jul 2020 18:35:09 +0300 (EEST) Received: by mail-wr1-f68.google.com with SMTP id f7so22549385wrw.1 for ; Tue, 14 Jul 2020 08:35:09 -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=1/JxBmUAdSMyS6AfFAadRuKoZzQ8QX8AdyCqZLYGPso=; b=lgGxoSJRGHRgKlz1BEa6evFZW1SEggH15WhlNmZ7XjqWcWPJ9HnmcKv+Jq/lIcOPaW wyRv+yYzQ+f1fRqDzziVuSFFCbHZhRATZ8in93Lkb3UVoEGO1PSFu1xIE+8ravS475c1 JAfkyTlPewFTISMarMzPGtuPynq0g7yG5JtG74qBN3oNJLdu/Cw01vb82tfqoaytMj6D 0efMCTWwJpejvmltfUUt4ZCvYhrTVN6V5usoMib+rN161YicYN9/5SDpBOYcy6wP7AFv DNtSv51544X7zC3zzJvU0pJ10zM2aPlaTJjYMCWpHHpEzrFXS/KWRdEb+lzmpi1HLgjN cXxw== 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=1/JxBmUAdSMyS6AfFAadRuKoZzQ8QX8AdyCqZLYGPso=; b=hecadx6FfAVvRE3Ul9n/l5RgOn28llJxNygWxt2pTZg2Sw7LLa+RY1REnn+PSbymKn 5RMkcJ29oqr54AmYsA5+SB/ULoOvkqtBRNeaacih6CMlEKHCb+9msUeUqNfOgV56nwjA vJTfZaAtvotr5jAcr78RqF3RVt596gTIvyPQkHJZbNM6JXou6Lf/QbzkWaQyMe5okukg K+SPc9kfEx/WD0ZwnQjKy6MlQaZjjgBWPd8oSL8+XRi+jF4gSZJzReY/LhyOr0wrriGa DhJhyJ5ocPwr/aQyWPm53ejc1N422huVzekhR0M4ZKoUOSIaUJhUVQmb/f+7rcAlM41Z G1HQ== X-Gm-Message-State: AOAM530WTWIXchrK4TNLaJtyLShl5/dTl3LYEhU5BeYuSn9Z3x7m3QC3 G2mZVk7JOun4W4d08+Junm4sm/WL X-Google-Smtp-Source: ABdhPJxuTFfA9TYkyjht+uvSJi7u+TlusZzxmpZUwVphAmPbVIFMnuMatx2OKgAcMJfOt5zMlhDelA== X-Received: by 2002:adf:eecf:: with SMTP id a15mr6511349wrp.83.1594740908675; Tue, 14 Jul 2020 08:35:08 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id w14sm29545452wrt.55.2020.07.14.08.35.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Jul 2020 08:35:08 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 Jul 2020 17:34:50 +0200 Message-Id: <20200714153454.9354-2-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200710134803.4347-1-andreas.rheinhardt@gmail.com> References: <20200710134803.4347-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/7] avcodec/golomb, h264*: Fix get_ue_golomb_31() 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" get_ue_golomb_31() uses a LUT of 512 entries; therefore it can be used to parse exp-golomb codes of length <= 9, i.e. those codes with at most four leading bits that have five effective bits; this implies a range of 0..30 and not 31. In particular, this function must not be used to parse e.g. the H.264 SPS id. This commit renames the function to get_ue_golomb_30() and uses it whereever possible. In places where it is not possible, it has been replaced by get_ue_golomb2(). Given that the returned value of said function can be a negative error code, it is no longer included in av_log() statements (the parsed value can actually also be wrong when using get_ue_golomb30()). Signed-off-by: Andreas Rheinhardt --- I have only used get_ue_golomb_30() where I am certain that its range is sufficient; this unfortunately excludes certain cases in h264_cavlc, because for field based content, the number of refs can be in the range of 0..31. libavcodec/golomb.h | 6 +++--- libavcodec/h264_cavlc.c | 14 +++++++------- libavcodec/h264_parser.c | 8 ++++---- libavcodec/h264_ps.c | 18 +++++++++--------- libavcodec/h264_refs.c | 6 +++--- libavcodec/h264_sei.c | 8 ++++---- libavcodec/h264_slice.c | 6 +++--- libavformat/mxfenc.c | 2 +- 8 files changed, 34 insertions(+), 34 deletions(-) diff --git a/libavcodec/golomb.h b/libavcodec/golomb.h index 63069f63e5..172d9934e0 100644 --- a/libavcodec/golomb.h +++ b/libavcodec/golomb.h @@ -134,10 +134,10 @@ static inline unsigned get_ue_golomb_long(GetBitContext *gb) } /** - * read unsigned exp golomb code, constraint to a max of 31. - * the return value is undefined if the stored value exceeds 31. + * Read unsigned exp golomb code, constraint to a max of 30. + * the return value is undefined if the stored value exceeds 30. */ -static inline int get_ue_golomb_31(GetBitContext *gb) +static inline int get_ue_golomb_30(GetBitContext *gb) { unsigned int buf; diff --git a/libavcodec/h264_cavlc.c b/libavcodec/h264_cavlc.c index 6481992e58..51091abbe1 100644 --- a/libavcodec/h264_cavlc.c +++ b/libavcodec/h264_cavlc.c @@ -838,7 +838,7 @@ decode_intra_mb: } if(decode_chroma){ pred_mode= ff_h264_check_intra_pred_mode(h->avctx, sl->top_samples_available, - sl->left_samples_available, get_ue_golomb_31(&sl->gb), 1); + sl->left_samples_available, get_ue_golomb_30(&sl->gb), 1); if(pred_mode < 0) return -1; sl->chroma_pred_mode = pred_mode; @@ -850,7 +850,7 @@ decode_intra_mb: if (sl->slice_type_nos == AV_PICTURE_TYPE_B) { for(i=0; i<4; i++){ - sl->sub_mb_type[i]= get_ue_golomb_31(&sl->gb); + sl->sub_mb_type[i] = get_ue_golomb_30(&sl->gb); if(sl->sub_mb_type[i] >=13){ av_log(h->avctx, AV_LOG_ERROR, "B sub_mb_type %u out of range at %d %d\n", sl->sub_mb_type[i], sl->mb_x, sl->mb_y); return -1; @@ -868,7 +868,7 @@ decode_intra_mb: }else{ av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_P); //FIXME SP correct ? for(i=0; i<4; i++){ - sl->sub_mb_type[i]= get_ue_golomb_31(&sl->gb); + sl->sub_mb_type[i] = get_ue_golomb_30(&sl->gb); if(sl->sub_mb_type[i] >=4){ av_log(h->avctx, AV_LOG_ERROR, "P sub_mb_type %u out of range at %d %d\n", sl->sub_mb_type[i], sl->mb_x, sl->mb_y); return -1; @@ -889,7 +889,7 @@ decode_intra_mb: }else if(ref_count == 2){ tmp= get_bits1(&sl->gb)^1; }else{ - tmp= get_ue_golomb_31(&sl->gb); + tmp = get_ue_golomb2(&sl->gb); if(tmp>=ref_count){ av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", tmp); return -1; @@ -965,7 +965,7 @@ decode_intra_mb: } else if (rc == 2) { val= get_bits1(&sl->gb)^1; }else{ - val= get_ue_golomb_31(&sl->gb); + val = get_ue_golomb2(&sl->gb); if (val >= rc) { av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", val); return -1; @@ -996,7 +996,7 @@ decode_intra_mb: } else if (rc == 2) { val= get_bits1(&sl->gb)^1; }else{ - val= get_ue_golomb_31(&sl->gb); + val = get_ue_golomb2(&sl->gb); if (val >= rc) { av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", val); return -1; @@ -1034,7 +1034,7 @@ decode_intra_mb: } else if (rc == 2) { val= get_bits1(&sl->gb)^1; }else{ - val= get_ue_golomb_31(&sl->gb); + val = get_ue_golomb2(&sl->gb); if (val >= rc) { av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", val); return -1; diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c index aacd44cf3b..8af094075f 100644 --- a/libavcodec/h264_parser.c +++ b/libavcodec/h264_parser.c @@ -180,7 +180,7 @@ static int scan_mmco_reset(AVCodecParserContext *s, GetBitContext *gb, if (get_bits1(gb)) { int index; for (index = 0; ; index++) { - unsigned int reordering_of_pic_nums_idc = get_ue_golomb_31(gb); + unsigned reordering_of_pic_nums_idc = get_ue_golomb_30(gb); if (reordering_of_pic_nums_idc < 3) get_ue_golomb_long(gb); @@ -210,7 +210,7 @@ static int scan_mmco_reset(AVCodecParserContext *s, GetBitContext *gb, if (get_bits1(gb)) { // adaptive_ref_pic_marking_mode_flag int i; for (i = 0; i < MAX_MMCO_COUNT; i++) { - MMCOOpcode opcode = get_ue_golomb_31(gb); + MMCOOpcode opcode = get_ue_golomb_30(gb); if (opcode > (unsigned) MMCO_LONG) { av_log(logctx, AV_LOG_ERROR, "illegal memory management control operation %d\n", @@ -226,7 +226,7 @@ static int scan_mmco_reset(AVCodecParserContext *s, GetBitContext *gb, get_ue_golomb_long(gb); // difference_of_pic_nums_minus1 if (opcode == MMCO_SHORT2LONG || opcode == MMCO_LONG2UNUSED || opcode == MMCO_LONG || opcode == MMCO_SET_MAX_LONG) - get_ue_golomb_31(gb); + get_ue_golomb2(gb); } } @@ -342,7 +342,7 @@ static inline int parse_nal_units(AVCodecParserContext *s, /* fall through */ case H264_NAL_SLICE: get_ue_golomb_long(&nal.gb); // skip first_mb_in_slice - slice_type = get_ue_golomb_31(&nal.gb); + slice_type = get_ue_golomb_30(&nal.gb); s->pict_type = ff_h264_golomb_to_pict_type[slice_type % 5]; if (p->sei.recovery_point.recovery_frame_cnt >= 0) { /* key frame, since recovery_frame_cnt is set */ diff --git a/libavcodec/h264_ps.c b/libavcodec/h264_ps.c index e774929e21..13823b8dc0 100644 --- a/libavcodec/h264_ps.c +++ b/libavcodec/h264_ps.c @@ -108,10 +108,10 @@ static inline int decode_hrd_parameters(GetBitContext *gb, void *logctx, SPS *sps) { int cpb_count, i; - cpb_count = get_ue_golomb_31(gb) + 1; + cpb_count = get_ue_golomb2(gb); - if (cpb_count > 32U) { - av_log(logctx, AV_LOG_ERROR, "cpb_count %d invalid\n", cpb_count); + if (cpb_count++ > 31U) { + av_log(logctx, AV_LOG_ERROR, "cpb_count invalid\n"); return AVERROR_INVALIDDATA; } @@ -361,10 +361,10 @@ int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, constraint_set_flags |= get_bits1(gb) << 5; // constraint_set5_flag skip_bits(gb, 2); // reserved_zero_2bits level_idc = get_bits(gb, 8); - sps_id = get_ue_golomb_31(gb); + sps_id = get_ue_golomb2(gb); if (sps_id >= MAX_SPS_COUNT) { - av_log(avctx, AV_LOG_ERROR, "sps_id %u out of range\n", sps_id); + av_log(avctx, AV_LOG_ERROR, "sps_id out of range\n"); goto fail; } @@ -391,7 +391,7 @@ int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, sps->profile_idc == 128 || // Multiview High profile (MVC) sps->profile_idc == 138 || // Multiview Depth High profile (MVCD) sps->profile_idc == 144) { // old High444 profile - sps->chroma_format_idc = get_ue_golomb_31(gb); + sps->chroma_format_idc = get_ue_golomb_30(gb); if (sps->chroma_format_idc > 3U) { avpriv_request_sample(avctx, "chroma_format_idc %u", sps->chroma_format_idc); @@ -438,7 +438,7 @@ int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, } sps->log2_max_frame_num = log2_max_frame_num_minus4 + 4; - sps->poc_type = get_ue_golomb_31(gb); + sps->poc_type = get_ue_golomb_30(gb); if (sps->poc_type == 0) { // FIXME #define unsigned t = get_ue_golomb(gb); @@ -482,7 +482,7 @@ int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, goto fail; } - sps->ref_frame_count = get_ue_golomb_31(gb); + sps->ref_frame_count = get_ue_golomb_30(gb); if (avctx->codec_tag == MKTAG('S', 'M', 'V', '2')) sps->ref_frame_count = FFMAX(2, sps->ref_frame_count); if (sps->ref_frame_count > MAX_DELAYED_PIC_COUNT) { @@ -781,7 +781,7 @@ int ff_h264_decode_picture_parameter_set(GetBitContext *gb, AVCodecContext *avct } memcpy(pps->data, gb->buffer, pps->data_size); - pps->sps_id = get_ue_golomb_31(gb); + pps->sps_id = get_ue_golomb2(gb); if ((unsigned)pps->sps_id >= MAX_SPS_COUNT || !ps->sps_list[pps->sps_id]) { av_log(avctx, AV_LOG_ERROR, "sps_id %u out of range\n", pps->sps_id); diff --git a/libavcodec/h264_refs.c b/libavcodec/h264_refs.c index dae8bd278a..4ceaaa3863 100644 --- a/libavcodec/h264_refs.c +++ b/libavcodec/h264_refs.c @@ -432,7 +432,7 @@ int ff_h264_decode_ref_pic_list_reordering(H264SliceContext *sl, void *logctx) continue; for (index = 0; ; index++) { - unsigned int op = get_ue_golomb_31(&sl->gb); + unsigned int op = get_ue_golomb_30(&sl->gb); if (op == 3) break; @@ -850,7 +850,7 @@ int ff_h264_decode_ref_pic_marking(H264SliceContext *sl, GetBitContext *gb, sl->explicit_ref_marking = get_bits1(gb); if (sl->explicit_ref_marking) { for (i = 0; i < MAX_MMCO_COUNT; i++) { - MMCOOpcode opcode = get_ue_golomb_31(gb); + MMCOOpcode opcode = get_ue_golomb_30(gb); mmco[i].opcode = opcode; if (opcode == MMCO_SHORT2UNUSED || opcode == MMCO_SHORT2LONG) { @@ -860,7 +860,7 @@ int ff_h264_decode_ref_pic_marking(H264SliceContext *sl, GetBitContext *gb, } if (opcode == MMCO_SHORT2LONG || opcode == MMCO_LONG2UNUSED || opcode == MMCO_LONG || opcode == MMCO_SET_MAX_LONG) { - unsigned int long_arg = get_ue_golomb_31(gb); + unsigned int long_arg = get_ue_golomb2(gb); if (long_arg >= 32 || (long_arg >= 16 && !(opcode == MMCO_SET_MAX_LONG && long_arg == 16) && diff --git a/libavcodec/h264_sei.c b/libavcodec/h264_sei.c index 7b8e6bd7ba..63d43b2bc5 100644 --- a/libavcodec/h264_sei.c +++ b/libavcodec/h264_sei.c @@ -320,11 +320,11 @@ static int decode_buffering_period(H264SEIBufferingPeriod *h, GetBitContext *gb, int sched_sel_idx; const SPS *sps; - sps_id = get_ue_golomb_31(gb); - if (sps_id > 31 || !ps->sps_list[sps_id]) { + sps_id = get_ue_golomb2(gb); + if (sps_id > 31U || !ps->sps_list[sps_id]) { av_log(logctx, AV_LOG_ERROR, - "non-existing SPS %d referenced in buffering period\n", sps_id); - return sps_id > 31 ? AVERROR_INVALIDDATA : AVERROR_PS_NOT_FOUND; + "non-existing SPS referenced in buffering period\n"); + return sps_id > 31U ? AVERROR_INVALIDDATA : AVERROR_PS_NOT_FOUND; } sps = (const SPS*)ps->sps_list[sps_id]->data; diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c index c7b2764270..8f4b7ef1ec 100644 --- a/libavcodec/h264_slice.c +++ b/libavcodec/h264_slice.c @@ -1739,7 +1739,7 @@ static int h264_slice_header_parse(const H264Context *h, H264SliceContext *sl, sl->first_mb_addr = get_ue_golomb_long(&sl->gb); - slice_type = get_ue_golomb_31(&sl->gb); + slice_type = get_ue_golomb_30(&sl->gb); if (slice_type > 9) { av_log(h->avctx, AV_LOG_ERROR, "slice type %d too large at %d\n", @@ -1874,7 +1874,7 @@ static int h264_slice_header_parse(const H264Context *h, H264SliceContext *sl, } if (sl->slice_type_nos != AV_PICTURE_TYPE_I && pps->cabac) { - tmp = get_ue_golomb_31(&sl->gb); + tmp = get_ue_golomb_30(&sl->gb); if (tmp > 2) { av_log(h->avctx, AV_LOG_ERROR, "cabac_init_idc %u overflow\n", tmp); return AVERROR_INVALIDDATA; @@ -1902,7 +1902,7 @@ static int h264_slice_header_parse(const H264Context *h, H264SliceContext *sl, sl->slice_alpha_c0_offset = 0; sl->slice_beta_offset = 0; if (pps->deblocking_filter_parameters_present) { - tmp = get_ue_golomb_31(&sl->gb); + tmp = get_ue_golomb_30(&sl->gb); if (tmp > 2) { av_log(h->avctx, AV_LOG_ERROR, "deblocking_filter_idc %u out of range\n", tmp); diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c index 5a3a609bf6..c7ceb40b55 100644 --- a/libavformat/mxfenc.c +++ b/libavformat/mxfenc.c @@ -2223,7 +2223,7 @@ static int mxf_parse_h264_frame(AVFormatContext *s, AVStream *st, case H264_NAL_SLICE: init_get_bits8(&gb, buf, buf_end - buf); get_ue_golomb_long(&gb); // skip first_mb_in_slice - slice_type = get_ue_golomb_31(&gb); + slice_type = get_ue_golomb_30(&gb); switch (slice_type % 5) { case 0: e->flags |= 0x20; // P Picture From patchwork Tue Jul 14 15:34:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 21006 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 17BDB44AA50 for ; Tue, 14 Jul 2020 18:35:19 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0461A68B2DB; Tue, 14 Jul 2020 18:35:19 +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 1520368AA69 for ; Tue, 14 Jul 2020 18:35:11 +0300 (EEST) Received: by mail-wr1-f65.google.com with SMTP id z15so22527017wrl.8 for ; Tue, 14 Jul 2020 08:35:11 -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=RuaD2Lzgo1eGh3qYpJiAg6bze1v218sL6ohazntrjkg=; b=sumAdqABQjeo4NrNaPTDT6bm6hcChuqMw7VqiXpFkfYmBBD/1jUzlUY4hhjjgE/b4Z 3WbEz3AFwvWgJiAF2EXlHO8v9XVRfrnveCNhN2GqDlsncpVMpmY1wVD57Tlf3Vmt7epE 1pUD+lBO/ckyphYeJ+T0sm0wlrSR+EpK49gBQo/9IvVWvb9xCdvx6GosTqHefNw2b0fC i4rOyu/XzofNPN6db/nErAeCVVegkkyi8z+mOfViZQkNQPdxsMMj0rYyLBFPPgv+LvzH Y9qJTm2pHXnjkzgzXiRN8WGA8DSrrg42Nt4oD3mIPhEnoAXFJG0LZffCDEWYVu97isIU 8UGQ== 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=RuaD2Lzgo1eGh3qYpJiAg6bze1v218sL6ohazntrjkg=; b=rmbZeqYIcJUh0/FWFWuxkkmpIRN3abHi+73jipe3+z3by7zMYLE6G6IQIzZCvxG/8k npJzUQKO5om6sf3f/ryLZ9ksQcS/8ef2oTEi1k5gC9U8PQLapGwGvvYn3N6EGFs1R6Kx sfSpWFsFmSn5G+autP4pzAmvwqxnEvkhW9H4H888szm/z8spEO6kt6JqNPLgFMq6WXhC 8MjXGunNlNqXontsakUbLqo8asktUA6XUAXddaOw1o++Um1g9g+BMpa+sLdLB5O28j+N FTade7Iz2kdDb/suGOBI8O1FUX4rbzWz1+xhU8GfK4FeqRBBSN+DGXHKFHgYVExMVFG1 11sQ== X-Gm-Message-State: AOAM5330y391Ivh0GQ191L8D45twTeBfUGrEPPS7qyVZUebzLIGEvSgq rJjZ7Z57Y9vEWrHluRV/o6xemR9U X-Google-Smtp-Source: ABdhPJwHyAo9evyi07ZxH1fxDvR3iMkL9B5SVPVcIfkKS+n0S6GDV2UXa4WJNm+XrElLzCkk+zcJOA== X-Received: by 2002:a5d:688d:: with SMTP id h13mr6284781wru.303.1594740910209; Tue, 14 Jul 2020 08:35:10 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id w14sm29545452wrt.55.2020.07.14.08.35.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Jul 2020 08:35:09 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 Jul 2020 17:34:51 +0200 Message-Id: <20200714153454.9354-3-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200710134803.4347-1-andreas.rheinhardt@gmail.com> References: <20200710134803.4347-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/7] avcodec/golomb: Document return value of get_ue_golomb_30 on error 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" If the return value is undefined if the value of the encountered exp golomb code was outside the 0..30 range, said function can't be used anywhere where one wants to check for correctness. So document that in this case the return value is outside the range 0..30 (it currently always returns 32 in this case). Signed-off-by: Andreas Rheinhardt --- Btw: get_ue_golomb_30() could be used to skip exp golomb codes with length <= 17 bits. libavcodec/golomb.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libavcodec/golomb.h b/libavcodec/golomb.h index 172d9934e0..8b69196d44 100644 --- a/libavcodec/golomb.h +++ b/libavcodec/golomb.h @@ -135,7 +135,8 @@ static inline unsigned get_ue_golomb_long(GetBitContext *gb) /** * Read unsigned exp golomb code, constraint to a max of 30. - * the return value is undefined if the stored value exceeds 30. + * The return value is outside the range of 0..30 if no exp golomb code + * in that range was encountered. */ static inline int get_ue_golomb_30(GetBitContext *gb) { From patchwork Tue Jul 14 15:34:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 21007 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 F0C0A44AA50 for ; Tue, 14 Jul 2020 18:35:19 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D6FA468B302; Tue, 14 Jul 2020 18:35:19 +0300 (EEST) 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 7CE7968B22A for ; Tue, 14 Jul 2020 18:35:12 +0300 (EEST) Received: by mail-wr1-f66.google.com with SMTP id s10so22476821wrw.12 for ; Tue, 14 Jul 2020 08:35:12 -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=EgeSE0xAQLWCnknElAJ19CL+3e+kUA/j/JSnIQDG8h0=; b=ZTo3m1jPCbKkC5rk0uAIuTc/IXaIuh3YGOrKgutkx/GzrGYVdnVNmQ5kRIdKMh15KA qrTu5dW8f8z82l/22EnM0wYMSS60wbaYg0EYIaCv9fUCYZjY2PkzqG6PUTR1ecyrRkSl wypDbX03i9tCNuvj+xsKZ+hn/e6nPB8qEfoJQlC0isZ69DBrsz9YuUOcCWcjVWN9WsZM X4XPcK9NRG7+Puhs1Kx+w03mNnQa2t01hfWidIc6fTymllJn4Kd5rqaXRaCilY9lUV4w JumKyb1RE5xCsAz/ALwwesdl4jgaxh1SDbsPSqlIPN/QPZddwP68fZQ5cvKx/aWmWJzw y9hQ== 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=EgeSE0xAQLWCnknElAJ19CL+3e+kUA/j/JSnIQDG8h0=; b=kP4Jb6dHCJzAGiATdl+WoqeSd9Yrd4MAlguTmlUtSacxBrEVmP+/dBeVAq5Mecj22+ t1xuKSI44HCGXnJAXZONZRrks2UurcYDcsZY8/n1TJGstMd1LC3V+iF91/hrM7JEzWlQ Y2kHEzhv4LeWXk47BW0YFvNg3bSvaiUUcrTKu7Pw61nDTPa8ZhV8M9UBhva9WRFiuKw7 l423wD2nwnIpoMmvFYV3AwhBK1a/T5m52piVMd3n1IuEtowHn3V7rHxfutWNLiiclumi tlYIGtGtx1hW9PuTkoJj7LQxDJGSeBAWbflliCAPxIpSJZZVSUI6bbDR+tHHX6XzAL4A Geyg== X-Gm-Message-State: AOAM5323mdYwqqUUARm7ixSiHDb0nJxUkv4YrfOh38x5R6tkIiTOnRH1 3OOgkewoOwO/AJWkRWomajnr57Lu X-Google-Smtp-Source: ABdhPJzsgCwLi16B4hP1xZ+pW+Y2VANMQmT0jMsbAiyD2PNGzXZVplNDau7pXUj4M00uD/yNxoyC6Q== X-Received: by 2002:adf:9307:: with SMTP id 7mr6375742wro.414.1594740911632; Tue, 14 Jul 2020 08:35:11 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id w14sm29545452wrt.55.2020.07.14.08.35.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Jul 2020 08:35:10 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 Jul 2020 17:34:52 +0200 Message-Id: <20200714153454.9354-4-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200710134803.4347-1-andreas.rheinhardt@gmail.com> References: <20200710134803.4347-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/7] avcodec/cavsdec, h264*, hevc_parser: Use get_ue_golomb_30 where possible 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" instead of get_ue_golomb(). The difference between the two is that the latter also has to take into account the case in which the read code is more than 9 bits (four preceding zeroes + at most five value bits) long. Signed-off-by: Andreas Rheinhardt --- libavcodec/cavsdec.c | 4 ++-- libavcodec/h264_parse.c | 4 ++-- libavcodec/h264_ps.c | 22 +++++++++++----------- libavcodec/hevc_parser.c | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/libavcodec/cavsdec.c b/libavcodec/cavsdec.c index aaed807196..1c8585f5af 100644 --- a/libavcodec/cavsdec.c +++ b/libavcodec/cavsdec.c @@ -676,8 +676,8 @@ static int decode_mb_i(AVSContext *h, int cbp_code) } h->pred_mode_Y[pos] = predpred; } - pred_mode_uv = get_ue_golomb(gb); - if (pred_mode_uv > 6) { + pred_mode_uv = get_ue_golomb_30(gb); + if (pred_mode_uv > 6U) { av_log(h->avctx, AV_LOG_ERROR, "illegal intra chroma pred mode\n"); return AVERROR_INVALIDDATA; } diff --git a/libavcodec/h264_parse.c b/libavcodec/h264_parse.c index 352ffea948..53e644da66 100644 --- a/libavcodec/h264_parse.c +++ b/libavcodec/h264_parse.c @@ -35,7 +35,7 @@ int ff_h264_pred_weight_table(GetBitContext *gb, const SPS *sps, pwt->use_weight = 0; pwt->use_weight_chroma = 0; - pwt->luma_log2_weight_denom = get_ue_golomb(gb); + pwt->luma_log2_weight_denom = get_ue_golomb_30(gb); if (pwt->luma_log2_weight_denom > 7U) { av_log(logctx, AV_LOG_ERROR, "luma_log2_weight_denom %d is out of range\n", pwt->luma_log2_weight_denom); pwt->luma_log2_weight_denom = 0; @@ -43,7 +43,7 @@ int ff_h264_pred_weight_table(GetBitContext *gb, const SPS *sps, luma_def = 1 << pwt->luma_log2_weight_denom; if (sps->chroma_format_idc) { - pwt->chroma_log2_weight_denom = get_ue_golomb(gb); + pwt->chroma_log2_weight_denom = get_ue_golomb_30(gb); if (pwt->chroma_log2_weight_denom > 7U) { av_log(logctx, AV_LOG_ERROR, "chroma_log2_weight_denom %d is out of range\n", pwt->chroma_log2_weight_denom); pwt->chroma_log2_weight_denom = 0; diff --git a/libavcodec/h264_ps.c b/libavcodec/h264_ps.c index 13823b8dc0..5ad311e52e 100644 --- a/libavcodec/h264_ps.c +++ b/libavcodec/h264_ps.c @@ -181,8 +181,8 @@ static inline int decode_vui_parameters(GetBitContext *gb, void *logctx, /* chroma_location_info_present_flag */ if (get_bits1(gb)) { /* chroma_sample_location_type_top_field */ - sps->chroma_location = get_ue_golomb(gb) + 1; - get_ue_golomb(gb); /* chroma_sample_location_type_bottom_field */ + sps->chroma_location = get_ue_golomb_30(gb) + 1; + get_ue_golomb_30(gb); /* chroma_sample_location_type_bottom_field */ } else sps->chroma_location = AVCHROMA_LOC_LEFT; @@ -224,11 +224,11 @@ static inline int decode_vui_parameters(GetBitContext *gb, void *logctx, sps->bitstream_restriction_flag = get_bits1(gb); if (sps->bitstream_restriction_flag) { get_bits1(gb); /* motion_vectors_over_pic_boundaries_flag */ - get_ue_golomb(gb); /* max_bytes_per_pic_denom */ - get_ue_golomb(gb); /* max_bits_per_mb_denom */ - get_ue_golomb(gb); /* log2_max_mv_length_horizontal */ - get_ue_golomb(gb); /* log2_max_mv_length_vertical */ - sps->num_reorder_frames = get_ue_golomb(gb); + get_ue_golomb_30(gb); /* max_bytes_per_pic_denom */ + get_ue_golomb_30(gb); /* max_bits_per_mb_denom */ + get_ue_golomb_30(gb); /* log2_max_mv_length_horizontal */ + get_ue_golomb_30(gb); /* log2_max_mv_length_vertical */ + sps->num_reorder_frames = get_ue_golomb_30(gb); get_ue_golomb(gb); /*max_dec_frame_buffering*/ if (get_bits_left(gb) < 0) { @@ -403,8 +403,8 @@ int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, goto fail; } } - sps->bit_depth_luma = get_ue_golomb(gb) + 8; - sps->bit_depth_chroma = get_ue_golomb(gb) + 8; + sps->bit_depth_luma = get_ue_golomb_30(gb) + 8; + sps->bit_depth_chroma = get_ue_golomb_30(gb) + 8; if (sps->bit_depth_chroma != sps->bit_depth_luma) { avpriv_request_sample(avctx, "Different chroma and luma bit depth"); @@ -428,7 +428,7 @@ int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, sps->bit_depth_chroma = 8; } - log2_max_frame_num_minus4 = get_ue_golomb(gb); + log2_max_frame_num_minus4 = get_ue_golomb_30(gb); if (log2_max_frame_num_minus4 < MIN_LOG2_MAX_FRAME_NUM - 4 || log2_max_frame_num_minus4 > MAX_LOG2_MAX_FRAME_NUM - 4) { av_log(avctx, AV_LOG_ERROR, @@ -441,7 +441,7 @@ int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, sps->poc_type = get_ue_golomb_30(gb); if (sps->poc_type == 0) { // FIXME #define - unsigned t = get_ue_golomb(gb); + unsigned t = get_ue_golomb_30(gb); if (t>12) { av_log(avctx, AV_LOG_ERROR, "log2_max_poc_lsb (%d) is out of range\n", t); goto fail; diff --git a/libavcodec/hevc_parser.c b/libavcodec/hevc_parser.c index 5af4b788d5..3ec490bd34 100644 --- a/libavcodec/hevc_parser.c +++ b/libavcodec/hevc_parser.c @@ -136,7 +136,7 @@ static int hevc_parse_slice_header(AVCodecParserContext *s, H2645NAL *nal, for (i = 0; i < ps->pps->num_extra_slice_header_bits; i++) skip_bits(gb, 1); // slice_reserved_undetermined_flag[] - slice_type = get_ue_golomb(gb); + slice_type = get_ue_golomb_30(gb); if (!(slice_type == HEVC_SLICE_I || slice_type == HEVC_SLICE_P || slice_type == HEVC_SLICE_B)) { av_log(avctx, AV_LOG_ERROR, "Unknown slice type: %d.\n", From patchwork Tue Jul 14 15:34:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 21008 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 E0D0044AA50 for ; Tue, 14 Jul 2020 18:35:21 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C0FE868B29C; Tue, 14 Jul 2020 18:35:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E3FDE6898F7 for ; Tue, 14 Jul 2020 18:35:13 +0300 (EEST) Received: by mail-wr1-f54.google.com with SMTP id a6so22513964wrm.4 for ; Tue, 14 Jul 2020 08:35:13 -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=QVR+Va4Wip8Xfig3oZgqpwY2epXXLnTy/XXNRkirBNc=; b=rpVU301CILxhhXRw4e8cvam68b/4AC/Hn5S7aNkybgijb5+3QCEqRfzwYJ4U7n+Dlq UQ/1si7qSo8lKNwoqy7Zz9l5bUjBEZ0Z94XSPV3NfLSUUzFCWv22AZij+rrGTZ2e1sw3 U5moznEmYkR/25dXEfeHkatD1Q9PmlBDrG9ilTFF/CIPNFaobEAF6A1VQoF420cNFKqn FM/Ey3LJd9FinWkxjNJ4l+F1N9NFNbR6vFj12XXblPou+gLsSSOij4kqiFG3hbeU3xI/ BpXF6C8l5G0V9Rd4kca3TY2S8GryP3X2XJFAbJkPcD3JIBRfqVo7EBLGdz9ldJ6XZqLA 1uoQ== 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=QVR+Va4Wip8Xfig3oZgqpwY2epXXLnTy/XXNRkirBNc=; b=m4sZ7zuKkXGrGK+kVJA9QHZobx9+GQx/idFrYSwHcvnLzfcS673gCCk9bMlT+LxgD6 6pD3O0hoI7QoSV7aWFvGs1Q+0Dmzc8jVsZYu6DPa1rq4ZtUkPce8ClX5odm0CisdqPqy 2Xrp5L6mkdw5RTPicUuh3T6PIymKvLmtWm6HfJrc6HI3CPFDXxw24pm3X/o8fl30EXMi N0db1b+8pVtaxzWHvhjfrVY/AUK3AZTzyZbUNpG6+7aDufUZNU0oewxa/HMCSMjOvX66 VjWNZDPte7pZhPXHDSI7lU+YzOakvPnty8mrX5izbWXicliuwwUFVdXXRTlfyftZeFZb 2K1w== X-Gm-Message-State: AOAM532VX1LCeujf1gXDPnBhpzpU4s8yEWtvpot/JU545QjLqMzThp3t h75r439TYyhSdaADq8GHYT4FYwSB X-Google-Smtp-Source: ABdhPJxqjNiJbfBX8MSEa+Z0m1hTcwD6kMSY/IioOfiqsGF1vX90VZTmNre8aC/+riWzL9ppyAs1jA== X-Received: by 2002:adf:fd8e:: with SMTP id d14mr6520975wrr.202.1594740912627; Tue, 14 Jul 2020 08:35:12 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id w14sm29545452wrt.55.2020.07.14.08.35.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Jul 2020 08:35:11 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 Jul 2020 17:34:53 +0200 Message-Id: <20200714153454.9354-5-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200710134803.4347-1-andreas.rheinhardt@gmail.com> References: <20200710134803.4347-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/7] avcodec/h264*: Omit potentially wrong values from log messages 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" get_ue_golomb_30() and get_ue_golomb() (as well as get_ue_golomb2()) can only parse values within a certain range correctly; if the parsed value is not within said range, the latter two functions return AVERROR_INVALIDDATA, while the former returns something outside of said range (currently 32 for a 0-30 range). So the return values are good enough to determine whether an exp golomb code in the desired range has been encountered, but they are not necessarily correct. Therefore they should not be used in error messages stating that a certain value (the return value of these functions) is out-of-range; instead just state the correct range and that the parsed value is not in said range. Signed-off-by: Andreas Rheinhardt --- libavcodec/cavsdec.c | 2 +- libavcodec/h264_cavlc.c | 14 +++++++------- libavcodec/h264_parse.c | 4 ++-- libavcodec/h264_parser.c | 2 +- libavcodec/h264_ps.c | 26 ++++++++++++++------------ libavcodec/h264_slice.c | 2 +- 6 files changed, 26 insertions(+), 24 deletions(-) diff --git a/libavcodec/cavsdec.c b/libavcodec/cavsdec.c index 1c8585f5af..0aea9757b7 100644 --- a/libavcodec/cavsdec.c +++ b/libavcodec/cavsdec.c @@ -615,7 +615,7 @@ static inline int decode_residual_inter(AVSContext *h) /* get coded block pattern */ int cbp = get_ue_golomb(&h->gb); if (cbp > 63U) { - av_log(h->avctx, AV_LOG_ERROR, "illegal inter cbp %d\n", cbp); + av_log(h->avctx, AV_LOG_ERROR, "Inter cbp not in 0-63 range\n"); return AVERROR_INVALIDDATA; } h->cbp = cbp_tab[cbp][1]; diff --git a/libavcodec/h264_cavlc.c b/libavcodec/h264_cavlc.c index 51091abbe1..c4b14d2578 100644 --- a/libavcodec/h264_cavlc.c +++ b/libavcodec/h264_cavlc.c @@ -762,7 +762,7 @@ int ff_h264_decode_mb_cavlc(const H264Context *h, H264SliceContext *sl) mb_type--; decode_intra_mb: if(mb_type > 25){ - av_log(h->avctx, AV_LOG_ERROR, "mb_type %d in %c slice too large at %d %d\n", mb_type, av_get_picture_type_char(sl->slice_type), sl->mb_x, sl->mb_y); + av_log(h->avctx, AV_LOG_ERROR, "mb_type in %c slice too large at %d %d\n", av_get_picture_type_char(sl->slice_type), sl->mb_x, sl->mb_y); return -1; } partition_count=0; @@ -891,7 +891,7 @@ decode_intra_mb: }else{ tmp = get_ue_golomb2(&sl->gb); if(tmp>=ref_count){ - av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", tmp); + av_log(h->avctx, AV_LOG_ERROR, "ref overflow\n"); return -1; } } @@ -967,7 +967,7 @@ decode_intra_mb: }else{ val = get_ue_golomb2(&sl->gb); if (val >= rc) { - av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", val); + av_log(h->avctx, AV_LOG_ERROR, "ref overflow\n"); return -1; } } @@ -998,7 +998,7 @@ decode_intra_mb: }else{ val = get_ue_golomb2(&sl->gb); if (val >= rc) { - av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", val); + av_log(h->avctx, AV_LOG_ERROR, "ref overflow\n"); return -1; } } @@ -1036,7 +1036,7 @@ decode_intra_mb: }else{ val = get_ue_golomb2(&sl->gb); if (val >= rc) { - av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", val); + av_log(h->avctx, AV_LOG_ERROR, "ref overflow\n"); return -1; } } @@ -1071,7 +1071,7 @@ decode_intra_mb: if(decode_chroma){ if(cbp > 47){ - av_log(h->avctx, AV_LOG_ERROR, "cbp too large (%u) at %d %d\n", cbp, sl->mb_x, sl->mb_y); + av_log(h->avctx, AV_LOG_ERROR, "cbp >%d at %d %d\n", 47, sl->mb_x, sl->mb_y); return -1; } if (IS_INTRA4x4(mb_type)) @@ -1080,7 +1080,7 @@ decode_intra_mb: cbp = ff_h264_golomb_to_inter_cbp[cbp]; }else{ if(cbp > 15){ - av_log(h->avctx, AV_LOG_ERROR, "cbp too large (%u) at %d %d\n", cbp, sl->mb_x, sl->mb_y); + av_log(h->avctx, AV_LOG_ERROR, "cbp >%d at %d %d\n", 15, sl->mb_x, sl->mb_y); return -1; } if(IS_INTRA4x4(mb_type)) cbp= golomb_to_intra4x4_cbp_gray[cbp]; diff --git a/libavcodec/h264_parse.c b/libavcodec/h264_parse.c index 53e644da66..fd9b824756 100644 --- a/libavcodec/h264_parse.c +++ b/libavcodec/h264_parse.c @@ -37,7 +37,7 @@ int ff_h264_pred_weight_table(GetBitContext *gb, const SPS *sps, pwt->luma_log2_weight_denom = get_ue_golomb_30(gb); if (pwt->luma_log2_weight_denom > 7U) { - av_log(logctx, AV_LOG_ERROR, "luma_log2_weight_denom %d is out of range\n", pwt->luma_log2_weight_denom); + av_log(logctx, AV_LOG_ERROR, "luma_log2_weight_denom not in 0-7 range\n"); pwt->luma_log2_weight_denom = 0; } luma_def = 1 << pwt->luma_log2_weight_denom; @@ -45,7 +45,7 @@ int ff_h264_pred_weight_table(GetBitContext *gb, const SPS *sps, if (sps->chroma_format_idc) { pwt->chroma_log2_weight_denom = get_ue_golomb_30(gb); if (pwt->chroma_log2_weight_denom > 7U) { - av_log(logctx, AV_LOG_ERROR, "chroma_log2_weight_denom %d is out of range\n", pwt->chroma_log2_weight_denom); + av_log(logctx, AV_LOG_ERROR, "chroma_log2_weight_denom not in 0-7 range\n"); pwt->chroma_log2_weight_denom = 0; } chroma_def = 1 << pwt->chroma_log2_weight_denom; diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c index 8af094075f..3b62567245 100644 --- a/libavcodec/h264_parser.c +++ b/libavcodec/h264_parser.c @@ -351,7 +351,7 @@ static inline int parse_nal_units(AVCodecParserContext *s, pps_id = get_ue_golomb(&nal.gb); if (pps_id >= MAX_PPS_COUNT) { av_log(avctx, AV_LOG_ERROR, - "pps_id %u out of range\n", pps_id); + "pps_id not in 0-255 range\n"); goto fail; } if (!p->ps.pps_list[pps_id]) { diff --git a/libavcodec/h264_ps.c b/libavcodec/h264_ps.c index 5ad311e52e..18e5d9578f 100644 --- a/libavcodec/h264_ps.c +++ b/libavcodec/h264_ps.c @@ -412,8 +412,7 @@ int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, } if (sps->bit_depth_luma < 8 || sps->bit_depth_luma > 14 || sps->bit_depth_chroma < 8 || sps->bit_depth_chroma > 14) { - av_log(avctx, AV_LOG_ERROR, "illegal bit depth value (%d, %d)\n", - sps->bit_depth_luma, sps->bit_depth_chroma); + av_log(avctx, AV_LOG_ERROR, "bit depth value outside of 8-14 range\n"); goto fail; } sps->transform_bypass = get_bits1(gb); @@ -443,7 +442,7 @@ int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, if (sps->poc_type == 0) { // FIXME #define unsigned t = get_ue_golomb_30(gb); if (t>12) { - av_log(avctx, AV_LOG_ERROR, "log2_max_poc_lsb (%d) is out of range\n", t); + av_log(avctx, AV_LOG_ERROR, "log2_max_poc_lsb not in 0-12 range\n"); goto fail; } sps->log2_max_poc_lsb = t + 4; @@ -465,7 +464,7 @@ int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, if ((unsigned)sps->poc_cycle_length >= FF_ARRAY_ELEMS(sps->offset_for_ref_frame)) { av_log(avctx, AV_LOG_ERROR, - "poc_cycle_length overflow %d\n", sps->poc_cycle_length); + "num_ref_frames_in_pic_order_cnt_cycle not in 0-255 range\n"); goto fail; } @@ -478,7 +477,7 @@ int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, } } } else if (sps->poc_type != 2) { - av_log(avctx, AV_LOG_ERROR, "illegal POC type %d\n", sps->poc_type); + av_log(avctx, AV_LOG_ERROR, "illegal POC type\n"); goto fail; } @@ -487,7 +486,7 @@ int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, sps->ref_frame_count = FFMAX(2, sps->ref_frame_count); if (sps->ref_frame_count > MAX_DELAYED_PIC_COUNT) { av_log(avctx, AV_LOG_ERROR, - "too many reference frames %d\n", sps->ref_frame_count); + "too many reference frames\n"); goto fail; } sps->gaps_in_frame_num_allowed_flag = get_bits1(gb); @@ -758,7 +757,7 @@ int ff_h264_decode_picture_parameter_set(GetBitContext *gb, AVCodecContext *avct int ret; if (pps_id >= MAX_PPS_COUNT) { - av_log(avctx, AV_LOG_ERROR, "pps_id %u out of range\n", pps_id); + av_log(avctx, AV_LOG_ERROR, "pps_id not in 0-255 range\n"); return AVERROR_INVALIDDATA; } @@ -782,9 +781,13 @@ int ff_h264_decode_picture_parameter_set(GetBitContext *gb, AVCodecContext *avct memcpy(pps->data, gb->buffer, pps->data_size); pps->sps_id = get_ue_golomb2(gb); - if ((unsigned)pps->sps_id >= MAX_SPS_COUNT || - !ps->sps_list[pps->sps_id]) { - av_log(avctx, AV_LOG_ERROR, "sps_id %u out of range\n", pps->sps_id); + if ((unsigned)pps->sps_id >= MAX_SPS_COUNT) { + av_log(avctx, AV_LOG_ERROR, "sps_id not in 0-31 range\n"); + ret = AVERROR_INVALIDDATA; + goto fail; + } + if (!ps->sps_list[pps->sps_id]) { + av_log(avctx, AV_LOG_ERROR, "unavailable SPS (id %d) referenced\n", pps->sps_id); ret = AVERROR_INVALIDDATA; goto fail; } @@ -798,8 +801,7 @@ int ff_h264_decode_picture_parameter_set(GetBitContext *gb, AVCodecContext *avct if (sps->bit_depth_luma > 14) { av_log(avctx, AV_LOG_ERROR, - "Invalid luma bit depth=%d\n", - sps->bit_depth_luma); + "Invalid luma bit depth > 14\n"); ret = AVERROR_INVALIDDATA; goto fail; } else if (sps->bit_depth_luma == 11 || sps->bit_depth_luma == 13) { diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c index 8f4b7ef1ec..29b57bc305 100644 --- a/libavcodec/h264_slice.c +++ b/libavcodec/h264_slice.c @@ -1764,7 +1764,7 @@ static int h264_slice_header_parse(const H264Context *h, H264SliceContext *sl, sl->pps_id = get_ue_golomb(&sl->gb); if (sl->pps_id >= MAX_PPS_COUNT) { - av_log(h->avctx, AV_LOG_ERROR, "pps_id %u out of range\n", sl->pps_id); + av_log(h->avctx, AV_LOG_ERROR, "pps_id not in 0-255 range\n"); return AVERROR_INVALIDDATA; } if (!h->ps.pps_list[sl->pps_id]) { From patchwork Tue Jul 14 15:34:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 21009 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 780F344AA50 for ; Tue, 14 Jul 2020 18:35:22 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 69A0B68B3F4; Tue, 14 Jul 2020 18:35:22 +0300 (EEST) 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 1356568A585 for ; Tue, 14 Jul 2020 18:35:15 +0300 (EEST) Received: by mail-wr1-f66.google.com with SMTP id a6so22514136wrm.4 for ; Tue, 14 Jul 2020 08:35:15 -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=HDx1jrqRAV5Bk8PK4DHqdt6pUmULJOsk134xIM5mEYM=; b=bov8HlUd5zYRynENnWCypOqdVbCTajJFFzNzgcQwzqn5CVKY4Prp/jHZvSMqxJBhIg kn0hJzDaRRzyVDIHJko0NaizvrbrJgDKXRy9BX7BIrAVz3imLqApEjhYsGt16Dxvo41w yM7FElsybQBYYoPHyeUDf++tRYXKU2+03PEnuL2bHQoB7xe2Q/CXS2easLQLev0QW2Cg kXGiPZYfGlJjIcbYGCCIdzHxTsoMkxQ6Ci5w9BGUZoAgu1468ficzAFmrIupnMGZJdOB oiZ3Qxv6bswI9LLPU2gJSoeZ5BknRHyv8LgnMOcz/AHWLvGz6BTi6Lf9EvtznRdygfMe Ogjw== 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=HDx1jrqRAV5Bk8PK4DHqdt6pUmULJOsk134xIM5mEYM=; b=jGQqQes1BFt8ZClXWOPIoKMhC7aQiPqGbwOy8Kr6oMRSInAr8Nbey8drQlj+9Tmar+ kB/lVZ5dCdsL8xmiH/kjN51SbQg/3ZUU70fe4noddGuaeBZQN3oIYYq85nNdHIVkHsMj JT8dteEumrvw+k2UrVZx7GUh+xNTjhwqP5zB6UBbupDBaz0VpsyQ0ss+L3SSyU9CID0u d9nRjrwdtQ3BzLRstkdLoLY9ltmzrB9UyqIVxhpLUeEipAAFBAut5jMOGfQwPYVDQQDe SqzpXM/JoVNn1ynAM3D6S49HcVbX4iZgyQEEmXuNBsFOmm/LDuATtWl0W/UXrGNqbBaF ITbA== X-Gm-Message-State: AOAM530EqekPRgxycwyBP9ZX/gZxJgogDpiVOHoKjf15G6uG6KCnMxsz Uj+pLBuc97AWRFLYHWUQTNYoEIH0 X-Google-Smtp-Source: ABdhPJwbkz6mid1hWmF7JhKaIE2VEDK9dDFfI0Uxqhuq8lpUJQee7zWiZmpvMClcsFhr5Yx/5dj/MA== X-Received: by 2002:adf:f082:: with SMTP id n2mr6811200wro.326.1594740914152; Tue, 14 Jul 2020 08:35:14 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id w14sm29545452wrt.55.2020.07.14.08.35.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Jul 2020 08:35:12 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 Jul 2020 17:34:54 +0200 Message-Id: <20200714153454.9354-6-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200710134803.4347-1-andreas.rheinhardt@gmail.com> References: <20200710134803.4347-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 7/7] avcodec/h264*: Use get_ue_golomb2() where appropriate 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" The difference of this function and get_ue_golomb() is that the latter emits an error message upon encountering an exp golomb code outside the range of 0..8190. But this error message is unnecessary in cases where there is a dedicate error message in case of range error (these error messages also use a correct logcontext and not NULL). So replace get_ue_golomb() by get_ue_golomb2() everywhere where there is a dedicated error message in case of errors. Signed-off-by: Andreas Rheinhardt --- libavcodec/cavsdec.c | 6 +++--- libavcodec/h264_cavlc.c | 4 ++-- libavcodec/h264_parse.c | 4 ++-- libavcodec/h264_parser.c | 2 +- libavcodec/h264_ps.c | 8 ++++---- libavcodec/h264_slice.c | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/libavcodec/cavsdec.c b/libavcodec/cavsdec.c index 0aea9757b7..8da57ec80a 100644 --- a/libavcodec/cavsdec.c +++ b/libavcodec/cavsdec.c @@ -502,7 +502,7 @@ static inline void mv_pred_sym(AVSContext *h, cavs_vector *src, /** kth-order exponential golomb code */ static inline int get_ue_code(GetBitContext *gb, int order) { - unsigned ret = get_ue_golomb(gb); + unsigned ret = get_ue_golomb2(gb); if (ret >= ((1U<<31)>>order)) { av_log(NULL, AV_LOG_ERROR, "get_ue_code: value too larger\n"); return AVERROR_INVALIDDATA; @@ -613,7 +613,7 @@ static inline int decode_residual_inter(AVSContext *h) int block; /* get coded block pattern */ - int cbp = get_ue_golomb(&h->gb); + int cbp = get_ue_golomb2(&h->gb); if (cbp > 63U) { av_log(h->avctx, AV_LOG_ERROR, "Inter cbp not in 0-63 range\n"); return AVERROR_INVALIDDATA; @@ -685,7 +685,7 @@ static int decode_mb_i(AVSContext *h, int cbp_code) /* get coded block pattern */ if (h->cur.f->pict_type == AV_PICTURE_TYPE_I) - cbp_code = get_ue_golomb(gb); + cbp_code = get_ue_golomb2(gb); if (cbp_code > 63U) { av_log(h->avctx, AV_LOG_ERROR, "illegal intra cbp\n"); return AVERROR_INVALIDDATA; diff --git a/libavcodec/h264_cavlc.c b/libavcodec/h264_cavlc.c index c4b14d2578..3dcb82c71c 100644 --- a/libavcodec/h264_cavlc.c +++ b/libavcodec/h264_cavlc.c @@ -739,7 +739,7 @@ int ff_h264_decode_mb_cavlc(const H264Context *h, H264SliceContext *sl) sl->prev_mb_skipped = 0; - mb_type= get_ue_golomb(&sl->gb); + mb_type = get_ue_golomb2(&sl->gb); if (sl->slice_type_nos == AV_PICTURE_TYPE_B) { if(mb_type < 23){ partition_count = ff_h264_b_mb_type_info[mb_type].partition_count; @@ -1067,7 +1067,7 @@ decode_intra_mb: write_back_motion(h, sl, mb_type); if(!IS_INTRA16x16(mb_type)){ - cbp= get_ue_golomb(&sl->gb); + cbp = get_ue_golomb2(&sl->gb); if(decode_chroma){ if(cbp > 47){ diff --git a/libavcodec/h264_parse.c b/libavcodec/h264_parse.c index fd9b824756..11ae20a32a 100644 --- a/libavcodec/h264_parse.c +++ b/libavcodec/h264_parse.c @@ -234,9 +234,9 @@ int ff_h264_parse_ref_count(int *plist_count, int ref_count[2], num_ref_idx_active_override_flag = get_bits1(gb); if (num_ref_idx_active_override_flag) { - ref_count[0] = get_ue_golomb(gb) + 1; + ref_count[0] = get_ue_golomb2(gb) + 1; if (slice_type_nos == AV_PICTURE_TYPE_B) { - ref_count[1] = get_ue_golomb(gb) + 1; + ref_count[1] = get_ue_golomb2(gb) + 1; } else // full range is spec-ok in this case, even for frames ref_count[1] = 1; diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c index 3b62567245..d5bf80a89a 100644 --- a/libavcodec/h264_parser.c +++ b/libavcodec/h264_parser.c @@ -348,7 +348,7 @@ static inline int parse_nal_units(AVCodecParserContext *s, /* key frame, since recovery_frame_cnt is set */ s->key_frame = 1; } - pps_id = get_ue_golomb(&nal.gb); + pps_id = get_ue_golomb2(&nal.gb); if (pps_id >= MAX_PPS_COUNT) { av_log(avctx, AV_LOG_ERROR, "pps_id not in 0-255 range\n"); diff --git a/libavcodec/h264_ps.c b/libavcodec/h264_ps.c index 18e5d9578f..9f0d07810b 100644 --- a/libavcodec/h264_ps.c +++ b/libavcodec/h264_ps.c @@ -459,7 +459,7 @@ int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, goto fail; } - sps->poc_cycle_length = get_ue_golomb(gb); + sps->poc_cycle_length = get_ue_golomb2(gb); if ((unsigned)sps->poc_cycle_length >= FF_ARRAY_ELEMS(sps->offset_for_ref_frame)) { @@ -750,7 +750,7 @@ int ff_h264_decode_picture_parameter_set(GetBitContext *gb, AVCodecContext *avct { AVBufferRef *pps_buf; const SPS *sps; - unsigned int pps_id = get_ue_golomb(gb); + unsigned int pps_id = get_ue_golomb2(gb); PPS *pps; int qp_bd_offset; int bits_left; @@ -821,8 +821,8 @@ int ff_h264_decode_picture_parameter_set(GetBitContext *gb, AVCodecContext *avct ret = AVERROR_PATCHWELCOME; goto fail; } - pps->ref_count[0] = get_ue_golomb(gb) + 1; - pps->ref_count[1] = get_ue_golomb(gb) + 1; + pps->ref_count[0] = get_ue_golomb2(gb) + 1; + pps->ref_count[1] = get_ue_golomb2(gb) + 1; if (pps->ref_count[0] - 1 > 32 - 1 || pps->ref_count[1] - 1 > 32 - 1) { av_log(avctx, AV_LOG_ERROR, "reference overflow (pps)\n"); ret = AVERROR_INVALIDDATA; diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c index 29b57bc305..fab8cbc839 100644 --- a/libavcodec/h264_slice.c +++ b/libavcodec/h264_slice.c @@ -1762,7 +1762,7 @@ static int h264_slice_header_parse(const H264Context *h, H264SliceContext *sl, return AVERROR_INVALIDDATA; } - sl->pps_id = get_ue_golomb(&sl->gb); + sl->pps_id = get_ue_golomb2(&sl->gb); if (sl->pps_id >= MAX_PPS_COUNT) { av_log(h->avctx, AV_LOG_ERROR, "pps_id not in 0-255 range\n"); return AVERROR_INVALIDDATA;