From 406e979fb444f7622d8a2ac254461c1be798f13d Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Wed, 1 Nov 2017 04:31:12 -0600 Subject: [PATCH] fixed tst_enums memory issue --- libdispatch/dfile.c | 9 ++++++--- libsrc4/nc4file.c | 2 +- nc_test4/tst_enums.c | 5 +++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/libdispatch/dfile.c b/libdispatch/dfile.c index f4c1ae3d2e..3b5b39126b 100644 --- a/libdispatch/dfile.c +++ b/libdispatch/dfile.c @@ -1234,10 +1234,13 @@ nc_close(int ncid) #endif { - stat = ncp->dispatch->close(ncid); + stat = ncp->dispatch->close(ncid); /* Remove from the nc list */ - del_from_NCList(ncp); - free_NC(ncp); + if (!stat) + { + del_from_NCList(ncp); + free_NC(ncp); + } } return stat; } diff --git a/libsrc4/nc4file.c b/libsrc4/nc4file.c index 6f07146a8c..3688b06796 100644 --- a/libsrc4/nc4file.c +++ b/libsrc4/nc4file.c @@ -3141,7 +3141,7 @@ close_netcdf4_file(NC_HDF5_FILE_INFO_T *h5, int abort) exit: /* Free the nc4_info struct; above code should have reclaimed everything else */ - if(h5 != NULL) + if(!retval && h5 != NULL) free(h5); return retval; } diff --git a/nc_test4/tst_enums.c b/nc_test4/tst_enums.c index 873800fc83..96a4e3136c 100644 --- a/nc_test4/tst_enums.c +++ b/nc_test4/tst_enums.c @@ -304,8 +304,13 @@ main(int argc, char **argv) /* Close the file. */ if (nc_close(ncid) != NC_EINVAL) ERR; + unsigned char ubyte_value = 42; + if (nc_redef(ncid)) ERR; + if (nc_insert_enum(ncid, typeid, "name", &ubyte_value)) ERR; + if (nc_close(ncid)) ERR; } SUMMARIZE_ERR; FINAL_RESULTS; } +