summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--release_docs/RELEASE.txt4
-rw-r--r--src/H5Fsuper_cache.c8
-rw-r--r--test/Makefile.am2
-rw-r--r--test/Makefile.in2
-rw-r--r--test/tfile.c61
5 files changed, 69 insertions, 8 deletions
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt
index 170e4d5..2e8a3ad 100644
--- a/release_docs/RELEASE.txt
+++ b/release_docs/RELEASE.txt
@@ -121,6 +121,10 @@ Bug Fixes since HDF5-1.8.5
Library
-------
+ - Fixed a bug where the library could generate an assertion/core dump when
+ a file that had been created with H5Pset_libver_bounds(fapl,
+ H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) but didn't have a superblock
+ extension was later reopened. (QAK - 2010/09/16 - Bug 1968)
- Fixed a bug that could occur when getting information for a new-style
group that was previously opened through a file handle that was later
closed. (NAF - 2010/09/15)
diff --git a/src/H5Fsuper_cache.c b/src/H5Fsuper_cache.c
index bffb5e0..492b29a 100644
--- a/src/H5Fsuper_cache.c
+++ b/src/H5Fsuper_cache.c
@@ -447,6 +447,8 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata)
/* Get the B-tree internal node values, etc */
if(H5P_get(c_plist, H5F_CRT_BTREE_RANK_NAME, sblock->btree_k) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "unable to get rank for btree internal nodes")
+ if(H5P_get(c_plist, H5F_CRT_SYM_LEAF_NAME, &sblock->sym_leaf_k) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "unable to get rank for btree internal nodes")
} /* end else */
/*
@@ -558,12 +560,6 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata)
if(H5P_set(c_plist, H5F_CRT_SYM_LEAF_NAME, &btreek.sym_leaf_k) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, NULL, "unable to set rank for symbol table leaf nodes")
} /* end if */
- else {
- /* No non-default v1 B-tree 'K' value info in file, use defaults */
- sblock->btree_k[H5B_CHUNK_ID] = HDF5_BTREE_CHUNK_IK_DEF;
- sblock->btree_k[H5B_SNODE_ID] = HDF5_BTREE_SNODE_IK_DEF;
- sblock->sym_leaf_k = H5F_CRT_SYM_LEAF_DEF;
- } /* end if */
/* Close superblock extension */
if(H5F_super_ext_close(f, &ext_loc) < 0)
diff --git a/test/Makefile.am b/test/Makefile.am
index d00f11a..9ef4fb3 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -107,7 +107,7 @@ CHECK_CLEANFILES+=cmpd_dset.h5 compact_dataset.h5 dataset.h5 dset_offset.h5 \
max_compact_dataset.h5 simple.h5 set_local.h5 random_chunks.h5 \
huge_chunks.h5 chunk_cache.h5 big_chunk.h5 chunk_expand.h5 \
copy_dcpl_newfile.h5 extend.h5 istore.h5 extlinks*.h5 frspace.h5 links*.h5 \
- sys_file1 tfile[1-4].h5 th5s[1-3].h5 lheap.h5 fheap.h5 ohdr.h5 \
+ sys_file1 tfile[1-5].h5 th5s[1-3].h5 lheap.h5 fheap.h5 ohdr.h5 \
stab.h5 extern_[1-3].h5 extern_[1-4][ab].raw gheap[0-4].h5 \
dt_arith[1-2] links.h5 links[0-6]*.h5 extlinks[0-15].h5 tmp \
big.data big[0-9][0-9][0-9][0-9][0-9].h5 \
diff --git a/test/Makefile.in b/test/Makefile.in
index c5769ac..0df7974 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -668,7 +668,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog cmpd_dset.h5 \
max_compact_dataset.h5 simple.h5 set_local.h5 random_chunks.h5 \
huge_chunks.h5 chunk_cache.h5 big_chunk.h5 chunk_expand.h5 \
copy_dcpl_newfile.h5 extend.h5 istore.h5 extlinks*.h5 \
- frspace.h5 links*.h5 sys_file1 tfile[1-4].h5 th5s[1-3].h5 \
+ frspace.h5 links*.h5 sys_file1 tfile[1-5].h5 th5s[1-3].h5 \
lheap.h5 fheap.h5 ohdr.h5 stab.h5 extern_[1-3].h5 \
extern_[1-4][ab].raw gheap[0-4].h5 dt_arith[1-2] links.h5 \
links[0-6]*.h5 extlinks[0-15].h5 tmp big.data \
diff --git a/test/tfile.c b/test/tfile.c
index dda5422..45fc4af 100644
--- a/test/tfile.c
+++ b/test/tfile.c
@@ -2505,6 +2505,66 @@ test_userblock_alignment(void)
/****************************************************************
**
+** test_libver_bounds():
+** Verify that a file created with "LATEST, LATEST" can be
+** opened later, with no setting. (Further testing welcome)
+**
+****************************************************************/
+static void
+test_libver_bounds(void)
+{
+ hid_t file, group; /* Handles */
+ hid_t fapl; /* File access property list */
+ herr_t ret; /* Return value */
+
+ /* Output message about test being performed */
+ MESSAGE(5, ("Testing setting library version bounds\n"));
+
+ /*
+ * Create a new file using the default properties.
+ */
+ fapl = H5Pcreate(H5P_FILE_ACCESS);
+ CHECK(fapl, FAIL, "H5Pcreate");
+
+ ret = H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST);
+ CHECK(ret, FAIL, "H5Pset_libver_bounds");
+
+ file = H5Fcreate("tfile5.h5", H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+ CHECK(file, FAIL, "H5Fcreate");
+
+ ret = H5Fclose(file);
+ CHECK(ret, FAIL, "H5Fclose");
+
+ ret = H5Pset_libver_bounds(fapl, H5F_LIBVER_EARLIEST, H5F_LIBVER_LATEST);
+ CHECK(ret, FAIL, "H5Pset_libver_bounds");
+
+ file = H5Fopen("tfile5.h5", H5F_ACC_RDWR, fapl);
+ CHECK(file, FAIL, "H5Fopen");
+
+ /*
+ * Create a group named "G1" in the file.
+ */
+ group = H5Gcreate2(file, "/G1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ CHECK(group, FAIL, "H5Gcreate");
+
+ ret = H5Gclose(group);
+ CHECK(ret, FAIL, "H5Gclose");
+
+ /*
+ * Create a group named "/G1/G3" in the file.
+ */
+ group = H5Gcreate2(file, "/G1/G3", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ CHECK(group, FAIL, "H5Gcreate");
+
+ ret = H5Gclose(group);
+ CHECK(ret, FAIL, "H5Gclose");
+
+ ret = H5Fclose(file);
+ CHECK(ret, FAIL, "H5Fclose");
+} /* test_libver_bounds() */
+
+/****************************************************************
+**
** test_file(): Main low-level file I/O test routine.
**
****************************************************************/
@@ -2538,6 +2598,7 @@ test_file(void)
test_cached_stab_info(); /* Tests that files are created with cached stab info in the superblock */
test_rw_noupdate(); /* Test to ensure that RW permissions don't write the file unless dirtied */
test_userblock_alignment(); /* Tests that files created with a userblock and alignment interact properly */
+ test_libver_bounds(); /* Test compatibility for file space management */
} /* test_file() */