mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-18 15:15:56 +08:00
[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:
parent
f091546b6a
commit
a79ba5b135
@ -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() */
|
||||
|
@ -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() */
|
||||
|
@ -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"
|
||||
|
68
test/tfile.c
68
test/tfile.c
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user