diff options
author | Paul Harten <pharten@ncsa.uiuc.edu> | 1999-01-12 15:48:18 (GMT) |
---|---|---|
committer | Paul Harten <pharten@ncsa.uiuc.edu> | 1999-01-12 15:48:18 (GMT) |
commit | 2362b4e0f0dda6237c994551e01cdd2773bad019 (patch) | |
tree | 628b5ae14e2303cb3040c25adef4964e14296510 | |
parent | 6c30f0ae168fa5e7cdfb1553ef41553b20350573 (diff) | |
download | hdf5-2362b4e0f0dda6237c994551e01cdd2773bad019.zip hdf5-2362b4e0f0dda6237c994551e01cdd2773bad019.tar.gz hdf5-2362b4e0f0dda6237c994551e01cdd2773bad019.tar.bz2 |
[svn-r1021] Purpose:
Bug fix
Problem:
Segmentation fault when attempting to free NULL or uninitialized pointers.
Problem noticed on Linux and HPUX10.20 platforms.
Solution:
Initialialize the pointer to NULL. Execute the "free" statement
upon the condition that the pointer is not equal to NULL (i.e. after the
allocation has taken place.)
Platform tested:
Linux, HPUX10.20, Solaris2.5
-rw-r--r-- | tools/h5findshd.c | 12 | ||||
-rw-r--r-- | tools/h5toh4.c | 46 |
2 files changed, 40 insertions, 18 deletions
diff --git a/tools/h5findshd.c b/tools/h5findshd.c index b5cd0f9..20d9492 100644 --- a/tools/h5findshd.c +++ b/tools/h5findshd.c @@ -92,9 +92,15 @@ int i; void free_table (void){ - HDfree(&group_table); - HDfree(&dset_table); - HDfree(&type_table); + if (group_table.objs != NULL) { + HDfree(group_table.objs); + } + if (dset_table.objs != NULL) { + HDfree(dset_table.objs); + } + if (type_table.objs != NULL) { + HDfree(type_table.objs); + } } diff --git a/tools/h5toh4.c b/tools/h5toh4.c index 09f04a9..bdc3df2 100644 --- a/tools/h5toh4.c +++ b/tools/h5toh4.c @@ -71,8 +71,9 @@ int main(int argc, char **argv) { char **fargv; - char *h5_filename, *h4_filename; - char *h4_extension = "hdf"; + char *h5_filename=NULL; + char *h4_filename=NULL; + char *h4_extension = "hdf"; int status = 0; int status2 = 0; @@ -145,7 +146,9 @@ main(int argc, char **argv) if ( status != 0 ) { DEBUG_PRINT("Error detected in %s() [%s line %d]\n", "main", __FILE__, __LINE__); } - HDfree(h4_filename); + if (h4_filename != NULL) { + HDfree(h4_filename); + } break; @@ -235,7 +238,9 @@ main(int argc, char **argv) DEBUG_PRINT("Error detected in %s() [%s line %d]\n", "main", __FILE__, __LINE__); status2 = status; } - HDfree(h4_filename); + if (h4_filename != NULL) { + HDfree(h4_filename); + } } status = status2; @@ -406,7 +411,6 @@ int h5toh4(h5_filename, h4_filename) } done: - free_table(); return status; @@ -585,9 +589,9 @@ int32 h4_type; int32 recsize; int32 n_records, num_of_recs, record_pos; intn nmembers; -char *buffer; /* read/write buffer*/ +char *buffer=NULL; /* read/write buffer*/ char fieldname_list[4096] = "\0"; -char *fieldname; +char *fieldname=NULL; hid_t fieldtype; int32 order; off_t offset; @@ -849,7 +853,9 @@ int32 order_array[512]; strcat(fieldname_list,", "); } - HDfree(fieldname); + if (fieldname != NULL) { + HDfree(fieldname); + } } if ((status = VSsetfields(vdata_id, fieldname_list)) != SUCCEED ) { fprintf(stderr, "Error: Unable to set fieldname list %s\n", name); @@ -926,7 +932,9 @@ int32 order_array[512]; DEBUG_PRINT("Error detected in %s() [%s line %d]\n", "convert_dataset", __FILE__, __LINE__); } - HDfree(buffer); + if (buffer != NULL) { + HDfree(buffer); + } return status; @@ -953,7 +961,7 @@ convert_attr (hid_t attr, char *attr_name, op_data_t *op_data) { hid_t attr_id, type, space, mem_type, class; size_t typesize; -char *attr_values; +char *attr_values=NULL; int32 status; int32 h4_type; int32 sds_id; @@ -1071,7 +1079,9 @@ int32 n_values; return status; } - HDfree(attr_values); + if (attr_values != NULL) { + HDfree(attr_values); + } status = SUCCEED; break; @@ -1456,7 +1466,8 @@ convert_shared_dataset(hid_t did, int idx, op_data_t *op_data) { int status=SUCCEED; int32 vgroup_id; - char *dataset_name, *dataset_name2; + char *dataset_name=NULL; + char *dataset_name2=NULL; int32 hfile_id; int32 sd_id; int32 sds_id; @@ -1579,7 +1590,9 @@ convert_shared_dataset(hid_t did, int idx, op_data_t *op_data) status = FAIL; } - HDfree (dataset_name); + if (dataset_name != NULL) { + HDfree (dataset_name); + } return status; @@ -1605,7 +1618,8 @@ convert_shared_group (hid_t group, int idx, op_data_t *op_data) { int32 vgroup_ref; int32 numtagref; int32 status; - char *group_name, *group_name2; + char *group_name=NULL; + char *group_name2=NULL; char vgroup_name[VGNAMELENMAX]; hfile_id = op_data->hfile_id; @@ -1658,7 +1672,9 @@ convert_shared_group (hid_t group, int idx, op_data_t *op_data) { status = FAIL; } - HDfree(group_name); + if (group_name != NULL) { + HDfree(group_name); + } return status; |