mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-27 02:10:55 +08:00
ca6f9e3716
* Fixes an assert in H5Pget_filter_by_id1/2 w/ out-of-range IDs Filter IDs < 0 or > H5Z_FILTER_MAX could trip an assert in the library due to missing ID range checks in H5Pget_filter_by_id1/2. The library now returns a normal error code when filter IDs are out of range. Fixes HDFFV-11286. * Committing clang-format changes Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
1718 lines
68 KiB
Plaintext
1718 lines
68 KiB
Plaintext
HDF5 version 1.13.0-7 currently under development
|
|
================================================================================
|
|
|
|
|
|
INTRODUCTION
|
|
============
|
|
|
|
This document describes the differences between this release and the previous
|
|
HDF5 release. It contains information on the platforms tested and known
|
|
problems in this release. For more details check the HISTORY*.txt files in the
|
|
HDF5 source.
|
|
|
|
Note that documentation in the links below will be updated at the time of each
|
|
final release.
|
|
|
|
Links to HDF5 documentation can be found on The HDF5 web page:
|
|
|
|
https://portal.hdfgroup.org/display/HDF5/HDF5
|
|
|
|
The official HDF5 releases can be obtained from:
|
|
|
|
https://www.hdfgroup.org/downloads/hdf5/
|
|
|
|
Changes from Release to Release and New Features in the HDF5-1.13.x release series
|
|
can be found at:
|
|
|
|
https://portal.hdfgroup.org/display/HDF5/HDF5+Application+Developer%27s+Guide
|
|
|
|
If you have any questions or comments, please send them to the HDF Help Desk:
|
|
|
|
help@hdfgroup.org
|
|
|
|
|
|
CONTENTS
|
|
========
|
|
|
|
- New Features
|
|
- Support for new platforms and languages
|
|
- Bug Fixes since HDF5-1.12.0
|
|
- Platforms Tested
|
|
- Known Problems
|
|
- CMake vs. Autotools installations
|
|
|
|
|
|
New Features
|
|
============
|
|
|
|
Configuration:
|
|
-------------
|
|
- Added new configure options to enable dimension scales APIs (H5DS*) to
|
|
use new object references with the native VOL connector (aka native HDF5
|
|
library). New references are always used for non-native terminal VOL
|
|
connectors (e.g., DAOS).
|
|
|
|
Autotools --enable-dimension-scales-with-new-ref
|
|
CMake HDF5_DIMENSION_SCALES_NEW_REF=ON
|
|
|
|
(EIP - 2021/10/25, HDFFV-11180)
|
|
|
|
- Refactored the utils folder.
|
|
|
|
Added subfolder test and moved the 'swmr_check_compat_vfd.c file'
|
|
from test into utils/test. Deleted the duplicate swmr_check_compat_vfd.c
|
|
file in hl/tools/h5watch folder. Also fixed vfd check options.
|
|
|
|
(ADB - 2021/10/18)
|
|
|
|
- Changed autotools and CMake configurations to derive both
|
|
compilation warnings-as-errors and warnings-only-warn configurations
|
|
from the same files, 'config/*/*error*'. Removed redundant files
|
|
'config/*/*noerror*'.
|
|
|
|
(DCY - 2021/09/29)
|
|
|
|
- Added new option to control the build of High-Level tools
|
|
that default ON/enabled.
|
|
|
|
Add configure options (autotools - CMake):
|
|
--enable-hltools HDF5_BUILD_HL_TOOLS
|
|
|
|
Disabling this option prevents building the gif tool which
|
|
contains the following CVEs:
|
|
HDFFV-10592 CVE-2018-17433
|
|
HDFFV-10593 CVE-2018-17436
|
|
HDFFV-11048 CVE-2020-10809
|
|
|
|
(ADB - 2021/09/16, HDFFV-11266)
|
|
|
|
- Adds C++ Autotools configuration file for Intel
|
|
|
|
* Checks for icpc as the compiler
|
|
* Sets std=c++11
|
|
* Copies most non-warning flags from intel-flags
|
|
|
|
(DER - 2021/06/02)
|
|
|
|
- Adds C++ Autotools configuration file for PGI
|
|
|
|
* Checks for pgc++ as the compiler name (was: pgCC)
|
|
* Sets -std=c++11
|
|
* Other options basically match new C options (below)
|
|
|
|
(DER - 2021/06/02)
|
|
|
|
- Updates PGI C options
|
|
|
|
* -Minform set to warn (was: inform) to suppress spurious messages
|
|
* Sets -gopt -O2 as debug options
|
|
* Sets -O4 as 'high optimization' option
|
|
* Sets -O0 as 'no optimization' option
|
|
* Removes specific settings for PGI 9 and 10
|
|
|
|
(DER - 2021/06/02)
|
|
|
|
- A C++11-compliant compiler is now required to build the C++ wrappers
|
|
|
|
CMAKE_CXX_STANDARD is now set to 11 when building with CMake and
|
|
-std=c++11 is added when building with clang/gcc via the Autotools.
|
|
|
|
(DER - 2021/05/27)
|
|
|
|
- CMake will now run the shell script tests in test/ by default
|
|
|
|
The test directory includes several shell script tests that previously
|
|
were not run by CMake. These are now run by default. TEST_SHELL_SCRIPTS
|
|
has been set to ON and SH_PROGRAM has been set to bash (some test
|
|
scripts use bash-isms). Platforms without bash (e.g., Windows) will
|
|
ignore the script tests.
|
|
|
|
(DER - 2021/05/23)
|
|
|
|
- Removed unused HDF5_ENABLE_HSIZET option from CMake
|
|
|
|
This has been unused for some time and has no effect.
|
|
|
|
(DER - 2021/05/23)
|
|
|
|
- CMake no longer builds the C++ library by default
|
|
|
|
HDF5_BUILD_CPP_LIB now defaults to OFF, which is in line with the
|
|
Autotools build defaults.
|
|
|
|
(DER - 2021/04/20)
|
|
|
|
- Removal of pre-VS2015 work-arounds
|
|
|
|
HDF5 now requires Visual Studio 2015 or greater, so old work-around
|
|
code and definitions have been removed, including:
|
|
|
|
* <inttypes.h>
|
|
* snprintf and vsnprintf
|
|
* llround, llroundf, lround, lroundf, round, roundf
|
|
* strtoll and strtoull
|
|
* va_copy
|
|
* struct timespec
|
|
|
|
(DER - 2021/03/22)
|
|
|
|
- Add CMake variable HDF5_LIB_INFIX
|
|
|
|
This infix is added to all library names after 'hdf5'.
|
|
e.g. the infix '_openmpi' results in the library name 'libhdf5_openmpi.so'
|
|
This name is used in packages on debian based systems.
|
|
(see https://packages.debian.org/jessie/amd64/libhdf5-openmpi-8/filelist)
|
|
|
|
(barcode - 2021/03/22)
|
|
|
|
- On macOS, Universal Binaries can now be built, allowing native execution on
|
|
both Intel and Apple Silicon (ARM) based Macs.
|
|
|
|
To do so, set CMAKE_OSX_ARCHITECTURES="x86_64;arm64"
|
|
|
|
(SAM - 2021/02/07, github-311)
|
|
|
|
- Added a configure-time option to control certain compiler warnings
|
|
diagnostics
|
|
|
|
A new configure-time option was added that allows some compiler warnings
|
|
diagnostics to have the default operation. This is mainly intended for
|
|
library developers and currently only works for gcc 10 and above. The
|
|
diagnostics flags apply to C, C++ and Fortran compilers and will appear
|
|
in "H5 C Flags", H5 C++ Flags" and H5 Fortran Flags, respectively. They
|
|
will NOT be exported to h5cc, etc.
|
|
|
|
The default is OFF, which will disable the warnings URL and color attributes
|
|
for the warnings output. ON will not add the flags and allow default behavior.
|
|
|
|
Autotools: --enable-diags
|
|
|
|
CMake: HDF5_ENABLE_BUILD_DIAGS
|
|
|
|
(ADB - 2021/02/05, HDFFV-11213)
|
|
|
|
- CMake option to build the HDF filter plugins project as an external project
|
|
|
|
The HDF filter plugins project is a collection of registered compression
|
|
filters that can be dynamically loaded when needed to access data stored
|
|
in a hdf5 file. This CMake-only option allows the plugins to be built and
|
|
distributed with the hdf5 library and tools. Like the options for szip and
|
|
zlib, either a tgz file or a git repository can be specified for the source.
|
|
|
|
The option was refactored to use the CMake FetchContent process. This allows
|
|
more control over the filter targets, but required external project command
|
|
options to be moved to a CMake include file, HDF5PluginCache.cmake. Also
|
|
enabled the filter examples to be used as tests for operation of the
|
|
filter plugins.
|
|
|
|
(ADB - 2020/12/10, OESS-98)
|
|
|
|
- FreeBSD Autotools configuration now defaults to 'cc' and 'c++' compilers
|
|
|
|
On FreeBSD, the autotools defaulted to 'gcc' as the C compiler and did
|
|
not process C++ options. Since FreeBSD 10, the default compiler has
|
|
been clang (via 'cc').
|
|
|
|
The default compilers have been set to 'cc' for C and 'c++' for C++,
|
|
which will pick up clang and clang++ respectively on FreeBSD 10+.
|
|
Additionally, clang options are now set correctly for both C and C++
|
|
and g++ options will now be set if that compiler is being used (an
|
|
omission from the former functionality).
|
|
|
|
(DER - 2020/11/28, HDFFV-11193)
|
|
|
|
- Fixed POSIX problems when building w/ gcc on Solaris
|
|
|
|
When building on Solaris using gcc, the POSIX symbols were not
|
|
being set correctly, which could lead to issues like clock_gettime()
|
|
not being found.
|
|
|
|
The standard is now set to gnu99 when building with gcc on Solaris,
|
|
which allows POSIX things to be #defined and linked correctly. This
|
|
differs slightly from the gcc norm, where we set the standard to c99
|
|
and manually set POSIX #define symbols.
|
|
|
|
(DER - 2020/11/25, HDFFV-11191)
|
|
|
|
- Added a configure-time option to consider certain compiler warnings
|
|
as errors
|
|
|
|
A new configure-time option was added that converts some compiler warnings
|
|
to errors. This is mainly intended for library developers and currently
|
|
only works for gcc and clang. The warnings that are considered errors
|
|
will appear in the generated libhdf5.settings file. These warnings apply
|
|
to C and C++ code and will appear in "H5 C Flags" and H5 C++ Flags",
|
|
respectively. They will NOT be exported to h5cc, etc.
|
|
|
|
The default is OFF. Building with this option may fail when compiling
|
|
on operating systems and with compiler versions not commonly used by
|
|
the library developers. Compilation may also fail when headers not
|
|
under the control of the library developers (e.g., mpi.h, hdfs.h) raise
|
|
warnings.
|
|
|
|
Autotools: --enable-warnings-as-errors
|
|
|
|
CMake: HDF5_ENABLE_WARNINGS_AS_ERRORS
|
|
|
|
(DER - 2020/11/23, HDFFV-11189)
|
|
|
|
- Autotools and CMake target added to produce doxygen generated documentation
|
|
|
|
The default is OFF or disabled.
|
|
Autoconf option is '--enable-doxygen'
|
|
autotools make target is 'doxygen' and will build all doxygen targets
|
|
CMake configure option is 'HDF5_BUILD_DOC'.
|
|
CMake target is 'doxygen' for all available doxygen targets
|
|
CMake target is 'hdf5lib_doc' for the src subdirectory
|
|
|
|
(ADB - 2020/11/03)
|
|
|
|
- CMake option to use MSVC naming conventions with MinGW
|
|
|
|
HDF5_MSVC_NAMING_CONVENTION option enable to use MSVC naming conventions
|
|
when using a MinGW toolchain
|
|
|
|
(xan - 2020/10/30)
|
|
|
|
- CMake option to statically link gcc libs with MinGW
|
|
|
|
HDF5_MINGW_STATIC_GCC_LIBS allows to statically link libg/libstdc++
|
|
with the MinGW toolchain
|
|
|
|
(xan - 2020/10/30)
|
|
|
|
- CMake option to build the HDF filter plugins project as an external project
|
|
|
|
The HDF filter plugins project is a collection of registered compression
|
|
filters that can be dynamically loaded when needed to access data stored
|
|
in a hdf5 file. This CMake-only option allows the plugins to be built and
|
|
distributed with the hdf5 library and tools. Like the options for szip and
|
|
zlib, either a tgz file or a git repository can be specified for the source.
|
|
|
|
The necessary options are (see the INSTALL_CMake.txt file):
|
|
HDF5_ENABLE_PLUGIN_SUPPORT
|
|
PLUGIN_TGZ_NAME or PLUGIN_GIT_URL
|
|
There are more options necessary for various filters and the plugin project
|
|
documents should be referenced.
|
|
|
|
(ADB - 2020/09/27, OESS-98)
|
|
|
|
- Added CMake option to format source files
|
|
|
|
HDF5_ENABLE_FORMATTERS option will enable creation of targets using the
|
|
pattern - HDF5_*_SRC_FORMAT - where * corresponds to the source folder
|
|
or tool folder. All sources can be formatted by executing the format target;
|
|
make format
|
|
|
|
(ADB - 2020/08/24)
|
|
|
|
- Add file locking configure and CMake options
|
|
|
|
HDF5 1.10.0 introduced a file locking scheme, primarily to help
|
|
enforce SWMR setup. Formerly, the only user-level control of the scheme
|
|
was via the HDF5_USE_FILE_LOCKING environment variable.
|
|
|
|
This change introduces configure-time options that control whether
|
|
or not file locking will be used and whether or not the library
|
|
ignores errors when locking has been disabled on the file system
|
|
(useful on some HPC Lustre installations).
|
|
|
|
In both the Autotools and CMake, the settings have the effect of changing
|
|
the default property list settings (see the H5Pset/get_file_locking()
|
|
entry, below).
|
|
|
|
The yes/no/best-effort file locking configure setting has also been
|
|
added to the libhdf5.settings file.
|
|
|
|
Autotools:
|
|
|
|
An --enable-file-locking=(yes|no|best-effort) option has been added.
|
|
|
|
yes: Use file locking.
|
|
no: Do not use file locking.
|
|
best-effort: Use file locking and ignore "disabled" errors.
|
|
|
|
CMake:
|
|
|
|
Two self-explanatory options have been added:
|
|
|
|
HDF5_USE_FILE_LOCKING
|
|
HDF5_IGNORE_DISABLED_FILE_LOCKS
|
|
|
|
Setting both of these to ON is the equivalent to the Autotools'
|
|
best-effort setting.
|
|
|
|
NOTE:
|
|
The precedence order of the various file locking control mechanisms is:
|
|
|
|
1) HDF5_USE_FILE_LOCKING environment variable (highest)
|
|
|
|
2) H5Pset_file_locking()
|
|
|
|
3) configure/CMake options (which set the property list defaults)
|
|
|
|
4) library defaults (currently best-effort)
|
|
|
|
(DER - 2020/07/30, HDFFV-11092)
|
|
|
|
- CMake option to link the generated Fortran MOD files into the include
|
|
directory.
|
|
|
|
The Fortran generation of MOD files by a Fortran compile can produce
|
|
different binary files between SHARED and STATIC compiles with different
|
|
compilers and/or different platforms. Note that it has been found that
|
|
different versions of Fortran compilers will produce incompatible MOD
|
|
files. Currently, CMake will locate these MOD files in subfolders of
|
|
the include directory and add that path to the Fortran library target
|
|
in the CMake config file, which can be used by the CMake find library
|
|
process. For other build systems using the binary from a CMake install,
|
|
a new CMake configuration can be used to copy the pre-chosen version
|
|
of the Fortran MOD files into the install include directory.
|
|
|
|
The default will depend on the configuration of
|
|
BUILD_STATIC_LIBS and BUILD_SHARED_LIBS:
|
|
YES YES Default to SHARED
|
|
YES NO Default to STATIC
|
|
NO YES Default to SHARED
|
|
NO NO Default to SHARED
|
|
The defaults can be overridden by setting the config option
|
|
HDF5_INSTALL_MOD_FORTRAN to one of NO, SHARED, or STATIC
|
|
|
|
(ADB - 2020/07/09, HDFFV-11116)
|
|
|
|
- CMake option to use AEC (open source SZip) library instead of SZip
|
|
|
|
The open source AEC library is a replacement library for SZip. In
|
|
order to use it for hdf5 the libaec CMake source was changed to add
|
|
"-fPIC" and exclude test files. Autotools does not build the
|
|
compression libraries within hdf5 builds. New option USE_LIBAEC is
|
|
required to compensate for the different files produced by AEC build.
|
|
|
|
(ADB - 2020/04/22, OESS-65)
|
|
|
|
- CMake ConfigureChecks.cmake file now uses CHECK_STRUCT_HAS_MEMBER
|
|
|
|
Some handcrafted tests in HDFTests.c has been removed and the CMake
|
|
CHECK_STRUCT_HAS_MEMBER module has been used.
|
|
|
|
(ADB - 2020/03/24, TRILAB-24)
|
|
|
|
- Both build systems use same set of warnings flags
|
|
|
|
GNU C, C++ and gfortran warnings flags were moved to files in a config
|
|
sub-folder named gnu-warnings. Flags that only are available for a specific
|
|
version of the compiler are in files named with that version.
|
|
Clang C warnings flags were moved to files in a config sub-folder
|
|
named clang-warnings.
|
|
Intel C, Fortran warnings flags were moved to files in a config sub-folder
|
|
named intel-warnings.
|
|
|
|
There are flags in named "error-xxx" files with warnings that may
|
|
be promoted to errors. Some source files may still need fixes.
|
|
|
|
There are also pairs of files named "developer-xxx" and "no-developer-xxx"
|
|
that are chosen by the CMake option:HDF5_ENABLE_DEV_WARNINGS or the
|
|
configure option:--enable-developer-warnings.
|
|
|
|
In addition, CMake no longer applies these warnings for examples.
|
|
|
|
(ADB - 2020/03/24, TRILAB-192)
|
|
|
|
- Added test script for file size compare
|
|
|
|
If CMake minimum version is at least 3.14, the fileCompareTest.cmake
|
|
script will compare file sizes.
|
|
|
|
(ADB - 2020/02/24, HDFFV-11036)
|
|
|
|
- Update CMake minimum version to 3.12
|
|
|
|
Updated CMake minimum version to 3.12 and added version checks
|
|
for Windows features.
|
|
|
|
(ADB - 2020/02/05, TRILABS-142)
|
|
|
|
- Fixed CMake include properties for Fortran libraries
|
|
|
|
Corrected the library properties for Fortran to use the
|
|
correct path for the Fortran module files.
|
|
|
|
(ADB - 2020/02/04, HDFFV-11012)
|
|
|
|
- Added common warnings files for gnu and intel
|
|
|
|
Added warnings files to use one common set of flags
|
|
during configure for both autotools and CMake build
|
|
systems. The initial implementation only affects a
|
|
general set of flags for gnu and intel compilers.
|
|
|
|
(ADB - 2020/01/17)
|
|
|
|
- Added new options to CMake for control of testing
|
|
|
|
Added CMake options (default ON);
|
|
HDF5_TEST_SERIAL AND/OR HDF5_TEST_PARALLEL
|
|
combined with:
|
|
HDF5_TEST_TOOLS
|
|
HDF5_TEST_EXAMPLES
|
|
HDF5_TEST_SWMR
|
|
HDF5_TEST_FORTRAN
|
|
HDF5_TEST_CPP
|
|
HDF5_TEST_JAVA
|
|
|
|
(ADB - 2020/01/15, HDFFV-11001)
|
|
|
|
- Added Clang sanitizers to CMake for analyzer support if compiler is clang.
|
|
|
|
Added CMake code and files to execute the Clang sanitizers if
|
|
HDF5_ENABLE_SANITIZERS is enabled and the USE_SANITIZER option
|
|
is set to one of the following:
|
|
Address
|
|
Memory
|
|
MemoryWithOrigins
|
|
Undefined
|
|
Thread
|
|
Leak
|
|
'Address;Undefined'
|
|
|
|
(ADB - 2019/12/12, TRILAB-135)
|
|
|
|
- Update CMake for VS2019 support
|
|
|
|
CMake added support for VS2019 in version 3.15. Changes to the CMake
|
|
generator setting required changes to scripts. Also updated version
|
|
references in CMake files as necessary.
|
|
|
|
(ADB - 2019/11/18, HDFFV-10962)
|
|
|
|
- Update CMake options to match new autotools options
|
|
|
|
Add configure options (autotools - CMake):
|
|
enable-asserts HDF5_ENABLE_ASSERTS
|
|
enable-symbols HDF5_ENABLE_SYMBOLS
|
|
enable-profiling HDF5_ENABLE_PROFILING
|
|
enable-optimization HDF5_ENABLE_OPTIMIZATION
|
|
In addition NDEBUG is no longer forced defined and relies on the CMake
|
|
process.
|
|
|
|
(ADB - 2019/10/07, HDFFV-100901, HDFFV-10637, TRILAB-97)
|
|
|
|
|
|
Library:
|
|
--------
|
|
- Adds new file driver-level memory copy operation for
|
|
"ctl" callback and updates compact dataset I/O routines
|
|
to utilize it
|
|
|
|
When accessing an HDF5 file with a file driver that uses
|
|
memory allocated in special ways (e.g., without standard
|
|
library's `malloc`), a crash could be observed when HDF5
|
|
tries to perform `memcpy` operations on such a memory
|
|
region.
|
|
|
|
These changes add a new H5FD_FEAT_MEMMANAGE VFD feature
|
|
flag, which, if specified as supported by a VFD, will
|
|
inform HDF5 that the VFD either uses special memory
|
|
management routines or wishes to perform memory management
|
|
in a specific way. Therefore, this flag instructs HDF5 to
|
|
ask the file driver to perform memory management for
|
|
certain operations.
|
|
|
|
These changes also introduce a new "ctl" callback
|
|
operation identified by the H5FD_CTL__MEM_COPY op code.
|
|
This operation simply asks a VFD to perform a memory copy.
|
|
The arguments to this operation are passed to the "ctl"
|
|
callback's "input" parameter as a pointer to a struct
|
|
defined as:
|
|
|
|
struct H5FD_ctl_memcpy_args_t {
|
|
void * dstbuf; /**< Destination buffer */
|
|
hsize_t dst_off; /**< Offset within destination buffer */
|
|
const void *srcbuf; /**< Source buffer */
|
|
hsize_t src_off; /**< Offset within source buffer */
|
|
size_t len; /**< Length of data to copy from source buffer */
|
|
} H5FD_ctl_memcpy_args_t;
|
|
|
|
Further, HDF5's compact dataset I/O routines were
|
|
identified as a problematic area that could cause a crash
|
|
for VFDs that make use of special memory management. Those
|
|
I/O routines were therefore updated to make use of this new
|
|
"ctl" callback operation in order to ask the underlying
|
|
file driver to correctly handle memory copies.
|
|
|
|
(JTH - 2021/09/28)
|
|
|
|
- Adds new "ctl" callback to VFD H5FD_class_t structure
|
|
with the following prototype:
|
|
|
|
herr_t (*ctl)(H5FD_t *file, uint64_t op_code,
|
|
uint64_t flags, const void *input,
|
|
void **output);
|
|
|
|
This newly-added "ctl" callback allows Virtual File
|
|
Drivers to intercept and handle arbitary operations
|
|
identified by an operation code. Its parameters are
|
|
as follows:
|
|
|
|
`file` [in] - A pointer to the file to be operated on
|
|
`op_code` [in] - The operation code identifying the
|
|
operation to be performed
|
|
`flags` [in] - Flags governing the behavior of the
|
|
operation performed (see H5FDpublic.h
|
|
for a list of valid flags)
|
|
`input` [in] - A pointer to arguments passed to the
|
|
VFD performing the operation
|
|
`output` [out] - A pointer for the receiving VFD to
|
|
use for output from the operation
|
|
|
|
(JRM - 2021/08/16)
|
|
|
|
- Change how the release part of version, in major.minor.release is checked
|
|
for compatibility
|
|
|
|
The HDF5 library uses a function, H5check_version, to check that
|
|
the version defined in the header files, which is used to compile an
|
|
application is compatible with the version codified in the library, which
|
|
the application loads at runtime. This previously required an exact match
|
|
or the library would print a warning, dump the build settings and then
|
|
abort or continue. An environment variable controlled the logic.
|
|
|
|
Now the function first checks that the library release version, in
|
|
major.minor.release, is not older than the version in the headers.
|
|
Secondly, if the release version is different, it checks if either
|
|
the library version or the header version is in the exception list, in
|
|
which case the release part of version, in major.minor.release, must
|
|
be exact. An environment variable still controls the logic.
|
|
|
|
(ADB - 2021/07/27)
|
|
|
|
- gcc warning suppression macros were moved out of H5public.h
|
|
|
|
The HDF5 library uses a set of macros to suppress warnings on gcc.
|
|
These warnings were originally located in H5public.h so that the
|
|
multi VFD (which only uses public headers) could also make use of them
|
|
but internal macros should not be publicly exposed like this.
|
|
|
|
These macros have now been moved to H5private.h. Pending future multi
|
|
VFD refactoring, the macros have been duplicated in H5FDmulti.c to
|
|
suppress the format string warnings there.
|
|
|
|
(DER - 2021/06/03)
|
|
|
|
- H5Gcreate1() now rejects size_hint parameters larger than UINT32_MAX
|
|
|
|
The size_hint value is ultimately stored in a uint32_t struct field,
|
|
so specifying a value larger than this on a 64-bit machine can cause
|
|
undefined behavior including crashing the system.
|
|
|
|
The documentation for this API call was also incorrect, stating that
|
|
passing a negative value would cause the library to use a default
|
|
value. Instead, passing a "negative" value actually passes a very large
|
|
value, which is probably not what the user intends and can cause
|
|
crashes on 64-bit systems.
|
|
|
|
The Doxygen documentation has been updated and passing values larger
|
|
than UINT32_MAX for size_hint will now produce a normal HDF5 error.
|
|
|
|
(DER - 2021/04/29, HDFFV-11241)
|
|
|
|
|
|
- H5Pset_fapl_log() no longer crashes when passed an invalid fapl ID
|
|
|
|
When passed an invalid fapl ID, H5Pset_fapl_log() would usually
|
|
segfault when attempting to free an uninitialized pointer in the error
|
|
handling code. This behavior is more common in release builds or
|
|
when the memory sanitization checks were not selected as a build
|
|
option.
|
|
|
|
The pointer is now correctly initialized and the API call now
|
|
produces a normal HDF5 error when fed an invalid fapl ID.
|
|
|
|
(DER - 2021/04/28, HDFFV-11240)
|
|
|
|
- Fixes a segfault when H5Pset_mdc_log_options() is called multiple times
|
|
|
|
The call incorrectly attempts to free an internal copy of the previous
|
|
log location string, which causes a segfault. This only happens
|
|
when the call is invoked multiple times on the same property list.
|
|
On the first call to a given fapl, the log location is set to NULL so
|
|
the segfault does not occur.
|
|
|
|
The string is now handled properly and the segfault no longer occurs.
|
|
|
|
(DER - 2021/04/27, HDFFV-11239)
|
|
|
|
- HSYS_GOTO_ERROR now emits the results of GetLastError() on Windows
|
|
|
|
HSYS_GOTO_ERROR is an internal macro that is used to produce error
|
|
messages when system calls fail. These strings include errno and the
|
|
the associated strerror() value, which are not particularly useful
|
|
when a Win32 API call fails.
|
|
|
|
On Windows, this macro has been updated to include the result of
|
|
GetLastError(). When a system call fails on Windows, usually only
|
|
one of errno and GetLastError() will be useful, however we emit both
|
|
for the user to parse. The Windows error message is not emitted as
|
|
it would be awkward to free the FormatMessage() buffer given the
|
|
existing HDF5 error framework. Users will have to look up the error
|
|
codes in MSDN.
|
|
|
|
The format string on Windows has been changed from:
|
|
|
|
"%s, errno = %d, error message = '%s'"
|
|
|
|
to:
|
|
|
|
"%s, errno = %d, error message = '%s', Win32 GetLastError() = %"PRIu32""
|
|
|
|
for those inclined to parse it for error values.
|
|
|
|
(DER - 2021/03/21)
|
|
|
|
- File locking now works on Windows
|
|
|
|
Since version 1.10.0, the HDF5 library has used a file locking scheme
|
|
to help enforce one reader at a time accessing an HDF5 file, which can
|
|
be helpful when setting up readers and writers to use the single-
|
|
writer/multiple-readers (SWMR) access pattern.
|
|
|
|
In the past, this was only functional on POSIX systems where flock() or
|
|
fcntl() were present. Windows used a no-op stub that always succeeded.
|
|
|
|
HDF5 now uses LockFileEx() and UnlockFileEx() to lock the file using the
|
|
same scheme as POSIX systems. We lock the entire file when we set up the
|
|
locks (by passing DWORDMAX as both size parameters to LockFileEx()).
|
|
|
|
(DER - 2021/03/19, HDFFV-10191)
|
|
|
|
- H5Epush_ret() now requires a trailing semicolon
|
|
|
|
H5Epush_ret() is a function-like macro that has been changed to
|
|
contain a `do {} while(0)` loop. Consequently, a trailing semicolon
|
|
is now required to end the `while` statement. Previously, a trailing
|
|
semi would work, but was not mandatory. This change was made to allow
|
|
clang-format to correctly format the source code.
|
|
|
|
(SAM - 2021/03/03)
|
|
|
|
- Improved performance of H5Sget_select_elem_pointlist
|
|
|
|
Modified library to cache the point after the last block of points
|
|
retrieved by H5Sget_select_elem_pointlist, so a subsequent call to the
|
|
same function to retrieve the next block of points from the list can
|
|
proceed immediately without needing to iterate over the point list.
|
|
|
|
(NAF - 2021/01/19)
|
|
|
|
- Replaced H5E_ATOM with H5E_ID in H5Epubgen.h
|
|
|
|
The term "atom" is archaic and not in line with current HDF5 library
|
|
terminology, which uses "ID" instead. "Atom" has mostly been purged
|
|
from the library internals and this change removes H5E_ATOM from
|
|
the H5Epubgen.h (exposed via H5Epublic.h) and replaces it with
|
|
H5E_ID.
|
|
|
|
(DER - 2020/11/24, HDFFV-11190)
|
|
|
|
- Add a new public function H5Ssel_iter_reset
|
|
|
|
This function resets a dataspace selection iterator back to an
|
|
initial state so that it may be used for iteration once more.
|
|
This can be useful when needing to iterate over a selection
|
|
multiple times without having to repeatedly create/destroy
|
|
a selection iterator for that dataspace selection.
|
|
|
|
(JTH - 2020/09/18)
|
|
|
|
- Remove HDFS VFD stubs
|
|
|
|
The original implementation of the HDFS VFD included non-functional
|
|
versions of the following public API calls when the HDFS VFD is
|
|
not built as a part of the HDF5 library:
|
|
|
|
* H5FD_hdfs_init()
|
|
* H5Pget_fapl_hdfs()
|
|
* H5Pset_fapl_hdfs()
|
|
|
|
They will remain present in HDF5 1.10 and HDF5 1.12 releases
|
|
for binary compatibility purposes but have been removed as of 1.14.0.
|
|
|
|
Note that this has nothing to do with the real HDFS VFD API calls
|
|
that are fully functional when the HDFS VFD is configured and built.
|
|
|
|
We simply changed:
|
|
|
|
#ifdef LIBHDFS
|
|
<real API call>
|
|
#else
|
|
<useless stub>
|
|
#endif
|
|
|
|
to:
|
|
|
|
#ifdef LIBHDFS
|
|
<real API call>
|
|
#endif
|
|
|
|
Which is how the other optional VFDs are handled.
|
|
|
|
(DER - 2020/08/27)
|
|
|
|
- Add Mirror VFD
|
|
|
|
Use TCP/IP sockets to perform write-only (W/O) file I/O on a remote
|
|
machine. Must be used in conjunction with the Splitter VFD.
|
|
|
|
(JOS - 2020/03/13, TBD)
|
|
|
|
- Add Splitter VFD
|
|
|
|
Maintain separate R/W and W/O channels for "concurrent" file writes
|
|
to two files using a single HDF5 file handle.
|
|
|
|
(JOS - 2020/03/13, TBD)
|
|
|
|
- Refactored public exposure of haddr_t type in favor of "object tokens"
|
|
|
|
To better accommodate HDF5 VOL connectors where "object addresses in a file"
|
|
may not make much sense, the following changes were made to the library:
|
|
|
|
* Introduced new H5O_token_t "object token" type, which represents a
|
|
unique and permanent identifier for referencing an HDF5 object within
|
|
a container; these "object tokens" are meant to replace object addresses.
|
|
Along with the new type, a new H5Oopen_by_token API call was introduced
|
|
to open an object by a token, similar to how object addresses were
|
|
previously used with H5Oopen_by_addr.
|
|
|
|
* Introduced new H5Lget_info2, H5Lget_info_by_idx2, H5Literate2, H5Literate_by_name2,
|
|
H5Lvisit2 and H5Lvisit_by_name2 API calls, along with their associated H5L_info2_t
|
|
struct and H5L_iterate2_t callback function, which work with the newly-introduced
|
|
object tokens, instead of object addresses. The original functions have been
|
|
renamed to version 1 functions and are deprecated in favor of the new version 2
|
|
functions. The H5L_info_t and H5L_iterate_t types have been renamed to version 1
|
|
types and are now deprecated in favor of their version 2 counterparts. For each of
|
|
the functions and types, compatibility macros take place of the original symbols.
|
|
|
|
* Introduced new H5Oget_info3, H5Oget_info_by_name3, H5Oget_info_by_idx3,
|
|
H5Ovisit3 and H5Ovisit_by_name3 API calls, along with their associated H5O_info2_t
|
|
struct and H5O_iterate2_t callback function, which work with the newly-introduced
|
|
object tokens, instead of object addresses. The version 2 functions are now
|
|
deprecated in favor of the version 3 functions. The H5O_info_t and H5O_iterate_t
|
|
types have been renamed to version 1 types and are now deprecated in favor of their
|
|
version 2 counterparts. For each, compatibility macros take place of the original
|
|
symbols.
|
|
|
|
* Introduced new H5Oget_native_info, H5Oget_native_info_by_name and
|
|
H5Oget_native_info_by_idx API calls, along with their associated H5O_native_info_t
|
|
struct, which are used to retrieve the native HDF5 file format-specific information
|
|
about an object. This information (such as object header info and B-tree/heap info)
|
|
has been removed from the new H5O_info2_t struct so that the more generic
|
|
H5Oget_info(_by_name/_by_idx)3 routines will not try to retrieve it for non-native
|
|
VOL connectors.
|
|
|
|
* Added new H5Otoken_cmp, H5Otoken_to_str and H5Otoken_from_str routines to compare
|
|
two object tokens, convert an object token into a nicely-readable string format and
|
|
to convert an object token string back into a real object token, respectively.
|
|
|
|
(DER, QAK, JTH - 2020/01/16)
|
|
|
|
- Add new public function H5Sselect_adjust.
|
|
|
|
This function shifts a dataspace selection by a specified logical offset
|
|
within the dataspace extent. This can be useful for VOL developers to
|
|
implement chunked datasets.
|
|
|
|
(NAF - 2019/11/18)
|
|
|
|
- Add new public function H5Sselect_project_intersection.
|
|
|
|
This function computes the intersection between two dataspace selections
|
|
and projects that intersection into a third selection. This can be useful
|
|
for VOL developers to implement chunked or virtual datasets.
|
|
|
|
(NAF - 2019/11/13, ID-148)
|
|
|
|
- Add new public function H5VLget_file_type.
|
|
|
|
This function returns a datatype equivalent to the supplied datatype but
|
|
with the location set to be in the file. This datatype can then be used
|
|
with H5Tconvert to convert data between file and in-memory representation.
|
|
This function is intended for use only by VOL connector developers.
|
|
|
|
(NAF - 2019/11/08, ID-127)
|
|
|
|
|
|
Parallel Library:
|
|
-----------------
|
|
-
|
|
|
|
|
|
Fortran Library:
|
|
----------------
|
|
- H5Fget_name_f fixed to handle correctly trailing whitespaces and
|
|
newly allocated buffers.
|
|
|
|
(MSB - 2021/08/30, github-826,972)
|
|
|
|
- Add wrappers for H5Pset/get_file_locking() API calls
|
|
|
|
h5pget_file_locking_f()
|
|
h5pset_file_locking_f()
|
|
|
|
See the configure option discussion for HDFFV-11092 (above) for more
|
|
information on the file locking feature and how it's controlled.
|
|
|
|
(DER - 2020/07/30, HDFFV-11092)
|
|
|
|
C++ Library:
|
|
------------
|
|
- Add wrappers for H5Pset/get_file_locking() API calls
|
|
|
|
FileAccPropList::setFileLocking()
|
|
FileAccPropList::getFileLocking()
|
|
|
|
See the configure option discussion for HDFFV-11092 (above) for more
|
|
information on the file locking feature and how it's controlled.
|
|
|
|
(DER - 2020/07/30, HDFFV-11092)
|
|
|
|
|
|
Java Library:
|
|
-------------
|
|
- Replaced HDF5AtomException with HDF5IdException
|
|
|
|
Since H5E_ATOM changed to H5E_ID in the C library, the Java exception
|
|
that wraps the error category was also renamed. Its functionality
|
|
remains unchanged aside from the name.
|
|
|
|
(See also the HDFFV-11190 note in the C library section)
|
|
|
|
(DER - 2020/11/24, HDFFV-11190)
|
|
|
|
- Added new H5S functions.
|
|
|
|
H5Sselect_copy, H5Sselect_shape_same, H5Sselect_adjust,
|
|
H5Sselect_intersect_block, H5Sselect_project_intersection,
|
|
H5Scombine_hyperslab, H5Smodify_select, H5Scombine_select
|
|
wrapper functions added.
|
|
|
|
(ADB - 2020/10/27, HDFFV-10868)
|
|
|
|
- Add wrappers for H5Pset/get_file_locking() API calls
|
|
|
|
H5Pset_file_locking()
|
|
H5Pget_use_file_locking()
|
|
H5Pget_ignore_disabled_file_locking()
|
|
|
|
Unlike the C++ and Fortran wrappers, there are separate getters for the
|
|
two file locking settings, each of which returns a boolean value.
|
|
|
|
See the configure option discussion for HDFFV-11092 (above) for more
|
|
information on the file locking feature and how it's controlled.
|
|
|
|
(DER - 2020/07/30, HDFFV-11092)
|
|
|
|
- Added ability to test java library with VOLs.
|
|
|
|
Created a new CMake script that combines the java and vol test scripts.
|
|
|
|
(ADB - 2020/02/03, HDFFV-10996)
|
|
|
|
- Tests fail for non-English locales.
|
|
|
|
In the JUnit tests with a non-English locale, only the part before
|
|
the decimal comma is replaced by XXXX and this leads to a comparison
|
|
error. Changed the regex for the Time substitution.
|
|
|
|
(ADB - 2020/01/09, HDFFV-10995)
|
|
|
|
|
|
Tools:
|
|
------
|
|
- Refactored the perform tools and removed depends on test library.
|
|
|
|
Moved the perf and h5perf tools from tools/test/perform to
|
|
tools/src/h5perf so that they can be installed. This required
|
|
that the test library dependency be removed by copying the
|
|
needed functions from h5test.c.
|
|
The standalone scripts and other perform tools remain in the
|
|
tools/test/perform folder.
|
|
|
|
(ADB - 2021/08/10)
|
|
|
|
- Removed partial long exceptions
|
|
|
|
Some of the tools accepted shortened versions of the long options
|
|
(ex: --datas instead of --dataset). These were implemented inconsistently,
|
|
are difficult to maintian, and occasionally block useful long option
|
|
names. These partial long options have been removed from all the tools.
|
|
|
|
(DER - 2021/08/03)
|
|
|
|
- h5repack added help text for user-defined filters.
|
|
|
|
Added help text line that states the valid values of the filter flag
|
|
for user-defined filters;
|
|
filter_flag: 1 is OPTIONAL or 0 is MANDATORY
|
|
|
|
(ADB - 2021/01/14, HDFFV-11099)
|
|
|
|
- Added h5delete tool
|
|
|
|
Deleting HDF5 storage when using the VOL can be tricky when the VOL
|
|
does not create files. The h5delete tool is a simple wrapper around
|
|
the H5Fdelete() API call that uses the VOL specified in the
|
|
HDF5_VOL_CONNECTOR environment variable to delete a "file". If
|
|
the call to H5Fdelete() fails, the tool will attempt to use
|
|
the POSIX remove(3) call to remove the file.
|
|
|
|
Note that the HDF5 library does currently have support for
|
|
H5Fdelete() in the native VOL connector.
|
|
|
|
(DER - 2020/12/16)
|
|
|
|
- h5repack added options to control how external links are handled.
|
|
|
|
Currently h5repack preserves external links and cannot copy and merge
|
|
data from the external files. Two options, merge and prune, were added to
|
|
control how to merge data from an external link into the resulting file.
|
|
--merge Follow external soft link recursively and merge data.
|
|
--prune Do not follow external soft links and remove link.
|
|
--merge --prune Follow external link, merge data and remove dangling link.
|
|
|
|
(ADB - 2020/08/05, HDFFV-9984)
|
|
|
|
- h5repack was fixed to repack the reference attributes properly.
|
|
The code line that checks if the update of reference inside a compound
|
|
datatype is misplaced outside the code block loop that carries out the
|
|
check. In consequence, the next attribute that is not the reference
|
|
type was repacked again as the reference type and caused the failure of
|
|
repacking. The fix is to move the corresponding code line to the correct
|
|
code block.
|
|
|
|
(KY -2020/02/07, HDFFV-11014)
|
|
|
|
- h5diff was updated to use the new reference APIs.
|
|
|
|
h5diff uses the new reference APIs to compare references.
|
|
Attribute references can also be compared.
|
|
|
|
(ADB - 2019/12/19, HDFFV-10980)
|
|
|
|
- h5dump and h5ls were updated to use the new reference APIs.
|
|
|
|
The tools library now use the new reference APIs to inspect a
|
|
file. Also the DDL spec was updated to reflect the format
|
|
changes produced with the new APIs. The export API and support
|
|
functions in the JNI were updated to match.
|
|
|
|
(ADB - 2019/12/06, HDFFV-10876 and HDFFV-10877)
|
|
|
|
|
|
High-Level APIs:
|
|
----------------
|
|
- added set/get for unsigned long long attributes
|
|
|
|
the attribute writing high-level API has been expanded to include
|
|
public set/get functions for ULL attributes, analogously to the
|
|
existing set/get for other types.
|
|
|
|
(AF - 2021/09/08)
|
|
|
|
C Packet Table API:
|
|
-------------------
|
|
-
|
|
|
|
Internal header file:
|
|
---------------------
|
|
-
|
|
|
|
Documentation:
|
|
--------------
|
|
-
|
|
|
|
Support for new platforms, languages and compilers
|
|
==================================================
|
|
-
|
|
|
|
Bug Fixes since HDF5-1.12.0 release
|
|
===================================
|
|
Library
|
|
-------
|
|
- Fixed an H5Pget_filter_by_id1/2() assert w/ out of range filter IDs
|
|
|
|
Both H5Pget_filter_by_id1 and 2 did not range check the filter ID, which
|
|
could trip as assert in debug versions of the library. The library now
|
|
returns a normal HDF5 error when the filter ID is out of range.
|
|
|
|
(DER - 2021/11/23, HDFFV-11286)
|
|
|
|
- Fixed an issue with collective metadata reads being permanently disabled
|
|
after a dataset chunk lookup operation. This would usually cause a
|
|
mismatched MPI_Bcast and MPI_ERR_TRUNCATE issue in the library for
|
|
simple cases of H5Dcreate() -> H5Dwrite() -> H5Dcreate().
|
|
|
|
(JTH - 2021/11/08, HDFFV-11090)
|
|
|
|
- Fixed cross platform incompatibility of references within variable length
|
|
types
|
|
|
|
Reference types within variable length types previously could not be
|
|
read on a platform with different endianness from where they were
|
|
written. Fixed so cross platform portability is restored.
|
|
|
|
(NAF - 2021/09/30)
|
|
|
|
- Detection of simple data transform function "x"
|
|
|
|
In the case of the simple data transform function "x" the (parallel)
|
|
library recognizes this is the same as not applying this data transform
|
|
function. This improves the I/O performance. In the case of the parallel
|
|
library, it also avoids breaking to independent I/O, which makes it
|
|
possible to apply a filter when writing or reading data to or from
|
|
teh HDF5 file.
|
|
|
|
(JWSB - 2021/09/13)
|
|
|
|
- Fixed an invalid read and memory leak when parsing corrupt file space
|
|
info messages
|
|
|
|
When the corrupt file from CVE-2020-10810 was parsed by the library,
|
|
the code that imports the version 0 file space info object header
|
|
message to the version 1 struct could read past the buffer read from
|
|
the disk, causing an invalid memory read. Not catching this error would
|
|
cause downstream errors that eventually resulted in a previously
|
|
allocated buffer to be unfreed when the library shut down. In builds
|
|
where the free lists are in use, this could result in an infinite loop
|
|
and SIGABRT when the library shuts down.
|
|
|
|
We now track the buffer size and raise an error on attempts to read
|
|
past the end of it.
|
|
|
|
(DER - 2021/08/12, HDFFV-11053)
|
|
|
|
|
|
- Fixed CVE-2018-14460
|
|
|
|
The tool h5repack produced a segfault when the rank in dataspace
|
|
message was corrupted, causing invalid read while decoding the
|
|
dimension sizes.
|
|
|
|
The problem was fixed by ensuring that decoding the dimension sizes
|
|
and max values will not go beyong the end of the buffer.
|
|
|
|
(BMR - 2021/05/12, HDFFV-11223)
|
|
|
|
- Fixed CVE-2018-11206
|
|
|
|
The tool h5dump produced a segfault when the size of a fill value
|
|
message was corrupted and caused a buffer overflow.
|
|
|
|
The problem was fixed by verifying the fill value's size
|
|
against the buffer size before attempting to access the buffer.
|
|
|
|
(BMR - 2021/03/15, HDFFV-10480)
|
|
|
|
- Fixed CVE-2018-14033 (same issue as CVE-2020-10811)
|
|
|
|
The tool h5dump produced a segfault when the storage size message
|
|
was corrupted and caused a buffer overflow.
|
|
|
|
The problem was fixed by verifying the storage size against the
|
|
buffer size before attempting to access the buffer.
|
|
|
|
(BMR - 2021/03/15, HDFFV-11159/HDFFV-11049)
|
|
|
|
- Remove underscores on header file guards
|
|
|
|
Header file guards used a variety of underscores at the beginning of the define.
|
|
|
|
Removed all leading (some trailing) underscores from header file guards.
|
|
|
|
(ADB - 2021/03/03, #361)
|
|
|
|
- Fixed a segmentation fault
|
|
|
|
A segmentation fault occurred with a Mathworks corrupted file.
|
|
|
|
A detection of accessing a null pointer was added to prevent the problem.
|
|
|
|
(BMR - 2021/02/19, HDFFV-11150)
|
|
|
|
- Fixed issue with MPI communicator and info object not being
|
|
copied into new FAPL retrieved from H5F_get_access_plist
|
|
|
|
Added logic to copy the MPI communicator and info object into
|
|
the output FAPL. MPI communicator is retrieved from the VFD, while
|
|
the MPI info object is retrieved from the file's original FAPL.
|
|
|
|
(JTH - 2021/02/15, HDFFV-11109)
|
|
|
|
- Fixed problems with vlens and refs inside compound using
|
|
H5VLget_file_type()
|
|
|
|
Modified library to properly ref count H5VL_object_t structs and only
|
|
consider file vlen and reference types to be equal if their files are
|
|
the same.
|
|
|
|
(NAF - 2021/01/22)
|
|
|
|
- Fixed CVE-2018-17432
|
|
|
|
The tool h5repack produced a segfault on a corrupted file which had
|
|
invalid rank for scalar or NULL datatype.
|
|
|
|
The problem was fixed by modifying the dataspace encode and decode
|
|
functions to detect and report invalid rank. h5repack now fails
|
|
with an error message for the corrupted file.
|
|
|
|
(BMR - 2020/10/26, HDFFV-10590)
|
|
|
|
- Creation of dataset with optional filter
|
|
|
|
When the combination of type, space, etc doesn't work for filter
|
|
and the filter is optional, it was supposed to be skipped but it was
|
|
not skipped and the creation failed.
|
|
|
|
Allowed the creation of the dataset in such a situation.
|
|
|
|
(BMR - 2020/08/13, HDFFV-10933)
|
|
|
|
- Explicitly declared dlopen to use RTLD_LOCAL
|
|
|
|
dlopen documentation states that if neither RTLD_GLOBAL nor
|
|
RTLD_LOCAL are specified, then the default behavior is unspecified.
|
|
The default on linux is usually RTLD_LOCAL while macos will default
|
|
to RTLD_GLOBAL.
|
|
|
|
(ADB - 2020/08/12, HDFFV-11127)
|
|
|
|
- H5Sset_extent_none() sets the dataspace class to H5S_NO_CLASS which
|
|
causes asserts/errors when passed to other dataspace API calls.
|
|
|
|
H5S_NO_CLASS is an internal class value that should not have been
|
|
exposed via a public API call.
|
|
|
|
In debug builds of the library, this can cause assert() function to
|
|
trip. In non-debug builds, it will produce normal library errors.
|
|
|
|
The new library behavior is for H5Sset_extent_none() to convert
|
|
the dataspace into one of type H5S_NULL, which is better handled
|
|
by the library and easier for developers to reason about.
|
|
|
|
(DER - 2020/07/27, HDFFV-11027)
|
|
|
|
- Fixed issues CVE-2018-13870 and CVE-2018-13869
|
|
|
|
When a buffer overflow occurred because a name length was corrupted
|
|
and became very large, h5dump crashed on memory access violation.
|
|
|
|
A check for reading pass the end of the buffer was added to multiple
|
|
locations to prevent the crashes and h5dump now simply fails with an
|
|
error message when this error condition occurs.
|
|
|
|
(BMR - 2020/07/22, HDFFV-11120 and HDFFV-11121)
|
|
|
|
- Fixed the segmentation fault when reading attributes with multiple threads
|
|
|
|
It was reported that the reading of attributes with variable length string
|
|
datatype will crash with segmentation fault particularly when the number of
|
|
threads is high (>16 threads). The problem was due to the file pointer that
|
|
was set in the variable length string datatype for the attribute. That file
|
|
pointer was already closed when the attribute was accessed.
|
|
|
|
The problem was fixed by setting the file pointer to the current opened file pointer
|
|
when the attribute was accessed. Similar patch up was done before when reading
|
|
dataset with variable length string datatype.
|
|
|
|
(VC - 2020/07/13, HDFFV-11080)
|
|
|
|
- Fixed CVE-2020-10810
|
|
|
|
The tool h5clear produced a segfault during an error recovery in
|
|
the superblock decoding. An internal pointer was reset to prevent
|
|
further accessing when it is not assigned with a value.
|
|
|
|
(BMR - 2020/06/29, HDFFV-11053)
|
|
|
|
- Fixed CVE-2018-17435
|
|
|
|
The tool h52gif produced a segfault when the size of an attribute
|
|
message was corrupted and caused a buffer overflow.
|
|
|
|
The problem was fixed by verifying the attribute message's size
|
|
against the buffer size before accessing the buffer. h52gif was
|
|
also fixed to display the failure instead of silently exiting
|
|
after the segfault was eliminated.
|
|
|
|
(BMR - 2020/06/19, HDFFV-10591)
|
|
|
|
|
|
Java Library
|
|
------------
|
|
- JNI utility function does not handle new references.
|
|
|
|
The JNI utility function for converting reference data to string did
|
|
not use the new APIs. In addition to fixing that function, added new
|
|
java tests for using the new APIs.
|
|
|
|
(ADB - 2021/02/16, HDFFV-11212)
|
|
|
|
- The H5FArray.java class, in which virtually the entire execution time
|
|
is spent using the HDFNativeData method that converts from an array
|
|
of bytes to an array of the destination Java type.
|
|
|
|
1. Convert the entire byte array into a 1-d array of the desired type,
|
|
rather than performing 1 conversion per row;
|
|
2. Use the Java Arrays method copyOfRange to grab the section of the
|
|
array from (1) that is desired to be inserted into the destination array.
|
|
|
|
(PGT,ADB - 2020/12/13, HDFFV-10865)
|
|
|
|
- Added ability to test java library with VOLs.
|
|
|
|
Created a new CMake script that combines the java and vol test scripts.
|
|
|
|
(ADB - 2020/02/03, HDFFV-10996)
|
|
|
|
- Tests fail for non-English locales.
|
|
|
|
In the JUnit tests with a non-English locale, only the part before
|
|
the decimal comma is replaced by XXXX and this leads to a comparison
|
|
error. Changed the regex for the Time substitution.
|
|
|
|
(ADB - 2020/01/09, HDFFV-10995)
|
|
|
|
|
|
Configuration
|
|
-------------
|
|
- Corrected path searched by CMake find_package command
|
|
|
|
The install path for cmake find_package files had been changed to use
|
|
"share/cmake"
|
|
for all platforms. However the trailing "hdf5" directory was not removed.
|
|
This "hdf5" additional directory has been removed.
|
|
|
|
(ADB - 2021/09/27)
|
|
|
|
- Corrected pkg-config compile script
|
|
|
|
It was discovered that the position of the "$@" argument for the command
|
|
in the compile script may fail on some platforms and configurations. The
|
|
position of the "$@"command argument was moved before the pkg-config sub command.
|
|
|
|
(ADB - 2021/08/30)
|
|
|
|
- Fixed CMake C++ compiler flags
|
|
|
|
A recent refactoring of the C++ configure files accidently removed the
|
|
file that executed the enable_language command for C++ needed by the
|
|
HDFCXXCompilerFlags.cmake file. Also updated the intel warnings files,
|
|
including adding support for windows platforms.
|
|
|
|
(ADB - 2021/08/10)
|
|
|
|
- Better support for libaec (open-source Szip library) in CMake
|
|
|
|
Implemented better support for libaec 1.0.5 (or later) library. This version
|
|
of libaec contains improvements for better integration with HDF5. Furthermore,
|
|
the variable USE_LIBAEC_STATIC has been introduced to allow to make use of
|
|
static version of libaec library. Use libaec_DIR or libaec_ROOT to set
|
|
the location in which libaec can be found.
|
|
|
|
Be aware, the Szip library of libaec 1.0.4 depends on another library within
|
|
libaec library. This dependency is not specified in the current CMake
|
|
configuration which means that one can not use the static Szip library of
|
|
libaec 1.0.4 when building HDF5. This has been resolved in libaec 1.0.5.
|
|
|
|
(JWSB - 2021/06/22)
|
|
|
|
- Refactor CMake configure for Fortran
|
|
|
|
The Fortran configure tests for KINDs reused a single output file that was
|
|
read to form the Integer and Real Kinds defines. However, if config was run
|
|
more then once, the CMake completed variable prevented the tests from executing
|
|
again and the last value saved in the file was used to create the define.
|
|
Creating separate files for each KIND solved the issue.
|
|
|
|
In addition the test for H5_PAC_C_MAX_REAL_PRECISION was not pulling in
|
|
defines for proper operation and did not define H5_PAC_C_MAX_REAL_PRECISION
|
|
correctly for a zero value. This was fixed by supplying the required defines.
|
|
In addition it was moved from the Fortran specific HDF5UseFortran.camke file
|
|
to the C centric ConfigureChecks.cmake file.
|
|
|
|
(ADB - 2021/06/03)
|
|
|
|
- Move emscripten flag to compile flags
|
|
|
|
The emscripten flag, -O0, was removed from target_link_libraries command
|
|
to the correct target_compile_options command.
|
|
|
|
(ADB - 2021/04/26 HDFFV-11083)
|
|
|
|
- Remove arbitrary warning flag groups from CMake builds
|
|
|
|
The arbitrary groups were created to reduce the quantity of warnings being
|
|
reported that overwhelmed testing report systems. Considerable work has
|
|
been accomplished to reduce the warning count and these arbitrary groups
|
|
are no longer needed.
|
|
Also the default for all warnings, HDF5_ENABLE_ALL_WARNINGS, is now ON.
|
|
|
|
Visual Studio warnings C4100, C4706, and C4127 have been moved to
|
|
developer warnings, HDF5_ENABLE_DEV_WARNINGS, and are disabled for normal builds.
|
|
|
|
(ADB - 2021/03/22, HDFFV-11228)
|
|
|
|
- Reclassify CMake messages, to allow new modes and --log-level option
|
|
|
|
CMake message commands have a mode argument. By default, STATUS mode
|
|
was chosen for any non-error message. CMake version 3.15 added additional
|
|
modes, NOTICE, VERBOSE, DEBUG and TRACE. All message commands with a mode
|
|
of STATUS were reviewed and most were reclassified as VERBOSE. The new
|
|
mode was protected by a check for a CMake version of at least 3.15. If CMake
|
|
version 3.17 or above is used, the user can use the command line option
|
|
of "--log-level" to further restrict which message commands are displayed.
|
|
|
|
(ADB - 2021/01/11, HDFFV-11144)
|
|
|
|
- Fixes Autotools determination of the stat struct having an st_blocks field
|
|
|
|
A missing parenthesis in an autoconf macro prevented building the test
|
|
code used to determine if the stat struct contains the st_blocks field.
|
|
Now that the test functions correctly, the H5_HAVE_STAT_ST_BLOCKS #define
|
|
found in H5pubconf.h will be defined correctly on both the Autotools and
|
|
CMake. This #define is only used in the tests and does not affect the
|
|
HDF5 C library.
|
|
|
|
(DER - 2021/01/07, HDFFV-11201)
|
|
|
|
- Add missing ENV variable line to hdfoptions.cmake file
|
|
|
|
Using the build options to use system SZIP/ZLIB libraries need to also
|
|
specify the library root directory. Setting the {library}_ROOT ENV
|
|
variable was added to the hdfoptions.cmake file.
|
|
|
|
(ADB - 2020/10/19 HDFFV-11108)
|
|
|
|
|
|
Tools
|
|
-----
|
|
- Changed how h5dump and h5ls identify long double.
|
|
|
|
Long double support is not consistent across platforms. Tools will always
|
|
identify long double as 128-bit [little/big]-endian float nn-bit precision.
|
|
New test file created for datasets with attributes for float, double and
|
|
long double. In addition any unknown integer or float datatype will now
|
|
also show the number of bits for precision.
|
|
These files are also used in the java tests.
|
|
|
|
(ADB - 2021/03/24, HDFFV-11229,HDFFV-11113)
|
|
|
|
- Fixed tools argument parsing.
|
|
|
|
Tools parsing used the length of the option from the long array to match
|
|
the option from the command line. This incorrectly matched a shorter long
|
|
name option that happened to be a subset of another long option.
|
|
Changed to match whole names.
|
|
|
|
(ADB - 2021/01/19, HDFFV-11106)
|
|
|
|
- The tools library was updated by standardizing the error stack process.
|
|
|
|
General sequence is:
|
|
h5tools_setprogname(PROGRAMNAME);
|
|
h5tools_setstatus(EXIT_SUCCESS);
|
|
h5tools_init();
|
|
... process the command-line (check for error-stack enable) ...
|
|
h5tools_error_report();
|
|
... (do work) ...
|
|
h5diff_exit(ret);
|
|
|
|
(ADB - 2020/07/20, HDFFV-11066)
|
|
|
|
- h5diff fixed a command line parsing error.
|
|
|
|
h5diff would ignore the argument to -d (delta) if it is smaller than DBL_EPSILON.
|
|
The macro H5_DBL_ABS_EQUAL was removed and a direct value comparision was used.
|
|
|
|
(ADB - 2020/07/20, HDFFV-10897)
|
|
|
|
- h5diff added a command line option to ignore attributes.
|
|
|
|
h5diff would ignore all objects with a supplied path if the exclude-path argument is used.
|
|
Adding the exclude-attribute argument will only exclude attributes, with the supplied path,
|
|
from comparison.
|
|
|
|
(ADB - 2020/07/20, HDFFV-5935)
|
|
|
|
- h5diff added another level to the verbose argument to print filenames.
|
|
|
|
Added verbose level 3 that is level 2 plus the filenames. The levels are:
|
|
0 : Identical to '-v' or '--verbose'
|
|
1 : All level 0 information plus one-line attribute status summary
|
|
2 : All level 1 information plus extended attribute status report
|
|
3 : All level 2 information plus file names
|
|
|
|
(ADB - 2020/07/20, HDFFV-1005)
|
|
|
|
- h5repack was fixed to repack the reference attributes properly.
|
|
|
|
The code line that checks if the update of reference inside a compound
|
|
datatype is misplaced outside the code block loop that carries out the
|
|
check. In consequence, the next attribute that is not the reference
|
|
type was repacked again as the reference type and caused the failure of
|
|
repacking. The fix is to move the corresponding code line to the correct
|
|
code block.
|
|
|
|
(KY -2020/02/10, HDFFV-11014)
|
|
|
|
- h5diff was updated to use the new reference APIs.
|
|
|
|
h5diff uses the new reference APIs to compare references.
|
|
Attribute references can also be compared.
|
|
|
|
(ADB - 2019/12/19, HDFFV-10980)
|
|
|
|
- h5dump and h5ls were updated to use the new reference APIs.
|
|
|
|
The tools library now use the new reference APIs to inspect a
|
|
file. Also the DDL spec was updated to reflect the format
|
|
changes produced with the new APIs. The export API and support
|
|
functions in the JNI were updated to match.
|
|
|
|
(ADB - 2019/12/06, HDFFV-10876 and HDFFV-10877)
|
|
|
|
|
|
Performance
|
|
-------------
|
|
-
|
|
|
|
|
|
Fortran API
|
|
-----------
|
|
- Corrected INTERFACE INTENT(IN) to INTENT(OUT) for buf_size in h5fget_file_image_f.
|
|
|
|
(MSB - 2020/02/18, HDFFV-11029)
|
|
|
|
|
|
High-Level Library
|
|
------------------
|
|
- Fixed HL_test_packet, test for packet table vlen of vlen.
|
|
|
|
Incorrect length assignment.
|
|
|
|
(ADB - 2021/10/14)
|
|
|
|
|
|
Fortran High-Level APIs
|
|
-----------------------
|
|
-
|
|
|
|
|
|
Documentation
|
|
-------------
|
|
-
|
|
|
|
|
|
F90 APIs
|
|
--------
|
|
-
|
|
|
|
|
|
C++ APIs
|
|
--------
|
|
- Added DataSet::operator=
|
|
|
|
Some compilers complain if the copy constructor is given explicitly
|
|
but the assignment operator is implicitly set to default.
|
|
|
|
(2021/05/19)
|
|
|
|
|
|
Testing
|
|
-------
|
|
- Stopped java/test/junit.sh.in installing libs for testing under ${prefix}
|
|
|
|
Lib files needed are now copied to a subdirectory in the java/test
|
|
directory, and on Macs the loader path for libhdf5.xxxs.so is changed
|
|
in the temporary copy of libhdf5_java.dylib.
|
|
|
|
(LRK, 2020/07/02, HDFFV-11063)
|
|
|
|
|
|
Platforms Tested
|
|
===================
|
|
|
|
Linux 5.13.14-200.fc34 GNU gcc (GCC) 11.2.1 2021078 (Red Hat 11.2.1-1)
|
|
#1 SMP x86_64 GNU/Linux GNU Fortran (GCC) 11.2.1 2021078 (Red Hat 11.2.1-1)
|
|
Fedora34 clang version 12.0.1 (Fedora 12.0.1-1.fc34)
|
|
(cmake and autotools)
|
|
|
|
Linux 5.11.0-34-generic GNU gcc (GCC) 9.3.0-17ubuntu1
|
|
#36-Ubuntu SMP x86_64 GNU/Linux GNU Fortran (GCC) 9.3.0-17ubuntu1
|
|
Ubuntu 20.04 Ubuntu clang version 10.0.0-4
|
|
(cmake and autotools)
|
|
|
|
Linux 5.8.0-63-generic GNU gcc (GCC) 10.3.0-1ubuntu1
|
|
#71-Ubuntu SMP x86_64 GNU/Linux GNU Fortran (GCC) 10.3.0-1ubuntu1
|
|
Ubuntu20.10 Ubuntu clang version 11.0.0-2
|
|
(cmake and autotools)
|
|
|
|
Linux 5.3.18-22-default GNU gcc (SUSE Linux) 7.5.0
|
|
#1 SMP x86_64 GNU/Linux GNU Fortran (SUSE Linux) 7.5.0
|
|
SUSE15sp2 clang version 7.0.1 (tags/RELEASE_701/final 349238)
|
|
(cmake and autotools)
|
|
|
|
Linux-4.14.0-115.21.2 spectrum-mpi/rolling-release
|
|
#1 SMP ppc64le GNU/Linux clang 8.0.1, 11.0.1
|
|
(lassen) GCC 7.3.1
|
|
XL 16.1.1.2
|
|
(cmake)
|
|
|
|
Linux-4.12.14-150.75-default cray-mpich/7.7.10
|
|
#1 SMP x86_64 GNU/Linux GCC 7.3.0, 8.2.0
|
|
(cori) Intel (R) Version 19.0.3.199
|
|
(cmake)
|
|
|
|
Linux-4.12.14-197.86-default cray-mpich/7.7.6
|
|
# 1SMP x86_64 GNU/Linux GCC 7.3.0, 9.3.0, 10.2.0
|
|
(mutrino) Intel (R) Version 17.0.4, 18.0.5, 19.1.3
|
|
(cmake)
|
|
|
|
Linux 3.10.0-1160.36.2.el7.ppc64 gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)
|
|
#1 SMP ppc64be GNU/Linux g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)
|
|
Power8 (echidna) GNU Fortran (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)
|
|
|
|
Linux 3.10.0-1160.24.1.el7 GNU C (gcc), Fortran (gfortran), C++ (g++)
|
|
#1 SMP x86_64 GNU/Linux compilers:
|
|
Centos7 Version 4.8.5 20150623 (Red Hat 4.8.5-4)
|
|
(jelly/kituo/moohan) Version 4.9.3, Version 5.3.0, Version 6.3.0,
|
|
Version 7.2.0, Version 8.3.0, Version 9.1.0
|
|
Intel(R) C (icc), C++ (icpc), Fortran (icc)
|
|
compilers:
|
|
Version 17.0.0.098 Build 20160721
|
|
GNU C (gcc) and C++ (g++) 4.8.5 compilers
|
|
with NAG Fortran Compiler Release 6.1(Tozai)
|
|
Intel(R) C (icc) and C++ (icpc) 17.0.0.098 compilers
|
|
with NAG Fortran Compiler Release 6.1(Tozai)
|
|
MPICH 3.1.4 compiled with GCC 4.9.3
|
|
MPICH 3.3 compiled with GCC 7.2.0
|
|
OpenMPI 2.1.6 compiled with icc 18.0.1
|
|
OpenMPI 3.1.3 and 4.0.0 compiled with GCC 7.2.0
|
|
PGI C, Fortran, C++ for 64-bit target on
|
|
x86_64;
|
|
Version 19.10-0
|
|
|
|
Linux-3.10.0-1127.0.0.1chaos openmpi-4.0.0
|
|
#1 SMP x86_64 GNU/Linux clang 6.0.0, 11.0.1
|
|
(quartz) GCC 7.3.0, 8.1.0
|
|
Intel 16.0.4, 18.0.2, 19.0.4
|
|
|
|
macOS Apple M1 11.6 Apple clang version 12.0.5 (clang-1205.0.22.11)
|
|
Darwin 20.6.0 arm64 gfortran GNU Fortran (Homebrew GCC 11.2.0) 11.1.0
|
|
(macmini-m1) Intel icc/icpc/ifort version 2021.3.0 202106092021.3.0 20210609
|
|
|
|
macOS Big Sur 11.3.1 Apple clang version 12.0.5 (clang-1205.0.22.9)
|
|
Darwin 20.4.0 x86_64 gfortran GNU Fortran (Homebrew GCC 10.2.0_3) 10.2.0
|
|
(bigsur-1) Intel icc/icpc/ifort version 2021.2.0 20210228
|
|
|
|
macOS High Sierra 10.13.6 Apple LLVM version 10.0.0 (clang-1000.10.44.4)
|
|
64-bit gfortran GNU Fortran (GCC) 6.3.0
|
|
(bear) Intel icc/icpc/ifort version 19.0.4.233 20190416
|
|
|
|
macOS Sierra 10.12.6 Apple LLVM version 9.0.0 (clang-900.39.2)
|
|
64-bit gfortran GNU Fortran (GCC) 7.4.0
|
|
(kite) Intel icc/icpc/ifort version 17.0.2
|
|
|
|
Mac OS X El Capitan 10.11.6 Apple clang version 7.3.0 from Xcode 7.3
|
|
64-bit gfortran GNU Fortran (GCC) 5.2.0
|
|
(osx1011test) Intel icc/icpc/ifort version 16.0.2
|
|
|
|
|
|
Linux 2.6.32-573.22.1.el6 GNU C (gcc), Fortran (gfortran), C++ (g++)
|
|
#1 SMP x86_64 GNU/Linux compilers:
|
|
Centos6 Version 4.4.7 20120313
|
|
(platypus) Version 4.9.3, 5.3.0, 6.2.0
|
|
MPICH 3.1.4 compiled with GCC 4.9.3
|
|
PGI C, Fortran, C++ for 64-bit target on
|
|
x86_64;
|
|
Version 19.10-0
|
|
|
|
Windows 10 x64 Visual Studio 2015 w/ Intel C/C++/Fortran 18 (cmake)
|
|
Visual Studio 2017 w/ Intel C/C++/Fortran 19 (cmake)
|
|
Visual Studio 2019 w/ clang 12.0.0
|
|
with MSVC-like command-line (C/C++ only - cmake)
|
|
Visual Studio 2019 w/ Intel Fortran 19 (cmake)
|
|
Visual Studio 2019 w/ MSMPI 10.1 (C only - cmake)
|
|
|
|
|
|
Known Problems
|
|
==============
|
|
Setting a variable-length dataset fill value will leak the memory allocated
|
|
for the p field of the hvl_t struct. A fix is in progress for this.
|
|
HDFFV-10840
|
|
|
|
CMake files do not behave correctly with paths containing spaces.
|
|
Do not use spaces in paths because the required escaping for handling spaces
|
|
results in very complex and fragile build files.
|
|
ADB - 2019/05/07
|
|
|
|
At present, metadata cache images may not be generated by parallel
|
|
applications. Parallel applications can read files with metadata cache
|
|
images, but since this is a collective operation, a deadlock is possible
|
|
if one or more processes do not participate.
|
|
|
|
CPP ptable test fails on both VS2017 and VS2019 with Intel compiler, JIRA
|
|
issue: HDFFV-10628. This test will pass with VS2015 with Intel compiler.
|
|
|
|
The subsetting option in ph5diff currently will fail and should be avoided.
|
|
The subsetting option works correctly in serial h5diff.
|
|
|
|
Known problems in previous releases can be found in the HISTORY*.txt files
|
|
in the HDF5 source. Please report any new problems found to
|
|
help@hdfgroup.org.
|
|
|
|
|
|
CMake vs. Autotools installations
|
|
=================================
|
|
While both build systems produce similar results, there are differences.
|
|
Each system produces the same set of folders on linux (only CMake works
|
|
on standard Windows); bin, include, lib and share. Autotools places the
|
|
COPYING and RELEASE.txt file in the root folder, CMake places them in
|
|
the share folder.
|
|
|
|
The bin folder contains the tools and the build scripts. Additionally, CMake
|
|
creates dynamic versions of the tools with the suffix "-shared". Autotools
|
|
installs one set of tools depending on the "--enable-shared" configuration
|
|
option.
|
|
build scripts
|
|
-------------
|
|
Autotools: h5c++, h5cc, h5fc
|
|
CMake: h5c++, h5cc, h5hlc++, h5hlcc
|
|
|
|
The include folder holds the header files and the fortran mod files. CMake
|
|
places the fortran mod files into separate shared and static subfolders,
|
|
while Autotools places one set of mod files into the include folder. Because
|
|
CMake produces a tools library, the header files for tools will appear in
|
|
the include folder.
|
|
|
|
The lib folder contains the library files, and CMake adds the pkgconfig
|
|
subfolder with the hdf5*.pc files used by the bin/build scripts created by
|
|
the CMake build. CMake separates the C interface code from the fortran code by
|
|
creating C-stub libraries for each Fortran library. In addition, only CMake
|
|
installs the tools library. The names of the szip libraries are different
|
|
between the build systems.
|
|
|
|
The share folder will have the most differences because CMake builds include
|
|
a number of CMake specific files for support of CMake's find_package and support
|
|
for the HDF5 Examples CMake project.
|
|
|
|
The issues with the gif tool are:
|
|
HDFFV-10592 CVE-2018-17433
|
|
HDFFV-10593 CVE-2018-17436
|
|
HDFFV-11048 CVE-2020-10809
|
|
These CVE issues have not yet been addressed and can be avoided by not building
|
|
the gif tool. Disable building the High-Level tools with these options:
|
|
autotools: --disable-hltools
|
|
cmake: HDF5_BUILD_HL_TOOLS=OFF
|