diff --git a/CHANGELOG b/CHANGELOG index 0a393b56..20f8fdcc 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -229,6 +229,10 @@ HISTORY ++ Bugfixes: + 2015-03-21: Simon Goldschmidt (patch by Homyak) + * tcp_in.c: fixed bug #44766 (LWIP_WND_SCALE: tcphdr->wnd was not scaled in + two places) + 2015-03-21: Simon Goldschmidt * tcp_impl.h, tcp.c, tcp_in.c: fixed bug #41318 (Bad memory ref in tcp_input() after tcp_close()) diff --git a/src/core/tcp_in.c b/src/core/tcp_in.c index ee2d6b99..3746c14f 100644 --- a/src/core/tcp_in.c +++ b/src/core/tcp_in.c @@ -967,7 +967,7 @@ tcp_receive(struct tcp_pcb *pcb) /* Update window. */ if (TCP_SEQ_LT(pcb->snd_wl1, seqno) || (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) || - (pcb->snd_wl2 == ackno && tcphdr->wnd > pcb->snd_wnd)) { + (pcb->snd_wl2 == ackno && SND_WND_SCALE(pcb, tcphdr->wnd) > pcb->snd_wnd)) { pcb->snd_wnd = SND_WND_SCALE(pcb, tcphdr->wnd); /* keep track of the biggest window announced by the remote host to calculate the maximum segment size */ @@ -989,7 +989,7 @@ tcp_receive(struct tcp_pcb *pcb) LWIP_DEBUGF(TCP_WND_DEBUG, ("tcp_receive: window update %"U16_F"\n", pcb->snd_wnd)); #if TCP_WND_DEBUG } else { - if (pcb->snd_wnd != tcphdr->wnd) { + if (pcb->snd_wnd != SND_WND_SCALE(pcb, tcphdr->wnd)) { LWIP_DEBUGF(TCP_WND_DEBUG, ("tcp_receive: no window update lastack %"U32_F" ackno %" U32_F" wl1 %"U32_F" seqno %"U32_F" wl2 %"U32_F"\n",