Avoid NULL pointer dereference.
authorPauli <paul.dale@oracle.com>
Mon, 8 Jul 2019 03:39:20 +0000 (13:39 +1000)
committerPauli <paul.dale@oracle.com>
Mon, 8 Jul 2019 03:39:20 +0000 (13:39 +1000)
[manual merge from #9059 to 1.1.0]

Fixes: #9043

Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com>
(Merged from https://github.com/openssl/openssl/pull/9322)

apps/req.c
crypto/x509/t_req.c
crypto/x509/x509_err.c
include/openssl/x509.h

index a20e7c1ef155fa1c49cd49f249cc01dc42584fda..863c2873a7ee2d33e4176c32c0ee47e5bca454ba 100644 (file)
@@ -743,9 +743,19 @@ int req_main(int argc, char **argv)
 
     if (text) {
         if (x509)
-            X509_print_ex(out, x509ss, nmflag, reqflag);
+            ret = X509_print_ex(out, x509ss, nmflag, reqflag);
         else
-            X509_REQ_print_ex(out, req, nmflag, reqflag);
+            ret = X509_REQ_print_ex(out, req, nmflag, reqflag);
+
+        if (ret == 0) {
+            if (x509)
+                BIO_printf(bio_err, "Error printing certificate\n");
+            else
+                BIO_printf(bio_err, "Error printing certificate request\n");
+
+            ERR_print_errors(bio_err);
+            goto end;
+        }
     }
 
     if (subject) {
index 77ce810835f364704d9c35e6b44d4711c923a8c8..3207dfacccaf29d93b75ee73503843c420987a16 100644 (file)
@@ -125,6 +125,10 @@ int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflags,
                 if ((j = i2a_ASN1_OBJECT(bp, aobj)) > 0) {
                     ii = 0;
                     count = X509_ATTRIBUTE_count(a);
+                    if (count == 0) {
+                        X509err(X509_F_X509_REQ_PRINT_EX, X509_R_INVALID_ATTRIBUTES);
+                        return 0;
+                    }
  get_next:
                     at = X509_ATTRIBUTE_get0_type(a, ii);
                     type = at->type;
index 9f91188a7659e7b9cfe9473ef37df21a9635c796..e1a33645f503fa35bad8c6139e1f5ef868e4abd3 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Generated by util/mkerr.pl DO NOT EDIT
- * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
  *
  * Licensed under the OpenSSL license (the "License").  You may not use
  * this file except in compliance with the License.  You can obtain a copy
@@ -97,6 +97,7 @@ static ERR_STRING_DATA X509_str_reasons[] = {
     {ERR_REASON(X509_R_CRL_ALREADY_DELTA), "crl already delta"},
     {ERR_REASON(X509_R_CRL_VERIFY_FAILURE), "crl verify failure"},
     {ERR_REASON(X509_R_IDP_MISMATCH), "idp mismatch"},
+    {ERR_REASON(X509_R_INVALID_ATTRIBUTES), "invalid attributes"},
     {ERR_REASON(X509_R_INVALID_DIRECTORY), "invalid directory"},
     {ERR_REASON(X509_R_INVALID_FIELD_NAME), "invalid field name"},
     {ERR_REASON(X509_R_INVALID_TRUST), "invalid trust"},
index 780386d530ce1a24f6bda8a9eed114f009468e53..75b39d17da250d30b67247165e7567cbf61ae1f6 100644 (file)
@@ -1092,6 +1092,7 @@ int ERR_load_X509_strings(void);
 # define X509_R_CRL_ALREADY_DELTA                         127
 # define X509_R_CRL_VERIFY_FAILURE                        131
 # define X509_R_IDP_MISMATCH                              128
+# define X509_R_INVALID_ATTRIBUTES                        135
 # define X509_R_INVALID_DIRECTORY                         113
 # define X509_R_INVALID_FIELD_NAME                        119
 # define X509_R_INVALID_TRUST                             123