diff options
author | Seungha Yang <seungha.yang@navercorp.com> | 2018-10-12 19:26:01 +0900 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2018-11-07 23:30:00 +0200 |
commit | 6bd75a5f1436ec4009dff7c5c0c59accae07741b (patch) | |
tree | 5048d0a0f27289e223bbc6b6f9c04ecb497586ba | |
parent | fbeeac3f895fd1792fe3b4b5160ad113b17b765e (diff) | |
download | gstreamer-plugins-bad-6bd75a5f1436ec4009dff7c5c0c59accae07741b.tar.gz |
h265parser: Fix wrong maximum range check in gst_h265_parse_vps()
Fix validation of some syntax.
Fixes #798
-rw-r--r-- | gst-libs/gst/codecparsers/gsth265parser.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/gst-libs/gst/codecparsers/gsth265parser.c b/gst-libs/gst/codecparsers/gsth265parser.c index d1dba6062..8b38c4521 100644 --- a/gst-libs/gst/codecparsers/gsth265parser.c +++ b/gst-libs/gst/codecparsers/gsth265parser.c @@ -1439,10 +1439,12 @@ gst_h265_parse_vps (GstH265NalUnit * nalu, GstH265VPS * vps) } READ_UINT8 (&nr, vps->max_layer_id, 6); - CHECK_ALLOWED_MAX (vps->max_layer_id, 0); + /* shall allow 63 */ + CHECK_ALLOWED_MAX (vps->max_layer_id, 63); READ_UE_MAX (&nr, vps->num_layer_sets_minus1, 1023); - CHECK_ALLOWED_MAX (vps->num_layer_sets_minus1, 0); + /* allowd range is 0 to 1023 */ + CHECK_ALLOWED_MAX (vps->num_layer_sets_minus1, 1023); for (i = 1; i <= vps->num_layer_sets_minus1; i++) for (j = 0; j <= vps->max_layer_id; j++) @@ -1459,11 +1461,16 @@ gst_h265_parse_vps (GstH265NalUnit * nalu, GstH265VPS * vps) READ_UE_MAX (&nr, vps->num_ticks_poc_diff_one_minus1, G_MAXUINT32 - 1); READ_UE_MAX (&nr, vps->num_hrd_parameters, 1024); - CHECK_ALLOWED_MAX (vps->num_hrd_parameters, 1); + /* allowd range is + * 0 to vps_num_layer_sets_minus1 + 1 */ + CHECK_ALLOWED_MAX (vps->num_hrd_parameters, vps->num_layer_sets_minus1 + 1); if (vps->num_hrd_parameters) { READ_UE_MAX (&nr, vps->hrd_layer_set_idx, 1023); - CHECK_ALLOWED_MAX (vps->hrd_layer_set_idx, 0); + /* allowd range is + * ( vps_base_layer_internal_flag ? 0 : 1 ) to vps_num_layer_sets_minus1 + */ + CHECK_ALLOWED_MAX (vps->hrd_layer_set_idx, vps->num_layer_sets_minus1); if (!gst_h265_parse_hrd_parameters (&vps->hrd_params, &nr, vps->cprms_present_flag, vps->max_sub_layers_minus1)) |