aboutsummaryrefslogtreecommitdiffstats
path: root/frame_data_sequence.c
diff options
context:
space:
mode:
authorEvan Huus <eapache@gmail.com>2012-11-11 16:43:33 +0000
committerEvan Huus <eapache@gmail.com>2012-11-11 16:43:33 +0000
commitacb53e7d4caf8a9747824606abad294ec5061091 (patch)
tree7d52e2c2d249f509617be3f60c4cf76456a05304 /frame_data_sequence.c
parent68d621b396583ce49a9325261c097f27f42dd126 (diff)
Call frame_data_cleanup() before freeing frame_data structures in
free_frame_data_sequence(). Prevents part of the leak identified in https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7885 svn path=/trunk/; revision=46000
Diffstat (limited to 'frame_data_sequence.c')
-rw-r--r--frame_data_sequence.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/frame_data_sequence.c b/frame_data_sequence.c
index 718838cf76..9bb32d161e 100644
--- a/frame_data_sequence.c
+++ b/frame_data_sequence.c
@@ -257,16 +257,20 @@ free_frame_data_sequence(frame_data_sequence *fds)
} else if (fds->count <= NODES_PER_LEVEL*NODES_PER_LEVEL) {
/* It's a 2-level tree. */
level1 = fds->ptree_root;
- for (i = 0; i < NODES_PER_LEVEL && level1[i] != NULL; i++)
+ for (i = 0; i < NODES_PER_LEVEL && level1[i] != NULL; i++) {
+ frame_data_cleanup(level1[i]);
g_free(level1[i]);
+ }
g_free(level1);
} else if (fds->count <= NODES_PER_LEVEL*NODES_PER_LEVEL*NODES_PER_LEVEL) {
/* It's a 3-level tree. */
level2 = fds->ptree_root;
for (i = 0; i < NODES_PER_LEVEL && level2[i] != NULL; i++) {
level1 = level2[i];
- for (j = 0; j < NODES_PER_LEVEL && level1[i] != NULL; j++)
+ for (j = 0; j < NODES_PER_LEVEL && level1[i] != NULL; j++) {
+ frame_data_cleanup(level1[j]);
g_free(level1[j]);
+ }
g_free(level1);
}
g_free(level2);
@@ -280,8 +284,10 @@ free_frame_data_sequence(frame_data_sequence *fds)
level2 = level3[i];
for (j = 0; j < NODES_PER_LEVEL && level2[i] != NULL; j++) {
level1 = level2[j];
- for (k = 0; k < NODES_PER_LEVEL && level1[k] != NULL; k++)
+ for (k = 0; k < NODES_PER_LEVEL && level1[k] != NULL; k++) {
+ frame_data_cleanup(level1[k]);
g_free(level1[k]);
+ }
}
g_free(level2);
}