HDF5 Library and File Format

Les projets qui suivent les meilleures pratiques ci-dessous peuvent s'auto-certifier et montrer qu'ils ont obtenu le badge de la Open Source Security Foundation (OpenSSF).

Il n'existe aucun ensemble de pratiques qui garantissent que ce logiciel n'aura jamais de défauts ou de vulnérabilités ; même les méthodes formelles peuvent échouer si les spécifications ou les hypothèses sont fausses. Il n'y a pas non plus de pratiques qui peuvent garantir qu'un projet permettra de maintenir une communauté de développement saine et qui fonctionne bien. Toutefois, suivre les meilleures pratiques peut contribuer à améliorer les résultats des projets. Par exemple, certaines pratiques permettent la revue par plusieurs personnes avant publication, ce qui peut aider à trouver des vulnérabilités techniques difficiles à trouver autrement et à renforcer la confiance et un désir d'interaction répétée entre les développeurs de différentes entreprises. Pour gagner un badge, tous les critères DOIT et NE DOIT PAS doivent être satisfaits, tous les critères DEVRAIT doivent être satisfaits OU non satisfaits avec justification, et tous les critères PROPOSÉ doivent être satisfaits OU non satisfaits (nous voulons au moins qu'ils soient considérés). Si vous voulez entrer un texte de justification pour un commentaire générique, au lieu d'une raison justifiant que la situation est acceptable, commencez le bloc de texte avec '//' suivi d'un espace. Les commentaires sont les bienvenus via le site GitHub en tant que problèmes ou pull requests. Il existe également une liste de diffusion pour discussion générale.

Nous fournissons volontiers l'information dans plusieurs langues, cependant, s'il existe un conflit ou une contradiction entre les traductions, la version anglaise est la version qui fait autorité.
Si c'est votre projet, veuillez indiquer votre statut de badge sur votre page de projet ! Le statut du badge ressemble à ceci : Le niveau de badge pour le projet 7802 est in_progress Voici comment l'intégrer :
Vous pouvez afficher votre statut de badge en incorporant ceci dans votre fichier markdown :
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/7802/badge)](https://www.bestpractices.dev/projects/7802)
ou en incorporant ceci dans votre HTML :
<a href="https://www.bestpractices.dev/projects/7802"><img src="https://www.bestpractices.dev/projects/7802/badge"></a>


Ce sont les critères du niveau Basique. Vous pouvez également afficher les critères des niveaux Argent ou Or.

        

 Notions de base 13/13

  • Identification

    Notez que d'autres projets peuvent utiliser le même nom.

    Official HDF5® Library Repository

    Quel(s) langage(s) de programmation sont utilisés pour implémenter le projet ?
    S'il y a plus d'un langage, listez-les en tant que valeurs séparées par des virgules (espaces facultatifs) et triez-les du plus au moins utilisé. S'il y a une longue liste, veuillez lister au moins les trois premiers. S'il n'y a pas de langage (par exemple, il s'agit d'un projet uniquement de documentation ou de test), utilisez le caractère unique « - ». Utilisez une capitalisation conventionnelle pour chaque langage, par exemple « JavaScript ».
    La plate-forme commune d'énumération (CPE) est un schéma de dénomination structuré pour les systèmes, les logiciels et les paquetages des technologies de l'information. Il est utilisé dans un certain nombre de systèmes et de bases de données pour signaler des vulnérabilités.
  • Contenu basique du site Web du projet


    Le site du projet DOIT décrire succinctement ce que le logiciel fait (quel problème résout-il ?). [description_good]
    Cela DOIT être dans un langage que les utilisateurs potentiels peuvent comprendre (par exemple, il utilise un jargon minimal).

    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:



    Le site Web du projet DOIT fournir des informations sur la façon d'obtenir, de fournir des commentaires (comme des signalements de bogues ou des demandes d'amélioration) et de contribuer au logiciel. [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.



    L'information sur la façon de contribuer DOIT expliquer le processus de contribution (par exemple, les pull requests sont-ils utilisés ?) (URL requise) [contribution]
    Nous supposons que les projets sur GitHub utilisent les problèmes et les pull requests, sauf indication contraire. Cette information peut être courte, par exemple, en indiquant que le projet utilise les pull requests, un suivi des problèmes ou des messages dans une liste de diffusion (laquelle ?)

    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.



    Les informations sur la façon de contribuer DEVRAIENT inclure les exigences pour des contributions acceptables (par exemple, une référence à toute norme de codage requise). (URL requise) [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

  • Licence FLOSS

    Sous quelle(s) licence(s) le projet est-il distribué ?
    Utilisez un format d'expression de licence SPDX ; des exemples sont « Apache-2.0 », « BSD-2-Clause », « BSD-3-Clause », « GPL-2.0+ », « LGPL-3.0+ », « MIT » et « (BSD-2-Clause OU Ruby) ». Ne pas inclure des guillemets simples ou doubles.



    Le logiciel produit par le projet DOIT être distribué en tant que FLOSS. [floss_license]
    FLOSS est un logiciel distribué d'une manière qui répond à la Définition de l'Open Source ou à la Définition du Logiciel Libre. Des exemples de ces licences sont CC0, MIT, BSD 2-clause, BSD 3-clause révisée, Apache 2.0, Lesser GNU General Public License (LGPL), et GNU General Public License (GPL). Pour nos besoins, cela signifie que la licence DOIT être : Le logiciel PEUT également être distribué avec d'autres licences (par exemple, « GPLv2 ou propriétaire » est acceptable).

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



    Il est PROPOSÉ que toute licence requise pour le logiciel produit par le projet soit approuvée par l'Open Source Initiative (OSI). [floss_license_osi]
    L'OSI utilise un processus d'approbation rigoureux pour déterminer quelles licences sont OSS.

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



    Le projet DOIT afficher la ou les licences de ses résultats dans un emplacement standard dans leur dépôt source. (URL requise) [license_location]
    Une convention est de publier la licence sous la forme d'un fichier à la racine du dépôt appelé LICENSE ou COPYING, qui PEUT être suivi d'une extension telle que « .txt » ou « .md ». Une autre convention est d'avoir un réportoire nommé LICENSES contenant le(s) fichier(s) de licence ; ces fichiers sont généralement nommés comme leur identifiant de licence SPDX suivi d'une extension de fichier appropriée, comme décrit dans la Spécification REUSE. Notez que ce critère est requis uniquement pour le dépôt de sources. Vous n'avez PAS besoin d'inclure le fichier de licence lors de la génération d'un élément à partir du code source (tel qu'un exécutable, un paquet ou un conteneur). Par exemple, lors de la génération d'un paquet R pour le réseau d'archives complet R (CRAN), suivez la procédure standard CRAN : si la licence est une licence standard, utilisez la spécification de standard courte (pour éviter d'installer une autre copie du texte) et listez le fichier LICENSE dans un fichier d'exclusion tel que .Rbuildignore. De même, lors de la création d'un paquet Debian, vous pouvez mettre un lien dans le fichier de copyright vers le fichier de licence dans /usr/share/common-licenses, et exclure le fichier de licence du paquet créé (par exemple, en supprimant le fichier après avoir appelé dh_auto_install). Nous encourageons fortement l'inclusion d'informations de licence lisibles automatiquement dans des formats générés lorsque cela est possible.

    The project posts its license in the standard location:


  • Documentation


    Le projet DOIT fournir une documentation de base pour le logiciel produit par le projet. [documentation_basics]
    Cette documentation doit se trouver dans un certain format (comme le texte ou la vidéo) qui comprend : comment l'installer, comment le démarrer, comment l'utiliser (éventuellement avec un tutoriel à l'aide d'exemples) et comment l'utiliser en toute sécurité (par exemple, quoi faire et ne pas faire) si c'est un sujet approprié pour le logiciel. La documentation de sécurité n'a pas besoin d'être longue. Le projet PEUT utiliser des liens hypertextes vers du matériel hors projet en tant que documentation. Si le projet ne produit pas de logiciel, choisissez « non applicable » (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).



    Le projet DOIT fournir une documentation de référence qui décrit l'interface externe (entrée et sortie) du logiciel produit par le projet. [documentation_interface]
    La documentation d'une interface externe explique à un utilisateur final ou un développeur comment l'utiliser. Cela inclut son interface de programmation (API) si le logiciel en possède une. S'il s'agit d'une bibliothèque, documentez les principales classes / types et méthodes / fonctions pouvant être appelés. S'il s'agit d'une application Web, définissez son interface URL (souvent son interface REST). S'il s'agit d'une interface de ligne de commande, documentez les paramètres et les options qu'elle supporte. Dans de nombreux cas, il est préférable que la majorité de cette documentation soit générée automatiquement, de sorte que cette documentation reste synchronisée avec le logiciel au fur et à mesure qu'il change, mais cela n'est pas nécessaire. Le projet PEUT utiliser des liens hypertextes vers du matériel hors projet en tant que documentation. La documentation PEUT être générée automatiquement (quand c'est possible, c'est souvent la meilleure façon de le faire). La documentation d'une interface REST peut être générée à l'aide de Swagger / OpenAPI. La documentation de l'interface de code PEUT être générée à l'aide d'outils tels que JSDoc (JavaScript), ESDoc (JavaScript), pydoc (Python), devtools (R), pkgdown (R) et Doxygen (plusieurs). Le simple fait d'avoir des commentaires dans le code source n'est pas suffisant pour satisfaire ce critère ; il doit y avoir un moyen simple de voir l'information sans lire l'intégralité du code source. Si le projet ne produit pas de logiciel, choisissez « non applicable » (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.


  • Autre


    Les sites du projet (site Web, dépôt et URLs de téléchargement) DOIVENT supporter HTTPS en utilisant TLS. [sites_https]
    Cela nécessite que l'URL de la page d'accueil du projet et l'URL du référentiel de contrôle de version commencent par « https: » et non par « http: ». Vous pouvez obtenir des certificats gratuits de Let's Encrypt. Les projets PEUVENT mettre en œuvre ce critère en utilisant (par exemple) des pages GitHub, des pages GitLab ou des pages de projet SourceForge. Si vous prenez en charge HTTP, nous vous invitons à rediriger le trafic HTTP vers 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.



    Le projet DOIT avoir un ou plusieurs mécanismes de discussion (y compris les changements et les problèmes proposés) qui peuvent être recherchés, permettent de désigner les messages et les sujets par une URL, permettent aux nouvelles personnes de participer à certaines des discussions et ne nécessitent pas d'installation côté client de logiciels propriétaires. [discussion]
    Parmi les exemples de mécanismes acceptables figurent les listes de diffusion archivées, les problèmes de GitHub et les discussions sur les pull requests, Bugzilla, Mantis et Trac. Les mécanismes de discussion asynchrones (comme IRC) sont acceptables s'ils répondent à ces critères ; assurez-vous qu'il existe un mécanisme d'archivage adressable par URL. Une solution propriétaire en JavaScript, tout en étant découragée, est autorisée.

    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.



    Le projet DEVRAIT fournir de la documentation en anglais et être en mesure d'accepter les signalements de bogues et les commentaires sur le code en anglais. [english]
    L'anglais est actuellement la langue véhiculaire des technologies informatiques ; l'utilisation de l'anglais augmente le nombre de développeurs et de relecteurs potentiels dans le monde entier. Un projet peut répondre à ce critère même si la langue principale de ses principaux développeurs n'est pas l'anglais.

    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.



    Le projet DOIT être maintenu. [maintained]
    Au minimum, le projet doit tenter de répondre aux rapports de problèmes et de vulnérabilités importants. Un projet qui poursuit activement un badge est probablement maintenu. Tous les projets et tous les individus ont des ressources limitées, et les projets typiques doivent rejeter certaines modifications proposées, de sorte que les ressources limitées et les rejets de propositions n'indiquent pas en eux-mêmes un projet non maintenu.

    Lorsqu'un projet sait qu'il ne sera plus maintenu, il doit définir ce critère comme « Non satisfait » et utiliser le(s) mécanisme(s) approprié(s) pour indiquer aux autres qu'il n'est pas maintenu. Par exemple, utiliser « DEPRECATED » comme premier en-tête de son fichier README, ajouter « DEPRECATED » au début de sa page d'accueil, ajouter « DEPRECATED » au début de la description de projet de son dépôt de code, ajouter un badge sans maintenance dans son README et/ou sa page d'accueil, le marquer comme obsolète dans tous les dépôts de paquets (par exemple, npm deprecate), et/ou utiliser le système de marquage du dépôt de code pour l'archiver (par exemple, le paramètre « archive » de GitHub, le marquage « archivé » de GitLab, le statut « lecture seule » de Gerrit ou le statut de projet « abandonné » de SourceForge). Une discussion supplémentaire peut être trouvée ici.

    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.





 Contrôle des modifications 9/9

  • Dépôt source public sous contrôle de version


    Le projet DOIT avoir un dépôt source sous contrôle de version qui est publiquement lisible et possède une URL. [repo_public]
    L'URL PEUT être identique à l'URL du projet. Le projet PEUT utiliser des branches privées (non publiques) dans des cas spécifiques alors que la modification n'est pas diffusée publiquement (par exemple, pour la correction d'une vulnérabilité avant qu'elle ne soit révélée au public).

    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.



    Le dépôt source du projet DOIT suivre les changements apportés, qui a effectué les changements et quand les changements ont été effectués. [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.



    Pour permettre une analyse collaborative, le dépôt source du projet DOIT inclure des versions provisoires pour examen entre versions officielles ; Il NE DOIT PAS inclure que les dernières versions. [repo_interim]
    Les projets PEUVENT choisir d'omettre des versions intermédiaires spécifiques dans leurs dépôts source publics (par exemple, celles qui corrigent des vulnérabilités de sécurité non publiques spécifiques, ne peuvent jamais être rendues publiques ou incluent des éléments qui ne peuvent être légalement publiés et ne sont pas dans la version finale).

    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.



    Il est PROPOSÉ qu'un logiciel reconnu de contrôle de version distribué soit utilisé (par exemple, git) pour le dépôt source du projet. [repo_distributed]
    Git n'est pas spécifiquement requis et les projets peuvent utiliser un logiciel de contrôle de version centralisé (comme subversion) avec justification.

    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.


  • Numérotation unique de la version


    Les résultats du projet DOIVENT avoir un identifiant de version unique pour chaque version destinée à être utilisée par les utilisateurs. [version_unique]
    Cela PEUT être satisfait de diverses façons, y compris les identifiants de commit (comme git commit id ou mercure changeset id) ou un numéro de version (y compris les numéros de version qui utilisent la version sémantique ou les systèmes basés sur la date comme 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.



    Il est PROPOSÉ d'utiliser le format de numérotation de version appelé Versionage Sémantique (SemVer) ou Versionage Calendaire (CalVer). Il est PROPOSÉ que ceux qui utilisent CalVer incluent une valeur de niveau micro. [version_semver]
    Les projets devraient généralement préférer le format attendu par leurs utilisateurs, par exemple, parce que c'est le format normal utilisé par leur écosystème. De nombreux écosystèmes préfèrent SemVer, et SemVer est généralement préféré pour les interfaces de programmation d'applications (API) et les kits de développement logiciel (SDK). CalVer a tendance à être utilisé par des projets de grande envergure, ayant un nombre inhabituellement élevé de dépendances développées indépendamment, ayant une portée en constante évolution ou étant sensibles au temps. Il est PROPOSÉ que ceux qui utilisent CalVer incluent une valeur de niveau micro, car l'inclusion d'un niveau micro prend en charge les branches maintenues simultanément chaque fois que cela devient nécessaire. D'autres formats de numérotation de version peuvent être utilisés, y compris les ID de commit git ou les ID de jeu de modifications mercurial, à condition qu'ils identifient de manière unique les versions. Cependant, certaines alternatives (telles que les ID de commit git) peuvent poser des problèmes en tant qu'identificateurs de version, car les utilisateurs peuvent ne pas être en mesure de déterminer facilement s'ils sont à jour. Le format de l'ID de version peut être sans importance pour l'identification des versions logicielles si tous les destinataires n'exécutent que la dernière version (par exemple, il s'agit du code d'un site Web ou d'un service Internet unique qui est constamment mis à jour par livraison continue).


    Il est PROPOSÉ que les projets identifient chaque version dans leur système de contrôle de version. Par exemple, il est PROPOSÉ que ceux qui utilisent git identifient chaque version à l'aide des tags de 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.


  • Notes de version


    Le projet DOIT fournir, avec chaque distribution, des notes de version qui sont un résumé lisible par les humains des changements majeurs dans cette version afin d'aider les utilisateurs à déterminer s'ils doivent se mettre à niveau et quel sera l'impact de la mise à niveau. Les notes de version NE DOIVENT PAS être la sortie brute d'un journal de contrôle de version (par exemple, les résultats de la commande « git log » ne sont pas des notes de version). Les projets dont les résultats ne sont pas destinés à être réutilisés dans plusieurs emplacements (tels que le logiciel pour un site Web ou un service unique) ET qui utilisent la livraison continue PEUVENT sélectionner « N/A ». (URL requise) [release_notes]
    Les notes de version PEUVENT être mises en œuvre de différentes façons. De nombreux projets les fournissent dans un fichier nommé « NEWS », « CHANGELOG » ou « ChangeLog », éventuellement avec des extensions telles que « .txt », « .md » ou « .html ». Historiquement, le terme « journal des modifications » signifiait un enregistrement de chaque changement, mais pour répondre à ces critères, il faut un résumé lisible par un humain. Les notes de version PEUVENT être fournies à la place par des mécanismes de système de contrôle de version tels que le GitHub Releases workflow.

    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.



    Les notes de version DOIVENT identifier toutes les vulnérabilités connues du public corrigées dans cette version qui avaient déjà une affectation CVE ou similaire lors de la création de la version. Ce critère peut être marqué comme non applicable (N/A) si les utilisateurs ne peuvent pas en général mettre à jour le logiciel eux-mêmes (par exemple, comme c'est souvent le cas pour les mises à jour du noyau). Ce critère s'applique uniquement aux résultats du projet, pas à ses dépendances. S'il n'y a pas de notes de version ou qu'il n'y a pas eu de vulnérabilité publiquement connue, choisissez N/A. [release_notes_vulns]
    Ce critère aide les utilisateurs à déterminer si une mise à jour donnée corrigera une vulnérabilité connue publiquement, pour aider les utilisateurs à prendre une décision éclairée concernant la mise à jour. Si les utilisateurs ne peuvent généralement pas mettre à jour le logiciel eux-mêmes sur leur ordinateur, mais doivent à la place dépendre d'un ou plusieurs intermédiaires pour effectuer la mise à niveau (comme c'est souvent le cas pour un noyau et un logiciel de bas niveau associé à un noyau), le projet peut choisir « non applicable » (N/A) à la place, car ces informations supplémentaires ne seront pas utiles à ces utilisateurs. De même, un projet peut choisir N/A si tous les destinataires n'exécutent que la dernière version (par exemple, il s'agit du code d'un site Web ou d'un service Internet unique qui est constamment mis à jour par livraison continue). Ce critère s'applique uniquement aux résultats du projet, pas à ses dépendances. Énumérer les vulnérabilités de toutes les dépendances transitives d'un projet devient ingérable à mesure que les dépendances augmentent et varient, et n'est pas nécessaire car les outils qui examinent et suivent les dépendances peuvent le faire de manière plus évolutive.

    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.


 Compte-rendu 7/8

  • Procédure de signalement des bogues


    Le projet DOIT fournir un processus permettant aux utilisateurs de soumettre des signalements de bogue (par exemple, en utilisant un suivi des problèmes ou une liste de diffusion). (URL requise) [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.



    Le projet DEVRAIT utiliser un suivi des problèmes pour le suivi des problèmes individuels. [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.



    Le projet DOIT confirmer une majorité des signalements de bogues soumis au cours des 2 à 12 derniers mois (inclus) ; la réponse ne doit pas nécessairement inclure une correction. [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.



    Le projet DEVRAIT répondre à une majorité (>50%) des demandes d'amélioration au cours des 2 à 12 derniers mois (inclus). [enhancement_responses]
    La réponse PEUT être « non » ou une discussion sur ses mérites. Le but est simplement qu'il y ait une réponse à certaines demandes, ce qui indique que le projet est toujours en vie. Aux fins de ce critère, les projets ne doivent pas compter les fausses demandes (par exemple, provenant de spammeurs ou de systèmes automatisés). Si un projet ne fait plus d'améliorations, sélectionnez « non satisfait » et incluez l'URL qui rend cette situation claire pour les utilisateurs. Si un projet tend à être submergé par le nombre de demandes d'amélioration, sélectionnez « non satisfait » et expliquez.

    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.



    Le projet DOIT avoir une archive publique pour les signalements et les réponses pour une recherche ultérieure. (URL requise) [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.


  • Processus de signalement de vulnérabilité


    Le projet DOIT publier le processus de signalement des vulnérabilités sur le site du projet. (URL requise) [vulnerability_report_process]
    Les projets hébergés sur GitHub DEVRAIENT envisager d'activer le signalement privé d'une vulnérabilité de sécurité . Les projets sur GitLab DEVRAIENT envisager d'utiliser sa capacité à signaler une vulnérabilité en privé . Les projets PEUVENT identifier une adresse postale sur https://PROJECTSITE/security, souvent sous la forme security@example.org. Ce processus de rapport de vulnérabilité PEUT être le même que son processus de rapport de bogue. Les rapports de vulnérabilité PEUVENT toujours être publics, mais de nombreux projets ont un mécanisme de rapport de vulnérabilité privé.

    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.



    Si les signalements de vulnérabilités privés sont pris en charge, le projet DOIT inclure la façon d'envoyer l'information de manière confidentielle. (URL requise) [vulnerability_report_private]
    Des exemples incluent un signalement de défaut privé envoyé sur le Web en utilisant HTTPS (TLS) ou un courrier électronique chiffré à l'aide d'OpenPGP. Si les signalements de vulnérabilités sont toujours publics (donc il n'y a jamais de signalements de vulnérabilités privés), choisissez « non applicable » (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.



    Le temps de réponse initial du projet pour tout signalement de vulnérabilité reçu au cours des 6 derniers mois DOIT être inférieur ou égal à 14 jours. [vulnerability_report_response]
    S'il n'y a pas eu de vulnérabilité signalée au cours des 6 derniers mois, choisissez « non applicable » (N/A).

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


 Qualité 13/13

  • Système de construction opérationnel


    Si le logiciel produit par le projet nécessite d'être construit pour être utilisé, le projet DOIT fournir un système de construction fonctionnel qui peut reconstruire automatiquement le logiciel à partir du code source. [build]
    Un système de construction détermine quelles actions doivent se produire pour reconstruire le logiciel (et dans quel ordre), puis exécute ces étapes. Par exemple, il peut invoquer un compilateur pour compiler le code source. Si un exécutable est créé à partir du code source, il doit être possible de modifier le code source du projet, puis de générer un exécutable mis à jour avec ces modifications. Si le logiciel produit par le projet dépend de bibliothèques externes, le système de construction n'a pas besoin de construire ces bibliothèques externes. S'il n'est pas nécessaire de construire quoi que ce soit pour utiliser le logiciel après la modification de son code source, sélectionnez « non applicable » (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.



    Il est PROPOSÉ d'utiliser des outils courants pour la construction du logiciel. [build_common_tools]
    Par exemple, Maven, Ant, cmake, autotools, make, rake (Ruby) ou 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.



    Le projet DEVRAIT être constructible en utilisant uniquement des outils FLOSS. [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.


  • Suite de tests automatisée


    Le projet DOIT utiliser au moins une suite de tests automatisée publiée publiquement comme FLOSS (cette suite de tests peut être maintenue sous la forme d'un projet FLOSS distinct). Le projet DOIT clairement montrer ou documenter comment exécuter la ou les suites de tests (par exemple, via un script d'intégration continue (CI) ou via la documentation dans des fichiers tels que BUILD.md, README.md ou CONTRIBUTING.md). [test]
    Le projet PEUT utiliser plusieurs suites de tests automatisées (par exemple, une qui s'exécute rapidement, par rapport à une autre qui est plus approfondie, mais nécessite un équipement spécial). De nombreuses plate-formes de tests et environnements de tests sont disponibles, tels que Selenium (automatisation de navigateur Web), 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.



    Une suite de tests DEVRAIT être invocable d'une manière standard pour ce langage. [test_invocation]
    Par exemple, « make check », « mvn test » ou « 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.



    Il est PROPOSÉ que la suite de tests couvre la plupart (ou idéalement toutes) les branches du code, les champs de saisie et les fonctionnalités. [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.



    Il est PROPOSÉ que le projet utilise une intégration continue (où le code nouveau ou modifié est fréquemment intégré dans un dépôt de code central et des tests automatisés sont exécutés sur le résultat). [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.


  • Nouveau test de fonctionnalité


    Le projet DOIT avoir une politique générale (formelle ou non) qui spécifie que, dès qu'une nouvelle fonctionnalité majeure est ajoutée au logiciel produit par le projet, des tests de cette fonctionnalité devraient être ajoutés à une suite de tests automatisée. [test_policy]
    Dès qu'une politique est en place, même par le bouche à oreille, qui spécifie que les développeurs devraient ajouter des tests à une suite de tests automatisée pour toute nouvelle fonctionnalité importante, sélectionnez « Atteint ».

    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.



    Le projet DOIT avoir la preuve que la politique de test pour l'ajout de tests a été respectée dans les dernières modifications majeures apportées au logiciel produit par le projet. [tests_are_added]
    Les principales fonctionnalités sont généralement mentionnées dans les notes de version. La perfection n'est pas nécessaire, il suffit de prouver que les tests sont généralement ajoutés en pratique à la suite de tests automatisée lorsque de nouvelles fonctionnalités majeures sont ajoutées au logiciel produit par le projet.

    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.



    Il est PROPOSÉ que cette politique sur l'ajout de tests (voir la politique de test) soit documentée dans les instructions pour les propositions de modification. [tests_documented_added]
    Cependant, même une règle informelle est acceptable tant que les tests sont ajoutés dans la pratique.

    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.


  • Options d'avertissement


    Le projet DOIT activer une ou plusieurs options d'avertissement du compilateur, un mode du langage « sûr » ou utiliser un outil « linter » séparé pour rechercher des erreurs de qualité de code ou des erreurs simples courantes, s'il existe au moins un outil FLOSS qui peut implémenter ce critère dans le langage sélectionné. [warnings]
    Des exemples d'options d'avertissement du compilateur incluent « -Wall » pour gcc/clang. Des exemples d'un mode de langage « sûr » incluent « use strict » en JavaScript et « use warnings » de perl5. Un outil « linter » distinct est simplement un outil qui examine le code source pour rechercher des erreurs de qualité de code ou des erreurs simples courantes. Ceux-ci sont généralement activés par le code source ou par les instructions de construction.

    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.



    Le projet DOIT résoudre les avertissements. [warnings_fixed]
    Ce sont les avertissements identifiés par la mise en œuvre du critère warnings. Le projet doit corriger les avertissements ou les marquer dans le code source comme faux positifs. Idéalement, il n'y aurait pas d'avertissement, mais un projet PEUT accepter certains avertissements (généralement moins de 1 avertissement pour 100 lignes ou moins de 10 avertissements).

    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.



    Il est PROPOSÉ que les projets soient maximalement stricts avec les avertissements dans le logiciel produit par le projet, quand cela est approprié. [warnings_strict]
    Certains avertissements ne peuvent être efficacement activés sur certains projets. Ce qui est nécessaire est la preuve que le projet s'efforce d'activer les options d'avertissements où il peut, de sorte que les erreurs soient détectées tôt.

    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.


 Sécurité 14/16

  • Connaissance du développement sécurisé


    Le projet DOIT avoir au moins un développeur principal qui sait comment concevoir un logiciel sécurisé. (Voir les « détails » pour les exigences exactes.) [know_secure_design]
    Cela nécessite de comprendre les principes de conception suivants, y compris les 8 principes de Saltzer et Schroeder :
    • économie de moyens (maintenez la conception aussi simple et petite que pratique, par exemple en adoptant des simplifications conséquentes)
    • valeurs sûres par défaut (les décisions d'accès par défaut devraient être de refuser l'accès et l'installation des projets devrait être sécurisée par défaut)
    • médiation complète (tous les accès qui pourraient être limités doivent être vérifiés pour l'autorité et ne pas être contournables)
    • conception ouverte (les mécanismes de sécurité ne doivent pas dépendre de l'ignorance par l'attaquant de sa conception, mais plutôt d'informations plus facilement protégées et modifiées comme des clés et des mots de passe)
    • séparation des privilèges (idéalement, l'accès aux objets importants devrait dépendre de plus d'une condition, de sorte que la défaillance d'un système de protection n'autorisera pas l'accès complet. Par exemple, l'authentification multi-facteurs, comme l'exigence d'un mot de passe et d'un jeton matériel, est plus forte qu'une authentification à un seul facteur)
    • principe de plus faible privilège (les processus doivent fonctionner avec le minimum de privilège requis)
    • mécanisme de partage minimal (la conception devrait minimiser les mécanismes communs à plus d'un utilisateur et nécessaires à tous les utilisateurs, par exemple, les répertoires pour les fichiers temporaires)
    • acceptabilité psychologique (l'interface humaine doit être conçue pour faciliter l'utilisation - la conception pour « l'étonnement minimal » peut aider)
    • surface d'attaque limitée (la surface d'attaque - l'ensemble des différents points où un attaquant peut essayer d'entrer ou d'extraire des données - devrait être limitée)
    • validation d'entrée avec des listes blanches (les entrées devraient généralement être vérifiées pour déterminer si elles sont valides avant qu'elles ne soient acceptées ; cette validation devrait utiliser des listes blanches (qui n'acceptent que des bonnes valeurs connues), et non des listes noires (qui tentent de répertorier les valeurs mauvaises connues)).
    Un « développeur principal » dans un projet est celui qui connaît la base de code du projet, est à l'aise pour faire des modifications et est reconnu comme tel par la plupart des autres participants au projet. Un développeur principal a effectué généralement un certain nombre de contributions au cours de l'année écoulée (du code, de la documentation ou des réponses aux questions). Des développeurs sont généralement considérés comme des développeurs principaux s'ils ont lancé le projet (et n'ont pas quitté le projet il y a plus de trois ans), ont la possibilité de recevoir des informations sur un canal privé de déclaration de vulnérabilités (s'il y en a un), peuvent accepter des contributions au nom du projet, ou effectuer les distributions finales du logiciel du projet. S'il n'y a qu'un seul développeur, cette personne est le développeur principal. De nombreux livres et cours sont disponibles pour vous aider à comprendre comment développer des logiciels plus sûrs et pour discuter de leur conception. Par exemple, le cours Bases du développement logiciel sécurisé est un ensemble gratuit de trois cours qui expliquent comment développer des logiciels plus sûrs (il est possible de le suivre gratuitement comme auditeur ; il est aussi possible de payer pour obtenir un certificat prouvant que vous avez compris les enseignements du cours).

    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.



    Au moins l'un des principaux développeurs du projet DOIT connaître les types courants d'erreurs qui conduisent à des vulnérabilités dans ce genre de logiciel, ainsi qu'au moins une méthode pour contrer ou atténuer chacun d'eux. [know_common_errors]
    Des exemples (selon le type de logiciel) incluent l'injection SQL, l'injection OS, le débordement mémoire classique, le cross-site scripting, l'authentification manquante et l'autorisation manquante. Voir CWE/SANS top 25 ou OWASP Top 10 pour les listes couramment utilisées. De nombreux livres et cours sont disponibles pour vous aider à comprendre comment développer des logiciels plus sûrs et discuter des erreurs courantes de mise en œuvre qui conduisent à des vulnérabilités. Par exemple, le cours Bases du développement logiciel sécurisé est un ensemble gratuit de trois cours qui expliquent comment développer des logiciels plus sûrs (gratuitement ; vous pouvez payer pour obtenir un certificat démontrant que vous avez assimilé le matériel présenté).

    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.


  • Utiliser de bonnes pratiques de base de cryptographie

    Notez que certains logiciels n'ont pas besoin d'utiliser des mécanismes cryptographiques. Si votre projet produit un logiciel qui (1) inclut ou active la fonctionnalité de chiffrement, et (2) peut être publié des États-Unis (US) vers l'extérieur des États-Unis ou vers un citoyen autre qu'américain, vous pouvez être légalement obligé à faire quelques étapes supplémentaires. En règle générale, cela implique simplement l'envoi d'un email. Pour plus d'informations, consultez la section sur le chiffrement de Comprendre la technologie Open Source et les contrôles à l'exportation américains .

    Le logiciel produit par le projet DOIT utiliser, par défaut, uniquement les protocoles cryptographiques et les algorithmes publiés publiquement et revus par des experts (si des protocoles et algorithmes cryptographiques sont utilisés). [crypto_published]
    Ces critères cryptographiques ne s'appliquent pas toujours car certains logiciels n'ont pas besoin d'utiliser directement de capacités cryptographiques.


    Si le logiciel produit par le projet est une application ou une bibliothèque, et si son objectif principal n'est pas d'implémenter de la cryptographie, alors il DEVRAIT simplement appeler un logiciel spécialement conçu pour implémenter des fonctions cryptographiques ; il ne DEVRAIT PAS ré-implémenter les siennes. [crypto_call]


    Toutes les fonctionnalités du logiciel produit par le projet qui dépendent de la cryptographie DOIVENT être réalisables à l'aide de FLOSS. [crypto_floss]


    Les mécanismes de sécurité dans le logiciel produit par le projet DOIVENT utiliser des longueurs de clés par défaut qui satisfont au moins aux exigences minimales du NIST jusqu'à l'année 2030 (comme indiqué en 2012). Il DOIT être possible de configurer le logiciel afin que les plus petites longueurs de clés soient complètement désactivées. [crypto_keylength]
    Ces longueurs de bit minimales sont : pour une clé symétrique 112, pour un modulo de factorisation 2048, pour une clé de logarithme discret 224, pour un groupe du logarithmique discret 2048, pour une courbe elliptique 224 et pour un hachage 224 (le hachage de mot de passe n'est pas couvert par cette longueur de bit, plus d'informations sur le hachage de mot de passe peuvent être trouvées dans le critère crypto_password_storage). Voir https://www.keylength.com pour une comparaison des recommandations sur les longueurs de clés de diverses organisations. Le logiciel PEUT permettre de plus petites longueurs de clés dans certaines configurations (idéalement non, car cela permet des attaques de dégradation, mais des longueurs de clés plus courtes sont parfois nécessaires pour l'interopérabilité).


    Les mécanismes de sécurité par défaut dans le logiciel produit par le projet NE DOIVENT PAS dépendre d'algorithmes cryptographiques cassés (par exemple, MD4, MD5, DES unique, RC4, Dual_EC_DRBG) ou utiliser des modes de chiffrement inappropriés dans le contexte, sauf si ils sont nécessaires pour implémenter un protocole d'interopérabilité (où le protocole implémenté est la version la plus récente du standard supporté largement par l'écosystème du réseau, l'écosystème requiert l'utilisation de cet algorithme ou mode, et cet écosystème n'offre pas d'alternative plus sûre). La documentation DOIT décrire tous les risques de sécurité appropriés et les parades connues si ces algorithmes ou modes cassés sont nécessaires pour un protocole d'interopérabilité. [crypto_working]
    Le mode ECB n'est presque jamais approprié car il révèle des blocs identiques dans le texte chiffré, comme le montre le pingouin ECB, et le mode CTR est souvent inapproprié car il n'effectue pas d'authentification et provoque des doublons si l'état d'entrée est dupliqué. Dans de nombreux cas, il est préférable de choisir un mode d'algorithme de chiffrement de bloc conçu pour combiner le secret et l'authentification, par exemple Galois/Counter Mode (GCM) et EAX. Les projets PEUVENT permettre aux utilisateurs d'activer les mécanismes cassés (par exemple pendant la configuration) si nécessaire pour la compatibilité, mais les utilisateurs savent alors qu'ils le font.


    Les mécanismes de sécurité par défaut dans le logiciel produit par le projet NE DEVRAIENT PAS dépendre d'algorithmes ou de modes cryptographiques avec des faiblesses sérieuses connues (par exemple, l'algorithme de hachage cryptographique SHA-1 ou le mode CBC en SSH). [crypto_weaknesses]
    Les préoccupations concernant le mode CBC en SSH sont discutées dans CERT : vulnérabilité SSH CBC.


    Les mécanismes de sécurité dans le logiciel produit par le projet DEVRAIENT implémenter la confidentialité persistante pour les protocoles d'échange de clés afin qu'une clé de session dérivée d'un ensemble de clés à long terme ne soit pas compromise si l'une des clés à long terme est compromise dans le futur. [crypto_pfs]


    Si le logiciel produit par le projet entraîne la sauvegarde de mots de passe pour l'authentification d'utilisateurs externes, les mots de passe DOIVENT être sauvegardés comme hachages itérés avec un salage par utilisateur en utilisant un algorithme d'étirement de clé (itéré) (par exemple Argon2id, Bcrypt, Scrypt, ou PBKDF2). Voir également le pense-bête sur le stockage des clés d'OWASP. [crypto_password_storage]
    Ce critère s'applique uniquement lorsque le logiciel applique l'authentification des utilisateurs utilisant des mots de passe pour les utilisateurs extérieurs (càd l'authentification entrante), telles que des applications Web côté serveur. Il ne s'applique pas dans les cas où le logiciel sauvegarde des mots de passe pour l'authentification dans d'autres systèmes (càd l'authentification sortante, par exemple, le logiciel implémente un client pour un autre système), car au moins certaines parties de ce logiciel doivent avoir souvent accès au mot de passe en clair.


    Les mécanismes de sécurité dans le logiciel produit par le projet DOIVENT générer toutes les clés cryptographiques et les nonces en utilisant un générateur de nombres aléatoires cryptographiquement sécurisé, et NE DOIVENT PAS le faire en utilisant des générateurs qui ne seraient pas cryptographiquement sécurisés. [crypto_random]
    Un générateur de nombres aléatoires cryptographiquement sécurisé peut être un générateur de nombres aléatoires matériel ou un générateur de nombres pseudo-aléatoires cryptographiquement sécurisé (CSPRNG) utilisant un algorithme tel que Hash_DRBG, HMAC_DRBG, CTR_DRBG, Yarrow ou Fortuna. Des exemples d'appels de générateurs de nombres aléatoires sûrs incluent java.security.SecureRandom en Java et window.crypto.getRandomValues ​​de JavaScript. Des exemples d'appels de générateurs de nombres aléatoires non sûrs incluent java.util.Random en Java et Math.random en JavaScript.

  • Livraison sécurisée contre les attaques man-in-the-middle (MITM)


    Le projet DOIT utiliser un mécanisme de livraison qui contrecarre les attaques MITM. L'utilisation de https ou ssh+scp est acceptable. [delivery_mitm]
    Un mécanisme encore plus fort distribue le logiciel sous forme de paquetages signés numériquement, car cela atténue les attaques sur le système de distribution, mais cela ne fonctionne que si les utilisateurs peuvent être convaincus que les clés publiques pour les signatures sont correctes et si les utilisateurs vérifient la signature.

    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.



    Un hachage cryptographique (par exemple, un sha1sum) NE DOIT PAS être récupéré par http et utilisé sans vérifier une signature cryptographique. [delivery_unsigned]
    Ces hachages peuvent être modifiés en transit.

    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.


  • Vulnérabilités publiquement identifiées et corrigées


    Il ne DOIT pas y avoir de vulnérabilités non corrigées de gravité moyenne ou supérieure connues publiquement depuis plus de 60 jours. [vulnerabilities_fixed_60_days]
    La vulnérabilité doit être corrigée et diffusée par le projet lui-même (les correctifs peuvent être développés ailleurs). Une vulnérabilité devient publique (à cet effet) une fois qu'elle a un CVE avec des informations non payantes publiquement publiées (signalée, par exemple, dans la Base de données Nationale des Vulnérabilités) ou lorsque le projet a été informé et que l'information a été diffusée au public (éventuellement par le projet). Une vulnérabilité est considérée de gravité moyenne ou supérieure si son score de base qualitatif du Système Commun d'Évaluation des Vulnérabilités (CVSS) est moyen ou supérieur. Dans les versions CVSS 2.0 à 3.1, cela équivaut à un score CVSS de 4.0 ou supérieur. Les projets peuvent utiliser le score CVSS publié dans une base de données de vulnérabilité largement utilisée (telle que la base de données nationale des vulnérabilités) en utilisant la version la plus récente de CVSS rapportée dans cette base de données. Les projets peuvent aussi calculer eux-mêmes la gravité à l'aide de la dernière version de CVSS au moment de la divulgation de la vulnérabilité, si les entrées de calcul sont révélées publiquement une fois que la vulnérabilité est connue du public.Note : cela signifie que les utilisateurs peuvent être laissés vulnérables à tous les attaquants du monde entier jusqu'à 60 jours. Ce critère est souvent beaucoup plus facile à atteindre que ce que Google recommande dans son Redémarrage de la divulgation responsable, car Google recommande que la période de 60 jours commence lorsque le projet est notifié même si le rapport n'est pas public. Notez que ce critère de badge, comme d'autres critères, s'applique à un projet individuel. Certains projets font parti d'organisations ou de projets englobants, parfois à plusieurs niveaux, et de nombreux projets fournissent leurs résultats à d'autres organisations et projets au sein d'une chaîne approvisionnement potentiellement complexe. Un projet individuel ne peut souvent pas contrôler le reste, mais un projet individuel peut travailler à fournir un correctif de vulnérabilité à temps. Pour cette raison, nous nous concentrons seulement sur le temps de réponse des projets individuels. Une fois qu'un correctif est disponible de la part d'un projet individuel, les autres projets peuvent déterminer comment appliquer le correctif (par exemple, ils peuvent mettre à jour la dernière version ou ils peuvent appliquer uniquement le correctif).


    Les projets DEVRAIENT corriger rapidement toutes les vulnérabilités critiques après leur signalement. [vulnerabilities_critical_fixed]

  • Autres problèmes de sécurité


    Les dépôts publics NE DOIVENT PAS fuiter un certificat privé valide (par exemple, un mot de passe ou une clé privée) qui est destiné à limiter l'accès public. [no_leaked_credentials]
    Un projet PEUT fuiter des « échantillons » de certificats pour les tests et pour des bases de données sans importance, pour autant qu'ils ne soient pas destinés à limiter l'accès public.

    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).


 Analyse 6/8

  • Analyse statique de code


    Au moins un outil d'analyse statique de code (au-delà des avertissements du compilateur et des modes « sûrs » des languages) DOIT être appliqué à toute distribution majeure proposée avant sa sortie s'il existe au moins un outil FLOSS qui implémente ce critère dans le langage sélectionné. [static_analysis]
    Un outil d'analyse statique de code examine le code logiciel (au niveau du code source, du code intermédiaire ou de l'exécutable) sans l'exécuter avec des entrées spécifiques. Aux fins de ce critère, les avertissements du compilateur et les modes de langage « sûrs » ne comptent pas comme des outils d'analyse statique de code (ceux-ci évitent généralement une analyse approfondie car la rapidité est vitale). Certains outils d'analyse statique se concentrent sur la détection de défauts génériques, d'autres se concentrent sur la détection de défauts spécifiques (tels que les vulnérabilités) et d'autres encore proposent une combinaison de ces deux types d'outils. Des exemples de tels outils d'analyse statique de code incluent cppcheck (C, C++), clang static analyzer (C, C++), SpotBugs (Java), FindBugs (Java) (y compris FindSecurityBugs), PMD (Java), Brakeman (Ruby on Rails), lintr (R), goodpractice (R), Coverity Quality Analyzer, SonarQube, Codacy et HP Enterprise Fortify Static Code Analyzer. Des listes plus vastes d'outils peuvent être trouvées dans des endroits tels que la liste Wikipedia d'outils pour l'analyse statique de code, l'information OWASP sur l'analyse statique de code, la liste NIST des analyseurs de sécurité du code source et la liste des outils d'analyse statique de Wheeler. S'il n'y a pas d'outil d'analyse statique FLOSS disponible pour le(s) langage(s) d'implémentation utilisé(s), sélectionnez « N/A ».


    Il est PROPOSÉ qu'au moins l'un des outils d'analyse statique utilisés pour le critère d'analyse statique inclue des règles ou des approches pour rechercher des vulnérabilités courantes dans le langage ou l'environnement analysé. [static_analysis_common_vulnerabilities]
    Les outils d'analyse statique spécialement conçus pour détecter les vulnérabilités les plus courantes sont plus susceptibles de les détecter. Cela dit, l'utilisation d'outils statiques aidera généralement à trouver des problèmes, nous suggérons donc, sans l'exiger, de le faire pour le badge de niveau « passant ».


    Toutes les vulnérabilités exploitables de gravité moyenne ou plus découvertes avec une analyse statique de code DOIVENT être corrigées en temps approprié après leur confirmation. [static_analysis_fixed]
    Une vulnérabilité est considérée comme étant de gravité moyenne ou supérieure si son score qualitatif de base du Système Commun d'Évaluation des Vulnérabilités (CVSS) est moyen ou supérieur. Dans les versions CVSS 2.0 à 3.1, cela équivaut à un score CVSS de 4.0 ou supérieur. Les projets peuvent utiliser le score CVSS publié dans une base de données de vulnérabilité largement utilisée (telle que la base de données nationale des vulnérabilités) en utilisant la version la plus récente de CVSS rapportée dans cette base de données. Les projets peuvent aussi calculer eux-mêmes la gravité à l'aide de la dernière version de CVSS au moment de la divulgation de la vulnérabilité, si les entrées de calcul sont révélées publiquement une fois que la vulnérabilité est connue du public. Remarquez que le critère vulnerabilities_fixed_60_days nécessite que de telles vulnérabilités soient corrigées dans les 60 jours de leur divulgation publique.


    Il est PROPOSÉ que l'analyse statique du code source se produise à chaque commit ou au moins quotidiennement. [static_analysis_often]

  • Analyse dynamique de code


    Il est PROPOSÉ qu'au moins un outil d'analyse dynamique soit appliqué à tout candidat pour une version majeure du logiciel avant sa distribution. [dynamic_analysis]
    Un outil d'analyse dynamique examine le logiciel en l'exécutant avec des entrées spécifiques. Par exemple, le projet PEUT utiliser un outil de fuzzing (par exemple, American Fuzzy Lop) ou un scanner d'application Web (par exemple, OWASP ZAP ou w3af). Dans certains cas, le projet OSS-Fuzz peut être prêt à appliquer des tests de fuzzing à votre projet. Aux fins de ce critère, l'outil d'analyse dynamique doit varier les entrées d'une manière ou d'une autre pour rechercher différents types de problèmes ou être une suite de test automatisée avec au moins 80% de couverture de branche. La page Wikipedia sur l'analyse dynamique et la page OWASP sur le fuzzing identifient certains outils d'analyse dynamique. Le ou les outils d'analyse PEUVENT être axés sur la recherche de vulnérabilités de sécurité, mais cela n'est pas nécessaire.

    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.



    Il est PROPOSÉ que, si le logiciel produit par le projet comprend un logiciel écrit à l'aide d'un langage non sûr pour les accès mémoire (par exemple, C ou C ++), au moins un outil dynamique (par exemple, un fuzzer ou un scanner d'application Web) soit utilisé de façon routinière en combinaison avec un mécanisme pour détecter des problèmes de sécurité mémoire tels que les dépassements de zone mémoire. Si le projet ne produit pas de logiciel écrit dans un langage non sûr pour les accès mémoire, choisissez « non applicable » (N/A). [dynamic_analysis_unsafe]
    Des exemples de mécanismes pour détecter les problèmes de sécurité de la mémoire comprennent Address Sanitizer (ASAN) (disponible dans GCC et LLVM), Memory Sanitizer et valgrind. D'autres outils potentiellement utilisés incluent thread sanitizer et undefined behavior sanitizer. La généralisation de l'utilisation des assertions fonctionnera également.

    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.



    Il est PROPOSÉ que le projet utilise une configuration pour au moins une analyse dynamique (comme le test ou le fuzzing) qui active de nombreuses assertions. Dans de nombreux cas, ces assertions ne doivent pas être activées dans les versions de production. [dynamic_analysis_enable_assertions]
    Ce critère ne suggère pas d'activer les assertions en production ; c'est entièrement au projet et à ses utilisateurs de le décider. L'objectif de ce critère est plutôt d'améliorer la détection des défauts lors de l'analyse dynamique avant le déploiement. L'activation des assertions en production est complètement différente de l'activation des assertions pendant l'analyse dynamique (comme les tests). Dans certains cas, il est extrêmement imprudent d'activer les assertions en production (en particulier dans les composants à haute intégrité). Il existe de nombreux arguments contre l'activation des assertions en production, par exemple, les bibliothèques ne devraient pas faire échouer les appelants, leur présence peut provoquer le rejet par les magasins d'applications et/ou l'activation d'une assertion en production peut exposer des données privées telles que des clés privées. Attention, dans de nombreuses distributions Linux, NDEBUG n'est pas défini, donc assert() sera activé par défaut en C/C++ pour la production dans ces environnements. Il peut être important d'utiliser un mécanisme d'assertion différent ou de définir NDEBUG pour la production dans ces environnements.

    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.



    Toutes les vulnérabilités exploitables de gravité moyenne ou plus découvertes avec une analyse de code dynamique DOIVENT être corrigées en un temps approprié après leur confirmation. [dynamic_analysis_fixed]
    Si vous n'utilisez pas d'analyse de code dynamique et n'avez donc trouvé aucune vulnérabilité de cette manière, choisissez « non applicable » (N/A). Une vulnérabilité est considérée comme étant de gravité moyenne ou supérieure si son score qualitatif de base du Système Commun d'Évaluation des Vulnérabilités (CVSS) est moyen ou supérieur. Dans les versions CVSS 2.0 à 3.1, cela équivaut à un score CVSS de 4.0 ou supérieur. Les projets peuvent utiliser le score CVSS publié dans une base de données de vulnérabilité largement utilisée (telle que la base de données nationale des vulnérabilités) en utilisant la version la plus récente de CVSS rapportée dans cette base de données. Les projets peuvent aussi calculer eux-mêmes la gravité à l'aide de la dernière version de CVSS au moment de la divulgation de la vulnérabilité, si les entrées de calcul sont révélées publiquement une fois que la vulnérabilité est connue du public.

    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.

Soumission du badge du projet appartenant à : Scot Breitenfeld.
Soumission créée le 2023-09-05 17:54:26 UTC, dernière mise à jour le 2025-12-03 17:51:05 UTC.