aboutsummaryrefslogtreecommitdiffstats
path: root/epan/reassemble.c
diff options
context:
space:
mode:
authorJohn Thacker <johnthacker@gmail.com>2022-11-14 21:37:42 -0500
committerJohn Thacker <johnthacker@gmail.com>2022-11-14 21:39:16 -0500
commitb9a4bf297ece1f93e9caf5f2b1e3ee5f6e447d28 (patch)
tree42ed460077919de9627edb1a969a5a0ff716320e /epan/reassemble.c
parent59fdaa7d07f80928a51b964e6f0138082829c5b7 (diff)
reassembly: Fix update to the fragment_add_single functions
These used fragment_head and fragment_items indistinguishably in a few ways. Fix up 4f3b028d941d727071 Fix #18639. Fix #18640.
Diffstat (limited to 'epan/reassemble.c')
-rw-r--r--epan/reassemble.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/epan/reassemble.c b/epan/reassemble.c
index 19ba265e70..1769470975 100644
--- a/epan/reassemble.c
+++ b/epan/reassemble.c
@@ -2394,7 +2394,7 @@ fragment_add_seq_single_work(reassembly_table *table, tvbuff_t *tvb,
for (frag_number=1; frag_number < max_frags; frag_number++) {
new_fh = lookup_fd_head(table, pinfo, id-frag_number, data, NULL);
if (new_fh != NULL) {
- prev_fd = new_fh->next;
+ prev_fd = NULL;
new_fh->frame = 0;
for (fd=new_fh->next; fd && fd->offset < frag_number; fd=fd->next) {
prev_fd = fd;
@@ -2404,6 +2404,8 @@ fragment_add_seq_single_work(reassembly_table *table, tvbuff_t *tvb,
}
if (prev_fd) {
prev_fd->next = NULL;
+ } else {
+ new_fh->next = NULL;
}
break;
}
@@ -2474,7 +2476,7 @@ fragment_add_seq_single_work(reassembly_table *table, tvbuff_t *tvb,
}
if (last) {
/* Look for fragments past the end set by this Last fragment. */
- prev_fd = fh->next;
+ prev_fd = NULL;
for (fd=fh->next; fd && fd->offset <= frag_number; fd=fd->next) {
prev_fd = fd;
}
@@ -2488,6 +2490,8 @@ fragment_add_seq_single_work(reassembly_table *table, tvbuff_t *tvb,
if (fd != NULL) {
if (prev_fd) {
prev_fd->next = NULL;
+ } else {
+ fh->next = NULL;
}
fh->frame = 0;
for (prev_fd=fh->next; prev_fd; prev_fd=prev_fd->next) {