Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

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

Đang mở Phù hợp với người mới
#24,784 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
70/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
c, php
Lĩnh vực
backend, security

Hướng nghiên cứu

Bắt đầu bằng cách tìm các phần triển khai của openssl_pkcs7_read() và openssl_cms_read(), rồi kiểm tra cách mỗi vòng lặp chọn chỉ số mảng khi thêm chứng chỉ và CRL. Tái hiện sự cố bằng ví dụ gói PKCS#7 được cung cấp, sau đó kiểm tra xem đầu ra có giữ cả hai mục theo đúng thứ tự hay không. Cũng xác nhận bản sửa bằng một gói CMS, vì báo cáo cho biết hành vi tương tự cũng xảy ra ở đó.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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

Ngôn ngữ chính
C
Star
40.7k
Fork
8.3k
Merge trung bình
2 ngày 17 giờ
Pull request đã merge (30 ngày)
159

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của php/php-src

Tất cả issue của php/php-src

Issue tương tự

Thêm issue về C

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.