https://git.reactos.org/?p=reactos.git;a=commitdiff;h=93edd2a1855be5c3fde4dc2a985a3bbd6ce6a56c
commit 93edd2a1855be5c3fde4dc2a985a3bbd6ce6a56c Author: Thomas Faber <thomas.fa...@reactos.org> AuthorDate: Sun May 6 08:24:26 2018 +0200 Commit: Thomas Faber <thomas.fa...@reactos.org> CommitDate: Sun May 6 08:36:19 2018 +0200 [IPHLPAPI_APITEST] Avoid crash on ROS and failure on Windows. CORE-14411 - Make the reply buffer for IcmpSendEcho large enough to hold the reply, even when testing a smaller size. This avoids a buffer overflow with ROS's broken implementation. - Avoid unnecessary initialization. - Fix IcmpSendEcho return value check to succeed on Win2003. - Don't free a string literal in the GetInterfaceName test. --- modules/rostests/apitests/iphlpapi/GetInterfaceName.c | 1 - modules/rostests/apitests/iphlpapi/icmp.c | 12 ++++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/modules/rostests/apitests/iphlpapi/GetInterfaceName.c b/modules/rostests/apitests/iphlpapi/GetInterfaceName.c index f6e3321cee..76078cc39f 100644 --- a/modules/rostests/apitests/iphlpapi/GetInterfaceName.c +++ b/modules/rostests/apitests/iphlpapi/GetInterfaceName.c @@ -361,7 +361,6 @@ test_GetInterfaceName(VOID) } ApiReturn = RtlGUIDFromString(&GuidString, &AdapterGUID); - RtlFreeUnicodeString(&GuidString); if (ApiReturn != 0) { skip("RtlGUIDFromString failed. Can't proceed\n"); diff --git a/modules/rostests/apitests/iphlpapi/icmp.c b/modules/rostests/apitests/iphlpapi/icmp.c index 0d853ffa57..c635c225b3 100644 --- a/modules/rostests/apitests/iphlpapi/icmp.c +++ b/modules/rostests/apitests/iphlpapi/icmp.c @@ -90,7 +90,7 @@ test_IcmpSendEcho(void) unsigned long ipaddr = INADDR_NONE; DWORD bRet = 0, error = 0; char SendData[32] = "Data Buffer"; - PVOID ReplyBuffer = NULL; + PVOID ReplyBuffer; DWORD ReplySize = 0; SetLastError(0xDEADBEEF); @@ -102,27 +102,27 @@ test_IcmpSendEcho(void) } ipaddr = 0x08080808; // 8.8.8.8 + ReplyBuffer = malloc(sizeof(ICMP_ECHO_REPLY) + sizeof(SendData)); ReplySize = sizeof(ICMP_ECHO_REPLY); - ReplyBuffer = malloc(ReplySize); SetLastError(0xDEADBEEF); bRet = IcmpSendEcho(hIcmp, ipaddr, SendData, sizeof(SendData), NULL, ReplyBuffer, ReplySize, 5000); ok(!bRet, "IcmpSendEcho succeeded unexpectedly\n"); error = GetLastError(); - ok(error == IP_GENERAL_FAILURE, "IcmpSendEcho returned unexpected error: %lu\n", error); - free(ReplyBuffer); + ok(error == IP_BUF_TOO_SMALL /* Win2003 */ || + error == IP_GENERAL_FAILURE /* Win10 */, + "IcmpSendEcho returned unexpected error: %lu\n", error); ReplySize = sizeof(ICMP_ECHO_REPLY) + sizeof(SendData); - ReplyBuffer = malloc(ReplySize); SetLastError(0xDEADBEEF); bRet = IcmpSendEcho(hIcmp, ipaddr, SendData, sizeof(SendData), NULL, ReplyBuffer, ReplySize, 5000); ok(bRet, "IcmpSendEcho failed unexpectedly: %lu\n", GetLastError()); - free(ReplyBuffer); + free(ReplyBuffer); IcmpCloseHandle(hIcmp); }