Author: cgutman
Date: Thu Aug 11 21:22:00 2011
New Revision: 53188

URL: http://svn.reactos.org/svn/reactos?rev=53188&view=rev
Log:
[LWIP]
- Fix a buffer overflow when the packet queue has more packets than the receive 
request can take
- Remove an extra variable

Modified:
    trunk/reactos/lib/drivers/lwip/src/rostcp.c

Modified: trunk/reactos/lib/drivers/lwip/src/rostcp.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/drivers/lwip/src/rostcp.c?rev=53188&r1=53187&r2=53188&view=diff
==============================================================================
--- trunk/reactos/lib/drivers/lwip/src/rostcp.c [iso-8859-1] (original)
+++ trunk/reactos/lib/drivers/lwip/src/rostcp.c [iso-8859-1] Thu Aug 11 
21:22:00 2011
@@ -83,11 +83,10 @@
     PQUEUE_ENTRY qp;
     struct pbuf* p;
     NTSTATUS Status = STATUS_PENDING;
-    UINT ReadLength, ExistingDataLength, SpaceLeft;
+    UINT ReadLength, ExistingDataLength;
     KIRQL OldIrql;
 
     (*Received) = 0;
-    SpaceLeft = RecvLen;
 
     LockObject(Connection, &OldIrql);
 
@@ -100,7 +99,7 @@
 
             Status = STATUS_SUCCESS;
 
-            ReadLength = MIN(p->tot_len, SpaceLeft);
+            ReadLength = MIN(p->tot_len, RecvLen);
             if (ReadLength != p->tot_len)
             {
                 if (ExistingDataLength)
@@ -128,7 +127,7 @@
 
             LockObject(Connection, &OldIrql);
 
-            SpaceLeft -= ReadLength;
+            RecvLen -= ReadLength;
 
             /* Use this special pbuf free callback function because we're 
outside tcpip thread */
             pbuf_free_callback(qp->p);
@@ -207,6 +206,8 @@
 
         return ERR_OK;
     }
+
+    ASSERT(!LibTCPDequeuePacket(Connection));
 
     if (p)
     {


Reply via email to