]> 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)
committerKevin McCarthy <kevin@8t8.us>
Wed, 30 Nov 2016 01:44:37 +0000 (17:44 -0800)
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 84d33b5e718d7676a6e36d540f545ed0143ca0bb..ee85cb90146b42e4c72b79be3e494995728cabc8 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 9c9c233554d28ccc2b34204728536b1cca4cdba1..92dc50cb4cdb95a834a2e8a92b2bd23a2c20db0f 100644 (file)
@@ -1017,7 +1017,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));
@@ -1026,7 +1026,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]));
 
@@ -1034,7 +1034,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]));