fixed bug #28288: Data after FIN in oos queue

This commit is contained in:
Simon Goldschmidt 2011-09-27 21:08:49 +02:00
parent cfb70bccc1
commit 998f109fc8
2 changed files with 9 additions and 2 deletions

View File

@ -65,6 +65,9 @@ HISTORY
++ Bugfixes:
2011-09-27: Simon Goldschmidt
* tcp_in.c: fixed bug #28288: Data after FIN in oos queue
2011-09-27: Simon Goldschmidt
* dhcp.c: fixed bug #34406 dhcp_option_hostname() can overflow the pbuf

View File

@ -892,6 +892,8 @@ tcp_receive(struct tcp_pcb *pcb)
u16_t new_tot_len;
int found_dupack = 0;
LWIP_ASSERT("tcp_receive: wrong state", pcb->state >= ESTABLISHED);
if (flags & TCP_ACK) {
right_wnd_edge = pcb->snd_wnd + pcb->snd_wl2;
@ -1132,8 +1134,10 @@ tcp_receive(struct tcp_pcb *pcb)
}
/* If the incoming segment contains data, we must process it
further. */
if (tcplen > 0) {
further unless the pcb already received a FIN.
(RFC 793, chapeter 3.9, "SEGMENT ARRIVES" in states CLOSE-WAIT, CLOSING,
LAST-ACK and TIME-WAIT: "Ignore the segment text.") */
if ((tcplen > 0) && (pcb->state < CLOSE_WAIT)) {
/* This code basically does three things:
+) If the incoming segment contains data that is the next