aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2022-09-22 10:21:29 +0200
committerAndrej Mihajlov <and@mullvad.net>2022-09-22 10:21:29 +0200
commitc587874e4775b192aa0cc0a139f0366548554fa6 (patch)
tree3333228944caff5099b80b655482f6253c89a902
parentUI: When saving on-demand rules, deactivate if reqd and then save (diff)
downloadwireguard-apple-c587874e4775b192aa0cc0a139f0366548554fa6.tar.xz
wireguard-apple-c587874e4775b192aa0cc0a139f0366548554fa6.zip
Correct capacity argument when casting memory to sockaddr_* type.am/fix-addrinfo-crash
The capacity argument indicates the number of instances of sockaddr_* and not number of bytes within the pointer. Signed-off-by: Andrej Mihajlov <and@mullvad.net>
-rw-r--r--Sources/WireGuardKit/IPAddress+AddrInfo.swift10
1 files changed, 8 insertions, 2 deletions
diff --git a/Sources/WireGuardKit/IPAddress+AddrInfo.swift b/Sources/WireGuardKit/IPAddress+AddrInfo.swift
index 4ade523..253038c 100644
--- a/Sources/WireGuardKit/IPAddress+AddrInfo.swift
+++ b/Sources/WireGuardKit/IPAddress+AddrInfo.swift
@@ -8,7 +8,10 @@ extension IPv4Address {
init?(addrInfo: addrinfo) {
guard addrInfo.ai_family == AF_INET else { return nil }
- let addressData = addrInfo.ai_addr.withMemoryRebound(to: sockaddr_in.self, capacity: MemoryLayout<sockaddr_in>.size) { ptr -> Data in
+ let addressData = addrInfo.ai_addr.withMemoryRebound(
+ to: sockaddr_in.self,
+ capacity: 1
+ ) { ptr -> Data in
return Data(bytes: &ptr.pointee.sin_addr, count: MemoryLayout<in_addr>.size)
}
@@ -20,7 +23,10 @@ extension IPv6Address {
init?(addrInfo: addrinfo) {
guard addrInfo.ai_family == AF_INET6 else { return nil }
- let addressData = addrInfo.ai_addr.withMemoryRebound(to: sockaddr_in6.self, capacity: MemoryLayout<sockaddr_in6>.size) { ptr -> Data in
+ let addressData = addrInfo.ai_addr.withMemoryRebound(
+ to: sockaddr_in6.self,
+ capacity: 1
+ ) { ptr -> Data in
return Data(bytes: &ptr.pointee.sin6_addr, count: MemoryLayout<in6_addr>.size)
}