summaryrefslogtreecommitdiffstats
path: root/src/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core.c')
-rw-r--r--src/core.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/core.c b/src/core.c
index 270bd9c..759e923 100644
--- a/src/core.c
+++ b/src/core.c
@@ -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);