aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Knudsen <thokn@sdfe.dk>2017-10-03 13:47:11 +0200
committerThomas Knudsen <thokn@sdfe.dk>2017-10-06 11:48:54 +0200
commitca84e57463cacaa0d6b8f81b11ca6714c77e88c5 (patch)
tree02459a5c44d958ffae90d13dc5550b06e35d9209 /src
parent664577ced6a8e4074b1f53af82b5ae5d1d189eac (diff)
downloadPROJ-ca84e57463cacaa0d6b8f81b11ca6714c77e88c5.tar.gz
PROJ-ca84e57463cacaa0d6b8f81b11ca6714c77e88c5.zip
Enable address sanitizer in linux/clang build
Elim some leaks by initializing PJ.destructor in PJ_ob_tran.c properly Avoid tests bombing when built with address sanitizer: Repair memory leak in test228.c Avoid tests bombing when built with address sanitizer: Repair memory leak in multistresstest.c
Diffstat (limited to 'src')
-rw-r--r--src/PJ_ob_tran.c15
-rw-r--r--src/multistresstest.c2
-rw-r--r--src/pj_malloc.c1
-rw-r--r--src/test228.c2
4 files changed, 12 insertions, 8 deletions
diff --git a/src/PJ_ob_tran.c b/src/PJ_ob_tran.c
index 793ace38..cd6f72db 100644
--- a/src/PJ_ob_tran.c
+++ b/src/PJ_ob_tran.c
@@ -84,13 +84,12 @@ static LP t_inverse(XY xy, PJ *P) { /* spheroid */
static void *destructor(PJ *P, int errlev) {
if (0==P)
return 0;
-
if (0==P->opaque)
return pj_default_destructor (P, errlev);
-
+
if (P->opaque->link)
P->opaque->link->destructor (P->opaque->link, errlev);
-
+
return pj_default_destructor(P, errlev);
}
@@ -166,12 +165,14 @@ PJ *PROJECTION(ob_tran) {
struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque));
if (0==Q)
- return pj_default_destructor(P, ENOMEM);
- P->opaque = Q;
+ return destructor(P, ENOMEM);
- if (0 != P->es)
- return pj_default_destructor(P, PJD_ERR_ELLIPSOIDAL_UNSUPPORTED);
+ P->opaque = Q;
+ P->destructor = destructor;
+ if (0 != P->es)
+ return destructor(P, PJD_ERR_ELLIPSOIDAL_UNSUPPORTED);
+
/* get name of projection to be translated */
if (!(name = pj_param(P->ctx, P->params, "so_proj").s))
return destructor(P, PJD_ERR_NO_ROTATION_PROJ);
diff --git a/src/multistresstest.c b/src/multistresstest.c
index 8fb764e2..ddbbb033 100644
--- a/src/multistresstest.c
+++ b/src/multistresstest.c
@@ -363,6 +363,7 @@ static int do_main(void)
{
printf( "Unable to translate:\n%s\n", test->src_def );
test->skip = 1;
+ pj_free (dst_pj);
continue;
}
@@ -370,6 +371,7 @@ static int do_main(void)
{
printf( "Unable to translate:\n%s\n", test->dst_def );
test->skip = 1;
+ pj_free (src_pj);
continue;
}
diff --git a/src/pj_malloc.c b/src/pj_malloc.c
index 9c69257f..75d05378 100644
--- a/src/pj_malloc.c
+++ b/src/pj_malloc.c
@@ -161,7 +161,6 @@ void *pj_default_destructor (PJ *P, int errlev) { /* Destructor */
if (0==P)
return 0;
-
/* free grid lists */
pj_dealloc( P->gridlist );
pj_dealloc( P->vgridlist_geoid );
diff --git a/src/test228.c b/src/test228.c
index 1f3d04e8..94f0ec08 100644
--- a/src/test228.c
+++ b/src/test228.c
@@ -54,6 +54,8 @@ static void* thread_main(void* unused)
assert(fabs(y - 49.999396034285531698) < 1e-15);
}
+ pj_free (p_OSGB36_proj);
+ pj_free (p_WGS84_proj);
return NULL;
}