Signed-off-by: Alex Henrie alexhenrie24@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)