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:
parent
9ef55abc9f
commit
fb18f9fc6e
|
@ -309,6 +309,25 @@ static DWORD icmp_get_reply(int sid, unsigned char *buffer, DWORD send_time, voi
|
||||||
if (res==0)
|
if (res==0)
|
||||||
SetLastError(IP_REQ_TIMED_OUT);
|
SetLastError(IP_REQ_TIMED_OUT);
|
||||||
done:
|
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);
|
HeapFree(GetProcessHeap(), 0, buffer);
|
||||||
TRACE("received %d replies\n",res);
|
TRACE("received %d replies\n",res);
|
||||||
return res;
|
return res;
|
||||||
|
|
Loading…
Reference in New Issue