iphlpapi: Make sure there's no gap between the ICMP_ECHO_REPLY array and the data.

Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Gabriel Ivăncescu 2020-11-23 15:47:44 +02:00 committed by Alexandre Julliard
parent 9ef55abc9f
commit fb18f9fc6e
1 changed files with 19 additions and 0 deletions

View File

@ -309,6 +309,25 @@ static DWORD icmp_get_reply(int sid, unsigned char *buffer, DWORD send_time, voi
if (res==0)
SetLastError(IP_REQ_TIMED_OUT);
done:
if (res)
{
/* Move the data so there's no gap between it and the ICMP_ECHO_REPLY array */
DWORD gap_size = endbuf - (char*)ier;
if (gap_size)
{
memmove(ier, endbuf, ((char*)reply_buf + reply_size) - endbuf);
/* Fix the pointers */
while (ier-- != reply_buf)
{
ier->Data = (char*)ier->Data - gap_size;
if (ier->Options.OptionsData)
ier->Options.OptionsData -= gap_size;
}
}
}
HeapFree(GetProcessHeap(), 0, buffer);
TRACE("received %d replies\n",res);
return res;