[PATCH 2/3] ws2_32: Add page fault handler to inet_addr

Alex Henrie alexhenrie24 at gmail.com
Wed May 20 09:11:17 CDT 2020


Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
---
inet_pton, RtlIpv4StringToAddress, and RtlIpv6StringToAddress crash on
bad pointers, but not inet_addr.
---
 dlls/ws2_32/socket.c     | 9 +++++++--
 dlls/ws2_32/tests/sock.c | 2 ++
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 8e66ab8fec..5e1e9201ab 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -4462,8 +4462,13 @@ int WINAPI WSAHtons(SOCKET s, WS_u_short hostshort, WS_u_short *lpnetshort)
  */
 WS_u_long WINAPI WS_inet_addr(const char *cp)
 {
-    if (!cp) return INADDR_NONE;
-    return inet_addr(cp);
+    WS_u_long ret;
+    __TRY
+        ret = inet_addr(cp);
+    __EXCEPT_PAGE_FAULT
+        ret = INADDR_NONE;
+    __ENDTRY
+    return ret;
 }
 
 
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
index a89a964129..a38db46eab 100644
--- a/dlls/ws2_32/tests/sock.c
+++ b/dlls/ws2_32/tests/sock.c
@@ -4788,6 +4788,8 @@ static void test_inet_addr(void)
 
     addr = inet_addr(NULL);
     ok(addr == INADDR_NONE, "inet_addr succeeded unexpectedly\n");
+
+    inet_addr((const char *)0xdeadbeef); /* should not crash */
 }
 
 static void test_addr_to_print(void)
-- 
2.26.2




More information about the wine-devel mailing list