summaryrefslogtreecommitdiffstats
path: root/src/H5Fsuper.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2009-09-08 20:15:37 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2009-09-08 20:15:37 (GMT)
commiteaf4ee3eb992809394f74e607b932482126a5b57 (patch)
tree1a0b803f84532ddf92543239009c5df1a1a43a4d /src/H5Fsuper.c
parent1cad9f47513a8819c82397371ebe25f83b9917e6 (diff)
downloadhdf5-eaf4ee3eb992809394f74e607b932482126a5b57.zip
hdf5-eaf4ee3eb992809394f74e607b932482126a5b57.tar.gz
hdf5-eaf4ee3eb992809394f74e607b932482126a5b57.tar.bz2
[svn-r17459] Description:
Correct bad interaction between non-zero userblocks with non-zero alignments. Also add some additional range checking and tests for invalid userblock sizes. Tested on: FreeBSD/32 6.3 (duty) in debug mode FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x, w/C++ & FORTRAN, in production mode Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN, w/szip filter, in production mode Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN, in production mode Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode Mac OS X/32 10.5.8 (amazon) in debug mode Mac OS X/32 10.5.8 (amazon) w/C++ & FORTRAN, w/threadsafe, in production mode
Diffstat (limited to 'src/H5Fsuper.c')
-rw-r--r--src/H5Fsuper.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/H5Fsuper.c b/src/H5Fsuper.c
index 3be8069..f26d93f 100644
--- a/src/H5Fsuper.c
+++ b/src/H5Fsuper.c
@@ -419,6 +419,14 @@ H5F_super_init(H5F_t *f, hid_t dxpl_id)
if(H5P_get(plist, H5F_CRT_USER_BLOCK_NAME, &userblock_size) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to get userblock size")
+ /* Sanity check the userblock size vs. the file's allocation alignment */
+ if(userblock_size > 0) {
+ if(userblock_size < f->shared->alignment)
+ HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "userblock size must be > file object alignment")
+ if(0 != (userblock_size % f->shared->alignment))
+ HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "userblock size must be an integral multiple of file object alignment")
+ } /* end if */
+
sblock->base_addr = userblock_size;
sblock->status_flags = 0;