diff mbox

[FFmpeg-devel] avcodec/hevc_ps: set correct return value

Message ID 1511752922-25710-1-git-send-email-bianpan2016@163.com
State New
Headers show

Commit Message

Pan Bian Nov. 27, 2017, 3:22 a.m. UTC
When the call to get_bits_left() fails, the return value is not an
negative error code. This patch explicitly assignes an error code to the
return variable ret.

Signed-off-by: Pan Bian <bianpan2016@163.com>
---
 libavcodec/hevc_ps.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Carl Eugen Hoyos Nov. 27, 2017, 3:31 a.m. UTC | #1
2017-11-27 4:22 GMT+01:00 Pan Bian <bianpan2016@163.com>:
> When the call to get_bits_left() fails, the return value is not an
> negative error code. This patch explicitly assignes an error
> code to the return variable ret.

Can't this break decoding of damaged streams that could be
decoded so far?

Carl Eugen
Pan Bian Nov. 27, 2017, 8:25 a.m. UTC | #2
On Mon, Nov 27, 2017 at 04:31:38AM +0100, Carl Eugen Hoyos wrote:
> 2017-11-27 4:22 GMT+01:00 Pan Bian <bianpan2016@163.com>:
> > When the call to get_bits_left() fails, the return value is not an
> > negative error code. This patch explicitly assignes an error
> > code to the return variable ret.
> 
> Can't this break decoding of damaged streams that could be
> decoded so far?

Dear Eugen,

I see your consideration. I am not familar with the decoding logic.
Sorry for that. I sent this patch because I found that some other decode
functions (e.g. ff_hevc_decode_nal_vps) return error code
AVERROR_INVALIDDATA if overread occurs.

Thanks!

Pan Bian

> 
> Carl Eugen
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
diff mbox

Patch

diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c
index a4f7ed6..f87a577 100644
--- a/libavcodec/hevc_ps.c
+++ b/libavcodec/hevc_ps.c
@@ -1691,6 +1691,7 @@  int ff_hevc_decode_nal_pps(GetBitContext *gb, AVCodecContext *avctx,
     if (get_bits_left(gb) < 0) {
         av_log(avctx, AV_LOG_ERROR,
                "Overread PPS by %d bits\n", -get_bits_left(gb));
+        ret = AVERROR_INVALIDDATA;
         goto err;
     }