]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
xmltv/core: Fix several memory leaks/make more const correct. (#4773)
authorE.Smith <31170571+azlm8t@users.noreply.github.com>
Wed, 6 Dec 2017 21:51:39 +0000 (21:51 +0000)
committerJaroslav Kysela <perex@perex.cz>
Thu, 7 Dec 2017 14:01:42 +0000 (15:01 +0100)
Issue: #4773.

src/epg.c
src/epg.h
src/epggrab/module/xmltv.c
src/string_list.c

index 5bc2801b2c4640d27124646ad2072bee72fbf291..01a5589bf8e98b5247f760a5b006f023ec07adf4 100644 (file)
--- a/src/epg.c
+++ b/src/epg.c
@@ -2228,7 +2228,7 @@ int epg_broadcast_set_description
 }
 
 int epg_broadcast_set_credits
-( epg_broadcast_t *b, htsmsg_t *credits, uint32_t *changed )
+( epg_broadcast_t *b, const htsmsg_t *credits, uint32_t *changed )
 {
   if (!b) return 0;
   const int mod = _epg_object_set_htsmsg(b, &b->credits, credits, changed, EPG_CHANGED_CREDITS);
@@ -2265,14 +2265,14 @@ int epg_broadcast_set_credits
 }
 
 int epg_broadcast_set_category
-( epg_broadcast_t *b, string_list_t *msg, uint32_t *changed )
+( epg_broadcast_t *b, const string_list_t *msg, uint32_t *changed )
 {
   if (!b) return 0;
   return _epg_object_set_string_list(b, &b->category, msg, changed, EPG_CHANGED_CATEGORY);
 }
 
 int epg_broadcast_set_keyword
-( epg_broadcast_t *b, string_list_t *msg, uint32_t *changed )
+( epg_broadcast_t *b, const string_list_t *msg, uint32_t *changed )
 {
   if (!b) return 0;
   const int mod = _epg_object_set_string_list(b, &b->keyword, msg, changed, EPG_CHANGED_KEYWORD);
@@ -2463,10 +2463,12 @@ epg_broadcast_t *epg_broadcast_deserialize
 
   if ((sl = string_list_deserialize(m, "keyword"))) {
       *save |= epg_broadcast_set_keyword(ebc, sl, &changes);
+      string_list_destroy(sl);
   }
 
   if ((sl = string_list_deserialize(m, "category"))) {
       *save |= epg_broadcast_set_category(ebc, sl, &changes);
+      string_list_destroy(sl);
   }
 
   /* Series link */
index 42ee1a14622280c2b1459c53ae1a4b24487b16dd..c1d5aa8620143db81097ccc77dda52c0303624bf 100644 (file)
--- a/src/epg.h
+++ b/src/epg.h
@@ -598,13 +598,13 @@ int epg_broadcast_set_description
   ( epg_broadcast_t *b, const lang_str_t *str, uint32_t *changed )
   __attribute__((warn_unused_result));
 int epg_broadcast_set_credits
-( epg_broadcast_t *b, htsmsg_t* msg, uint32_t *changed )
+( epg_broadcast_t *b, const htsmsg_t* msg, uint32_t *changed )
   __attribute__((warn_unused_result));
 int epg_broadcast_set_category
-( epg_broadcast_t *b, struct string_list* msg, uint32_t *changed )
+( epg_broadcast_t *b, const struct string_list* msg, uint32_t *changed )
   __attribute__((warn_unused_result));
 int epg_broadcast_set_keyword
-( epg_broadcast_t *b, struct string_list* msg, uint32_t *changed )
+( epg_broadcast_t *b, const struct string_list* msg, uint32_t *changed )
   __attribute__((warn_unused_result));
 int epg_broadcast_set_serieslink
   ( epg_broadcast_t *b, epg_serieslink_t *sl, uint32_t *changed )
index d62f810075ec9b88bf419e2a5dd3f5ba9bf1485b..3186ddc3e9b4d04d50401245f76cea46d06f7998 100644 (file)
@@ -734,6 +734,8 @@ static int _xmltv_parse_programme_tags
    */
   if (uri) {
     ee = epg_episode_find_by_uri(uri, mod, 1, &save3, &changes3);
+    free(uri);
+    uri = NULL;
   } else {
     ee = epg_episode_find_by_broadcast(ebc, mod, 1, &save3, &changes3);
   }
index e87ad0d5a9a0c58c63016fa649796c6ec232b2fa..acada232b22337cf5cad341ec7f946365a2de40c 100644 (file)
@@ -46,7 +46,9 @@ string_list_destroy(string_list_t *l)
   while ((item = RB_FIRST(l))) {
     RB_REMOVE(l, item, h_link);
     free(item->id);
+    free(item);
   }
+  free(l);
 }
 
 static inline int