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;
}
}