]> granicus.if.org Git - neomutt/commitdiff
coverity: check for buffer underruns
authorRichard Russon <rich@flatcap.org>
Wed, 5 Apr 2017 14:34:28 +0000 (15:34 +0100)
committerRichard Russon <rich@flatcap.org>
Mon, 10 Apr 2017 13:32:13 +0000 (14:32 +0100)
Prevent buffer underruns caused by functions that can return -1.

bcache.c
copy.c
init.c

index a61cc8b882984523c7391755837dbc990a79b2cd..d9937f09a070a52a0d84aa876c4ae8c1cc0c1c34 100644 (file)
--- a/bcache.c
+++ b/bcache.c
@@ -65,9 +65,13 @@ static int bcache_path(ACCOUNT *account, const char *mailbox,
 
   mutt_encode_path (path, sizeof (path), NONULL (mailbox));
 
+  int plen = mutt_strlen(path);
+  if (plen == 0)
+    return -1;
+
   len = snprintf (dst, dstlen-1, "%s/%s%s%s", MessageCachedir,
                  host, path,
-                 (*path && path[mutt_strlen (path) - 1] == '/') ? "" : "/");
+                 (*path && path[plen - 1] == '/') ? "" : "/");
 
   mutt_debug (3, "bcache_path: rc: %d, path: '%s'\n", len, dst);
 
diff --git a/copy.c b/copy.c
index e8cf4960d742ab2e9d4999d5fb2e6c33935c0951..8f01e8c01171d90e137db1cd19833d14a50bc6a2 100644 (file)
--- a/copy.c
+++ b/copy.c
@@ -553,12 +553,16 @@ _mutt_copy_message (FILE *fpout, FILE *fpin, HEADER *hdr, BODY *body,
       char date[SHORT_STRING];
 
       mutt_make_date (date, sizeof (date));
-      date[5] = date[mutt_strlen (date) - 1] = '\"';
+      int dlen = mutt_strlen(date);
+      if (dlen == 0)
+        return -1;
+
+      date[5] = '\"';
+      date[dlen - 1] = '\"';
 
       /* Count the number of lines and bytes to be deleted */
       fseeko (fpin, body->offset, SEEK_SET);
-      new_lines = hdr->lines -
-       count_delete_lines (fpin, body, &new_length, mutt_strlen (date));
+      new_lines = hdr->lines - count_delete_lines(fpin, body, &new_length, dlen);
 
       /* Copy the headers */
       if (mutt_copy_header (fpin, hdr, fpout,
diff --git a/init.c b/init.c
index 7bcca05455c24b0566ee7c568111e931dc6752f1..83a61adf17a61d20c31678559b3e68ef6b519cee 100644 (file)
--- a/init.c
+++ b/init.c
@@ -3287,7 +3287,11 @@ int mutt_var_value_complete (char *buffer, size_t len, int pos)
 
     strfcpy (var, pt, sizeof (var));
     /* ignore the trailing '=' when comparing */
-    var[mutt_strlen (var) - 1] = 0;
+    int vlen = mutt_strlen(var);
+    if (vlen == 0)
+      return 0;
+
+    var[vlen - 1] = 0;
     if ((idx = mutt_option_index (var)) == -1)
     {
       if ((myvarval = myvar_get(var)) != NULL)