!20 [sync] PR-18: 修复hdf5修漏洞导致的h5py构建失败
From: @openeuler-sync-bot Reviewed-by: @hubin95 Signed-off-by: @hubin95
This commit is contained in:
commit
9e520322aa
150
Add-new-H5FD_class_value_t-typedef.patch
Normal file
150
Add-new-H5FD_class_value_t-typedef.patch
Normal file
@ -0,0 +1,150 @@
|
||||
From 8b3cfbbd5565efc27124e5ddccc6b9d5e9b5d443 Mon Sep 17 00:00:00 2001
|
||||
From: Aleksandar Jelenak <ajelenak@hdfgroup.org>
|
||||
Date: Sat, 17 Dec 2022 22:19:13 -0500
|
||||
Subject: [PATCH] Add new H5FD_class_value_t typedef
|
||||
|
||||
---
|
||||
h5py/api_types_hdf5.pxd | 126 +++++++++++++++++++++++++++++-----------
|
||||
1 file changed, 93 insertions(+), 33 deletions(-)
|
||||
|
||||
diff --git a/h5py/api_types_hdf5.pxd b/h5py/api_types_hdf5.pxd
|
||||
index 6977f1a7..7861f848 100644
|
||||
--- a/h5py/api_types_hdf5.pxd
|
||||
+++ b/h5py/api_types_hdf5.pxd
|
||||
@@ -235,40 +235,100 @@ cdef extern from "hdf5.h":
|
||||
H5FD_MPIO_INDEPENDENT = 0,
|
||||
H5FD_MPIO_COLLECTIVE
|
||||
|
||||
+ # File driver identifier type and values
|
||||
+ IF HDF5_VERSION >= (1, 14, 0):
|
||||
+ ctypedef int H5FD_class_value_t
|
||||
+
|
||||
+ H5FD_class_value_t H5_VFD_INVALID # -1
|
||||
+ H5FD_class_value_t H5_VFD_SEC2 # 0
|
||||
+ H5FD_class_value_t H5_VFD_CORE # 1
|
||||
+ H5FD_class_value_t H5_VFD_LOG # 2
|
||||
+ H5FD_class_value_t H5_VFD_FAMILY # 3
|
||||
+ H5FD_class_value_t H5_VFD_MULTI # 4
|
||||
+ H5FD_class_value_t H5_VFD_STDIO # 5
|
||||
+ H5FD_class_value_t H5_VFD_SPLITTER # 6
|
||||
+ H5FD_class_value_t H5_VFD_MPIO # 7
|
||||
+ H5FD_class_value_t H5_VFD_DIRECT # 8
|
||||
+ H5FD_class_value_t H5_VFD_MIRROR # 9
|
||||
+ H5FD_class_value_t H5_VFD_HDFS # 10
|
||||
+ H5FD_class_value_t H5_VFD_ROS3 # 11
|
||||
+ H5FD_class_value_t H5_VFD_SUBFILING # 12
|
||||
+ H5FD_class_value_t H5_VFD_IOC # 13
|
||||
+ H5FD_class_value_t H5_VFD_ONION # 14
|
||||
+
|
||||
# Class information for each file driver
|
||||
- ctypedef struct H5FD_class_t:
|
||||
- const char *name
|
||||
- haddr_t maxaddr
|
||||
- H5F_close_degree_t fc_degree
|
||||
- herr_t (*terminate)()
|
||||
- hsize_t (*sb_size)(H5FD_t *file)
|
||||
- herr_t (*sb_encode)(H5FD_t *file, char *name, unsigned char *p)
|
||||
- herr_t (*sb_decode)(H5FD_t *f, const char *name, const unsigned char *p)
|
||||
- size_t fapl_size
|
||||
- void * (*fapl_get)(H5FD_t *file)
|
||||
- void * (*fapl_copy)(const void *fapl)
|
||||
- herr_t (*fapl_free)(void *fapl)
|
||||
- size_t dxpl_size
|
||||
- void * (*dxpl_copy)(const void *dxpl)
|
||||
- herr_t (*dxpl_free)(void *dxpl)
|
||||
- H5FD_t *(*open)(const char *name, unsigned flags, hid_t fapl, haddr_t maxaddr)
|
||||
- herr_t (*close)(H5FD_t *file)
|
||||
- int (*cmp)(const H5FD_t *f1, const H5FD_t *f2)
|
||||
- herr_t (*query)(const H5FD_t *f1, unsigned long *flags)
|
||||
- herr_t (*get_type_map)(const H5FD_t *file, H5FD_mem_t *type_map)
|
||||
- haddr_t (*alloc)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
|
||||
- herr_t (*free)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size)
|
||||
- haddr_t (*get_eoa)(const H5FD_t *file, H5FD_mem_t type)
|
||||
- herr_t (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr)
|
||||
- haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type)
|
||||
- herr_t (*get_handle)(H5FD_t *file, hid_t fapl, void**file_handle)
|
||||
- herr_t (*read)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, void *buffer)
|
||||
- herr_t (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, const void *buffer)
|
||||
- herr_t (*flush)(H5FD_t *file, hid_t dxpl_id, hbool_t closing)
|
||||
- herr_t (*truncate)(H5FD_t *file, hid_t dxpl_id, hbool_t closing)
|
||||
- herr_t (*lock)(H5FD_t *file, hbool_t rw)
|
||||
- herr_t (*unlock)(H5FD_t *file)
|
||||
- H5FD_mem_t fl_map[<int>H5FD_MEM_NTYPES]
|
||||
+ IF HDF5_VERSION < (1, 14, 0):
|
||||
+ ctypedef struct H5FD_class_t:
|
||||
+ const char *name
|
||||
+ haddr_t maxaddr
|
||||
+ H5F_close_degree_t fc_degree
|
||||
+ herr_t (*terminate)()
|
||||
+ hsize_t (*sb_size)(H5FD_t *file)
|
||||
+ herr_t (*sb_encode)(H5FD_t *file, char *name, unsigned char *p)
|
||||
+ herr_t (*sb_decode)(H5FD_t *f, const char *name, const unsigned char *p)
|
||||
+ size_t fapl_size
|
||||
+ void * (*fapl_get)(H5FD_t *file)
|
||||
+ void * (*fapl_copy)(const void *fapl)
|
||||
+ herr_t (*fapl_free)(void *fapl)
|
||||
+ size_t dxpl_size
|
||||
+ void * (*dxpl_copy)(const void *dxpl)
|
||||
+ herr_t (*dxpl_free)(void *dxpl)
|
||||
+ H5FD_t *(*open)(const char *name, unsigned flags, hid_t fapl, haddr_t maxaddr)
|
||||
+ herr_t (*close)(H5FD_t *file)
|
||||
+ int (*cmp)(const H5FD_t *f1, const H5FD_t *f2)
|
||||
+ herr_t (*query)(const H5FD_t *f1, unsigned long *flags)
|
||||
+ herr_t (*get_type_map)(const H5FD_t *file, H5FD_mem_t *type_map)
|
||||
+ haddr_t (*alloc)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
|
||||
+ herr_t (*free)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size)
|
||||
+ haddr_t (*get_eoa)(const H5FD_t *file, H5FD_mem_t type)
|
||||
+ herr_t (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr)
|
||||
+ haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type)
|
||||
+ herr_t (*get_handle)(H5FD_t *file, hid_t fapl, void**file_handle)
|
||||
+ herr_t (*read)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, void *buffer)
|
||||
+ herr_t (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, const void *buffer)
|
||||
+ herr_t (*flush)(H5FD_t *file, hid_t dxpl_id, hbool_t closing)
|
||||
+ herr_t (*truncate)(H5FD_t *file, hid_t dxpl_id, hbool_t closing)
|
||||
+ herr_t (*lock)(H5FD_t *file, hbool_t rw)
|
||||
+ herr_t (*unlock)(H5FD_t *file)
|
||||
+ H5FD_mem_t fl_map[<int>H5FD_MEM_NTYPES]
|
||||
+ ELSE:
|
||||
+ unsigned H5FD_CLASS_VERSION # File driver struct version
|
||||
+
|
||||
+ ctypedef struct H5FD_class_t:
|
||||
+ unsigned version # File driver class struct version number
|
||||
+ H5FD_class_value_t value
|
||||
+ const char *name
|
||||
+ haddr_t maxaddr
|
||||
+ H5F_close_degree_t fc_degree
|
||||
+ herr_t (*terminate)()
|
||||
+ hsize_t (*sb_size)(H5FD_t *file)
|
||||
+ herr_t (*sb_encode)(H5FD_t *file, char *name, unsigned char *p)
|
||||
+ herr_t (*sb_decode)(H5FD_t *f, const char *name, const unsigned char *p)
|
||||
+ size_t fapl_size
|
||||
+ void * (*fapl_get)(H5FD_t *file)
|
||||
+ void * (*fapl_copy)(const void *fapl)
|
||||
+ herr_t (*fapl_free)(void *fapl)
|
||||
+ size_t dxpl_size
|
||||
+ void * (*dxpl_copy)(const void *dxpl)
|
||||
+ herr_t (*dxpl_free)(void *dxpl)
|
||||
+ H5FD_t *(*open)(const char *name, unsigned flags, hid_t fapl, haddr_t maxaddr)
|
||||
+ herr_t (*close)(H5FD_t *file)
|
||||
+ int (*cmp)(const H5FD_t *f1, const H5FD_t *f2)
|
||||
+ herr_t (*query)(const H5FD_t *f1, unsigned long *flags)
|
||||
+ herr_t (*get_type_map)(const H5FD_t *file, H5FD_mem_t *type_map)
|
||||
+ haddr_t (*alloc)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
|
||||
+ herr_t (*free)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size)
|
||||
+ haddr_t (*get_eoa)(const H5FD_t *file, H5FD_mem_t type)
|
||||
+ herr_t (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr)
|
||||
+ haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type)
|
||||
+ herr_t (*get_handle)(H5FD_t *file, hid_t fapl, void**file_handle)
|
||||
+ herr_t (*read)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, void *buffer)
|
||||
+ herr_t (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, const void *buffer)
|
||||
+ herr_t (*flush)(H5FD_t *file, hid_t dxpl_id, hbool_t closing)
|
||||
+ herr_t (*truncate)(H5FD_t *file, hid_t dxpl_id, hbool_t closing)
|
||||
+ herr_t (*lock)(H5FD_t *file, hbool_t rw)
|
||||
+ herr_t (*unlock)(H5FD_t *file)
|
||||
+ H5FD_mem_t fl_map[<int>H5FD_MEM_NTYPES]
|
||||
|
||||
# The main datatype for each driver
|
||||
ctypedef struct H5FD_t:
|
||||
--
|
||||
2.39.2 (Apple Git-143)
|
||||
|
||||
73
Add-page-buffer-and-fix-file-locking-tests.patch
Normal file
73
Add-page-buffer-and-fix-file-locking-tests.patch
Normal file
@ -0,0 +1,73 @@
|
||||
From eea4cbc6a4b6333182c8d9b43276f8269c49d980 Mon Sep 17 00:00:00 2001
|
||||
From: Aleksandar Jelenak <ajelenak@hdfgroup.org>
|
||||
Date: Wed, 3 Apr 2024 11:29:22 -0400
|
||||
Subject: [PATCH] Add page buffer and fix file locking tests
|
||||
|
||||
---
|
||||
h5py/tests/test_file.py | 36 ++++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 34 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/h5py/tests/test_file.py b/h5py/tests/test_file.py
|
||||
index 1aa38731..0ceddc37 100644
|
||||
--- a/h5py/tests/test_file.py
|
||||
+++ b/h5py/tests/test_file.py
|
||||
@@ -213,6 +213,8 @@ class TestPageBuffering(TestCase):
|
||||
fapl = f.id.get_access_plist()
|
||||
self.assertEqual(fapl.get_page_buffer_size(), (pbs, mm, mr))
|
||||
|
||||
+ @pytest.mark.skipif(h5py.version.hdf5_version_tuple > (1, 14, 3),
|
||||
+ reason='Requires HDF5 <= 1.14.3')
|
||||
def test_too_small_pbs(self):
|
||||
"""Page buffer size must be greater than file space page size."""
|
||||
fname = self.mktemp()
|
||||
@@ -222,6 +224,30 @@ class TestPageBuffering(TestCase):
|
||||
with self.assertRaises(OSError):
|
||||
File(fname, mode="r", page_buf_size=fsp-1)
|
||||
|
||||
+ @pytest.mark.skipif(h5py.version.hdf5_version_tuple < (1, 14, 4),
|
||||
+ reason='Requires HDF5 >= 1.14.4')
|
||||
+ def test_open_nonpage_pbs(self):
|
||||
+ """Open non-PAGE file with page buffer set."""
|
||||
+ fname = self.mktemp()
|
||||
+ fsp = 16 * 1024
|
||||
+ with File(fname, mode='w'):
|
||||
+ pass
|
||||
+ with File(fname, mode='r', page_buf_size=fsp) as f:
|
||||
+ fapl = f.id.get_access_plist()
|
||||
+ assert fapl.get_page_buffer_size()[0] == 0
|
||||
+
|
||||
+ @pytest.mark.skipif(h5py.version.hdf5_version_tuple < (1, 14, 4),
|
||||
+ reason='Requires HDF5 >= 1.14.4')
|
||||
+ def test_smaller_pbs(self):
|
||||
+ """Adjust page buffer size automatically when smaller than file page."""
|
||||
+ fname = self.mktemp()
|
||||
+ fsp = 16 * 1024
|
||||
+ with File(fname, mode='w', fs_strategy='page', fs_page_size=fsp):
|
||||
+ pass
|
||||
+ with File(fname, mode='r', page_buf_size=fsp-100) as f:
|
||||
+ fapl = f.id.get_access_plist()
|
||||
+ assert fapl.get_page_buffer_size()[0] == fsp
|
||||
+
|
||||
def test_actual_pbs(self):
|
||||
"""Verify actual page buffer size."""
|
||||
fname = self.mktemp()
|
||||
@@ -923,8 +949,14 @@ class TestFileLocking:
|
||||
with h5py.File(fname, mode="r", locking=True) as h5f_read:
|
||||
pass
|
||||
|
||||
- with h5py.File(fname, mode="r", locking='best-effort') as h5f_read:
|
||||
- pass
|
||||
+ if h5py.version.hdf5_version_tuple < (1, 14, 4):
|
||||
+ with h5py.File(fname, mode="r", locking='best-effort') as h5f_read:
|
||||
+ pass
|
||||
+ else:
|
||||
+ with pytest.raises(OSError):
|
||||
+ with h5py.File(fname, mode="r", locking='best-effort') as h5f_read:
|
||||
+ pass
|
||||
+
|
||||
|
||||
def test_unsupported_locking(self, tmp_path):
|
||||
"""Test with erroneous file locking value"""
|
||||
--
|
||||
2.39.2 (Apple Git-143)
|
||||
|
||||
24
Fix-wrong-file-driver-version-error.patch
Normal file
24
Fix-wrong-file-driver-version-error.patch
Normal file
@ -0,0 +1,24 @@
|
||||
From dbb202c14f91fd3d70735ffd6ef5737c12e88f4e Mon Sep 17 00:00:00 2001
|
||||
From: Aleksandar Jelenak <ajelenak@hdfgroup.org>
|
||||
Date: Sat, 17 Dec 2022 22:19:56 -0500
|
||||
Subject: [PATCH] Fix wrong file driver version error
|
||||
|
||||
---
|
||||
h5py/h5fd.pyx | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/h5py/h5fd.pyx b/h5py/h5fd.pyx
|
||||
index 04aff077..e9746057 100644
|
||||
--- a/h5py/h5fd.pyx
|
||||
+++ b/h5py/h5fd.pyx
|
||||
@@ -216,5 +216,7 @@ info.fl_map = [H5FD_MEM_SUPER, # default
|
||||
H5FD_MEM_SUPER, # lheap
|
||||
H5FD_MEM_SUPER # ohdr
|
||||
]
|
||||
+IF HDF5_VERSION >= (1, 14, 0):
|
||||
+ info.version = H5FD_CLASS_VERSION
|
||||
|
||||
fileobj_driver = H5FDregister(&info)
|
||||
--
|
||||
2.39.2 (Apple Git-143)
|
||||
|
||||
@ -3,11 +3,15 @@
|
||||
Summary: A high- and low-level interface to the HDF5 library from Python
|
||||
Name: python-h5py
|
||||
Version: 3.6.0
|
||||
Release: 2
|
||||
Release: 3
|
||||
License: BSD
|
||||
URL: http://www.h5py.org/
|
||||
Source0: https://github.com/h5py/h5py/archive/refs/tags/%{version}.tar.gz
|
||||
|
||||
Patch1: Add-new-H5FD_class_value_t-typedef.patch
|
||||
Patch2: Add-page-buffer-and-fix-file-locking-tests.patch
|
||||
Patch3: Fix-wrong-file-driver-version-error.patch
|
||||
|
||||
BuildRequires: gcc
|
||||
BuildRequires: hdf5-devel
|
||||
BuildRequires: python3-devel
|
||||
@ -34,6 +38,7 @@ A high- and low-level interface to the HDF5 library from Python3
|
||||
|
||||
%prep
|
||||
%setup -q -n %{modname}-%{version}
|
||||
%autopatch -p1
|
||||
%{__python3} api_gen.py
|
||||
|
||||
%build
|
||||
@ -52,6 +57,9 @@ A high- and low-level interface to the HDF5 library from Python3
|
||||
%{python3_sitearch}/%{modname}-%{version}-*.egg-info
|
||||
|
||||
%changelog
|
||||
* Thu Nov 7 2024 caixiaomeng <caixiaomeng2@huawei.com> - 3.6.0-3
|
||||
- fix build error due to hdf5 upgrade
|
||||
|
||||
* Wed Nov 23 2022 yanglongkang <yanglongkang@h-partners.com> - 3.6.0-2
|
||||
- fix Source incorrect in spec file
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user