https://git.reactos.org/?p=reactos.git;a=commitdiff;h=93edd2a1855be5c3fde4d…
commit 93edd2a1855be5c3fde4dc2a985a3bbd6ce6a56c
Author: Thomas Faber <thomas.faber(a)reactos.org>
AuthorDate: Sun May 6 08:24:26 2018 +0200
Commit: Thomas Faber <thomas.faber(a)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);
}