diff --git a/Dockerfile b/Dockerfile index 44e7e83..1375cfe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -238,8 +238,11 @@ ARG NETCDF_VERSION ENV NETCDF_VERSION="${NETCDF_VERSION:-4.9.2}" ENV NETCDF_SRC_DIR="/usr/local/src/netcdf-c-${NETCDF_VERSION}" RUN --mount=target="${NETCDF_SRC_DIR}",type=cache,sharing=locked \ + --mount=target="${NETCDF_SRC_DIR}/patches",type=bind,source=./patches/netcdf-c \ if [ ! -f "${NETCDF_SRC_DIR}/configure" ]; then \ wget -O - https://github.com/Unidata/netcdf-c/archive/refs/tags/v${NETCDF_VERSION}.tar.gz | tar -xz -C /usr/local/src/; \ + cd "${NETCDF_SRC_DIR}" ; \ + patch -p1 < "./patches/0001-Fix-issue-2674.patch" ; \ fi RUN --mount=target="${NETCDF_SRC_DIR}",type=cache,sharing=locked \ cd "${NETCDF_SRC_DIR}" \ diff --git a/patches/netcdf-c/0001-Fix-issue-2674.patch b/patches/netcdf-c/0001-Fix-issue-2674.patch new file mode 100644 index 0000000..1ac328d --- /dev/null +++ b/patches/netcdf-c/0001-Fix-issue-2674.patch @@ -0,0 +1,53 @@ +Subject: [PATCH] Fix issue #2674 + +--- + libhdf5/hdf5open.c | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +diff --git a/libhdf5/hdf5open.c b/libhdf5/hdf5open.c +index cb2491ff..e00f426e 100644 +--- a/libhdf5/hdf5open.c ++++ b/libhdf5/hdf5open.c +@@ -1205,12 +1205,14 @@ static int get_quantize_info(NC_VAR_INFO_T *var) + { + hid_t attid; + hid_t datasetid; ++ htri_t attr_exists; + + /* Try to open an attribute of the correct name for quantize + * info. */ + datasetid = ((NC_HDF5_VAR_INFO_T *)var->format_var_info)->hdf_datasetid; +- attid = H5Aopen_by_name(datasetid, ".", NC_QUANTIZE_BITGROOM_ATT_NAME, +- H5P_DEFAULT, H5P_DEFAULT); ++ attr_exists = H5Aexists(datasetid, NC_QUANTIZE_BITGROOM_ATT_NAME); ++ attid = attr_exists ? H5Aopen_by_name(datasetid, ".", NC_QUANTIZE_BITGROOM_ATT_NAME, ++ H5P_DEFAULT, H5P_DEFAULT) : 0; + + if (attid > 0) + { +@@ -1218,16 +1220,18 @@ static int get_quantize_info(NC_VAR_INFO_T *var) + } + else + { +- attid = H5Aopen_by_name(datasetid, ".", NC_QUANTIZE_GRANULARBR_ATT_NAME, +- H5P_DEFAULT, H5P_DEFAULT); ++ attr_exists = H5Aexists(datasetid, NC_QUANTIZE_GRANULARBR_ATT_NAME); ++ attid = attr_exists ? H5Aopen_by_name(datasetid, ".", NC_QUANTIZE_GRANULARBR_ATT_NAME, ++ H5P_DEFAULT, H5P_DEFAULT) : 0; + if (attid > 0) + { + var->quantize_mode = NC_QUANTIZE_GRANULARBR; + } + else + { +- attid = H5Aopen_by_name(datasetid, ".", NC_QUANTIZE_BITROUND_ATT_NAME, +- H5P_DEFAULT, H5P_DEFAULT); ++ attr_exists = H5Aexists(datasetid, NC_QUANTIZE_BITROUND_ATT_NAME); ++ attid = attr_exists ? H5Aopen_by_name(datasetid, ".", NC_QUANTIZE_BITROUND_ATT_NAME, ++ H5P_DEFAULT, H5P_DEFAULT) : 0; + if (attid > 0) + var->quantize_mode = NC_QUANTIZE_BITROUND; + } +-- +2.39.1 +