]> git.meshlink.io Git - meshlink/blobdiff - src/discovery.c
Fix potential memory leaks in the autoconnect algorithm.
[meshlink] / src / discovery.c
index 481b2f2872f22675d909924fea9b61d89f342189..ae2cf895d7d44c228b31319c3fa944d49189e7df 100644 (file)
@@ -221,7 +221,6 @@ static void discovery_resolve_callback(CattaSServiceResolver *resolver, CattaIfI
                        pthread_mutex_lock(&(mesh->mesh_mutex));
 
                        node_name += 1;
-                       node_fp += 1;
 
                        meshlink_node_t *node = meshlink_get_node(mesh, node_name);
 
@@ -349,7 +348,21 @@ static void *discovery_loop(void *userdata) {
        catta_set_log_function(discovery_log_cb);
 
        // create service type string
-       size_t servicetype_strlen = sizeof(MESHLINK_MDNS_SERVICE_TYPE) + strlen(mesh->appname) + 1;
+       char appname[strlen(mesh->appname) + 2];
+       strcpy(appname, mesh->appname);
+
+       for(char *p = appname; *p; p++) {
+               if(!isalnum(*p) && *p != '_' && *p != '-') {
+                       *p = '_';
+               }
+       }
+
+       if(!appname[1]) {
+               appname[1] = '_';
+               appname[2] = '\0';
+       }
+
+       size_t servicetype_strlen = sizeof(MESHLINK_MDNS_SERVICE_TYPE) + strlen(appname) + 1;
        mesh->catta_servicetype = malloc(servicetype_strlen);
 
        if(mesh->catta_servicetype == NULL) {
@@ -357,7 +370,7 @@ static void *discovery_loop(void *userdata) {
                goto fail;
        }
 
-       snprintf(mesh->catta_servicetype, servicetype_strlen, MESHLINK_MDNS_SERVICE_TYPE, mesh->appname);
+       snprintf(mesh->catta_servicetype, servicetype_strlen, MESHLINK_MDNS_SERVICE_TYPE, appname);
 
        // Allocate discovery loop object
        if(!(mesh->catta_poll = catta_simple_poll_new())) {