Fix X509error() and X509V3error()
authortb <tb@openbsd.org>
Sun, 14 May 2023 17:20:26 +0000 (17:20 +0000)
committertb <tb@openbsd.org>
Sun, 14 May 2023 17:20:26 +0000 (17:20 +0000)
When v3err.c was merged into x509_err.c nearly three years ago, it was
overlooked that the code needed two distinct pairs of ERR_FUNC/ERR_REASON,
one for ERR_LIB_X509 and one for ERR_LIB_X509V3. The result is that the
reason strings for the X509_R_* codes would be overwritten by the ones for
X509V3_R_* with the same value while the reason strings for all X509V3_R_*
would be left undefined.

Fix this by an #undef/#define dance for ERR_LIB_X509V3 once we no longer
the ERR_FUNC/ERR_REASON pair for ERR_LIB_X509.

reported by job
ok jsing

lib/libcrypto/x509/x509_err.c

index bcb04f1..2cbd349 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: x509_err.c,v 1.21 2023/04/24 08:39:06 job Exp $ */
+/* $OpenBSD: x509_err.c,v 1.22 2023/05/14 17:20:26 tb Exp $ */
 /* ====================================================================
  * Copyright (c) 1999-2006 The OpenSSL Project.  All rights reserved.
  *
@@ -71,11 +71,6 @@ static ERR_STRING_DATA X509_str_functs[] = {
        {0, NULL}
 };
 
-static ERR_STRING_DATA X509V3_str_functs[] = {
-       {ERR_FUNC(0xfff), "CRYPTO_internal"},
-       {0, NULL}
-};
-
 static ERR_STRING_DATA X509_str_reasons[] = {
        {ERR_REASON(X509_R_BAD_X509_FILETYPE)    , "bad x509 filetype"},
        {ERR_REASON(X509_R_BASE64_DECODE_ERROR)  , "base64 decode error"},
@@ -108,6 +103,16 @@ static ERR_STRING_DATA X509_str_reasons[] = {
        {0, NULL}
 };
 
+#undef ERR_FUNC
+#undef ERR_REASON
+#define ERR_FUNC(func) ERR_PACK(ERR_LIB_X509V3,func,0)
+#define ERR_REASON(reason) ERR_PACK(ERR_LIB_X509V3,0,reason)
+
+static ERR_STRING_DATA X509V3_str_functs[] = {
+       {ERR_FUNC(0xfff), "CRYPTO_internal"},
+       {0, NULL}
+};
+
 static ERR_STRING_DATA X509V3_str_reasons[] = {
        {ERR_REASON(X509V3_R_BAD_IP_ADDRESS)     , "bad ip address"},
        {ERR_REASON(X509V3_R_BAD_OBJECT)         , "bad object"},