net engine: improve host/port parsing
authorJens Axboe <jens.axboe@oracle.com>
Fri, 30 May 2008 11:29:03 +0000 (13:29 +0200)
committerJens Axboe <jens.axboe@oracle.com>
Fri, 30 May 2008 11:29:03 +0000 (13:29 +0200)
It was too relaxed before.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
engines/net.c

index df8b62597ef681392c76f25110d4dd9007b98870..137c5799169fa10fbdbaeb597c87f0c7c17f0b95 100644 (file)
@@ -353,7 +353,7 @@ static int fio_netio_setup_listen(struct thread_data *td, short port)
 static int fio_netio_init(struct thread_data *td)
 {
        struct netio_data *nd = td->io_ops->data;
 static int fio_netio_init(struct thread_data *td)
 {
        struct netio_data *nd = td->io_ops->data;
-       unsigned short port;
+       unsigned int port;
        char host[64], buf[128];
        char *sep;
        int ret;
        char host[64], buf[128];
        char *sep;
        int ret;
@@ -370,15 +370,18 @@ static int fio_netio_init(struct thread_data *td)
        strcpy(buf, td->o.filename);
 
        sep = strchr(buf, '/');
        strcpy(buf, td->o.filename);
 
        sep = strchr(buf, '/');
-       if (!sep) {
-               log_err("fio: bad network host/port <<%s>>\n", td->o.filename);
-               return 1;
-       }
+       if (!sep)
+               goto bad_host;
 
        *sep = '\0';
        sep++;
        strcpy(host, buf);
 
        *sep = '\0';
        sep++;
        strcpy(host, buf);
-       port = atoi(sep);
+       if (!strlen(host))
+               goto bad_host;
+
+       port = strtol(sep, NULL, 10);
+       if (!port || port > 65535)
+               goto bad_host;
 
        if (td_read(td)) {
                nd->send_to_net = 0;
 
        if (td_read(td)) {
                nd->send_to_net = 0;
@@ -389,6 +392,9 @@ static int fio_netio_init(struct thread_data *td)
        }
 
        return ret;
        }
 
        return ret;
+bad_host:
+       log_err("fio: bad network host/port: %s\n", td->o.filename);
+       return 1;
 }
 
 static void fio_netio_cleanup(struct thread_data *td)
 }
 
 static void fio_netio_cleanup(struct thread_data *td)