]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
dvb_tables: fix extended event parsing 79/head
authorJaroslav Kysela <perex@perex.cz>
Tue, 20 Mar 2012 15:09:20 +0000 (16:09 +0100)
committerJaroslav Kysela <perex@perex.cz>
Tue, 20 Mar 2012 18:58:23 +0000 (19:58 +0100)
The ext_desc / ext_item strings are just copied without language handling.
This patch uses standard dvb_get_string_with_len() function. It's safer
and the language conversions are handled correctly.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/dvb/dvb_tables.c

index 74aa46766dfdd70deb4ba265cdc203a7d46f8970..00042008fbc22eabfb2eff7c9059249f1ced9fcf 100644 (file)
@@ -411,9 +411,13 @@ dvb_desc_extended_event(uint8_t *ptr, int len,
     if ((desclen - strlen(desc)) > 2)
     {
       /* get description -> append to desc if space left */
-      strncat(desc, "\n", 1);
-      strncat(desc, (char*)(items+1), 
-          items[0] > (desclen - strlen(desc)) ? (desclen - strlen(desc)) : items[0]);
+      if (desc[0] != '\0')
+        strncat(desc, "\n", 1);
+      if((r = dvb_get_string_with_len(desc + strlen(desc),
+                                      desclen - strlen(desc),
+                                      items, (localptr + count) - items,
+                                      dvb_default_charset)) < 0)
+        return -1;
     }
 
     items += 1 + items[0];
@@ -422,9 +426,13 @@ dvb_desc_extended_event(uint8_t *ptr, int len,
     if ((itemlen - strlen(item)) > 2)
     {
       /* get item -> append to item if space left */
-      strncat(item, "\n", 1);
-      strncat(item, (char*)(items+1), 
-          items[0] > (itemlen - strlen(item)) ? (itemlen - strlen(item)) : items[0]);
+      if (item[0] != '\0')
+        strncat(item, "\n", 1);
+      if((r = dvb_get_string_with_len(item + strlen(item),
+                                      itemlen - strlen(item),
+                                      items, (localptr + count) - items,
+                                      dvb_default_charset)) < 0)
+        return -1;
     }
 
     /* go to next item */