Switch cert_compression_algs to GrowableArray. It's much less typing than STACK_OF(T). Change-Id: Idda99549ba35ff8d02fb6e3790f30f6566236076 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/38044 Reviewed-by: Dan McArdle <dmcardle@google.com> Reviewed-by: David Benjamin <davidben@google.com> Commit-Queue: David Benjamin <davidben@google.com>
diff --git a/ssl/internal.h b/ssl/internal.h index 792329bb..7f163a4 100644 --- a/ssl/internal.h +++ b/ssl/internal.h
@@ -2246,8 +2246,6 @@ DEFINE_LHASH_OF(SSL_SESSION) -DEFINE_NAMED_STACK_OF(CertCompressionAlg, bssl::CertCompressionAlg) - BSSL_NAMESPACE_BEGIN // An ssl_shutdown_t describes the shutdown state of one end of the connection, @@ -3232,7 +3230,7 @@ bssl::UniquePtr<STACK_OF(SRTP_PROTECTION_PROFILE)> srtp_profiles; // Defined compression algorithms for certificates. - bssl::UniquePtr<STACK_OF(CertCompressionAlg)> cert_compression_algs; + bssl::GrowableArray<bssl::CertCompressionAlg> cert_compression_algs; // Supported group values inherited by SSL structure bssl::Array<uint16_t> supported_group_list;
diff --git a/ssl/ssl_lib.cc b/ssl/ssl_lib.cc index 3deac7d..703c2bc 100644 --- a/ssl/ssl_lib.cc +++ b/ssl/ssl_lib.cc
@@ -2251,36 +2251,17 @@ ssl_cert_decompression_func_t decompress) { assert(compress != nullptr || decompress != nullptr); - for (const auto *alg : ctx->cert_compression_algs.get()) { - if (alg->alg_id == alg_id) { + for (const auto &alg : ctx->cert_compression_algs) { + if (alg.alg_id == alg_id) { return 0; } } - UniquePtr<CertCompressionAlg> alg = MakeUnique<CertCompressionAlg>(); - if (alg == nullptr) { - return 0; - } - - alg->alg_id = alg_id; - alg->compress = compress; - alg->decompress = decompress; - - if (ctx->cert_compression_algs == nullptr) { - ctx->cert_compression_algs.reset(sk_CertCompressionAlg_new_null()); - if (ctx->cert_compression_algs == nullptr) { - return 0; - } - } - - if (!PushToStack(ctx->cert_compression_algs.get(), std::move(alg))) { - if (sk_CertCompressionAlg_num(ctx->cert_compression_algs.get()) == 0) { - ctx->cert_compression_algs.reset(); - } - return 0; - } - - return 1; + CertCompressionAlg alg; + alg.alg_id = alg_id; + alg.compress = compress; + alg.decompress = decompress; + return ctx->cert_compression_algs.Push(alg); } void SSL_CTX_set_tls_channel_id_enabled(SSL_CTX *ctx, int enabled) {
diff --git a/ssl/t1_lib.cc b/ssl/t1_lib.cc index 52cea6c..cc29a83 100644 --- a/ssl/t1_lib.cc +++ b/ssl/t1_lib.cc
@@ -2756,8 +2756,8 @@ bool first = true; CBB contents, algs; - for (const auto *alg : hs->ssl->ctx->cert_compression_algs.get()) { - if (alg->decompress == nullptr) { + for (const auto &alg : hs->ssl->ctx->cert_compression_algs) { + if (alg.decompress == nullptr) { continue; } @@ -2767,7 +2767,7 @@ return false; } first = false; - if (!CBB_add_u16(&algs, alg->alg_id)) { + if (!CBB_add_u16(&algs, alg.alg_id)) { return false; } } @@ -2794,8 +2794,8 @@ return true; } - const size_t num_algs = - sk_CertCompressionAlg_num(hs->ssl->ctx->cert_compression_algs.get()); + const SSL_CTX *ctx = hs->ssl->ctx.get(); + const size_t num_algs = ctx->cert_compression_algs.size(); CBS alg_ids; if (!CBS_get_u8_length_prefixed(contents, &alg_ids) || @@ -2823,9 +2823,8 @@ given_alg_ids[given_alg_idx++] = alg_id; for (size_t i = 0; i < num_algs; i++) { - const auto *alg = sk_CertCompressionAlg_value( - hs->ssl->ctx->cert_compression_algs.get(), i); - if (alg->alg_id == alg_id && alg->compress != nullptr) { + const auto &alg = ctx->cert_compression_algs[i]; + if (alg.alg_id == alg_id && alg.compress != nullptr) { if (i < best_index) { best_index = i; } @@ -2845,10 +2844,7 @@ if (best_index < num_algs && ssl_protocol_version(hs->ssl) >= TLS1_3_VERSION) { hs->cert_compression_negotiated = true; - hs->cert_compression_alg_id = - sk_CertCompressionAlg_value(hs->ssl->ctx->cert_compression_algs.get(), - best_index) - ->alg_id; + hs->cert_compression_alg_id = ctx->cert_compression_algs[best_index].alg_id; } return true;
diff --git a/ssl/tls13_both.cc b/ssl/tls13_both.cc index 7457155..18bdef2 100644 --- a/ssl/tls13_both.cc +++ b/ssl/tls13_both.cc
@@ -133,9 +133,9 @@ } ssl_cert_decompression_func_t decompress = nullptr; - for (const auto* alg : ssl->ctx->cert_compression_algs.get()) { - if (alg->alg_id == alg_id) { - decompress = alg->decompress; + for (const auto &alg : ssl->ctx->cert_compression_algs) { + if (alg.alg_id == alg_id) { + decompress = alg.decompress; break; } } @@ -517,9 +517,9 @@ } const CertCompressionAlg *alg = nullptr; - for (const auto *candidate : ssl->ctx->cert_compression_algs.get()) { - if (candidate->alg_id == hs->cert_compression_alg_id) { - alg = candidate; + for (const auto &candidate : ssl->ctx->cert_compression_algs) { + if (candidate.alg_id == hs->cert_compression_alg_id) { + alg = &candidate; break; } }