Skip to content

Commit

Permalink
Make H5T__free more aggressive about cleanup (#5054)
Browse files Browse the repository at this point in the history
oss-fuzz often trips over unfreed datatype memory when parsing
fuzzed files. This changes H5T__free() to use HDONE macros so
cleanup continues on errors.
  • Loading branch information
derobins authored Oct 31, 2024
1 parent 92033df commit e8257bd
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions src/H5T.c
Original file line number Diff line number Diff line change
Expand Up @@ -4133,7 +4133,8 @@ H5T__free(H5T_t *dt)
for (i = 0; i < dt->shared->u.compnd.nmembs; i++) {
dt->shared->u.compnd.memb[i].name = (char *)H5MM_xfree(dt->shared->u.compnd.memb[i].name);
if (H5T_close_real(dt->shared->u.compnd.memb[i].type) < 0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL,
/* Push errors, but keep going */
HDONE_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL,
"unable to close datatype for compound member");
}
dt->shared->u.compnd.memb = (H5T_cmemb_t *)H5MM_xfree(dt->shared->u.compnd.memb);
Expand Down Expand Up @@ -4170,12 +4171,14 @@ H5T__free(H5T_t *dt)
/* Close the parent */
assert(dt->shared->parent != dt);
if (dt->shared->parent && H5T_close_real(dt->shared->parent) < 0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL, "unable to close parent data type");
/* Push errors, but keep going */
HDONE_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL, "unable to close parent data type");
dt->shared->parent = NULL;

/* Close the owned VOL object */
if (dt->shared->owned_vol_obj && H5VL_free_object(dt->shared->owned_vol_obj) < 0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL, "unable to close owned VOL object");
/* Push errors, but keep going */
HDONE_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL, "unable to close owned VOL object");
dt->shared->owned_vol_obj = NULL;

done:
Expand Down

0 comments on commit e8257bd

Please sign in to comment.