From 88e09ba8df5b4181bad39b84ecfc96e6048e46a6 Mon Sep 17 00:00:00 2001 From: Sam Hatchett Date: Fri, 15 Nov 2019 09:57:32 -0500 Subject: [PATCH] fixes a crashing issue in freedata (#559) The freedata function used cached values for sizes of certain arrays found in the parser struct. However, now that the network is mutable, those values can become invalid. Relying instead on the actual array lengths prevents freeing unallocated memory, or ignoring cleanup on newly created elements. --- src/project.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/project.c b/src/project.c index 99dfe57..7adf2b6 100644 --- a/src/project.c +++ b/src/project.c @@ -396,7 +396,7 @@ void freedata(Project *pr) // Free memory for node data if (pr->network.Node != NULL) { - for (j = 1; j <= pr->parser.MaxNodes; j++) + for (j = 1; j <= pr->network.Nnodes; j++) { // Free memory used for demands and WQ source data freedemands(&(pr->network.Node[j])); @@ -409,7 +409,7 @@ void freedata(Project *pr) // Free memory for link data if (pr->network.Link != NULL) { - for (j = 1; j <= pr->parser.MaxLinks; j++) + for (j = 1; j <= pr->network.Nlinks; j++) { freelinkvertices(&pr->network.Link[j]); free(pr->network.Link[j].Comment); @@ -426,7 +426,7 @@ void freedata(Project *pr) // Free memory for time patterns if (pr->network.Pattern != NULL) { - for (j = 0; j <= pr->parser.MaxPats; j++) + for (j = 0; j <= pr->network.Npats; j++) { free(pr->network.Pattern[j].F); free(pr->network.Pattern[j].Comment); @@ -438,7 +438,7 @@ void freedata(Project *pr) if (pr->network.Curve != NULL) { // There is no Curve[0] - for (j = 1; j <= pr->parser.MaxCurves; j++) + for (j = 1; j <= pr->network.Ncurves; j++) { free(pr->network.Curve[j].X); free(pr->network.Curve[j].Y);