From e98fc993d1b255325af20ff2d123351ad2a52244 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 1 Aug 2010 23:42:33 +0000 Subject: [PATCH] [AFD]: Fix read data corruption when peeking at network data (TDI_RECEIVE_PEEK is specified for a stream socket) svn path=/trunk/; revision=48403 --- reactos/drivers/network/afd/afd/read.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/reactos/drivers/network/afd/afd/read.c b/reactos/drivers/network/afd/afd/read.c index cf2133efc0a..36666279500 100644 --- a/reactos/drivers/network/afd/afd/read.c +++ b/reactos/drivers/network/afd/afd/read.c @@ -80,7 +80,7 @@ static VOID RefillSocketBuffer( PAFD_FCB FCB ) { static NTSTATUS TryToSatisfyRecvRequestFromBuffer( PAFD_FCB FCB, PAFD_RECV_INFO RecvReq, PUINT TotalBytesCopied ) { - UINT i, BytesToCopy = 0, + UINT i, BytesToCopy = 0, FcbBytesCopied = FCB->Recv.BytesUsed; BytesAvailable = FCB->Recv.Content - FCB->Recv.BytesUsed; PAFD_MAPBUF Map; @@ -115,12 +115,13 @@ static NTSTATUS TryToSatisfyRecvRequestFromBuffer( PAFD_FCB FCB, BytesToCopy)); RtlCopyMemory( Map[i].BufferAddress, - FCB->Recv.Window + FCB->Recv.BytesUsed, + FCB->Recv.Window + FcbBytesCopied, BytesToCopy ); MmUnmapLockedPages( Map[i].BufferAddress, Map[i].Mdl ); *TotalBytesCopied += BytesToCopy; + FcbBytesCopied += BytesToCopy; if (!(RecvReq->TdiFlags & TDI_RECEIVE_PEEK)) { FCB->Recv.BytesUsed += BytesToCopy;