]> granicus.if.org Git - mutt/commitdiff
Make some scanf formats safe.
authorThomas Roessler <roessler@does-not-exist.org>
Wed, 6 Feb 2002 08:58:56 +0000 (08:58 +0000)
committerThomas Roessler <roessler@does-not-exist.org>
Wed, 6 Feb 2002 08:58:56 +0000 (08:58 +0000)
lib.h
smime.c

diff --git a/lib.h b/lib.h
index c6d5c2718f65e749fa5d33cf91d5d65ab0500735..d8d21bc2bc848b1402e2e44703d0ec9c58a57c88 100644 (file)
--- a/lib.h
+++ b/lib.h
 # define STRING          256
 # define SHORT_STRING    128
 
+/*
+ * Create a format string to be used with scanf.
+ * To use it, write, for instance, MUTT_FORMAT(HUGE_STRING).
+ * 
+ * See K&R 2nd ed, p. 231 for an explanation.
+ */
+# define _MUTT_FORMAT_2(a,b)   "%" ## a ## b
+# define _MUTT_FORMAT_1(a, b)  _MUTT_FORMAT_2(#a, b)
+# define MUTT_FORMAT(a)                _MUTT_FORMAT_1(a, "s")
+# define MUTT_FORMAT2(a,b)     _MUTT_FORMAT_1(a, b)
+
 # define FREE(x) safe_free((void **)x)
 # define NONULL(x) x?x:""
 # define ISSPACE(c) isspace((unsigned char)c)
diff --git a/smime.c b/smime.c
index 1425dc88f1ddbce280b45181aa571e917a098c04..fe57564583d300431999cee89f0f2d2a5cd86110 100644 (file)
--- a/smime.c
+++ b/smime.c
@@ -437,10 +437,10 @@ char* smime_ask_for_key (char *prompt, char *mailbox, short public)
     cur = 0;
     Table = safe_malloc(sizeof (smime_id) * cert_num);
     while (!feof(index)) {
-        numFields = fscanf (index, "%s %x.%i %s", fields[0], &hash,
+        numFields = fscanf (index, MUTT_FORMAT(STRING) " %x.%i " MUTT_FORMAT(STRING), fields[0], &hash,
           &hash_suffix, fields[2]);
         if (public)
-          fscanf (index, "%s %s\n", fields[3], fields[4]);
+          fscanf (index, MUTT_FORMAT(STRING) " " MUTT_FORMAT(STRING) "\n", fields[3], fields[4]);
   
       /* 0=email 1=name 2=nick 3=intermediate 4=trust */
       if (numFields < 2) continue;
@@ -514,7 +514,6 @@ char* smime_ask_for_key (char *prompt, char *mailbox, short public)
 
 
 
-
 char *smime_get_field_from_db (char *mailbox, char *query, short public, short may_ask)
 {
   int addr_len, query_len, found = 0, ask = 0, choice = 0;
@@ -555,8 +554,13 @@ char *smime_get_field_from_db (char *mailbox, char *query, short public, short m
     while (fgets (buf, sizeof (buf) - 1, fp) != NULL)
       if (mailbox && !(mutt_strncasecmp (mailbox, buf, addr_len)))
       {
-       numFields = sscanf (buf, "%s %s %s %s %s\n", fields[0], fields[1],
-                          fields[2], fields[3], fields[4]);
+       numFields = sscanf (buf, 
+                           MUTT_FORMAT(STRING) " " MUTT_FORMAT(STRING) " " 
+                           MUTT_FORMAT(STRING) " " MUTT_FORMAT(STRING) " " 
+                           MUTT_FORMAT(STRING) "\n", 
+                           fields[0], fields[1],
+                          fields[2], fields[3], 
+                           fields[4]);
        if (numFields < 2)
            continue;
        if (mailbox && public &&