X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fh264_ps.c;h=ae1b60a45bc07abe524256801a7d1e80847be2d9;hb=7ad528cf23da5479c7cbf4676d071a07a709d8b6;hp=0d384dda2244eed0ae9c85fc1e7600fc177a103d;hpb=55b866f618582350bcc5489d4e96afd40c9c8c44;p=ffmpeg diff --git a/libavcodec/h264_ps.c b/libavcodec/h264_ps.c index 0d384dda224..ae1b60a45bc 100644 --- a/libavcodec/h264_ps.c +++ b/libavcodec/h264_ps.c @@ -559,7 +559,7 @@ int ff_h264_decode_seq_parameter_set(H264Context *h, int ignore_truncation) fail: av_free(sps); - return -1; + return AVERROR_INVALIDDATA; } static void build_qp_table(PPS *pps, int t, int index, const int depth) @@ -593,6 +593,7 @@ int ff_h264_decode_picture_parameter_set(H264Context *h, int bit_length) PPS *pps; int qp_bd_offset; int bits_left; + int ret; if (pps_id >= MAX_PPS_COUNT) { av_log(h->avctx, AV_LOG_ERROR, "pps_id %u out of range\n", pps_id); @@ -606,6 +607,7 @@ int ff_h264_decode_picture_parameter_set(H264Context *h, int bit_length) if ((unsigned)pps->sps_id >= MAX_SPS_COUNT || !h->sps_buffers[pps->sps_id]) { av_log(h->avctx, AV_LOG_ERROR, "sps_id %u out of range\n", pps->sps_id); + ret = AVERROR_INVALIDDATA; goto fail; } sps = h->sps_buffers[pps->sps_id]; @@ -613,11 +615,13 @@ int ff_h264_decode_picture_parameter_set(H264Context *h, int bit_length) av_log(h->avctx, AV_LOG_ERROR, "Invalid luma bit depth=%d\n", sps->bit_depth_luma); + ret = AVERROR_INVALIDDATA; goto fail; } else if (sps->bit_depth_luma == 11 || sps->bit_depth_luma == 13) { av_log(h->avctx, AV_LOG_ERROR, "Unimplemented luma bit depth=%d\n", sps->bit_depth_luma); + ret = AVERROR_PATCHWELCOME; goto fail; } @@ -663,6 +667,7 @@ int ff_h264_decode_picture_parameter_set(H264Context *h, int bit_length) pps->ref_count[1] = get_ue_golomb(&h->gb) + 1; if (pps->ref_count[0] - 1 > 32 - 1 || pps->ref_count[1] - 1 > 32 - 1) { av_log(h->avctx, AV_LOG_ERROR, "reference overflow (pps)\n"); + ret = AVERROR_INVALIDDATA; goto fail; } @@ -724,5 +729,5 @@ int ff_h264_decode_picture_parameter_set(H264Context *h, int bit_length) fail: av_free(pps); - return -1; + return ret; }