]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
avahi: try to fix double free, fixes #5484
authorJaroslav Kysela <perex@perex.cz>
Tue, 8 Jan 2019 19:26:02 +0000 (20:26 +0100)
committerJaroslav Kysela <perex@perex.cz>
Tue, 8 Jan 2019 19:27:25 +0000 (20:27 +0100)
src/avahi.c

index df6e00a68ea4616ca4798b9167dd8b0d8a38c075..e91a876c074da36e972de829a782745989959ca0 100644 (file)
@@ -55,7 +55,7 @@
 #include "config.h"
 
 static AvahiEntryGroup *group = NULL;
-static char *name = NULL;
+static char *name = NULL, *name2 = NULL;
 static AvahiSimplePoll *avahi_asp = NULL;
 static const AvahiPoll *avahi_poll = NULL;
 static int avahi_do_restart = 0;
@@ -83,7 +83,7 @@ entry_group_callback(AvahiEntryGroup *g, AvahiEntryGroupState state,
     /* A service name collision with a remote service
      * happened. Let's pick a new name */
     n = avahi_alternative_service_name(name);
-    avahi_free(name);
+    if (name != name2) avahi_free(name);
     name = n;
     
     tvherror(LS_AVAHI, "Service name collision, renaming service to '%s'", name);
@@ -189,7 +189,7 @@ create_services(AvahiClient *c)
   /* A service name collision with a local service happened. Let's
    * pick a new name */
   n = avahi_alternative_service_name(name);
-  avahi_free(name);
+  if (name != name2) avahi_free(name);
   name = n;
 
   tvherror(LS_AVAHI, "Service name collision, renaming service to '%s'", name);
@@ -257,7 +257,6 @@ static void *
 avahi_thread(void *aux)
 {
   AvahiClient *ac;
-  char *name2;
 
   do {
     if (avahi_poll)
@@ -285,6 +284,7 @@ avahi_thread(void *aux)
 
     name = NULL;
     avahi_free(name2);
+    name2 = NULL;
 
   } while (tvheadend_is_running() && avahi_do_restart);