diff options
Diffstat (limited to 'src/core.c')
-rw-r--r-- | src/core.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -367,6 +367,7 @@ void og_server_accept_cb(struct ev_loop *loop, struct ev_io *io, int events) int og_socket_server_init(const char *addr, const char *port) { struct sockaddr_in local; + uint64_t port_num; uint32_t s_addr; int sd, on = 1; @@ -384,7 +385,13 @@ int og_socket_server_init(const char *addr, const char *port) local.sin_addr.s_addr = s_addr; local.sin_family = AF_INET; - local.sin_port = htons(atoi(port)); + + if (safe_strtoull(port, &port_num, 10, UINT16_MAX) < 0) { + syslog(LOG_ERR, "failed to parse port %s (%s:%d)\n", + port, __func__, __LINE__); + return -1; + } + local.sin_port = htons(port_num); if (bind(sd, (struct sockaddr *) &local, sizeof(local)) < 0) { close(sd); |