diff options
author | Irene Ruengeler <ruengeler@wireshark.org> | 2016-06-13 17:39:42 +0200 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2016-06-14 15:41:19 +0000 |
commit | 4000386fdf2af28ab1f88fa24e8088deec2a5a05 (patch) | |
tree | ee6f13adec3db9e5b97019924cc9c737b00ceed4 /ui/tap-sctp-analysis.c | |
parent | 798f7e946e7ca4afa02ab46eb3f92de0595e76eb (diff) |
Fix SCTP analysis broken
Bug: 12513
Change-Id: I3fdf79106ed007aadf528f0b373fb7a487f3d9a9
Reviewed-on: https://code.wireshark.org/review/15870
Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'ui/tap-sctp-analysis.c')
-rw-r--r-- | ui/tap-sctp-analysis.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/ui/tap-sctp-analysis.c b/ui/tap-sctp-analysis.c index 05229b94f0..d5e6faf179 100644 --- a/ui/tap-sctp-analysis.c +++ b/ui/tap-sctp-analysis.c @@ -105,6 +105,7 @@ reset(void *arg) if (info->frame_numbers != NULL) { + g_list_foreach(info->frame_numbers, free_first, NULL); g_list_free(info->frame_numbers); info->frame_numbers = NULL; } @@ -735,6 +736,7 @@ packet(void *tapdata _U_, packet_info *pinfo, epan_dissect_t *edt _U_, const voi } if (info->verification_tag1 != 0 || info->verification_tag2 != 0) { + guint32 *number; store = (address *)g_malloc(sizeof (address)); store->type = tmp_info.src.type; store->len = tmp_info.src.len; @@ -749,7 +751,9 @@ packet(void *tapdata _U_, packet_info *pinfo, epan_dissect_t *edt _U_, const voi memcpy(addr,(tmp_info.dst.data),tmp_info.dst.len); store->data = addr; info = add_address(store, info, 2); - info->frame_numbers=g_list_prepend(info->frame_numbers,&(pinfo->num)); + number = (guint32 *)g_malloc(sizeof(guint32)); + *number = pinfo->num; + info->frame_numbers=g_list_prepend(info->frame_numbers,number); if (datachunk || forwardchunk) info->tsn1 = g_list_prepend(info->tsn1, tsn); if (sackchunk == TRUE) @@ -784,13 +788,14 @@ packet(void *tapdata _U_, packet_info *pinfo, epan_dissect_t *edt _U_, const voi } /* endif (!info) */ else { - info->direction = sctp_info->direction; + guint32 *number; + info->direction = sctp_info->direction; - if (info->verification_tag1 == 0 && info->verification_tag2 != sctp_info->verification_tag) { - info->verification_tag1 = sctp_info->verification_tag; - } else if (info->verification_tag2 == 0 && info->verification_tag1 != sctp_info->verification_tag) { - info->verification_tag2 = sctp_info->verification_tag; - } + if (info->verification_tag1 == 0 && info->verification_tag2 != sctp_info->verification_tag) { + info->verification_tag1 = sctp_info->verification_tag; + } else if (info->verification_tag2 == 0 && info->verification_tag1 != sctp_info->verification_tag) { + info->verification_tag2 = sctp_info->verification_tag; + } if (((tvb_get_guint8(sctp_info->tvb[0],0)) == SCTP_INIT_CHUNK_ID) || ((tvb_get_guint8(sctp_info->tvb[0],0)) == SCTP_INIT_ACK_CHUNK_ID) || ((tvb_get_guint8(sctp_info->tvb[0],0)) == SCTP_DATA_CHUNK_ID) || @@ -848,7 +853,9 @@ packet(void *tapdata _U_, packet_info *pinfo, epan_dissect_t *edt _U_, const voi } sack->frame_number = tsn->frame_number = pinfo->num; } - info->frame_numbers = g_list_prepend(info->frame_numbers,&(pinfo->num)); + number = (guint32 *)g_malloc(sizeof(guint32)); + *number = pinfo->num; + info->frame_numbers=g_list_prepend(info->frame_numbers,number); store = (address *)g_malloc(sizeof (address)); store->type = tmp_info.src.type; |