diff --git a/src/core/tcp_in.c b/src/core/tcp_in.c index c7a1f7b7..de64464d 100644 --- a/src/core/tcp_in.c +++ b/src/core/tcp_in.c @@ -1687,6 +1687,15 @@ tcp_receive(struct tcp_pcb *pcb) ->ooseq. We check the lengths to see which one to discard. */ if (inseg.len > next->len) { + + /* If next segment is the last segment in ooseq + and smaller than inseg, that means it has been + trimmed before to fit our window, so we just + break here. */ + if (next->next == NULL) { + break; + } + /* The incoming segment is larger than the old segment. We replace some segments with the new one. */