aboutsummaryrefslogtreecommitdiffstats
path: root/epan/reassemble.c
diff options
context:
space:
mode:
authorgerald <gerald@f5534014-38df-0310-8fa8-9805f1628bb7>2005-04-19 14:17:22 +0000
committergerald <gerald@f5534014-38df-0310-8fa8-9805f1628bb7>2005-04-19 14:17:22 +0000
commit679d8fe85ca1a72dc552e3b9240655b0be3a8923 (patch)
tree741a81dc35a972cb1905738ac032b304327af15d /epan/reassemble.c
parent9e463c1a8795c818f563d04879de2f3c557c8b32 (diff)
From Peter Johansson: Fix a segmentation fault in the reassembly code.
Fix up the formatting a bit. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@14136 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'epan/reassemble.c')
-rw-r--r--epan/reassemble.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/epan/reassemble.c b/epan/reassemble.c
index b8d6a8ac15..fb8de997b7 100644
--- a/epan/reassemble.c
+++ b/epan/reassemble.c
@@ -725,13 +725,18 @@ fragment_add_work(fragment_data *fd_head, tvbuff_t *tvb, int offset,
}
/* dfpos is always >= than fd_i->offset */
/* No gaps can exist here, max_loop(above) does this */
- if( fd_i->offset+fd_i->len > dfpos )
- memcpy(fd_head->data+dfpos, fd_i->data+(dfpos-fd_i->offset),
+ if( fd_i->offset+fd_i->len > dfpos ) {
+ if( !(fd_i->flags & FD_NOT_MALLOCED) ) {
+ memcpy(fd_head->data+dfpos, fd_i->data+(dfpos-fd_i->offset),
fd_i->len-(dfpos-fd_i->offset));
- if( fd_i->flags & FD_NOT_MALLOCED )
- fd_i->flags ^= FD_NOT_MALLOCED;
- else
- g_free(fd_i->data);
+ g_free(fd_i->data);
+ } else {
+ g_warning("Reassemble error in frame %d", pinfo->fd->num);
+ fd_i->flags ^= FD_NOT_MALLOCED;
+ }
+ }
+
+
fd_i->data=NULL;
dfpos=MAX(dfpos,(fd_i->offset+fd_i->len));