Better handling of inet_ntop() failures (which should not happen in practice, since...
[BearSSL] / tools / server.c
index a631982..983fbe6 100644 (file)
@@ -87,7 +87,9 @@ host_bind(const char *host, const char *port, int verbose)
                        sa_len = p->ai_addrlen;
                }
                if (addr != NULL) {
                        sa_len = p->ai_addrlen;
                }
                if (addr != NULL) {
-                       inet_ntop(p->ai_family, addr, tmp, sizeof tmp);
+                       if (!inet_ntop(p->ai_family, addr, tmp, sizeof tmp)) {
+                               strcpy(tmp, "<invalid>");
+                       }
                } else {
                        sprintf(tmp, "<unknown family: %d>",
                                (int)sa->sa_family);
                } else {
                        sprintf(tmp, "<unknown family: %d>",
                                (int)sa->sa_family);
@@ -637,7 +639,11 @@ do_server(int argc, char *argv[])
                                usage_server();
                                goto server_exit_error;
                        }
                                usage_server();
                                goto server_exit_error;
                        }
-                       iobuf_len = strtoul(arg, 0, 10);
+                       iobuf_len = parse_size(arg);
+                       if (iobuf_len == (size_t)-1) {
+                               usage_server();
+                               goto server_exit_error;
+                       }
                } else if (eqstr(arg, "-cache")) {
                        if (++ i >= argc) {
                                fprintf(stderr,
                } else if (eqstr(arg, "-cache")) {
                        if (++ i >= argc) {
                                fprintf(stderr,
@@ -652,7 +658,11 @@ do_server(int argc, char *argv[])
                                usage_server();
                                goto server_exit_error;
                        }
                                usage_server();
                                goto server_exit_error;
                        }
-                       cache_len = strtoul(arg, 0, 10);
+                       cache_len = parse_size(arg);
+                       if (cache_len == (size_t)-1) {
+                               usage_server();
+                               goto server_exit_error;
+                       }
                } else if (eqstr(arg, "-cert")) {
                        if (++ i >= argc) {
                                fprintf(stderr,
                } else if (eqstr(arg, "-cert")) {
                        if (++ i >= argc) {
                                fprintf(stderr,