Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

`openssl_pkcs7_read()` / `openssl_cms_read()`: CRLs overwrite certificates in the output array

Ouverte Adaptée aux débutants
#24,784 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
70/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
c, php
Domaine
backend, security

Piste de recherche

Commencez par localiser les implémentations de openssl_pkcs7_read() et openssl_cms_read(), puis examinez comment chaque boucle choisit les indices du tableau lors de l’ajout de certificats et de CRL. Reproduisez le problème avec l’exemple de bundle PKCS#7 fourni, puis vérifiez que la sortie conserve les deux entrées dans l’ordre. Confirmez également la correction avec un bundle CMS, puisque le rapport signale le même comportement dans ce cas.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Bug Status: Needs Triage
Description

openssl_pkcs7_read() and openssl_cms_read() fill the output array with the certificates first and then with the CRLs. Both loops use their own loop counter as the array index (add_index_zval(zout, i, ...)), so the CRL loop starts again from index 0. Each CRL replaces the certificate stored at the same index, and those certificates are lost.

Reproducer

<?php
// $pem is a PKCS#7 bundle with one certificate and one CRL, e.g. created with:
//   openssl crl2pkcs7 -in crl.pem -certfile cert.pem -out bundle.p7b
$pem = file_get_contents('bundle.p7b');

var_dump(openssl_pkcs7_read($pem, $result));
var_dump(count($result));
foreach ($result as $i => $item) {
    echo $i, ': ', strtok($item, "\n"), "\n";
}

Expected result

bool(true)
int(2)
0: -----BEGIN CERTIFICATE-----
1: -----BEGIN X509 CRL-----

Actual result

bool(true)
int(1)
0: -----BEGIN X509 CRL-----

The certificate is gone. The same happens in openssl_cms_read() with a CMS bundle.

PHP Version

PHP 8.4 and later (the code is the same on 8.5 and master).

PHP Version
PHP 8.4.28
Operating System

No response

Langage dominant
C
Étoiles
40.7k
Forks
8.3k
Merge moyen
2 j 17 h
PR mergées (30 j)
159

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de php/php-src

Toutes les issues de php/php-src

Issues similaires

Plus d'issues C

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.