`openssl_pkcs7_read()` / `openssl_cms_read()`: CRLs overwrite certificates in the output array
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
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
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
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de php/php-src
-
fileinfo: built-in magic database php_magic_database is not aligned, breaks on strict-alignment CPUs (ARMv5, 32-bit)Posiblemente ocupada @lazerg la tomó hoy. AbiertoBug Extension: fileinfo Status: Verified
Dificultad 2/5 1-3 horas Aptitud para principiantes 73/100
Los mantenedores suelen responder en 1 día
-
Windows CLI: get_ps_title() passes bytes to GetConsoleTitleW() instead of characters, overflowing the 260-wchar_t bufferPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 79/100
Los mantenedores suelen responder en 1 día
-
master: part of the mbstring bailout fix got lost in a mergePosiblemente ocupada @lazerg la tomó hace 7 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Bug Status: Needs Triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 64/100
Los mantenedores suelen responder en 1 día
-
quoted_printable_encode() produces lines longer than 76 characters for bytes 0xF5 to 0xFFPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
Todos los issues de php/php-src
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
InukaAsith/TwinDesk#84 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
CanadaHonk/porffor#426 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 77/100
raysan5/raylib.com#132 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100