mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-03-31 17:10:47 +08:00
Merging in latest from upstream (HDFFV/hdf5:refs/heads/develop)
* commit '593e4038b3ab474a47e468bb3478d4ae3a6820e6': Fix for daily test failure Fix for the compilation error from the PGI compiler. Modifications based on comments from pull request review (1) Remove unnecessary asserts (2) Add code to insert bad offset values to the test file in gen_bad_offset.c HDFFV-10188 force non-native type description HDFFV-10188 emu insists on printing non-native description Fix for HDFFV-10216 segfault in H5G_node_cmp3 with corrupt h5 file Fix H5HL_offset_into() to return error when offset exceeds heap data block size. Also fix other places that call this routine to detect error return. HDFFV-10188 fix typo HDFFV-10188 add missing copy commands HDFFV-10188 Add tests and files HDFFV-10188 enable null space test HDFFV-10188 add release note HDFFV-10188 - Check for empty string first HDFFV-10188 error on NULL dataspace
This commit is contained in:
commit
e04817b5aa
6
MANIFEST
6
MANIFEST
@ -909,6 +909,7 @@
|
||||
./test/atomic_reader.c
|
||||
./test/atomic_writer.c
|
||||
./test/bad_compound.h5
|
||||
./test/bad_offset.h5
|
||||
./test/be_data.h5
|
||||
./test/be_extlink1.h5
|
||||
./test/be_extlink2.h5
|
||||
@ -972,6 +973,7 @@
|
||||
./test/fsm_aggr_persist.h5
|
||||
./test/genall5.c
|
||||
./test/genall5.h
|
||||
./test/gen_bad_offset.c
|
||||
./test/gen_bad_ohdr.c
|
||||
./test/gen_bad_compound.c
|
||||
./test/gen_bogus.c
|
||||
@ -1714,6 +1716,9 @@
|
||||
./tools/testfiles/tgrp_comments.ls
|
||||
./tools/testfiles/tgrp_comments.ddl
|
||||
./tools/testfiles/tgrp_comments.h5
|
||||
./tools/testfiles/tgrpnullspace.h5
|
||||
./tools/testfiles/tgrpnullspace.ddl
|
||||
./tools/testfiles/tgrpnullspace.ls
|
||||
./tools/testfiles/thlink-1.ddl
|
||||
./tools/testfiles/thlink-2.ddl
|
||||
./tools/testfiles/thlink-3.ddl
|
||||
@ -1769,6 +1774,7 @@
|
||||
./tools/testfiles/tno-subset.h5
|
||||
./tools/testfiles/tno-subset.ddl
|
||||
./tools/testfiles/tnullspace.h5
|
||||
./tools/testfiles/tnullspace.h5.xml
|
||||
./tools/testfiles/tnullspace.ddl
|
||||
./tools/testfiles/tobjref.h5
|
||||
./tools/testfiles/topaque.h5
|
||||
|
@ -147,6 +147,16 @@ Bug Fixes since HDF5-1.10.1 release
|
||||
|
||||
Tools
|
||||
-----
|
||||
- h5ls
|
||||
|
||||
h5ls generated error on stack when it encountered a H5S_NULL
|
||||
dataspace.
|
||||
|
||||
Adding checks for H5S_NULL before calling H5Sis_simple (located
|
||||
in the h5tools_dump_mem function) fixed the issue.
|
||||
|
||||
(ADB - 2017/08/17, HDFFV-10188)
|
||||
|
||||
- h5dump
|
||||
|
||||
h5dump segfaulted on output of XML file.
|
||||
|
20
src/H5Gent.c
20
src/H5Gent.c
@ -541,8 +541,8 @@ herr_t
|
||||
H5G__ent_debug(const H5G_entry_t *ent, FILE *stream, int indent, int fwidth,
|
||||
const H5HL_t *heap)
|
||||
{
|
||||
const char *lval = NULL;
|
||||
int nested_indent, nested_fwidth;
|
||||
const char *lval = NULL;
|
||||
int nested_indent, nested_fwidth;
|
||||
|
||||
FUNC_ENTER_PACKAGE_NOERR
|
||||
|
||||
@ -551,14 +551,14 @@ H5G__ent_debug(const H5G_entry_t *ent, FILE *stream, int indent, int fwidth,
|
||||
nested_fwidth = MAX(0, fwidth - 3);
|
||||
|
||||
HDfprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
|
||||
"Name offset into private heap:",
|
||||
(unsigned long) (ent->name_off));
|
||||
"Name offset into private heap:",
|
||||
(unsigned long) (ent->name_off));
|
||||
|
||||
HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
|
||||
"Object header address:", ent->header);
|
||||
"Object header address:", ent->header);
|
||||
|
||||
HDfprintf(stream, "%*s%-*s ", indent, "", fwidth,
|
||||
"Cache info type:");
|
||||
"Cache info type:");
|
||||
switch(ent->type) {
|
||||
case H5G_NOTHING_CACHED:
|
||||
HDfprintf(stream, "Nothing Cached\n");
|
||||
@ -581,13 +581,13 @@ H5G__ent_debug(const H5G_entry_t *ent, FILE *stream, int indent, int fwidth,
|
||||
HDfprintf(stream, "%*s%-*s\n", indent, "", fwidth,
|
||||
"Cached information:");
|
||||
HDfprintf(stream, "%*s%-*s %lu\n", nested_indent, "", nested_fwidth,
|
||||
"Link value offset:",
|
||||
(unsigned long)(ent->cache.slink.lval_offset));
|
||||
"Link value offset:",
|
||||
(unsigned long)(ent->cache.slink.lval_offset));
|
||||
if(heap) {
|
||||
lval = (const char *)H5HL_offset_into(heap, ent->cache.slink.lval_offset);
|
||||
HDfprintf(stream, "%*s%-*s %s\n", nested_indent, "", nested_fwidth,
|
||||
"Link value:",
|
||||
lval);
|
||||
"Link value:",
|
||||
(lval == NULL) ? "" : lval);
|
||||
} /* end if */
|
||||
else
|
||||
HDfprintf(stream, "%*s%-*s\n", nested_indent, "", nested_fwidth, "Warning: Invalid heap address given, name not displayed!");
|
||||
|
@ -224,7 +224,10 @@ herr_t
|
||||
H5G__ent_to_link(H5O_link_t *lnk, const H5HL_t *heap,
|
||||
const H5G_entry_t *ent, const char *name)
|
||||
{
|
||||
FUNC_ENTER_PACKAGE_NOERR
|
||||
hbool_t dup_soft = FALSE; /* xstrdup the symbolic link name or not */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_PACKAGE
|
||||
|
||||
/* check arguments */
|
||||
HDassert(lnk);
|
||||
@ -236,18 +239,21 @@ H5G__ent_to_link(H5O_link_t *lnk, const H5HL_t *heap,
|
||||
lnk->cset = H5F_DEFAULT_CSET;
|
||||
lnk->corder = 0;
|
||||
lnk->corder_valid = FALSE; /* Creation order not valid for this link */
|
||||
lnk->name = H5MM_xstrdup(name);
|
||||
HDassert(lnk->name);
|
||||
if((lnk->name = H5MM_xstrdup(name)) == NULL)
|
||||
HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "unable to duplicate link name")
|
||||
|
||||
/* Object is a symbolic or hard link */
|
||||
if(ent->type == H5G_CACHED_SLINK) {
|
||||
const char *s; /* Pointer to link value */
|
||||
|
||||
s = (const char *)H5HL_offset_into(heap, ent->cache.slink.lval_offset);
|
||||
HDassert(s);
|
||||
if((s = (const char *)H5HL_offset_into(heap, ent->cache.slink.lval_offset)) == NULL)
|
||||
HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "unable to get symbolic link name")
|
||||
|
||||
/* Copy the link value */
|
||||
lnk->u.soft.name = H5MM_xstrdup(s);
|
||||
if((lnk->u.soft.name = H5MM_xstrdup(s)) == NULL)
|
||||
HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "unable to duplicate symbolic link name")
|
||||
|
||||
dup_soft = TRUE;
|
||||
|
||||
/* Set link type */
|
||||
lnk->type = H5L_TYPE_SOFT;
|
||||
@ -260,7 +266,14 @@ H5G__ent_to_link(H5O_link_t *lnk, const H5HL_t *heap,
|
||||
lnk->type = H5L_TYPE_HARD;
|
||||
} /* end else */
|
||||
|
||||
FUNC_LEAVE_NOAPI(SUCCEED)
|
||||
done:
|
||||
if(ret_value < 0) {
|
||||
if(lnk->name)
|
||||
H5MM_xfree(lnk->name);
|
||||
if(ent->type == H5G_CACHED_SLINK && dup_soft)
|
||||
H5MM_xfree(lnk->u.soft.name);
|
||||
}
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5G__ent_to_link() */
|
||||
|
||||
|
||||
|
771
src/H5Gnode.c
771
src/H5Gnode.c
File diff suppressed because it is too large
Load Diff
@ -707,11 +707,12 @@ done:
|
||||
static herr_t
|
||||
H5G_stab_get_name_by_idx_cb(const H5G_entry_t *ent, void *_udata)
|
||||
{
|
||||
H5G_bt_it_gnbi_t *udata = (H5G_bt_it_gnbi_t *)_udata;
|
||||
H5G_bt_it_gnbi_t *udata = (H5G_bt_it_gnbi_t *)_udata;
|
||||
size_t name_off; /* Offset of name in heap */
|
||||
const char *name; /* Pointer to name string in heap */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(ent);
|
||||
@ -719,12 +720,15 @@ H5G_stab_get_name_by_idx_cb(const H5G_entry_t *ent, void *_udata)
|
||||
|
||||
/* Get name offset in heap */
|
||||
name_off = ent->name_off;
|
||||
name = (const char *)H5HL_offset_into(udata->heap, name_off);
|
||||
HDassert(name);
|
||||
udata->name = H5MM_strdup(name);
|
||||
HDassert(udata->name);
|
||||
|
||||
FUNC_LEAVE_NOAPI(SUCCEED)
|
||||
if((name = (const char *)H5HL_offset_into(udata->heap, name_off)) == NULL)
|
||||
HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "unable to get symbol table link name")
|
||||
|
||||
if((udata->name = H5MM_strdup(name)) == NULL)
|
||||
HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "unable to duplicate symbol table link name")
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5G_stab_get_name_by_idx_cb */
|
||||
|
||||
|
||||
@ -941,8 +945,8 @@ H5G_stab_lookup_by_idx_cb(const H5G_entry_t *ent, void *_udata)
|
||||
HDassert(udata && udata->heap);
|
||||
|
||||
/* Get a pointer to the link name */
|
||||
name = (const char *)H5HL_offset_into(udata->heap, ent->name_off);
|
||||
HDassert(name);
|
||||
if((name = (const char *)H5HL_offset_into(udata->heap, ent->name_off)) == NULL)
|
||||
HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "unable to get symbol table link name")
|
||||
|
||||
/* Convert the entry to a link */
|
||||
if(H5G__ent_to_link(udata->lnk, udata->heap, ent, name) < 0)
|
||||
|
10
src/H5HL.c
10
src/H5HL.c
@ -400,18 +400,20 @@ END_FUNC(PRIV) /* end H5HL_protect() */
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(PRIV, NOERR,
|
||||
void *, NULL, -,
|
||||
BEGIN_FUNC(PRIV, ERR,
|
||||
void *, NULL, NULL,
|
||||
H5HL_offset_into(const H5HL_t *heap, size_t offset))
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(heap);
|
||||
HDassert(offset < heap->dblk_size);
|
||||
if(offset >= heap->dblk_size)
|
||||
H5E_THROW(H5E_CANTGET, "unable to offset into local heap data block");
|
||||
|
||||
ret_value = heap->dblk_image + offset;
|
||||
|
||||
CATCH
|
||||
/* No special processing on errors */
|
||||
END_FUNC(PRIV) /* end H5HL_offset_into() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5HL_unprotect
|
||||
|
48
src/H5Oefl.c
48
src/H5Oefl.c
@ -67,17 +67,17 @@ const H5O_msg_class_t H5O_MSG_EFL[1] = {{
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5O_efl_decode
|
||||
* Function: H5O_efl_decode
|
||||
*
|
||||
* Purpose: Decode an external file list message and return a pointer to
|
||||
* the message (and some other data).
|
||||
* the message (and some other data).
|
||||
*
|
||||
* Return: Success: Ptr to a new message struct.
|
||||
* Return: Success: Ptr to a new message struct.
|
||||
*
|
||||
* Failure: NULL
|
||||
* Failure: NULL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Tuesday, November 25, 1997
|
||||
* Tuesday, November 25, 1997
|
||||
*
|
||||
* Modification:
|
||||
* Raymond Lu
|
||||
@ -90,12 +90,12 @@ static void *
|
||||
H5O_efl_decode(H5F_t *f, hid_t dxpl_id, H5O_t H5_ATTR_UNUSED *open_oh,
|
||||
unsigned H5_ATTR_UNUSED mesg_flags, unsigned H5_ATTR_UNUSED *ioflags, const uint8_t *p)
|
||||
{
|
||||
H5O_efl_t *mesg = NULL;
|
||||
int version;
|
||||
const char *s = NULL;
|
||||
H5HL_t *heap;
|
||||
size_t u; /* Local index variable */
|
||||
void *ret_value = NULL; /* Return value */
|
||||
H5O_efl_t *mesg = NULL;
|
||||
int version;
|
||||
const char *s = NULL;
|
||||
H5HL_t *heap;
|
||||
size_t u; /* Local index variable */
|
||||
void *ret_value = NULL; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
@ -104,12 +104,12 @@ H5O_efl_decode(H5F_t *f, hid_t dxpl_id, H5O_t H5_ATTR_UNUSED *open_oh,
|
||||
HDassert(p);
|
||||
|
||||
if(NULL == (mesg = (H5O_efl_t *)H5MM_calloc(sizeof(H5O_efl_t))))
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
|
||||
|
||||
/* Version */
|
||||
version = *p++;
|
||||
if(version != H5O_EFL_VERSION)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "bad version number for external file list message")
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "bad version number for external file list message")
|
||||
|
||||
/* Reserved */
|
||||
p += 3;
|
||||
@ -141,24 +141,26 @@ H5O_efl_decode(H5F_t *f, hid_t dxpl_id, H5O_t H5_ATTR_UNUSED *open_oh,
|
||||
/* Decode the file list */
|
||||
mesg->slot = (H5O_efl_entry_t *)H5MM_calloc(mesg->nalloc * sizeof(H5O_efl_entry_t));
|
||||
if(NULL == mesg->slot)
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
|
||||
|
||||
if(NULL == (heap = H5HL_protect(f, dxpl_id, mesg->heap_addr, H5AC__READ_ONLY_FLAG)))
|
||||
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, NULL, "unable to read protect link value")
|
||||
for(u = 0; u < mesg->nused; u++) {
|
||||
/* Name */
|
||||
H5F_DECODE_LENGTH (f, p, mesg->slot[u].name_offset);
|
||||
/* Name */
|
||||
H5F_DECODE_LENGTH (f, p, mesg->slot[u].name_offset);
|
||||
|
||||
s = (const char *)H5HL_offset_into(heap, mesg->slot[u].name_offset);
|
||||
HDassert(s && *s);
|
||||
mesg->slot[u].name = H5MM_xstrdup (s);
|
||||
if((s = (const char *)H5HL_offset_into(heap, mesg->slot[u].name_offset)) == NULL)
|
||||
HGOTO_ERROR(H5E_SYM, H5E_CANTGET, NULL, "unable to get external file name")
|
||||
if(*s == (char)NULL)
|
||||
HGOTO_ERROR(H5E_SYM, H5E_CANTGET, NULL, "invalid external file name")
|
||||
mesg->slot[u].name = H5MM_xstrdup (s);
|
||||
HDassert(mesg->slot[u].name);
|
||||
|
||||
/* File offset */
|
||||
H5F_DECODE_LENGTH (f, p, mesg->slot[u].offset);
|
||||
/* File offset */
|
||||
H5F_DECODE_LENGTH (f, p, mesg->slot[u].offset);
|
||||
|
||||
/* Size */
|
||||
H5F_DECODE_LENGTH (f, p, mesg->slot[u].size);
|
||||
/* Size */
|
||||
H5F_DECODE_LENGTH (f, p, mesg->slot[u].size);
|
||||
} /* end for */
|
||||
|
||||
if(H5HL_unprotect(heap) < 0)
|
||||
|
@ -183,6 +183,7 @@ endforeach ()
|
||||
set (HDF5_REFERENCE_TEST_FILES
|
||||
aggr.h5
|
||||
bad_compound.h5
|
||||
bad_offset.h5
|
||||
be_data.h5
|
||||
be_extlink1.h5
|
||||
be_extlink2.h5
|
||||
@ -1336,6 +1337,7 @@ if (HDF5_BUILD_GENERATORS)
|
||||
|
||||
# generator executables
|
||||
set (H5_GENERATORS
|
||||
gen_bad_offset
|
||||
gen_bad_ohdr
|
||||
gen_bogus
|
||||
gen_cross
|
||||
|
@ -94,7 +94,7 @@ endif
|
||||
BUILD_ALL_PROGS=gen_bad_ohdr gen_bogus gen_cross gen_deflate gen_filters gen_new_array \
|
||||
gen_new_fill gen_new_group gen_new_mtime gen_new_super gen_noencoder \
|
||||
gen_nullspace gen_udlinks space_overflow gen_filespace gen_specmetaread \
|
||||
gen_sizes_lheap gen_file_image gen_plist
|
||||
gen_sizes_lheap gen_file_image gen_plist gen_bad_offset
|
||||
|
||||
if BUILD_ALL_CONDITIONAL
|
||||
noinst_PROGRAMS=$(BUILD_ALL_PROGS)
|
||||
|
BIN
test/bad_offset.h5
Normal file
BIN
test/bad_offset.h5
Normal file
Binary file not shown.
147
test/gen_bad_offset.c
Normal file
147
test/gen_bad_offset.c
Normal file
@ -0,0 +1,147 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by The HDF Group. *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the COPYING file, which can be found at the root of the source code *
|
||||
* distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. *
|
||||
* If you do not have access to either file, you may request a copy from *
|
||||
* help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*
|
||||
* Purpose: Generate an HDF5 file for testing H5FFV-10216
|
||||
*/
|
||||
#include "h5test.h"
|
||||
|
||||
#define TESTFILE "bad_offset.h5"
|
||||
#define GRP1 "group1"
|
||||
#define GRP2 "group2"
|
||||
#define DSET "dsetA"
|
||||
#define SOFT1 "soft_one"
|
||||
#define SOFT2 "soft_two"
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: main
|
||||
*
|
||||
* Generate an HDF5 file with groups, datasets and symbolic links.
|
||||
* After the file is generated, write bad offset values to
|
||||
* the heap at 3 locations in the file:
|
||||
* (A) Open the file:
|
||||
* fd = HDopen(TESTFILE, O_RDWR, 0663);
|
||||
* (B) Position the file at:
|
||||
* (1) HDlseek(fd, (HDoff_t)880, SEEK_SET);
|
||||
* "/group1/group2": replace heap offset "8" by bad offset
|
||||
* (2) HDlseek(fd, (HDoff_t)1512, SEEK_SET);
|
||||
* "/dsetA": replace name offset into private heap "72" by bad offset
|
||||
* (3) HDlseek(fd, (HDoff_t)1616, SEEK_SET);
|
||||
* /soft_one: replace link value offset in the scratch pad "32" by bad offset
|
||||
* (C) Write the bad offset value to the file for (1), (2) and (3):
|
||||
* write(fd, &val, sizeof(val));
|
||||
*
|
||||
* Note: if the groups/datasets/symbolic links are changed in the file,
|
||||
* the above locations need to be adjusted accordingly.
|
||||
*
|
||||
* Return: EXIT_SUCCESS/EXIT_FAILURE
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
hid_t fid = -1, gid1 = -1, gid2 = -1; /* File and group IDs */
|
||||
hid_t did = -1, sid = -1; /* Dataset and dataspace IDs */
|
||||
int fd = -1; /* File descriptor */
|
||||
int64_t val = 999; /* Bad offset value */
|
||||
|
||||
/* Create the test file */
|
||||
if((fid = H5Fcreate(TESTFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Create two groups */
|
||||
if((gid1 = H5Gcreate2(fid, GRP1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if((gid2 = H5Gcreate2(gid1, GRP2, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Close the groups */
|
||||
if(H5Gclose(gid1) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(H5Gclose(gid2) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Create soft links to the groups */
|
||||
if(H5Lcreate_soft("/group1", fid, SOFT1, H5P_DEFAULT, H5P_DEFAULT) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(H5Lcreate_soft("/group1/group2", fid, SOFT2, H5P_DEFAULT, H5P_DEFAULT) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Create a dataset */
|
||||
if((sid = H5Screate(H5S_SCALAR)) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if((did = H5Dcreate2(fid, DSET, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Close the dataset */
|
||||
if(H5Dclose(did) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Close the dataspace */
|
||||
if(H5Sclose(sid) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Close the file */
|
||||
if(H5Fclose(fid) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/*
|
||||
* Write bad offset values at 3 locations in the file
|
||||
*/
|
||||
|
||||
/* Open the file */
|
||||
if((fd = HDopen(TESTFILE, O_RDWR, 0663)) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Position the file for /group1/group2: replace heap offset "8" by bad offset */
|
||||
if(HDlseek(fd, (HDoff_t)880, SEEK_SET) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
/* Write the bad offset value to the file */
|
||||
if(HDwrite(fd, &val, sizeof(val)) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Position the file for /dsetA: replace name offset into private heap "72" by bad offset */
|
||||
if(HDlseek(fd, (HDoff_t)1512, SEEK_SET) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
/* Write the bad offset value to the file */
|
||||
if(HDwrite(fd, &val, sizeof(val)) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Position the file for /soft_one: replace link value offset in the scratch pad "32" by bad offset */
|
||||
if(HDlseek(fd, (HDoff_t)1616, SEEK_SET) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
/* Write the bad offset value to the file */
|
||||
if(HDwrite(fd, &val, sizeof(val)) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Close the file */
|
||||
if(HDclose(fd) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
H5Gclose(gid1);
|
||||
H5Gclose(gid2);
|
||||
H5Dclose(did);
|
||||
H5Sclose(sid);
|
||||
H5Fclose(fid);
|
||||
} H5E_END_TRY;
|
||||
|
||||
return EXIT_FAILURE;
|
||||
} /* end main() */
|
||||
|
55
test/tmisc.c
55
test/tmisc.c
@ -318,6 +318,11 @@ typedef struct
|
||||
#define MISC31_PROPNAME "misc31_prop"
|
||||
#define MISC31_DTYPENAME "dtype"
|
||||
|
||||
/* Definitions for misc. test #33 */
|
||||
/* Note that this test file is generated by "gen_bad_offset.c" */
|
||||
/* and bad offset values are written to that file for testing */
|
||||
#define MISC33_FILE "bad_offset.h5"
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
** test_misc1(): test unlinking a dataset from a group and immediately
|
||||
@ -5472,6 +5477,55 @@ test_misc32(void)
|
||||
|
||||
} /* end test_misc32() */
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
** test_misc33(): Test for H5FFV-10216
|
||||
** --verify that H5HL_offset_into() returns error if the
|
||||
** input parameter "offset" exceeds heap data block size.
|
||||
** --case (1), (2), (3) are scenarios that will traverse to the
|
||||
** the 3 locations in the file having bad offset values to
|
||||
** the heap. (See description in gen_bad_offset.c)
|
||||
**
|
||||
****************************************************************/
|
||||
static void
|
||||
test_misc33(void)
|
||||
{
|
||||
hid_t fid = -1; /* File ID */
|
||||
const char *testfile = H5_get_srcdir_filename(MISC33_FILE); /* Corrected test file name */
|
||||
H5O_info_t oinfo; /* Structure for object metadata information */
|
||||
herr_t ret; /* Generic return value */
|
||||
|
||||
/* Output message about test being performed */
|
||||
MESSAGE(5, ("Testing that bad offset into the heap returns error"));
|
||||
|
||||
/* Open the test file */
|
||||
fid = H5Fopen(testfile, H5F_ACC_RDWR, H5P_DEFAULT);
|
||||
CHECK(fid, FAIL, "H5Fopen");
|
||||
|
||||
/* Case (1) */
|
||||
H5E_BEGIN_TRY {
|
||||
ret = H5Oget_info_by_name(fid, "/soft_two", &oinfo, H5P_DEFAULT);
|
||||
} H5E_END_TRY;
|
||||
VERIFY(ret, FAIL, "H5Oget_info_by_name");
|
||||
|
||||
/* Case (2) */
|
||||
H5E_BEGIN_TRY {
|
||||
ret = H5Oget_info_by_name(fid, "/dsetA", &oinfo, H5P_DEFAULT);
|
||||
} H5E_END_TRY;
|
||||
VERIFY(ret, FAIL, "H5Oget_info_by_name");
|
||||
|
||||
/* Case (3) */
|
||||
H5E_BEGIN_TRY {
|
||||
ret = H5Oget_info_by_name(fid, "/soft_one", &oinfo, H5P_DEFAULT);
|
||||
} H5E_END_TRY;
|
||||
VERIFY(ret, FAIL, "H5Oget_info_by_name");
|
||||
|
||||
/* Close the file */
|
||||
ret = H5Fclose(fid);
|
||||
CHECK(fid, FAIL, "H5Fclose");
|
||||
|
||||
} /* end test_misc33() */
|
||||
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
@ -5520,6 +5574,7 @@ test_misc(void)
|
||||
test_misc30(); /* Exercise local heap loading bug where free lists were getting dropped */
|
||||
test_misc31(); /* Test Reentering library through deprecated routines after H5close() */
|
||||
test_misc32(); /* Test filter memory allocation functions */
|
||||
test_misc33(); /* Test to verify that H5HL_offset_into() returns error if offset exceeds heap block */
|
||||
|
||||
} /* test_misc() */
|
||||
|
||||
|
@ -164,7 +164,8 @@ haddr_t
|
||||
ref_path_table_lookup(const char *thepath)
|
||||
{
|
||||
H5O_info_t oi;
|
||||
|
||||
if((HDstrlen(thepath) == 0) || (thepath == NULL))
|
||||
return HADDR_UNDEF;
|
||||
/* Allow lookups on the root group, even though it doesn't have any link info */
|
||||
if(HDstrcmp(thepath, "/")) {
|
||||
H5L_info_t li;
|
||||
|
@ -1959,28 +1959,32 @@ xml_dump_data(hid_t obj_id, int obj_data, struct subset_t H5_ATTR_UNUSED * sset,
|
||||
H5Tclose(type);
|
||||
|
||||
space = H5Aget_space(obj_id);
|
||||
|
||||
ndims = H5Sget_simple_extent_dims(space, size, NULL);
|
||||
|
||||
for (i = 0; i < ndims; i++)
|
||||
nelmts *= size[i];
|
||||
|
||||
buf = HDmalloc((size_t)(nelmts * MAX(H5Tget_size(type), H5Tget_size(p_type))));
|
||||
HDassert(buf);
|
||||
|
||||
if (H5Aread(obj_id, p_type, buf) >= 0) {
|
||||
h5tools_context_t datactx;
|
||||
HDmemset(&datactx, 0, sizeof(datactx));
|
||||
datactx.need_prefix = TRUE;
|
||||
datactx.indent_level = ctx.indent_level;
|
||||
datactx.cur_column = ctx.cur_column;
|
||||
status = h5tools_dump_mem(rawoutstream, outputformat, &datactx, obj_id, p_type, space, buf);
|
||||
if(space == H5S_NULL || space == H5S_NO_CLASS) {
|
||||
status = SUCCEED;
|
||||
}
|
||||
/* Reclaim any VL memory, if necessary */
|
||||
if (vl_data)
|
||||
H5Dvlen_reclaim(p_type, space, H5P_DEFAULT, buf);
|
||||
else {
|
||||
ndims = H5Sget_simple_extent_dims(space, size, NULL);
|
||||
|
||||
HDfree(buf);
|
||||
for (i = 0; i < ndims; i++)
|
||||
nelmts *= size[i];
|
||||
|
||||
buf = HDmalloc((size_t)(nelmts * MAX(H5Tget_size(type), H5Tget_size(p_type))));
|
||||
HDassert(buf);
|
||||
|
||||
if (H5Aread(obj_id, p_type, buf) >= 0) {
|
||||
h5tools_context_t datactx;
|
||||
HDmemset(&datactx, 0, sizeof(datactx));
|
||||
datactx.need_prefix = TRUE;
|
||||
datactx.indent_level = ctx.indent_level;
|
||||
datactx.cur_column = ctx.cur_column;
|
||||
status = h5tools_dump_mem(rawoutstream, outputformat, &datactx, obj_id, p_type, space, buf);
|
||||
}
|
||||
/* Reclaim any VL memory, if necessary */
|
||||
if (vl_data)
|
||||
H5Dvlen_reclaim(p_type, space, H5P_DEFAULT, buf);
|
||||
|
||||
HDfree(buf);
|
||||
}
|
||||
H5Tclose(p_type);
|
||||
H5Sclose(space);
|
||||
H5Tclose(type);
|
||||
|
@ -1617,38 +1617,40 @@ list_attr(hid_t obj, const char *attr_name, const H5A_info_t H5_ATTR_UNUSED *ain
|
||||
|
||||
info = &outputformat;
|
||||
|
||||
if(hexdump_g)
|
||||
p_type = H5Tcopy(type);
|
||||
else
|
||||
p_type = H5Tget_native_type(type, H5T_DIR_DEFAULT);
|
||||
if(space_type != H5S_NULL && space_type != H5S_NO_CLASS) {
|
||||
if(hexdump_g)
|
||||
p_type = H5Tcopy(type);
|
||||
else
|
||||
p_type = H5Tget_native_type(type, H5T_DIR_DEFAULT);
|
||||
|
||||
if(p_type >= 0) {
|
||||
/* VL data special information */
|
||||
unsigned int vl_data = 0; /* contains VL datatypes */
|
||||
if(p_type >= 0) {
|
||||
/* VL data special information */
|
||||
unsigned int vl_data = 0; /* contains VL datatypes */
|
||||
|
||||
/* Check if we have VL data in the dataset's datatype */
|
||||
if (h5tools_detect_vlen(p_type) == TRUE)
|
||||
vl_data = TRUE;
|
||||
/* Check if we have VL data in the dataset's datatype */
|
||||
if (h5tools_detect_vlen(p_type) == TRUE)
|
||||
vl_data = TRUE;
|
||||
|
||||
temp_need= nelmts * MAX(H5Tget_size(type), H5Tget_size(p_type));
|
||||
HDassert(temp_need == (hsize_t)((size_t)temp_need));
|
||||
need = (size_t)temp_need;
|
||||
buf = HDmalloc(need);
|
||||
HDassert(buf);
|
||||
if(H5Aread(attr, p_type, buf) >= 0) {
|
||||
ctx.need_prefix = TRUE;
|
||||
ctx.indent_level = 2;
|
||||
ctx.cur_column = (size_t)curr_pos;
|
||||
h5tools_dump_mem(rawoutstream, info, &ctx, attr, p_type, space, buf);
|
||||
}
|
||||
temp_need= nelmts * MAX(H5Tget_size(type), H5Tget_size(p_type));
|
||||
HDassert(temp_need == (hsize_t)((size_t)temp_need));
|
||||
need = (size_t)temp_need;
|
||||
buf = HDmalloc(need);
|
||||
HDassert(buf);
|
||||
if(H5Aread(attr, p_type, buf) >= 0) {
|
||||
ctx.need_prefix = TRUE;
|
||||
ctx.indent_level = 2;
|
||||
ctx.cur_column = (size_t)curr_pos;
|
||||
h5tools_dump_mem(rawoutstream, info, &ctx, attr, p_type, space, buf);
|
||||
}
|
||||
|
||||
/* Reclaim any VL memory, if necessary */
|
||||
if (vl_data)
|
||||
H5Dvlen_reclaim(p_type, space, H5P_DEFAULT, buf);
|
||||
/* Reclaim any VL memory, if necessary */
|
||||
if (vl_data)
|
||||
H5Dvlen_reclaim(p_type, space, H5P_DEFAULT, buf);
|
||||
|
||||
HDfree(buf);
|
||||
H5Tclose(p_type);
|
||||
} /* end if */
|
||||
HDfree(buf);
|
||||
H5Tclose(p_type);
|
||||
} /* end if */
|
||||
}
|
||||
|
||||
H5Sclose(space);
|
||||
H5Tclose(type);
|
||||
|
@ -104,6 +104,7 @@
|
||||
${HDF5_TOOLS_DIR}/testfiles/tgroup-1.ddl
|
||||
${HDF5_TOOLS_DIR}/testfiles/tgroup-2.ddl
|
||||
${HDF5_TOOLS_DIR}/testfiles/tgrp_comments.ddl
|
||||
${HDF5_TOOLS_DIR}/testfiles/tgrpnullspace.ddl
|
||||
${HDF5_TOOLS_DIR}/testfiles/thlink-1.ddl
|
||||
${HDF5_TOOLS_DIR}/testfiles/thlink-2.ddl
|
||||
${HDF5_TOOLS_DIR}/testfiles/thlink-3.ddl
|
||||
@ -272,6 +273,7 @@
|
||||
${HDF5_TOOLS_DIR}/testfiles/tfvalues.h5
|
||||
${HDF5_TOOLS_DIR}/testfiles/tgroup.h5
|
||||
${HDF5_TOOLS_DIR}/testfiles/tgrp_comments.h5
|
||||
${HDF5_TOOLS_DIR}/testfiles/tgrpnullspace.h5
|
||||
${HDF5_TOOLS_DIR}/testfiles/thlink.h5
|
||||
${HDF5_TOOLS_DIR}/testfiles/thyperslab.h5
|
||||
${HDF5_TOOLS_DIR}/testfiles/tints4dims.h5
|
||||
@ -887,6 +889,8 @@
|
||||
tgroup-2.out.err
|
||||
tgrp_comments.out
|
||||
tgrp_comments.out.err
|
||||
tgrpnullspace.out
|
||||
tgrpnullspace.out.err
|
||||
thlink-1.out
|
||||
thlink-1.out.err
|
||||
thlink-2.out
|
||||
@ -1394,6 +1398,7 @@
|
||||
|
||||
# test for displaying dataset and attribute of null space
|
||||
ADD_H5_TEST (tnullspace 0 --enable-error-stack tnullspace.h5)
|
||||
ADD_H5_TEST (tgrpnullspace 0 -p --enable-error-stack tgrpnullspace.h5)
|
||||
|
||||
# test for displaying dataset and attribute of space with 0 dimension size
|
||||
ADD_H5_TEST (zerodim 0 --enable-error-stack zerodim.h5)
|
||||
|
@ -53,6 +53,7 @@
|
||||
${HDF5_TOOLS_DIR}/testfiles/test35.nc
|
||||
${HDF5_TOOLS_DIR}/testfiles/tnestedcomp.h5
|
||||
${HDF5_TOOLS_DIR}/testfiles/tnodata.h5
|
||||
${HDF5_TOOLS_DIR}/testfiles/tnullspace.h5
|
||||
${HDF5_TOOLS_DIR}/testfiles/tobjref.h5
|
||||
${HDF5_TOOLS_DIR}/testfiles/topaque.h5
|
||||
${HDF5_TOOLS_DIR}/testfiles/torderattr.h5
|
||||
@ -117,6 +118,7 @@
|
||||
${HDF5_TOOLS_DIR}/testfiles/tname-sp.h5.xml
|
||||
${HDF5_TOOLS_DIR}/testfiles/tnestedcomp.h5.xml
|
||||
${HDF5_TOOLS_DIR}/testfiles/tnodata.h5.xml
|
||||
${HDF5_TOOLS_DIR}/testfiles/tnullspace.h5.xml
|
||||
${HDF5_TOOLS_DIR}/testfiles/tobjref.h5.xml
|
||||
${HDF5_TOOLS_DIR}/testfiles/topaque.h5.xml
|
||||
${HDF5_TOOLS_DIR}/testfiles/torderattr1.h5.xml
|
||||
@ -296,6 +298,8 @@
|
||||
tnodata.h5.out.err
|
||||
tnoname.h5.out
|
||||
tnoname.h5.out.err
|
||||
tnullspace.h5.out
|
||||
tnullspace.h5.out.err
|
||||
tobjref.h5.out
|
||||
tobjref.h5.out.err
|
||||
topaque.h5.out
|
||||
@ -402,9 +406,7 @@
|
||||
ADD_XML_H5_TEST (tsaf.h5 0 tsaf.h5)
|
||||
ADD_XML_H5_TEST (tempty.h5 0 tempty.h5)
|
||||
ADD_XML_H5_TEST (tnamed_dtype_attr.h5 0 tnamed_dtype_attr.h5)
|
||||
##Test dataset and attribute of null space. Commented out:
|
||||
## wait until the XML schema is updated for null space.
|
||||
## ADD_XML_H5_TEST (tnullspace.h5 0 tnulspace.h5)
|
||||
ADD_XML_H5_TEST (tnullspace.h5 0 tnullspace.h5)
|
||||
## So is dataspace with 0 dimension size.
|
||||
## ADD_XML_H5_TEST (zerodim.h5 0 zerodim.h5)
|
||||
|
||||
|
@ -112,6 +112,7 @@
|
||||
#define FILE82 "tcompound_complex2.h5"
|
||||
#define FILE83 "tvlenstr_array.h5"
|
||||
#define FILE84 "tudfilter.h5"
|
||||
#define FILE85 "tgrpnullspace.h5"
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* prototypes
|
||||
@ -286,9 +287,9 @@ typedef struct s1_t {
|
||||
#define F64_DIM1 (F64_ARRAY_BUF_LEN / sizeof(int) + 1)
|
||||
|
||||
/* File 65 macros */
|
||||
#define STRATEGY H5F_FSPACE_STRATEGY_NONE /* File space handling strategy */
|
||||
#define THRESHOLD10 10 /* Free-space section threshold */
|
||||
#define FSPACE_PAGE_SIZE 8192 /* File space page size */
|
||||
#define STRATEGY H5F_FSPACE_STRATEGY_NONE /* File space handling strategy */
|
||||
#define THRESHOLD10 10 /* Free-space section threshold */
|
||||
#define FSPACE_PAGE_SIZE 8192 /* File space page size */
|
||||
|
||||
/* "FILE66" macros and for FILE69 */
|
||||
#define F66_XDIM 8
|
||||
@ -7041,8 +7042,8 @@ gent_extlinks(void)
|
||||
* Function: gent_fs_strategy_threshold
|
||||
*
|
||||
* Purpose: Generate a file with non-default file space strategy,
|
||||
* non-default free-space section threshold,
|
||||
* non-default file space page size.
|
||||
* non-default free-space section threshold,
|
||||
* non-default file space page size.
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void
|
||||
@ -9721,7 +9722,7 @@ static void gent_bitnopaquefields(void)
|
||||
uint32_t c;
|
||||
uint64_t d;
|
||||
} s_t;
|
||||
|
||||
|
||||
hid_t file, grp=-1, type=-1, space=-1, dset=-1;
|
||||
size_t i;
|
||||
hsize_t nelmts = F80_DIM32;
|
||||
@ -10437,6 +10438,43 @@ H5Z_filter_dynlibud(unsigned int flags, size_t cd_nelmts,
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: gent_null_space_group
|
||||
*
|
||||
* Purpose: generates dataset and attribute of null dataspace in a group
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void gent_null_space_group(void)
|
||||
{
|
||||
hid_t fid, root, group, dataset, space, attr;
|
||||
int dset_buf = 10;
|
||||
int point = 4;
|
||||
|
||||
fid = H5Fcreate(FILE85, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
root = H5Gopen2(fid, "/", H5P_DEFAULT);
|
||||
|
||||
group = H5Gcreate2(fid, "/g1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
|
||||
/* null space */
|
||||
space = H5Screate(H5S_NULL);
|
||||
|
||||
/* dataset */
|
||||
dataset = H5Dcreate2(group, "dset", H5T_STD_I32BE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
/* nothing should be written */
|
||||
H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &dset_buf);
|
||||
|
||||
/* attribute */
|
||||
attr = H5Acreate2(group, "attr", H5T_NATIVE_UINT, space, H5P_DEFAULT, H5P_DEFAULT);
|
||||
H5Awrite(attr, H5T_NATIVE_INT, &point); /* Nothing can be written */
|
||||
|
||||
H5Dclose(dataset);
|
||||
H5Aclose(attr);
|
||||
H5Gclose(group);
|
||||
H5Gclose(root);
|
||||
H5Sclose(space);
|
||||
H5Fclose(fid);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
gent_group();
|
||||
@ -10526,6 +10564,7 @@ int main(void)
|
||||
gent_bitnopaquefields();
|
||||
|
||||
gent_intsfourdims();
|
||||
gent_null_space_group();
|
||||
|
||||
gent_udfilter();
|
||||
|
||||
|
@ -132,6 +132,7 @@ $SRC_H5DUMP_TESTFILES/tfpformat.h5
|
||||
$SRC_H5DUMP_TESTFILES/tfvalues.h5
|
||||
$SRC_H5DUMP_TESTFILES/tgroup.h5
|
||||
$SRC_H5DUMP_TESTFILES/tgrp_comments.h5
|
||||
$SRC_H5DUMP_TESTFILES/tgrpnullspace.h5
|
||||
$SRC_H5DUMP_TESTFILES/thlink.h5
|
||||
$SRC_H5DUMP_TESTFILES/thyperslab.h5
|
||||
$SRC_H5DUMP_TESTFILES/tintsattrs.h5
|
||||
@ -260,6 +261,7 @@ $SRC_H5DUMP_TESTFILES/tfpformat.ddl
|
||||
$SRC_H5DUMP_TESTFILES/tgroup-1.ddl
|
||||
$SRC_H5DUMP_TESTFILES/tgroup-2.ddl
|
||||
$SRC_H5DUMP_TESTFILES/tgrp_comments.ddl
|
||||
$SRC_H5DUMP_TESTFILES/tgrpnullspace.ddl
|
||||
$SRC_H5DUMP_TESTFILES/thlink-1.ddl
|
||||
$SRC_H5DUMP_TESTFILES/thlink-2.ddl
|
||||
$SRC_H5DUMP_TESTFILES/thlink-3.ddl
|
||||
@ -1268,6 +1270,7 @@ TOOLTEST thyperslab.ddl --enable-error-stack thyperslab.h5
|
||||
|
||||
# test for displaying dataset and attribute of null space
|
||||
TOOLTEST tnullspace.ddl --enable-error-stack tnullspace.h5
|
||||
TOOLTEST tgrpnullspace.ddl -p --enable-error-stack tgrpnullspace.h5
|
||||
|
||||
# test for displaying dataset and attribute of space with 0 dimension size
|
||||
TOOLTEST zerodim.ddl --enable-error-stack zerodim.h5
|
||||
|
@ -97,6 +97,7 @@ $SRC_H5DUMP_TESTFILES/tname-sp.h5
|
||||
$SRC_H5DUMP_TESTFILES/tnamed_dtype_attr.h5
|
||||
$SRC_H5DUMP_TESTFILES/tnestedcomp.h5
|
||||
$SRC_H5DUMP_TESTFILES/tnodata.h5
|
||||
$SRC_H5DUMP_TESTFILES/tnullspace.h5
|
||||
$SRC_H5DUMP_TESTFILES/tobjref.h5
|
||||
$SRC_H5DUMP_TESTFILES/topaque.h5
|
||||
$SRC_H5DUMP_TESTFILES/torderattr.h5
|
||||
@ -162,6 +163,7 @@ $SRC_H5DUMP_TESTFILES/tname-quot.h5.xml
|
||||
$SRC_H5DUMP_TESTFILES/tname-sp.h5.xml
|
||||
$SRC_H5DUMP_TESTFILES/tnestedcomp.h5.xml
|
||||
$SRC_H5DUMP_TESTFILES/tnodata.h5.xml
|
||||
$SRC_H5DUMP_TESTFILES/tnullspace.h5.xml
|
||||
$SRC_H5DUMP_TESTFILES/tobjref.h5.xml
|
||||
$SRC_H5DUMP_TESTFILES/topaque.h5.xml
|
||||
$SRC_H5DUMP_TESTFILES/torderattr1.h5.xml
|
||||
@ -355,9 +357,7 @@ TOOLTEST tvlstr.h5.xml --xml tvlstr.h5
|
||||
TOOLTEST tsaf.h5.xml --xml tsaf.h5
|
||||
TOOLTEST tempty.h5.xml --xml tempty.h5
|
||||
TOOLTEST tnamed_dtype_attr.h5.xml --xml tnamed_dtype_attr.h5
|
||||
##Test dataset and attribute of null space. Commented out:
|
||||
## wait until the XML schema is updated for null space.
|
||||
##TOOLTEST tnullspace.h5.xml --xml tnulspace.h5
|
||||
TOOLTEST tnullspace.h5.xml --xml tnullspace.h5
|
||||
|
||||
# other options for xml
|
||||
|
||||
|
@ -33,6 +33,7 @@
|
||||
${HDF5_TOOLS_DIR}/testfiles/textlinktar.h5
|
||||
${HDF5_TOOLS_DIR}/testfiles/tgroup.h5
|
||||
${HDF5_TOOLS_DIR}/testfiles/tgrp_comments.h5
|
||||
${HDF5_TOOLS_DIR}/testfiles/tgrpnullspace.h5
|
||||
${HDF5_TOOLS_DIR}/testfiles/thlink.h5
|
||||
${HDF5_TOOLS_DIR}/testfiles/tloop.h5
|
||||
${HDF5_TOOLS_DIR}/testfiles/tnestedcomp.h5
|
||||
@ -89,6 +90,7 @@
|
||||
${HDF5_TOOLS_DIR}/testfiles/tgroup-1.ls
|
||||
${HDF5_TOOLS_DIR}/testfiles/tgroup-2.ls
|
||||
${HDF5_TOOLS_DIR}/testfiles/tgroup-3.ls
|
||||
${HDF5_TOOLS_DIR}/testfiles/tgrpnullspace.ls
|
||||
${HDF5_TOOLS_DIR}/testfiles/thlink-1.ls
|
||||
${HDF5_TOOLS_DIR}/testfiles/tloop-1.ls
|
||||
${HDF5_TOOLS_DIR}/testfiles/tmultifile.ls
|
||||
@ -241,6 +243,8 @@
|
||||
textlinksrc-7-old.out.err
|
||||
tgrp_comments.out
|
||||
tgrp_comments.out.err
|
||||
tgrpnullspace.out
|
||||
tgrpnullspace.out.err
|
||||
tsoftlinks-1.out
|
||||
tsoftlinks-1.out.err
|
||||
tsoftlinks-2.out
|
||||
@ -415,6 +419,9 @@
|
||||
# test for empty data
|
||||
ADD_H5_TEST (tempty 0 -w80 -d tempty.h5)
|
||||
|
||||
# test for displaying dataset and attribute of null space
|
||||
ADD_H5_TEST (tgrpnullspace 0 -w80 -v -S tgrpnullspace.h5)
|
||||
|
||||
# test for all dataset types written to attributes
|
||||
# enable -S for avoiding printing NATIVE types
|
||||
ADD_H5_TEST (tattr2 0 -w80 -v -S tattr2.h5)
|
||||
|
@ -80,6 +80,7 @@ $SRC_H5LS_TESTFILES/textlinksrc.h5
|
||||
$SRC_H5LS_TESTFILES/textlinktar.h5
|
||||
$SRC_H5LS_TESTFILES/tgroup.h5
|
||||
$SRC_H5LS_TESTFILES/tgrp_comments.h5
|
||||
$SRC_H5LS_TESTFILES/tgrpnullspace.h5
|
||||
$SRC_H5LS_TESTFILES/thlink.h5
|
||||
$SRC_H5LS_TESTFILES/tloop.h5
|
||||
$SRC_H5LS_TESTFILES/tnestedcomp.h5
|
||||
@ -135,6 +136,7 @@ $SRC_H5LS_TESTFILES/tgroup.ls
|
||||
$SRC_H5LS_TESTFILES/tgroup-1.ls
|
||||
$SRC_H5LS_TESTFILES/tgroup-2.ls
|
||||
$SRC_H5LS_TESTFILES/tgroup-3.ls
|
||||
$SRC_H5LS_TESTFILES/tgrpnullspace.ls
|
||||
$SRC_H5LS_TESTFILES/thlink-1.ls
|
||||
$SRC_H5LS_TESTFILES/tloop-1.ls
|
||||
$SRC_H5LS_TESTFILES/tmultifile.ls
|
||||
@ -392,6 +394,9 @@ TOOLTEST tarray1.ls 0 -w80 -r -d tarray1.h5
|
||||
# test for empty data
|
||||
TOOLTEST tempty.ls 0 -w80 -d tempty.h5
|
||||
|
||||
# test for displaying dataset and attribute of null space
|
||||
TOOLTEST tgrpnullspace.ls 0 -w80 -v -S tgrpnullspace.h5
|
||||
|
||||
# test for all dataset types written to attributes
|
||||
# enable -S for avoiding printing NATIVE types
|
||||
TOOLTEST tattr2.ls 0 -w80 -v -S tattr2.h5
|
||||
|
33
tools/testfiles/tgrpnullspace.ddl
Normal file
33
tools/testfiles/tgrpnullspace.ddl
Normal file
@ -0,0 +1,33 @@
|
||||
HDF5 "tgrpnullspace.h5" {
|
||||
GROUP "/" {
|
||||
GROUP "g1" {
|
||||
ATTRIBUTE "attr" {
|
||||
DATATYPE H5T_STD_U32LE
|
||||
DATASPACE NULL
|
||||
DATA {
|
||||
}
|
||||
}
|
||||
DATASET "dset" {
|
||||
DATATYPE H5T_STD_I32BE
|
||||
DATASPACE NULL
|
||||
STORAGE_LAYOUT {
|
||||
CONTIGUOUS
|
||||
SIZE 0
|
||||
OFFSET 18446744073709551615
|
||||
}
|
||||
FILTERS {
|
||||
NONE
|
||||
}
|
||||
FILLVALUE {
|
||||
FILL_TIME H5D_FILL_TIME_IFSET
|
||||
VALUE H5D_FILL_VALUE_DEFAULT
|
||||
}
|
||||
ALLOCATION_TIME {
|
||||
H5D_ALLOC_TIME_LATE
|
||||
}
|
||||
DATA {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
BIN
tools/testfiles/tgrpnullspace.h5
Normal file
BIN
tools/testfiles/tgrpnullspace.h5
Normal file
Binary file not shown.
7
tools/testfiles/tgrpnullspace.ls
Normal file
7
tools/testfiles/tgrpnullspace.ls
Normal file
@ -0,0 +1,7 @@
|
||||
Opened "tgrpnullspace.h5" with sec2 driver.
|
||||
g1 Group
|
||||
Attribute: attr null
|
||||
Type: 32-bit little-endian unsigned integer
|
||||
|
||||
Location: 1:800
|
||||
Links: 1
|
39
tools/testfiles/tnullspace.h5.xml
Normal file
39
tools/testfiles/tnullspace.h5.xml
Normal file
@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
|
||||
<hdf5:RootGroup OBJ-XID="xid_928" H5Path="/">
|
||||
<hdf5:Attribute Name="attr">
|
||||
<hdf5:Dataspace>
|
||||
<!-- unknown dataspace -->
|
||||
</hdf5:Dataspace>
|
||||
<hdf5:DataType>
|
||||
<hdf5:AtomicType>
|
||||
<hdf5:IntegerType ByteOrder="LE" Sign="false" Size="4" />
|
||||
</hdf5:AtomicType>
|
||||
</hdf5:DataType>
|
||||
<hdf5:Data>
|
||||
<hdf5:NoData/>
|
||||
</hdf5:Data>
|
||||
</hdf5:Attribute>
|
||||
<hdf5:Dataset Name="dset" OBJ-XID="xid_976" H5Path= "/dset" Parents="xid_928" H5ParentPaths="/">
|
||||
<hdf5:StorageLayout>
|
||||
<hdf5:ContiguousLayout/>
|
||||
</hdf5:StorageLayout>
|
||||
<hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
|
||||
<hdf5:FillValue>
|
||||
<hdf5:NoFill/>
|
||||
</hdf5:FillValue>
|
||||
</hdf5:FillValueInfo>
|
||||
<hdf5:Dataspace>
|
||||
<!-- unknown dataspace -->
|
||||
</hdf5:Dataspace>
|
||||
<hdf5:DataType>
|
||||
<hdf5:AtomicType>
|
||||
<hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
|
||||
</hdf5:AtomicType>
|
||||
</hdf5:DataType>
|
||||
<hdf5:Data>
|
||||
<hdf5:NoData/>
|
||||
</hdf5:Data>
|
||||
</hdf5:Dataset>
|
||||
</hdf5:RootGroup>
|
||||
</hdf5:HDF5-File>
|
Loading…
x
Reference in New Issue
Block a user