fixed bug #28288: Data after FIN in oos queue

This commit is contained in:
Simon Goldschmidt 2011-09-27 21:08:49 +02:00 committed by goldsimon
parent 9c3a6b828f
commit eff10f6458
2 changed files with 9 additions and 2 deletions

View File

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

View File

@ -887,6 +887,8 @@ tcp_receive(struct tcp_pcb *pcb)
u16_t new_tot_len; u16_t new_tot_len;
int found_dupack = 0; int found_dupack = 0;
LWIP_ASSERT("tcp_receive: wrong state", pcb->state >= ESTABLISHED);
if (flags & TCP_ACK) { if (flags & TCP_ACK) {
right_wnd_edge = pcb->snd_wnd + pcb->snd_wl2; right_wnd_edge = pcb->snd_wnd + pcb->snd_wl2;
@ -1120,8 +1122,10 @@ tcp_receive(struct tcp_pcb *pcb)
} }
/* If the incoming segment contains data, we must process it /* If the incoming segment contains data, we must process it
further. */ further unless the pcb already received a FIN.
if (tcplen > 0) { (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: /* This code basically does three things:
+) If the incoming segment contains data that is the next +) If the incoming segment contains data that is the next