summaryrefslogtreecommitdiff
path: root/toxcore
diff options
context:
space:
mode:
authoriphydf <iphydf@users.noreply.github.com>2020-03-05 16:20:17 +0000
committeriphydf <iphydf@users.noreply.github.com>2020-03-06 11:05:52 +0000
commit7b3d2eda3f8b4bc221215875a3d813654e044a55 (patch)
treed105366207b29b926c6b526d9cb434d7246b3a37 /toxcore
parent7923a619597cc9a4e62db65b0f8400176a78dfa3 (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.c2
-rw-r--r--toxcore/network.c12
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;