mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-23 14:36:24 +00:00
mpegts: Fix Extended DVB descriptor parsing
We were over-reading data, and the nb_items field isn't needed, it's a property of the GPtrArray
This commit is contained in:
parent
3ddcec8062
commit
f7b1b5fcd3
2 changed files with 11 additions and 17 deletions
|
@ -924,10 +924,9 @@ gboolean
|
||||||
gst_mpegts_descriptor_parse_dvb_extended_event (const GstMpegTsDescriptor
|
gst_mpegts_descriptor_parse_dvb_extended_event (const GstMpegTsDescriptor
|
||||||
* descriptor, GstMpegTsExtendedEventDescriptor * res)
|
* descriptor, GstMpegTsExtendedEventDescriptor * res)
|
||||||
{
|
{
|
||||||
guint8 *data, *desc_data;
|
guint8 *data, *pdata;
|
||||||
guint8 tmp, len_item;
|
guint8 tmp, len_item;
|
||||||
GstMpegTsExtendedEventItem *item;
|
GstMpegTsExtendedEventItem *item;
|
||||||
guint i;
|
|
||||||
|
|
||||||
g_return_val_if_fail (descriptor != NULL && res != NULL, FALSE);
|
g_return_val_if_fail (descriptor != NULL && res != NULL, FALSE);
|
||||||
/* Need at least 6 bytes (1 for desc number, 3 for language code, 2 for the loop length) */
|
/* Need at least 6 bytes (1 for desc number, 3 for language code, 2 for the loop length) */
|
||||||
|
@ -946,32 +945,30 @@ gst_mpegts_descriptor_parse_dvb_extended_event (const GstMpegTsDescriptor
|
||||||
data += 3;
|
data += 3;
|
||||||
|
|
||||||
len_item = *data;
|
len_item = *data;
|
||||||
|
if (len_item > descriptor->length - 5)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
data += 1;
|
data += 1;
|
||||||
|
|
||||||
res->nb_items = 0;
|
|
||||||
res->items = g_ptr_array_new_with_free_func ((GDestroyNotify)
|
res->items = g_ptr_array_new_with_free_func ((GDestroyNotify)
|
||||||
_gst_mpegts_extended_event_item_free);
|
_gst_mpegts_extended_event_item_free);
|
||||||
|
|
||||||
for (i = 0; i < len_item;) {
|
pdata = data + len_item;
|
||||||
desc_data = data;
|
while (data < pdata) {
|
||||||
item = g_slice_new0 (GstMpegTsExtendedEventItem);
|
item = g_slice_new0 (GstMpegTsExtendedEventItem);
|
||||||
item->item_description =
|
item->item_description =
|
||||||
get_encoding_and_convert ((const gchar *) desc_data + 1, *desc_data);
|
get_encoding_and_convert ((const gchar *) data + 1, *data);
|
||||||
|
|
||||||
desc_data += *desc_data + 1;
|
data += *data + 1;
|
||||||
i += *desc_data + 1;
|
|
||||||
|
|
||||||
item->item =
|
item->item = get_encoding_and_convert ((const gchar *) data + 1, *data);
|
||||||
get_encoding_and_convert ((const gchar *) desc_data + 1, *desc_data);
|
|
||||||
|
|
||||||
desc_data += *desc_data + 1;
|
data += *data + 1;
|
||||||
i += *desc_data + 1;
|
|
||||||
|
|
||||||
g_ptr_array_add (res->items, item);
|
g_ptr_array_add (res->items, item);
|
||||||
res->nb_items += 1;
|
|
||||||
}
|
}
|
||||||
data += len_item;
|
if (pdata != data)
|
||||||
|
return FALSE;
|
||||||
res->text = get_encoding_and_convert ((const gchar *) data + 1, *data);
|
res->text = get_encoding_and_convert ((const gchar *) data + 1, *data);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -473,8 +473,6 @@ struct _GstMpegTsExtendedEventItem
|
||||||
* GstMpegTsExtendedEventDescriptor:
|
* GstMpegTsExtendedEventDescriptor:
|
||||||
* @desctiptor_number:
|
* @desctiptor_number:
|
||||||
* @last_descriptor_number:
|
* @last_descriptor_number:
|
||||||
* @language_code:
|
|
||||||
* @nb_items:
|
|
||||||
* @items: (element-type GstMpegTsExtendedEventItem): the #GstMpegTsExtendedEventItem
|
* @items: (element-type GstMpegTsExtendedEventItem): the #GstMpegTsExtendedEventItem
|
||||||
* @text:
|
* @text:
|
||||||
*
|
*
|
||||||
|
@ -485,7 +483,6 @@ struct _GstMpegTsExtendedEventDescriptor
|
||||||
guint8 descriptor_number;
|
guint8 descriptor_number;
|
||||||
guint8 last_descriptor_number;
|
guint8 last_descriptor_number;
|
||||||
gchar language_code[3];
|
gchar language_code[3];
|
||||||
guint8 nb_items;
|
|
||||||
GPtrArray *items;
|
GPtrArray *items;
|
||||||
gchar *text;
|
gchar *text;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue