mp3dec: Improve bad main_data_begin pointer error handling.
[paraslash.git] / command.c
index ca08ed729a9f6d65ae34ccacfc931e5bdea6dec8..f61ea57220d2be440728883564734e460f4c110c 100644 (file)
--- a/command.c
+++ b/command.c
@@ -185,17 +185,9 @@ static int check_sender_args(int argc, char * const * argv, struct sender_comman
                break;
        case SENDER_DENY:
        case SENDER_ALLOW:
-               if (argc != 4 && argc != 5)
+               if (argc != 4 || parse_cidr(argv[3], scd->host,
+                               sizeof(scd->host), &scd->netmask) == NULL)
                        return -E_COMMAND_SYNTAX;
-               if (!is_valid_ipv4_address(argv[3]))
-                       return -E_COMMAND_SYNTAX;
-               scd->netmask = 32;
-               if (argc == 5) {
-                       scd->netmask = atoi(argv[4]);
-                       if (scd->netmask < 0 || scd->netmask > 32)
-                               return -E_COMMAND_SYNTAX;
-               }
-               strncpy(scd->host, argv[3], sizeof(scd->host));
                break;
        case SENDER_ADD:
        case SENDER_DELETE:
@@ -313,12 +305,15 @@ int com_stat(int fd, int argc, char * const * argv)
        struct misc_meta_data tmp, *nmmd = &tmp;
        char *s;
 
-       ret = para_sigaction(SIGUSR1, dummy);
-       if (ret < 0)
-               return ret;
+       para_sigaction(SIGUSR1, dummy);
 
-       if (argc > 1)
-               num = atoi(argv[1]);
+       if (argc > 2)
+               return -E_COMMAND_SYNTAX;
+       if (argc > 1) {
+               ret = para_atoi32(argv[1], &num);
+               if (ret < 0)
+                       goto out;
+       }
        for (;;) {
 
                mmd_dup(nmmd);
@@ -652,22 +647,12 @@ out:
 
 }
 
-static int reset_signals(void)
+static void reset_signals(void)
 {
-       int ret = para_sigaction(SIGCHLD, SIG_IGN);
-
-       if (ret < 0)
-               return ret;
-       ret = para_sigaction(SIGINT, SIG_DFL);
-       if (ret < 0)
-               return ret;
-       ret = para_sigaction(SIGTERM, SIG_DFL);
-       if (ret < 0)
-               return ret;
-       ret = para_sigaction(SIGHUP, SIG_DFL);
-       if (ret < 0)
-               return ret;
-       return 1;
+       para_sigaction(SIGCHLD, SIG_IGN);
+       para_sigaction(SIGINT, SIG_DFL);
+       para_sigaction(SIGTERM, SIG_DFL);
+       para_sigaction(SIGHUP, SIG_DFL);
 }
 
 /**
@@ -709,9 +694,7 @@ __noreturn void handle_connect(int fd, const char *peername)
        char *p, *command = NULL;
        size_t numbytes;
 
-       ret = reset_signals();
-       if (ret < 0)
-               goto err_out;
+       reset_signals();
        /* we need a blocking fd here as recv() might return EAGAIN otherwise. */
        ret = mark_fd_blocking(fd);
        if (ret < 0)
@@ -805,8 +788,6 @@ __noreturn void handle_connect(int fd, const char *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;