[IPHLPAPI_APITEST] Avoid crash on ROS and failure on Windows. CORE-14411
authorThomas Faber <thomas.faber@reactos.org>
Sun, 6 May 2018 06:24:26 +0000 (08:24 +0200)
committerThomas Faber <thomas.faber@reactos.org>
Sun, 6 May 2018 06:36:19 +0000 (08:36 +0200)
- 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
modules/rostests/apitests/iphlpapi/icmp.c

index f6e3321..76078cc 100644 (file)
@@ -361,7 +361,6 @@ test_GetInterfaceName(VOID)
     }
 
     ApiReturn = RtlGUIDFromString(&GuidString, &AdapterGUID);
     }
 
     ApiReturn = RtlGUIDFromString(&GuidString, &AdapterGUID);
-    RtlFreeUnicodeString(&GuidString);
     if (ApiReturn != 0)
     {
         skip("RtlGUIDFromString failed. Can't proceed\n");
     if (ApiReturn != 0)
     {
         skip("RtlGUIDFromString failed. Can't proceed\n");
index 0d853ff..c635c22 100644 (file)
@@ -90,7 +90,7 @@ test_IcmpSendEcho(void)
     unsigned long ipaddr = INADDR_NONE;
     DWORD bRet = 0, error = 0;
     char SendData[32] = "Data Buffer";
     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);
     DWORD ReplySize = 0;
 
     SetLastError(0xDEADBEEF);
@@ -102,27 +102,27 @@ test_IcmpSendEcho(void)
     }
 
     ipaddr = 0x08080808; // 8.8.8.8
     }
 
     ipaddr = 0x08080808; // 8.8.8.8
+    ReplyBuffer = malloc(sizeof(ICMP_ECHO_REPLY) + sizeof(SendData));
 
     ReplySize = sizeof(ICMP_ECHO_REPLY);
 
     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();
     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);
 
     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());
     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);
 }
 
     IcmpCloseHandle(hIcmp);
 }