Have some more fun with spans.
Change-Id: I309902cb3ef4c772781af71b0cbc1abfefc513f6
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/37224
Reviewed-by: Steven Valdez <svaldez@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
diff --git a/ssl/ssl_versions.cc b/ssl/ssl_versions.cc
index e25fce6..df5ffd2 100644
--- a/ssl/ssl_versions.cc
+++ b/ssl/ssl_versions.cc
@@ -63,24 +63,16 @@
DTLS1_VERSION,
};
-static void get_method_versions(const SSL_PROTOCOL_METHOD *method,
- const uint16_t **out, size_t *out_num) {
- if (method->is_dtls) {
- *out = kDTLSVersions;
- *out_num = OPENSSL_ARRAY_SIZE(kDTLSVersions);
- } else {
- *out = kTLSVersions;
- *out_num = OPENSSL_ARRAY_SIZE(kTLSVersions);
- }
+static Span<const uint16_t> get_method_versions(
+ const SSL_PROTOCOL_METHOD *method) {
+ return method->is_dtls ? Span<const uint16_t>(kDTLSVersions)
+ : Span<const uint16_t>(kTLSVersions);
}
bool ssl_method_supports_version(const SSL_PROTOCOL_METHOD *method,
uint16_t version) {
- const uint16_t *versions;
- size_t num_versions;
- get_method_versions(method, &versions, &num_versions);
- for (size_t i = 0; i < num_versions; i++) {
- if (versions[i] == version) {
+ for (uint16_t supported : get_method_versions(method)) {
+ if (supported == version) {
return true;
}
}
@@ -282,12 +274,9 @@
}
bool ssl_add_supported_versions(SSL_HANDSHAKE *hs, CBB *cbb) {
- const uint16_t *versions;
- size_t num_versions;
- get_method_versions(hs->ssl->method, &versions, &num_versions);
- for (size_t i = 0; i < num_versions; i++) {
- if (ssl_supports_version(hs, versions[i]) &&
- !CBB_add_u16(cbb, versions[i])) {
+ for (uint16_t version : get_method_versions(hs->ssl->method)) {
+ if (ssl_supports_version(hs, version) &&
+ !CBB_add_u16(cbb, version)) {
return false;
}
}
@@ -296,11 +285,8 @@
bool ssl_negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert,
uint16_t *out_version, const CBS *peer_versions) {
- const uint16_t *versions;
- size_t num_versions;
- get_method_versions(hs->ssl->method, &versions, &num_versions);
- for (size_t i = 0; i < num_versions; i++) {
- if (!ssl_supports_version(hs, versions[i])) {
+ for (uint16_t version : get_method_versions(hs->ssl->method)) {
+ if (!ssl_supports_version(hs, version)) {
continue;
}
@@ -312,20 +298,20 @@
// own.)
//
// See https://bugs.openjdk.java.net/browse/JDK-8211806.
- if (versions[i] == TLS1_3_VERSION && hs->apply_jdk11_workaround) {
+ if (version == TLS1_3_VERSION && hs->apply_jdk11_workaround) {
continue;
}
CBS copy = *peer_versions;
while (CBS_len(©) != 0) {
- uint16_t version;
- if (!CBS_get_u16(©, &version)) {
+ uint16_t peer_version;
+ if (!CBS_get_u16(©, &peer_version)) {
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
*out_alert = SSL_AD_DECODE_ERROR;
return false;
}
- if (version == versions[i]) {
+ if (peer_version == version) {
*out_version = version;
return true;
}