h264_parse: make sure the ref count is zeroed on all failure paths

pull/215/head
Anton Khirnov 9 years ago
parent a6e27f7add
commit 71d3305c27
  1. 15
      libavcodec/h264_parse.c

@ -194,11 +194,11 @@ int ff_h264_parse_ref_count(int *plist_count, int ref_count[2],
if (num_ref_idx_active_override_flag) { if (num_ref_idx_active_override_flag) {
ref_count[0] = get_ue_golomb(gb) + 1; ref_count[0] = get_ue_golomb(gb) + 1;
if (ref_count[0] < 1) if (ref_count[0] < 1)
return AVERROR_INVALIDDATA; goto fail;
if (slice_type_nos == AV_PICTURE_TYPE_B) { if (slice_type_nos == AV_PICTURE_TYPE_B) {
ref_count[1] = get_ue_golomb(gb) + 1; ref_count[1] = get_ue_golomb(gb) + 1;
if (ref_count[1] < 1) if (ref_count[1] < 1)
return AVERROR_INVALIDDATA; goto fail;
} }
} }
@ -213,12 +213,15 @@ int ff_h264_parse_ref_count(int *plist_count, int ref_count[2],
max_refs = picture_structure == PICT_FRAME ? 16 : 32; max_refs = picture_structure == PICT_FRAME ? 16 : 32;
if (ref_count[0] > max_refs || ref_count[1] > max_refs) { if (ref_count[0] > max_refs || ref_count[1] > max_refs)
ref_count[0] = ref_count[1] = 0; goto fail;
return AVERROR_INVALIDDATA;
}
*plist_count = list_count; *plist_count = list_count;
return 0; return 0;
fail:
*plist_count = 0;
ref_count[0] = 0;
ref_count[1] = 0;
return AVERROR_INVALIDDATA;
} }

Loading…
Cancel
Save