]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - command.c
Fix some memory leaks.
[paraslash.git] / command.c
index 988eae6435889e7892a0f5734d55aee8bfad49ba..d08a71818cfb437c5cd6c02a13d6a7c2f3e56893 100644 (file)
--- a/command.c
+++ b/command.c
@@ -204,17 +204,9 @@ static int check_sender_args(int argc, char * const * argv, struct sender_comman
                break;
        case SENDER_ADD:
        case SENDER_DELETE:
-               if (argc != 4 && argc != 5)
-                       return -E_COMMAND_SYNTAX;
-               if (!inet_pton(AF_INET, argv[3], &scd->addr))
+               if (argc != 4)
                        return -E_COMMAND_SYNTAX;
-               scd->port = -1;
-               if (argc == 5) {
-                       scd->port = atoi(argv[4]);
-                       if (scd->port < 0 || scd->port > 65535)
-                               return -E_COMMAND_SYNTAX;
-               }
-               break;
+               return parse_fec_url(argv[3], scd);
        default:
                return -E_COMMAND_SYNTAX;
        }
@@ -795,12 +787,14 @@ __noreturn void handle_connect(int fd, const char *peername)
        /* valid command and sufficient perms */
        alarm(0);
        argc = split_args(command, &argv, "\n");
-       mutex_lock(mmd_mutex);
-       mmd->num_commands++;
-       mutex_unlock(mmd_mutex);
        PARA_NOTICE_LOG("calling com_%s() for %s@%s\n", cmd->name, u->name,
                        peername);
        ret = cmd->handler(fd, argc, argv);
+       mutex_lock(mmd_mutex);
+       mmd->num_commands++;
+       free(mmd->afd.afhi.info_string);
+       free(mmd->afd.afhi.chunk_table);
+       mutex_unlock(mmd_mutex);
        if (ret >= 0)
                goto out;
 err_out: