]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Avoid an unneccessary lock if we didn't add anything to the store
authorMatt Caswell <matt@openssl.org>
Fri, 12 May 2023 14:52:07 +0000 (15:52 +0100)
committerPauli <pauli@openssl.org>
Sun, 4 Jun 2023 23:09:23 +0000 (09:09 +1000)
Partially fixes #20286

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/20952)

crypto/x509/by_dir.c

index 3c7f67b5a180fcb0a251deac9a272400a4f6e58f..cd1b53740b1da521a471ea397d6d75a9ffb0c75a 100644 (file)
@@ -352,11 +352,15 @@ static int get_cert_by_subject_ex(X509_LOOKUP *xl, X509_LOOKUP_TYPE type,
          * Note: quadratic time find here since the objects won't generally be
          *       sorted and sorting the would result in O(n^2 log n) complexity.
          */
-        X509_STORE_lock(xl->store_ctx);
-        j = sk_X509_OBJECT_find(xl->store_ctx->objs, &stmp);
-        tmp = sk_X509_OBJECT_value(xl->store_ctx->objs, j);
-        X509_STORE_unlock(xl->store_ctx);
-
+        if (k > 0) {
+            X509_STORE_lock(xl->store_ctx);
+            j = sk_X509_OBJECT_find(xl->store_ctx->objs, &stmp);
+            tmp = sk_X509_OBJECT_value(xl->store_ctx->objs, j);
+            X509_STORE_unlock(xl->store_ctx);
+        } else {
+            j = -1;
+            tmp = NULL;
+        }
         /*
          * If a CRL, update the last file suffix added for this.
          * We don't need to add an entry if k is 0 as this is the initial value.