Index: net/cert/x509_certificate_bytes.cc |
diff --git a/net/cert/x509_certificate_bytes.cc b/net/cert/x509_certificate_bytes.cc |
index a351fb90cf26b933abb0085d42cdb428f6657592..8ffc3f6d4623fd6a129b8a7e2818ee56db7b7ec0 100644 |
--- a/net/cert/x509_certificate_bytes.cc |
+++ b/net/cert/x509_certificate_bytes.cc |
@@ -17,9 +17,9 @@ |
#include "net/cert/internal/verify_name_match.h" |
#include "net/cert/internal/verify_signed_data.h" |
#include "net/cert/x509_util.h" |
-#include "net/cert/x509_util_openssl.h" |
#include "net/der/parser.h" |
#include "third_party/boringssl/src/include/openssl/evp.h" |
+#include "third_party/boringssl/src/include/openssl/pkcs7.h" |
#include "third_party/boringssl/src/include/openssl/pool.h" |
#include "third_party/boringssl/src/include/openssl/sha.h" |
@@ -141,16 +141,17 @@ void CreateOSCertHandlesFromPKCS7Bytes( |
CBS der_data; |
CBS_init(&der_data, reinterpret_cast<const uint8_t*>(data), length); |
- STACK_OF(X509)* certs = sk_X509_new_null(); |
+ STACK_OF(CRYPTO_BUFFER)* certs = sk_CRYPTO_BUFFER_new_null(); |
- if (PKCS7_get_certificates(certs, &der_data)) { |
- for (size_t i = 0; i < sk_X509_num(certs); ++i) { |
- base::StringPiece stringpiece; |
- x509_util::GetDER(sk_X509_value(certs, i), &stringpiece); |
- handles->push_back(x509_util::CreateCryptoBuffer(stringpiece).release()); |
+ if (PKCS7_get_raw_certificates(certs, &der_data, |
+ x509_util::GetBufferPool())) { |
+ for (size_t i = 0; i < sk_CRYPTO_BUFFER_num(certs); ++i) { |
+ handles->push_back(sk_CRYPTO_BUFFER_value(certs, i)); |
} |
} |
- sk_X509_pop_free(certs, X509_free); |
+ // |handles| took ownership of the individual buffers, so only free the list |
+ // itself. |
+ sk_CRYPTO_BUFFER_free(certs); |
} |
} // namespace |