Index: /trunk/src/VBox/Devices/Network/slirp/tcp_output.c
===================================================================
--- /trunk/src/VBox/Devices/Network/slirp/tcp_output.c	(revision 51903)
+++ /trunk/src/VBox/Devices/Network/slirp/tcp_output.c	(revision 51904)
@@ -234,7 +234,7 @@
          * TCP_MAXWIN << tp->rcv_scale.
          */
-        long adv = min(win,
-                       (long)TCP_MAXWIN << tp->rcv_scale) -
-                       (tp->rcv_adv - tp->rcv_nxt);
+        long adv = min(win, (long)TCP_MAXWIN << tp->rcv_scale);
+        if (SEQ_GT(tp->rcv_adv, tp->rcv_nxt))
+            adv -= tp->rcv_adv - tp->rcv_nxt;
 
         if (adv >= (long) (2 * tp->t_maxseg))
@@ -555,6 +555,6 @@
     if (win > (long)TCP_MAXWIN << tp->rcv_scale)
         win = (long)TCP_MAXWIN << tp->rcv_scale;
-    if (win < (long)(tp->rcv_adv - tp->rcv_nxt))
-        win = (long)(tp->rcv_adv - tp->rcv_nxt);
+    if (win < (long)(int32_t)(tp->rcv_adv - tp->rcv_nxt))
+        win = (long)(int32_t)(tp->rcv_adv - tp->rcv_nxt);
     ti->ti_win = RT_H2N_U16((u_int16_t) (win>>tp->rcv_scale));
 
