Use std::sort instead of qsort in libssl
At least in libssl, we've been able to use std::sort without problems.
std::sort has a much, much better API than qsort.
Change-Id: Ife6f134364b653084633bc369ab48fd920db36f8
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/78048
Commit-Queue: David Benjamin <davidben@google.com>
Auto-Submit: David Benjamin <davidben@google.com>
Reviewed-by: Bob Beck <bbe@google.com>
diff --git a/ssl/extensions.cc b/ssl/extensions.cc
index 8d4ee34..38205c5 100644
--- a/ssl/extensions.cc
+++ b/ssl/extensions.cc
@@ -45,18 +45,6 @@
static bool ssl_check_clienthello_tlsext(SSL_HANDSHAKE *hs);
static bool ssl_check_serverhello_tlsext(SSL_HANDSHAKE *hs);
-static int compare_uint16_t(const void *p1, const void *p2) {
- uint16_t u1 = *((const uint16_t *)p1);
- uint16_t u2 = *((const uint16_t *)p2);
- if (u1 < u2) {
- return -1;
- } else if (u1 > u2) {
- return 1;
- } else {
- return 0;
- }
-}
-
// Per http://tools.ietf.org/html/rfc5246#section-7.4.1.4, there may not be
// more than one extension of the same type in a ClientHello or ServerHello.
// This function does an initial scan over the extensions block to filter those
@@ -100,8 +88,7 @@
assert(CBS_len(&extensions) == 0);
// Sort the extensions and make sure there are no duplicates.
- qsort(extension_types.data(), extension_types.size(), sizeof(uint16_t),
- compare_uint16_t);
+ std::sort(extension_types.begin(), extension_types.end());
for (size_t i = 1; i < num_extensions; i++) {
if (extension_types[i - 1] == extension_types[i]) {
return false;
@@ -3057,8 +3044,7 @@
}
}
- qsort(given_alg_ids.data(), given_alg_ids.size(), sizeof(uint16_t),
- compare_uint16_t);
+ std::sort(given_alg_ids.begin(), given_alg_ids.end());
for (size_t i = 1; i < num_given_alg_ids; i++) {
if (given_alg_ids[i - 1] == given_alg_ids[i]) {
return false;
diff --git a/ssl/ssl_privkey.cc b/ssl/ssl_privkey.cc
index 9d9c321..70b9f03 100644
--- a/ssl/ssl_privkey.cc
+++ b/ssl/ssl_privkey.cc
@@ -519,18 +519,6 @@
return alg != nullptr && alg->is_rsa_pss;
}
-static int compare_uint16_t(const void *p1, const void *p2) {
- uint16_t u1 = *((const uint16_t *)p1);
- uint16_t u2 = *((const uint16_t *)p2);
- if (u1 < u2) {
- return -1;
- } else if (u1 > u2) {
- return 1;
- } else {
- return 0;
- }
-}
-
static bool sigalgs_unique(Span<const uint16_t> in_sigalgs) {
if (in_sigalgs.size() < 2) {
return true;
@@ -541,8 +529,7 @@
return false;
}
- qsort(sigalgs.data(), sigalgs.size(), sizeof(uint16_t), compare_uint16_t);
-
+ std::sort(sigalgs.begin(), sigalgs.end());
for (size_t i = 1; i < sigalgs.size(); i++) {
if (sigalgs[i - 1] == sigalgs[i]) {
OPENSSL_PUT_ERROR(SSL, SSL_R_DUPLICATE_SIGNATURE_ALGORITHM);