From 4e45b1ab51f23cb86faa9249888d876e5ebe1f59 Mon Sep 17 00:00:00 2001 From: Shubham Vasudeo Desai Date: Sun, 13 Oct 2024 18:37:42 -0400 Subject: [PATCH 1/7] Fix Resource leak --- lib/vector/Vlib/geos.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/vector/Vlib/geos.c b/lib/vector/Vlib/geos.c index 719e0fdd270..7cfa3d80568 100644 --- a/lib/vector/Vlib/geos.c +++ b/lib/vector/Vlib/geos.c @@ -362,15 +362,27 @@ GEOSCoordSequence *V1_read_line_geos(struct Map_info *Map, long offset, else z = NULL; - if (0 >= dig__fread_port_D(x, n_points, &(Map->dig_fp))) + if (0 >= dig__fread_port_D(x, n_points, &(Map->dig_fp))) { + G_free((void *)x); + G_free((void *)y); + G_free((void *)z); return NULL; /* end of file */ + } - if (0 >= dig__fread_port_D(y, n_points, &(Map->dig_fp))) + if (0 >= dig__fread_port_D(y, n_points, &(Map->dig_fp))) { + G_free((void *)x); + G_free((void *)y); + G_free((void *)z); return NULL; /* end of file */ + } if (Map->head.with_z) { - if (0 >= dig__fread_port_D(z, n_points, &(Map->dig_fp))) + if (0 >= dig__fread_port_D(z, n_points, &(Map->dig_fp))) { + G_free((void *)x); + G_free((void *)y); + G_free((void *)z); return NULL; /* end of file */ + } } for (i = 0; i < n_points; i++) { From de4e5f2cedccf335342d930ba64c77d02719e6f1 Mon Sep 17 00:00:00 2001 From: Shubham Vasudeo Desai Date: Sun, 13 Oct 2024 20:43:55 -0400 Subject: [PATCH 2/7] remove space --- lib/vector/Vlib/geos.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vector/Vlib/geos.c b/lib/vector/Vlib/geos.c index 7cfa3d80568..2f7d259b285 100644 --- a/lib/vector/Vlib/geos.c +++ b/lib/vector/Vlib/geos.c @@ -367,7 +367,7 @@ GEOSCoordSequence *V1_read_line_geos(struct Map_info *Map, long offset, G_free((void *)y); G_free((void *)z); return NULL; /* end of file */ - } + } if (0 >= dig__fread_port_D(y, n_points, &(Map->dig_fp))) { G_free((void *)x); From c414004e1a8e66c2ffb4bad45939ccfd5aeff774 Mon Sep 17 00:00:00 2001 From: Shubham Vasudeo Desai Date: Mon, 14 Oct 2024 16:29:05 -0400 Subject: [PATCH 3/7] requested changes --- lib/vector/Vlib/geos.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/lib/vector/Vlib/geos.c b/lib/vector/Vlib/geos.c index 2f7d259b285..9579b017936 100644 --- a/lib/vector/Vlib/geos.c +++ b/lib/vector/Vlib/geos.c @@ -363,25 +363,22 @@ GEOSCoordSequence *V1_read_line_geos(struct Map_info *Map, long offset, z = NULL; if (0 >= dig__fread_port_D(x, n_points, &(Map->dig_fp))) { - G_free((void *)x); - G_free((void *)y); - G_free((void *)z); - return NULL; /* end of file */ + GEOSCoordSeq_destroy(pseq); + pseq = NULL; + goto free_return; } if (0 >= dig__fread_port_D(y, n_points, &(Map->dig_fp))) { - G_free((void *)x); - G_free((void *)y); - G_free((void *)z); - return NULL; /* end of file */ + GEOSCoordSeq_destroy(pseq); + pseq = NULL; + goto free_return; } if (Map->head.with_z) { if (0 >= dig__fread_port_D(z, n_points, &(Map->dig_fp))) { - G_free((void *)x); - G_free((void *)y); - G_free((void *)z); - return NULL; /* end of file */ + GEOSCoordSeq_destroy(pseq); + pseq = NULL; + goto free_return; } } @@ -394,10 +391,11 @@ GEOSCoordSequence *V1_read_line_geos(struct Map_info *Map, long offset, G_debug(3, " off = %ld", (long)dig_ftell(&(Map->dig_fp))); - G_free((void *)x); - G_free((void *)y); - if (z) - G_free((void *)z); + free_return: + G_free((void *)x); + G_free((void *)y); + if (z) + G_free((void *)z); return pseq; } From 906d2159b03449c7785605cd82fbda697985bf20 Mon Sep 17 00:00:00 2001 From: Shubham Vasudeo Desai Date: Mon, 14 Oct 2024 16:39:33 -0400 Subject: [PATCH 4/7] requested changes --- lib/vector/Vlib/geos.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/vector/Vlib/geos.c b/lib/vector/Vlib/geos.c index 9579b017936..b8fd5b4f328 100644 --- a/lib/vector/Vlib/geos.c +++ b/lib/vector/Vlib/geos.c @@ -391,11 +391,11 @@ GEOSCoordSequence *V1_read_line_geos(struct Map_info *Map, long offset, G_debug(3, " off = %ld", (long)dig_ftell(&(Map->dig_fp))); - free_return: - G_free((void *)x); - G_free((void *)y); - if (z) - G_free((void *)z); +free_return: + G_free((void *)x); + G_free((void *)y); + if (z) + G_free((void *)z); return pseq; } From 7616f78c4f8f1768d3c696082e15148587bff785 Mon Sep 17 00:00:00 2001 From: Shubham Vasudeo Desai Date: Mon, 14 Oct 2024 17:10:17 -0400 Subject: [PATCH 5/7] changes for pseq --- lib/vector/Vlib/geos.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/lib/vector/Vlib/geos.c b/lib/vector/Vlib/geos.c index b8fd5b4f328..20ca8480628 100644 --- a/lib/vector/Vlib/geos.c +++ b/lib/vector/Vlib/geos.c @@ -353,8 +353,6 @@ GEOSCoordSequence *V1_read_line_geos(struct Map_info *Map, long offset, G_debug(3, " n_points = %d dim = %d", n_points, (Map->head.with_z) ? 3 : 2); - pseq = GEOSCoordSeq_create(n_points, (Map->head.with_z) ? 3 : 2); - x = (double *)G_malloc(n_points * sizeof(double)); y = (double *)G_malloc(n_points * sizeof(double)); if (Map->head.with_z) @@ -363,25 +361,21 @@ GEOSCoordSequence *V1_read_line_geos(struct Map_info *Map, long offset, z = NULL; if (0 >= dig__fread_port_D(x, n_points, &(Map->dig_fp))) { - GEOSCoordSeq_destroy(pseq); - pseq = NULL; goto free_return; } if (0 >= dig__fread_port_D(y, n_points, &(Map->dig_fp))) { - GEOSCoordSeq_destroy(pseq); - pseq = NULL; goto free_return; } if (Map->head.with_z) { if (0 >= dig__fread_port_D(z, n_points, &(Map->dig_fp))) { - GEOSCoordSeq_destroy(pseq); - pseq = NULL; goto free_return; } } + pseq = GEOSCoordSeq_create(n_points, (Map->head.with_z) ? 3 : 2); + for (i = 0; i < n_points; i++) { GEOSCoordSeq_setX(pseq, i, x[i]); GEOSCoordSeq_setY(pseq, i, y[i]); From 4533606366b01ccd42f16d35a23c30f05ee81599 Mon Sep 17 00:00:00 2001 From: Shubham Vasudeo Desai Date: Mon, 14 Oct 2024 18:26:26 -0400 Subject: [PATCH 6/7] changes --- lib/vector/Vlib/geos.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vector/Vlib/geos.c b/lib/vector/Vlib/geos.c index 20ca8480628..edb9ba665c5 100644 --- a/lib/vector/Vlib/geos.c +++ b/lib/vector/Vlib/geos.c @@ -290,7 +290,7 @@ GEOSCoordSequence *V1_read_line_geos(struct Map_info *Map, long offset, long size; double *x, *y, *z; - GEOSCoordSequence *pseq; + GEOSCoordSequence *pseq = NULL; G_debug(3, "V1_read_line_geos(): offset = %ld", offset); From c37f6efa6cec454028a64266b04f182df394a4b2 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Tue, 15 Oct 2024 09:14:24 +0200 Subject: [PATCH 7/7] add original comment of "end of file" --- lib/vector/Vlib/geos.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/vector/Vlib/geos.c b/lib/vector/Vlib/geos.c index edb9ba665c5..2c68a0a6fba 100644 --- a/lib/vector/Vlib/geos.c +++ b/lib/vector/Vlib/geos.c @@ -361,16 +361,16 @@ GEOSCoordSequence *V1_read_line_geos(struct Map_info *Map, long offset, z = NULL; if (0 >= dig__fread_port_D(x, n_points, &(Map->dig_fp))) { - goto free_return; + goto free_return; /* end of file */ } if (0 >= dig__fread_port_D(y, n_points, &(Map->dig_fp))) { - goto free_return; + goto free_return; /* end of file */ } if (Map->head.with_z) { if (0 >= dig__fread_port_D(z, n_points, &(Map->dig_fp))) { - goto free_return; + goto free_return; /* end of file */ } }