Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

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

Cerrado Apto para principiantes
#24,784 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
70/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
c, php
Área
backend, security

Línea de trabajo

Empieza por localizar las implementaciones de openssl_pkcs7_read() y openssl_cms_read() e inspecciona cómo elige cada bucle los índices del array al añadir certificados y CRL. Reproduce el problema con el ejemplo de bundle PKCS#7 proporcionado y comprueba después que la salida conserva ambas entradas en orden. Confirma también la corrección con un bundle CMS, ya que el informe señala el mismo comportamiento allí.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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

Lenguaje dominante
C
Estrellas
41.7k
Forks
8.5k
Merge medio
2 d 10 h
PR fusionados (30 d)
158

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de php/php-src

Todos los issues de php/php-src

Issues similares

Más issues de C

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.