From 7a272fc66038db933a4df9adbf599e54be94614c Mon Sep 17 00:00:00 2001 From: Quincey Koziol Date: Mon, 10 Jun 2002 12:07:38 -0500 Subject: [svn-r5567] Purpose: Bug fix (bug #777) Description: Current code allows a compound datatype to be inserted into itself. Solution: Check if the ID for the member is the same as the ID for the compound datatype and reject it if so. Platforms tested: FreeBSD 4.5 (sleipnir) --- src/H5T.c | 2 ++ test/dtypes.c | 3 +++ 2 files changed, 5 insertions(+) diff --git a/src/H5T.c b/src/H5T.c index 9be40cc..4a104a4 100644 --- a/src/H5T.c +++ b/src/H5T.c @@ -4315,6 +4315,8 @@ H5Tinsert(hid_t parent_id, const char *name, size_t offset, hid_t member_id) H5TRACE4("e","iszi",parent_id,name,offset,member_id); /* Check args */ + if (parent_id==member_id) + HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "can't insert compound datatype within itself"); if (H5I_DATATYPE != H5I_get_type(parent_id) || NULL == (parent = H5I_object(parent_id)) || H5T_COMPOUND != parent->type) { diff --git a/test/dtypes.c b/test/dtypes.c index 13df634..1dbd650 100644 --- a/test/dtypes.c +++ b/test/dtypes.c @@ -397,6 +397,9 @@ test_compound_1(void) /* Create the empty type */ if ((complex_id = H5Tcreate(H5T_COMPOUND, sizeof tmp))<0) goto error; + /* Attempt to add the new compound datatype as a field within itself */ + if (H5Tinsert(complex_id, "compound", 0, complex_id)>=0) goto error; + /* Add a couple fields */ if (H5Tinsert(complex_id, "real", HOFFSET(complex_t, re), H5T_NATIVE_DOUBLE)<0) goto error; -- cgit v0.12