]> granicus.if.org Git - neomutt/commitdiff
Add mutt_array_size macro, change interactive_check_cert() to use it. (see #3899)
authorKevin McCarthy <kevin@8t8.us>
Wed, 30 Nov 2016 01:44:37 +0000 (17:44 -0800)
committerRichard Russon <rich@flatcap.org>
Fri, 30 Dec 2016 20:05:36 +0000 (20:05 +0000)
While I have reservations about the construct, it does make the
interactive_check_cert() menu->max and part loop less fragile.

lib.h
mutt_ssl.c

diff --git a/lib.h b/lib.h
index 109f5dd6c388892ceae4c453fe03f52f859280ff..7328bbcac7ef567d85a535948449540ec5f2167b 100644 (file)
--- a/lib.h
+++ b/lib.h
 # define MAX(a,b) ((a) < (b) ? (b) : (a))
 # define MIN(a,b) ((a) < (b) ? (a) : (b))
 
+/* Use this with care.  If the compiler can't see the array
+ * definition, it obviously won't produce a correct result. */
+#define mutt_array_size(x)  (sizeof (x) / sizeof ((x)[0]))
+
 /* For mutt_format_string() justifications */
 /* Making left 0 and center -1 is of course completely nonsensical, but
  * it retains compatibility for any patches that call mutt_format_string.
index aa762ec06b6202e381455ca055456a0f47804b49..696aa251a88bf789a535c44164b763881458f5d1 100644 (file)
@@ -1029,7 +1029,7 @@ static int interactive_check_cert (X509 *cert, int idx, int len)
   int done, row, i;
   FILE *fp;
 
-  menu->max = 23;
+  menu->max = mutt_array_size (part) * 2 + 9;
   menu->dialog = (char **) safe_calloc (1, menu->max * sizeof (char *));
   for (i = 0; i < menu->max; i++)
     menu->dialog[i] = (char *) safe_calloc (1, SHORT_STRING * sizeof (char));
@@ -1038,7 +1038,7 @@ static int interactive_check_cert (X509 *cert, int idx, int len)
   strfcpy (menu->dialog[row], _("This certificate belongs to:"), SHORT_STRING);
   row++;
   x509_subject = X509_get_subject_name (cert);
-  for (i = 0; i < 7; i++)
+  for (i = 0; i < mutt_array_size (part); i++)
     snprintf (menu->dialog[row++], SHORT_STRING, "   %s",
               x509_get_part (x509_subject, part[i]));
 
@@ -1046,7 +1046,7 @@ static int interactive_check_cert (X509 *cert, int idx, int len)
   strfcpy (menu->dialog[row], _("This certificate was issued by:"), SHORT_STRING);
   row++;
   x509_issuer = X509_get_issuer_name (cert);
-  for (i = 0; i < 7; i++)
+  for (i = 0; i < mutt_array_size (part); i++)
     snprintf (menu->dialog[row++], SHORT_STRING, "   %s",
               x509_get_part (x509_issuer, part[i]));