diff options
author | iphydf <iphydf@users.noreply.github.com> | 2020-03-05 16:20:17 +0000 |
---|---|---|
committer | iphydf <iphydf@users.noreply.github.com> | 2020-03-06 11:05:52 +0000 |
commit | 7b3d2eda3f8b4bc221215875a3d813654e044a55 (patch) | |
tree | d105366207b29b926c6b526d9cb434d7246b3a37 /toxcore | |
parent | 7923a619597cc9a4e62db65b0f8400176a78dfa3 (diff) |
Use `net_pack` instead of casting bytes to ints.
The current code violates the C standard and causes crashes on strict
alignment architectures.
Diffstat (limited to 'toxcore')
-rw-r--r-- | toxcore/LAN_discovery.c | 2 | ||||
-rw-r--r-- | toxcore/network.c | 12 |
2 files changed, 7 insertions, 7 deletions
diff --git a/toxcore/LAN_discovery.c b/toxcore/LAN_discovery.c index 1137fc3d..e7bb77ea 100644 --- a/toxcore/LAN_discovery.c +++ b/toxcore/LAN_discovery.c | |||
@@ -186,7 +186,7 @@ static void fetch_broadcast_info(uint16_t port) | |||
186 | continue; | 186 | continue; |
187 | } | 187 | } |
188 | 188 | ||
189 | struct sockaddr_in *sock4 = (struct sockaddr_in *)&i_faces[i].ifr_broadaddr; | 189 | struct sockaddr_in *sock4 = (struct sockaddr_in *)(void *)&i_faces[i].ifr_broadaddr; |
190 | 190 | ||
191 | if (count >= MAX_INTERFACES) { | 191 | if (count >= MAX_INTERFACES) { |
192 | break; | 192 | break; |
diff --git a/toxcore/network.c b/toxcore/network.c index 5e5160d8..e2870fee 100644 --- a/toxcore/network.c +++ b/toxcore/network.c | |||
@@ -1207,12 +1207,12 @@ int addr_resolve(const char *address, IP *to, IP *extra) | |||
1207 | switch (walker->ai_family) { | 1207 | switch (walker->ai_family) { |
1208 | case AF_INET: | 1208 | case AF_INET: |
1209 | if (walker->ai_family == family) { /* AF_INET requested, done */ | 1209 | if (walker->ai_family == family) { /* AF_INET requested, done */ |
1210 | struct sockaddr_in *addr = (struct sockaddr_in *)walker->ai_addr; | 1210 | struct sockaddr_in *addr = (struct sockaddr_in *)(void *)walker->ai_addr; |
1211 | get_ip4(&to->ip.v4, &addr->sin_addr); | 1211 | get_ip4(&to->ip.v4, &addr->sin_addr); |
1212 | result = TOX_ADDR_RESOLVE_INET; | 1212 | result = TOX_ADDR_RESOLVE_INET; |
1213 | done = 1; | 1213 | done = 1; |
1214 | } else if (!(result & TOX_ADDR_RESOLVE_INET)) { /* AF_UNSPEC requested, store away */ | 1214 | } else if (!(result & TOX_ADDR_RESOLVE_INET)) { /* AF_UNSPEC requested, store away */ |
1215 | struct sockaddr_in *addr = (struct sockaddr_in *)walker->ai_addr; | 1215 | struct sockaddr_in *addr = (struct sockaddr_in *)(void *)walker->ai_addr; |
1216 | get_ip4(&ip4.ip.v4, &addr->sin_addr); | 1216 | get_ip4(&ip4.ip.v4, &addr->sin_addr); |
1217 | result |= TOX_ADDR_RESOLVE_INET; | 1217 | result |= TOX_ADDR_RESOLVE_INET; |
1218 | } | 1218 | } |
@@ -1222,14 +1222,14 @@ int addr_resolve(const char *address, IP *to, IP *extra) | |||
1222 | case AF_INET6: | 1222 | case AF_INET6: |
1223 | if (walker->ai_family == family) { /* AF_INET6 requested, done */ | 1223 | if (walker->ai_family == family) { /* AF_INET6 requested, done */ |
1224 | if (walker->ai_addrlen == sizeof(struct sockaddr_in6)) { | 1224 | if (walker->ai_addrlen == sizeof(struct sockaddr_in6)) { |
1225 | struct sockaddr_in6 *addr = (struct sockaddr_in6 *)walker->ai_addr; | 1225 | struct sockaddr_in6 *addr = (struct sockaddr_in6 *)(void *)walker->ai_addr; |
1226 | get_ip6(&to->ip.v6, &addr->sin6_addr); | 1226 | get_ip6(&to->ip.v6, &addr->sin6_addr); |
1227 | result = TOX_ADDR_RESOLVE_INET6; | 1227 | result = TOX_ADDR_RESOLVE_INET6; |
1228 | done = 1; | 1228 | done = 1; |
1229 | } | 1229 | } |
1230 | } else if (!(result & TOX_ADDR_RESOLVE_INET6)) { /* AF_UNSPEC requested, store away */ | 1230 | } else if (!(result & TOX_ADDR_RESOLVE_INET6)) { /* AF_UNSPEC requested, store away */ |
1231 | if (walker->ai_addrlen == sizeof(struct sockaddr_in6)) { | 1231 | if (walker->ai_addrlen == sizeof(struct sockaddr_in6)) { |
1232 | struct sockaddr_in6 *addr = (struct sockaddr_in6 *)walker->ai_addr; | 1232 | struct sockaddr_in6 *addr = (struct sockaddr_in6 *)(void *)walker->ai_addr; |
1233 | get_ip6(&ip6.ip.v6, &addr->sin6_addr); | 1233 | get_ip6(&ip6.ip.v6, &addr->sin6_addr); |
1234 | result |= TOX_ADDR_RESOLVE_INET6; | 1234 | result |= TOX_ADDR_RESOLVE_INET6; |
1235 | } | 1235 | } |
@@ -1344,10 +1344,10 @@ int32_t net_getipport(const char *node, IP_Port **res, int tox_type) | |||
1344 | } | 1344 | } |
1345 | 1345 | ||
1346 | if (cur->ai_family == AF_INET) { | 1346 | if (cur->ai_family == AF_INET) { |
1347 | struct sockaddr_in *addr = (struct sockaddr_in *)cur->ai_addr; | 1347 | struct sockaddr_in *addr = (struct sockaddr_in *)(void *)cur->ai_addr; |
1348 | memcpy(&ip_port->ip.ip.v4, &addr->sin_addr, sizeof(IP4)); | 1348 | memcpy(&ip_port->ip.ip.v4, &addr->sin_addr, sizeof(IP4)); |
1349 | } else if (cur->ai_family == AF_INET6) { | 1349 | } else if (cur->ai_family == AF_INET6) { |
1350 | struct sockaddr_in6 *addr = (struct sockaddr_in6 *)cur->ai_addr; | 1350 | struct sockaddr_in6 *addr = (struct sockaddr_in6 *)(void *)cur->ai_addr; |
1351 | memcpy(&ip_port->ip.ip.v6, &addr->sin6_addr, sizeof(IP6)); | 1351 | memcpy(&ip_port->ip.ip.v6, &addr->sin6_addr, sizeof(IP6)); |
1352 | } else { | 1352 | } else { |
1353 | continue; | 1353 | continue; |