diff options
| author | Thomas Knudsen <thokn@sdfe.dk> | 2017-10-03 13:47:11 +0200 |
|---|---|---|
| committer | Thomas Knudsen <thokn@sdfe.dk> | 2017-10-06 11:48:54 +0200 |
| commit | ca84e57463cacaa0d6b8f81b11ca6714c77e88c5 (patch) | |
| tree | 02459a5c44d958ffae90d13dc5550b06e35d9209 /src | |
| parent | 664577ced6a8e4074b1f53af82b5ae5d1d189eac (diff) | |
| download | PROJ-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.c | 15 | ||||
| -rw-r--r-- | src/multistresstest.c | 2 | ||||
| -rw-r--r-- | src/pj_malloc.c | 1 | ||||
| -rw-r--r-- | src/test228.c | 2 |
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; } |
