diff options
author | Alejandro Sirgo Rica <asirgo@soleta.eu> | 2024-10-25 11:53:22 +0200 |
---|---|---|
committer | Alejandro Sirgo Rica <asirgo@soleta.eu> | 2024-10-25 15:09:31 +0200 |
commit | e679925bd0c8608ebe24f34917347ad939c6506d (patch) | |
tree | 9076d0ff5d251bc0a0051589796b9f81cb86b11c /src/core.c | |
parent | e960063a137c8fe760a40a73ccd081e457b23952 (diff) |
src: add safe_strtoull for safe string to number conversion
Add safe_strtoull to validate the execution of strtoull.
Definining the base of the number is required becase partition
codes are base 16 but they lack the 0x prefix.
Replace uses of atoi and strtoull/strtoul and log the conversion
errors.
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); |