summaryrefslogtreecommitdiffstats
path: root/src/H5HG.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2010-02-20 02:30:56 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2010-02-20 02:30:56 (GMT)
commit8a9eb9fdcdbb01f18d40ad100ce38ba1d5515a26 (patch)
tree75440a1986b30ab10f68620c6472941fb97f5482 /src/H5HG.c
parentd0a61166cc593cd043e3697674d472f7aa85aae3 (diff)
downloadhdf5-8a9eb9fdcdbb01f18d40ad100ce38ba1d5515a26.zip
hdf5-8a9eb9fdcdbb01f18d40ad100ce38ba1d5515a26.tar.gz
hdf5-8a9eb9fdcdbb01f18d40ad100ce38ba1d5515a26.tar.bz2
[svn-r18301] Description:
Bring r18300 from trunk to 1.8 branch: Bring Coverity fixes from branch to trunk: r18282: Fix Coverity issue #428 by wrapping testing calls with if(pass) {} block. r18283: Fix Coverity issue #425 by wrapping test calls in if(pass) {} block r18284: Issue 166: init_error() malloc'd 3 pointers in initialization and never freed inc ase of errors. Init pointers to NULL, check allocation results and free allocations in error block r18285: Fix Coverity issue #410 by wrapping test calls with if(pass) {} block. r18286: Issue 165: custom_print_cb() needed allocations freed in error block. r18287: Fix coverity issue # 409 Added if (pass) checks around calls to flush_cache. Additionally, added a check for file_ptr = NULL after call to setup_cache. r18288: Fix coverity# 107 free fh in H5HF_close() correctly before exit the function even when failure occurs. r18289: Fix Coverity issue #429: correct failure return values to match return type from routine. r18290: Fix Coverity issue #103: release allocated indirect section on error r18294: Issue 153, 152: Check allocations and free allocations in error block. Also cleaned up hid_t identifer that were opened in error block. r18295: Fix coverity# 101 free new_loc in H5HF_man_iter_start_entry() correctly before exit the function even when failure occurs r18296: Fix coverity# 100 free down_loc in H5HF_man_iter_down() before exit the function when failure occurs r18297: Fixed coverity issues 54, 55 and 216. Correctly handle the various ways that allocation of attr_name can fail in test_attr_basic_write. r18298: Fix coverity# 119 free object in H5HG_read() before exit the function when failure occurs r18299: Fix coverity issue #112: Add cleanup during error handling of H5MP_create. Tested on: Mac OS X/32 10.6.2 (amazon) w/debug & production Misc. Linux configurations (on original checkins)
Diffstat (limited to 'src/H5HG.c')
-rw-r--r--src/H5HG.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/H5HG.c b/src/H5HG.c
index 2533e63..f29965b 100644
--- a/src/H5HG.c
+++ b/src/H5HG.c
@@ -641,10 +641,11 @@ void *
H5HG_read(H5F_t *f, hid_t dxpl_id, H5HG_t *hobj, void *object/*out*/,
size_t *buf_size)
{
- H5HG_heap_t *heap = NULL;
- size_t size;
- uint8_t *p = NULL;
- void *ret_value;
+ H5HG_heap_t *heap = NULL; /* Pointer to global heap object */
+ size_t size; /* Size of the heap object */
+ uint8_t *p; /* Pointer to object in heap buffer */
+ void *orig_object = object; /* Keep a copy of the original object pointer */
+ void *ret_value; /* Return value */
FUNC_ENTER_NOAPI(H5HG_read, NULL)
@@ -660,6 +661,7 @@ H5HG_read(H5F_t *f, hid_t dxpl_id, H5HG_t *hobj, void *object/*out*/,
HDassert(heap->obj[hobj->idx].begin);
size = heap->obj[hobj->idx].size;
p = heap->obj[hobj->idx].begin + H5HG_SIZEOF_OBJHDR(f);
+
/* Allocate a buffer for the object read in, if the user didn't give one */
if(!object && NULL == (object = H5MM_malloc(size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
@@ -693,6 +695,9 @@ done:
if(heap && H5AC_unprotect(f, dxpl_id, H5AC_GHEAP, hobj->addr, heap, H5AC__NO_FLAGS_SET)<0)
HDONE_ERROR(H5E_HEAP, H5E_PROTECT, NULL, "unable to release object header")
+ if(NULL == ret_value && NULL == orig_object && object)
+ H5MM_free(object);
+
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5HG_read() */