[svn-r18224] Description:

Bring revisions from Coverity session from hdf5_1_8_coverity branch to
trunk:

r18214:
Issue 423:  cache_ptr was not initialized. if global 'pass' was false,
cache_ptr could be used. Extended scope of if(pass) block to include whole
function-flush_cache().

r18215:
Fix coverity item 317.  Removed unreachable code in H5B2_hdr_alloc.

r18216:
Fixed Coverity issues 57 & 67.  Checked oid_count > 0 before memory allocation
and oid_list != NULL before dereferencing.

Tested on:
    Mac OS X/32 10.6.2 (amazon) w/debug & production
    (daily tested on Coverity branch already)
This commit is contained in:
Quincey Koziol 2010-02-09 17:32:28 -05:00
parent f091546b6a
commit a79ba5b135
4 changed files with 81 additions and 77 deletions

View File

@ -264,9 +264,6 @@ H5B2_hdr_alloc(H5F_t *f)
ret_value = hdr;
done:
if(!ret_value && hdr)
if(H5B2_hdr_free(hdr) < 0)
HDONE_ERROR(H5E_BTREE, H5E_CANTFREE, NULL, "unable to free shared v2 B-tree info")
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5B2_hdr_alloc() */

View File

@ -2977,61 +2977,59 @@ flush_cache(H5F_t * file_ptr,
hbool_t dump_detailed_stats)
{
const char * fcn_name = "flush_cache()";
H5C_t * cache_ptr;
herr_t result = 0;
hbool_t verbose = FALSE;
verify_unprotected();
if ( pass ) {
if(pass) {
H5C_t * cache_ptr = NULL;
herr_t result = 0;
HDassert(file_ptr);
cache_ptr = file_ptr->shared->cache;
if ( destroy_entries ) {
if(destroy_entries) {
result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5P_DATASET_XFER_DEFAULT,
H5C__FLUSH_INVALIDATE_FLAG);
result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT,
H5P_DATASET_XFER_DEFAULT, H5C__FLUSH_INVALIDATE_FLAG);
} else {
}
else {
result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5P_DATASET_XFER_DEFAULT,
H5C__NO_FLAGS_SET);
result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT,
H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET);
}
if(dump_stats) {
H5C_stats(cache_ptr, "test cache", dump_detailed_stats);
}
if(result < 0) {
pass = FALSE;
failure_mssg = "error in H5C_flush_cache().";
}
else if((destroy_entries) && ((cache_ptr->index_len != 0)
|| (cache_ptr->index_size != 0)
|| (cache_ptr->clean_index_size != 0)
|| (cache_ptr->dirty_index_size != 0))) {
if(verbose) {
HDfprintf(stdout,
"%s: unexpected il/is/cis/dis = %lld/%lld/%lld/%lld.\n",
fcn_name,
(long long)(cache_ptr->index_len),
(long long)(cache_ptr->index_size),
(long long)(cache_ptr->clean_index_size),
(long long)(cache_ptr->dirty_index_size));
}
pass = FALSE;
failure_mssg = "non zero index len/sizes after H5C_flush_cache() with invalidate.";
}
}
if ( dump_stats ) {
H5C_stats(cache_ptr, "test cache", dump_detailed_stats);
}
if ( result < 0 ) {
pass = FALSE;
failure_mssg = "error in H5C_flush_cache().";
}
else if ( ( destroy_entries ) &&
( ( cache_ptr->index_len != 0 ) ||
( cache_ptr->index_size != 0 ) ||
( cache_ptr->clean_index_size != 0 ) ||
( cache_ptr->dirty_index_size != 0 ) ) ) {
if ( verbose ) {
HDfprintf(stdout,
"%s: unexpected il/is/cis/dis = %lld/%lld/%lld/%lld.\n",
fcn_name,
(long long)(cache_ptr->index_len),
(long long)(cache_ptr->index_size),
(long long)(cache_ptr->clean_index_size),
(long long)(cache_ptr->dirty_index_size));
}
pass = FALSE;
failure_mssg =
"non zero index len/sizes after H5C_flush_cache() with invalidate.";
}
return;
} /* flush_cache() */

View File

@ -127,6 +127,15 @@
/* Used to document process through a test */
#define MESSAGE(V,A) {if (HDGetTestVerbosity()>(V)) print_func A;}
/* Used to indicate an error that is complex to check for */
#define ERROR(where) do { \
if(VERBOSE_HI) \
print_func(" Call to routine: %15s at line %4d in %s returned " \
"invalid result\n", where, (int)__LINE__, __FILE__); \
TestErrPrintf("*** UNEXPECTED RESULT from %s at line %4d in %s\n" \
where, (int)__LINE__, __FILE__); \
} while(0)
/* definitions for command strings */
#define VERBOSITY_STR "Verbosity"
#define SKIP_STR "Skip"

View File

@ -1148,46 +1148,46 @@ test_obj_count_and_id(hid_t fid1, hid_t fid2, hid_t did, hid_t gid1,
oid_count = H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL);
CHECK(oid_count, FAIL, "H5Fget_obj_count");
VERIFY(oid_count, OBJ_ID_COUNT_8, "H5Fget_obj_count");
if(oid_count > 0) {
hid_t *oid_list;
{
hid_t *oid_list;
int i;
H5I_type_t id_type;
oid_list = (hid_t*)calloc((size_t)oid_count, sizeof(hid_t));
oid_list = (hid_t *)HDcalloc((size_t)oid_count, sizeof(hid_t));
if(oid_list != NULL) {
int i;
ret_count = H5Fget_obj_ids(H5F_OBJ_ALL, H5F_OBJ_ALL, (size_t)oid_count, oid_list);
CHECK(ret_count, FAIL, "H5Fget_obj_ids");
}
for(i=0; i<oid_count; i++) {
id_type = H5Iget_type(oid_list[i]);
switch(id_type) {
case H5I_FILE:
if(oid_list[i]!=fid1 && oid_list[i]!=fid2 &&
oid_list[i]!=fid3 && oid_list[i]!=fid4) {
ret = FAIL;
CHECK(ret, FAIL, "H5Fget_obj_ids");
}
break;
case H5I_GROUP:
if(oid_list[i]!=gid1 && oid_list[i]!=gid2 &&
oid_list[i]!=gid3) {
ret = FAIL;
CHECK(ret, FAIL, "H5Fget_obj_ids");
}
break;
case H5I_DATASET:
VERIFY(oid_list[i], did, "H5Fget_obj_ids");
break;
default:
ret = FAIL;
CHECK(ret, FAIL, "H5Fget_obj_ids");
}
}
for(i = 0; i < oid_count; i++) {
H5I_type_t id_type;
free(oid_list);
}
id_type = H5Iget_type(oid_list[i]);
switch(id_type) {
case H5I_FILE:
if(oid_list[i] != fid1 && oid_list[i] != fid2
&& oid_list[i] != fid3 && oid_list[i] != fid4)
ERROR("H5Fget_obj_ids");
break;
case H5I_GROUP:
if(oid_list[i] != gid1 && oid_list[i] != gid2
&& oid_list[i] != gid3)
ERROR("H5Fget_obj_ids");
break;
case H5I_DATASET:
VERIFY(oid_list[i], did, "H5Fget_obj_ids");
break;
default:
ERROR("H5Fget_obj_ids");
} /* end switch */
} /* end for */
HDfree(oid_list);
} /* end if */
} /* end if */
/* close the two new files */
ret = H5Fclose(fid3);