Skip to content

Commit e8257bd

Browse files
authored
Make H5T__free more aggressive about cleanup (#5054)
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.
1 parent 92033df commit e8257bd

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

src/H5T.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4133,7 +4133,8 @@ H5T__free(H5T_t *dt)
41334133
for (i = 0; i < dt->shared->u.compnd.nmembs; i++) {
41344134
dt->shared->u.compnd.memb[i].name = (char *)H5MM_xfree(dt->shared->u.compnd.memb[i].name);
41354135
if (H5T_close_real(dt->shared->u.compnd.memb[i].type) < 0)
4136-
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL,
4136+
/* Push errors, but keep going */
4137+
HDONE_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL,
41374138
"unable to close datatype for compound member");
41384139
}
41394140
dt->shared->u.compnd.memb = (H5T_cmemb_t *)H5MM_xfree(dt->shared->u.compnd.memb);
@@ -4170,12 +4171,14 @@ H5T__free(H5T_t *dt)
41704171
/* Close the parent */
41714172
assert(dt->shared->parent != dt);
41724173
if (dt->shared->parent && H5T_close_real(dt->shared->parent) < 0)
4173-
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL, "unable to close parent data type");
4174+
/* Push errors, but keep going */
4175+
HDONE_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL, "unable to close parent data type");
41744176
dt->shared->parent = NULL;
41754177

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

41814184
done:

0 commit comments

Comments
 (0)