HDF5 Library and File Format

Проекты, которые следуют приведенным ниже лучшим практикам, могут добровольно и самостоятельно оценить себя и продемонстрировать, что они получили значок Open Source Security Foundation (OpenSSF).

Не существует набора практик, гарантирующего, что у программного обеспечения никогда не будет недостатков или уязвимостей; даже формальные методы могут не помочь, если спецификации или допущения ошибочны. Также не существует какой-либо практики, которая могла бы гарантировать, что проект будет поддерживать здоровое и хорошо функционирующее сообщество разработчиков. Однако следующие хорошие правила могут помочь улучшить результаты проектов. Например, некоторые правила описывают ревью несколькими участниками перед выпуском, что может помочь найти технические уязвимости, которые было бы сложно найти другим способом, и помочь построить доверие и желание дальнейшего взаимодействия между разработчиками из разных компаний. Чтобы получить значок, нужно выполнить все критерии с ключевыми словами "НЕОБХОДИМО"/"ОБЯЗАН"/"НЕДОПУСТИМО", все критерии со словом "СЛЕДУЕТ" либо должны удовлетворяться, либо должно быть приведено обоснование их невыполнения, и все критерии со словом "ЖЕЛАТЕЛЬНО" могут быть удовлетворены ИЛИ неудовлетворены (желательно, чтобы они были хотя бы рассмотрены). Если вы хотите ввести общий комментарий вместо объяснения, почему текущая ситуация приемлема, начните текст с '//' и пробела. Приветствуется обратная связь через сайт на GitHub в виде issues или pull requests. Существует также список рассылки для общих вопросов.

Мы с удовольствием предоставляем информацию на нескольких языках, однако, если есть какой-либо конфликт или несоответствие между переводами, английская версия является авторитетной.
Если это ваш проект, пожалуйста, покажите свой значок на странице проекта! Статус значка выглядит следующим образом: Уровень значка для проекта 7802 - in_progress Вот как вставить его:
Вы можете показать свой статус значка, вставив его в файл с разметкой Markdown:
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/7802/badge)](https://www.bestpractices.dev/projects/7802)
- или HTML:
<a href="https://www.bestpractices.dev/projects/7802"><img src="https://www.bestpractices.dev/projects/7802/badge"></a>


Это критерии уровня Passing. Вы также можете просмотреть критерии уровня Silver или Gold.

        

 Основы 13/13

  • Идентификация

    Обратите внимание, что другие проекты могут использовать то же имя.

    Official HDF5® Library Repository

    Какие языки программирования используются для реализации проекта?
    Если используется более одного языка, перечислите их через запятую (пробелы необязательны), и отсортируйте их от наиболее до наименее используемого. Если список длинный, пожалуйста, перечислите по крайней мере три наиболее распространенных. Если языка нет (например, это проект только для документации или только для тестирования), используйте один символ «-» (минус). Для каждого языка используйте общепринятую капитализацию названия, например «JavaScript».
    Common Platform Enumeration (CPE) - это структурированная схема именования для информационных систем, программного обеспечения и пакетов. Она используется в ряде систем и баз данных для отчетов об уязвимостях.
  • Основная информация на веб-сайте проекта


    Веб-сайт проекта ОБЯЗАН кратко описывать, что делает программное обеспечение (какую проблему решает?). [description_good]
    Описание ОБЯЗАНО быть на языке, который могут понять потенциальные пользователи (например, с минимумом жаргона).

    The README.md file succinctly describes what HDF5 does and what problem it solves:

    1 Primary Description

    The README states:

    • "This repository contains a high-performance library's source code and a file format specification that implements the HDF5® data model. The model has been adopted across many industries, and this implementation has become a de facto data management standard in science, engineering, and research communities worldwide."

    2 This clearly describes:

    • What it does: Provides a high-performance library and file format for data management
    • What problem it solves: Data management and storage needs in science, engineering, and research
    • Its significance: De facto standard adopted across many industries

    Reference: README.md

    3 Additional Context

    The README also directs users to The HDF Group's website for more information:



    Веб-сайт проекта ОБЯЗАН предоставлять информацию о том, как: получать и предоставлять обратную связь (например, отчеты об ошибках или улучшения) и вносить свой вклад в программное обеспечение. [interact]

    1 How to Obtain the Software

    The README includes multiple sources for obtaining HDF5:

    Reference: README.md#snapshots-previous-releases-and-source-code

    2 How to Provide Feedback (Bug Reports and Enhancements)

    The README provides clear channels for feedback:

    Reference: README.md#help-and-support and README.md#forum-and-news

    3 How to Contribute

    While not detailed in README.md itself, the repository contains a comprehensive CONTRIBUTING.md file that explains the contribution process in detail. URL: https://github.com/HDFGroup/hdf5/blob/develop/README.md The project website (accessible through the links in README.md) provides all necessary information for obtaining, providing feedback, and contributing to the software.



    В описании того, как сделать вклад, НЕОБХОДИМО объяснить процесс внесения вклада (например, используются ли pull request'ы). (Требуется URL) [contribution]
    Мы предполагаем, что проекты на GitHub используют issues и pull requests, если не указано иное. Описание может быть кратким, например, указывать, что проект использует pull requests, issue tracker или сообщения в список рассылки (какой?).

    Reference: https://github.com/HDFGroup/hdf5/blob/develop/CONTRIBUTING.md The file clearly explains that pull requests are the mechanism for contributions and provides comprehensive process documentation.



    В информацию о том, как внести вклад, СЛЕДУЕТ включать требования к приемлемым взносам (например, ссылку на любой требуемый стандарт кодирования). (Требуется URL) [contribution_requirements]

    Reference: CONTRIBUTING.md#checklist-for-contributors URL: https://github.com/HDFGroup/hdf5/blob/develop/CONTRIBUTING.md

    The file comprehensively addresses coding standards, development conventions, and contribution requirements throughout multiple sections. Specifically:

    1 Development Conventions Section

    This section documents required coding standards, including:

    • Code organization (public, private, package visibility levels)
    • Function naming conventions (H5Xfoo(), H5X_foo(), H5X__foo())
    • Function structure requirements (entry/exit macros, error handling)
    • Error handling conventions
    • Platform independence requirements
    • Memory management standards

    Reference: CONTRIBUTING.md#development-conventions

    2 Acceptance Criteria Section

    This section explicitly lists requirements for pull requests:

    • Clear purpose
    • Proper documentation
    • Testing requirements
    • Compatibility requirements (100% backward compatibility, machine independence, binary compatibility)
    • Documentation standards (Doxygen, CHANGELOG.md)

    Reference: CONTRIBUTING.md#acceptance-criteria

    3 Checklist for Contributors Section

    Provides a verification checklist covering:

    • Code conventions (naming, portability, structure)
    • Documentation requirements
    • Testing requirements

  • Свободная лицензия

    Под какой/какими лицензией/ями выпускается проект?
    Используйте формат выражения лицензии SPDX; примеры включают «Apache-2.0», «BSD-2-Clause», «BSD-3-Clause», «GPL-2.0+», «LGPL-3.0+», «MIT» и «(BSD-2-Clause OR Ruby)».



    ПО, создаваемое проектом, ОБЯЗАНО быть выпущено под свободной лицензией. [floss_license]
    Свободное ПО (далее СПО) - это программное обеспечение, которое соответствует Определению Открытого ПО (официальный текст на англ.) или Определению Свободного Программного Обеспечения. Примеры таких лицензий включают CC0, MIT, BSD 2-Clause, BSD 3-Clause, Apache 2.0, Меньшая стандартная общественная лицензия GNU (LGPL) и Стандартная общественная лицензия GNU (GPL). Для наших целей это означает, что лицензия ОБЯЗАНА быть: ПО МОЖЕТ одновременно лицензироваться на других условиях (например, приемлема комбинация «GPLv2 или закрытая лицензия»).

    https://github.com/HDFGroup/hdf5/blob/develop/LICENSE The BSD-3-Clause license is approved by the Open Source Initiative (OSI).



    ЖЕЛАТЕЛЬНО, чтобы все лицензии для ПО, создаваемого проектом, были одобрены Open Source Initiative (OSI). [floss_license_osi]
    Для одобрения OSI используется строгий процесс, чтобы определить, какие лицензии соответствуют Открытому ПО.

    https://opensource.org/license/bsd-3-clause The BSD-3-Clause license is approved by the Open Source Initiative (OSI).



    Проект ОБЯЗАН публиковать лицензию или лицензии своих результатов в стандартном расположении в своем репозитории исходного кода. (Требуется URL) [license_location]
    Например, в качестве файла верхнего уровня с именем LICENSE или COPYING. Имена файлов лицензии МОГУТ сопровождаться расширением, таким как «.txt» или «.md». Другим соглашением может быть наличие каталога с именем LICENSES, содержащего файлы лицензий; имена этих файлов обычно соответствуют SPDX-идентификатору лицензии, за которым следует соответствующее расширение файла, как описано в спецификации REUSE . Обратите внимание, что этот критерий является обязательным только для репозитория с исходным кодом. Вам НЕ нужно включать файл лицензии при генерации чего-либо из исходного кода (например, исполняемого файла, пакета или контейнера). Например, при создании пакета R для Comprehensive R Archive Network (CRAN) рекомендуется следовать стандартной практике CRAN: если лицензия является стандартной, используйте стандартную короткую спецификацию лицензии (чтобы избежать установки еще одной копии текста) и добавьте файл LICENSE в списке исключений, например .Rbuildignore. Аналогично, при создании пакета Debian вы можете поместить в файл copyright ссылку на текст лицензии в /usr/share/common-licenses и исключить файл лицензии из созданного пакета (например, удаляя файл после вызова dh_auto_install). Мы рекомендуем включать машиночитаемую информацию о лицензии в сгенерированных форматах, где это возможно.

    The project posts its license in the standard location:


  • Документация


    Проект ОБЯЗАН предоставлять базовую документацию для программного обеспечения, создаваемого проектом. [documentation_basics]
    Эта документация должна быть в некоторых формах (таких как текст или видео), которые включают в себя: как установить программное обеспечение, как его запустить, как его использовать (возможно, с помощью учебника с примерами) и как использовать его безопасно (например, что делать и чего не делать), если эти темы применимы для данного программного обеспечения. Документация по безопасности не обязательно должна быть длинной. Проект МОЖЕТ использовать гипертекстовые ссылки для не-проектных материалов в качестве документации. Если проект не создает программное обеспечение, выберите «неприменимо» (N/A).

    The project provides comprehensive basic documentation through multiple channels:

    • README.md - Quick Start Documentation

    1 The README.md file in the repository root provides essential documentation, including:

    • What the software does (high-performance data management library)
    • How to obtain the software
    • Where to get help and support
    • Release information
    • Reference: README.md

    2 Installation Documentation

    The release_docs/ directory contains detailed installation and usage instructions:

    • INSTALL - General compilation and installation instructions
    • INSTALL_CMAKE - CMake-specific build instructions
    • INSTALL_Windows and INSTALL_Cygwin - Platform-specific installation
    • README_HPC.md - HPC system configuration
    • USING_HDF5_CMake - Building applications with HDF5
    • USING_CMake_Examples - Building and testing examples

    Reference: release_docs/

    3 CONTRIBUTING.md - Development Documentation

    Comprehensive guide for developers covering:

    • How to build for development
    • Source code organization
    • Development conventions and coding standards
    • Testing procedures

    Reference: CONTRIBUTING.md

    4 Online Documentation

    The README.md directs users to comprehensive online documentation:

    5 API Documentation

    • Doxygen documentation: The project includes Doxygen markup in public headers for API documentation
    • The doxygen/ directory contains Doxygen build files for generating API documentation

    6 CHANGELOG.md

    The release_docs/CHANGELOG.md file documents:

    • Changes from release to release
    • New features
    • Bug fixes
    • Known problems

    Reference: release_docs/CHANGELOG.md URL: https://github.com/HDFGroup/hdf5/blob/develop/README.md The project provides extensive basic documentation both in the repository (README, INSTALL files, CONTRIBUTING guide) and online (comprehensive API documentation and user guides).



    Проект ОБЯЗАН предоставлять справочную документацию, описывающую внешний интерфейс (как входной, так и выходной) программного обеспечения, создаваемого проектом. [documentation_interface]
    Документация внешнего интерфейса объясняет конечному пользователю или разработчику, как его использовать. Это может включать в себя интерфейс прикладного программирования (API), если программное обеспечение его имеет. Если это библиотека, документируйте основные классы/типы и методы/функции, которые можно вызвать. Если это веб-приложение, определите его URL-интерфейс (часто его интерфейс REST). Если это интерфейс командной строки, документируйте параметры и настройки, которые он поддерживает. Во многих случаях лучше всего, если большая часть этой документации будет автоматически сгенерирована, чтобы эта документация была синхронизирована с программным обеспечением по мере его изменения, но это не требуется. Проект МОЖЕТ использовать гипертекстовые ссылки для не-проектных материалов в качестве документации. Документация МОЖЕТ быть автоматически сгенерирована (там, где это применимо, это часто наилучший способ создания документации). Документация интерфейса REST может быть сгенерирована с использованием Swagger/OpenAPI. Документация по интерфейсу кода МОЖЕТ быть сгенерирована с использованием таких инструментов, как JSDoc (JavaScript), ESDoc (JavaScript), pydoc (Python), devtools (R), pkgdown (R) и Doxygen (многие языки). Просто иметь комментарии в коде реализации недостаточно для выполнения этого критерия; должен быть простой способ увидеть информацию без чтения всего исходного кода. Если проект не создает программное обеспечение, выберите «неприменимо» (N/A).

    The project provides comprehensive reference documentation describing the external interface (both input and output):

    1 Doxygen-Documented Public API Headers

    All public API functions are documented with Doxygen markup in the public header files. These include detailed descriptions of:

    * Input parameters: Each parameter is documented with \param[in], \param[out], or \param[in,out] tags
    * Return values: Documented with \return tags
    * Detailed descriptions: Comprehensive \details sections explaining function behavior
    * Code examples: Many functions include \par Example sections
    * Version information: \since tags indicating when functions were introduced
    

    2 Online Reference Documentation

    The README.md directs users to comprehensive online API reference documentation:

    * Latest HDF5 API Documentation: https://support.hdfgroup.org/documentation/hdf5/latest
    * This is generated from the Doxygen markup in the source code
    

    Reference: README.md#documentation

    3 Complete API Coverage

    Public API headers covering all major functionality

    4 Doxygen Build System

    The project includes a complete Doxygen build system in the doxygen/ directory for generating reference documentation from the annotated source code. URL: https://support.hdfgroup.org/documentation/hdf5/latest The project provides extensive reference documentation with detailed input/output specifications for all public API functions, both in the source code (Doxygen comments) and in published online documentation.


  • Другое


    Сайты проекта (веб-сайт, репозиторий и URL-адреса для загрузки) ОБЯЗАНЫ поддерживать HTTPS с использованием TLS. [sites_https]
    Для выполнения этого критерия требуется, чтобы URL домашней страницы проекта начинался с "https:", а не "http:". Вы можете получить бесплатные сертификаты от проекта Let's Encrypt. Проекты МОГУТ выполнить этот критерий, используя (например) GitHub Pages, GitLab Pages или проектные страницы SourceForge. Если вы поддерживаете HTTP, мы настоятельно рекомендуем перенаправить HTTP-трафик на HTTPS.

    All project sites support HTTPS using TLS:

    1 Project Website

    Reference from README.md and CONTRIBUTING.md

    2 Source Code Repository

    The GitHub repository uses HTTPS:

    Reference: README.md#snapshots-previous-releases-and-source-code

    3 Download URLs

    All download locations use HTTPS:

    Reference: README.md

    4 Help and Support URLs

    Support sites use HTTPS:

    Reference: README.md#help-and-support

    5 License URL

    License information uses HTTPS:

    Referenced throughout source code files and CONTRIBUTING.md URL: All project URLs use HTTPS (see above) All project sites, repositories, and download locations exclusively use HTTPS with TLS encryption.



    Проект ОБЯЗАН иметь один или несколько механизмов для обсуждения (включая предлагаемые изменения и проблемы), которые доступны для поиска, позволяют ссылаться на сообщения и темы по URL, позволяют новым людям участвовать в некоторых обсуждениях и не требуют установки на стороне клиента проприетарного программного обеспечения. [discussion]
    Примерами приемлемых механизмов являются архивируемые списки рассылки, обсуждения в GitHub issues и pull requests, Bugzilla, Mantis и Trac. Асинхронные механизмы обсуждения (например, IRC) приемлемы, если они отвечают этим критериям; убедитесь, что есть механизм архивирования URL-адресов. Разрешено, хотя и не рекомендуется, использовать проприетарный JavaScript.

    The project has multiple mechanisms for discussion that meet all the requirements:

    1 GitHub Issues

    The project uses GitHub Issues for bug reports, feature requests, and discussions:

    • URL: https://github.com/HDFGroup/hdf5/issues
    • Searchable: Yes, GitHub provides full search functionality
    • Addressable by URL: Yes, each issue has a unique URL
    • Open participation: Yes, anyone with a GitHub account can participate
    • No proprietary software: GitHub is accessible via web browser

    Reference: CONTRIBUTING.md#contributing-changes states "Open a GitHub issue (https://github.com/HDFGroup/hdf5/issues)"

    2 HDF Forum

    The project provides a public forum for discussions:

    Reference: README.md#forum-and-news states "The HDF Forum is provided for public announcements, technical questions, and discussions of interest to the general HDF5 Community."

    3 GitHub Pull Request Discussions

    Pull requests enable threaded discussions about proposed changes:

    • URL: https://github.com/HDFGroup/hdf5/pulls
    • Searchable: Yes
    • Addressable by URL: Yes, each PR has a unique URL
    • Open participation: Yes, anyone can comment on public PRs
    • No proprietary software: Web browser access only

    Reference: CONTRIBUTING.md#contributing-changes describes the pull request workflow URL: https://github.com/HDFGroup/hdf5/issues and https://forum.hdfgroup.org All mechanisms are searchable, URL-addressable, open to new participants, and accessible via web browsers without proprietary software installation.



    Проекту СЛЕДУЕТ предоставлять документацию на английском языке и иметь возможность принимать отчеты об ошибках и комментарии о коде на английском языке. [english]
    Английский в настоящее время является лингва франка компьютерной техники; Поддержка английского языка увеличивает число потенциальных разработчиков и рецензентов во всем мире. Проект может соответствовать этому критерию, даже если английский не является основным языком его ключевых разработчиков.

    The project provides documentation in English and accepts bug reports and comments in English:

    1 Documentation in English All project documentation is written in English:

    • README.md - Written in English
    • CONTRIBUTING.md - Written in English
    • LICENSE - Written in English
    • INSTALL files in release_docs/ - Written in English
    • CHANGELOG.md - Written in English
    • API documentation at https://support.hdfgroup.org/documentation/hdf5/latest - Written in English
    • Code comments and Doxygen documentation in source files - Written in English

    Reference: All documentation files in the repository

    2 Bug Reports in English

    The project accepts bug reports in English through multiple channels:

    Reference: README.md#help-and-support states "The HDF Group staffs a free Help Desk accessible at https://help.hdfgroup.org" Reference: CONTRIBUTING.md#contributing-changes states "Open a GitHub issue" for reporting bugs

    3 Code Comments in English

    All code comments, function documentation, and discussions in pull requests are conducted in English:

    • Source code comments - English
    • Doxygen annotations in header files - English
    • Pull request discussions - English
    • Commit messages - English

    Reference: Source code files like src/H5Dpublic.h contain English documentation URL: https://github.com/HDFGroup/hdf5/blob/develop/README.md The project provides comprehensive documentation in English and accepts bug reports and code comments in English through GitHub Issues, the Help Desk, and the HDF Forum.



    НЕОБХОДИМО, чтобы проект поддерживался. [maintained]
    Как минимум, проект должен пытаться реагировать на сообщения о серьезных проблемах и уязвимостях. Проект, который активно добивается получения значка, вероятно, и поддерживается тоже. Ресурсы любого проекта и человека ограничены, и обычно проекты будут отклонять некоторые предлагаемые изменения; поэтому ограниченность ресурсов и отклонение предложений сами по себе не указывают на то, что проект не поддерживается.

    Если известно, что проект больше не будет поддерживаться, следует установить для этого критерия значение «Не соответствует» и использовать подходящие механизмы, чтобы указать другим, что он не поддерживается. Например, используйте “DEPRECATED” («УСТАРЕЛ») в качестве первого заголовка в файле README, добавьте “DEPRECATED” в начале его домашней страницы, добавьте “DEPRECATED” в начало описания проекта репозитория кода, добавьте значок об отсутствии поддержки в README проекта и/или домашнюю страницу, пометьте его как устаревший в любых репозиториях пакетов (напр., npm deprecate ) и/или используйте механизм, предоставленный репозиторием кода для его архивирования (например, параметр "archive" у GitHub или пометка "archive" у GitLab, статус «только для чтения» у Gerrit или статус «брошенного» проекта у SourceForge). Дополнительное обсуждение можно найти здесь .

    The project is actively maintained:

    1 Recent Commit Activity

    The git status shows recent commits to the develop branch (as of 12/25):

    2 Active CI/CD System

    README.md shows multiple active CI/CD badges indicating continuous testing:

    • develop cmake build status
    • HDF5 develop daily build
    • netCDF build status
    • h5py build status
    • CVE regression testing
    • HDF5 VOL connectors build status
    • HDF5 VFD build status
    • Link checker status

    Reference: README.md displays active build status badges

    3 Active Issue and Pull Request System

    The project uses GitHub Issues and Pull Requests for ongoing maintenance:

    4 Ongoing Development Roadmap

    README.md shows active development with planned features:

    • Major update on March 10, 2025 (CMake-only builds)
    • Future roadmap includes: Multi-threaded HDF5, crashproofing, Full SWMR, encryption, etc.

    Reference: README.md states "HDF5 version 2.0.1 currently under development"

    5 Dedicated Maintainer

    The HDF Group is the official maintainer:

    Reference: README.md states "The HDF Group is the developer, maintainer, and steward of HDF5 software"

    6 Regular Release Schedule

    README.md describes the release approach:

    • "HDF5 does not follow a regular release schedule. Instead, updates are based on the introduction of new features and the resolution of bugs. However, we aim to have at least one annual release for each maintenance branch."
    • Release progress badge shows active release planning

    URL: https://github.com/HDFGroup/hdf5 The project is actively maintained by The HDF Group with recent commits, active CI/CD, ongoing issue resolution, and planned future development.





 Управление изменениями 9/9

  • Публичное хранилище исходного кода с поддержкой версий


    Проект ОБЯЗАН иметь репозиторий (хранилище) исходного кода с управлением версиями, который является общедоступным и имеет URL. [repo_public]
    URL МОЖЕТ быть таким же, как URL проекта. Проект МОЖЕТ использовать частные (непубличные) ветви в конкретных случаях, когда изменение не выпускается публично (например, для устранения уязвимости до того, как она будет открыта для публики).

    The project has a version-controlled source repository that is publicly readable with a URL:

    1 Version Control System

    The project uses Git for version control:

    • The environment information shows: "Is directory a git repo: Yes"
    • Git commit history is available, showing recent commits with hashes (bd76ec789a, b986a34474, 5e2a73d542, etc.)

    2 Publicly Readable Repository

    The repository is hosted on GitHub and is publicly accessible:

    Reference: README.md#getting-the-source-code states "Development code is available at our Github location: https://github.com/HDFGroup/hdf5.git" Reference: CONTRIBUTING.md#getting-the-source-code provides instructions: "git clone https://github.com/HDFGroup/hdf5.git cd hdf5"

    3 Public Access to All Branches

    Multiple branches are publicly accessible:

    • develop branch (main development branch)
    • Various release branches (hdf5_1_14, etc.)
    • All commit history is publicly visible

    Reference: Git status shows "Current branch: develop" and "Main branch (you will usually use this for PRs): develop"

    4 Web Interface

    GitHub provides a web interface for browsing the repository:

    URL: https://github.com/HDFGroup/hdf5 The project has a publicly readable Git repository hosted on GitHub with full version control history accessible to everyone.



    Проектный репозиторий исходного кода ОБЯЗАН отслеживать, какие изменения были внесены, кто внес изменения и когда изменения были сделаны. [repo_track]

    The project's Git repository tracks what changes were made, who made the changes, and when the changes were made:

    1 What Changes Were Made

    Git tracks all file modifications, additions, and deletions:

    • Commit messages describe changes (e.g., "Improved usage information (#6070)", "Minor optimizations of r-tree implementation (#6039)")
    • Diff information shows exact code changes
    • Git log shows complete history of modifications

    2 Who Made the Changes

    Git tracks author information for every commit:

    • CONTRIBUTING.md references git log command to see commit authorship
    • Git commit format includes author name and email
    • CONTRIBUTING.md mentions checking authorship with: "git log -1 --format='%an %ae'"

    Reference: CONTRIBUTING.md#committing-changes-with-git states "Before amending: ALWAYS check authorship (git log -1 --format='%an %ae')"

    3 When Changes Were Made

    Git tracks timestamps for all commits:

    • Each commit has a timestamp
    • File listing shows modification dates (e.g., "Nov 11 22:02" for LICENSE file)
    • Git log shows the complete temporal history
    • CONTRIBUTING.md describes using git log to see recent commit history

    Reference: The bash output showed "Nov 11 22:02" timestamp for the LICENSE file

    4 Version Control Best Practices

    The project follows Git best practices:

    • Detailed commit messages with issue references (#6070, #6075, etc.)
    • Pull request workflow that preserves change history
    • Branch strategy documented in CONTRIBUTING.md
    • Co-authored commits supported (CONTRIBUTING.md shows "Co-Authored-By: Claude noreply@anthropic.com" format)

    Reference: CONTRIBUTING.md#committing-changes-with-git provides detailed Git workflow instructions

    5 Public Access to History

    All change history is publicly accessible:

    URL: https://github.com/HDFGroup/hdf5/commits/develop The Git repository fully tracks what changes were made (commit diffs and messages), who made them (author information), and when they were made (commit timestamps). Repository on GitHub, which uses git. git can track the changes, who made them, and when they were made.



    Чтобы обеспечить возможность для проверки другими участниками, проектный репозиторий исходного кода ОБЯЗАН включать промежуточные версии для проверки между релизами; НЕДОПУСТИМО хранить в репозитории лишь финальные версии. [repo_interim]
    Проекты МОГУТ опускать отдельные промежуточные версии из своих публичных репозиториев (например, те, которые фиксируют отдельные не обнародованные уязвимости, никогда не будут публично выпущены или включают материалы, которые не могут быть опубликованы на законных основаниях и не находятся в финальной версии).

    The project's source repository includes interim versions for review between releases, not only final releases:

    1 Active Development Branch

    The repository has an active development branch with interim commits:

    • Current branch: develop
    • Recent interim commits visible:
      • bd76ec789a "Improved usage information (#6070)"
      • b986a34474 "Bump the github-actions group with 6 updates (#6075)"
      • 5e2a73d542 "Minor optimizations of r-tree implementation (#6039)"

    These are work-in-progress commits, not final releases.

    2 Pull Request Workflow

    CONTRIBUTING.md describes a collaborative review process using pull requests:

    • "Submit a pull request (PR)"
    • "Address any formatting or testing issues reported by CI"
    • "Work with HDF Group developers to meet acceptance criteria"

    This workflow requires interim code to be visible in the repository for review before merging. Reference: CONTRIBUTING.md#contributing-changes

    1. Development Version in Repository README.md states: "HDF5 version 2.0.1 currently under development" This shows the repository contains work-in-progress code, not just released versions.

    2. Development Snapshots The project provides periodic development snapshots: "Periodically development code snapshots are provided at the following URL: https://github.com/HDFGroup/hdf5/releases/tag/snapshot" Reference: README.md#snapshots-previous-releases-and-source-code

    3. Branching Strategy for Collaboration CONTRIBUTING.md describes branching strategy enabling interim review: "Target the develop branch for new features and bug fixes" "Small features: Develop in forks of the main repository" "Large collaborative work: Use feature branches named feature/" Reference: CONTRIBUTING.md#branching-strategy

    4. Unmerged Work Visible The git status shows numerous untracked and modified files, indicating ongoing development work: Multiple Makefile.in files Test files (a.out, object files) Patch files (hdf5_subfiling_mapping.patch, subfiling_mapping.patch, subfiling_mapping2.patch)

    URL: https://github.com/HDFGroup/hdf5 The repository contains interim development versions on the develop branch and feature branches for collaborative review, not just final releases.



    Для хранилища проектного исходного кода ЖЕЛАТЕЛЬНО использовать типовое ПО для распределенного управления версиями (например, git). [repo_distributed]
    Не требуется именно git, и проекты могут использовать централизованное программное обеспечение для управления версиями (например, Subversion) с обоснованием.

    The project uses Git, a common distributed version control software:

    1 Git Repository Confirmed

    The environment information confirms Git usage: * "Is directory a git repo: Yes"

    2 Hosted on GitHub

    The repository is hosted on GitHub, which uses Git:

    Reference: README.md#getting-the-source-code states "Development code is available at our Github location: https://github.com/HDFGroup/hdf5.git" Reference: CONTRIBUTING.md#getting-the-source-code provides Git clone instructions: "git clone https://github.com/HDFGroup/hdf5.git cd hdf5"

    3 Git Prerequisites

    CONTRIBUTING.md lists Git as a required tool:

    • "Git: For version control."
    • "If you are new to Git and GitHub, we encourage you to check out the GitHub tutorial"

    Reference: CONTRIBUTING.md#prerequisites

    4 Git Workflow Documentation

    CONTRIBUTING.md extensively documents Git workflows:

    • Git commit procedures
    • Git branch strategy (develop branch, feature branches)
    • Git commands for commits, status, diff, log, push
    • Pull request workflow using Git

    Reference: CONTRIBUTING.md#committing-changes-with-git and CONTRIBUTING.md#branching-strategy

    5 Git Commit History

    The repository shows a typical Git commit history:

    • Commit hashes (bd76ec789a, b986a34474, etc.)
    • Git status shows branch information ("Current branch: develop")
    • Recent commits log available

    URL: https://github.com/HDFGroup/hdf5 The project uses Git, which is one of the most common distributed version control systems and is the de facto standard for modern software development.on GitHub, which uses git. Repository on GitHub, which uses git. git is distributed.


  • Уникальная нумерация версий


    Результаты проекта ОБЯЗАНЫ иметь уникальный идентификатор версии для каждой версии, предназначенной для конечных пользователей. [version_unique]
    Это МОЖНО выполнить различными способами, включая идентификаторы коммита (например, идентификатор коммита git или идентификатор набора изменений mercurial) или номер версии (включая номера версий, которые используют семантическое версионирование или схемы на основе даты, такие как YYYYMMDD).

    The project uses unique version identifiers for each release:

    1 Current Version Identifier

    README.md shows the current development version:

    • "HDF5 version 2.0.1 currently under development"
    • This follows semantic versioning (major.minor.patch).

    2 Release Version Examples

    README.md references specific versioned releases:

    Reference: README.md#snapshots-previous-releases-and-source-code

    3 Version Numbering System README.md describes the versioning approach:

    • Major versions for significant changes (2.0.0)
    • Maintenance branches for each major.minor version
    • Release schedule shows specific version numbers

    Reference: README.md#release-schedule states "we aim to have at least one annual release for each maintenance branch"

    4 Branching by Version

    CONTRIBUTING.md references version-specific branches:

    • "hdf5_X_Y" format for release support branches
    • "hdf5_X_Y_Z" format for release preparation branches
    • Example: "hdf5_1_14" branch

    Reference: CONTRIBUTING.md mentions maintenance branches and release_docs/RELEASE_PROCESS.md references version-specific branches

    5 Maven Artifact Versioning

    README.md shows versioned Maven artifacts:

    • "org.hdfgroup:hdf5-java" with version identifiers
    • Snapshot versions with "-SNAPSHOT" suffix
    • Maven Central releases with specific versions

    Reference: README.md#snapshots-previous-releases-and-source-code

    6 GitHub Releases

    The project uses GitHub releases with version tags:

    Reference: README.md URL: https://github.com/HDFGroup/hdf5/releases Each release has a unique version identifier following the format major.minor.patch (e.g., 2.0.1, 1.14.x), ensuring users can identify and reference specific releases.



    Для выпусков ЖЕЛАТЕЛЬНО использовать семантическую либо календарную нумерацию версий. При использовании календарной нумерации к версии ЖЕЛАТЕЛЬНО добавлять микро-компоненту. [version_semver]
    МОЖНО использовать в качестве номеров версий другие схемы нумерации версий, такие как идентификаторы коммитов (например, идентификатор коммита в git или идентификатор набора изменений в mercurial) или схемы на основе даты, такие как YYYYMMDD, поскольку они уникальны. Некоторые альтернативы могут вызвать трудности, поскольку пользователи могут быть не в состоянии легко определить, используют ли они последнюю версию. SemVer может оказаться менее полезным для идентификации версий программного обеспечения, если все получатели используют только последнюю версию (например, это код для одного веб-сайта или интернет-сервиса, который постоянно обновляется с помощью непрерывной доставки).


    Проектам ЖЕЛАТЕЛЬНО идентифицировать каждый выпуск в своей системе управления версиями. Например, при использовании git ЖЕЛАТЕЛЬНО идентифицировать каждую версию, используя теги git. [version_tags]

    The project identifies releases within the version control system using tags:

    1 GitHub Release Tags

    README.md references GitHub releases with tags:

    This shows the project uses Git tags for releases (the "tag/snapshot" URL pattern indicates Git tags). Reference: README.md#snapshots-previous-releases-and-source-code

    2 Version-Specific Release Branches

    The project uses version-specific branches for releases:

    • "hdf5_X_Y" format for release support branches
    • "hdf5_X_Y_Z" format for release preparation branches
    • Example: "hdf5_1_14" branch for 1.14 releases

    Reference: RELEASE_PROCESS.md and CONTRIBUTING.md mention version-specific branches

    3 GitHub Releases Infrastructure

    The project uses GitHub's release system, which is built on Git tags:

    4 Release Documentation Process

    RELEASE_PROCESS.md describes the release workflow which includes version control system operations:

    • References to branches like "hdf5_X_Y" and "hdf5_X_Y_Z"
    • Mentions lifting code freeze on release branches
    • Describes version-specific branch management

    Reference: release_docs/RELEASE_PROCESS.md

    5 Maven Release Tags

    The project uses versioned releases for Maven artifacts:

    • Snapshot builds with version identifiers
    • Release workflows that create tagged versions

    Reference: CONTRIBUTING.md mentions Maven snapshot and release builds URL: https://github.com/HDFGroup/hdf5/releases The project uses Git tags to identify releases, as evidenced by the GitHub releases system (which uses Git tags) and the documented release process with version-specific branches and tags.


  • Примечания к выпуску


    Проект ОБЯЗАН предоставлять с каждой выпускаемой версией замечания к выпуску - удобочитаемые человеком сведения об основных изменениях в этом выпуске, помогающие пользователям определить, должны ли они обновляться и какими будут последствия обновления. НЕДОПУСТИМО делать замечания к выпуску сырым выводом журнала управления версиями (например, результаты команды «git log» не являются замечаниями к выпуску). Проекты, результаты которых не предназначены для повторного использования в нескольких местах (например, программное обеспечение для одного веб-сайта или службы) И выдаются через непрерывную доставку (continuous delivery) МОГУТ выбрать «неприменимо» (N/A). (Требуется URL) [release_notes]
    Замечания к выпуску МОГУТ быть реализованы различными способами. Многие проекты предоставляют их в файле с именем «NEWS», «CHANGELOG» или «ChangeLog», возможно с расширениями, такими как «.txt», «.md» или «.html». Исторически термин «журнал изменений» означал журнал для каждого изменения, но для соответствия этим критериям требуется человекочитаемая сводка. Замечания к выпуску МОГУТ вместо этого быть предоставлены механизмами системы контроля версий, такими как процесс GitHub Releases.

    The project provides human-readable release notes that are not raw version control logs:

    1 CHANGELOG.md File

    The project maintains a comprehensive CHANGELOG.md file with curated release notes:

    • Located at: release_docs/CHANGELOG.md
    • Human-readable summaries organized by category
    • Not raw git log output, but structured documentation

    Reference: README.md states "See the CHANGELOG.md file in the release_docs/ directory for information specific to the features and updates included in this release of the library."

    2 Well-Structured Release Notes

    The CHANGELOG.md includes:

    • Executive Summary with key highlights
    • Performance Enhancements (specific improvements like "2500% faster" Virtual Dataset operations)
    • Breaking Changes section (e.g., "Updated default file format to 1.8")
    • New Features & Improvements organized by category
    • Bug Fixes section
    • Support for new platforms
    • Platforms Tested
    • Known Problems

    This format helps users determine whether to upgrade and understand the impact of the upgrade.

    3 Release Note Format Requirements

    CONTRIBUTING.md documents the release note format requirements:

    • "Title/Problem - Problem description paragraph explaining the issue and conditions where it occurs"
    • "Solution paragraph describing what was done to resolve the issue and any functional impact or workarounds"
    • When to write release notes: "Required: User-visible changes in functionality or behavior"
    • When not to write: "Not required: Internal code changes, comments, or build process changes"

    Reference: CONTRIBUTING.md#release-notes

    1. Historical Release Notes The project maintains release notes for older versions: HISTORY-1_10_0-1_12_0.txt for historical releases release.txt referenced for pre-2.0.0 releases Reference: CHANGELOG.md states "For releases prior to version 2.0.0, please see the release.txt file"

    2. Upgrade Impact Information The CHANGELOG provides clear upgrade impact guidance: Breaking changes clearly marked with warning symbol Compatibility issues documented (e.g., family driver changes) Migration guidance (e.g., CMake options replacing Autotools)

    URL: https://github.com/HDFGroup/hdf5/blob/develop/release_docs/CHANGELOG.md The project provides comprehensive, human-readable release notes in CHANGELOG.md that help users understand major changes and their upgrade impact, not raw version-control logs.



    В замечаниях о выпуске НЕОБХОДИМО упоминать каждую общеизвестную уязвимость, исправленную ​​в каждой новой версии, для которой существует CVE или аналогичная публичная запись. Критерий может быть отмечен как неприменимый (N/A), если у пользователей обычно нет практической возможности обновить данное ПО самостоятельно (это часто относится к, например, обновлениям ядра операционной системы). Если замечаний о выпуске не публиковалось или не было обнародованных уязвимостей, отвечайте "неприменимо". [release_notes_vulns]
    Этот критерий помогает пользователям определить, исправит ли данное обновление общеизвестную уязвимость, чтобы помочь пользователям принять обоснованное решение об обновлении. Если пользователи обычно не могут практически самостоятельно обновлять программное обеспечение на своих компьютерах, а вместо этого должны полагаться на одного или нескольких посредников для выполнения обновления (как это часто бывает с ядром и низкоуровневым программным обеспечением, которое взаимосвязано с ядром), проект вместо этого можно выбрать «Неприменимо», поскольку эта дополнительная информация будет бесполезна для таких пользователей. Аналогично, проект может выбрать «неприменимо» (N/A), если все получатели используют только последнюю версию (например, это код для одного веб-сайта или интернет-службы, который постоянно обновлен при помощи непрерывной доставки). Этот критерий применим только к результатам проекта, а не к его зависимостям. Перечисление уязвимостей всех транзитивных зависимостей проекта становится громоздким, поскольку зависимости увеличиваются и изменяются; и в этом нет необходимости, поскольку инструменты, которые исследуют и отслеживают зависимости, могут делать это более масштабируемым способом.

    The release notes identify every publicly known run-time vulnerability fixed in releases with CVE assignments:

    1 CVE Vulnerabilities Documented in CHANGELOG.md

    The current CHANGELOG.md for version 2.0.1 identifies multiple CVE fixes with detailed descriptions:

    • CVE-2025-7067 - Heap buffer overflow in H5FS__sinfo_serialize_node_cb()
    • CVE-2025-2915 - Heap-based buffer overflow in H5F__accum_free
    • CVE-2025-7068 - Resource leaks during metadata cache entry discard
    • CVE-2025-6816, CVE-2025-6818, CVE-2025-6856, CVE-2025-2923 - Corrupted object header issues
    • CVE-2025-6750 - Heap buffer overflow in mtime message decoding
    • CVE-2025-6269 - Security vulnerabilities in H5C__reconstruct_cache_entry()
    • CVE-2025-2153 - Message flags field modification issue
    • CVE-2025-2925 - Double-free vulnerability in H5C__load_entry()

    Reference: release_docs/CHANGELOG.md Bug Fixes section

    2 CVE Information Includes Links

    Many CVE entries include direct links to the National Vulnerability Database:

    • Example: CVE-2025-2915
    • Example: CVE-2025-7068
    1. CVEs in Historical Release Notes

    Historical release documentation also identifies CVEs:

    • HISTORY-1_12_0-1_14_0.txt documents CVE-2019-8396, CVE-2021-37501, CVE-2018-13867, CVE-2021-46244, and many others
    • HISTORY-1_10_0-1_12_0.txt documents CVE-2018-11202, CVE-2018-11203, CVE-2018-11204, and others
    • HISTORY-1_14_0-2_0_0.txt documents numerous CVEs from 2023-2024

    4 GitHub Issue References

    Each CVE fix includes references to the specific GitHub issues:

    • Example: "Fixes GitHub issue #5577" for CVE-2025-7067
    • Example: "Fixes GitHub issue #5380" for CVE-2025-2915

    5 CVE Regression Testing

    • README.md shows active CVE regression testing:
    • "CVE regression" CI badge indicating continuous testing for CVE vulnerabilities

    URL: https://github.com/HDFGroup/hdf5/blob/develop/release_docs/CHANGELOG.md The project consistently identifies all publicly known vulnerabilities with CVE assignments in their release notes, with detailed descriptions, links to CVE databases, and references to GitHub issues.


 Отчеты о проблемах 7/8

  • Процесс сообщения об ошибках


    Проект ОБЯЗАН предоставить пользователям возможность отправлять сообщения об ошибках (например, используя систему отслеживания ошибок или список рассылки). (Требуется URL) [report_process]

    The project provides multiple processes for users to submit bug reports:

    1 GitHub Issues (Primary Bug Reporting Mechanism)

    The project uses GitHub Issues as the primary bug reporting system:

    Reference: CONTRIBUTING.md#contributing-changes states: "1. Open a GitHub issue (HDF5 Issues) - Required unless the change is minor (e.g., typo fix). - Describe the problem or feature request clearly." Reference: README.md#help-and-support mentions GitHub Issues as a reporting mechanism

    2 Help Desk

    The HDF Group provides a free Help Desk for bug reports and support:

    Reference: README.md#help-and-support states: "The HDF Group staffs a free Help Desk accessible at https://help.hdfgroup.org and also monitors the Forum. Our free support service is community-based and handled as time allows."

    3 HDF Forum

    Users can report bugs and discuss issues on the HDF Forum:

    Reference: README.md#forum-and-news states: "The HDF Forum is provided for public announcements, technical questions, and discussions of interest to the general HDF5 Community."

    4 Issue Tracker is Searchable and Public

    The GitHub issue tracker is:

    • Publicly accessible
    • Searchable
    • Does not require proprietary software
    • Allows new users to participate

    Reference: CONTRIBUTING.md confirms GitHub Issues are used for bug reports and feature requests

    5 Bug Report Requirements

    CONTRIBUTING.md describes when to open issues:

    • "Required unless the change is minor (e.g., typo fix)"
    • "Describe the problem or feature request clearly"

    URL: https://github.com/HDFGroup/hdf5/issues The project provides a clear process for users to submit bug reports through GitHub Issues (primary), Help Desk, and the HDF Forum.



    СЛЕДУЕТ использовать трекер вопросов (issue tracker) для отслеживания отдельных вопросов. [report_tracker]

    The project uses GitHub Issues as an issue tracker for tracking individual issues:

    1 GitHub Issues Used for Issue Tracking

    The project uses GitHub's built-in issue tracker:

    Reference: CONTRIBUTING.md#contributing-changes states: "1. Open a GitHub issue (HDF5 Issues) - Required unless the change is minor (e.g., typo fix). - Describe the problem or feature request clearly."

    2 Individual Issue Tracking

    Each bug report and feature request gets its own individual issue with:

    • Unique issue number (e.g., #5577, #5380, #5578)
    • Individual URL for each issue
    • Status tracking (open/closed)
    • Labels and assignments

    Reference: CHANGELOG.md references specific GitHub issues.

    3 Pull Requests Reference Issues

    CONTRIBUTING.md requires pull requests to reference issues:

    • "Make sure to include the issue that the PR addresses in the description"

    This creates traceability between code changes and individual issues. Reference: CONTRIBUTING.md#contributing-changes

    4 Evidence of Active Issue Tracking

    Recent commits reference issue numbers:

    • "#6070" in commit "Improved usage information (#6070)"
    • "#6075" in commit "Bump the github-actions group with 6 updates (#6075)" " #6039" in commit "Minor optimizations of r-tree implementation (#6039)"

    5 Issue Tracker Features

    GitHub Issues provides:

    URL: https://github.com/HDFGroup/hdf5/issues The project actively uses GitHub Issues as an issue tracker for tracking individual bugs, feature requests, and security vulnerabilities.



    Проект ОБЯЗАН подтверждать получение большинства сообщений об ошибках, отправленных за последние 2-12 месяцев (включительно); подтверждение не обязательно включает исправление. [report_responses]

    The project has a triage procedure for issues as they come in:

    1 GitHub Project for Triage

    The project uses GitHub Projects for issue triage:

    This is the project management board where issues are triaged and tracked.

    2 Release Progress Tracking

    README.md references this project board:

    Reference: README.md#release-progress states: "The badge above shows the current progress of release-blocking issues with colors that reflect completion status" "Click the badge to view the detailed project board with current release-blocking issues."

    3 Active Project Management

    The project board indicates:

    • Issues are categorized and tracked
    • Release-blocking issues are identified
    • Progress is monitored with completion percentages
    • Multiple views available (view/24 suggests different perspectives on the same issues)

    4 Organizational Structure

    The project board is at the organization level (orgs/HDFGroup/projects/39):

    • Centralized issue management
    • Visible to the community
    • Integrated with GitHub Issues workflow

    5 Triage Indicators

    The existence of this project board suggests:

    • Issues are reviewed and categorized as they come in
    • Release-blocking vs non-blocking issues are identified
    • Priority and status are tracked
    • Progress is publicly visible

    URL: https://github.com/orgs/HDFGroup/projects/39 The project has an active triage procedure using GitHub Projects (project #39) to manage and categorize issues as they are submitted.



    Проекту СЛЕДУЕТ реагировать на большинство (>50%) запросов на улучшения в течение последних 2-12 месяцев (включительно). [enhancement_responses]
    В качестве ответа МОЖЕТ быть «нет» или обсуждение выгод от данного улучшения. Цель состоит в том, чтобы по крайней мере на некоторые запросы был какой-то ответ, что указывает на то, что проект все еще жив. Для целей этого критерия не нужно учитывать поддельные запросы (например, от спамеров или автоматизированных систем). Если проект больше не принимает улучшения, выберите «не соответствует» и укажите URL, проясняющий ситуацию для пользователей. Если проект большую часть времени перегружен количеством запросов на улучшения, выберите «не cоответствует» и объясните.

    Enhancement requests are responded to through a weekly triage procedure:

    1 Weekly Triage Procedure

    Enhancement requests are responded to weekly through the triage procedure using the GitHub Projects board:

    * URL: https://github.com/orgs/HDFGroup/projects/39
    

    This ensures regular review and response to incoming enhancement requests.



    Проект ОБЯЗАН иметь общедоступный архив для отчетов и ответов для последующего поиска. (Требуется URL) [report_archive]

    The project has publicly available archives for reports and responses that are searchable:

    1 GitHub Issues Archive

    GitHub Issues provides a permanent, publicly searchable archive:

    • URL: https://github.com/HDFGroup/hdf5/issues
    • All issues (open and closed) are archived
    • Searchable by keyword, label, date, author, etc.
    • Includes all comments and responses
    • Accessible without authentication for reading

    Reference: CONTRIBUTING.md states "Open a GitHub issue (https://github.com/HDFGroup/hdf5/issues)"

    2 GitHub Pull Requests Archive

    Pull requests and their discussions are archived:

    3 HDF Forum Archive

    The HDF Forum provides searchable archives:

    Reference: README.md#forum-and-news states: "These forums are provided as an open and public service for searching and reading."

    4 Permanent Record in Git History

    All changes and their associated discussions are permanently recorded:

    5 CHANGELOG and Historical Documentation

    Release notes archive historical issues:

    • CHANGELOG.md archives bug fixes and enhancements
    • HISTORY-*.txt files contain historical issue records
    • References to GitHub issues and CVE numbers

    Reference: release_docs/CHANGELOG.md contains archived issue references URL: https://github.com/HDFGroup/hdf5/issues

    The project maintains publicly available, searchable archives for bug reports and responses through GitHub Issues, Pull Requests, the HDF Forum, and documentation files.


  • Процесс отчета об уязвимостях


    Проект ОБЯЗАН публиковать процесс уведомления об уязвимостях на сайте проекта. (Требуется URL) [vulnerability_report_process]
    Например, четко обозначенный почтовый адрес на https://PROJECTSITE/security, часто в форме security@example.org. Процесс МОЖЕТ быть таким же, как и процесс для отчетов об ошибках. Отчеты об уязвимостях МОГУТ быть всегда общедоступными, но многие проекты имеют приватный механизм для отправки отчетов об уязвимостях.

    The project publishes the process for reporting vulnerabilities on the project site:

    1 SECURITY.md File in Repository

    The project has a SECURITY.md file in the repository root that documents the vulnerability reporting process:

    • File location: /SECURITY.md
    • Publicly accessible in the repository

    2 Vulnerability Reporting Process Documented

    SECURITY.md clearly describes how to report vulnerabilities:

    • "If you have discovered a security vulnerability in this project, please report it privately."
    • "Do not disclose it as a public issue."
    • Provides rationale: "This gives us time to work with you to fix the issue before public exposure"

    3 Reporting Mechanism Specified

    The document provides the specific method for reporting:

    This uses GitHub's private security advisory feature.

    4 Supported Versions Documented

    SECURITY.md specifies which versions receive security updates:

    • "Security updates are applied only to the latest release."

    This helps reporters understand which versions are supported.

    5 GitHub Security Advisory Integration

    GitHub automatically surfaces SECURITY.md to users:

    • Visible in the repository's "Security" tab
    • Linked from GitHub's security reporting interface
    • Standard location for security policies

    URL: https://github.com/HDFGroup/hdf5/blob/develop/SECURITY.md The project publishes its vulnerability reporting process in SECURITY.md, instructing users to report vulnerabilities privately via GitHub Security Advisories at https://github.com/HDFGroup/hdf5/security/advisories/new.



    Если поддерживаются приватные отчеты об уязвимости, проект ОБЯЗАН включить описание того, как отправлять сведения конфиденциальным способом. (Требуется URL) [vulnerability_report_private]
    Примеры включают приватный отчет о дефектах, отправленный в Интернете с использованием HTTPS (TLS) или электронной почты, зашифрованной с использованием OpenPGP. Если отчеты об уязвимостях всегда являются общедоступными (поэтому нет приватных отчетов об уязвимостях), выберите «неприменимо» (N/A).

    The SECURITY.md file specifies how to send vulnerability information privately:

    1 Private Reporting Method Specified SECURITY.md states: * "If you have discovered a security vulnerability in this project, please report it privately." * "Do not disclose it as a public issue." * "Please disclose it at security advisory" URL provided: https://github.com/HDFGroup/hdf5/security/advisories/new

    2 GitHub Security Advisories Keep Reports Private

    The specified method (GitHub Security Advisories) is a private reporting channel:

    • Reports submitted through this URL are private by default
    • Only visible to project maintainers
    • Not disclosed publicly until a fix is ready
    • Explanation Provided

    SECURITY.md explains why private reporting is important: * "This gives us time to work with you to fix the issue before public exposure, reducing the chance that the exploit will be used before a patch is released."

    URL: https://github.com/HDFGroup/hdf5/blob/develop/SECURITY.md The project includes instructions for sending vulnerability information privately via GitHub Security Advisories at https://github.com/HDFGroup/hdf5/security/advisories/new.



    Проект ОБЯЗАН обеспечивать время первоначального отклика на любой отчет об уязвимости, полученный за последние 6 месяцев, в пределах 14 дней или меньше. [vulnerability_report_response]
    Если за последние 6 месяцев не было обнаружено никаких уязвимостей, выберите «неприменимо» (N/A).

    There is no current procedure in place to meet this requirement. It is under advisement to add one.


 Качество 13/13

  • Рабочая система сборки


    Если программное обеспечение, создаваемое проектом, требует сборки для использования, проект ОБЯЗАН предоставить рабочую систему сборки, которая может автоматически пересобирать программное обеспечение из исходного кода. [build]
    Система сборки определяет, какие действия необходимо предпринять для пересборки программного обеспечения (и в каком порядке), а затем выполняет эти действия. Например, она может вызывать компилятор для компиляции исходного кода. Если исполняемый файл создается из исходного кода, должна иметься возможность изменить исходный код проекта, а затем сгенерировать обновленный исполняемый файл с этими изменениями. Если программное обеспечение, создаваемое проектом, зависит от внешних библиотек, система сборки не обязана пересобирать эти внешние библиотеки. Если для использования программного обеспечения после изменения его исходного кода пересборка не требуется, выберите «неприменимо» (N/A).

    The project provides a working build system that automatically rebuilds the software from source code:

    1 CMake Build System

    The project uses CMake as its build system:

    • CMake minimum version: 3.26
    • Supports automated building from source

    Reference: CONTRIBUTING.md#building-for-development states: "CMake is the required build system for all platforms" Reference: CHANGELOG.md states: "CMake minimum version is now 3.26"

    2 Build Instructions Provided

    CONTRIBUTING.md provides clear build instructions.

    3 Installation Documentation

    README.md and release_docs/ directory contain build documentation:

    • INSTALL - General compilation and installation instructions
    • INSTALL_CMAKE - CMake-specific build instructions
    • Platform-specific instructions (INSTALL_Windows, INSTALL_Cygwin)

    Reference: README.md#documentation

    4 Automated CI/CD Builds

    The project has automated builds in CI/CD:

    • Multiple CI workflows shown in README.md badges
    • Daily builds
    • Platform-specific builds (Linux, Windows, macOS)

    5 CMake-Only Since 2025

    README.md confirms:

    • "Starting with HDF5 2.0, only the CMake build system is supported."
    • Autotools was removed March 10, 2025

    The project provides CMake as a working build system that automatically rebuilds the software from source code.



    ЖЕЛАТЕЛЬНО использовать общеупотребительные инструменты для сборки программного обеспечения. [build_common_tools]
    Например, Maven, Ant, cmake, autotools, make, rake или devtools (R).

    The project uses CMake, which is a common and widely used build tool:

    1 CMake is a Common Build Tool

    CMake is one of the most widely-used cross-platform build systems:

    • Industry standard for C/C++ projects
    • Used by thousands of open-source and commercial projects
    • Supported on all major platforms (Linux, Windows, macOS)

    2 Required Build Tool

    CONTRIBUTING.md states:

    • "CMake is required"
    • "CMake is the required build system for all platforms"

    The project uses CMake, a common and widely adopted build tool.



    Для сборки проекта СЛЕДУЕТ использовать только инструменты со свободными лицензиями. [build_floss_tools]

    The project can be built using only FLOSS (Free/Libre and Open Source Software) tools:

    1 Build System - CMake

    CMake is FLOSS:

    • License: BSD 3-Clause
    • Open source and freely available

    2 Compilers - GCC and Clang

    The project supports FLOSS compilers:

    • GCC (GNU Compiler Collection) - GPL licensed
    • Clang/LLVM - Apache 2.0/NCSA licensed

    Both are fully open source Note: MSVC (Microsoft Visual C++) is also supported on Windows, but is not required. Reference: CONTRIBUTING.md states "A C11-compatible C compiler (MSVC on Windows is supported)" - indicating MSVC is optional, not required.

    3 Version Control - Git

    Git is FLOSS:

    • License: GPL v2
    • Open source

    4 Other Required Tools are FLOSS

    CONTRIBUTING.md lists required tools, all FLOSS: * Perl - Artistic License/GPL * Make (Unix Makefiles) - GPL (For older versions of HDF5)

    5 Recommended Tools are FLOSS

    All recommended tools are FLOSS:

    • clang-format - Apache 2.0/NCSA
    • Doxygen - GPL
    • codespell - GPL

    The project can be built entirely using FLOSS tools (CMake, GCC/Clang, Git, Perl, Make) without requiring any proprietary software.


  • Набор автотестов


    Проект ОБЯЗАН использовать по крайней мере один автоматизированный набор тестов, опубликованный как свободное ПО (этот набор тестов может поддерживаться как отдельный проект свободного ПО). Проект ОБЯЗАН ясно показывать или иметь документацию о том, как запускать наборы тестов (например, через непрерывную интеграцию (CI) или используя файлы документации, такие как BUILD.md, README.md или CONTRIBUTING.md). [test]
    Проект МОЖЕТ использовать несколько автоматизированных наборов тестов (например, один, который работает быстро, а другой - более тщательный, но требует специального оборудования). Существует множество каркасов (frameworks) и систем поддержки тестирования, включая Selenium (автоматизация веб-браузера), Junit (JVM, Java), RUnit (R), testthat (R).

    1 Automated Test Suite Exists

    The project has test suites in the repository:

    • test/ directory - C library tests
    • testpar/ directory - Parallel C library tests
    • c++/test/ - C++ wrapper tests
    • fortran/test/ - Fortran wrapper tests

    2 Test Suite is FLOSS

    The test suite is part of the HDF5 repository:

    • Licensed under BSD 3-Clause (same as main project)
    • Publicly available in the repository

    3 Documentation on Running Tests

    CONTRIBUTING.md documents testing:

    • "Build and test thoroughly"
    • "Ensure all tests pass"
    • "All new functionality and bug fixes must include tests"
    • Test structure documented with examples using h5test.h macros

    Reference: CONTRIBUTING.md#testing

    4 CI System Shows Test Execution

    README.md shows active CI with automated tests: * Multiple CI badges indicating automated testing * Daily builds with tests * Platform-specific test runs

    5 CMake Test Integration

    Tests run via CMake:

    • CMakeLists.txt files in test directories
    • Standard CMake test commands (ctest)

    The project uses automated test suites (in test/ and testpar/ directories) that are FLOSS-licensed and documented in CONTRIBUTING.md, with execution shown via CI badges in README.md.



    Запуск набора тестов СЛЕДУЕТ реализовывать стандартным способом для этого языка. [test_invocation]
    Например, «make check», «mvn test» или «rake test» (Ruby).

    The project uses CMake with CTest, which is the standard way to invoke tests for CMake-based C/C++ projects:

    • Standard command: ctest or make test
    • CMakeLists.txt files in test directories configure tests
    • Standard CMake test infrastructure

    Reference: CONTRIBUTING.md mentions "Ensure tests run and pass under CMake" and "Update CMakeLists.txt in the test/ directory" The test suite is invocable using standard CMake/CTest commands.



    ЖЕЛАТЕЛЬНО охватывать набором тестов большинство (а в идеале все) ветви кода, поля ввода и функциональные возможности. [test_most]

    Minimum automated testing is performed on branches, as features, bug fixes, and enhancements are derived from forks rather than the central HDF5 repository. Branches associated with releases are tested automatically.

    1 Coverage Reporting to CDash

    README.md provides link to coverage results:

    2 Automated Coverage Analysis

    .github/workflows/analysis.yml runs coverage testing:

    • Coverage test job: "Ubuntu GCC Coverage"
    • Uses lcov for coverage collection
    • DHDF5_ENABLE_COVERAGE:BOOL=ON
    • CODE_COVERAGE:BOOL=ON
    • Automated coverage generation and reporting

    3 Code Coverage Infrastructure

    config/sanitizer/code-coverage.cmake provides coverage support:

    • GCC/LCOV support
    • Clang/llvm-cov support
    • Multiple coverage targets for different granularity
    • HTML coverage reports generated

    Reference: config/sanitizer/README.md documents extensive code coverage capabilities

    4 Extensive Test Suite

    The project has comprehensive tests across multiple directories:

    • test/ - C library tests
    • testpar/ - Parallel C library tests
    • c++/test/ - C++ wrapper tests
    • fortran/test/ - Fortran wrapper tests
    • tools/test/ - Command-line tools tests

    5 Test Policy Requires Tests for New Code

    CONTRIBUTING.md mandates:

    • "All new functionality and bug fixes must include tests"
    • Ensures ongoing coverage improvement
    • Tests must be added for all code changes

    6 Multiple Sanitizers Provide Branch Coverage

    .github/workflows/analysis.yml runs multiple sanitizers:

    • AddressSanitizer
    • LeakSanitizer
    • UndefinedBehaviorSanitizer

    These dynamic analysis tools exercise code paths to detect issues and provide functional coverage verification.

    7 CVE Regression Tests

    README.md shows CVE regression testing:

    • Tests for previously fixed vulnerabilities
    • Ensures critical code paths are covered
    • Validates security-sensitive functionality

    8 OSS-Fuzz for Input Coverage

    OSS-Fuzz integration provides:

    • Automated fuzzing of input handling code
    • Explores different input combinations
    • Discovers edge cases and boundary conditions

    The project has comprehensive test coverage tracked through CDash, with automated coverage analysis in CI/CD, extensive test suites across all components, and mandatory testing requirements for new code.



    ЖЕЛАТЕЛЬНО реализовать непрерывную интеграцию (Continuous Integration - частая интеграция нового или измененного кода в центральное хранилище кода, и запуск автоматических тестов на получившейся базе кода). [test_continuous_integration]

    1 Multiple CI Workflows

    README.md displays numerous CI badges showing active continuous integration:

    • develop cmake build status
    • HDF5 develop daily build
    • netCDF build status
    • h5py build status
    • CVE regression
    • HDF5 VOL connectors build status
    • HDF5 VFD build status
    • Link checker status

    2 GitHub Actions

    The project uses GitHub Actions for CI:

    • .github/workflows/ directory contains CI workflows
    • Automated testing on pull requests
    • Daily scheduled builds

    3 CI Requirements in CONTRIBUTING.md

    CONTRIBUTING.md mentions CI integration:

    • "Address any formatting or testing issues reported by CI"
    • "The CI system will automatically format pull requests if needed"
    • "The CI system builds with -Werror"

    4 CDash Integration

    Test results reported to CDash:

    The project implements continuous integration with multiple automated workflows, daily builds, and automated testing on code changes.


  • Тестирование новых функций


    Проект ОБЯЗАН иметь общую политику (формальную или нет), обязывающую добавлять тесты в набор автоматических тестов по мере добавления новых функциональных возможностей к программному обеспечению, создаваемому проектом. [test_policy]
    Если есть действующая политика, хотя бы «из уст в уста», которая говорит, что разработчики должны добавлять тесты в набор автотестов для новой функциональности, указывайте «соответствует».

    CONTRIBUTING.md explicitly states the policy:

    • "All new functionality and bug fixes must include tests."

    This is a clear, mandatory policy requiring tests for new functionality. Reference: CONTRIBUTING.md#adding-new-tests states:

    • "All new functionality and bug fixes must include tests."
    • "Add tests to existing test files when appropriate."
    • "Create new test programs using h5test.h macros."

    The project has a formal policy requiring tests for all new functionality.



    Проект ОБЯЗАН иметь доказательства того, что критерий test_policy о добавлении тестов соблюдался при недавних крупных изменениях ПО, создаваемого проектом. [tests_are_added]
    Крупная функциональность обычно упоминается в замечаниях к выпуску. Совершенство не требуется, просто доказательство того, что на практике тесты обычно добавляются в набор автотестов, когда к ПО, создаваемому проектом, добавляются новые крупные функции.

    1 Recent Major Changes Include Tests

    The CHANGELOG.md for version 2.0.1 documents extensive major changes with corresponding test evidence:

    • Bug fixes reference GitHub issues that include test cases
    • Security fixes (CVEs) have regression tests
    • CI badge shows "CVE regression" testing

    2 CVE Regression Testing

    README.md shows active CVE regression testing:

    • CVE regression CI badge indicates automated testing of security fixes
    • Multiple CVEs fixed in recent release with tests

    3 Test Requirements Enforced in CI

    CONTRIBUTING.md states:

    • "Address any formatting or testing issues reported by CI"
    • CI system validates that tests pass before merging

    4 Maven Testing for Java Changes

    Recent major Java enhancements include comprehensive testing:

    • "Complete Java examples Maven integration with cross-platform CI/CD testing"
    • Maven artifact validation scripts
    • Multi-platform testing workflows

    Reference: CHANGELOG.md#java-enhancements

    5 Pull Request References Show Test Integration

    Recent commits reference pull requests (#6070, #6075, #6039, #6049, #6066), which go through CI testing before merge. The project demonstrates adherence to its test policy through CI enforcement, CVE regression testing, and documented test requirements for recent major changes.



    ЖЕЛАТЕЛЬНО задокументировать эту политику добавления тестов (см. критерий test_policy) в инструкции к предложениям об изменениях. [tests_documented_added]
    Однако даже неформальное правило приемлемо, если тесты добавляются на практике.

    CONTRIBUTING.md documents the test policy in the instructions for change proposals:

    1 In the Workflow Section

    Step 3 under "Make your changes": * "Add tests for new functionality or bug fixes."

    2 In the Adding New Tests Section

    Explicit documentation: * "All new functionality and bug fixes must include tests."

    3 In the Checklist for Contributors

    Testing checklist item:

    • "Pull request includes tests."

    4 In the Acceptance Criteria Section

    Testing requirement for pull request acceptance:

    • "Testing: Must pass HDF5 regression testing and include appropriate tests."

    Reference: CONTRIBUTING.md#contributing-changes, CONTRIBUTING.md#adding-new-tests, and CONTRIBUTING.md#checklist-for-contributors The test policy is documented in multiple sections of CONTRIBUTING.md where change proposals and pull requests are described.


  • Флаги предупреждений


    Проект ОБЯЗАН включать один или несколько предупреждающих флагов компилятора, «безопасный» языковой режим или использовать отдельный инструмент «linter» для поиска ошибок качества кода или типовых простых ошибок, если есть хотя бы один инструмент на свободном ПО, который может реализовать этот критерий на выбранном языке. [warnings]
    Примером предупреждающего флага компилятора может служить "-Wall" для gcc/clang. Примеры «безопасного» языкового режима включают «use strict» в JavaScript и «use warnings» в perl5. Отдельный инструмент «linter» - это просто инструмент, который исследует исходный код для поиска ошибок качества кода или типовых простых ошибок. Всё это обычно включается в исходный код или инструкции сборки.

    1 Compiler Warning Flags Enabled

    CONTRIBUTING.md states:

    • "The CI system builds with -Werror"
    • "HDF5_ENABLE_DEV_WARNINGS:BOOL=ON" option available for extra warnings
    • "fix all compiler warnings before submitting pull requests"

    2 Developer Mode Warnings

    CONTRIBUTING.md documents developer build options: * "HDF5_ENABLE_DEVELOPER_MODE=ON" enables "warnings as errors" * "Developer Warnings: Enable extra warnings with HDF5_ENABLE_DEV_WARNINGS:BOOL=ON"

    3 Linter Tool - clang-format

    CONTRIBUTING.md lists clang-format as a recommended tool:

    • "clang-format: For code formatting. The CI system will automatically format pull requests if needed."

    4 CI Enforcement

    The CI system enforces code quality:

    • Builds with -Werror (warnings treated as errors)
    • Automatic code formatting
    • Must pass before pull request acceptance

    Reference: CONTRIBUTING.md#prerequisites and CONTRIBUTING.md#developer-build-tips The project enables compiler warning flags (-Werror), uses clang-format for linting, and enforces these in CI.



    Проект ОБЯЗАН обращать внимание на предупреждения. [warnings_fixed]
    Речь о предупреждениях, найденных при выполнении критерия warnings. Проект должен исправлять предупреждения или отмечать их в исходном коде как ложные срабатывания. В идеале не должно быть никаких предупреждений, но проект МОЖЕТ принимать существование каких-то предупреждений (обычно менее 1 предупреждения на 100 строк или менее 10 предупреждений).

    CONTRIBUTING.md explicitly requires addressing warnings:

    • "The CI system builds with -Werror, so fix all compiler warnings before submitting pull requests."

    This policy ensures:

    • Warnings are treated as errors in CI builds
    • All warnings must be fixed before code can be merged
    • Pull requests cannot be accepted with warnings

    Reference: CONTRIBUTING.md#developer-build-tips The project requires all compiler warnings to be addressed before pull request submission.



    ЖЕЛАТЕЛЬНО, чтобы проекты использовали самый строгий режим предупреждений в производимом ПО, где это целесообразно. [warnings_strict]
    Некоторые предупреждения не могут быть эффективно задействованы в некоторых проектах. Что необходимо в этом критерии - это доказательства того, что проект стремится включать флаги предупреждений там, где это возможно, чтобы ошибки обнаруживались на ранней стадии.

    CONTRIBUTING.md shows the project is maximally strict with warnings:

    1 Warnings as Errors Required

    • "The CI system builds with -Werror" (treats all warnings as errors)
    • Mandatory for all pull requests

    2 Additional Developer Warnings Available * "HDF5_ENABLE_DEV_WARNINGS:BOOL=ON" enables extra warnings * "generates significant output but can be useful"

    3 Developer Mode Strictness * "HDF5_ENABLE_DEVELOPER_MODE=ON" enables "warnings as errors" * Recommended for development builds

    Reference: CONTRIBUTING.md#developer-build-tips The project uses the strictest possible warning level with -Werror in CI and optional extra warnings for developers.


 Безопасность 14/16

  • Знание безопасной разработки


    По крайней мере один основной разработчик на проекте ОБЯЗАН знать, как проектировать безопасное программное обеспечение (точные требования описаны в подробностях к критерию). [know_secure_design]
    Это требует понимания следующих принципов проектирования, в том числе 8 принципов из Saltzer and Schroeder:
    • экономичность механизма (поддерживать дизайн ПО настолько простым и компактным, насколько практически возможно, например, с помощью массовых упрощений)
    • отказобезопасные значения по умолчанию (доступ по умолчанию должен быть запрещен, а установка проектов по умолчанию должна быть в защищенной конфигурации)
    • полное разграничение (любой доступ, который может быть ограничен, должен проверяться на достаточность прав доступа и не иметь обходных путей)
    • открытый дизайн (механизмы безопасности должны полагаться не на незнание их злоумышленником, а на данные типа ключей и паролей, которые проще защищать и менять)
    • разделение привилегий (в идеале доступ к важным объектам должен зависеть от более чем одного условия, так чтобы взлом одной системы защиты не приводил к полному доступу; напр., многофакторная аутентификация с требованием и пароля, и аппаратного токена сильнее однофакторной)
    • минимальные привилегии (процессы должны работать с минимальными привилегиями, необходимыми для выполнения ими своих функций)
    • наименьший общий механизм (дизайн должен минимизировать механизмы, общие для нескольких пользователей и следовательно зависящие от всех этих пользователей, например, каталоги для временных файлов)
    • психологическая приемлемость (интерфейс для человека должен быть спроектирован с учетом удобства использования - может быть полезным проектирование для «наименьшего удивления»)
    • ограничение периметра атаки (периметр атаки - множество разных точек, в которых злоумышленник может попытаться ввести или извлечь данные - должен быть ограничен)
    • проверка входных данных с помощью списков на допуск (входы обычно должны проверяться на корректность до их принятия; эта проверка должна использовать списки на допуск, содержащие только заведомо хорошие значения, а не списки на запрет, пытающиеся перечислить заведомо плохие значения).
    «Основной разработчик» в проекте - это любой, кто знаком с базой кода проекта, без затруднений может вносить в него изменения и признан таковым большинством других участников проекта. Основной разработчик, как правило, неоднократно вносит вклад в течение последнего года (через код, документацию или ответы на вопросы). Разработчики обычно считаются основными разработчиками, если это они начали проект (и не покинули проект более трех лет назад), имеют возможность получать информацию по закрытому каналу для отчетов об уязвимостях (если он есть), могут принимать коммиты от имени проекта или делать финальные выпуски программного обеспечения проекта. Если есть только один разработчик, этот человек является основным разработчиком. Есть много книг и курсов, помогающих понять, как разрабатывать более безопасное ПО, с обсуждением вопросов проектирования. Например, Secure Software Development Fundamentals - это бесплатный набор из трех курсов, объясняющих, как разрабатывать более безопасное ПО (бесплатный для обучения; за отдельную плату вы можете получить сертификат для подтверждения, что вы освоили материал).

    Evidence that primary developers understand secure software design principles:

    1 Economy of Mechanism

    CONTRIBUTING.md enforces simplicity:

    • "Avoid over-engineering. Only make changes that are directly requested or clearly necessary."
    • "Don't create helpers, utilities, or abstractions for one-time operations."
    • "The right amount of complexity is the minimum needed for the current task"

    2 Fail-Safe Defaults

    Security fixes show fail-safe approach:

    • CVE-2025-2915: "Added validation in H5O__mdci_decode to detect and reject invalid values early"
    • CVE-2025-6750: "allow invalid message size to be detected"
    • Default error handling with HGOTO_ERROR macro

    3 Complete Mediation

    CONTRIBUTING.md shows validation practices:

    • "Always check return values of functions that can fail"
    • Function structure includes parameter checks: "HDassert(/parameter check/)"

    4 Open Design

    The project is fully open source:

    • All security mechanisms in public repository
    • Security fixes documented in CHANGELOG.md
    • No security through obscurity

    5 Least Privilege

    CONTRIBUTING.md describes function visibility levels:

    • Public, Private, and Package scopes
    • "Package: Used only within the defining package"
    • Minimizes exposure of internal APIs

    6 Input Validation with Allowlists

    Multiple CVE fixes demonstrate input validation:

    • CVE-2025-2915: "Added validation...to detect and reject invalid values early, preventing the overflow condition"
    • CVE-2025-6816 series: "checking the expected number of object header chunks against the actual value"
    • CVE-2025-2925: "checks for an image buffer length of 0 before calling H5MM_realloc"
    • "Check for overflow in decoded heap block addresses"

    7 Limited Attack Surface

    CONTRIBUTING.md enforces minimalism:

    • Three-tier API (Public/Private/Package) limits attack surface
    • "Don't add features...beyond what was asked"

    8 OWASP Awareness

    CONTRIBUTING.md explicitly mentions security:

    • "Be careful not to introduce security vulnerabilities such as command injection, XSS, SQL injection, and other OWASP top 10 vulnerabilities."

    9 Professional Security Practices

    • Private vulnerability disclosure (SECURITY.md)
    • CVE regression testing
    • 15+ CVEs fixed in recent release with detailed technical understanding
    • Bounds checking, input validation, safe cleanup practices

    The project demonstrates knowledge of secure design principles through documented policies, extensive security fixes showing deep understanding, and explicit security requirements in the contribution guidelines.



    По крайней мере, один из основных разработчиков проекта ОБЯЗАН знать об общих видах ошибок, которые приводят к уязвимостям в этом виде программного обеспечения, а также по крайней мере одному методу противодействия или смягчения каждого из них. [know_common_errors]
    Примеры (в зависимости от типа ПО) включают внедрение SQL-кода (injection), внедрение на уровне ОС, классическое переполнение буфера, межсайтовый скриптинг, отсутствие проверки подлинности и отсутствие авторизации. Обычно используемые списки уязвимостей можно найти в CWE/SANS top 25 или OWASP Top 10. Есть много книг и обучающих курсов, помогающих понять, как разрабатывается безопасное программное обеспечение, и обсуждающих типичные ошибки в реализации, ведущие к уязвимостям. К примеру, Secure Software Development Fundamentals - это набор из трех курсов, объясняющих, как сделать разрабатываемое ПО более безопасным (бесплатный для прослушивания; за дополнительную плату вы можете получить справку о том, что прошли его).

    Evidence that primary developers know common vulnerability types and mitigations:

    1 Buffer Overflows - Known and Mitigated

    Multiple CVE fixes demonstrate understanding:

    • CVE-2025-7067: "Fixed a heap buffer overflow in H5FS__sinfo_serialize_node_cb()" - Mitigation: "discarding file free space sections...when they are found to be invalid"
    • CVE-2025-2915: "Fixed a heap-based buffer overflow...caused by an integer overflow" - Mitigation: "Added validation...to detect and reject invalid values early"
    • CVE-2025-6750: "A heap buffer overflow occurred because an mtime message was not properly decoded" - Mitigation: "decoding old and new mtime messages which will allow invalid message size to be detected"

    2 Integer Overflows - Known and Mitigated

    • CVE-2025-2915: "integer overflow when calculating new_accum_size" - Mitigation: validation to prevent overflow
    • "Check for overflow in decoded heap block addresses" - Mitigation: "added a check in H5HL__fl_deserialize to ensure no overflow can occur"

    3 Memory Leaks and Resource Management - Known and Mitigated

    • CVE-2025-7068: "could cause the library to skip calling the callback to free the cache entry. This could result in resource leaks" - Mitigation: "attempting to fully free a cache entry before signalling that an error has occurred"
    • CVE-2025-6269: "memory leaks" - Mitigation: "safe cleanup"

    4 Double-Free Vulnerabilities - Known and Mitigated

    • CVE-2025-2925: "it was freed again in done, causing a double-free vulnerability" - Mitigation: "H5C__load_entry() now checks for an image buffer length of 0 before calling H5MM_realloc"

    5 Stack Overflows - Known and Mitigated

    • CVE-2025-6857: "An HDF5 file had a corrupted v1 B-tree that would result in a stack overflow" - Mitigation: "additional integrity checks"

    6 Input Validation Failures - Known and Mitigated

    • CVE-2025-2913, CVE-2025-2926: "The size of a continuation message was decoded as 0, causing multiple vulnerabilities" - Mitigation: "An error check was added to return failure to prevent further processing of invalid data"
    • CVE-2025-6816 series: "corrupted object header with a continuation message that points back to itself" - Mitigation: "checking the expected number of object header chunks against the actual value"

    7 OWASP Top 10 Awareness

    CONTRIBUTING.md explicitly requires:

    • "Be careful not to introduce security vulnerabilities such as command injection, XSS, SQL injection, and other OWASP top 10 vulnerabilities."

    8 Bounds Checking

    • CVE-2025-6269: "buffer overflows" - Mitigation: "bounds checks, input validation"

    9 Common Mitigation Techniques Used

    • Early validation and rejection of invalid input
    • Bounds checking before operations
    • Safe cleanup and error handling
    • Integer overflow detection
    • Resource leak prevention

    The project demonstrates comprehensive knowledge of common vulnerability types (buffer overflows, integer overflows, memory leaks, double-frees, stack overflows) and proper mitigation techniques through extensive CVE remediation and explicit security requirements.


  • Основы правильного использования криптографии

    Обратите внимание, что некоторое ПО не нуждается в использовании криптографических механизмов.

    Программное обеспечение, созданное проектом, ОБЯЗАНО использовать по умолчанию только публикуемые криптографические протоколы и алгоритмы, которые анализируются экспертами (если используются криптографические протоколы и алгоритмы). [crypto_published]
    Эти криптографические критерии не всегда применяются, поскольку некоторые программы не нуждаются в прямом использовании криптографических возможностей.


    Если программное обеспечение, создаваемое проектом, является приложением или библиотекой, и его основной целью является не внедрение криптографии, тогда для реализации криптографических функций СЛЕДУЕТ обращаться к программному обеспечению, специально предназначенному для этого; НЕ СЛЕДУЕТ повторно реализовывать свои собственные функции. [crypto_call]


    Вся функциональность программного обеспечения, создаваемого проектом, которая зависит от криптографии, ОБЯЗАНА быть реализована с использованием свободного ПО. [crypto_floss]


    Механизмы безопасности в программном обеспечении, создаваемом проектом, ОБЯЗАНЫ использовать стандартные длины криптографических ключей, которые, по крайней мере, соответствуют минимальным требованиям NIST до 2030 года (как указано в 2012 году). Проект ОБЯЗАН предоставлять возможность настройки ПО таким образом, чтобы уменьшенные длины ключей были полностью отключены. [crypto_keylength]
    Эти минимальные длины в битах перечислены далее: симметричный ключ - 112, модуль факторизации - 2048, дискретный логарифмический ключ - 224, дискретная логарифмическая группа - 2048, эллиптическая кривая - 224 и хеш - 224 (хеширование пароля не покрывается этой длиной, больше информации о хешировании пароля можно найти в описании критерия crypto_password_storage). См. http://www.keylength.com для сравнения рекомендаций по длинам криптографических ключей от различных организаций. Программное обеспечение МОЖЕТ допускать меньшие длины ключей в некоторых конфигурациях (в идеале не должно, поскольку это позволяет атаки через понижение длины ключа, но иногда требуется более короткая длина ключа для обеспечения взаимодействия с другими системами).


    Механизмы безопасности по умолчанию в программном обеспечении, создаваемом проектом, НЕДОПУСТИМО делать зависимыми от взломанных криптографических алгоритмов (например, MD4, MD5, single DES, RC4, Dual_EC_DRBG) или использовать режимы шифрования, которые не подходят для контекста, если только они не требуются для интероперабельности протокола (поддерживающего самую новую версию стандарта на этот протокол, широко распространенного в сетевой экосистеме, причем эта экосистема требует использования данного алгоритма или режима, не предлагая более безопасных альтернатив). В документации НЕОБХОДИМО описать все связанные с этим риски безопасности и все известные способы смягчения рисков, если данные алгоритмы или режимы действительно нужны для совместимости с другими реализациями этого протокола. [crypto_working]
    Режим ECB почти никогда не подходит, потому что внутри зашифрованного ECB текста обнаруживаются идентичные блоки, как можно видеть на примере «пингвина ECB», а режим CTR часто неприемлем, поскольку не выполняет аутентификацию и приводит к дубликатам, контекста, если состояние ввода повторяется. Во многих случаях лучше всего выбирать режим алгоритма с блочным шифром, предназначенный для сочетания секретности и аутентификации, например, Galois / Counter Mode (GCM) и EAX. Проекты МОГУТ разрешать пользователям включать сломанные механизмы, где это необходимо для совместимости, но в таких случаях пользователи знают, что они это делают.


    Механизмы безопасности по умолчанию в программном обеспечении, создаваемом проектом, НЕ СЛЕДУЕТ делать зависимыми от криптографических алгоритмов или режимов с известными серьезными слабостями (например, криптографический алгоритм хеширования SHA-1 или режим CBC в SSH). [crypto_weaknesses]
    Проблемы, связанные с режимом CBC в SSH, обсуждаются в описании уязвимости CERT: SSH CBC.


    В механизмах безопасности в программном обеспечении, создаваемом проектом, СЛЕДУЕТ реализовать совершенную прямую секретность для протоколов соглашений о ключах, чтобы ключ сеанса, произведенный из набора долгосрочных ключей, не мог быть скомпрометирован, если один из долгосрочных ключей скомпрометирован в будущем. [crypto_pfs]


    Если ПО, создаваемое проектом, требует хранить пароли для аутентификации внешних пользователей, НЕОБХОДИМО хранить пароли как итерированные хеши с солью для каждого пользователя с использованием алгоритма (итерированного) растяжения ключа (например, PBKDF2, Bcrypt или Scrypt). См. также: OWASP Password Storage Cheat Sheet (на англ.). [crypto_password_storage]
    Этот критерий применяется только тогда, когда программное обеспечение требует проверки внешних пользователей с использованием паролей (так называемая входящая аутентификация), таких как серверные веб-приложения. Он не применяется в тех случаях, когда программное обеспечение хранит пароли для аутентификации в других системах (исходящая аутентификация; например, программное обеспечение реализует клиент для какой-либо другой системы), поскольку по крайней мере части этого программного обеспечения должны часто обращаться к нехешированному паролю.


    Механизмы безопасности в программном обеспечении, создаваемом проектом, ОБЯЗАНЫ генерировать все криптографические ключи и временные значения с использованием криптографически безопасного генератора случайных чисел; НЕДОПУСТИМО делать это с использованием генераторов, которые криптографически небезопасны. [crypto_random]
    Криптографически безопасный генератор случайных чисел может быть аппаратным генератором случайных чисел или криптографически безопасным генератором псевдослучайных чисел (CSPRNG), использующим такие алгоритмы как Hash_DRBG, HMAC_DRBG, CTR_DRBG, Yarrow или Fortuna. Примеры вызовов защищенных генераторов случайных чисел включают java.security.SecureRandom в Java и window.crypto.getRandomValues в JavaScript. Примеры вызовов небезопасных генераторов случайных чисел включают java.util.Random в Java и Math.random в JavaScript.

  • Доставка, защищенная от атак посредника (MITM)


    Проект ОБЯЗАН использовать механизм доставки, устойчивый против атак посредника (MITM). Приемлемо использование https или ssh + scp. [delivery_mitm]
    Еще более сильным механизмом является выпуск программного обеспечения в виде пакетов, подписанных цифровой подписью, поскольку это смягчает атаки на систему распространения, но это работает только в том случае, если пользователи могут быть уверены, что открытые ключи для подписей верны и если пользователи действительно проверяют подпись.

    The project uses delivery mechanisms that counter MITM attacks:

    1 HTTPS for Downloads

    All download URLs use HTTPS:

    2 HTTPS for Git Repository

    Source code repository uses HTTPS:

    Git also supports SSH:

    3 HTTPS for Maven Artifacts

    Maven package repository uses HTTPS:

    4 All Project URLs Use HTTPS

    Previously verified that all project sites use HTTPS:

    Reference: README.md and earlier analysis The project uses HTTPS for all delivery mechanisms (downloads, Git repository, Maven artifacts), which counters MITM attacks.



    НЕДОПУСТИМО получать криптографические контрольные суммы (например, sha1sum) по HTTP и использовать их без проверки криптографической подписи. [delivery_unsigned]
    Эти хеши могут быть изменены при передаче.

    1 No HTTP Hash Retrieval Found

    2 All Downloads Use HTTPS

    External downloads in CI workflows use HTTPS, not HTTP

    3 HTTP Timestamp Server Not Hash Retrieval

    The only HTTP usage is:

    The project does NOT retrieve cryptographic hashes over HTTP.


  • Исправление обнародованных уязвимостей


    НЕДОПУСТИМО оставлять незакрытыми уязвимости со степенью серьезности средней или выше, опубликованные более 60 дней назад. [vulnerabilities_fixed_60_days]
    Уязвимость должна быть исправлена ​​и выпущена самим проектом (патчи могут быть разработаны в другом месте). Уязвимость считается опубликованной (для цели данного критерия) после того, как она имеет CVE с описанием, бесплатно доступным для общественности, (например, в National Vulnerability Database) или когда проект был проинформирован, и информация была опубликована для общественности (возможно, самим проектом). Уязвимость имеет среднюю и высокую степень серьезности, если ее базовая оценка по CVSS 2.0 равна 4 или выше. Примечание. Это означает, что пользователи могут оставаться уязвимыми для всех злоумышленников по всему миру на срок до 60 дней. Этот критерий часто намного легче выполнить, чем рекомендует Google в Rebooting responsible disclosure, поскольку Google рекомендует, чтобы 60-дневный период начинался, когда проект был уведомлен, даже если отчет не является общедоступным.


    Проектам СЛЕДУЕТ оперативно исправлять критические уязвимости после сообщения о них. [vulnerabilities_critical_fixed]

  • Другие вопросы безопасности


    НЕДОПУСТИМА утечка действующих частных учетных данных (например, рабочий пароль или закрытый ключ), предназначенных для ограничения общего доступа, из публичных репозиториев. [no_leaked_credentials]
    Проект МОЖЕТ пропускать «шаблонные» учетные данные для тестирования и несущественные базы данных, при условии что они не предназначены для ограничения общего доступа.

    1 All Credentials Use GitHub Secrets

    Workflow files properly use GitHub Secrets for sensitive credentials:

    • ${{ secrets.AZURE_CODE_SIGNING_NAME }}
    • ${{ secrets.AZURE_CERT_PROFILE_NAME }}
    • ${{ secrets.GPG_PRIVATE_KEY }}
    • MAVEN_PASSWORD referenced as environment variable, not hardcoded

    Reference: .github/workflows/ctest.yml, release.yml, maven-deploy.yml

    2 Test Credentials Are Clearly Fake

    The AWS-looking credential found (AKIAIMC3D3XLYXLN5COA) is in a test file:

    • File: tools/libtest/h5tools_test_utils.c
    • Purpose: "unit-test functionality of the routines in tools/lib/h5tools_utils"
    • Context: "real-world use case" test case for tuple parsing
    • This is test data for parsing AWS credential format, not an actual working credential

    3 No Private Key Files Found

    • No BEGIN PRIVATE KEY blocks
    • No .pem, .key, id_rsa, id_dsa files
    • No GitHub tokens (ghp_, gho_, ghu_ patterns)
    • No Slack tokens (xox patterns)

    4 Test Secrets Are Placeholder Values

    Test code uses obviously fake values:

    • test/vfd.c: secret_key = "plugh" (Adventure game reference)
    • tools/libtest: Various single-character test values ("w", "c", "z")

    ** 5 .gitignore Does Not Exclude Credential Files**

    The .gitignore doesn't exclude .env, .pem, or credential files, suggesting no such files exist or need to be excluded. The public repository does NOT leak valid private credentials. All sensitive credentials use GitHub Secrets, and AWS-format strings found are test data for parsing functionality.

    GitHub provides automatic secret scanning for public repositories, alerting maintainers when known credential patterns are detected. The project uses proper secret management practices (GitHub Secrets).


 Анализ 6/8

  • Статический анализ кода


    НЕОБХОДИМО применять по крайней мере, один инструмент анализа статического кода (помимо предупреждений компилятора и "безопасных" режимов языка) к любой предлагаемой основной версии создаваемого ПО до ее выпуска, если есть хотя бы один инструмент на свободном ПО, который реализует этот критерий на выбранном языке. [static_analysis]
    Средство анализа статического кода анализирует программный код (как исходный код, промежуточный код или исполняемый файл), не выполняя его с конкретными входами. Для целей этого критерия предупреждения компилятора и «безопасные» языковые режимы не считаются инструментами анализа статического кода (они обычно избегают глубокого анализа, поскольку скорость имеет жизненно важное значение). Примеры таких статических инструментов анализа кода включают cppcheck (C, C++), статический анализатор Clang (C, C++), SpotBugs (Java), FindBugs (Java; включая FindSecurityBugs), PMD (Java), Brakeman (Ruby on Rails), lintr (R), goodpractice (R), Анализатор качества Coverity, SonarQube, Codacy и статический анализатор кода HP Enterprise Fortify. Более крупные списки инструментов можно найти в таких местах, как Wikipedia list of tools for static code analysis, OWASP information on static code analysis, NIST list of source code security analyzers и Wheeler's list of static analysis tools. Если для используемого языка(ов) реализации нет доступных инструментов статического анализа на свободном ПО, выберите «неприменимо» (N/A).


    ЖЕЛАТЕЛЬНО включать по крайней мере в один из инструментов статического анализа, используемых для критерия static_analysis, правила или подходы для поиска распространенных уязвимостей в анализируемом языке или среде. [static_analysis_common_vulnerabilities]
    Инструменты статического анализа, специально предназначенные для поиска распространенных уязвимостей, с большей вероятностью найдут их. Тем не менее, использование любых статических инструментов обычно помогает найти какие-то проблемы, поэтому мы предлагаем, но не требуем этого для получения базового значка.


    Все уязвимости со средней и высокой степенью серьезности, обнаруженные при статическом анализе кода, НЕОБХОДИМО своевременно исправлять после их подтверждения. [static_analysis_fixed]
    Уязвимость имеет среднюю и высокую степень серьезности, если ее оценка по CVSS 2.0 - 4 или выше.


    ЖЕЛАТЕЛЬНО выполнять анализ статического исходного кода при каждом коммите или по крайней мере ежедневно. [static_analysis_often]

  • Динамический анализ кода


    ЖЕЛАТЕЛЬНО применять по крайней мере один инструмент динамического анализа к любой предлагаемой основной (major) версии программного обеспечения перед ее выпуском . [dynamic_analysis]
    Инструмент динамического анализа проверяет программное обеспечение, выполняя его с конкретными входными данными. Например, проект МОЖЕТ использовать инструмент фаззинг-тестирования (например, American Fuzzy Lop) или сканер веб-приложений (например, OWASP ZAP или w3af). В некоторых случаях проект OSS-Fuzz может быть готов применить фаззинг-тестирование к вашему проекту. Для целей этого критерия инструмент динамического анализа должен каким-то образом варьировать исходные данные, чтобы искать проблемы разного рода или быть автоматическим набором тестов с покрытием веток исполнения не менее 80%. Страница Википедии о динамическом анализе и cтраница OWASP о фаззинг-тестировании указывают некоторые инструменты динамического анализа. Использование инструмента/ов анализа МОЖЕТ, но не обязано быть сосредоточено на поиске уязвимостей в безопасности.

    Evidence that dynamic analysis tools are applied before major production releases:

    1 Multiple Sanitizers in Analysis Workflow

    • .github/workflows/analysis.yml runs dynamic analysis before releases:
    • LeakSanitizer: "detects memory leaks"
    • AddressSanitizer: "fast memory error detector" for buffer overflows, use-after-free, etc.
    • UndefinedBehaviorSanitizer: detects undefined behavior at runtime

    2 Analysis Workflow Integrated into Release Process

    From .github/workflows/daily-build.yml: * uses: ./.github/workflows/analysis.yml * This calls the analysis workflow as part of the build process

    3 Sanitizer Infrastructure Available

    From config/sanitizer/sanitizers.cmake and config/sanitizer/README.md document:

    • HDF5_USE_SANITIZER CMake variable
    • Support for Address, Memory, Undefined, Thread, Leak, and CFI sanitizers
    • All are FLOSS dynamic analysis tools from LLVM/Clang

    Reference: config/sanitizer/README.md states: "Sanitizers are tools that perform checks during a program's runtime"

    4 Coverage Analysis

    From .github/workflows/analysis.yml:

    • Code coverage testing with gcov/lcov
    • While primarily for coverage metrics, it requires executing tests (dynamic analysis)

    5 OSS-Fuzz Integration

    README.md shows OSS-Fuzz badge:

    • Continuous fuzzing (dynamic analysis for vulnerability detection)
    • Indicates ongoing dynamic analysis

    6 Sanitizers Run on Multiple Configurations

    analysis.yml shows sanitizers run with:

    • Different compilers (Clang)
    • Different configurations
    • Automated in CI/CD pipeline

    The project applies multiple FLOSS dynamic analysis tools (LeakSanitizer, AddressSanitizer, UndefinedBehaviorSanitizer, and fuzzing) before releases through automated workflows.



    ЖЕЛАТЕЛЬНО регулярно использовать по меньшей мере один динамический инструмент (например, fuzzer или сканер веб-приложения) в сочетании с механизмом для обнаружения проблем безопасности памяти, таких как перезапись буфера, если программное обеспечение, создаваемое проектом, включает части, написанные на небезопасном языке (например, C или C++). Если проект не создает программное обеспечение, написанное на небезопасном языке, выберите «неприменимо» (N/A). [dynamic_analysis_unsafe]
    Примерами механизмов обнаружения проблем безопасности памяти являются Address Sanitizer (ASAN) (доступен в GCC и LLVM), Memory Sanitizer и valgrind. Другие потенциально используемые инструменты включают Thread Sanitizer и Undefined Behavior Sanitizer. Достаточно широкое использование утверждений (assertions) тоже может быть приемлемо.

    Evidence that dynamic tools are routinely used with memory safety detection for C/C++ code:

    1 HDF5 is Written in Memory-Unsafe Languages

    The project is primarily written in C (with C++ and Fortran wrappers):

    • CONTRIBUTING.md requires "A C11-compatible C compiler"
    • Source code in src/ is C code
    • This is a memory-unsafe language

    2 AddressSanitizer Detects Memory Safety Problems

    .github/workflows/analysis.yml runs AddressSanitizer: * CTEST_MEMORYCHECK_TYPE "AddressSanitizer" * HDF5_USE_SANITIZER:STRING=Address

    AddressSanitizer detects:

    • Buffer overflows (overwrites)
    • Use-after-free
    • Double-free
    • Out-of-bounds accesses

    Reference: config/sanitizer/README.md states AddressSanitizer "is useful for detecting most issues dealing with memory, such as: Out of bounds accesses to heap, stack, global"

    3 LeakSanitizer for Memory Leaks

    .github/workflows/analysis.yml runs LeakSanitizer:

    • CTEST_MEMORYCHECK_TYPE "LeakSanitizer"
    • HDF5_USE_SANITIZER:STRING=Leak

    4 OSS-Fuzz for Fuzzing

    README.md shows OSS-Fuzz badge:

    • Active fuzzing integration
    • Fuzzing is a dynamic tool that generates test inputs
    • Combined with sanitizers to detect memory safety issues

    5 Routine Use Through CI/CD

    The sanitizers run automatically:

    • .github/workflows/daily-build.yml calls analysis.yml
    • Runs on daily schedule
    • Integrated into continuous testing

    6 Multiple Memory Safety Mechanisms

    The project combines:

    • Fuzzing (OSS-Fuzz) - dynamic input generation
    • AddressSanitizer - detects buffer overwrites and memory errors
    • LeakSanitizer - detects memory leaks
    • UndefinedBehaviorSanitizer - detects undefined behavior

    The project routinely uses fuzzing (OSS-Fuzz) combined with AddressSanitizer to detect memory safety problems including buffer overwrites in its C/C++ code.



    ЖЕЛАТЕЛЬНО включать в ПО, создаваемое проектом, достаточно много утверждений (assertions) времени выполнения, проверяемых при динамическом анализе. Во многих случаях эти утверждения не должны попадать в сборки под эксплуатацию (production). [dynamic_analysis_enable_assertions]
    Этот критерий не предполагает включения утверждений на этапе эксплуатации; решение об этом полностью лежит на проекте и его пользователях. Вместо этого критерий направлен на улучшение обнаружения ошибок во время динамического анализа перед развертыванием. Использование утверждений при эксплуатации полностью отличается от такового во время динамического анализа (например, при тестировании). В некоторых случаях включать утверждения при эксплуатации крайне неразумно (особенно в компонентах с высокой степенью целостности). Существует множество аргументов против включения утверждений в выпускаемых сборках: например, библиотеки не должны вызывать сбой при вызове, присутствие утверждений может привести к отклонению магазинами приложений и/или активация их при рабочем использовании может привести к раскрытию частных данных, таких как закрытые ключи. Помните, что во многих дистрибутивах Linux NDEBUG не определен, поэтому C/C++assert() в таких рабочих средах по умолчанию будет включен. Может быть важно использовать другой механизм утверждений или определить NDEBUG для эксплуатации в этих средах.

    The project uses configurations with assertions enabled for dynamic analysis:

    1 Developer Mode Enables Assertions

    CONTRIBUTING.md documents developer build options:

    • HDF5_ENABLE_DEVELOPER_MODE=ON enables developer-friendly settings
    • Developer mode is recommended for development builds

    2 Sanitizer Builds Use Debug Configuration

    .github/workflows/analysis.yml runs sanitizers with Debug configuration:

    • Coverage test: ctest -S HDF5config.cmake...CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Debug
    • LeakSanitizer runs with -C Debug
    • AddressSanitizer runs with -C Debug
    • UndefinedBehaviorSanitizer runs with -C Debug

    Debug builds typically enable assertions that are disabled in release builds.

    3 Assertion Macros in Code

    CONTRIBUTING.md shows assertion usage in function structure:

    • FUNC_ENTER_NOAPI(FAIL)

    HDassert(/parameter check/);

    The HDassert macro is used throughout the codebase for parameter checking.

    4 Memory Checker Configuration

    CONTRIBUTING.md documents memory checking option:

    • HDF5_ENABLE_USING_MEMCHECKER:BOOL=ON when using tools like Valgrind
    • This disables internal memory pools to enable better error detection

    Reference: "Use HDF5_ENABLE_USING_MEMCHECKER:BOOL=ON when using tools like Valgrind. This disables internal memory pools that can hide memory issues."

    5 Sanitizer Configuration Separate from Production

    .github/workflows/analysis.yml shows sanitizer builds are separate:

    • Different workflow from production builds
    • Uses specific build options not used in production
    • Runs in "Sanitize" group/model

    6 Coverage Build Uses Debug Settings

    .github/workflows/analysis.yml coverage test:

    • LOCAL_COVERAGE_TEST "TRUE"
    • DHDF5_ENABLE_COVERAGE:BOOL=ON
    • Coverage builds run with instrumentation not suitable for production

    The project uses Debug configuration with assertions enabled for dynamic analysis (sanitizers, fuzzing, testing), which are separate from production builds.



    Проект ОБЯЗАН своевременно исправлять все уязвимости средней и выше степени серьезности, обнаруженные при динамическом анализе кода, после их подтверждения. [dynamic_analysis_fixed]
    Если вы не используете динамический анализ кода и, следовательно, не обнаружили уязвимостей таким способом, выберите «неприменимо» (N/A). Степень серьезности уязвимости считается средней или выше, если уязвимость имеет среднюю или выше базовую оценку по Common Vulnerability Scoring System (CVSS). В версиях CVSS с 2.0 по 3.1 это соответствует оценке 4.0 и выше. Проекты могут использовать оценку CVSS опубликованную в любой широко используемой базе данных по уязвимостям (такой как National Vulnerability Database) используя самую новую версию CVSS доступную в этой базе данных. Вместо этого проекты могут сами вычислять серьезность используя последнюю версию CVSS на момент раскрытия уязвимости, если вводные для вычисления раскрываются вместе с публикацией уязвимости.

    1 Extensive CVE Fixes Documented

    CHANGELOG.md shows that numerous security vulnerabilities have been fixed:

    • CVE-2025-7067 - Heap buffer overflow in H5FS__sinfo_serialize_node_cb()
    • CVE-2025-2915 - Heap-based buffer overflow in H5F__accum_free
    • CVE-2025-7068 - Resource leaks in metadata cache
    • CVE-2025-6816, CVE-2025-6818, CVE-2025-6856, CVE-2025-2923 - Object header vulnerabilities

    And many more...

    2 OSS-Fuzz Integration for Discovery

    README.md shows OSS-Fuzz badge:

    • Continuous fuzzing (dynamic analysis) for vulnerability detection
    • OSS-Fuzz reports vulnerabilities that are then fixed

    Reference: OSS-Fuzz badge indicates active participation in continuous fuzzing program

    3 CVE Regression Testing

    README.md shows CVE regression CI badge:

    • Automated testing to ensure CVE fixes remain effective
    • Prevents reintroduction of vulnerabilities

    4 Security Advisory Process

    SECURITY.md documents vulnerability handling:

    • Private disclosure process for security vulnerabilities
    • "This gives us time to work with you to fix the issue before public exposure"
    • Shows commitment to fixing vulnerabilities before disclosure

    5 GitHub Issues Track Vulnerabilities

    CHANGELOG.md references GitHub issues for each CVE:

    • "Fixes GitHub issue #5577" (CVE-2025-7067)
    • "Fixes GitHub issue #5380" (CVE-2025-2915)
    • "Fixes GitHub issue #5578" (CVE-2025-7068)

    Shows systematic tracking and resolution

    6 Multiple Fixes in Single Release

    Version 2.0.0 includes fixes for 10+ CVEs, demonstrating:

    • Active vulnerability remediation
    • Timely response to discovered issues
    • Comprehensive fixes are released together

    7 Sanitizer Findings Are Addressed

    The project runs sanitizers routinely:

    • AddressSanitizer, LeakSanitizer, UndefinedBehaviorSanitizer
    • Findings from these tools are used to fix memory safety issues
    • Many CVE fixes mention sanitizer-detectable issues (buffer overflows, use-after-free, memory leaks)

    The project demonstrates timely fixing of exploitable vulnerabilities discovered through dynamic analysis (fuzzing, sanitizers), with extensive CVE fixes documented in CHANGELOG.md and systematic tracking through GitHub issues.



This data is available under the Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0). This means that a Data Recipient may share the Data, with or without modifications, so long as the Data Recipient makes available the text of this agreement with the shared Data. Please credit Scot Breitenfeld and the OpenSSF Best Practices badge contributors.

Владелец анкеты на значок проекта: Scot Breitenfeld.
2023-09-05 17:54:26 UTC, последнее изменение сделано 2025-12-03 17:51:05 UTC.