libdvbv5: fix lost ressource in atsc_eit
authorAndré Roth <neolynx@gmail.com>
Sun, 30 Mar 2014 16:21:17 +0000 (13:21 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Mon, 31 Mar 2014 20:00:31 +0000 (17:00 -0300)
if the title of the EIT event is longer than the available data,
make sure the allocated buffer is not lost

Signed-off-by: André Roth <neolynx@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
lib/libdvbv5/descriptors/atsc_eit.c

index 92764df..9e1397d 100644 (file)
@@ -74,6 +74,11 @@ ssize_t atsc_table_eit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
                 atsc_time(event->start_time, &event->start);
                event->source_id = eit->header.id;
 
+               if(!*head)
+                       *head = event;
+               if(last)
+                       last->next = event;
+
                size = event->title_length - 1;
                if (p + size > endbuf) {
                        dvb_logerr("%s: short read %zd/%zd bytes", __func__,
@@ -83,11 +88,6 @@ ssize_t atsc_table_eit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
                 /* TODO: parse title */
                 p += size;
 
-               if(!*head)
-                       *head = event;
-               if(last)
-                       last->next = event;
-
                /* get the descriptors for each program */
                size = sizeof(union atsc_table_eit_desc_length);
                if (p + size > endbuf) {