aboutsummaryrefslogtreecommitdiffstats
path: root/epan/follow.c
diff options
context:
space:
mode:
authorSake Blok <sake@euronet.nl>2009-12-21 06:47:32 +0000
committerSake Blok <sake@euronet.nl>2009-12-21 06:47:32 +0000
commit3b6cb4d3fa9565aa758588e2ae7c08d4818386eb (patch)
tree36d487fe401fc39e0a2860be13cfb58a59d7a28a /epan/follow.c
parent52c02f4eb8b315f08633af8b3cd1841bf8956362 (diff)
Fix some [-XX bytes missing in capture file] messages when doing
follow TCP stream. svn path=/trunk/; revision=31334
Diffstat (limited to 'epan/follow.c')
-rw-r--r--epan/follow.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/epan/follow.c b/epan/follow.c
index 437f24fa17..d351164a74 100644
--- a/epan/follow.c
+++ b/epan/follow.c
@@ -281,7 +281,7 @@ reassemble_tcp( guint32 tcp_stream, gulong sequence, gulong acknowledgement,
}
else {
/* out of order packet */
- if(data_length > 0 && sequence > seq[src_index] ) {
+ if(data_length > 0 && ((glong)(sequence - seq[src_index]) > 0) ) {
tmp_frag = (tcp_frag *)g_malloc( sizeof( tcp_frag ) );
tmp_frag->data = (gchar *)g_malloc( data_length );
tmp_frag->seq = sequence;
@@ -336,15 +336,19 @@ check_fragments( int index, tcp_stream_chunk *sc, gulong acknowledged ) {
}
seq[index] += (current->len - new_pos);
- if( prev ) {
- prev->next = current->next;
- } else {
- frags[index] = current->next;
- }
- g_free( current->data );
- g_free( current );
- return 1;
+ }
+
+ /* Remove the fragment from the list as the "new" part of it
+ * has been processed or its data has been seen already in
+ * another packet. */
+ if( prev ) {
+ prev->next = current->next;
+ } else {
+ frags[index] = current->next;
}
+ g_free( current->data );
+ g_free( current );
+ return 1;
}
if( current->seq == seq[index] ) {