]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
Correct capacity argument when casting memory to sockaddr_* type. am/fix-addrinfo-crash
authorAndrej Mihajlov <and@mullvad.net>
Thu, 22 Sep 2022 08:21:29 +0000 (10:21 +0200)
committerAndrej Mihajlov <and@mullvad.net>
Thu, 22 Sep 2022 08:21:29 +0000 (10:21 +0200)
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>
Sources/WireGuardKit/IPAddress+AddrInfo.swift

index 4ade523ff6ac67e6f71ef81af4b7fa908704a431..253038c964d22519a1980e725e4512ab6d670fa2 100644 (file)
@@ -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)
         }