Align X509v3_get_ext_by_critical() with X509v3_get_ext_by_OBJ()
authortb <tb@openbsd.org>
Fri, 12 Jul 2024 08:44:16 +0000 (08:44 +0000)
committertb <tb@openbsd.org>
Fri, 12 Jul 2024 08:44:16 +0000 (08:44 +0000)
Plus, replace a manual check with a call to X509_EXTENSION_get_critical().

ok jsing

lib/libcrypto/x509/x509_v3.c

index 22fa7e1..5e8257f 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: x509_v3.c,v 1.31 2024/07/12 08:39:54 tb Exp $ */
+/* $OpenBSD: x509_v3.c,v 1.32 2024/07/12 08:44:16 tb Exp $ */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
@@ -112,21 +112,18 @@ int
 X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *sk, int crit,
     int lastpos)
 {
-       int n;
-       X509_EXTENSION *ext;
+       crit = (crit != 0);
 
-       if (sk == NULL)
-               return -1;
-       lastpos++;
-       if (lastpos < 0)
+       if (++lastpos < 0)
                lastpos = 0;
-       n = sk_X509_EXTENSION_num(sk);
-       for (; lastpos < n; lastpos++) {
-               ext = sk_X509_EXTENSION_value(sk, lastpos);
-               if ((ext->critical > 0 && crit) ||
-                   (ext->critical <= 0 && !crit))
+
+       for (; lastpos < X509v3_get_ext_count(sk); lastpos++) {
+               const X509_EXTENSION *ext = X509v3_get_ext(sk, lastpos);
+
+               if (X509_EXTENSION_get_critical(ext) == crit)
                        return lastpos;
        }
+
        return -1;
 }
 LCRYPTO_ALIAS(X509v3_get_ext_by_critical);